Перейти к содержанию
Вся документация

Руководства

Стриминг

Установите stream: true, и ответ приходит слово за словом, как server-sent events OpenAI. Запросите usage, и последний чанк скажет, во сколько обошёлся вызов.

Проверено 26 октября 2026 г.

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

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://nokeep.ai/v1",
    api_key=os.environ["NOKEEP_API_KEY"],
)

stream = client.chat.completions.create(
    model="deepseek-v4.1-flash-uncensored",
    messages=[{"role": "user", "content": "Tell me a story in three lines."}],
    stream=True,
    stream_options={"include_usage": True},
)
for chunk in stream:
    if chunk.choices:
        print(chunk.choices[0].delta.content or "", end="", flush=True)
    if chunk.usage:
        print("\ncredits:", chunk.usage.model_extra.get("nokeep_credits"))

Что приходит

The stream
data: {"choices":[{"index":0,"delta":{"role":"assistant","content":""}}]}
data: {"choices":[{"index":0,"delta":{"content":"The"}}]}
data: {"choices":[{"index":0,"delta":{"content":" lighthouse"}}]}
…
data: {"choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: {"choices":[],"usage":{"prompt_tokens":18,"completion_tokens":61,"nokeep_credits":0}}
data: [DONE]
  • Слова приходят в delta.content. Когда размышления включены, сначала приходят размышления, в delta.reasoning_content.
  • Вызовы инструментов приходят в delta.tool_calls, их аргументы — кусками, как их отправляет OpenAI.
  • С stream_options.include_usage последний чанк с пустым списком choices несёт usage, включая nokeep_credits: сколько стоил вызов.
  • Поток заканчивается data: [DONE].

Остановить ответ досрочно

Закройте соединение, и модель перестанет писать. Вы платите за то, что было отправлено до остановки, и ничего после. В SDK выйдите из цикла и закройте поток; в приложении нажмите кнопку остановки.

Python
for chunk in stream:
    text = chunk.choices[0].delta.content if chunk.choices else ""
    if text and "THE END" in text:
        stream.close()  # the model stops here, and so does the bill
        break

Когда модель останавливается первой

Если модель завершает поток раньше, чем он закончен, последнее событие перед [DONE] — ошибка в формате OpenAI с кодом stream_cut. То, что она написала, оплачивается, и не больше. Повторите запрос или продолжите с того, что пришло.

A cut stream
data: {"error":{"type":"api_error","code":"stream_cut","message":"The model stopped before it finished. What it wrote is billed, nothing more."}}
data: [DONE]

Вопросы

Стриминг стоит дороже?

Нет. Потоковый ответ стоит тех же токенов, что и целый.

Почему в потоке нет заголовка x-nokeep-credits?

Заголовки отправляются до первого слова, когда стоимость ещё не известна. Запросите usage и читайте nokeep_credits в последнем чанке.