Streaming
Для потоковой генерации добавьте "stream": true. Токены будут приходить по мере генерации в формате Server-Sent Events (SSE).
Python (OpenAI SDK)
from openai import OpenAI
client = OpenAI(
base_url="https://api.tsarrouter.ru/v1",
api_key="sk-tsar-ваш-ключ",
)
stream = client.chat.completions.create(
model="yandex/yandexgpt",
messages=[{"role": "user", "content": "Напиши стихотворение"}],
stream=True,
)
for chunk in stream:
content = chunk.choices[0].delta.content
if content:
print(content, end="", flush=True)curl
curl -N https://api.tsarrouter.ru/v1/chat/completions \
-H "Authorization: Bearer sk-tsar-ваш-ключ" \
-H "Content-Type: application/json" \
-d '{
"model": "yandex/yandexgpt",
"messages": [{"role": "user", "content": "Напиши стихотворение"}],
"stream": true
}'JavaScript
const response = await fetch("https://api.tsarrouter.ru/v1/chat/completions", {
method: "POST",
headers: {
"Authorization": "Bearer sk-tsar-ваш-ключ",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "yandex/yandexgpt",
messages: [{role: "user", content: "Напиши стихотворение"}],
stream: true,
}),
});
const reader = response.body.getReader();
const decoder = new TextDecoder();
while (true) {
const {done, value} = await reader.read();
if (done) break;
const chunk = decoder.decode(value);
const lines = chunk.split('\n').filter(line => line.trim().startsWith('data:'));
for (const line of lines) {
const data = line.replace('data: ', '');
if (data === '[DONE]') break;
const parsed = JSON.parse(data);
const content = parsed.choices[0]?.delta?.content;
if (content) process.stdout.write(content);
}
}Особенности streaming
- Заголовки
X-TsarRouter-ProviderиX-TsarRouter-Modelдоступны сразу в первом ответе - Usage (токены) и стоимость считаются и списываются как в обычном режиме
- При ошибке провайдера в streaming — автоматический failover на другого провайдера до отправки первого чанка клиенту