Перейти к содержимому
Chat Completions

Chat Completions

POST /v1/chat/completions принимает разговор и возвращает следующее сообщение модели в формате OpenAI Chat Completions. Используйте его из любого SDK OpenAI или по обычному HTTP; эта страница — справочник по полям.

POST https://api.shannon-ai.com/v1/chat/completions

Минимальный запрос — это id модели и одно сообщение пользователя.

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com/v1",
)

response = client.chat.completions.create(
    model="shannon-3",
    messages=[{"role": "user", "content": "Say hello in one sentence."}],
)

print(response.choices[0].message.content)

Ответ — один JSON-объект:

200 JSON
{
  "id": "chatcmpl-5f0c1e7a9b3d4c62a8e1f07d2b46c9a3",
  "object": "chat.completion",
  "created": 1791625200,
  "model": "shannon-3",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Hello, it is good to meet you.",
        "reasoning_content": "The user wants a greeting in one sentence. Keep it short and friendly."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 1184,
    "completion_tokens": 46,
    "total_tokens": 1230
  }
}

Заголовки

Заголовки запроса

Заголовок Значение Описание
Authorization Bearer YOUR_API_KEY Ваш API-ключ. Вместо него на любом эндпоинте принимается x-api-key: YOUR_API_KEY.
Content-Type application/json Обязателен. Любое другое значение возвращает 415.
x-request-id Необязателен. Ваш собственный id запроса. Он возвращается в ответе без изменений.

Заголовки ответа

Заголовок Описание
x-request-id В каждом ответе, включая ошибки и потоки: присланное вами значение либо 12 шестнадцатеричных символов, если вы ничего не присылали. Приводите его, когда сообщаете о проблеме.
content-type application/json или text/event-stream, когда stream равен true.

Поля запроса

Обязательно только messages. В столбце Применяется на указаны модели, на которых поле влияет на ответ. Размещенные модели с открытыми весами — это двенадцать id из списка моделей; семейство Shannon 3 — это shannon-3, shannon-3-pro, shannon-3.1 и shannon-3.1-pro. Модели и цены

Поле Тип По умолчанию Описание Применяется на
model string shannon-1.6-lite Модель, которая отвечает: id из списка моделей. Отправляйте его с каждым запросом. Регистр не учитывается. Неопубликованный id возвращает 400 unknown model. Все модели
messages array Обязательно. Разговор, начиная с самого старого сообщения. См. ниже «Сообщения». Все модели
stream boolean false true отправляет ответ как server-sent events по мере его написания. Все модели
max_tokens integer 4096 Верхний предел ответа в токенах. Значение вне диапазона от 1 до 65,536 приводится к этому диапазону. Это также объем, который резервируется на вашем балансе на время выполнения запроса. См. ниже «Длина вывода». Размещенные модели с открытыми весами, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
max_completion_tokens integer То же, что max_tokens. Если отправлены оба, используется max_tokens. Размещенные модели с открытыми весами, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
temperature number Температура сэмплирования. На размещенных моделях с открытыми весами значение по умолчанию равно 1, а значения ограничиваются диапазоном от 0 до 2. Размещенные модели с открытыми весами, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
top_p number 0.95 Ядерное сэмплирование (nucleus sampling). Значения ограничиваются диапазоном от 0 до 1. Размещенные модели с открытыми весами
seed integer Seed сэмплера, любое целое число. Без него seed выводится из модели и разговора, поэтому один и тот же запрос, отправленный дважды, использует один и тот же seed. Размещенные модели с открытыми весами
stop string | array Строка или массив строк. Используются до 4. Ответ заканчивается перед первой из них, которая встретится; сам стоп-текст не возвращается. Размещенные модели с открытыми весами
reasoning_effort string high Сколько модель рассуждает перед ответом: off, low, medium или high. none и minimal означают off, default означает medium, max означает high. Любое другое значение возвращает 400. Размещенные модели с открытыми весами
reasoning object Та же настройка в виде объекта: {"effort": "low"}. Если отправлены оба, используется reasoning_effort. Размещенные модели с открытыми весами
tools array Функции, которые модель может вызывать, каждая в виде {"type": "function", "function": {"name", "description", "parameters"}}. Вызовы модели возвращаются в tool_calls; ваш код их выполняет. Все модели
tool_choice string | object auto "auto" позволяет модели решать самой. "required" заставляет вызвать инструмент. {"type": "function", "function": {"name": "…"}} заставляет вызвать именно этот инструмент. Размещенные модели с открытыми весами
response_format object {"type": "json_object"} для ответа в JSON или {"type": "json_schema", "json_schema": {…}} для ответа, следующего вашей схеме. Все уровни Shannon; размещенные модели с открытыми весами — как указано для каждого id
web_search boolean false true позволяет модели искать в интернете перед ответом. shannon-1.6-*, shannon-2-*, семейство Shannon 3

Другие поля OpenAI, такие как n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store и prompt_cache_key, принимаются, чтобы существующий клиентский код работал без изменений. Они не меняют ответ: вариант ответа всегда один, а поток всегда заканчивается usage.

Поле с неверным типом JSON, например "max_tokens": "100", возвращает 422. Запрос без messages тоже.

Инструменты, структурированный вывод, рассуждения и веб-поиск описаны каждый на своей странице: Вызов функций, Структурированные ответы, Усилие рассуждения, Встроенный веб‑поиск.

Запрос с параметрами

Этот запрос задает системное сообщение, поля сэмплирования и усилие рассуждения. Он использует размещенную модель с открытыми весами, которая применяет все эти параметры.

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com/v1",
)

response = client.chat.completions.create(
    model="DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
    messages=[
        {"role": "system", "content": "You are a physics teacher. Answer in two sentences."},
        {"role": "user", "content": "Why is the sky blue?"},
    ],
    max_tokens=512,
    temperature=0.3,
    top_p=0.9,
    seed=7,
    stop=["\n\n"],
    reasoning_effort="low",
)

message = response.choices[0].message
print(message.reasoning_content)  # the reasoning
print(message.content)            # the answer
print(response.usage)

Ответ имеет ту же форму, что и выше. Его usage на размещенных моделях с открытыми весами добавляет две детали: токены промпта, прочитанные из кэша, и токены, потраченные на рассуждения.

200 JSON
{
  "usage": {
    "prompt_tokens": 31,
    "completion_tokens": 62,
    "total_tokens": 93,
    "prompt_tokens_details": {
      "cached_tokens": 0
    },
    "completion_tokens_details": {
      "reasoning_tokens": 21
    }
  }
}

Длина вывода

max_tokens делает две вещи. Во-первых, это число токенов, которое резервируется на вашем балансе в начале запроса. Когда ответ завершен, эта сумма заменяется токенами, которые запрос фактически использовал. Если max_tokens больше остатка вашего баланса, запрос возвращает 429 Quota exceeded, даже если сам ответ поместился бы. Отправьте меньший max_tokens, чтобы зарезервировать меньше.

shannon-coder-1 на этом эндпоинте считается иначе: каждый запрос — это один из вызовов Shannon Coder по вашему плану, и токены под него не резервируются. Лимиты и баланс

Во-вторых, он ограничивает длину ответа на этих моделях:

Модели Что делает max_tokens
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 Ответ останавливается, достигнув лимита. Поток тогда заканчивается с finish_reason length.
Размещенные модели с открытыми весами Текст ответа обрывается на max_tokens. Рассуждения в него не засчитываются. Значения меньше 256 действуют как 256.

Без max_tokens или max_completion_tokens значение равно 4,096. На shannon-coder-1 оно равно 65,536.

Сообщения

Каждое сообщение — это объект с role и content. content — строка или массив частей, когда сообщение содержит не только текст.

Роль Описание Применяется на
system Инструкции для модели. Ставьте его первым. На уровнях Shannon используется первое сообщение system. Размещенные модели с открытыми весами, shannon-1.6-*, shannon-2-*, shannon-coder-1
developer Читается как system. Размещенные модели с открытыми весами
user Ваш вопрос. На уровнях Shannon последнее сообщение user — это промпт, а предыдущие сообщения — история. Все модели
assistant Предыдущие ответы модели. Сохраняйте ее tool_calls, когда отправляете после них результат инструмента. Все модели
tool Результат вызова инструмента: tool_call_id содержит id вызова, а content — результат в виде строки. Все модели

С id семейства Shannon 3 помещайте обязательные инструкции в сообщение user.

На уровнях Shannon запрос без пользовательского текста и без tools возвращает 400 No user message provided.

Части контента

Часть Описание Доступно на
{"type": "text", "text": "…"} Обычный текст. Все модели
{"type": "image_url", "image_url": {"url": "…"}} Изображение в виде URL data: с содержимым base64 или URL http(s). Семейство Shannon 3, shannon-1.6-lite, shannon-1.6-pro и размещенные модели с открытыми весами, поддерживающие ввод изображений
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} Документ (PDF, Word, PowerPoint или Excel) в виде base64 или по URL. Семейство Shannon 3

Размеры, лимиты и полный список форм описаны на отдельной странице. Изображения и файлы

Объект ответа

Поле Тип Описание
id string chatcmpl-, за которым следуют 32 шестнадцатеричных символа.
object string Всегда chat.completion.
created integer Время ответа в секундах Unix.
model string Каноничный id модели, давшей ответ. Он может отличаться написанием от id, который вы отправили.
choices array Всегда ровно один вариант, с index 0.
choices[0].message.role string Всегда assistant.
choices[0].message.content string | null Текст ответа. При наличии tool_calls на уровнях Shannon он равен null; размещенные модели с открытыми весами могут присылать текст рядом с вызовами.
choices[0].message.reasoning_content string | null Рассуждения, которые модель написала перед ответом, или null, если их нет.
choices[0].message.tool_calls array Присутствует, только когда модель вызывает инструменты. Каждая запись содержит id, type function и function с name и arguments в виде JSON-строки.
choices[0].message.annotations array Только в запросе с web_search: true, поиск которого что-то нашел. По одному url_citation на каждый источник, который называет маркер в content, с url, title, start_index и end_index (позиция маркера, посчитанная в символах, конец не включается).
choices[0].finish_reason string Почему ответ закончился. См. «Причины завершения».
usage object Токены запроса. См. «Использование».
sources array Только в запросе с web_search: true, поиск которого что-то нашел: результаты, переданные модели, каждый с index, title и url. [1] в ответе — это запись с index 1.

Причины завершения

finish_reason Описание
stop Модель закончила ответ, либо встретилась строка stop.
tool_calls Модель вызывает один или несколько инструментов. Выполните их и отправьте результаты в сообщениях tool.
length Ответ был обрезан по лимиту вывода. Сообщается в потоках shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 и семейства Shannon 3.

Ответ без стриминга сообщает stop или tool_calls.

Использование

Поле Тип Описание Доступно на
usage.prompt_tokens integer Токены ввода. Все модели
usage.completion_tokens integer Токены вывода: рассуждения, ответ и вызовы инструментов вместе. Все модели
usage.total_tokens integer prompt_tokens плюс completion_tokens. Все модели
usage.prompt_tokens_details.cached_tokens integer Часть prompt_tokens, прочитанная из кэша промптов. Размещенные модели с открытыми весами
usage.completion_tokens_details.reasoning_tokens integer Часть completion_tokens, потраченная на рассуждения. Размещенные модели с открытыми весами

На размещенных моделях с открытыми весами prompt_tokens — это ваши сообщения и определения инструментов, подсчитанные собственным токенайзером модели, плюс токены изображений. Эндпоинты подсчета токенов возвращают то же число до отправки. Подсчет токенов

На уровнях Shannon prompt_tokens учитывает все, что модель прочитала, чтобы написать ответ, поэтому оно больше, чем один только текст ваших сообщений.

Стриминг

Если stream равен true, ответ приходит событиями chat.completion.chunk и заканчивается data: [DONE]. Последний чанк перед ним содержит finish_reason и usage; stream_options не нужны. Формы чанков, keep-alive-строки и ошибки внутри потока описаны на отдельной странице. Потоковая передача

Ошибки

Ошибка — это JSON-объект с полем error. Проверки выполняются в таком порядке: API-ключ, тело запроса, id модели, затем баланс. В таблице перечислено то, что этот эндпоинт возвращает чаще всего. Полный список с указанием, что повторять, находится на отдельной странице. Обработка ошибок

400 JSON
{
  "error": {
    "type": "invalid_request_error",
    "message": "unknown model: no-such-model"
  }
}
Статус Тип Сообщение Когда
401 authentication_error Missing authentication
Invalid API key
API-ключ не был отправлен либо ключ неизвестен или отозван.
400 invalid_request_error unknown model: <id> model не является опубликованным id.
400 invalid_request_error No user message provided Уровни Shannon: в запросе нет пользовательского текста и нет tools.
400 invalid_request_error <id> does not accept image input Часть с изображением отправлена размещенной модели с открытыми весами, не поддерживающей ввод изображений.
400 invalid_request_error <id> does not accept response_format response_format отправлен размещенной модели с открытыми весами без структурированного вывода.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high reasoning_effort содержит значение вне списка.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … messages отсутствует или у поля неверный тип JSON.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_tokens больше, чем остаток вашего баланса.
429 rate_limit_error Too many requests. Retry in <n>s. Защита от флуда: более 120 запросов в минуту с вашего аккаунта.
500 server_error The model backend failed to answer. Please retry. Модель не сформировала ответ. Отправьте запрос еще раз.
502 api_error The model backend failed to answer. Please retry. То же самое на семействе Shannon 3 и размещенных моделях с открытыми весами.