Bridge
La cara HTTP del motor de inferencia: qué está cargado, quién contribuyó y completions — y nada más.
El bridge es lo único con lo que el gateway de liquidación habla para inferir. Es un OUTER en términos de p4: instala una sesión a través de los stages del modelo, envía una petición al stage de cabeza, recoge el stream de tokens y reporta lo que aportó cada nodo. No posee colocación, ni planificación, ni más estado que un catálogo de lo que está cargado — deliberadamente pequeño, porque todo lo que no decide es algo que no puede derivar.
Cuatro rutas, un token
| Ruta | Qué responde |
|---|---|
/api/controllers | qué modelos están cargados, y el estado de cada stage |
/api/runtime | la wallet del operador y las máquinas que hay detrás |
/api/contributions | filas, unidades, peticiones y throughput por nodo |
/c/<model>/v1/chat/completions | inferencia |
Todas las rutas salvo /api/health exigen un token de servicio compartido, enviado como X-Kvasir-Service-Token. Ese token es lo único que hay entre la internet abierta y el uso gratuito del anillo, y por eso el bridge escucha en loopback y se alcanza a través de un túnel en vez de publicarse.
Dos trabajos que el motor no hará
- La plantilla de chat. p4 le entrega al stage server un prompt opaco y no aplica ningún formato de turno propio. El bridge renderiza el del modelo — leído del GGUF y nombrado en el catálogo como
prompt_format. Sáltatelo y un modelo instruct continúa tu texto en vez de responderlo, nunca emite su token de fin de turno y llega al límite de tokens siempre. - El bloque de razonamiento. Un modelo de razonamiento abre su respuesta pensando. El bridge devuelve eso como
reasoning_content, separado decontent, y respetaenable_thinking: falsecerrando el bloque dentro del prompt — si no, una pasada larga de pensamiento puede consumir todo el presupuesto y entregarle a quien llama una respuesta vacía que ya ha pagado.
Por qué responde 409
Pedirle al bridge que sirva un modelo devuelve 409. Qué capas van en qué GPU, y bajo qué load generation, sale de un plan de colocación que un operador escribió y cargó; no hay ninguna recarga remota que hacer. El watchdog de anillo del gateway lo aprende una vez y deja de preguntar, en vez de reintentar algo que no puede funcionar.
Los contadores de contribución viven en memoria. Un reinicio del bridge pierde lo que el gateway aún no había sondeado — sondea cada 30 segundos — y el gateway rehace la línea base en vez de contar doble cuando un contador va hacia atrás. Un nodo cuyo dueño el bridge no conoce se omite en silencio, así que una wallet de operador sin configurar se lee como "estas máquinas no ganaron nada".