Reasoning effort
BaruModel yang bernalar mengembalikan teks penalarannya di samping jawaban, dalam field tersendiri. Pada model open-weight hosted, satu field permintaan menentukan seberapa dalam model bernalar sebelum menjawab.
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?"}
]
}' Balasan membawa teks penalaran di reasoning_content, jawaban di content, dan token penalaran di 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}
}
} Model mana yang bernalar
| Model | Mengembalikan teks penalaran | Menerapkan field 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 | Ya | — |
| Setiap model open-weight hosted | Ya | Ya |
Ini adalah flag capabilities.reasoning dan capabilities.reasoning_effort yang dilaporkan GET /v1/models untuk setiap id. Balasan membawa teks penalaran hanya jika model menghasilkannya. Model & harga
Menyetel effort
Setiap endpoint memiliki ejaan effort sendiri. Semuanya memilih salah satu dari empat level yang sama.
| Field | Tipe | Default | Deskripsi | Diterapkan oleh |
|---|---|---|---|---|
reasoning_effort | string | high | /v1/chat/completions. Seberapa dalam model bernalar sebelum menjawab: off, low, medium, atau high. | Model open-weight hosted |
reasoning | object | string | /v1/chat/completions. Nilai yang sama seperti {"effort": "low"} atau sebagai string saja. Jika kedua field dikirim, reasoning_effort yang dipakai. | Model open-weight hosted | |
reasoning.effort | string | high | /v1/responses. Ditulis sebagai objek {"effort": "low"}. | Model open-weight hosted |
thinking | object | /v1/messages. {"type": "enabled", "budget_tokens": n} atau {"type": "disabled"}. Budget memilih salah satu level; lihat tabel di bawah. | Model open-weight hosted |
{
"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?"}]
} | Nilai | Juga diterima | Efek |
|---|---|---|
off | none, minimal | Tanpa penalaran. Balasan tidak membawa teks penalaran. |
low | Penalaran singkat. | |
medium | default | Kedalaman menengah. |
high | max | Level terdalam. Ini adalah level permintaan yang tidak mengirim nilai. |
- Nilai dibaca tanpa memperhatikan huruf besar atau kecil.
- Nilai
defaultberartimedium. Jika field dihilangkan, artinyahigh. - Model Shannon (
shannon-*) menentukan kedalamannya sendiri pada setiap permintaan;GET /v1/modelsmelaporkanreasoning_effort: falseuntuk model tersebut.
Budget thinking pada /v1/messages
Pada /v1/messages, field thinking memilih level. budget_tokens memilih salah satu level di atas; ia bukan batas token tersendiri. adaptive dibaca seperti enabled.
| Yang Anda kirim | Level |
|---|---|
{"type": "disabled"} | off |
{"type": "enabled", "budget_tokens": n} dengan n hingga 2,048 | low |
n dari 2,049 sampai 8,192 | medium |
n yang lebih besar, atau enabled tanpa budget_tokens | high |
Tanpa field thinking | high |
Di mana teks penalaran muncul
Teks penalaran selalu terpisah dari jawaban. Setiap format memiliki tempatnya sendiri:
| Endpoint | Tanpa stream | Dengan stream |
|---|---|---|
/v1/chat/completions | choices[0].message.reasoning_content: string, atau null jika model tidak menghasilkannya. | Chunk dengan choices[0].delta.reasoning_content, sebelum chunk dengan delta.content. |
/v1/responses | Item output {"type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} sebelum item message. Tidak ada item jika tidak ada penalaran. | response.output_item.added dengan item reasoning, lalu event response.reasoning_summary_text.delta dan satu response.reasoning_summary_text.done. |
/v1/messages | Blok konten pertama {"type": "thinking", "thinking": "…"}, lalu blok text. Tidak ada blok thinking jika tidak ada penalaran. | Blok konten thinking: content_block_start, event content_block_delta dengan thinking_delta, content_block_stop. Blok teks menyusul. |
{
"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
}
} Di mana harus melihat, per model:
| Model | Di mana teks muncul |
|---|---|
| Model open-weight hosted | Pada setiap endpoint, dengan stream maupun tidak. Permintaan dengan effort off, atau dengan response_format / text.format, dijawab tanpa teks penalaran. |
shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro | Pada setiap endpoint, dengan stream maupun tidak, kapan pun model menghasilkan teks penalaran. |
shannon-2-lite, shannon-2-pro | /v1/chat/completions, tanpa stream: di message.reasoning_content. Dengan stream, pada permintaan tanpa tools atau response_format: stream membawa baris komentar : thinking selama model bernalar, lalu chunk jawaban. /v1/messages, dengan stream: blok thinking sebelum blok teks. |
shannon-1.6-pro, shannon-coder-1 | Pada balasan stream dan pada balasan untuk permintaan yang membawa tools, kapan pun model menghasilkan teks penalaran. |
Pada /v1/responses, balasan tanpa stream membawa item reasoning untuk keluarga Shannon 3 dan model open-weight hosted.
Membaca stream
Dalam stream, teks penalaran datang lebih dulu, dalam delta tersendiri, lalu jawaban menyusul. Cetak atau simpan keduanya secara terpisah:
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 pertama dari model open-weight hosted, penalaran atau jawaban, juga membawa delta.role: "assistant". Streaming
Token penalaran dan penagihan
Pada model open-weight hosted, token penalaran adalah token output: ditagih dengan harga output model, dan jumlah output sudah mencakupnya. usage menunjukkan bagian penalaran di sini:
| Endpoint | Field | Catatan |
|---|---|---|
/v1/chat/completions | usage.completion_tokens_details.reasoning_tokens | Sudah termasuk dalam completion_tokens. |
/v1/responses | usage.output_tokens_details.reasoning_tokens | Sudah termasuk dalam output_tokens. |
/v1/messages | usage.output_tokens | Penalaran dan jawaban digabung. Format ini tidak memiliki hitungan terpisah. |
- Pada model open-weight hosted,
max_tokensmembatasi teks jawaban. Token penalaran tidak dihitung terhadapnya. - Karena penalaran ditagih sebagai output, level effort juga merupakan pengaturan biaya:
offtidak menghasilkan token penalaran. - Model Shannon melaporkan
prompt_tokens,completion_tokens, dantotal_tokens(input_tokensdanoutput_tokenspada/v1/messages) tanpa bagian penalaran, dan menagih satu harga tetap per token. Model & harga
Penalaran pada permintaan berikutnya
Anda tidak perlu mengirim balik penalaran. Blok thinking atau item reasoning dalam percakapan yang Anda kirim tidak diteruskan ke model, sehingga giliran assistant boleh dikirim kembali dengan atau tanpanya. Blok thinking memiliki dua field type dan thinking; tidak ada signature.
Error
| Status | Tipe | Pesan | Kapan |
|---|---|---|---|
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | Model open-weight hosted menerima nilai di luar daftar, misalnya xhigh. Tidak ada yang diambil dari saldo Anda. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | reasoning_effort bukan string. |
Error autentikasi, saldo, dan server sama seperti pada setiap permintaan. Penanganan kesalahan