Guias principais
Streaming
Implemente respostas de streaming em tempo real
Visão geral
Streaming entrega a saída aos poucos. Use Responses se o modelo declarar openai_responses em accepted_request_formats; clientes existentes de Chat Completions podem manter o formato.
Recomendado: Responses Streaming
curl https://api.tokenlab.sh/v1/responses \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.6-terra",
"input": "Write a short poem.",
"stream": true
}'Limites de streaming de Responses e Gemini
Responses SSE preserva nomes, ordem e campos públicos dos eventos. Uma interrupção após receber conteúdo deixa a resposta incompleta, sem reinício automático.
Responses WebSocket usa response.create e sempre transmite em streaming; não aceita background nem response.cancel. Cada conexão processa uma resposta por vez e dura até 60 minutos. generate: false cria um ID de continuação sem saída ou cobrança do modelo.
Gemini SSE retorna chunks nativos. Eventos intermediários podem omitir finishReason e o fluxo pode terminar sem o marcador Chat [DONE].
Streaming de Chat Completions
Se o seu framework ainda espera chunks SSE de /v1/chat/completions, isso também funciona:
import os
from openai import OpenAI
with OpenAI(
api_key=os.environ["TOKENLAB_API_KEY"],
base_url="https://api.tokenlab.sh/v1",
timeout=30.0,
max_retries=0,
) as client:
finish_reason = None
with client.chat.completions.create(
model="gpt-5.6-terra",
messages=[{"role": "user", "content": "Write a short poem."}],
stream=True,
stream_options={"include_usage": True},
) as stream:
for chunk in stream:
if not chunk.choices:
continue
choice = chunk.choices[0]
if choice.delta.content:
print(choice.delta.content, end="", flush=True)
if choice.finish_reason:
finish_reason = choice.finish_reason
if finish_reason != "stop":
raise RuntimeError(f"Stream ended without a complete text answer: {finish_reason}")Condições de término do stream
Condições típicas de conclusão:
response.completedpara streams da Responses APIfinish_reason: "stop"para streams de Chat Completionsfinish_reason: "length"quando um limite de token é atingido- eventos de chamada de tool/function quando o modelo deseja usar tools
Padrão para aplicação web
Processe o fluxo do SDK no servidor. O navegador deve chamar seu próprio backend autenticado; mantenha a chave TokenLab no ambiente do servidor. Encaminhe os trechos de texto e cancele o fluxo quando o usuário parar ou desconectar. Use o SDK para interpretar SSE: um bloco de rede não corresponde necessariamente a um evento completo.