Reasoning effort
BagoIbinabalik ng model na nag-re-reason ang reasoning text nito katabi ng sagot, sa sarili nitong field. Sa mga hosted open-weight model, isang request field ang nagtatakda kung gaano kalalim mag-reason ang model bago sumagot.
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?"}
]
}' Dala ng reply ang reasoning text sa reasoning_content, ang sagot sa content, at ang mga reasoning token sa 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}
}
} Aling mga model ang nag-re-reason
| Model | Nagbabalik ng reasoning text | Ina-apply ang effort field |
|---|---|---|
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 | Oo | — |
| Bawat hosted open-weight model | Oo | Oo |
Ito ang mga flag na capabilities.reasoning at capabilities.reasoning_effort na iniuulat ng GET /v1/models para sa bawat id. May dalang reasoning text ang reply kapag may nabuo lamang ang model. Mga model at presyo
Pagtatakda ng effort
May sariling baybay ng effort ang bawat endpoint. Lahat ay pumipili ng isa sa parehong apat na antas.
| Field | Type | Default | Paglalarawan | Ina-apply ng |
|---|---|---|---|---|
reasoning_effort | string | high | /v1/chat/completions. Gaano kalalim mag-reason ang model bago sumagot: off, low, medium o high. | Mga hosted open-weight model |
reasoning | object | string | /v1/chat/completions. Ang parehong value bilang {"effort": "low"} o bilang payak na string. Kapag parehong field ang ipinadala, ang reasoning_effort ang nasusunod. | Mga hosted open-weight model | |
reasoning.effort | string | high | /v1/responses. Isinusulat bilang object na {"effort": "low"}. | Mga hosted open-weight model |
thinking | object | /v1/messages. {"type": "enabled", "budget_tokens": n} o {"type": "disabled"}. Pumipili ang budget ng isa sa mga antas; tingnan ang talahanayan sa ibaba. | Mga hosted open-weight model |
{
"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?"}]
} | Value | Tinatanggap din | Epekto |
|---|---|---|
off | none, minimal | Walang reasoning. Walang dalang reasoning text ang reply. |
low | Maikling reasoning. | |
medium | default | Katamtamang lalim. |
high | max | Ang pinakamalalim na antas. Ito ang antas ng request na walang ipinapadalang value. |
- Binabasa ang mga value nang hindi isinasaalang-alang ang malaki o maliit na titik.
- Ang value na
defaultay nangangahulugangmedium. Ang pag-alis ng field ay nangangahuluganghigh. - Itinatakda ng mga Shannon model (
shannon-*) ang sarili nilang lalim sa bawat request; iniuulat ngGET /v1/modelsangreasoning_effort: falsepara sa kanila.
Ang thinking budget sa /v1/messages
Sa /v1/messages, pinipili ng field na thinking ang antas. Pumipili ang budget_tokens ng isa sa mga antas sa itaas; hindi ito sariling limitasyon ng token. Binabasa ang adaptive na parang enabled.
| Ipinapadala mo | Antas |
|---|---|
{"type": "disabled"} | off |
{"type": "enabled", "budget_tokens": n} na ang n ay hanggang 2,048 | low |
n mula 2,049 hanggang 8,192 | medium |
Mas malaking n, o enabled na walang budget_tokens | high |
Walang thinking field | high |
Kung saan dumarating ang reasoning text
Laging hiwalay sa sagot ang reasoning text. May sariling lugar para dito ang bawat format:
| Endpoint | Hindi naka-stream | Naka-stream |
|---|---|---|
/v1/chat/completions | choices[0].message.reasoning_content: isang string, o null kapag walang nabuo ang model. | Mga chunk na may choices[0].delta.reasoning_content, bago ang mga chunk na may delta.content. |
/v1/responses | Isang output item na {"type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} bago ang message item. Walang item kapag walang reasoning. | response.output_item.added na may reasoning item, saka mga event na response.reasoning_summary_text.delta at isang response.reasoning_summary_text.done. |
/v1/messages | Unang content block na {"type": "thinking", "thinking": "…"}, saka ang text block. Walang thinking block kapag walang reasoning. | Isang thinking content block: content_block_start, mga content_block_delta event na may thinking_delta, content_block_stop. Sumusunod ang text block. |
{
"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
}
} Kung saan titingin, kada model:
| Mga model | Kung saan dumarating ang text |
|---|---|
| Mga hosted open-weight model | Sa bawat endpoint, naka-stream man o hindi. Ang request na may effort na off, o may response_format / text.format, ay sinasagot nang walang reasoning text. |
shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro | Sa bawat endpoint, naka-stream man o hindi, kailanman may nabuong reasoning text ang model. |
shannon-2-lite, shannon-2-pro | /v1/chat/completions, hindi naka-stream: sa message.reasoning_content. Naka-stream, sa request na walang tools o response_format: may dalang mga comment line na : thinking ang stream habang nag-re-reason ang model, saka ang mga chunk ng sagot. /v1/messages, naka-stream: isang thinking block bago ang text block. |
shannon-1.6-pro, shannon-coder-1 | Sa mga naka-stream na reply at sa mga reply sa request na may dalang tools, kailanman may nabuong reasoning text ang model. |
Sa /v1/responses, ang reply na hindi naka-stream ay may dalang reasoning item para sa pamilyang Shannon 3 at sa mga hosted open-weight model.
Pagbasa ng stream
Sa isang stream, nauuna ang reasoning text, sa sarili nitong mga delta, at sumusunod ang sagot. I-print o itago nang hiwalay ang dalawa:
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?"}
]
}' Ang unang chunk ng hosted open-weight model, reasoning man o sagot, ay may dala ring delta.role: "assistant". Pag‑stream
Mga reasoning token at billing
Sa mga hosted open-weight model, ang mga reasoning token ay output tokens: sinisingil ang mga ito sa output price ng model, at kasama na sila sa output count. Ipinapakita rito ng usage ang bahagi ng reasoning:
| Endpoint | Field | Tala |
|---|---|---|
/v1/chat/completions | usage.completion_tokens_details.reasoning_tokens | Kasama na sa completion_tokens. |
/v1/responses | usage.output_tokens_details.reasoning_tokens | Kasama na sa output_tokens. |
/v1/messages | usage.output_tokens | Reasoning at sagot na pinagsama. Walang hiwalay na bilang ang format na ito. |
- Sa mga hosted open-weight model, nililimitahan ng
max_tokensang text ng sagot. Hindi binibilang laban dito ang mga reasoning token. - Dahil sinisingil bilang output ang reasoning, setting din ng gastos ang antas ng effort: ang
offay hindi gumagawa ng reasoning token. - Iniuulat ng mga Shannon model ang
prompt_tokens,completion_tokensattotal_tokens(input_tokensatoutput_tokenssa/v1/messages) nang walang bahagi ng reasoning, at naniningil ng isang flat na presyo kada token. Mga model at presyo
Reasoning sa susunod na request
Hindi mo kailangang ipadala pabalik ang reasoning. Ang thinking block o reasoning item sa conversation na ipinapadala mo ay hindi ipinapasa sa model, kaya ang assistant turn ay maaaring bumalik na may kasama nito o wala. Ang thinking block ay may dalawang field na type at thinking; wala itong signature.
Mga error
| Status | Type | Mensahe | Kailan |
|---|---|---|---|
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | Nakatanggap ang hosted open-weight model ng value na wala sa listahan, halimbawa xhigh. Walang kinukuha sa iyong balance. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | Hindi string ang reasoning_effort. |
Pareho ng sa bawat request ang mga error sa authentication, balance at server. Paghawak ng Error