Endpoints
Streaming
Strömma tokens från vilken textmodell som helst med server-sent events genom att sätta stream: true, med exempel på hur du läser strömmen.
Testa i playgroundSätt stream: true på Chat completions, Responses eller Completions för att ta emot tokens i takt med att de genereras. Svaret använder server-sent events (Content-Type: text/event-stream). api14 skickar vidare bytes från uppströmsleverantören till dig när de kommer in och buffrar dem inte.
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 ?? "");
}
Händelseformat
Varje händelse är en data:-rad med en JSON-chunk. Strömmen avslutas med 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]
- Den sista chunken före
[DONE]innehållerusage, inklusivecosti USD. Du behöver intestream_options.include_usage. Användningsrapportering är alltid påslagen. idär detsamma i varje chunk. Det är genererings-id:t som du kan skicka till Uppslag av generering.- Vissa leverantörer skickar SSE-kommentarsrader (som börjar med
:) för att hålla anslutningen vid liv. SSE-klienter och OpenAI-SDK:erna ignorerar dem. Om du parsar strömmen själv, hoppa över rader som börjar med:.
Debitering av strömmar
Gatewayen läser den sista usage-chunken medan strömmen vidarebefordras och drar beloppet från ditt saldo när strömmen stängs.
Att koppla ner avbryter inte debiteringen. Om du stänger anslutningen innan strömmen är klar kan leverantören uppströms fortsätta generera och ändå ta betalt för det. I så fall läser api14 kostnaden från genereringsposten. Sätt max_tokens för att begränsa kostnaden.
Fel under en ström
Fel som uppstår före första byten, som en ogiltig nyckel, för lågt saldo eller en okänd modell, returnerar ett vanligt JSON-fel med en 4xx- eller 5xx-status. Se Fel. Om en leverantör fallerar mitt i strömmen kan strömmen avslutas med en chunk som innehåller ett error-objekt och finish_reason: "error":
{ "error": { "code": 502, "message": "Provider disconnected" }, "choices": [{ "delta": { "content": "" }, "finish_reason": "error" }] }
Kontrollera alltid finish_reason i den sista chunken.
Tips
- Proxyer och serverlösa plattformar buffrar ibland svar. Stäng av svarsbuffring (t.ex.
X-Accel-Buffering: noi nginx) om du vidarebefordrar strömmen till webbläsare. - Verktygsanrop strömmas som
delta.tool_calls-fragment. Sätt ihoparguments-strängarna perindexinnan du parsar dem. Se Verktygsanrop. - Resonerande modeller strömmar sitt resonemang i
delta.reasoningföre svaret. Se Resonemang.