# Streaming responses: het antwoord terwijl het geschreven wordt

> Stream chat completions met server-sent events: stream: true, het chunk-formaat, tokengebruik in de laatste event, en voorbeelden in curl, Python en Node.js.

- URL: https://llmwithcrypto.com/nl/docs/streaming/
- Laatst bijgewerkt: 2026-10-23
- Uitgever: LLMwithCrypto (https://llmwithcrypto.com)

Met `stream: true` komt het antwoord in kleine stukjes binnen terwijl het model schrijft, zoals chatinterfaces tekst laten verschijnen. Het formaat is dat van OpenAI: server-sent events, één JSON-chunk per event, dan `[DONE]`.

**Snel antwoord — Hoe stream ik een chat completion van LLMwithCrypto?**

Voeg `"stream": true` toe aan de body van `POST https://llmwithcrypto.com/api/v1/chat/completions`. **LLMwithCrypto** antwoordt dan met server-sent events: elke `data:`-regel bevat een `chat.completion.chunk` met een stuk tekst in `delta.content`, en de stream eindigt met `data: [DONE]`. Voeg `"stream_options": {"include_usage": true}` toe om de token-aantallen in een laatste chunk te krijgen. Dit werkt op elk model, zoals gedocumenteerd op 23 oktober 2026.

## Waarom überhaupt streamen?

Voor mensen, omdat de eerste woorden binnen een moment verschijnen in plaats van nadat het hele antwoord is geschreven. Een lang antwoord van een groot model kan vele seconden duren; gestreamd begint de lezer meteen te lezen.

Voor programma's maakt het minder uit: een script dat de volledige tekst nodig heeft, heeft niets aan streaming en moet meer parsen. Stream wanneer er een mens meekijkt, en stuur anders een normaal request. De prijs is hoe dan ook hetzelfde. Je betaalt per token vanaf je saldo: input- en outputtokens worden geteld door de tokenizer van het model zelf en afgerekend tegen de prijs van dat model per 1M tokens. Een call die op een fout eindigt, kost niets.

*curl: -N houdt de verbinding unbuffered*

```bash
curl -sN "https://llmwithcrypto.com/api/v1/chat/completions" \
  -H "Authorization: Bearer $LLMWITHCRYPTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4.1-flash",
    "messages": [{"role": "user", "content": "Write a haiku about latency."}],
    "stream": true,
    "stream_options": {"include_usage": true},
    "max_tokens": 120
  }'

```

*Python: print de tekst terwijl die binnenkomt*

```python
import os

from openai import OpenAI

client = OpenAI(
    base_url="https://llmwithcrypto.com/api/v1",
    api_key=os.environ["LLMWITHCRYPTO_API_KEY"],
)

stream = client.chat.completions.create(
    model="deepseek-v4.1-flash",
    messages=[{"role": "user", "content": "Write a haiku about latency."}],
    stream=True,
    stream_options={"include_usage": True},
    max_tokens=120,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
    if chunk.usage:
        print("\n", chunk.usage.prompt_tokens, "in,", chunk.usage.completion_tokens, "out")

```

*Node.js: for await over de chunks*

```javascript
import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://llmwithcrypto.com/api/v1',
  apiKey: process.env.LLMWITHCRYPTO_API_KEY,
});

const stream = await client.chat.completions.create({
  model: 'deepseek-v4.1-flash',
  messages: [{ role: 'user', content: 'Write a haiku about latency.' }],
  stream: true,
  stream_options: { include_usage: true },
  max_tokens: 120,
});
for await (const chunk of stream) {
  const text = chunk.choices[0]?.delta?.content;
  if (text) process.stdout.write(text);
  if (chunk.usage) console.log(`\n${chunk.usage.prompt_tokens} in, ${chunk.usage.completion_tokens} out`);
}

```

## Hoe ziet de stream er op de wire uit?

Elk event is één regel die begint met `data: `, gevolgd door een lege regel. De eerste chunk bevat meestal de `role`, de volgende een paar tekens `content` elk, en de chunk met een `finish_reason` sluit het antwoord af. Met `include_usage` volgt nog één chunk met een lege `choices`-array en het `usage`-object. De stream eindigt altijd met `data: [DONE]`. De ids en aantallen hieronder zijn illustratief.

*Server-sent events van één kort antwoord (illustratief)*

```text
data: {"id":"chatcmpl-5a1e","object":"chat.completion.chunk","created":1792742400,"model":"deepseek-v4.1-flash","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}

data: {"id":"chatcmpl-5a1e","object":"chat.completion.chunk","created":1792742400,"model":"deepseek-v4.1-flash","choices":[{"index":0,"delta":{"content":"Packets"},"finish_reason":null}]}

data: {"id":"chatcmpl-5a1e","object":"chat.completion.chunk","created":1792742400,"model":"deepseek-v4.1-flash","choices":[{"index":0,"delta":{"content":" cross the"},"finish_reason":null}]}

data: {"id":"chatcmpl-5a1e","object":"chat.completion.chunk","created":1792742400,"model":"deepseek-v4.1-flash","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}

data: {"id":"chatcmpl-5a1e","object":"chat.completion.chunk","created":1792742400,"model":"deepseek-v4.1-flash","choices":[],"usage":{"prompt_tokens":14,"completion_tokens":19,"total_tokens":33}}

data: [DONE]

```

## Wat als de stream afbreekt?

Een fout vóór de eerste token, zoals een verkeerde sleutel of een leeg saldo, komt terug als een normale HTTP-fout met een JSON-body, niet als een stream; de [foutenpagina](https://llmwithcrypto.com/nl/docs/errors/) vermeldt ze. Een fout tijdens het genereren beëindigt de stream vroegtijdig, zonder `finish_reason`.

Sluit je de verbinding zelf, dan stopt de generatie. Je betaalt dan voor de input en de al gegenereerde tokens, zoals bij elke call. Je code moet een stream die eindigt zonder `finish_reason` en zonder `[DONE]` als onvolledig behandelen, en het request opnieuw sturen als het het volledige antwoord nodig heeft.

## Streaming: veelgestelde vragen

### Kost streamen meer?

Nee. Dezelfde tokens worden tegen dezelfde prijs gefactureerd. Je betaalt per token vanaf je saldo: input- en outputtokens worden geteld door de tokenizer van het model zelf en afgerekend tegen de prijs van dat model per 1M tokens. Een call die op een fout eindigt, kost niets.

### Kan ik streamen met tool calling?

Ja, op de modellen die tools ondersteunen: de functienaam en argumenten komen in stukjes binnen in `delta.tool_calls` en moeten worden samengevoegd voordat je ze gebruikt. De [tool calling-pagina](https://llmwithcrypto.com/nl/docs/tool-calling/) toont de niet-gestreamde loop, die eenvoudiger is om mee te beginnen.

### Waarom krijg ik geen usage bij een gestreamde call?

Voeg `"stream_options": {"include_usage": true}` toe. Zonder dit bevat een stream geen tokentellingen; het dashboard toont ze nog wel.

---

LLMwithCrypto: LLMwithCrypto is een OpenAI-compatibele LLM API voor open-weight modellen — DeepSeek V4 Pro, DeepSeek V4.1 Flash, DeepSeek R1, Qwen3.5 397B A17B, Qwen3 235B A22B Instruct, gpt-oss-120b, gpt-oss-20b, GLM-4.7, Llama 3.3 70B Instruct, Gemma 4 31B, Mistral Large 3, Mistral Small 4 — betaald per token vanaf een prepaid crypto-saldo, tegen 5% onder de mediane prijs van de publieke hosts. Zonder KYC: geen ID, geen selfie, geen documenten. Prompts en outputs worden niet opgeslagen.
