Reasoning-Effort
NeiE Modell, dee reasonéiert, gëtt säi Reasoning-Text niewent der Äntwert zréck, an engem eegene Feld. Bei den Hosted Open-Weight-Modeller setzt ee Ufro-Feld, wéi déif de Modell reasonéiert, ier en äntwert.
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?"}
]
}' D'Äntwert enthält de Reasoning-Text an reasoning_content, d'Äntwert an content, an d'Reasoning-Tokens an 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}
}
} Wéi eng Modeller reasonéieren
| Modell | Gëtt Reasoning-Text zréck | Wend d'Effort-Feld un |
|---|---|---|
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 | Jo | — |
| All Hosted Open-Weight-Modell | Jo | Jo |
Dat sinn d'Flaggen capabilities.reasoning an capabilities.reasoning_effort, déi GET /v1/models fir all ID mellt. Eng Äntwert enthält nëmmen Reasoning-Text, wann de Modell e produzéiert huet. Modeller a Präisser
Den Effort astellen
All Endpoint huet seng eege Schreifweis fir den Effort. Si wielen all ee vun deene selwechte véier Niveauen aus.
| Feld | Typ | Standard | Beschreiwung | Ugewannt vun |
|---|---|---|---|---|
reasoning_effort | string | high | /v1/chat/completions. Wéi déif de Modell reasonéiert, ier en äntwert: off, low, medium oder high. | Hosted Open-Weight-Modeller |
reasoning | object | string | /v1/chat/completions. Deeselwechte Wäert wéi {"effort": "low"} oder als bloussen String. Wann béid Felder geschéckt ginn, gëllt reasoning_effort. | Hosted Open-Weight-Modeller | |
reasoning.effort | string | high | /v1/responses. Als Objet {"effort": "low"} geschriwwen. | Hosted Open-Weight-Modeller |
thinking | object | /v1/messages. {"type": "enabled", "budget_tokens": n} oder {"type": "disabled"}. De Budget wielt ee vun den Niveauen aus; kuckt d'Tabell weider ënnen. | Hosted Open-Weight-Modeller |
{
"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?"}]
} | Wäert | Och akzeptéiert | Wierkung |
|---|---|---|
off | none, minimal | Keng Reasoning. D'Äntwert enthält keen Reasoning-Text. |
low | Kuerz Reasoning. | |
medium | default | Mëttel Déift. |
high | max | Dat déifste Niveau. Dëst ass d'Niveau vun enger Ufro, déi kee Wäert schéckt. |
- D'Wäerter ginn ouni Ënnerscheed tëscht Grouss- a Klengschreiwung gelies.
- De Wäert
defaultbedeitmedium. Wann d'Feld ewech bleift, bedeit dathigh. - D'Shannon-Modeller (
shannon-*) setze bei all Ufro hir eegen Déift;GET /v1/modelsmellt fir sireasoning_effort: false.
De Thinking-Budget op /v1/messages
Op /v1/messages wielt d'Feld thinking d'Niveau aus. budget_tokens sicht ee vun den Niveauen uewen eraus; et ass keng eege Token-Limit. adaptive gëtt wéi enabled gelies.
| Dir schéckt | Niveau |
|---|---|
{"type": "disabled"} | off |
{"type": "enabled", "budget_tokens": n} mat n bis 2,048 | low |
n vun 2,049 bis 8,192 | medium |
E gréissert n, oder enabled ouni budget_tokens | high |
Kee thinking-Feld | high |
Wou de Reasoning-Text ukënnt
De Reasoning-Text ass ëmmer getrennt vun der Äntwert. All Format huet seng eege Plaz dofir:
| Endpoint | Net gestreamt | Gestreamt |
|---|---|---|
/v1/chat/completions | choices[0].message.reasoning_content: e String, oder null, wann de Modell keng produzéiert huet. | Chunken mat choices[0].delta.reasoning_content, virun de Chunke mat delta.content. |
/v1/responses | En output-Item {"type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} virum message-Item. Kee Item, wann et keng Reasoning gëtt. | response.output_item.added mat engem reasoning-Item, dann response.reasoning_summary_text.delta-Events an een response.reasoning_summary_text.done. |
/v1/messages | En éischte Inhaltsblock {"type": "thinking", "thinking": "…"}, dann de text-Block. Kee thinking-Block, wann et keng Reasoning gëtt. | E thinking-Inhaltsblock: content_block_start, content_block_delta-Events mat thinking_delta, content_block_stop. De Text-Block follegt. |
{
"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
}
} Wou ee kuckt, pro Modell:
| Modeller | Wou den Text ukënnt |
|---|---|
| Hosted Open-Weight-Modeller | Op all Endpoint, gestreamt oder net. Eng Ufro mam Effort off, oder mat response_format / text.format, gëtt ouni Reasoning-Text beäntwert. |
shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro | Op all Endpoint, gestreamt oder net, ëmmer wann de Modell Reasoning-Text produzéiert huet. |
shannon-2-lite, shannon-2-pro | /v1/chat/completions, net gestreamt: an message.reasoning_content. Gestreamt, an enger Ufro ouni tools oder response_format: de Stream enthält Kommentar-Zeilen : thinking, wärend de Modell reasonéiert, dann d'Chunke vun der Äntwert. /v1/messages, gestreamt: e thinking-Block virum Text-Block. |
shannon-1.6-pro, shannon-coder-1 | An gestreamten Äntwerten an an Äntwerten op Ufroen, déi tools enthalen, ëmmer wann de Modell Reasoning-Text produzéiert huet. |
Op /v1/responses enthält eng Äntwert, déi net gestreamt gëtt, dat reasoning-Item fir d'Shannon-3-Famill an d'Hosted Open-Weight-Modeller.
E Stream liesen
An engem Stream kënnt de Reasoning-Text als éischt, an eegenen Deltaen, an d'Äntwert follegt. Dréckt oder späichert déi zwee getrennt:
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?"}
]
}' Deen éischte Chunk vun engem Hosted Open-Weight-Modell, Reasoning oder Äntwert, enthält och delta.role: "assistant". Streaming
Reasoning-Tokens a Facturatioun
Bei den Hosted Open-Weight-Modeller sinn Reasoning-Tokens Output-Tokens: si ginn zum Output-Präis vum Modell berechent, an d'Output-Zuel enthält se schonn. usage weist hei den Undeel vun der Reasoning:
| Endpoint | Feld | Notiz |
|---|---|---|
/v1/chat/completions | usage.completion_tokens_details.reasoning_tokens | Schonn an completion_tokens abegraff. |
/v1/responses | usage.output_tokens_details.reasoning_tokens | Schonn an output_tokens abegraff. |
/v1/messages | usage.output_tokens | Reasoning an Äntwert zesummen. Dëst Format huet keng separat Zuel. |
- Bei den Hosted Open-Weight-Modeller begrenzt
max_tokensden Äntwert-Text. Reasoning-Tokens zielen net derbäi. - Well d'Reasoning als Output berechent gëtt, ass den Effort-Niveau och eng Käschten-Astellung:
offproduzéiert keng Reasoning-Tokens. - D'Shannon-Modeller mellen
prompt_tokens,completion_tokensantotal_tokens(input_tokensanoutput_tokensop/v1/messages) ouni Reasoning-Undeel a berechnen een eenheetleche Präis pro Token. Modeller a Präisser
D'Reasoning an der nächster Ufro
Dir musst d'Reasoning net zréckschécken. E thinking-Block oder e reasoning-Item an der Konversatioun, déi Dir schéckt, gëtt net un de Modell weiderginn, sou datt en Assistent-Tour mat oder ouni et zréckgoe kann. E thinking-Block huet déi zwee Felder type an thinking; en huet keng signature.
Feeler
| Status | Typ | Message | Wéini |
|---|---|---|---|
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | En Hosted Open-Weight-Modell huet e Wäert baussent der Lëscht kritt, zum Beispill xhigh. Et gëtt näischt aus Ärem Solde ofgezunn. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | reasoning_effort ass kee String. |
Authentifikatioun, Solde a Serverfeeler sinn déi selwecht wéi bei all Ufro. Feelerbehandlung