El squad
Solo Vants Soporte y el consumidor del bus tienen código en este repositorio. La web presenta a los demás con los datos de
agentes/squad.py, los mismos que devuelve GET /api/agentes.
Cómo se conecta el cuartel
El squad no vive en un solo repositorio: los recuadros indican dónde está el código de cada pieza. En azul, los agentes; en verde, el resto de piezas de VANTS; en amarillo, los servicios externos.- Agente VANTS.
agente.ymllo lanza cada 30 minutos, a mano o cuando Vercel avisa de un deploy fallido. Revisa la web, vants-faceit-webhook, las releases de VANTS HUB, los workflows de Vantsgames, Neon, el último deploy de Vercel y, si está configurado, el servicio de matchmaking. Relanza una sola vez cada workflow que falla y hace como mucho dos redeploys de Vercel por commit. Decide con reglas y, si tiene GLM configurado, con function calling. - Mando por Discord.
/agente comandodeja la orden enagent_comandosy el agente la atiende en su siguiente ciclo. Los incidentes y las respuestas llegan al dueño por mensaje directo. Lo hacen el bot VANTCALL y la Neon Functionvantsbot, que no necesita el bot encendido. Los comandos están en Bot de Discord. - VANTS AI. Este repositorio no usa Neon ni llama al Agente VANTS. Vants Soporte habla con GLM por
chat/completions, sin function calling, y el consumidor solo habla con VANTS-BUS. La web de Vantsgames enlaza a VANTS AI desde su portada. - Memoria del agente. Las tablas
agent_*salen de las migraciones 25 y 26 de VantsBasededatos. Sus columnas están en Esquema de la base de datos.
Estructura
Páginas
En
main, /estado muestra siempre la vista local (“MODO LOCAL · SIN DATOS REALES”). .env.example incluye AGENT_URL y AGENT_TOKEN para consultar el estado real del Agente VANTS, pero el código de este repositorio todavía no las lee.API
/vants/bus indica en activo si el consumidor arrancó dentro de Flask y, en consumidor, los contadores procesados, publicados y errores, el último evento recibido (ultimo_evento) y el último error (ultimo_error). Solo refleja el consumidor que corre dentro de Flask, no el proceso independiente.
Chat de soporte
POST /api/chat recibe el mensaje y, si quieres, el historial de la conversación:
- Con clave de GLM, responde el modelo (
"modo": "llm") como Vants Soporte y en español. Del historial usa los 10 últimos turnos. - Sin clave, o si GLM falla, responde el modo reglas (
"modo": "reglas","modelo": null). Busca palabras clave sin tener en cuenta los acentos y solo cuenta lo que ya dice la web. El chat nunca devuelve un error 500. - Si falta
mensajeo supera 2000 caracteres, responde 400 confalta_mensajeomensaje_demasiado_largoenerror.
Variables de entorno
.env.example lista todas las variables. Son opcionales: sin ellas, la web arranca con esas funciones apagadas. La app las lee del entorno; en Vercel se definen en el proyecto.
Consumidor del bus
vants_bus/consumer.py es el agente viejo del squad. Se identifica en el bus como flask-agents y escucha nueve tipos de evento: match.finished, match.scheduled, match.canceled, tournament.inscriptions_opened, inscription.created, clip.published, clip.highlights_ready, game.session_started y alert.detected.
Reacciones
Los
post.generated llevan channel: "discord" como destino previsto. Hoy los recibe VANTS HUB, que los muestra como notificación “Nueva publicación”.
Para cambiar las reacciones, edita reaccionar en consumer.py o pasa tu propia función a iniciar(handler=...). La función recibe el evento y el cliente del bus. Con tipos=[...] cambias los tipos que escucha.
Si una reacción falla, el error se cuenta y el consumidor sigue con el siguiente evento. Si el bus no responde, registra el error y vuelve a intentarlo.
Cómo arrancarlo
El consumidor necesitaVANTS_BUS_URL y VANTS_BUS_SECRET (el secreto de flask-agents). Sin ellas queda apagado y la app funciona igual.
Como VANTS AI corre en Vercel, allí el consumidor no arranca dentro de Flask. Para tenerlo en marcha, lánzalo como proceso independiente:
Publicar eventos desde los agentes
EVENTS es un diccionario con los 12 tipos del contrato. Qué proyecto consume cada tipo y cómo se firman las peticiones está en Cómo se conectan los repositorios.
Ejecutar en local
python main.py arranca el servidor de desarrollo de Flask en el puerto 8000, con el modo debug activado. En un servidor persistente también puedes usar gunicorn main:app. Para probar el chat:
Despliegue en Vercel
El runtime Python de Vercel buscaapi/index.py, que importa la app de main.py, e instala las dependencias de requirements.txt. Las páginas, los estáticos y la API salen de la misma app.