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" | |
| ] | |
| }, | |
| "huggingface": { | |
| "name": "HuggingFace Router", | |
| "type": "openai_compat", # ← correcto, no cambiar | |
| "base_url": "https://router.huggingface.co/v1", # ← exactamente como en tu curl | |
| "key": os.getenv("HF_API_TOKEN"), | |
| "headers": { | |
| "Authorization": f"Bearer {os.getenv('HF_API_TOKEN')}" | |
| }, | |
| "models": [ | |
| "Qwen/Qwen2.5-7B-Instruct", # el que te funcionó | |
| "NousResearch/Hermes-2-Pro-Llama-3-8B", | |
| "google/gemma-2-9b-it", | |
| "meta-llama/Meta-Llama-3.1-8B-Instruct", | |
| "meta-llama/Meta-Llama-3-8B-Instruct", | |
| "meta-llama/Llama-3.1-8B-Instruct" # prueba este también | |
| ] | |
| } | |
| } | |
| # ── Registro completo de agentes ─────────────────────────────────────────────── | |
| AGENT_REGISTRY = { | |
| "manager": { | |
| "key": "manager", | |
| "name": "Manager", | |
| "provider": "huggingface", | |
| "role": ( | |
| "Eres el gerente de proyecto de Mission Control AI. " | |
| "Tu trabajo es ANALIZAR la solicitud del usuario y DECIDIR qué agentes van a trabajar en ella. " | |
| "NUNCA te delegues a ti mismo (manager). " | |
| "Si la tarea es saludo, pregunta quién soy, hora/fecha, o solo pedir ideas de imagen (sin pedir generarla explícitamente), responde directamente sin delegar (delegate: []). " | |
| "Solo delega a image_agent si el usuario pide EXPLÍCITAMENTE generar, crear o mostrar la imagen real. " | |
| "Para ideas o descripciones de imagen, responde tú mismo con sugerencias. " | |
| "Saluda brevemente en 1 línea. " | |
| "Siempre termina tu respuesta con un JSON de delegación: {\"delegate\": [\"agent_key1\", \"agent_key2\"]} " | |
| "REGLAS DE DELEGACIÓN (síguellas estrictamente):\n" | |
| "- imagen / foto / dibujo / ilustración / visualiza / ideas para imagen → responde directamente con sugerencias (delegate: [])\n" | |
| "- genera la imagen / crea la imagen / muestra la imagen / imagen real → image_agent\n" | |
| "- informe / reporte / word / documento / redacta → writer + analyst\n" | |
| "- excel / planilla / hoja / spreadsheet / tabla → backend_dev\n" | |
| "- python / script / groovy / jenkins / api / devops / código → backend_dev\n" | |
| "- html / css / web / interfaz / frontend / página → frontend_dev\n" | |
| "- app completa full-stack → backend_dev + frontend_dev\n" | |
| "- analisis / viabilidad / evaluar / riesgos / revisar → analyst\n" | |
| "- saludo / hola / quien eres / pregunta simple → delegate: []" | |
| ), | |
| "models": PROVIDERS["huggingface"]["models"] | |
| }, | |
| "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": "huggingface", | |
| "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["huggingface"]["models"] | |
| }, | |
| "image_agent": { | |
| "key": "image_agent", | |
| "name": "ImageAgent", | |
| "provider": "gemini", | |
| "role": ( | |
| "Eres el agente de imágenes. " | |
| "Cuando se te pida generar, crear o mostrar una imagen, responde SOLO con un JSON: " | |
| "{\"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, detallados y en inglés para obtener mejores resultados en búsquedas o generación de imágenes. " | |
| "Si la tarea no es sobre imágenes, responde: {\"skip\":\"no image task\"}" | |
| ), | |
| "models": ["gemini-2.5-flash", "gemini-2.5-pro"] | |
| } | |
| } |