Spaces:
Sleeping
Sleeping
from enum import Enum, auto | |
from openai import OpenAI | |
import anthropic | |
def formatPrompt(role, content): | |
return {"role": role, "content": content} | |
class AI(Enum): | |
OPEN_AI = "OPEN_AI" | |
CLAUDE = "CLAUDE" | |
GEMINI = "GEMINI" | |
OLLAMA = "OLLAMA" | |
class AISystem: | |
def __init__(self, processor, system_string="", model="", type=AI.OPEN_AI): | |
""" | |
Initialize the ChatSystem with a system string and empty messages list. | |
:param system_string: Optional initial system string description | |
""" | |
self.processor = processor | |
self.system = system_string | |
self.model = model | |
self.messages = [] | |
self.type = type | |
def call(self, message): | |
self.messages.append(message) | |
toSend = self.messages | |
if self.type == AI.CLAUDE: | |
message = self.processor.messages.create( | |
model=self.model, | |
system=self.system, | |
messages=self.messages, | |
max_tokens=500 | |
) | |
return message.content[0].text | |
else: | |
toSend.insert(0,self.system) | |
completion = self.processor.chat.completions.create( | |
model=self.model, | |
messages= toSend | |
) | |
return completion.choices[0].message.content | |
def stream(self, message, usingGradio=False): | |
self.messages.append(message) | |
if self.type == AI.CLAUDE: | |
result = self.processor.messages.stream( | |
model=self.model, | |
system=self.system, | |
messages=self.messages, | |
temperature=0.7, | |
max_tokens=500 | |
) | |
response_chunks = "" | |
with result as stream: | |
for text in stream.text_stream: | |
if usingGradio: | |
response_chunks += text or "" | |
yield response_chunks | |
else: | |
yield text | |
else: | |
toSend = self.messages | |
toSend.insert(0,self.system) | |
stream = self.processor.chat.completions.create( | |
model=self.model, | |
messages= toSend, | |
stream=True | |
) | |
response_chunks = "" | |
for chunk in stream: | |
if usingGradio: | |
response_chunks += chunk.choices[0].delta.content or "" # need to yield the total cumulative results to gradio and not chunk by chunk | |
yield response_chunks | |
else: | |
yield chunk.choices[0].delta.content | |