From a726b99d2f6ec75bc4e10a22111171088f0ebd32 Mon Sep 17 00:00:00 2001 From: "info@pi-farm.de" Date: Wed, 4 Mar 2026 22:50:33 +0000 Subject: [PATCH] main.py aktualisiert --- main.py | 45 +++++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/main.py b/main.py index 46c3d82..385d8b9 100644 --- a/main.py +++ b/main.py @@ -256,36 +256,41 @@ async def chat_endpoint(websocket: WebSocket): try: while True: user_msg = await websocket.receive_text() - - # 1. Dynamischen Prompt laden sys_prompt = get_system_prompt() - - # 2. KI fragen ai_response = await get_ai_response(user_msg, sys_prompt) - # 3. XML-Tags auslesen (Befehl) + # Befehle extrahieren commands_to_run = re.findall(r'(.*?)', ai_response, re.IGNORECASE | re.DOTALL) - - # 4. XML-Tags für das UI ausblenden, damit der Chat sauber aussieht clean_chat_msg = re.sub(r'.*?', '', ai_response, flags=re.IGNORECASE | re.DOTALL).strip() if clean_chat_msg: await websocket.send_text(clean_chat_msg) - # 5. Gefundene Befehle an den Pi schicken! - for target_ip, cmd in commands_to_run: - target_ip = target_ip.strip() - cmd = cmd.strip() + if commands_to_run: + # Liste für alle laufenden Tasks erstellen + tasks = [] + for target_ip, cmd in commands_to_run: + conn = get_db() + node = conn.execute('SELECT * FROM nodes WHERE ip = ? OR name = ?', (target_ip.strip(), target_ip.strip())).fetchone() + conn.close() + + if node: + # Wir erstellen den Task, starten ihn aber noch nicht separat + tasks.append(run_remote_task(node['ip'], node['user'], cmd.strip(), "KI-Kommando")) - conn = get_db() - node = conn.execute('SELECT * FROM nodes WHERE ip = ? OR name = ?', (target_ip, target_ip)).fetchone() - conn.close() - - if node: - # Leite Aufgabe an die System Logs weiter - asyncio.create_task(run_remote_task(node['ip'], node['user'], cmd, "KI-Kommando")) - else: - await websocket.send_text(f"⚠️ Konnte Node {target_ip} in DB nicht finden.") + if tasks: + # Dem Nutzer im Chat kurz Bescheid geben + await websocket.send_text("ℹ️ *Warte auf Rückmeldungen der Nodes...*") + + # Jetzt werden alle SSH-Befehle gleichzeitig gestartet und abgewartet + await asyncio.gather(*tasks) + + # Sobald asyncio.gather fertig ist, geht es hier weiter mit dem Follow-up: + follow_up_prompt = "Die Befehle wurden ausgeführt. Bitte fasse die Ergebnisse kurz zusammen." + ai_summary = await get_ai_response(follow_up_prompt, sys_prompt) + + await websocket.send_text("--- Ergebnis-Zusammenfassung ---") + await websocket.send_text(ai_summary) except Exception as e: print(f"Chat Fehler: {e}")