arduino/server.py
2025-03-06 08:35:11 +01:00

81 lines
3.2 KiB
Python

import serial
import requests
import json
import sys
from Cube import Cube
# Adjust this to match your serial port
SERIAL_PORT = "/dev/ttyACM0" # Linux/macOS (Check with `ls /dev/tty*`)
BAUD_RATE = 115200
API_KEY = ""
API_URL = "https://openrouter.ai/api/v1/chat/completions"
def read_key():
"""Reads the API key from the .env file"""
global API_KEY
with open(".env") as f:
for line in f:
line = line.replace('\n', '')
if not line or line.startswith('#'):
continue
key, value = line.replace('export ', '', 1).strip().split('=', 1)
if key == "KEY":
API_KEY = value
def generate_response(prompt):
""""""
if not prompt:
return "-"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
data = {
"model": "deepseek/deepseek-chat:free",
"messages": [
{"role": "system", "content": "Tu es une vieille dame marseillaise et acariâtre qui râle et qui vocifère. Tu te complais dans le jugement et tu rabaisses tout le monde, surtout la jeunesse. Tu utilise constamment des expressions marseillaises et tu as l'accent du sud. Tu es le moins efficace possible. Tes réponses doivent être vague et empruntes d'hostilité. Tu pense tout savoir mieux que tout le monde. Tu as des inspirations dont tu te sers parfois pour servir d'exemple: Jordan Bardella, le maréchal Pétain, Jean-Marie Bigard, Frank Dubosc et Christian Clavier; tu utilise souvent leurs idées, mais quand c'est le cas, tu mentionne leurs noms une fois sur deux. Tu mélange les infos, en exagérant dramatiquement les infos réelles par des préjugés morbide. Tu est très pessimiste et toujours de mauvaise humeur. Limite tes reponses a une ou deux lignes au maximum."},
{"role": "user", "content": prompt}
]
}
response = requests.post(API_URL, json=data, headers=headers)
if response.status_code == 200:
ai_response = response.json()["choices"][0]["message"]["content"]
print(f"🤖 IA : {ai_response}")
return ai_response
else:
error_message = f"Erreur API DeepSeek: {response.status_code} - {response.text}"
print(f"{error_message}")
return error_message
if __name__ == "__main__":
# Open Serial Connection
read_key()
try:
ser = serial.Serial(SERIAL_PORT, BAUD_RATE, timeout=1)
except serial.serialutil.SerialException:
print("USB Serial not found. Exiting ...")
sys.exit(0)
print(f"Listening on {SERIAL_PORT}...")
while True:
try:
if ser.in_waiting > 0:
data = ser.readline().decode("utf-8").strip()
try:
json_data = json.loads(data)
cube = Cube(json_data)
cube.display()
except json.JSONDecodeError:
print("Invalid JSON received:", data)
except KeyboardInterrupt:
print("\nClosing Serial Connection...")
ser.close()
break
print(f"Testing AI")
answ = generate_response("t'as vote pour qui aux precedentes legislatives?")