Streaming LLM API Responses (2026): SSE in Python & JavaScript
stream llm apistreaming ai responsesserver sent events llmllm streaming pythonai api streaming

Streaming LLM API Responses (2026): SSE in Python & JavaScript

2026-07-15

Why Stream

Without streaming, users stare at a spinner until the whole answer is done. With streaming, tokens appear as they're generated — the response feels instant even if total time is the same. It also lets you cut a generation off early. This is table stakes for chat UIs and agents.

How It Works

Streaming APIs return server-sent events (SSE): a text/event-stream where each chunk is a small JSON delta, ending with a done signal. You set "stream": true and read the body incrementally instead of awaiting the full JSON.

Python

import os, requests, json
 
with requests.post(
    "https://api.linkmodel.ai/v1/chat/completions",
    headers={"Authorization": f"Bearer {os.environ['LINKMODEL_API_KEY']}"},
    json={"model": "claude-sonnet-4-6",
          "messages": [{"role": "user", "content": "Write a haiku about latency."}],
          "stream": True},
    stream=True, timeout=120,
) as r:
    for line in r.iter_lines():
        if not line or not line.startswith(b"data: "):
            continue
        chunk = line[6:]
        if chunk == b"[DONE]":
            break
        delta = json.loads(chunk)
        # print the incremental text (shape varies by provider — check docs)
        print(delta, end="", flush=True)

JavaScript (Browser or Node)

const res = await fetch(URL, {
  method: "POST",
  headers: { Authorization: `Bearer ${KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({ model: "gpt-5.6-terra", messages: MSGS, stream: true }),
});
const reader = res.body.getReader();
const dec = new TextDecoder();
while (true) {
  const { value, done } = await reader.read();
  if (done) break;
  const text = dec.decode(value);           // parse "data: {...}" lines
  process.stdout.write(text);               // render deltas as they arrive
}

Render deltas straight into your UI for the typewriter effect.

Tips

  • Parse line-by-line — chunks may split mid-line; buffer partial lines.
  • Handle [DONE] and network drops gracefully; add a timeout.
  • Measure time-to-first-token, not just total — that's what users feel. See AI API latency guide.
  • The exact delta shape varies by model — confirm in the docs.
  • Combine with prompt caching to cut first-token latency on repeated prefixes.

Bottom Line

Set stream: true, read the body incrementally, and render deltas as they arrive — the single biggest perceived-speed win for chat and agents. Works the same across models on one key. Start from the Python or Node.js quickstart.

Start free with a $1 credit and stream your first response.

Related Posts