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
|
||||
|
||||
|
||||
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.
|
||||
System-Prompt wird als --prompt übergeben, User-Prompt als Message.
|
||||
Baut den vollständigen kombinierten Prompt (System + User) für einen Agenten.
|
||||
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)
|
||||
|
||||
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)
|
||||
work_dir = dirs['work_dir']
|
||||
|
||||
# Memory-Zusammenfassung laden
|
||||
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')
|
||||
|
||||
# Team-Members laden (nur für Orchestrator)
|
||||
|
||||
team_summary = ""
|
||||
if agent_key == 'orchestrator':
|
||||
team_summary = "\n\n" + get_team_member_summary()
|
||||
|
||||
# System-Prompt = Agent-Rolle + Memory + Team + Kommandos (OHNE große Wissensdatenbank!)
|
||||
full_system = f"""{system_prompt}
|
||||
|
||||
## Deine Erinnerungen:
|
||||
|
|
@ -618,9 +611,20 @@ Email: [Email-Adresse]
|
|||
- Liefere immer eine vollständige, direkt verwertbare Antwort
|
||||
{extra_context}"""
|
||||
|
||||
# System-Prompt + User-Prompt zusammen als eine Message
|
||||
# (--prompt flag gibt leere Antwort, daher alles in eine Message)
|
||||
combined_message = f"{full_system}\n\n---\n\n{user_prompt}"
|
||||
return 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
|
||||
model = get_agent_model(agent_key)
|
||||
|
|
@ -2382,24 +2386,10 @@ def chat_send():
|
|||
|
||||
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__), '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:
|
||||
{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}"
|
||||
# Vollständigen System-Prompt über build_agent_prompt() bauen —
|
||||
# identisch zu execute_agent_task(), damit alle Kommandos dokumentiert sind
|
||||
combined_message = build_agent_prompt(agent_key, prompt)
|
||||
model = get_agent_model(agent_key)
|
||||
|
||||
# OpenCode mit Streaming aufrufen
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue