Skip to main content
flask-agents es VANTS AI (vants-ai.vercel.app), la web del cuartel general de los agentes de VANTS. Presenta el squad, sirve el chat de soporte Vants Soporte y contiene el consumidor de VANTS-BUS, el agente más antiguo del squad. Es una app Flask para Python 3.9 o superior, con Flask 3.1 y gunicorn 23, que se despliega en Vercel.

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.yml lo 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 comando deja la orden en agent_comandos y 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 Function vantsbot, 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

Las páginas y los estáticos se copiaron tal cual del despliegue en vivo de VANTS AI. El backend se reconstruyó para responder a las mismas rutas.

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:
Y responde:
  • 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 mensaje o supera 2000 caracteres, responde 400 con falta_mensaje o mensaje_demasiado_largo en error.

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 necesita VANTS_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:
En los dos modos, cada lectura espera hasta 20 segundos a que lleguen eventos (long-polling). La primera vez empieza desde el momento actual, sin procesar eventos antiguos. Tras un reinicio, continúa donde lo dejó.

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 busca api/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.