mission-control-v2 / agents /manager.py
vfven's picture
Create agents/manager.py
a4bab49 verified
Raw
History Blame
2.07 kB
# agents/manager.py
from datetime import datetime
from utils.prompts import get_today_prefix, get_chat_style
from core.llm_client import llm
MANAGER_ROLE = """
Eres el gerente de proyecto de Mission Control AI.
Tu trabajo principal es ANALIZAR la solicitud del usuario y DECIDIR qué agentes van a trabajar en ella.
REGLAS IMPORTANTES:
- NUNCA hagas el trabajo tú mismo.
- Saluda brevemente en 1 línea.
- Siempre termina tu respuesta con un JSON de delegación:
{"delegate": ["agent_key1", "agent_key2"]}
- Posibles agentes: manager, backend_dev, frontend_dev, analyst, writer, image_agent
Reglas de delegación rápidas:
- imagen / foto / gato / perro / dibujo → image_agent
- informe / reporte / word / documento → writer + analyst
- excel / planilla / hoja / spreadsheet → backend_dev
- python / script / groovy / jenkins / api / devops → backend_dev
- html / css / web / interfaz / frontend → frontend_dev
- app completa full-stack → backend_dev + frontend_dev
- análisis / viabilidad / evaluar / riesgos → analyst
"""
async def plan_mission(task: str) -> dict:
"""Llama al manager y obtiene su decisión de delegación"""
today = get_today_prefix()
full_prompt = today + MANAGER_ROLE + get_chat_style() + f"\n\nTarea del usuario: {task}"
messages = [
{"role": "user", "content": full_prompt}
]
try:
response = await llm.call("manager", messages, temperature=0.55)
# Intentamos extraer el JSON de delegación (muy naive por ahora)
import re
match = re.search(r'\{.*"delegate".*\}', response, re.DOTALL)
if match:
import json
delegation = json.loads(match.group(0))
return {
"reasoning": response.split('{')[0].strip(),
"delegate": delegation.get("delegate", []),
"raw": response
}
else:
return {"reasoning": response, "delegate": [], "raw": response}
except Exception as e:
return {"error": str(e), "delegate": []}