fix: Chat streaming uses same full prompt as execute_agent_task
The /chat/send SSE stream was building a stripped-down system prompt without any Frankenbot command documentation (@CREATE_SUBTASK, @SEND_EMAIL, @SEND_TELEGRAM etc.), so agents never knew to emit these commands during web chat sessions — tasks were never created, emails never sent. Extract build_agent_prompt() as shared function used by both execute_agent_task() and the streaming chat generator.
This commit is contained in:
parent
eaccbe770a
commit
f13860f38d
1 changed files with 23 additions and 33 deletions
56
app.py
56
app.py
|
|
@ -503,32 +503,25 @@ def get_agent_prompt(agent_key):
|
||||||
return prompt_content
|
return prompt_content
|
||||||
|
|
||||||
|
|
||||||
def execute_agent_task(agent_key, user_prompt, extra_context=""):
|
def build_agent_prompt(agent_key, user_prompt, extra_context=""):
|
||||||
"""
|
"""
|
||||||
Führt einen echten Agenten-Task via opencode aus.
|
Baut den vollständigen kombinierten Prompt (System + User) für einen Agenten.
|
||||||
System-Prompt wird als --prompt übergeben, User-Prompt als Message.
|
Wird sowohl von execute_agent_task() als auch vom Streaming-Chat verwendet,
|
||||||
|
damit beide exakt denselben Prompt — inkl. aller Kommandos — erhalten.
|
||||||
"""
|
"""
|
||||||
system_prompt = get_agent_prompt(agent_key)
|
system_prompt = get_agent_prompt(agent_key)
|
||||||
|
|
||||||
if not system_prompt:
|
if not system_prompt:
|
||||||
return f"⚠️ Kein System-Prompt für Agent '{agent_key}' gefunden."
|
return None
|
||||||
|
|
||||||
# Agent-Struktur sicherstellen
|
|
||||||
dirs = ensure_agent_structure(agent_key)
|
dirs = ensure_agent_structure(agent_key)
|
||||||
work_dir = dirs['work_dir']
|
work_dir = dirs['work_dir']
|
||||||
|
|
||||||
# Memory-Zusammenfassung laden
|
|
||||||
memory_summary = get_agent_memory_summary(agent_key)
|
memory_summary = get_agent_memory_summary(agent_key)
|
||||||
|
|
||||||
# Wissensdatenbank-Pfad (im Orchestrator-Ordner)
|
|
||||||
kb_file = os.path.join(os.path.dirname(__file__), 'agents', 'orchestrator', 'knowledge', 'diversityball_knowledge.md')
|
kb_file = os.path.join(os.path.dirname(__file__), 'agents', 'orchestrator', 'knowledge', 'diversityball_knowledge.md')
|
||||||
|
|
||||||
# Team-Members laden (nur für Orchestrator)
|
|
||||||
team_summary = ""
|
team_summary = ""
|
||||||
if agent_key == 'orchestrator':
|
if agent_key == 'orchestrator':
|
||||||
team_summary = "\n\n" + get_team_member_summary()
|
team_summary = "\n\n" + get_team_member_summary()
|
||||||
|
|
||||||
# System-Prompt = Agent-Rolle + Memory + Team + Kommandos (OHNE große Wissensdatenbank!)
|
|
||||||
full_system = f"""{system_prompt}
|
full_system = f"""{system_prompt}
|
||||||
|
|
||||||
## Deine Erinnerungen:
|
## Deine Erinnerungen:
|
||||||
|
|
@ -618,9 +611,20 @@ Email: [Email-Adresse]
|
||||||
- Liefere immer eine vollständige, direkt verwertbare Antwort
|
- Liefere immer eine vollständige, direkt verwertbare Antwort
|
||||||
{extra_context}"""
|
{extra_context}"""
|
||||||
|
|
||||||
# System-Prompt + User-Prompt zusammen als eine Message
|
return f"{full_system}\n\n---\n\n{user_prompt}"
|
||||||
# (--prompt flag gibt leere Antwort, daher alles in eine Message)
|
|
||||||
combined_message = f"{full_system}\n\n---\n\n{user_prompt}"
|
|
||||||
|
def execute_agent_task(agent_key, user_prompt, extra_context=""):
|
||||||
|
"""
|
||||||
|
Führt einen echten Agenten-Task via opencode aus.
|
||||||
|
"""
|
||||||
|
combined_message = build_agent_prompt(agent_key, user_prompt, extra_context)
|
||||||
|
|
||||||
|
if not combined_message:
|
||||||
|
return f"⚠️ Kein System-Prompt für Agent '{agent_key}' gefunden."
|
||||||
|
|
||||||
|
dirs = ensure_agent_structure(agent_key)
|
||||||
|
work_dir = dirs['work_dir']
|
||||||
|
|
||||||
# Modell aus Konfiguration holen
|
# Modell aus Konfiguration holen
|
||||||
model = get_agent_model(agent_key)
|
model = get_agent_model(agent_key)
|
||||||
|
|
@ -2382,24 +2386,10 @@ def chat_send():
|
||||||
|
|
||||||
dirs = ensure_agent_structure(agent_key)
|
dirs = ensure_agent_structure(agent_key)
|
||||||
work_dir = dirs['work_dir']
|
work_dir = dirs['work_dir']
|
||||||
memory_summary = get_agent_memory_summary(agent_key)
|
|
||||||
kb_file = os.path.join(os.path.dirname(__file__), 'agents', 'orchestrator', 'knowledge', 'diversityball_knowledge.md')
|
|
||||||
|
|
||||||
team_summary = ""
|
|
||||||
if agent_key == 'orchestrator':
|
|
||||||
team_summary = "\n\n" + get_team_member_summary()
|
|
||||||
|
|
||||||
full_system = f"""{system_prompt}
|
|
||||||
|
|
||||||
## Deine Erinnerungen:
|
# Vollständigen System-Prompt über build_agent_prompt() bauen —
|
||||||
{memory_summary}{team_summary}
|
# identisch zu execute_agent_task(), damit alle Kommandos dokumentiert sind
|
||||||
|
combined_message = build_agent_prompt(agent_key, prompt)
|
||||||
## 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)
|
model = get_agent_model(agent_key)
|
||||||
|
|
||||||
# OpenCode mit Streaming aufrufen
|
# OpenCode mit Streaming aufrufen
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue