diff --git a/py/ai.py b/py/ai.py index 0207180..d4cd09d 100644 --- a/py/ai.py +++ b/py/ai.py @@ -4,10 +4,11 @@ import google.generativeai as genai import anthropic import ollama - class AI: @staticmethod def process_local(model, messages, return_class, access_token): + """Process chat messages using the Ollama model locally.""" + # Stream the chat response from the Ollama model stream = ollama.chat( model=model, messages=messages, @@ -15,50 +16,61 @@ class AI: options={"temperature": 0.5}, ) + # Initialize the AI response for the given access token with return_class.ai_response_lock: return_class.ai_response[access_token] = "" + # Collect the response chunks and append to the response for the given access token for chunk in stream: with return_class.ai_response_lock: return_class.ai_response[access_token] += chunk["message"]["content"] @staticmethod def process_mistralai(model, messages, return_class, access_token, api_key): + """Process chat messages using the Mistral AI model.""" client = Mistral(api_key=api_key) + # Stream the chat response from the Mistral model stream_response = client.chat.stream(model=model, messages=messages) + # Initialize the AI response for the given access token with return_class.ai_response_lock: return_class.ai_response[access_token] = "" + # Collect the response chunks and append to the response for the given access token for chunk in stream_response: with return_class.ai_response_lock: - return_class.ai_response[access_token] += chunk.data.choices[ - 0 - ].delta.content + return_class.ai_response[access_token] += chunk.data.choices[0].delta.content @staticmethod def process_openai(model, messages, return_class, access_token, api_key): + """Process chat messages using the OpenAI model.""" client = OpenAI(api_key=api_key) + # Stream the chat response from the OpenAI model stream_response = client.chat.completions.create( model=model, messages=messages, stream=True ) + # Initialize the AI response for the given access token with return_class.ai_response_lock: return_class.ai_response[access_token] = "" + # Collect the response chunks and append to the response for the given access token for chunk in stream_response: with return_class.ai_response_lock: return_class.ai_response[access_token] += chunk.choices[0].delta.content @staticmethod def process_anthropic(model, messages, return_class, access_token, api_key): + """Process chat messages using the Anthropic model.""" client = anthropic.Anthropic(api_key=api_key) + # Initialize the AI response for the given access token with return_class.ai_response_lock: return_class.ai_response[access_token] = "" + # Stream the chat response from the Anthropic model with client.messages.stream( max_tokens=1024, model=model, @@ -70,24 +82,27 @@ class AI: @staticmethod def process_google(model, messages, return_class, access_token, api_key): - message = messages[-1]["content"] - messages.pop() + """Process chat messages using the Google Generative AI model.""" + message = messages[-1]["content"] # Get the latest message content + messages.pop() # Remove the latest message from the list + # Prepare messages for the Google Generative AI format for msg in messages: msg["parts"] = msg.pop()["content"] + # Change 'assistant' role to 'model' for compatibility for msg in messages: if msg["role"] == "assistant": msg["role"] = "model" + # Configure the Google Generative AI client genai.configure(api_key=api_key) + # Start a chat session with the specified model and message history model = genai.GenerativeModel(model) + chat = model.start_chat(history=messages) - chat = model.start_chat( - history=messages, - ) - + # Send the message and stream the response response = chat.send_message(message, stream=True) for chunk in response: return_class.ai_response[access_token] += chunk.text