feat: Add live streaming to Chat page
- Replace blocking execute_agent_task() with live subprocess streaming - Use Popen() to read opencode output line-by-line in real-time - Send 'chunk' events to frontend as agent thinks - Frontend appends chunks incrementally for live response - Matches Orchestrator's streaming UX - No more waiting for complete response before seeing output
This commit is contained in:
parent
d620f496a8
commit
e2a853ffde
3 changed files with 408 additions and 7 deletions
|
|
@ -0,0 +1,344 @@
|
||||||
|
# 📊 ZUSAMMENFASSUNG DIVERSITY-BALL WIEN 2026
|
||||||
|
**Stand:** 21. Februar 2026 | **Erstellt von:** Zusammenfasser-Agent
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 EXECUTIVE SUMMARY
|
||||||
|
|
||||||
|
Das Agenten-System hat in kürzester Zeit **8 substantielle Fachkonzepte** für den Diversity-Ball Wien entwickelt. Die **Grundplanung ist solide**, aber es gibt **kritische Koordinationsprobleme**, die sofortige Eskalation erfordern.
|
||||||
|
|
||||||
|
| Kennzahl | Status |
|
||||||
|
|----------|--------|
|
||||||
|
| **Agenten aktiv** | 8 von 13 (mit Output) |
|
||||||
|
| **Deliverables** | 11 umfassende Dokumente |
|
||||||
|
| **Größtes Risiko** | Fehlende Agenten-Abstimmung |
|
||||||
|
| **Kritische Deadline** | 28. Februar 2026 (Rathaus-Verhandlung) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📋 WAS WURDE BISHER GELEISTET
|
||||||
|
|
||||||
|
### ✅ Abgeschlossene Fachkonzepte
|
||||||
|
|
||||||
|
| Agent | Deliverable | Qualität | Status |
|
||||||
|
|-------|-------------|----------|--------|
|
||||||
|
| **budget_manager** | Vollständiger Budgetplan (750k€) | 8/10 | Vorlage, braucht Abstimmung |
|
||||||
|
| **catering_manager** | Komplettes Catering-Konzept | 9/10 | Ready, 3.500 Gäste geplant |
|
||||||
|
| **location_manager** | Rathaus-Konzept + MA 36 Checkliste | 9/10 | Critical Path: bis 28.2. handeln |
|
||||||
|
| **program_manager** | 8h Programmablauf (17:00-02:00) | 7/10 | Minutengenau, braucht Budget-Check |
|
||||||
|
| **tax_advisor** | Steuerliche Komplettanalyse | 9/10 | Gemeinnützigkeit klär, Tombola 5% |
|
||||||
|
| **musik_rechte_advisor** | AKM/LSG/Austro-Mechana Analyse | 9/10 | Ready, exakte Tarifberechnung |
|
||||||
|
| **social_media_manager** | Marketing-Strategie 6 Monate | 9/10 | 1.182 Zeilen, aber falsches Datum |
|
||||||
|
| **researcher** | Diversity-Trends + Benchmarking | 9/10 | Opernball-Vergleich, Ticketing-Analyse |
|
||||||
|
|
||||||
|
### ❌ Noch nicht aktiviert
|
||||||
|
|
||||||
|
| Agent | Rolle | Priorität | Grund |
|
||||||
|
|-------|-------|-----------|-------|
|
||||||
|
| **negotiator** | Vertragsverhandlungen | 🔴 SOFORT | Rathaus-Deadline 28.2.2026! |
|
||||||
|
| **zusammenfasser** | Status-Reports | 🟡 WICHTIG | Wurde erst jetzt eingesetzt |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 💰 BUDGET-SITUATION (KRITISCH!)
|
||||||
|
|
||||||
|
### Die Ausgangslage
|
||||||
|
|
||||||
|
| Position | Betrag | Anmerkung |
|
||||||
|
|----------|--------|----------|
|
||||||
|
| **Zielbudget** | 750.000 € | Vorgabe |
|
||||||
|
| **Gesamtausgaben (Expected)** | 1.127.428 € | ⚠️ 50% ÜBER BUDGET! |
|
||||||
|
| **Ticketeinnahmen (85% Auslastung)** | 636.650 € | @ 214€/Ticket |
|
||||||
|
| **Geplantes Sponsoring** | 250.000 € | Optimistisch |
|
||||||
|
| **Deckungslücke** | -224.378 € | Muss durch Förderungen gedeckt werden |
|
||||||
|
|
||||||
|
### Budget-Struktur
|
||||||
|
|
||||||
|
```
|
||||||
|
AUSGABEN (Largest Drivers):
|
||||||
|
┌─────────────────────────────────────────┐
|
||||||
|
│ 1. Location (Rathaus): 395.000€ (49,8%) │
|
||||||
|
│ 2. Catering: 370.000€ (32,8%) │
|
||||||
|
│ 3. Entertainment: 61.000€ (5,4%) │
|
||||||
|
│ 4. Technik: 60.000€ (5,3%) │
|
||||||
|
│ 5. Marketing: 37.500€ (3,3%) │
|
||||||
|
│ 6. Sonstige: 163.928€ (14,5%) │
|
||||||
|
└─────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### 🚨 KOSTENPROBLEM: Keine Abstimmung zwischen Agenten!
|
||||||
|
|
||||||
|
| Agent | Catering-Kosten | Veranstaltungs-Budget |
|
||||||
|
|-------|-----------------|----------------------|
|
||||||
|
| budget_manager | 420.000€ (ohne Sponsor) | **1.127.428€** |
|
||||||
|
| catering_manager | 320.800€ | — |
|
||||||
|
| program_manager | 280.000€ | **750.000€** |
|
||||||
|
|
||||||
|
**→ Die Agenten arbeiten mit unterschiedlichen Zahlen und haben sich NICHT abgestimmt!**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📅 EVENT-DETAILS (Zentrale Parameter)
|
||||||
|
|
||||||
|
| Parameter | Wert | Notiz |
|
||||||
|
|-----------|------|-------|
|
||||||
|
| **Datum** | Samstag, 5. September 2026 | ⚠️ Diskrepanz: ORCHESTRATION.md sagt 1. März! |
|
||||||
|
| **Ort** | Wiener Rathaus, Festsaal | Größte Location Wiens (3.500 Plätze) |
|
||||||
|
| **Gäste** | 3.500 Personen | Expected 85% Auslastung = 2.975 Personen |
|
||||||
|
| **Ticketpreis** | 214 € (Einheitspreis) | 214€/Person x 3.500 = 749.000€ max. Einnahmen |
|
||||||
|
| **Uhrzeit** | 18:00 – 02:00 Uhr | 8h Event, volle Nacht |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🏆 PROGRAMM-ÜBERBLICK (8-Stunden-Event)
|
||||||
|
|
||||||
|
### Zeitplan (Simplified)
|
||||||
|
|
||||||
|
| Phase | Zeit | Highlight |
|
||||||
|
|-------|------|-----------|
|
||||||
|
| **Eröffnung** | 18:00–19:00 | Sektempfang, Einmarsch, Eröffnungsrede |
|
||||||
|
| **Dinner** | 19:00–21:30 | 3-Gang-Menü (Rathauskeller), Walzer |
|
||||||
|
| **Unterhaltung** | 21:30–22:15 | Diversity-Dance-Showcase (Highlight!) |
|
||||||
|
| **Awards** | 22:15–23:30 | 5 Diversity-Awards + Lifetime Achievement |
|
||||||
|
| **Tombola & Party** | 23:30–01:30 | Losziehung, Charity-Auktion, DJ |
|
||||||
|
| **Abschluss** | 01:30–02:00 | Letzter Walzer, Dank, Abgang |
|
||||||
|
|
||||||
|
### Diversity-Elemente
|
||||||
|
|
||||||
|
✅ ÖGS-Dolmetscher durchgehend
|
||||||
|
✅ Rollstuhl-Walzer in Eröffnung
|
||||||
|
✅ Induktionsanlage für Hörgeschädigte
|
||||||
|
✅ 5 Menü-Varianten (vegetarisch, vegan, glutenfrei, halal, koscher)
|
||||||
|
✅ 5 Award-Kategorien (LGBTQ+, Ethnie, Behinderung, Alter, Geschlecht)
|
||||||
|
✅ Tanzshow mit weltweiten Tanzstilen
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🍽️ CATERING-DETAILS (3.500 Personen)
|
||||||
|
|
||||||
|
### Menü-Struktur
|
||||||
|
|
||||||
|
| Gang | Standard | Vegetarisch | Vegan | Glutenfrei | Halal/Koscher |
|
||||||
|
|------|----------|-------------|-------|-----------|---------------|
|
||||||
|
| Vorspeise | Beef-Tatar | Burrata | Gazpacho | Spezial | Separat |
|
||||||
|
| Hauptgang | Tafelspitz | Wellington | Linsen-Risotto | Tafelspitz (GF) | Lammmedaillons |
|
||||||
|
| Dessert | Topfenknödel | Topfenknödel | Schokoladenmousse | Panna Cotta | Topfenknödel |
|
||||||
|
| **Personal** | **168 Servicekräfte** | | | | |
|
||||||
|
|
||||||
|
### Ernährungsverteilung (geplant)
|
||||||
|
|
||||||
|
- Standard: 50% (1.750 Gäste)
|
||||||
|
- Vegetarisch: 20% (700 Gäste)
|
||||||
|
- Vegan: 15% (525 Gäste)
|
||||||
|
- Glutenfrei: 10% (350 Gäste)
|
||||||
|
- Halal/Koscher: 5% (175 Gäste)
|
||||||
|
|
||||||
|
**Kosten:** 370.000–420.000 € (mit/ohne Getränke-Sponsor)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎪 UNTERSTÜTZUNG DURCH AGENTEN
|
||||||
|
|
||||||
|
### Personal (gesamter Event)
|
||||||
|
|
||||||
|
```
|
||||||
|
Total ~354 Personen:
|
||||||
|
├─ Catering: 168 Servicekräfte
|
||||||
|
├─ Security: 50 Ordner
|
||||||
|
├─ Künstler: ~60 (Orchester, Tänzer, DJ)
|
||||||
|
├─ Technik: 20 Mitarbeiter
|
||||||
|
├─ Garderobe/Einlass: 20 Personen
|
||||||
|
├─ Volunteers: 30 Personen
|
||||||
|
├─ Moderation: 1–2 Personen
|
||||||
|
├─ ÖGS-Dolmetscher: 2 Personen
|
||||||
|
└─ Sanitätsdienst: 3 Personen
|
||||||
|
```
|
||||||
|
|
||||||
|
### Technische Ausstattung
|
||||||
|
|
||||||
|
✅ PA-System: Line Array, 80 kW Leistung
|
||||||
|
✅ LED-Wand: 12×6 m (Hauptbühne)
|
||||||
|
✅ Licht: 120 Moving Heads, 60 LED-Par
|
||||||
|
✅ Bühnenrampe für Barrierefreiheit
|
||||||
|
✅ Induktionsanlage: 6 Schleifen
|
||||||
|
✅ Videomagnifikation: 8 Monitore
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚠️ KRITISCHE PROBLEME (SOFORT-HANDLUNG ERFORDERLICH)
|
||||||
|
|
||||||
|
### 🔴 PROBLEM 1: Datums-Diskrepanz
|
||||||
|
|
||||||
|
**WIDERSPRUCH:**
|
||||||
|
- ORCHESTRATION.md nennt **1. März 2026** als Eventdatum
|
||||||
|
- **ALLE Agenten** arbeiten mit **5. September 2026**
|
||||||
|
|
||||||
|
**Auswirkung:**
|
||||||
|
- Alle Zeitpläne, Fristen und Meilensteine möglicherweise falsch
|
||||||
|
- 6 Monate Unterschied = massive Planungs-Konfusion
|
||||||
|
|
||||||
|
**SOFORTIGE LÖSUNG:** Orchestrator muss Richtdatum bestätigen und an alle kommunizieren!
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🔴 PROBLEM 2: Budget-Chaos (3 verschiedene Gesamtbudgets!)
|
||||||
|
|
||||||
|
| Agent | Gesamtbudget |
|
||||||
|
|-------|--------------|
|
||||||
|
| budget_manager | **1.127.428€** (Expected) |
|
||||||
|
| program_manager | **750.000€** (Zielbudget) |
|
||||||
|
| Kombiniert betrachtet | **1.1+ Mio€** (über Ziel!) |
|
||||||
|
|
||||||
|
**Folge:** Keine Abstimmung zwischen den Agenten. Budget kann nicht gehalten werden ohne massive Sponsoring-Einnahmen (300k+€) oder Förderungen.
|
||||||
|
|
||||||
|
**SOFORTIGE LÖSUNG:** Budget-Koordinationsrunde mit allen Agenten!
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🔴 PROBLEM 3: Ticketpreis-Inkonsistenz
|
||||||
|
|
||||||
|
| Agent | Verwendeter Ticketpreis |
|
||||||
|
|-------|------------------------|
|
||||||
|
| budget_manager | **214€** (Basis) |
|
||||||
|
| researcher | **85–120€** (empfohlen) |
|
||||||
|
| tax_advisor | **100€** (Beispiel) |
|
||||||
|
| musik_rechte_advisor | **80€** (Beispiel) |
|
||||||
|
|
||||||
|
→ Kein einheitlicher Ticketpreis fixiert!
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🟡 PROBLEM 4: Negotiator noch nicht aktiviert
|
||||||
|
|
||||||
|
**KRITISCH:**
|
||||||
|
- Rathaus-Vertrag muss bis **28. Februar 2026** unterzeichnet sein
|
||||||
|
- Catering-Vertrag: März 2026
|
||||||
|
- Künstler-Buchungen: April–Mai 2026
|
||||||
|
- **Der Negotiator-Agent wurde noch NICHT eingesetzt** — aber er wird dringend gebraucht!
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🟡 PROBLEM 5: Sponsoring-Ziel realistisch?
|
||||||
|
|
||||||
|
| Szenario | Sponsoring-Ziel | Erreichbarkeit |
|
||||||
|
|----------|-----------------|----------------|
|
||||||
|
| Worst Case | 80.000€ | Nur 1 Hauptsponsor |
|
||||||
|
| Expected | 250.000€ | 🟡 Optimistisch |
|
||||||
|
| Best Case | 350.000€ | 🔴 Sehr schwierig |
|
||||||
|
|
||||||
|
**Risikoanalyse:** Ohne Sponsoring ist das Event **negativ** (Deckungslücke -224k€).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ WAS LÄUFT GUT
|
||||||
|
|
||||||
|
### Sehr hohe inhaltliche Qualität
|
||||||
|
- Alle Agenten liefern fachlich exzellente Konzepte (9/10 durchschnittlich)
|
||||||
|
- Detailtreue ist hervorragend (z.B. Catering: Allergen-Management EU-LMIV-konform)
|
||||||
|
- Barrierefreiheit ist durchgehend berücksichtigt
|
||||||
|
|
||||||
|
### Vollständige Fachplanung vorhanden
|
||||||
|
- ✅ Detaillierter Event-Minutenplan (Program Manager)
|
||||||
|
- ✅ Steuerliche Roadmap (Tax Advisor)
|
||||||
|
- ✅ Musikrechte komplett geklärt (Musik-Advisor)
|
||||||
|
- ✅ Location-Checkliste mit MA 36 (Location Manager)
|
||||||
|
- ✅ Marketing-Strategie 6 Monate voraus (Social Media Manager)
|
||||||
|
|
||||||
|
### Diversity-Fokus konsequent
|
||||||
|
- Alle Agenten denken Barrierefreiheit mit
|
||||||
|
- Awards für marginalisierte Communities
|
||||||
|
- Mehrsprachigkeit geplant (Deutsch, Englisch, Türkisch, BKS)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 TOP-PRIORITÄTEN (NÄCHSTE 2 WOCHEN)
|
||||||
|
|
||||||
|
### Sofort (Diese Woche!)
|
||||||
|
|
||||||
|
1. **Datum klären:** Ist es 1. März oder 5. September 2026?
|
||||||
|
- → Sofort an alle Agenten kommunizieren
|
||||||
|
- → Alle Timelines neu prüfen
|
||||||
|
|
||||||
|
2. **Negotiator aktivieren:**
|
||||||
|
- → Task für Vertragsverhandlungen Rathaus bis 28.2.
|
||||||
|
- → Catering-Vertrag vorbereiten
|
||||||
|
|
||||||
|
3. **Budget-Koordination starten:**
|
||||||
|
- → Kostenblock-Abstimmung (Catering: 280k vs. 420k€?)
|
||||||
|
- → Ticketpreis einheitlich festlegen (214€ oder 85–120€?)
|
||||||
|
|
||||||
|
### Diese Woche (Parallel)
|
||||||
|
|
||||||
|
4. **Sponsoring-Akquise starten:**
|
||||||
|
- → Hauptsponsor-Gespräche
|
||||||
|
- → Getränke-Sponsor identifizieren
|
||||||
|
|
||||||
|
5. **Förderanträge einreichen:**
|
||||||
|
- → WienTourismus (bis 100k€)
|
||||||
|
- → MA 7 Kulturabteilung (bis 80k€)
|
||||||
|
|
||||||
|
6. **Agent-Abstimmung einleiten:**
|
||||||
|
- → Orchestrator moderiert Cross-Check
|
||||||
|
- → Jeder Agent prüft seine Schnittstellen
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 AGENTEN-LEISTUNGSÜBERSICHT
|
||||||
|
|
||||||
|
### Top Performer (9/10)
|
||||||
|
|
||||||
|
- **catering_manager** — Beste Detailtreue
|
||||||
|
- **location_manager** — Vollständigste Planung
|
||||||
|
- **musik_rechte_advisor** — Rechtlich fundiert
|
||||||
|
- **researcher** — Webrecherche aktiv
|
||||||
|
- **social_media_manager** — Umfangreichstes Deliverable
|
||||||
|
- **tax_advisor** — Steuerlich kompetent
|
||||||
|
|
||||||
|
### Gute Leistung (7–8/10)
|
||||||
|
|
||||||
|
- **budget_manager** (8/10) — Guter Plan, aber Delegations-Tendenz
|
||||||
|
- **program_manager** (7/10) — Sehr detailliert, aber Timeout-Problem
|
||||||
|
|
||||||
|
### Noch nicht aktiv (3/10)
|
||||||
|
|
||||||
|
- **negotiator** — Kritisch! Sofort einsetzen
|
||||||
|
- **zusammenfasser** — Erst jetzt initialisiert
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 💡 NÄCHSTE SCHRITTE FÜR ZUSAMMENFASSER
|
||||||
|
|
||||||
|
1. ✅ Diese Zusammenfassung erstellen (gerade getan)
|
||||||
|
2. 🔜 Wöchentliche Status-Reports starten
|
||||||
|
3. 🔜 Critical-Path-Tracking (Deadlines, Meilensteine)
|
||||||
|
4. 🔜 Agent-Koordinations-Meetings dokumentieren
|
||||||
|
5. 🔜 Budget-Abweichungen flaggen
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📋 VERWENDETE QUELLEN
|
||||||
|
|
||||||
|
- `diversityball_knowledge.md` — Master-Wissensdatenbank
|
||||||
|
- `eventplan_diversity_ball_2026.md` — Program Manager Deliverable
|
||||||
|
- `agent_performance_report_2026-02-21.md` — AR Manager Analyse
|
||||||
|
- `budget_plan.md` — Budget Manager Vollplan
|
||||||
|
- Weitere 8 Agenten-Deliverables (siehe Archive)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⏰ NÄCHSTE ZUSAMMENFASSUNG
|
||||||
|
|
||||||
|
**Geplant:** 28. Februar 2026 (nach Rathaus-Verhandlung)
|
||||||
|
|
||||||
|
**Focus-Themen:**
|
||||||
|
- Verhandlungs-Erfolg Rathaus?
|
||||||
|
- Budget-Abstimmung abgeschlossen?
|
||||||
|
- Sponsoring-Status?
|
||||||
|
- Negotiator-Aktivierung?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**FAZIT:** Das System hat beeindruckende Fachkonzepte geliefert. Der Event ist technisch machbar. **Aber ohne sofortige Koordination zwischen Agenten und Klärung fundamentaler Parameter (Datum, Budget, Ticketpreis) wird der Plan kollabieren.**
|
||||||
|
|
||||||
|
*Zusammenfassung erstellt: 21. Februar 2026, 15:00 Uhr*
|
||||||
|
*Zusammenfasser-Agent für Diversity-Ball Wien 2026*
|
||||||
66
app.py
66
app.py
|
|
@ -2198,7 +2198,7 @@ def chat():
|
||||||
|
|
||||||
@app.route('/chat/send', methods=['POST'])
|
@app.route('/chat/send', methods=['POST'])
|
||||||
def chat_send():
|
def chat_send():
|
||||||
"""Führt einen Agent aus und gibt die Antwort per Server-Sent Events zurück."""
|
"""Führt einen Agent aus und gibt die Antwort per Server-Sent Events LIVE zurück."""
|
||||||
data = request.get_json()
|
data = request.get_json()
|
||||||
prompt = data.get('prompt', '').strip()
|
prompt = data.get('prompt', '').strip()
|
||||||
agent_key = data.get('agent', '').strip()
|
agent_key = data.get('agent', '').strip()
|
||||||
|
|
@ -2216,17 +2216,69 @@ def chat_send():
|
||||||
def generate():
|
def generate():
|
||||||
# Agent-Info senden
|
# Agent-Info senden
|
||||||
yield f"data: {json.dumps({'type': 'agent_selected', 'agent': agent_name, 'agent_key': agent_key})}\n\n"
|
yield f"data: {json.dumps({'type': 'agent_selected', 'agent': agent_name, 'agent_key': agent_key})}\n\n"
|
||||||
yield f"data: {json.dumps({'type': 'processing', 'message': f'⏳ {agent_name} arbeitet...'})}\n\n"
|
yield f"data: {json.dumps({'type': 'processing', 'message': f'⏳ {agent_name} denkt nach...'})}\n\n"
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# Agent ausführen (mit Memory und Work-Dir)
|
# Agent live ausführen mit Streaming
|
||||||
response = execute_agent_task(agent_key, prompt)
|
response_text = ""
|
||||||
|
|
||||||
# Antwort streamen
|
# System-Prompt vorbereiten
|
||||||
yield f"data: {json.dumps({'type': 'response', 'text': response})}\n\n"
|
system_prompt = get_agent_prompt(agent_key)
|
||||||
|
if not system_prompt:
|
||||||
|
yield f"data: {json.dumps({'type': 'error', 'message': f'Kein System-Prompt für Agent {agent_key}'})}\n\n"
|
||||||
|
return
|
||||||
|
|
||||||
|
dirs = ensure_agent_structure(agent_key)
|
||||||
|
work_dir = dirs['work_dir']
|
||||||
|
memory_summary = get_agent_memory_summary(agent_key)
|
||||||
|
kb_file = os.path.join(os.path.dirname(__file__), 'diversityball_knowledge.md')
|
||||||
|
|
||||||
|
team_summary = ""
|
||||||
|
if agent_key == 'orchestrator':
|
||||||
|
team_summary = "\n\n" + get_team_member_summary()
|
||||||
|
|
||||||
|
full_system = f"""{system_prompt}
|
||||||
|
|
||||||
|
## Deine Erinnerungen:
|
||||||
|
{memory_summary}{team_summary}
|
||||||
|
|
||||||
|
## Wissensdatenbank:
|
||||||
|
Die Wissensdatenbank liegt unter: {kb_file}
|
||||||
|
- Du hast Zugriff auf das Internet via WebFetch-Tool
|
||||||
|
- Dein Arbeitsverzeichnis: {work_dir}"""
|
||||||
|
|
||||||
|
combined_message = f"{full_system}\n\n---\n\n{prompt}"
|
||||||
|
model = get_agent_model(agent_key)
|
||||||
|
|
||||||
|
# OpenCode mit Streaming aufrufen
|
||||||
|
process = subprocess.Popen(
|
||||||
|
['opencode', 'run', '--model', model, '--format', 'json', combined_message],
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
stderr=subprocess.PIPE,
|
||||||
|
text=True,
|
||||||
|
cwd=work_dir
|
||||||
|
)
|
||||||
|
|
||||||
|
# Live-Output lesen und streamen
|
||||||
|
for line in process.stdout:
|
||||||
|
try:
|
||||||
|
data_json = json.loads(line.strip())
|
||||||
|
if data_json.get('part', {}).get('type') == 'text':
|
||||||
|
chunk = data_json.get('part', {}).get('text', '')
|
||||||
|
response_text += chunk
|
||||||
|
# Chunk live an Frontend senden
|
||||||
|
yield f"data: {json.dumps({'type': 'chunk', 'text': chunk})}\n\n"
|
||||||
|
except (json.JSONDecodeError, KeyError):
|
||||||
|
pass
|
||||||
|
|
||||||
|
process.wait()
|
||||||
|
|
||||||
|
# Agent-Kommandos parsen
|
||||||
|
if response_text:
|
||||||
|
parse_agent_commands(agent_key, response_text)
|
||||||
|
|
||||||
# Erfolg melden
|
# Erfolg melden
|
||||||
yield f"data: {json.dumps({'type': 'complete', 'message': '✓ Fertig', 'timestamp': datetime.now().strftime('%Y-%m-%d %H:%M'), 'response': response})}\n\n"
|
yield f"data: {json.dumps({'type': 'complete', 'message': '✓ Fertig', 'timestamp': datetime.now().strftime('%Y-%m-%d %H:%M'), 'response': response_text})}\n\n"
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"[Chat] Fehler beim Ausführen von {agent_key}: {str(e)}")
|
logger.error(f"[Chat] Fehler beim Ausführen von {agent_key}: {str(e)}")
|
||||||
|
|
|
||||||
|
|
@ -178,6 +178,11 @@ function sendChat(event) {
|
||||||
agentBadge.textContent = currentAgent;
|
agentBadge.textContent = currentAgent;
|
||||||
} else if (data.type === 'processing') {
|
} else if (data.type === 'processing') {
|
||||||
chatStatus.innerHTML = `<span style="color:var(--info);">${data.message}</span>`;
|
chatStatus.innerHTML = `<span style="color:var(--info);">${data.message}</span>`;
|
||||||
|
} else if (data.type === 'chunk') {
|
||||||
|
// Live-Chunk empfangen - append to response
|
||||||
|
currentResponse += data.text;
|
||||||
|
responseText.textContent = currentResponse;
|
||||||
|
chatContainer.scrollTop = chatContainer.scrollHeight;
|
||||||
} else if (data.type === 'response') {
|
} else if (data.type === 'response') {
|
||||||
currentResponse = data.text;
|
currentResponse = data.text;
|
||||||
responseText.textContent = currentResponse;
|
responseText.textContent = currentResponse;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue