Spaces:
Running
Running
File size: 7,462 Bytes
a544660 f2ad758 b5ca9c4 f2ad758 b5ca9c4 e7bfa97 f2ad758 b5ca9c4 f2ad758 b5ca9c4 f2ad758 b5ca9c4 f2ad758 e7bfa97 bfea975 9bb841b bfea975 9bb841b efa6401 e7bfa97 efa6401 bfea975 f2ad758 b5ca9c4 a592b55 f2ad758 bfea975 b5ca9c4 b75c35b b5ca9c4 b75c35b b5ca9c4 bfea975 f2ad758 b5ca9c4 f2ad758 b5ca9c4 f2ad758 b5ca9c4 f2ad758 b5ca9c4 f2ad758 b5ca9c4 387e1c0 b5ca9c4 387e1c0 b5ca9c4 b75c35b b5ca9c4 1c9b9e5 b5ca9c4 a592b55 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | # 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"]
}
} |