mission-control-v2 / agents /registry.py
vfven's picture
Update agents/registry.py
0419ad5 verified
Raw
History Blame
7.51 kB
# 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"],
"capabilities": ["image_generation"]
}
}