Spaces:
Running
Running
| # agents/registry.py | |
| import os | |
| # ── Proveedores ──────────────────────────────────────────────────────────────── | |
| PROVIDERS = { | |
| "gemini": { | |
| "name": "Google Gemini", | |
| "type": "gemini", | |
| "key": os.getenv("GOOGLE_API_KEY", "DUMMY_GEMINI_KEY"), | |
| "models": ["gemini-2.5-flash", "gemini-2.5-pro"] | |
| }, | |
| "openrouter": { | |
| "name": "OpenRouter", | |
| "type": "openai_compat", | |
| "key": os.getenv("OPENROUTER_API_KEY", "DUMMY_OPENROUTER_KEY"), | |
| "base_url": "https://openrouter.ai/api/v1", | |
| "headers": { | |
| "HTTP-Referer": "https://huggingface.co/spaces/vfven/mission-control-v2", | |
| "X-Title": "Mission Control v2" | |
| }, | |
| "models": [ | |
| "google/gemma-3-27b-it:free", | |
| "google/gemma-3-12b-it:free", | |
| "meta-llama/llama-3.3-70b-instruct:free", | |
| "mistralai/mistral-small-3.1-24b-instruct:free" | |
| ] | |
| }, | |
| "groq": { | |
| "name": "Groq", | |
| "type": "openai_compat", | |
| "key": os.getenv("GROQ_API_KEY", "DUMMY_GROQ_KEY"), | |
| "base_url": "https://api.groq.com/openai/v1", | |
| "headers": {}, | |
| "models": ["llama-3.1-70b-versatile", "gemma2-27b-it"] | |
| } | |
| } | |
| # ── Registro completo de agentes ─────────────────────────────────────────────── | |
| AGENT_REGISTRY = { | |
| "manager": { | |
| "key": "manager", | |
| "name": "Manager", | |
| "provider": "gemini", | |
| "role": ( | |
| "Eres el gerente de proyecto. Analiza la solicitud y decide qué agentes trabajarán. " | |
| "NUNCA hagas el trabajo tú mismo. Saluda en 1 línea y delega siempre con JSON al final: " | |
| '{"delegate":["key1","key2"]}\n' | |
| "REGLAS:\n" | |
| "- imagen/foto/gato/perro/dibujo → image_agent\n" | |
| "- informe/reporte/word/documento → writer + analyst\n" | |
| "- excel/planilla/hoja/spreadsheet → backend_dev\n" | |
| "- python/script/groovy/jenkins/api/devops → backend_dev\n" | |
| "- html/css/web/interfaz/frontend → frontend_dev\n" | |
| "- app completa full-stack → backend_dev + frontend_dev\n" | |
| "- analisis/viabilidad/evaluar → analyst" | |
| ), | |
| "models": ["gemini-2.5-flash", "gemini-2.5-pro"] | |
| }, | |
| "backend_dev": { | |
| "key": "backend_dev", | |
| "name": "Backend", | |
| "provider": "openrouter", | |
| "role": ( | |
| "Eres programador backend senior. REGLAS ABSOLUTAS:\n" | |
| "1. Entrega SOLO el código pedido, sin explicaciones innecesarias.\n" | |
| "2. Excel/planilla → responde con EXCEL_TEMPLATE:{\"title\":\"...\",\"sheet_name\":\"...\"," | |
| "\"headers\":[...],\"sample_rows\":[[...],[...]]}\n" | |
| "3. Python → entrega código Python puro y funcional.\n" | |
| "4. Groovy/Jenkins → entrega el script completo.\n" | |
| "5. Si hay frontend_dev en el equipo, TÚ haces servidor/backend, él hace HTML.\n" | |
| "6. Si la tarea no requiere backend → responde: {\"skip\":\"no backend needed\"}" | |
| ), | |
| "models": PROVIDERS["openrouter"]["models"] | |
| }, | |
| "frontend_dev": { | |
| "key": "frontend_dev", | |
| "name": "Frontend", | |
| "provider": "openrouter", | |
| "role": ( | |
| "Eres desarrollador frontend senior. REGLAS ABSOLUTAS:\n" | |
| "1. Entrega SOLO código HTML/CSS/JS pedido, sin explicaciones innecesarias.\n" | |
| "2. Si hay backend_dev, TÚ haces HTML/interfaz, él hace servidor/lógica.\n" | |
| "3. Si la tarea NO requiere frontend → responde: {\"skip\":\"no frontend needed\"}\n" | |
| "4. Entrega siempre HTML completo y funcional con los estilos incluidos." | |
| ), | |
| "models": PROVIDERS["openrouter"]["models"] | |
| }, | |
| "analyst": { | |
| "key": "analyst", | |
| "name": "Analyst", | |
| "provider": "openrouter", | |
| "role": ( | |
| "Eres analista de negocios. REGLAS:\n" | |
| "1. Solo haz lo que el manager delegó: revisar documentos, evaluar viabilidad, analizar riesgos.\n" | |
| "2. NUNCA describas imágenes ni hagas trabajo de otros agentes.\n" | |
| "3. Si la tarea no requiere análisis → responde: {\"skip\":\"no analysis needed\"}" | |
| ), | |
| "models": PROVIDERS["openrouter"]["models"] | |
| }, | |
| "writer": { | |
| "key": "writer", | |
| "name": "Writer", | |
| "provider": "openrouter", | |
| "role": ( | |
| "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" | |
| ), | |
| "models": PROVIDERS["openrouter"]["models"] | |
| }, | |
| "image_agent": { | |
| "key": "image_agent", | |
| "name": "ImageAgent", | |
| "provider": "gemini", | |
| "role": ( | |
| "Cuando se te pida imágenes, responde SOLO con: " | |
| "{\"image_queries\":[\"english term 1\",\"english term 2\",\"english term 3\"]} " | |
| "Los términos deben ser específicos en inglés para encontrar buenas imágenes." | |
| ), | |
| "models": ["gemini-2.5-flash", "gemini-2.5-pro"] | |
| } | |
| } |