File size: 2,065 Bytes
a4bab49
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# 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": []}