Streaming
Atur stream: true dan balasan akan dikirim sebagai server-sent events selama model menuliskannya, alih-alih sekaligus di akhir. Setiap endpoint teks mendukung streaming, dalam format event yang diharapkan SDK. Permintaan streaming dihitung, ditagih, dan dicatat sama seperti permintaan lainnya.
Chat Completions
const stream = await client.chat.completions.create({
model: "gpt-5.5",
messages: [{ role: "user", content: "Write a haiku about latency." }],
stream: true,
stream_options: { include_usage: true },
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
stream = client.chat.completions.create(
model="gpt-5.5",
messages=[{"role": "user", "content": "Write a haiku about latency."}],
stream=True,
stream_options={"include_usage": True},
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
Di jaringan, setiap event berupa baris data: yang berisi chat.completion.chunk, dan stream diakhiri dengan data: [DONE]:
curl -N https://api.inferray.com/v1/chat/completions \
-H "Authorization: Bearer $INFERRAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "gpt-5.5", "stream": true, "messages": [{"role": "user", "content": "Count to five."}]}'
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"One"}}]}
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: [DONE]
Potongan terakhir sebelum [DONE] membawa usage, termasuk cost yang ditagihkan, dan array choices yang kosong. Pemanggilan tool dikirim sebagai fragmen delta.tool_calls; gabungkan string arguments berdasarkan index sebelum diurai.
Responses
Responses API men-stream event bertipe. Teks tiba di response.output_text.delta, dan response.completed menutup stream dengan respons lengkap beserta usage-nya, termasuk cost:
const stream = await client.responses.create({
model: "gpt-5.5",
input: "Write a haiku about latency.",
stream: true,
});
for await (const event of stream) {
if (event.type === "response.output_text.delta") process.stdout.write(event.delta);
}
Messages
Endpoint Messages men-stream event Anthropic: message_start, lalu content_block_start, content_block_delta, dan content_block_stop untuk setiap block, message_delta beserta stop reason dan output usage, serta message_stop.
const stream = client.messages.stream({
model: "claude-opus-4-8",
max_tokens: 1024,
messages: [{ role: "user", content: "Write a haiku about latency." }],
});
stream.on("text", (text) => process.stdout.write(text));
await stream.finalMessage();
Error selama stream
Error sebelum token pertama dikembalikan sebagai error HTTP biasa dengan body JSON. Setelah stream dimulai, statusnya sudah 200, sehingga error datang sebagai event di dalam stream — objek error dalam sebuah chunk, atau event error Anthropic. Tangani keduanya, dan anggap stream yang berakhir tanpa event terakhirnya ([DONE], response.completed, message_stop) sebagai tidak lengkap.
Yang Tidak Mendukung Streaming
Embedding, gambar, ucapan, transkripsi, dan endpoint non-teks lainnya mengembalikan satu respons. Video adalah job asinkron yang Anda polling sebagai gantinya.