Endpoint
Streaming
Stream token lewat server-sent events dengan mengatur stream: true, lengkap dengan format event, usage pada chunk akhir, dan contoh kode.
Coba di playgroundAtur stream: true pada Chat completions, Responses, atau Completions untuk menerima token saat token tersebut dihasilkan. Response memakai server-sent events (Content-Type: text/event-stream). api14 meneruskan byte dari upstream kepada Anda begitu tiba, tanpa mem-buffer-nya.
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api14.com/api/v1",
apiKey: process.env.API14_API_KEY,
});
const stream = await client.chat.completions.create({
"model": "openai/gpt-5-mini",
"messages": [
{
"role": "user",
"content": "Explain vector databases in two sentences."
}
],
"stream": true
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
Format event
Setiap event adalah baris data: yang berisi satu chunk JSON. Stream diakhiri dengan data: [DONE].
data: {"id":"gen-1760000000-abc","object":"chat.completion.chunk","model":"openai/gpt-5-mini","choices":[{"index":0,"delta":{"role":"assistant","content":"Hel"}}]}
data: {"id":"gen-1760000000-abc","object":"chat.completion.chunk","model":"openai/gpt-5-mini","choices":[{"index":0,"delta":{"content":"lo!"}}]}
data: {"id":"gen-1760000000-abc","object":"chat.completion.chunk","model":"openai/gpt-5-mini","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":10,"completion_tokens":3,"total_tokens":13,"cost":0.0000085}}
data: [DONE]
- Chunk terakhir sebelum
[DONE]membawausage, termasukcostdalam USD. Anda tidak perlustream_options.include_usage. Pelaporan pemakaian selalu aktif. idsama di setiap chunk. Itulah generation id yang bisa Anda berikan ke Pencarian generation.- Beberapa penyedia mengirim baris komentar SSE (diawali
:) untuk menjaga koneksi tetap hidup. Klien SSE dan SDK OpenAI mengabaikannya. Jika Anda mem-parse stream sendiri, lewati baris yang diawali:.
Penagihan untuk stream
Gateway membaca chunk usage terakhir sambil meneruskan stream dan memotong saldo Anda setelah stream ditutup.
Memutus koneksi tidak membatalkan tagihan. Jika Anda menutup koneksi sebelum stream selesai, penyedia upstream mungkin tetap melanjutkan generate dan tetap menagihnya. Dalam kasus itu, api14 membaca biaya dari catatan generation. Untuk membatasi biaya, atur max_tokens.
Error saat stream berlangsung
Error sebelum byte pertama, seperti key tidak valid, saldo tidak cukup, atau model tidak dikenal, mengembalikan error JSON biasa dengan status 4xx atau 5xx. Lihat Error. Jika penyedia gagal di tengah stream, stream bisa berakhir dengan chunk yang berisi objek error dan finish_reason: "error":
{ "error": { "code": 502, "message": "Provider disconnected" }, "choices": [{ "delta": { "content": "" }, "finish_reason": "error" }] }
Selalu periksa finish_reason pada chunk terakhir.
Tips
- Proxy dan platform serverless terkadang mem-buffer response. Nonaktifkan buffering response (misalnya
X-Accel-Buffering: nodi nginx) jika Anda meneruskan stream ke browser. - Tool call di-stream sebagai fragmen
delta.tool_calls. Gabungkan stringargumentsberdasarkanindexsebelum mem-parse-nya. Lihat Tool calling. - Model reasoning men-stream proses berpikirnya di
delta.reasoningsebelum jawaban. Lihat Reasoning.