Guias
Respostas com streaming
Server-sent events, formato de chunks e como cancelar uma geração de forma limpa.
Defina stream: true e a resposta se torna um text/event-stream de chunks no
formato de streaming do OpenAI. Parsers SSE existentes funcionam sem alterações.
Formato do chunk
Cada evento carrega um delta parcial. O stream termina com um [DONE] literal.
data: {"id":"cmpl_9f2a1c","choices":[{"delta":{"role":"assistant"},"index":0}]}
data: {"id":"cmpl_9f2a1c","choices":[{"delta":{"content":"Reserved"},"index":0}]}
data: {"id":"cmpl_9f2a1c","choices":[{"delta":{"content":" capacity"},"index":0}]}
data: {"id":"cmpl_9f2a1c","choices":[{"delta":{},"index":0,"finish_reason":"stop"}]}
data: [DONE]usage está ausente em todos os chunks, exceto no último, e apenas quando
você passa stream_options: { "include_usage": true }.
Consumindo o stream
const stream = await client.chat.completions.create({
model: "stac-1",
messages,
stream: true,
});
for await (const chunk of stream) {
const delta = chunk.choices[0]?.delta?.content;
if (delta) process.stdout.write(delta);
}stream = client.chat.completions.create(
model="stac-1",
messages=messages,
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)curl -N "https://api.trystac.com/v1/chat/completions" \
-H "Authorization: Bearer $STAC_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "model": "your-stack-model", "messages": [...], "stream": true }'O flag -N importa para o curl: sem ele a saída é bufferizada e o stream
parece uma resposta sem streaming lenta.
Cancelando
Aborte a requisição HTTP. O Stac para a geração assim que a conexão é fechada, liberando essa capacidade para a próxima requisição.
const controller = new AbortController();
setTimeout(() => controller.abort(), 5000);
try {
const stream = await client.chat.completions.create(
{ model: "stac-1", messages, stream: true },
{ signal: controller.signal }
);
} catch (error) {
if (error.name === "AbortError") return;
throw error;
}Soltar o leitor sem abortar deixa a geração rodando até a conclusão sem motivo. Sempre aborte.
Erros no meio do stream
Uma vez que os cabeçalhos da resposta são enviados, o status já é 200, então
uma falha após esse ponto só pode chegar como uma conexão quebrada, não como um
status de erro HTTP. Trate um stream que termina sem um evento [DONE] como
uma falha e retente a requisição do zero — não existe retomar parcialmente.

