Чат

.md

OpenAI-совместимый /v1/chat/completions — текст, стриминг SSE, vision (картинки в сообщениях), tools и reasoning. Оплата по токенам, стоимость в usage.cost.

POST /v1/chat/completions

Синхронный OpenAI-совместимый эндпоинт. Работает с любым OpenAI SDK — меняешь base_url и api_key, остальное без изменений. Тело запроса пробрасывается модели целиком («полная мощь по желанию»): стандартные параметры OpenAI поддерживаются как есть.

Параметры

Поле Тип Описание
model string, обяз. ID модели, например souz/gpt-5.4-miniкаталог
messages array, обяз. Сообщения в формате OpenAI (system / user / assistant / tool)
stream boolean true → стриминг SSE
temperature, top_p, max_tokens, stop, … Стандартные параметры OpenAI, пробрасываются модели
tools, tool_choice Вызов инструментов (function calling) — для моделей с поддержкой
response_format object Например {"type": "json_object"}
reasoning_effort string low / medium / high — глубина размышлений для thinking-моделей (gpt-5.5, o3, …)

Лимит тела запроса — 25 МБ (vision-картинки едут внутри JSON).

Пример

from openai import OpenAI

client = OpenAI(base_url="https://api.souz.ai/v1", api_key="sk-souz-...")

resp = client.chat.completions.create(
    model="souz/claude-sonnet-4-6",
    messages=[
        {"role": "system", "content": "Отвечай кратко."},
        {"role": "user", "content": "Объясни, что такое вебхук."},
    ],
)
print(resp.choices[0].message.content)
print("кредитов:", resp.usage.cost)

В ответе — стандартный объект OpenAI. Дополнительно usage.cost — фактически списанные кредиты (как у OpenRouter).

Стриминг

stream = client.chat.completions.create(
    model="souz/gpt-5.4-mini",
    messages=[{"role": "user", "content": "Напиши хокку про API"}],
    stream=True,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")
    if chunk.usage:  # последний чанк
        print("\nкредитов:", chunk.usage.cost)

Поток — стандартный SSE (data: {...}, в конце data: [DONE]). Последний чанк всегда содержит usage с полем cost.

Vision — картинки в сообщениях

Модели с пометкой «vision» в каталоге принимают картинки в сообщениях (data URL, как у OpenAI):

resp = client.chat.completions.create(
    model="souz/gemini-2.5-flash-lite",  # самый дешёвый vision
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "Что на фото?"},
            {"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,..."}},
        ],
    }],
)

Reasoning (thinking-модели)

resp = client.chat.completions.create(
    model="souz/gpt-5.5",
    messages=[{"role": "user", "content": "Сложная задача..."}],
    reasoning_effort="high",
)

Токены размышлений учитываются как выходные — это видно в usage.

Ошибки

HTTP code Когда
401 invalid_api_key Нет/неверный ключ
402 insufficient_credits Не хватает кредитов
404 model_not_found Неизвестная модель
413 invalid_request Тело больше 25 МБ
429 rate_limited Превышен лимит запросов (лимиты)
502 model_unavailable Все провайдеры модели недоступны — повтори позже

Формат ошибок общий для всего API — см. Ошибки.