Streaming

Como uma completion em streaming chega à rede, o que transporta o último frame e o que acontece quando um cliente se desliga.

O transporte

Defina stream: true e a resposta é text/event-stream: um objeto JSON por linha data:, cada um seguido por uma linha vazia. O buffering está desativado para que um proxy não retenha frames.

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

Os frames

O primeiro frame transporta o papel de assistente, depois um frame por delta, depois um frame com finish_reason e o bloco de encaminhamento, e por fim exatamente um terminador. Um cliente que segue o formato lê o terminador e para; não deve tratar um terminador ausente como uma resposta 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]

O bloco de encaminhamento viaja com o último frame

O frame final transporta o mesmo objeto llmeu que a resposta não-streaming devolve: trace_id, model_used, model_version, provider, endpoint_id, inference_region, sovereignty_class, policy_id, retention e a estimativa de custo. No modo streaming, a utilização só é conhecida no final, razão pela qual o bloco viaja com o último frame em vez do primeiro.

Cliente desliga-se

Fechar a ligação para o trabalho e escreve o trace com o que foi realmente produzido. Um pedido cancelado continua a ser uma chamada que aconteceu, pelo que aparece na utilização; não é registado como uma completion concluída.

O que não pode ser transmitido em streaming

Os embeddings e a API da plataforma são respostas JSON únicas. stream: true numa rota não-streaming é um erro de validação, não um fallback silencioso para um frame.