DemoQA AIDocs
Руководства

Streaming и SSE

Потоковая доставка Chat Completions и Responses API через Server-Sent Events.

Добавьте "stream": true. Сервер отвечает text/event-stream; каждый фрейм начинается с data: и отделяется пустой строкой.

curl -N https://demoqa.ru/v1/chat/completions \
  -H "Authorization: Bearer $DEMOQA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-4.1-mini",
    "messages": [{"role":"user","content":"Дай чек-лист smoke-теста"}],
    "stream": true
  }'

Чтение потока в TypeScript

const response = await fetch('https://demoqa.ru/v1/responses', options);
if (!response.ok || !response.body) throw new Error(`HTTP ${response.status}`);

const reader = response.body.pipeThrough(new TextDecoderStream()).getReader();
let buffer = '';

while (true) {
  const { value = '', done } = await reader.read();
  if (done) break;
  buffer += value;
  const frames = buffer.split('\n\n');
  buffer = frames.pop() ?? '';

  for (const frame of frames) {
    const data = frame.split('\n').find(line => line.startsWith('data:'))?.slice(5).trim();
    if (data && data !== '[DONE]') console.log(JSON.parse(data));
  }
}

Не предполагаете, что один network chunk равен одному SSE-событию: граница может пройти в любом месте UTF-8 текста. Учитывайте AbortController, таймаут бездействия и возможное завершение соединения до финального события.

On this page