Daftar isi
Streaming
Streaming
Atur stream: true untuk menerima stream Server-Sent Events (SSE). Setiap event berisi potongan respons.
Format SSE
data: {"id":"85e6f35c71a31f19-SJC","choices":[{"delta":{"content":"Hello"},"index":0}]}
data: {"id":"85e6f35c71a31f19-SJC","choices":[{"delta":{"content":" world"},"index":0}]}
data: {"id":"85e6f35c71a31f19-SJC","choices":[{"delta":{},"finish_reason":"stop","index":0}],"usage":{"prompt_tokens":10,"completion_tokens":4,"total_tokens":14}}
data: [DONE]Penggunaan dalam streaming
Saat streaming, data penggunaan dikembalikan dalam potongan terakhir sebelum pesan [DONE], bersama array choices dengan delta kosong dan finish_reason: "stop".
Keep-alive & chunk terakhir
Stream dapat berisi baris komentar SSE dan event unknown atau ping sebagai keep-alive. Abaikan dan parse data frame; data frame terakhir dapat memuat usage sebelum data: [DONE].
: keepalive <- SSE comment line — ignore, do NOT JSON.parse
data: {"id":"85e6f35c71a31f19-SJC","choices":[{"delta":{"content":"Hi"},"index":0}]}
data: {"id":"85e6f35c71a31f19-SJC","choices":[{"delta":{},"finish_reason":"stop","index":0}],"usage":{...}}
data: [DONE]Pembatalan Stream
Permintaan streaming dapat dibatalkan dengan menutup koneksi klien — misalnya memanggil AbortController.abort() atau menutup objek stream. BazaarLink berhenti meneruskan chunk berikutnya dan membatalkan permintaan ke provider segera setelah pembatalan diterima.
Tidak ada biaya untuk stream yang terputus
Jika stream berakhir sebelum chunk usage terakhir tiba — termasuk pembatalan dari sisi klien — tidak ada data jumlah token yang valid untuk permintaan tersebut, sehingga BazaarLink mengembalikan penuh reservasi. Anda tidak dikenakan biaya untuk konten yang sudah terkirim ke klien sebelum pembatalan.
Tidak dijamin langsung berhenti di sisi provider
Menutup koneksi langsung menghentikan BazaarLink dari meneruskan dan menagih token berikutnya, tetapi apakah provider upstream benar-benar menghentikan generasi di server mereka sendiri saat koneksi terputus tergantung pada provider tersebut — beberapa mungkin masih memproses sebentar setelah terputus.
Error di Tengah Stream
Tidak ada field choices pada frame error
Jika terjadi kegagalan setelah streaming sudah dimulai (mis. koneksi upstream terputus), Anda akan menerima SSE data frame berbentuk {error:{message,type,code}} alih-alih {choices:[...]} yang biasa — tanpa perubahan status HTTP, karena header sudah terkirim. Periksa field error sebelum membaca choices[0].delta, dan hanya token yang sudah di-stream yang ditagih (berlaku billing parsial).
data: {"id":"85e6f35c71a31f19-SJC","choices":[{"delta":{"content":"The capital of "},"index":0}]}
data: {"error":{"message":"The request could not be completed.","type":"upstream_error","code":502}}
data: [DONE]