ДокументацияСтриминг
Стриминг
Для потоковой генерации передайте "stream": true в POST /v1/chat/completions. Текст ответа приходит по мере генерации — удобно для чатов и длинных ответов.
Тот же параметр работает в POST /v1/messages для Claude Messages API — формат событий Anthropic SSE. Подробнее: Claude Messages API.
Пример запроса
curl -N https://api.zenvy.su/v1/chat/completions \
-H "Authorization: Bearer sk-zenvy-..." \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4.6",
"messages": [
{ "role": "user", "content": "Ответь в 3 коротких пунктах" }
],
"stream": true
}'Флаг -N в curl отключает буферизацию — чанки приходят сразу.
Формат ответа
Zenvy возвращает SSE-поток (Server-Sent Events):
Content-Type: text/event-stream; charset=utf-8
Cache-Control: no-cache, no-transform
Pragma: no-cache
X-Accel-Buffering: no
Content-Encoding: identity
Connection: keep-aliveЧанки приходят в формате OpenAI:
data: {"choices":[{"delta":{"content":"Привет"}}]}
data: [DONE]У моделей с reasoning в delta может приходить поле reasoning или reasoning_content. У моделей с генерацией изображений — массив images с data URL в delta (формат зависит от upstream-провайдера).
OpenAI SDK
from openai import OpenAI
client = OpenAI(api_key="sk-zenvy-...", base_url="https://api.zenvy.su/v1")
stream = client.chat.completions.create(
model="claude-sonnet-4.6",
messages=[{"role": "user", "content": "Расскажи коротко о Zenvy"}],
stream=True
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)Списание средств
При streaming списание выполняется после завершения потока. Usage берётся из ответа upstream-провайдера; если провайдер не вернул usage, Zenvy использует оценку по токенам.
Подробнее: Токены и биллинг.