Reasoning effort
ՆՈՐՏրամաբանող մոդելը վերադարձնում է իր reasoning տեքստը պատասխանի կողքին՝ առանձին դաշտում։ Hosted open-weight մոդելների վրա հարցման մեկ դաշտը սահմանում է, թե որքան խորը է մոդելը տրամաբանում պատասխանելուց առաջ։
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 տեքստ | Կիրառում է effort դաշտը |
|---|---|---|
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 | Այո | — |
| Յուրաքանչյուր hosted open-weight մոդել | Այո | Այո |
Սրանք capabilities.reasoning և capabilities.reasoning_effort դրոշներն են, որոնք GET /v1/models-ը վերադարձնում է յուրաքանչյուր id-ի համար։ Պատասխանը reasoning տեքստ կրում է միայն այն դեպքում, երբ մոդելը ստեղծել է այն։ Մոդելներ և գներ
Effort-ի սահմանում
Յուրաքանչյուր endpoint-ն ունի effort-ի իր գրելաձևը։ Դրանք բոլորն ընտրում են նույն չորս մակարդակներից մեկը։
| Դաշտ | Տեսակ | Լռելյայն | Նկարագրություն | Կիրառվում է |
|---|---|---|---|---|
reasoning_effort | string | high | /v1/chat/completions։ Որքան խորը է մոդելը տրամաբանում պատասխանելուց առաջ՝ off, low, medium կամ high։ | Hosted open-weight մոդելներ |
reasoning | object | string | /v1/chat/completions։ Նույն արժեքը՝ որպես {"effort": "low"} կամ որպես պարզ տող։ Երբ ուղարկված են երկու դաշտերը, հաշվի է առնվում reasoning_effort-ը։ | Hosted open-weight մոդելներ | |
reasoning.effort | string | high | /v1/responses։ Գրվում է որպես {"effort": "low"} օբյեկտ։ | Hosted open-weight մոդելներ |
thinking | object | /v1/messages։ {"type": "enabled", "budget_tokens": n} կամ {"type": "disabled"}։ Բյուջեն ընտրում է մակարդակներից մեկը. տե՛ս ստորև բերված աղյուսակը։ | Hosted 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 տեքստը միշտ առանձին է պատասխանից։ Յուրաքանչյուր ձևաչափ ունի դրա համար իր տեղը.
| Endpoint | Առանց streaming-ի | Streaming-ով |
|---|---|---|
/v1/chat/completions | choices[0].message.reasoning_content. տող, կամ null, եթե մոդելը ոչինչ չի ստեղծել։ | choices[0].delta.reasoning_content ունեցող chunk-եր՝ delta.content ունեցող chunk-երից առաջ։ |
/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 | Առաջին content բլոկը՝ {"type": "thinking", "thinking": "…"}, ապա text բլոկը։ Եթե reasoning չկա, thinking բլոկ չկա։ | thinking content բլոկ՝ content_block_start, thinking_delta ունեցող content_block_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
}
} Որտեղ նայել՝ ըստ մոդելի.
| Մոդելներ | Որտեղ է գալիս տեքստը |
|---|---|
| Hosted open-weight մոդելներ | Բոլոր endpoint-ների վրա՝ streaming-ով կամ առանց։ off effort-ով կամ response_format / text.format-ով հարցումը պատասխանվում է առանց reasoning տեքստի։ |
shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro | Բոլոր endpoint-ների վրա՝ streaming-ով կամ առանց, երբ մոդելը reasoning տեքստ է ստեղծել։ |
shannon-2-lite, shannon-2-pro | /v1/chat/completions, առանց streaming-ի. message.reasoning_content-ում։ Streaming-ով, tools կամ response_format չունեցող հարցման դեպքում. մինչ մոդելը տրամաբանում է, հոսքը կրում է : thinking մեկնաբանության տողեր, ապա՝ պատասխանի chunk-երը։ /v1/messages, streaming-ով. thinking բլոկ՝ տեքստի բլոկից առաջ։ |
shannon-1.6-pro, shannon-coder-1 | Streaming պատասխաններում և tools պարունակող հարցումների պատասխաններում, երբ մոդելը reasoning տեքստ է ստեղծել։ |
/v1/responses-ում streaming չունեցող պատասխանը Shannon 3 ընտանիքի և hosted open-weight մոդելների համար կրում է reasoning տարրը։
Հոսքի ընթերցում
Հոսքում 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?"}
]
}' Hosted open-weight մոդելի առաջին chunk-ը, լինի reasoning թե պատասխան, կրում է նաև delta.role: "assistant"։ Ստրիմինգ
Reasoning թոքեններ և վճարում
Hosted open-weight մոդելների վրա reasoning թոքենները ելքի թոքեններ են. դրանք գանձվում են մոդելի ելքի գնով, և ելքի հաշվարկն արդեն ներառում է դրանք։ usage-ը այստեղ ցույց է տալիս reasoning-ի բաժինը.
| Endpoint | Դաշտ | Նշում |
|---|---|---|
/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-ը և պատասխանը միասին։ Այս ձևաչափը առանձին հաշվարկ չունի։ |
- Hosted open-weight մոդելների վրա
max_tokens-ը սահմանափակում է պատասխանի տեքստը։ Reasoning թոքենները դրա մեջ չեն հաշվվում։ - Քանի որ reasoning-ը գանձվում է որպես ելք, effort մակարդակը նաև ծախսի կարգավորում է.
off-ը reasoning թոքեններ չի ստեղծում։ - Shannon մոդելները հայտնում են
prompt_tokens,completion_tokensևtotal_tokens(/v1/messages-ում՝input_tokensևoutput_tokens) առանց reasoning բաժնի և գանձում են մեկ ֆիքսված գին մեկ թոքենի համար։ Մոդելներ և գներ
Reasoning-ը հաջորդ հարցման մեջ
Reasoning-ը հետ ուղարկել պետք չէ։ Ձեր ուղարկած զրույցի thinking բլոկը կամ reasoning տարրը մոդելին չի փոխանցվում, ուստի assistant-ի փուլը կարելի է հետ ուղարկել դրանցով կամ առանց դրանց։ thinking բլոկն ունի երկու դաշտ՝ type և thinking. signature չունի։
Սխալներ
| Կարգավիճակ | Տեսակ | Հաղորդագրություն | Երբ |
|---|---|---|---|
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | Hosted open-weight մոդելը ստացել է ցանկից դուրս արժեք, օրինակ՝ xhigh։ Ձեր մնացորդից ոչինչ չի գանձվում։ |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | reasoning_effort-ը տող չէ։ |
Վավերացման, մնացորդի և սերվերի սխալները նույնն են, ինչ ցանկացած հարցման դեպքում։ Սխալների մշակում