# Streaming

> Recevez les réponses token par token sous forme de Server-Sent Events en définissant stream: true.

- Canonical: https://tchavi.com/fr/docs/streaming

---


Définissez `stream: true` pour recevoir la réponse token par token sous forme de Server-Sent Events (SSE). Cela permet d'afficher le texte au fur et à mesure de son arrivée plutôt que d'attendre la réponse complète.

## Fonctionnement

Lorsque le streaming est activé, l'API renvoie une série de lignes SSE. Chaque ligne commence par `data: ` suivi d'un fragment JSON. Le morceau de texte de chaque fragment se trouve dans `choices[0].delta.content`. Le flux se termine par une dernière ligne sentinelle `data: [DONE]`, que vous devez ignorer plutôt que d'analyser.

## Exemples

<CodeTabs>

```tchavi
import Tchavi from '@tchavi/sdk';

const client = new Tchavi({ apiKey: process.env.TCHAVI_API_KEY });

const stream = await client.chat.completions.create({
  model: 'gpt-4o-mini',
  messages: [{ role: 'user', content: 'Tell me a short story.' }],
  stream: true,
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? '');
}
```

```javascript
const response = await fetch('https://tchavi.com/api/v1/chat/completions', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    Authorization: 'Bearer YOUR_API_KEY',
  },
  body: JSON.stringify({
    model: 'gpt-4o-mini',
    messages: [{ role: 'user', content: 'Tell me a short story.' }],
    stream: true,
  }),
});

const reader = response.body.getReader();
const decoder = new TextDecoder();

while (true) {
  const { done, value } = await reader.read();
  if (done) break;

  const lines = decoder.decode(value).split('\n');
  for (const line of lines) {
    if (!line.startsWith('data: ') || line.includes('[DONE]')) continue;
    const delta = JSON.parse(line.slice(6)).choices[0]?.delta?.content ?? '';
    process.stdout.write(delta);
  }
}
```

```python
import requests, json

response = requests.post(
    "https://tchavi.com/api/v1/chat/completions",
    headers={
        "Content-Type": "application/json",
        "Authorization": "Bearer YOUR_API_KEY",
    },
    json={
        "model": "gpt-4o-mini",
        "messages": [{"role": "user", "content": "Tell me a short story."}],
        "stream": True,
    },
    stream=True,
)

for line in response.iter_lines():
    if not line or line == b"data: [DONE]":
        continue
    data = json.loads(line.decode().removeprefix("data: "))
    print(data["choices"][0]["delta"].get("content", ""), end="", flush=True)
```

</CodeTabs>

<Callout type="tip">
  Le streaming utilise le même format de requête compatible OpenAI qu'un appel normal — vous ajoutez
  seulement `stream: true`.
</Callout>

Consultez [Chat Completions](/fr/docs/chat-completions) pour la référence complète des requêtes et des réponses.

