Стриминг

stream: true превращает ответ чата в поток SSE-чанков. Формат тот же, что у OpenAI, вплоть до финального data: [DONE].

Как включить

Добавь stream: true в тело запроса к /v1/chat/completions. Ответ придёт с Content-Type: text/event-stream, а тело — последовательность строк data: с чанками chat.completion.chunk.

curl -N https://mintform.app/v1/chat/completions \
  -H "Authorization: Bearer mf_live_…" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "gpt-5-mini",
  "messages": [
    {
      "role": "user",
      "content": "Напиши хайку про failover"
    }
  ],
  "stream": true
}'

Что приходит по проводу

Текст собирается из choices[0].delta.content. Поток завершается служебной строкой data: [DONE].

data: {"id":"chatcmpl-…","object":"chat.completion.chunk","choices":[{"delta":{"role":"assistant"}}]}

data: {"id":"chatcmpl-…","object":"chat.completion.chunk","choices":[{"delta":{"content":"Req"}}]}

data: {"id":"chatcmpl-…","object":"chat.completion.chunk","choices":[{"delta":{"content":"uests"}}]}

data: [DONE]

Клиенты

OpenAI SDK умеет это из коробки — итерируйся по ответу. На curl добавь -N, иначе вывод будет буферизоваться.

Что учесть

  • Ошибка до первого байта приходит обычным JSON с кодом 4xx/5xx — то есть поток может вообще не начаться.
  • Если провайдер упал уже посреди потока, соединение обрывается: обработай неполный ответ на своей стороне.
  • Слот конкурентности твоего тарифа занят всё время жизни потока, а не только момент запроса.
  • Промежуточные прокси и CDN могут буферизовать SSE — проверяй стриминг на том же пути, что в проде.

Изображения не стримятся