Чат
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 — см. Ошибки.