Spaces:
Running
Running
| # 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": []} |