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