main.py aktualisiert
This commit is contained in:
12
main.py
12
main.py
@@ -26,6 +26,7 @@ templates = Jinja2Templates(directory="templates")
|
|||||||
SSH_KEY = os.path.expanduser("~/.ssh/id_rsa")
|
SSH_KEY = os.path.expanduser("~/.ssh/id_rsa")
|
||||||
DB_PATH = "cluster.db"
|
DB_PATH = "cluster.db"
|
||||||
chat_history = []
|
chat_history = []
|
||||||
|
SYSTEM_PROMPT_TEMPLATE = os.getenv("SYSTEM_PROMPT", "Du bist ein Helfer. Nodes: {node_info}")
|
||||||
|
|
||||||
# --- KI KONFIGURATION (Werte aus .env laden) ---
|
# --- KI KONFIGURATION (Werte aus .env laden) ---
|
||||||
AI_PROVIDER = os.getenv("AI_PROVIDER", "google").lower()
|
AI_PROVIDER = os.getenv("AI_PROVIDER", "google").lower()
|
||||||
@@ -46,7 +47,9 @@ def get_system_prompt():
|
|||||||
node_info = ""
|
node_info = ""
|
||||||
for n in nodes:
|
for n in nodes:
|
||||||
node_info += f"- Name: {n['name']}, IP: {n['ip']}, User: {n['user']}\n"
|
node_info += f"- Name: {n['name']}, IP: {n['ip']}, User: {n['user']}\n"
|
||||||
return f"""Du bist der Pi-Orchestrator KI-Assistent. Deine Aufgabe ist es, Befehle auf Raspberry Pis auszuführen. Du KANNST und SOLLST Befehle ausführen! Hier sind die aktuell verbundenen Nodes: {node_info} . WENN der Nutzer dich bittet, etwas zu tun (z.B. ping, update, docker installieren), dann formuliere erst eine kurze Antwort und frage nochmal nach ob du dies dann auf dem gewünschten node durchführen sollst. Du prüfst vorher noch, ob du auf dem gewünschten node sudo rechte ohne eingäbe eines passwortes hast, sofern diese notwendig sind. Erst nach einer positiven Bestätigung darfst du es ausführen und fügst am Ende die Befehle in genau diesem XML-Format hinzu: <EXECUTE target="IP_ADRESSE">befehl</EXECUTE> .WICHTIG: Verwende als target IMMER die IP-Adresse des Nodes. Bei Befehlen wie 'ping' oder 'top', die nicht enden, MUSS ein Limit gesetzt werden (z.B. ping -c 4 IP).Beispielantwort für 'sende einen ping an pi-06': Ich starte den Ping an pi-06 für dich. <EXECUTE target="192.168.1.10">ping -c 4 192.168.1.10</EXECUTE>"""
|
|
||||||
|
# Ersetzt den Platzhalter im Template mit den echten Node-Daten
|
||||||
|
return SYSTEM_PROMPT_TEMPLATE.replace("{node_info}", node_info)
|
||||||
|
|
||||||
# --- KI FUNKTIONEN ---
|
# --- KI FUNKTIONEN ---
|
||||||
|
|
||||||
@@ -262,6 +265,13 @@ async def terminal_websocket(websocket: WebSocket, ip: str):
|
|||||||
@app.websocket("/ws/chat")
|
@app.websocket("/ws/chat")
|
||||||
async def chat_endpoint(websocket: WebSocket):
|
async def chat_endpoint(websocket: WebSocket):
|
||||||
await websocket.accept()
|
await websocket.accept()
|
||||||
|
|
||||||
|
# Check ob Key vorhanden ist
|
||||||
|
if AI_PROVIDER == "google" and not GOOGLE_API_KEY:
|
||||||
|
await websocket.send_text("⚠️ **Konfigurationsfehler:** Kein GOOGLE_API_KEY in der `.env` gefunden!")
|
||||||
|
elif AI_PROVIDER == "openai" and not OPENAI_API_KEY:
|
||||||
|
await websocket.send_text("⚠️ **Konfigurationsfehler:** Kein OPENAI_API_KEY in der `.env` gefunden!")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
while True:
|
while True:
|
||||||
user_msg = await websocket.receive_text()
|
user_msg = await websocket.receive_text()
|
||||||
|
|||||||
Reference in New Issue
Block a user