Panduan inti
Streaming
Mengimplementasikan respons streaming real-time
Ringkasan
Streaming mengirim keluaran bertahap. Gunakan Responses jika model memuat openai_responses dalam accepted_request_formats; klien Chat Completions yang ada dapat mempertahankan formatnya.
Direkomendasikan: 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
}'Batas Streaming Responses dan Gemini
Responses SSE mempertahankan nama, urutan, dan field peristiwa publik. Koneksi yang putus setelah keluaran tiba menghasilkan respons belum lengkap dan tidak dimulai ulang otomatis.
Responses WebSocket memakai response.create dan selalu streaming; background serta response.cancel tidak didukung. Satu koneksi memproses satu respons sekaligus, hingga 60 menit. generate: false membuat ID kelanjutan tanpa keluaran atau biaya model.
Gemini SSE mengirim chunk native. Peristiwa antara dapat tidak memuat finishReason, dan aliran bisa berakhir tanpa penanda Chat [DONE].
Streaming Chat Completions
Jika framework Anda masih mengharapkan chunk SSE dari /v1/chat/completions, itu juga berfungsi:
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}")Kondisi Akhir Stream
Kondisi penyelesaian yang umum:
response.completeduntuk stream Responses APIfinish_reason: "stop"untuk stream Chat Completionsfinish_reason: "length"saat batas token tercapai- event pemanggilan tool/function saat model ingin menggunakan tool
Pola Aplikasi Web
Jalankan pemroses stream SDK di server. Browser memanggil backend Anda yang terautentikasi; simpan kunci TokenLab di lingkungan server. Teruskan potongan teks dan batalkan stream saat pengguna berhenti atau terputus. Gunakan SDK untuk mengurai SSE: satu blok jaringan belum tentu berisi satu peristiwa lengkap.