Streaming

Comment une complétion en streaming arrive sur le réseau, ce que porte la dernière trame, et ce qui se passe lorsqu'un client se déconnecte.

Le transport

Définissez stream: true et la réponse est text/event-stream : un objet JSON par ligne data:, chacun suivi d'une ligne vide. La mise en tampon est désactivée pour qu'un proxy ne retienne pas les trames.

HTTP/1.1 200 OK
content-type: text/event-stream; charset=utf-8
cache-control: no-cache, no-transform
connection: keep-alive

Les trames

La première trame porte le rôle assistant, puis une trame par delta, puis une trame avec finish_reason et le bloc de routage, puis exactement un terminateur. Un client qui suit le format lit le terminateur et s'arrête ; il ne doit pas traiter un terminateur manquant comme une réponse complète.

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]

Le bloc de routage voyage avec la dernière trame

La trame finale porte le même objet llmeu que celui renvoyé par la réponse non streamée : trace_id, model_used, model_version, provider, endpoint_id, inference_region, sovereignty_class, policy_id, retention et l'estimation du coût. En mode streaming, l'utilisation n'est connue qu'à la fin, c'est pourquoi le bloc voyage avec la dernière trame plutôt qu'avec la première.

Déconnexions client

Fermer la connexion arrête le travail et écrit la trace avec ce qui a réellement été produit. Une requête annulée reste un appel qui a eu lieu, elle apparaît donc dans l'utilisation ; elle n'est pas enregistrée comme une complétion terminée.

Ce qui ne peut pas être streamé

Les embeddings et l'API de plateforme sont des réponses JSON uniques. stream: true sur une route non streamée est une erreur de validation, pas un repli silencieux vers une seule trame.