# Streaming API для Grok

Стриминг Grok через Server-Sent Events (SSE) позволяет показывать ответ пользователю по мере генерации.

Если нужен один готовый объект ответа, используйте [Messages API](https://grok-api.dev/ru/docs/messages).

## Как работает стриминг

HTTP-соединение остаётся открытым и передаёт упорядоченные события до завершения ответа. Добавьте `stream: true` в тело запроса.

```bash
curl -N https://api.llm-gate.tech/v1/responses \
  -H "Authorization: Bearer $GROK_API_DEV_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: text/event-stream" \
  -d '{"model":"grok-4.5","input":"Объясни бинарный поиск в двух предложениях.","stream":true}'
```

## Типы событий

Во время прослушивания стрима клиент получает события жизненного цикла генерации.

| event | handling |
| --- | --- |
| response.created | Сохранить response ID. |
| response.output_item.added | Обработать новый типизированный элемент output. |
| response.content_part.added | Обработать новую часть content. |
| response.output_text.delta | Последовательно добавить фрагмент текста. |
| response.output_text.done | Завершить текущую текстовую часть. |
| response.completed | Получить итоговый ответ, статус и usage. |
| error | Остановить вывод и обработать ошибку. |

## Пример на JavaScript

```javascript
const stream = await client.responses.create({
  model: "grok-4.5",
  input: "Объясни бинарный поиск в двух предложениях.",
  stream: true,
});

for await (const event of stream) {
  if (event.type === "response.output_text.delta") {
    process.stdout.write(event.delta);
  }
  if (event.type === "response.completed") {
    console.log(event.response.usage);
  }
}
```

## Обработка ошибок

| case | handling |
| --- | --- |
| HTTP-ошибка до SSE | Если статус не 2xx, разобрать обычное JSON-тело ошибки. |
| Событие error | Сохранить частичный результат, отметить его незавершённым и записать response ID. |
| Раннее отключение | Если response.completed не получен, считать ответ незавершённым. |
| 429 или временная 5xx | Использовать ограниченный exponential backoff с jitter, только если результат не зафиксирован. |
