p4
El motor detrás de Kvasir: un protocolo direccionado por eventos donde los agentes poseen nodos, los stage servers guardan capas y la colocación es algo que un operador declara, no algo que la red adivina.
p4 ejecuta un modelo en varias máquinas cortándolo en stages — rebanadas contiguas de sus capas — y dándole a cada stage su propio proceso. Un agente posee los nodos de un host: lanza stage servers, enruta eventos entre ellos y responde por su ciclo de vida. No hay ningún scheduler decidiendo dónde va cada cosa; un operador escribe un plan de colocación, lo carga, y la red sirve exactamente eso.
El camino de una petición por un despliegue p4.
browser / SDK → gateway :8791 # payment, settlement, the wallet app → bridge :19000 # OUTER: session, submit, gather → p4 agent # owns this host's nodes → stage servers # one process per layer slice
Un stage marca al agente del siguiente stage
Cuando un stage termina sus capas, entrega el resultado al siguiente pidiéndole a su propio agente que abra una conexión con el agente de ese stage, en la dirección que ese agente anuncia. La dirección anunciada no es por tanto cosmética: tiene que ser alcanzable desde todos los demás hosts del anillo, y debería nombrar la red más rápida que compartan. Anuncia loopback y un anillo de dos hosts se marca a sí mismo en silencio.
Un número ata toda una carga
- La load generation la elige quien carga y se compara por igualdad exacta en cada sesión, inferencia, liquidación y descarga. No queda registrada en ninguna de las máquinas, así que quien carga la escribe a disco *antes* de que salga el primer comando — sin ella, un modelo cargado ni siquiera se puede bajar.
- La generación de un nodo y la load generation son el mismo número. El adaptador compara la generación de origen de un recibo de release con la de la carga a la que pertenece y detiene el nodo cuando difieren, así que un anillo cargado con dos números distintos sirve una petición y después pierde la cabeza.
- Hace falta un diario operativo antes de que un modelo llegue siquiera a cargarse: es el registro de admisión que hace que una carga sea segura ante repeticiones, no una ayuda de depuración.
Omisiones deliberadas
p4 no aplica ninguna plantilla de chat — reenvía un prompt opaco y espera que quien llama haya renderizado el formato de turno del modelo. No toma ninguna decisión de colocación. Y no lleva noción alguna de a quién hay que pagar: los stages reportan las filas de tokens que ejecutaron, y la liquidación es contrato de otro. Cada una de esas es una costura que Kvasir rellena en el [bridge](/wiki/bridge), lo que mantiene el motor lo bastante estrecho como para seguirle el paso a upstream.
El agente y el stage server nativo son una sola release. Un agente compilado desde un árbol más nuevo falla en READY por una capacidad ausente en el HELLO del stage server — después de cargar el modelo entero. Compila ambos desde el mismo checkout.