Откройте SSE-поток
Включите stream: true и отключите буферизацию клиента. Сервер присылает события data по мере готовности частей ответа.
Обрабатывайте поток инкрементально: одно событие не обязано содержать завершённый текст или полный объект tool call.
SSE stream
bash
curl --no-buffer --request POST https://cicora.ai/api/v1/chat/completions \
--header "Authorization: Bearer $CICORA_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "openai/gpt-5.6-sol",
"stream": true,
"stream_options": {"include_usage": true},
"messages": [{"role": "user", "content": "Write a three-line poem."}]
}'Сборка дельт
- Копите текст по choice/index или идентификатору элемента.
- Аргументы инструмента собирайте как поток JSON-фрагментов и разбирайте после завершения.
- Если нужны итоговые метрики, явно включайте доступную опцию usage в потоке.
Завершение и отмена
Считайте поток завершённым только после терминального события. Закрытие соединения без него — отдельный путь ошибки.
Привязывайте AbortController или аналог к уходу пользователя со страницы, чтобы не держать ненужный запрос открытым.