Напор на reasoning
НовоМодел што прави reasoning го враќа текстот на reasoning-от покрај одговорот, во посебно поле. На хостираните open-weight модели едно поле на барањето одредува колку длабоко моделот прави reasoning пред да одговори.
POST https://api.shannon-ai.com/v1/chat/completions
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="Kimi-K3-3BIT-REAP",
reasoning_effort="low",
messages=[{"role": "user", "content": "Is 221 a prime number?"}],
)
message = response.choices[0].message
print("Reasoning:", getattr(message, "reasoning_content", None))
print("Answer:", message.content)
print("Reasoning tokens:", response.usage.completion_tokens_details.reasoning_tokens) import OpenAI from "openai";
const client = new OpenAI({ apiKey: "YOUR_API_KEY", baseURL: "https://api.shannon-ai.com/v1" });
const response = await client.chat.completions.create({
model: "Kimi-K3-3BIT-REAP",
reasoning_effort: "low",
messages: [{ role: "user", content: "Is 221 a prime number?" }],
});
const message = response.choices[0].message;
console.log("Reasoning:", message.reasoning_content);
console.log("Answer:", message.content);
console.log("Reasoning tokens:", response.usage.completion_tokens_details.reasoning_tokens); curl https://api.shannon-ai.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "Kimi-K3-3BIT-REAP",
"reasoning_effort": "low",
"messages": [
{"role": "user", "content": "Is 221 a prime number?"}
]
}' Одговорот го носи текстот на reasoning-от во reasoning_content, одговорот во content, а токените за reasoning во usage:
{
"id": "chatcmpl-2a6c8e0b4d1f4a3c9e7b5d3f1a8c6e4b",
"object": "chat.completion",
"created": 1791590400,
"model": "Kimi-K3-3BIT-REAP",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "No. 221 = 13 x 17, so it is not prime.",
"reasoning_content": "Try small primes. 221 / 13 = 17, so 221 = 13 x 17."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 14,
"completion_tokens": 43,
"total_tokens": 57,
"prompt_tokens_details": {"cached_tokens": 0},
"completion_tokens_details": {"reasoning_tokens": 27}
}
} Кои модели прават reasoning
| Модел | Враќа текст на reasoning | Го применува полето за напор |
|---|---|---|
shannon-1.6-lite | — | — |
shannon-1.6-pro, shannon-2-lite, shannon-2-pro, shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro, shannon-coder-1 | Да | — |
| Секој хостиран open-weight модел | Да | Да |
Ова се знамињата capabilities.reasoning и capabilities.reasoning_effort што GET /v1/models ги пријавува за секој ид. Одговорот носи текст на reasoning само кога моделот создал некој. Модели и цени
Поставување на напорот
Секој ендпоинт има свој запис на напорот. Сите избираат едно од истите четири нивоа.
| Поле | Тип | Стандардно | Опис | Го применуваат |
|---|---|---|---|---|
reasoning_effort | string | high | /v1/chat/completions. Колку длабоко моделот прави reasoning пред да одговори: off, low, medium или high. | Хостирани open-weight модели |
reasoning | object | string | /v1/chat/completions. Истата вредност како {"effort": "low"} или како обичен стринг. Кога се испратени двете полиња, важи reasoning_effort. | Хостирани open-weight модели | |
reasoning.effort | string | high | /v1/responses. Се пишува како објект {"effort": "low"}. | Хостирани open-weight модели |
thinking | object | /v1/messages. {"type": "enabled", "budget_tokens": n} или {"type": "disabled"}. Буџетот избира едно од нивоата; видете ја табелата подолу. | Хостирани open-weight модели |
{
"model": "Kimi-K3-3BIT-REAP",
"reasoning_effort": "low",
"messages": [{"role": "user", "content": "Is 221 a prime number?"}]
} {
"model": "Kimi-K3-3BIT-REAP",
"reasoning": {"effort": "low"},
"input": "Is 221 a prime number?"
} {
"model": "Kimi-K3-3BIT-REAP",
"max_tokens": 1024,
"thinking": {"type": "enabled", "budget_tokens": 2048},
"messages": [{"role": "user", "content": "Is 221 a prime number?"}]
} | Вредност | Се прифаќа и | Ефект |
|---|---|---|
off | none, minimal | Без reasoning. Одговорот не носи текст на reasoning. |
low | Кратко reasoning. | |
medium | default | Средна длабочина. |
high | max | Најдлабокото ниво. Тоа е нивото на барање што не испраќа вредност. |
- Вредностите се читаат без разлика на големи или мали букви.
- Вредноста
defaultзначиmedium. Ако полето се изостави, значиhigh. - Моделите Shannon (
shannon-*) сами ја одредуваат длабочината во секое барање;GET /v1/modelsпријавуваreasoning_effort: falseза нив.
Буџетот за thinking на /v1/messages
На /v1/messages полето thinking го избира нивото. budget_tokens избира едно од горните нивоа; не е сопствено ограничување на токени. adaptive се чита како enabled.
| Вие испраќате | Ниво |
|---|---|
{"type": "disabled"} | off |
{"type": "enabled", "budget_tokens": n} со n до 2,048 | low |
n од 2,049 до 8,192 | medium |
Поголемо n, или enabled без budget_tokens | high |
Без поле thinking | high |
Каде пристигнува текстот на reasoning-от
Текстот на reasoning-от е секогаш одвоен од одговорот. Секој формат има свое место за него:
| Ендпоинт | Без streaming | Со streaming |
|---|---|---|
/v1/chat/completions | choices[0].message.reasoning_content: стринг, или null кога моделот не создал ништо. | Chunk-ови со choices[0].delta.reasoning_content, пред chunk-овите со delta.content. |
/v1/responses | Ставка во output {"type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} пред ставката message. Нема ставка кога нема reasoning. | response.output_item.added со ставка reasoning, потоа настани response.reasoning_summary_text.delta и еден response.reasoning_summary_text.done. |
/v1/messages | Прв блок содржина {"type": "thinking", "thinking": "…"}, потоа блокот text. Нема блок thinking кога нема reasoning. | Блок содржина thinking: content_block_start, настани content_block_delta со thinking_delta, content_block_stop. Следува текстуалниот блок. |
{
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "No. 221 = 13 x 17, so it is not prime.",
"reasoning_content": "Try small primes. 221 / 13 = 17, so 221 = 13 x 17."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 14,
"completion_tokens": 43,
"total_tokens": 57,
"prompt_tokens_details": {"cached_tokens": 0},
"completion_tokens_details": {"reasoning_tokens": 27}
}
} {
"output": [
{
"id": "rs_6f0a2c4e8b1d4f3a9c7e5b3d1f8a6c4e",
"type": "reasoning",
"summary": [
{
"type": "summary_text",
"text": "Try small primes. 221 / 13 = 17, so 221 = 13 x 17."
}
]
},
{
"id": "msg_1b3d5f7a9c2e4b6d8f0a2c4e6b8d0f1a",
"type": "message",
"role": "assistant",
"status": "completed",
"content": [
{
"type": "output_text",
"text": "No. 221 = 13 x 17, so it is not prime.",
"annotations": []
}
]
}
],
"usage": {
"input_tokens": 14,
"input_tokens_details": {"cached_tokens": 0},
"output_tokens": 43,
"output_tokens_details": {"reasoning_tokens": 27},
"total_tokens": 57
}
} {
"content": [
{
"type": "thinking",
"thinking": "Try small primes. 221 / 13 = 17, so 221 = 13 x 17."
},
{"type": "text", "text": "No. 221 = 13 x 17, so it is not prime."}
],
"stop_reason": "end_turn",
"usage": {
"input_tokens": 14,
"cache_read_input_tokens": 0,
"cache_creation_input_tokens": 0,
"output_tokens": 43
}
} Каде да барате, по модел:
| Модели | Каде пристигнува текстот |
|---|---|
| Хостирани open-weight модели | На секој ендпоинт, со или без streaming. Барање со напор off, или со response_format / text.format, се одговара без текст на reasoning. |
shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro | На секој ендпоинт, со или без streaming, секогаш кога моделот создал текст на reasoning. |
shannon-2-lite, shannon-2-pro | /v1/chat/completions, без streaming: во message.reasoning_content. Со streaming, во барање без tools или response_format: streaming-от носи редови-коментари : thinking додека моделот прави reasoning, потоа chunk-ови со одговорот. /v1/messages, со streaming: блок thinking пред текстуалниот блок. |
shannon-1.6-pro, shannon-coder-1 | Во одговори со streaming и во одговори на барања што носат tools, секогаш кога моделот создал текст на reasoning. |
На /v1/responses, одговор без streaming ја носи ставката reasoning за фамилијата Shannon 3 и хостираните open-weight модели.
Читање на streaming
Во streaming текстот на reasoning-от доаѓа прв, во посебни delta-и, а одговорот следува. Испечатете или зачувајте ги двата одделно:
from openai import OpenAI
client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.shannon-ai.com/v1")
stream = client.chat.completions.create(
model="Kimi-K3-3BIT-REAP",
reasoning_effort="medium",
stream=True,
messages=[{"role": "user", "content": "Is 221 a prime number?"}],
)
for chunk in stream:
if not chunk.choices:
continue
delta = chunk.choices[0].delta
reasoning = getattr(delta, "reasoning_content", None)
if reasoning:
print(reasoning, end="", flush=True) # the reasoning text comes first
if delta.content:
print(delta.content, end="", flush=True) # then the answer import OpenAI from "openai";
const client = new OpenAI({ apiKey: "YOUR_API_KEY", baseURL: "https://api.shannon-ai.com/v1" });
const stream = await client.chat.completions.create({
model: "Kimi-K3-3BIT-REAP",
reasoning_effort: "medium",
stream: true,
messages: [{ role: "user", content: "Is 221 a prime number?" }],
});
for await (const chunk of stream) {
const delta = chunk.choices[0]?.delta ?? {};
if (delta.reasoning_content) process.stdout.write(delta.reasoning_content); // the reasoning text comes first
if (delta.content) process.stdout.write(delta.content); // then the answer
} curl -N https://api.shannon-ai.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "Kimi-K3-3BIT-REAP",
"reasoning_effort": "medium",
"stream": true,
"messages": [
{"role": "user", "content": "Is 221 a prime number?"}
]
}' Првиот chunk на хостиран open-weight модел, reasoning или одговор, носи и delta.role: "assistant". Стриминг
Токени за reasoning и наплата
На хостираните open-weight модели, токените за reasoning се излезни токени: се наплатуваат по излезната цена на моделот, а излезната бројка веќе ги содржи. usage овде го прикажува уделот на reasoning-от:
| Ендпоинт | Поле | Забелешка |
|---|---|---|
/v1/chat/completions | usage.completion_tokens_details.reasoning_tokens | Веќе вклучено во completion_tokens. |
/v1/responses | usage.output_tokens_details.reasoning_tokens | Веќе вклучено во output_tokens. |
/v1/messages | usage.output_tokens | Reasoning и одговор заедно. Овој формат нема посебна бројка. |
- На хостираните open-weight модели
max_tokensго ограничува текстот на одговорот. Токените за reasoning не се бројат во него. - Бидејќи reasoning-от се наплатува како излез, нивото на напор е и поставка за трошок:
offне создава токени за reasoning. - Моделите Shannon ги пријавуваат
prompt_tokens,completion_tokensиtotal_tokens(input_tokensиoutput_tokensна/v1/messages) без дел за reasoning и наплатуваат една рамна цена по токен. Модели и цени
Reasoning во следното барање
Не мора да го испраќате reasoning-от назад. Блок thinking или ставка reasoning во разговорот што го испраќате не се проследува до моделот, па чекорот на assistant може да се врати со или без нив. Блокот thinking ги има двете полиња type и thinking; нема signature.
Грешки
| Статус | Тип | Порака | Кога |
|---|---|---|---|
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | Хостиран open-weight модел примил вредност надвор од листата, на пример xhigh. Ништо не се наплатува од вашето салдо. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | reasoning_effort не е стринг. |
Грешките при автентикација, салдо и сервер се исти како за секое барање. Ракување со грешки