VReader/vreader/oai.py
Evan Reichard 1930dfc099
All checks were successful
continuous-integration/drone/push Build is passing
[improve] mobile css, [fix] sorting issue
2023-11-12 16:04:31 -05:00

62 lines
1.7 KiB
Python

from dataclasses import dataclass
from textwrap import indent
from typing import Any, List
import json
import openai
PROMPT_TEMPLATE = """
The following is a video transcription. Write a fully comprehensive article in markdown appropriately utilizing subsections. Do not reference the video. Be sure to only use the following transcription to write the article:
{context}
"""
@dataclass
class ChatCompletion:
id: str
object: str
created: int
model: str
choices: List[dict]
usage: dict
class OpenAIConnector:
def __init__(self, api_key: str | None):
if api_key is None:
raise RuntimeError("OPENAI_API_KEY Required")
# self.model = "gpt-3.5-turbo-16k"
self.model = "gpt-3.5-turbo-1106"
openai.api_key = api_key
def query(self, context: str) -> Any:
# Create Prompt
prompt = PROMPT_TEMPLATE.format(context = context)
messages = [{"role": "user", "content": prompt}]
print("[OpenAIConnector] Running OAI Query")
# Article Call
response: ChatCompletion = openai.ChatCompletion.create( # type: ignore
model=self.model,
messages=messages
)
# Markdown Data
content = response.choices[0]["message"]["content"]
title = self.get_title(content)
print("[OpenAIConnector] Completed OAI Query:\n", indent(json.dumps({ "usage": response.usage }, indent=2), ' ' * 2))
# Return Response
return { "title": title, "content": content }
def get_title(self, markdown: str):
lines = markdown.split('\n')
for line in lines:
if line.startswith("# "):
return line.strip("# ").strip()
return None