main.py aktualisiert

This commit is contained in:
2026-03-04 22:50:33 +00:00
parent 29a2bd6bb0
commit a726b99d2f

43
main.py
View File

@@ -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 (<EXECUTE target="IP">Befehl</EXECUTE>)
# Befehle extrahieren
commands_to_run = re.findall(r'<EXECUTE target="(.*?)">(.*?)</EXECUTE>', 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'<EXECUTE.*?>.*?</EXECUTE>', '', 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()
conn = get_db()
node = conn.execute('SELECT * FROM nodes WHERE ip = ? OR name = ?', (target_ip, target_ip)).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"))
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}")