— Docs · Streaming
Streaming por SSE
Endpoints de geração aceitam stream: true e respondem em Server-Sent Events, com o mesmo contrato de erros e cabeçalhos de limite das chamadas normais.
Ativando o stream
curl -N https://onerall.com/api/public/v1/text.generate \
-H "Authorization: Bearer $ONERALL_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "input": "Escreva um haicai", "stream": true }'Formato dos eventos
data: {"id":"req_01H...","delta":"Chuva "}
data: {"id":"req_01H...","delta":"na "}
data: {"id":"req_01H...","delta":"varanda"}
data: {"id":"req_01H...","done":true,"usage":{"calls":1,"cost_usd":0.0004}}
data: [DONE]Linhas iniciadas por : são comentários de keep-alive; ignore-as.
Consumindo em TypeScript
const res = await fetch(url, { method: "POST", headers, body });
const reader = res.body!.getReader();
const decoder = new TextDecoder();
let buffer = "";
while (true) {
const { done, value } = await reader.read();
if (done) break;
buffer += decoder.decode(value, { stream: true });
for (const line of buffer.split("\n")) {
if (!line.startsWith("data: ")) continue;
const payload = line.slice(6);
if (payload === "[DONE]") break;
const evt = JSON.parse(payload);
if (evt.delta) process.stdout.write(evt.delta);
}
buffer = buffer.slice(buffer.lastIndexOf("\n") + 1);
}Cancelamento e cobrança
| Situação | Comportamento |
|---|---|
| Cliente aborta o request | Geração é interrompida; cobramos apenas o que já foi gerado |
| Erro antes do primeiro chunk | Resposta JSON normal com código de erro; sem cobrança |
| Erro no meio do stream | Evento data com error e done:true; cobramos o parcial |
| Timeout de 120s sem chunk | Stream encerrado com stream_timeout |