Skip to main content

Потоковые ответы

Получайте ответы в реальном времени по мере генерации токенов.

Включение потоковой передачи

Добавьте stream: true в запрос для включения потоковых ответов:

request.json
{
  "model": "qwen/qwen3-235b-a22b-instruct-2507-fp8",
  "messages": [{ "role": "user", "content": "Hello!" }],
  "stream": true
}

Нужны полные параметры запроса? Смотрите эндпоинт chat completions в справочнике API.

Схема потокового ответа

Потоковые ответы приходят как SSE-чанки, которые нужно обрабатывать по мере получения.

Изучите схему потокового ответа в справочнике API для полного списка полей и сигнала [DONE].

Примеры кода

Примеры потоковой передачи для разных окружений:

python
from openai import OpenAI

client = OpenAI(
    base_url="https://api.gonkagate.com/v1",
    api_key="gp-your-api-key"
)

stream = client.chat.completions.create(
    model="qwen/qwen3-235b-a22b-instruct-2507-fp8",
    messages=[{"role": "user", "content": "Write a poem"}],
    stream=True
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

    # Final chunk contains usage info
    if chunk.usage:
        print(f"\n\nCost: ${chunk.usage.total_cost_usd:.6f}")

Отслеживание стоимости в потоке

Последний чанк включает полную информацию об использовании и стоимости:

Проверяйте последний чанк Использование с total_cost_usd доступно только в последнем чанке перед [DONE].

Поля usage описаны в схеме потокового ответа в справочнике API.

cost-tracking.ts
// Track costs from streaming response
let totalCost = 0;

for await (const chunk of stream) {
  // ... handle content ...

  if (chunk.usage) {
    totalCost = chunk.usage.total_cost_usd;
    console.log(`Request cost: $${totalCost.toFixed(6)}`);
    console.log(`Breakdown: base $${chunk.usage.base_cost_usd.toFixed(6)} + fee $${chunk.usage.platform_fee_usd.toFixed(6)}`);
  }
}

Обработка ошибок в потоке

Корректно обрабатывайте проблемы соединения при потоковой передаче:

Для деталей по статусам смотрите примеры обработки ошибок в справочнике API.

error-handling.ts
async function streamWithErrorHandling(messages: Message[]) {
  try {
    const stream = await client.chat.completions.create({
      model: "qwen/qwen3-235b-a22b-instruct-2507-fp8",
      messages,
      stream: true,
    });

    for await (const chunk of stream) {
      // Process chunk...
    }
  } catch (error) {
    if (error.code === "ECONNRESET" || error.code === "ETIMEDOUT") {
      // Connection was dropped
      console.error("Connection lost. Consider retrying.");
    } else if (error.status === 402) {
      // Insufficient balance
      showDepositModal();
    } else {
      throw error;
    }
  }
}
Была ли эта страница полезной?