diff --git a/py/ai.py b/py/ai.py index a8c5537..5879e9d 100644 --- a/py/ai.py +++ b/py/ai.py @@ -1,5 +1,6 @@ from mistralai import Mistral from openai import OpenAI +import google.generativeai as genai import anthropic import ollama @@ -72,3 +73,34 @@ class AI: for text in stream.text_stream: with return_class.ai_response_lock: return_class.ai_response[access_token] += text + + @staticmethod + def process_google(model, messages, return_class, access_token, api_key): + + message = messages[-1]['content'] + messages.pop() + + system = None + if messages and messages[0]['role'] == 'system': + system = messages[0]['content'] + messages.pop(0) + + for msg in messages: + msg['parts'] = msg.pop('content') + + for msg in messages: + if msg['role'] == 'assistant': + msg['role'] = 'model' + + genai.configure(api_key=api_key) + + model = genai.GenerativeModel(model) + + chat = model.start_chat( + system_instruction=system, + history=messages + ) + + response = chat.send_message(message, stream=True) + for chunk in response: + return_class.ai_response[access_token] += chunk.text diff --git a/py/api.py b/py/api.py index be44561..6c2d243 100644 --- a/py/api.py +++ b/py/api.py @@ -42,19 +42,22 @@ class API: return jsonify({'status': 200}) elif model_type == "mistral": api_key = data.get('api_key') - thread = threading.Thread(target=self.ai.process_mistralai, args=(ai_model, messages, self, access_token, api_key)) + thread = threading.Thread(target=self.ai.process_mistralai, + args=(ai_model, messages, self, access_token, api_key)) thread.start() thread.join() return jsonify({'status': 200}) elif model_type == "openai": api_key = data.get('api_key') - thread = threading.Thread(target=self.ai.process_openai, args=(ai_model, messages, self, access_token, api_key)) + thread = threading.Thread(target=self.ai.process_openai, + args=(ai_model, messages, self, access_token, api_key)) thread.start() thread.join() return jsonify({'status': 200}) elif model_type == "anthropic": api_key = data.get('api_key') - thread = threading.Thread(target=self.ai.process_anthropic, args=(ai_model, messages, self, access_token, api_key)) + thread = threading.Thread(target=self.ai.process_anthropic, + args=(ai_model, messages, self, access_token, api_key)) thread.start() thread.join() return jsonify({'status': 200}) @@ -118,3 +121,7 @@ class API: ssl_context = ("cert.pem", "key.pem") self.app.run(debug=True, host='0.0.0.0', port=5000) + + +api = API() +api.run() diff --git a/py/requirements.txt b/py/requirements.txt index 8a79dc1..bd93ad7 100644 --- a/py/requirements.txt +++ b/py/requirements.txt @@ -4,5 +4,4 @@ ollama mistralai openai anthropic -pyOpenSSL -pywebview \ No newline at end of file +pyOpenSSL \ No newline at end of file diff --git a/py/run.py b/py/run.py deleted file mode 100644 index 612d72e..0000000 --- a/py/run.py +++ /dev/null @@ -1,7 +0,0 @@ -import os -import webview - -os.system("python api.py") -webview.create_window('Hello world', 'http://localhost:3000') -webview.start() - diff --git a/py/webapp.py b/py/webapp.py deleted file mode 100644 index 8b13789..0000000 --- a/py/webapp.py +++ /dev/null @@ -1 +0,0 @@ -