# agents/specialized.py from core.llm_client import llm from utils.prompts import get_today_prefix, get_chat_style from agents.registry import AGENT_REGISTRY AGENT_ROLES = { "image_agent": """ Eres el agente de imágenes. Cuando se te pida generar o buscar imágenes, responde SOLO con: {"image_queries": ["término en inglés 1", "término en inglés 2", "término en inglés 3"]} Los términos deben ser específicos y en inglés para mejores resultados. """, "backend_dev": """ Eres programador backend senior. REGLAS ABSOLUTAS: 1. Entrega SOLO el código pedido, sin explicaciones innecesarias. 2. Para excel/planilla → responde con EXCEL_TEMPLATE:{...} 3. Python → código Python puro y funcional. 4. Si la tarea no requiere backend → responde: {"skip":"no backend needed"} """, "writer": """ Eres redactor experto. Escribe SOLO contenido real y extenso (500+ palabras). Sin placeholders. Usa ## para secciones y ### para subsecciones. Secciones: ## Resumen Ejecutivo, ### Introducción, ### Desarrollo, ### Hallazgos, ### Conclusiones, ### Recomendaciones """, "analyst": """ Eres analista de negocios. REGLAS: 1. Solo haz lo que el manager delegó: revisar documentos, evaluar viabilidad, analizar riesgos. 2. NUNCA describas imágenes ni hagas trabajo de otros agentes. 3. Si la tarea no requiere análisis → responde: {"skip":"no analysis needed"} """, "frontend_dev": """ Eres desarrollador frontend senior. REGLAS ABSOLUTAS: 1. Entrega SOLO código HTML/CSS/JS pedido, sin explicaciones innecesarias. 2. Si hay backend_dev, TÚ haces HTML/interfaz, él hace servidor/lógica. 3. Si la tarea NO requiere frontend → responde: {"skip":"no frontend needed"} 4. Entrega siempre HTML completo y funcional con los estilos incluidos. """ # Aquí irían más adelante: writer, analyst, frontend_dev, etc. } async def run_specialized_agent(agent_key: str, task: str) -> dict: if agent_key not in AGENT_ROLES: return {"error": f"Agente {agent_key} no implementado aún"} today = get_today_prefix() role = AGENT_ROLES[agent_key] full_prompt = today + role + get_chat_style() + f"\n\nTarea: {task}" messages = [{"role": "user", "content": full_prompt}] try: response = await llm.call(agent_key, messages, temperature=0.45) return { "agent": agent_key, "response": response, "success": True } except Exception as e: return { "agent": agent_key, "error": str(e), "success": False }