Resonemangsansträngning
NyEn modell som resonerar returnerar sin resonemangstext bredvid svaret, i ett eget fält. På de hostade open-weight-modellerna anger ett begäranfält hur djupt modellen resonerar innan den svarar.
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?"}
]
}' Svaret bär resonemangstexten i reasoning_content, svaret i content och resonemangstokens i 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}
}
} Vilka modeller som resonerar
| Modell | Returnerar resonemangstext | Tillämpar nivåfältet |
|---|---|---|
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 | Ja | — |
| Varje hostad open-weight-modell | Ja | Ja |
Det här är flaggorna capabilities.reasoning och capabilities.reasoning_effort som GET /v1/models rapporterar för varje id. Ett svar bär resonemangstext bara när modellen skapade någon. Modeller och priser
Ange resonemangsnivån
Varje endpoint har sin egen stavning av nivån. Alla väljer en av samma fyra nivåer.
| Fält | Typ | Standard | Beskrivning | Tillämpas av |
|---|---|---|---|---|
reasoning_effort | string | high | /v1/chat/completions. Hur djupt modellen resonerar innan den svarar: off, low, medium eller high. | Hostade open-weight-modeller |
reasoning | object | string | /v1/chat/completions. Samma värde som {"effort": "low"} eller som en ren sträng. När båda fälten skickas gäller reasoning_effort. | Hostade open-weight-modeller | |
reasoning.effort | string | high | /v1/responses. Skrivs som objektet {"effort": "low"}. | Hostade open-weight-modeller |
thinking | object | /v1/messages. {"type": "enabled", "budget_tokens": n} eller {"type": "disabled"}. Budgeten väljer en av nivåerna; se tabellen längre ned. | Hostade 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?"}]
} | Värde | Accepteras också | Effekt |
|---|---|---|
off | none, minimal | Inget resonemang. Svaret bär ingen resonemangstext. |
low | Kort resonemang. | |
medium | default | Medeldjup. |
high | max | Den djupaste nivån. Det här är nivån för en begäran som inte skickar något värde. |
- Värden läses utan hänsyn till versaler eller gemener.
- Värdet
defaultbetydermedium. Om fältet utelämnas betyder dethigh. - Shannon-modellerna (
shannon-*) bestämmer sitt eget djup i varje begäran;GET /v1/modelsrapporterarreasoning_effort: falseför dem.
Thinking-budgeten på /v1/messages
På /v1/messages väljer fältet thinking nivån. budget_tokens väljer en av nivåerna ovan; det är ingen egen tokengräns. adaptive läses som enabled.
| Du skickar | Nivå |
|---|---|
{"type": "disabled"} | off |
{"type": "enabled", "budget_tokens": n} med n upp till 2,048 | low |
n från 2,049 till 8,192 | medium |
Ett större n, eller enabled utan budget_tokens | high |
Inget thinking-fält | high |
Var resonemangstexten kommer
Resonemangstexten är alltid skild från svaret. Varje format har sin egen plats för den:
| Endpoint | Inte streamat | Streamat |
|---|---|---|
/v1/chat/completions | choices[0].message.reasoning_content: en sträng, eller null när modellen inte skapade något. | Chunks med choices[0].delta.reasoning_content, före chunkarna med delta.content. |
/v1/responses | Ett output-objekt {"type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} före message-objektet. Inget objekt när det inte finns något resonemang. | response.output_item.added med ett reasoning-objekt, sedan response.reasoning_summary_text.delta-händelser och en response.reasoning_summary_text.done. |
/v1/messages | Ett första innehållsblock {"type": "thinking", "thinking": "…"}, sedan text-blocket. Inget thinking-block när det inte finns något resonemang. | Ett innehållsblock av typen thinking: content_block_start, content_block_delta-händelser med thinking_delta, content_block_stop. Textblocket följer. |
{
"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
}
} Var du ska titta, per modell:
| Modeller | Var texten kommer |
|---|---|
| Hostade open-weight-modeller | På varje endpoint, streamat eller inte. En begäran med nivån off, eller med response_format / text.format, besvaras utan resonemangstext. |
shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro | På varje endpoint, streamat eller inte, så snart modellen skapade resonemangstext. |
shannon-2-lite, shannon-2-pro | /v1/chat/completions, inte streamat: i message.reasoning_content. Streamat, i en begäran utan tools eller response_format: strömmen bär kommentarsraderna : thinking medan modellen resonerar, sedan svarschunkarna. /v1/messages, streamat: ett thinking-block före textblocket. |
shannon-1.6-pro, shannon-coder-1 | I streamade svar och i svar på begäranden som bär tools, så snart modellen skapade resonemangstext. |
På /v1/responses bär ett svar som inte streamas reasoning-objektet för Shannon 3-familjen och de hostade open-weight-modellerna.
Läsa en ström
I en ström kommer resonemangstexten först, i egna deltan, och svaret följer. Skriv ut eller spara de två separat:
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?"}
]
}' Den första chunken från en hostad open-weight-modell, resonemang eller svar, bär också delta.role: "assistant". Streaming
Resonemangstokens och fakturering
På de hostade open-weight-modellerna är resonemangstokens outputtokens: de faktureras till modellens outputpris, och outputantalet inkluderar dem redan. usage visar resonemangsandelen här:
| Endpoint | Fält | Anmärkning |
|---|---|---|
/v1/chat/completions | usage.completion_tokens_details.reasoning_tokens | Ingår redan i completion_tokens. |
/v1/responses | usage.output_tokens_details.reasoning_tokens | Ingår redan i output_tokens. |
/v1/messages | usage.output_tokens | Resonemang och svar tillsammans. Det här formatet har ingen separat räkning. |
- På de hostade open-weight-modellerna begränsar
max_tokenssvarstexten. Resonemangstokens räknas inte mot den. - Eftersom resonemang faktureras som output är resonemangsnivån också en kostnadsinställning:
offger inga resonemangstokens. - Shannon-modellerna rapporterar
prompt_tokens,completion_tokensochtotal_tokens(input_tokensochoutput_tokenspå/v1/messages) utan resonemangsandel, och fakturerar ett fast pris per token. Modeller och priser
Resonemang i nästa begäran
Du behöver inte skicka tillbaka resonemanget. Ett thinking-block eller ett reasoning-objekt i konversationen du skickar förs inte vidare till modellen, så en assistentvändning kan skickas tillbaka med eller utan det. Ett thinking-block har de två fälten type och thinking; det har ingen signature.
Fel
| Status | Typ | Meddelande | När |
|---|---|---|---|
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | En hostad open-weight-modell fick ett värde utanför listan, till exempel xhigh. Ingenting dras från din balans. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | reasoning_effort är inte en sträng. |
Fel gällande autentisering, balans och server är desamma som för varje begäran. Felhantering