Çerez kullanıyoruz. Çerezler ve tarayıcı depolaması oturumunu açık tutar ve tercihlerini hatırlar. İzin verirsen sitenin nasıl kullanıldığını da ölçeriz. İstediğin zaman . Ayrıntılar için çerez politikamıza bak.

Streaming

Uç noktalar

Streaming

stream true ile token'ları üretildikleri anda server-sent events olarak alın; olay biçimini, kullanım bilgisini ve istemci tarafı okumayı öğrenin.

Playground’da dene

Token'ları üretildikleri anda almak için Chat completions, Responses veya Completions isteklerinde stream: true ayarlayın. Yanıt server-sent events (Content-Type: text/event-stream) kullanır. api14, upstream'den gelen baytları geldikleri anda size iletir ve arabelleğe almaz.

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 ?? "");
}

Olay formatı

Her olay, bir JSON parçası içeren bir data: satırıdır. Stream data: [DONE] ile biter.

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]
  • [DONE] öncesindeki son parça, USD cinsinden cost dahil usage bilgisini taşır. stream_options.include_usage gerekmez. Kullanım raporlaması her zaman açıktır.
  • id her parçada aynıdır. Bu, Üretim sorgulama'ya iletebileceğiniz üretim kimliğidir.
  • Bazı sağlayıcılar bağlantıyı canlı tutmak için : ile başlayan SSE yorum satırları gönderir. SSE istemcileri ve OpenAI SDK'ları bunları yok sayar. Stream'i kendiniz ayrıştırıyorsanız : ile başlayan satırları atlayın.

Stream'lerin faturalandırılması

Ağ geçidi stream'i iletirken son usage parçasını okur ve stream kapandığında bakiyenizden düşer.

Bağlantıyı kesmek faturayı iptal etmez. Stream bitmeden bağlantıyı kapatırsanız upstream sağlayıcı üretmeye devam edebilir ve yine de ücretlendirebilir. Bu durumda api14 maliyeti üretim kaydından okur. Maliyeti sınırlamak için max_tokens ayarlayın.

Stream sırasında hatalar

İlk bayttan önce oluşan hatalar (geçersiz anahtar, düşük bakiye veya bilinmeyen model gibi) 4xx veya 5xx durum koduyla normal bir JSON hatası döndürür. Bkz. Hatalar. Bir sağlayıcı stream ortasında başarısız olursa, stream bir error nesnesi ve finish_reason: "error" içeren bir parçayla sona erebilir:

{ "error": { "code": 502, "message": "Provider disconnected" }, "choices": [{ "delta": { "content": "" }, "finish_reason": "error" }] }

Son parçadaki finish_reason değerini her zaman kontrol edin.

İpuçları

  • Proxy'ler ve serverless platformlar bazen yanıtları arabelleğe alır. Stream'i tarayıcılara aktarıyorsanız yanıt arabelleğe almayı devre dışı bırakın (örn. nginx'te X-Accel-Buffering: no).
  • Araç çağrıları delta.tool_calls parçaları olarak stream edilir. Ayrıştırmadan önce arguments string'lerini index değerine göre birleştirin. Bkz. Araç çağırma.
  • Reasoning modelleri, yanıttan önce reasoning içeriklerini delta.reasoning içinde stream eder. Bkz. Reasoning.