Streaming
Cómo llega una completion transmitida por el cable, qué lleva el último frame, y qué sucede cuando un cliente se desconecta.
El transporte
Establezca stream: true y la respuesta es text/event-stream: un objeto JSON por línea data:, cada uno seguido de una línea vacía. El búfer está deshabilitado para que un proxy no retenga frames.
HTTP/1.1 200 OK
content-type: text/event-stream; charset=utf-8
cache-control: no-cache, no-transform
connection: keep-alive
Los frames
El primer frame lleva el rol de assistant, luego un frame por delta, luego un frame con finish_reason y el bloque de enrutamiento, luego exactamente un terminador. Un cliente que sigue el formato lee el terminador y se detiene; no debe tratar un terminador ausente como una respuesta completa.
data: {"id":"chatcmpl-…","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
data: {"id":"chatcmpl-…","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"Hallo"},"finish_reason":null}]}
data: {"id":"chatcmpl-…","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"llmeu":{…}}
data: [DONE]
El bloque de enrutamiento viaja con el último frame
El frame final lleva el mismo objeto llmeu que devuelve la respuesta no transmitida: trace_id, model_used, model_version, provider, endpoint_id, inference_region, sovereignty_class, policy_id, retention y la estimación de coste. En modo streaming el uso solo se conoce al final, por lo que el bloque viaja con el último frame en lugar del primero.
Desconexiones del cliente
Cerrar la conexión detiene el trabajo y escribe la traza con lo que se produjo realmente. Una solicitud cancelada sigue siendo una llamada que ocurrió, por lo que aparece en el uso; no se registra como un completion completo.
Lo que no se puede transmitir
Los embeddings y la API de plataforma son respuestas JSON únicas. stream: true en una ruta no transmitida es un error de validación, no un fallback silencioso a un frame.