Merge branch 'main' of interstellardevelopment.org:YasinOnm08/interstellar_ai
This commit is contained in:
		
						commit
						5ff6913426
					
				
					 6 changed files with 67 additions and 20 deletions
				
			
		
							
								
								
									
										1
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							|  | @ -38,6 +38,7 @@ next-env.d.ts | ||||||
| 
 | 
 | ||||||
| .idea/ | .idea/ | ||||||
| venv/ | venv/ | ||||||
|  | __pycache__/ | ||||||
| 
 | 
 | ||||||
| key.pem | key.pem | ||||||
| cert.pem | cert.pem | ||||||
|  |  | ||||||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										30
									
								
								py/ai.py
									
										
									
									
									
								
							
							
						
						
									
										30
									
								
								py/ai.py
									
										
									
									
									
								
							|  | @ -1,4 +1,5 @@ | ||||||
| from mistralai import Mistral | from mistralai import Mistral | ||||||
|  | from openai import OpenAI | ||||||
| import ollama | import ollama | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -12,19 +13,15 @@ class AI: | ||||||
|             options={"temperature": 0.5}, |             options={"temperature": 0.5}, | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|         for i in messages: |         with return_class.ai_response_lock: | ||||||
|             print(i) |  | ||||||
| 
 |  | ||||||
|             return_class.ai_response[access_token] = "" |             return_class.ai_response[access_token] = "" | ||||||
| 
 | 
 | ||||||
|         for chunk in stream: |         for chunk in stream: | ||||||
|             print(chunk['message']['content']) |             with return_class.ai_response_lock: | ||||||
|                 return_class.ai_response[access_token] += chunk['message']['content'] |                 return_class.ai_response[access_token] += chunk['message']['content'] | ||||||
| 
 | 
 | ||||||
|     @staticmethod |     @staticmethod | ||||||
|     def process_mistralai(model, messages, return_class, access_token): |     def process_mistralai(model, messages, return_class, access_token, api_key): | ||||||
|         with open("api_key.txt", 'r') as f: |  | ||||||
|             api_key = f.read().strip() |  | ||||||
| 
 | 
 | ||||||
|         client = Mistral(api_key=api_key) |         client = Mistral(api_key=api_key) | ||||||
| 
 | 
 | ||||||
|  | @ -33,7 +30,26 @@ class AI: | ||||||
|             messages=messages |             messages=messages | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|  |         with return_class.ai_response_lock: | ||||||
|             return_class.ai_response[access_token] = "" |             return_class.ai_response[access_token] = "" | ||||||
| 
 | 
 | ||||||
|         for chunk in stream_response: |         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): | ||||||
|  | 
 | ||||||
|  |         client = OpenAI(api_key=api_key) | ||||||
|  | 
 | ||||||
|  |         stream_response = client.chat.completions.create( | ||||||
|  |             model=model, | ||||||
|  |             messages=messages | ||||||
|  |         ) | ||||||
|  | 
 | ||||||
|  |         with return_class.ai_response_lock: | ||||||
|  |             return_class.ai_response[access_token] = "" | ||||||
|  | 
 | ||||||
|  |         for chunk in stream_response: | ||||||
|  |             with return_class.ai_response_lock: | ||||||
|  |                 return_class.ai_response[access_token] += chunk.choices[0].delta.content | ||||||
							
								
								
									
										30
									
								
								py/api.py
									
										
									
									
									
								
							
							
						
						
									
										30
									
								
								py/api.py
									
										
									
									
									
								
							|  | @ -1,6 +1,7 @@ | ||||||
| from flask import Flask, request, jsonify | from flask import Flask, request, jsonify | ||||||
| from flask_cors import CORS | from flask_cors import CORS | ||||||
| import secrets | import secrets | ||||||
|  | import threading | ||||||
| from ai import AI | from ai import AI | ||||||
| from db import DB | from db import DB | ||||||
| from OpenSSL import crypto | from OpenSSL import crypto | ||||||
|  | @ -8,11 +9,13 @@ from OpenSSL import crypto | ||||||
| 
 | 
 | ||||||
| class API: | class API: | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
|         self.crypt_size = 4096 |         self.crypt_size = 1 | ||||||
|         self.app = Flask(__name__) |         self.app = Flask(__name__) | ||||||
|         self.ai_response = {} |         self.ai_response = {} | ||||||
|         self.ai = AI() |         self.ai = AI() | ||||||
|         self.db = DB() |         self.db = DB() | ||||||
|  |         self.db.load_database() | ||||||
|  |         self.ai_response_lock = threading.Lock() | ||||||
|         CORS(self.app) |         CORS(self.app) | ||||||
| 
 | 
 | ||||||
|     def run(self): |     def run(self): | ||||||
|  | @ -26,12 +29,25 @@ class API: | ||||||
|         def send_ai(): |         def send_ai(): | ||||||
|             data = request.get_json() |             data = request.get_json() | ||||||
|             messages = data.get('messages') |             messages = data.get('messages') | ||||||
|  |             model_type = data.get('model_type') | ||||||
|             ai_model = data.get('ai_model') |             ai_model = data.get('ai_model') | ||||||
|             access_token = data.get('access_token') |             access_token = data.get('access_token') | ||||||
|             if access_token not in self.ai_response: |             if access_token not in self.ai_response: | ||||||
|                 return jsonify({'status': 401, 'error': 'Invalid access token'}) |                 return jsonify({'status': 401, 'error': 'Invalid access token'}) | ||||||
|             self.ai.process_local(ai_model, messages, self, access_token) | 
 | ||||||
|  |             if model_type == "local": | ||||||
|  |                 thread = threading.Thread(target=self.ai.process_local, args=(ai_model, messages, self, access_token)) | ||||||
|  |                 thread.start() | ||||||
|  |                 thread.join() | ||||||
|                 return jsonify({'status': 200}) |                 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.start() | ||||||
|  |                 thread.join() | ||||||
|  |                 return jsonify({'status': 200}) | ||||||
|  | 
 | ||||||
|  |             return jsonify({'status': 401, 'error': 'Invalid AI model type'}) | ||||||
| 
 | 
 | ||||||
|         @self.app.route('/interstellar/api/ai_get', methods=['GET']) |         @self.app.route('/interstellar/api/ai_get', methods=['GET']) | ||||||
|         def get_ai(): |         def get_ai(): | ||||||
|  | @ -46,13 +62,13 @@ class API: | ||||||
|             data = request.args.get('data') |             data = request.args.get('data') | ||||||
|             if action == "create_account": |             if action == "create_account": | ||||||
|                 self.db.add_user(data) |                 self.db.add_user(data) | ||||||
|             if action == "change_password": |             elif action == "change_password": | ||||||
|                 self.db.update_password(data) |                 self.db.update_password(data) | ||||||
|             if action == "get_data": |             elif action == "get_data": | ||||||
|                 self.db.get_data(data) |                 self.db.get_data(data) | ||||||
|             if action == "change_data": |             elif action == "change_data": | ||||||
|                 self.db.change_data(data) |                 self.db.change_data(data) | ||||||
|             if action == "check_credentials": |             elif action == "check_credentials": | ||||||
|                 self.db.check_credentials(data) |                 self.db.check_credentials(data) | ||||||
| 
 | 
 | ||||||
|         email_address = "emailAddress" |         email_address = "emailAddress" | ||||||
|  | @ -89,7 +105,7 @@ class API: | ||||||
|             f.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, k).decode("utf-8")) |             f.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, k).decode("utf-8")) | ||||||
| 
 | 
 | ||||||
|         ssl_context = ("cert.pem", "key.pem") |         ssl_context = ("cert.pem", "key.pem") | ||||||
|         self.app.run(debug=True, host='0.0.0.0', port=5000, ssl_context=ssl_context) |         self.app.run(debug=True, host='0.0.0.0', port=5000) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||||
|  |  | ||||||
							
								
								
									
										15
									
								
								py/db.py
									
										
									
									
									
								
							
							
						
						
									
										15
									
								
								py/db.py
									
										
									
									
									
								
							|  | @ -1,5 +1,5 @@ | ||||||
| import json |  | ||||||
| import hashlib | import hashlib | ||||||
|  | import json | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class DB: | class DB: | ||||||
|  | @ -26,6 +26,7 @@ class DB: | ||||||
|             return False |             return False | ||||||
| 
 | 
 | ||||||
|         self.database[username]['data'] = data |         self.database[username]['data'] = data | ||||||
|  |         self.save_database() | ||||||
|         return True |         return True | ||||||
| 
 | 
 | ||||||
|     def update_password(self, data): |     def update_password(self, data): | ||||||
|  | @ -36,6 +37,7 @@ class DB: | ||||||
| 
 | 
 | ||||||
|         hashed_new_password = self.hash_password(new_password) |         hashed_new_password = self.hash_password(new_password) | ||||||
|         self.database[username].update({"hashed_password": hashed_new_password}) |         self.database[username].update({"hashed_password": hashed_new_password}) | ||||||
|  |         self.save_database() | ||||||
|         return True |         return True | ||||||
| 
 | 
 | ||||||
|     def check_credentials(self, data): |     def check_credentials(self, data): | ||||||
|  | @ -55,3 +57,14 @@ class DB: | ||||||
| 
 | 
 | ||||||
|         send_back = self.database[username].get['data'] |         send_back = self.database[username].get['data'] | ||||||
|         return send_back |         return send_back | ||||||
|  | 
 | ||||||
|  |     def save_database(self): | ||||||
|  |         with open("database.json", 'w') as file: | ||||||
|  |             json.dump(self.database, file) | ||||||
|  | 
 | ||||||
|  |     def load_database(self): | ||||||
|  |         try: | ||||||
|  |             with open("database.json", 'r') as file: | ||||||
|  |                 self.database = json.load(file) | ||||||
|  |         except FileNotFoundError: | ||||||
|  |             pass | ||||||
|  |  | ||||||
|  | @ -2,4 +2,5 @@ flask | ||||||
| flask-cors | flask-cors | ||||||
| ollama | ollama | ||||||
| mistralai | mistralai | ||||||
|  | openai | ||||||
| pyOpenSSL | pyOpenSSL | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue