Стриминг
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 — проверяй стриминг на том же пути, что в проде.