Към съдържанието
Chat Completions

Chat Completions

POST /v1/chat/completions приема разговор и връща следващото съобщение на модела във формата OpenAI Chat Completions. Използвайте го от всеки OpenAI SDK или през обикновен 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. Колоната Прилага се от посочва моделите, при които полето променя отговора. Хостваните open-weight модели са дванадесетте 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 се привежда в този диапазон. Това е и сумата, заделена от баланса ви, докато заявката се изпълнява. Вижте Дължина на изхода по-долу. Хоствани open-weight модели, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
max_completion_tokens integer Същото като max_tokens. Когато са изпратени и двете, използва се max_tokens. Хоствани open-weight модели, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
temperature number Температура на семплиране. При хостваните open-weight модели стойността по подразбиране е 1, а стойностите се държат между 0 и 2. Хоствани open-weight модели, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
top_p number 0.95 Nucleus семплиране. Стойностите се държат между 0 и 1. Хоствани open-weight модели
seed integer Seed на семплера, произволно цяло число. Без него seed се извежда от модела и разговора, така че една и съща заявка, изпратена два пъти, използва същия seed. Хоствани open-weight модели
stop string | array Низ или масив от низове. Използват се до 4. Отговорът свършва преди първия, който се появи; самият стоп текст не се връща. Хоствани open-weight модели
reasoning_effort string high Колко разсъждава моделът, преди да отговори: off, low, medium или high. none и minimal означават off, default означава medium, max означава high. Всяка друга стойност връща 400. Хоствани open-weight модели
reasoning object Същата настройка във вид на обект: {"effort": "low"}. Когато са изпратени и двете, използва се reasoning_effort. Хоствани open-weight модели
tools array Функциите, които моделът може да извика, всяка като {"type": "function", "function": {"name", "description", "parameters"}}. Извикванията на модела се връщат в tool_calls; вашият код ги изпълнява. Всички модели
tool_choice string | object auto "auto" оставя модела да реши. "required" го кара да извика инструмент. {"type": "function", "function": {"name": "…"}} го кара да извика този инструмент. Хоствани open-weight модели
response_format object {"type": "json_object"} за JSON отговор или {"type": "json_schema", "json_schema": {…}} за отговор, който следва вашата схема. Всички нива на Shannon; хоствани open-weight модели според списъка по 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, се приемат, за да работи съществуващият клиентски код без промяна. Те не променят отговора: винаги има един избор (choice), а стриймът винаги завършва с usage.

Поле с грешен JSON тип, например "max_tokens": "100", връща 422. Заявка без messages също.

Инструментите, структурираният изход, разсъждението и уеб търсенето имат всеки собствена страница: Извикване на функции, Структурирани изходи, Усилие за разсъждение, Вградено уеб търсене.

Заявка с опции

Тази заявка задава системно съобщение, полетата за семплиране и усилието за разсъждение. Използва хостван open-weight модел, който прилага всички тях.

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 добавя две подробности при хостваните open-weight модели: токените на prompt-а, прочетени от кеша, и токените, изразходвани за разсъждение.

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.
Хоствани open-weight модели Текстът на отговора спира при max_tokens. Разсъждението не се брои към него. Стойности под 256 действат като 256.

Без max_tokens или max_completion_tokens стойността е 4,096. При shannon-coder-1 е 65,536.

Съобщения

Всяко съобщение е обект с role и content. content е низ или масив от части, когато съобщението носи повече от текст.

Роля Описание Прилага се от
system Инструкции за модела. Поставете го първо. При нивата на Shannon се използва първото съобщение system. Хоствани open-weight модели, shannon-1.6-*, shannon-2-*, shannon-coder-1
developer Чете се като system. Хоствани open-weight модели
user Какво питате. При нивата на Shannon последното съобщение user е prompt-ът, а съобщенията преди него са историята. Всички модели
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 и хостваните open-weight модели, които поддържат вход с изображения
{"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 Винаги точно един избор (choice), с index 0.
choices[0].message.role string Винаги assistant.
choices[0].message.content string | null Текстът на отговора. При tool_calls е null при нивата на Shannon; хостваните open-weight модели могат да изпратят текст до извикванията.
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 Токените на заявката. Вижте Usage.
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

Поле Тип Описание Налично при
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, прочетена от кеша на prompt-ове. Хоствани open-weight модели
usage.completion_tokens_details.reasoning_tokens integer Частта от completion_tokens, изразходвана за разсъждение. Хоствани open-weight модели

При хостваните open-weight модели prompt_tokens са вашите съобщения и дефиниции на инструменти, преброени с токенизатора на самия модел, плюс токените на евентуални изображения. Ендпоинтите за броене на токени връщат същото число, преди да изпратите. Броене на токени

При нивата на Shannon prompt_tokens брои всичко, което моделът е прочел, за да напише отговора, затова е по-голямо от текста само на вашите съобщения.

Стрийминг

Когато stream е true, отговорът пристига като събития chat.completion.chunk и завършва с data: [DONE]. Последният chunk преди него носи finish_reason и usage; не са нужни stream_options. Формите на chunk-овете, редовете 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 Част с изображение е изпратена към хостван open-weight модел без вход с изображения.
400 invalid_request_error <id> does not accept response_format response_format е изпратен към хостван open-weight модел без структуриран изход.
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 и хостваните open-weight модели.