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çãoComportamento
Cliente aborta o requestGeração é interrompida; cobramos apenas o que já foi gerado
Erro antes do primeiro chunkResposta JSON normal com código de erro; sem cobrança
Erro no meio do streamEvento data com error e done:true; cobramos o parcial
Timeout de 120s sem chunkStream encerrado com stream_timeout