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.completed untuk stream Responses API
  • finish_reason: "stop" untuk stream Chat Completions
  • finish_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.

Praktik Terbaik

Di halaman ini