Reasoning effort
نیاجو ماڈل reasoning کرتا ہے وہ اپنا reasoning متن جواب کے ساتھ، اپنے الگ فیلڈ میں لوٹاتا ہے۔ ہوسٹڈ اوپن ویٹ ماڈلز پر درخواست کا ایک فیلڈ طے کرتا ہے کہ جواب دینے سے پہلے ماڈل کتنی گہرائی سے reasoning کرے۔
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 کرتے ہیں
| ماڈل | 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 | ہاں | — |
| ہر ہوسٹڈ اوپن ویٹ ماڈل | ہاں | ہاں |
یہ وہ فلیگز capabilities.reasoning اور capabilities.reasoning_effort ہیں جو GET /v1/models ہر id کے لیے بتاتا ہے۔ جواب میں reasoning متن صرف تب ہوتا ہے جب ماڈل نے کچھ پیدا کیا ہو۔ ماڈلز اور قیمتیں
effort سیٹ کرنا
ہر endpoint میں effort لکھنے کا اپنا طریقہ ہے۔ وہ سب انہی چار درجوں میں سے ایک چنتے ہیں۔
| فیلڈ | قسم | ڈیفالٹ | تفصیل | لاگو کرنے والے |
|---|---|---|---|---|
reasoning_effort | string | high | /v1/chat/completions۔ جواب دینے سے پہلے ماڈل کتنی گہرائی سے reasoning کرتا ہے: off، low، medium یا high۔ | ہوسٹڈ اوپن ویٹ ماڈلز |
reasoning | object | string | /v1/chat/completions۔ وہی قدر {"effort": "low"} کے طور پر یا سادہ سٹرنگ کے طور پر۔ جب دونوں فیلڈز بھیجے جائیں تو reasoning_effort معتبر ہے۔ | ہوسٹڈ اوپن ویٹ ماڈلز | |
reasoning.effort | string | high | /v1/responses۔ آبجیکٹ {"effort": "low"} کے طور پر لکھا جاتا ہے۔ | ہوسٹڈ اوپن ویٹ ماڈلز |
thinking | object | /v1/messages۔ {"type": "enabled", "budget_tokens": n} یا {"type": "disabled"}۔ بجٹ درجوں میں سے ایک چنتا ہے؛ نیچے کا جدول دیکھیں۔ | ہوسٹڈ اوپن ویٹ ماڈلز |
{
"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، یا budget_tokens کے بغیر enabled | high |
کوئی thinking فیلڈ نہیں | high |
reasoning متن کہاں آتا ہے
reasoning متن ہمیشہ جواب سے الگ ہوتا ہے۔ ہر فارمیٹ میں اس کی اپنی جگہ ہے:
| Endpoint | غیر سٹریم | سٹریم |
|---|---|---|
/v1/chat/completions | choices[0].message.reasoning_content: ایک سٹرنگ، یا null جب ماڈل نے کچھ پیدا نہ کیا ہو۔ | choices[0].delta.reasoning_content والے chunks، delta.content والے chunks سے پہلے۔ |
/v1/responses | message آئٹم سے پہلے ایک output آئٹم {"type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]}۔ reasoning نہ ہو تو کوئی آئٹم نہیں ہوتا۔ | reasoning آئٹم کے ساتھ response.output_item.added، پھر response.reasoning_summary_text.delta ایونٹس اور ایک response.reasoning_summary_text.done۔ |
/v1/messages | پہلا مواد کا بلاک {"type": "thinking", "thinking": "…"}، پھر text بلاک۔ reasoning نہ ہو تو thinking بلاک نہیں ہوتا۔ | ایک thinking مواد کا بلاک: 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
}
} کہاں دیکھنا ہے، فی ماڈل:
| ماڈلز | متن کہاں آتا ہے |
|---|---|
| ہوسٹڈ اوپن ویٹ ماڈلز | ہر endpoint پر، سٹریم ہو یا نہ ہو۔ جس درخواست میں effort off ہو، یا response_format / text.format ہو، اس کا جواب reasoning متن کے بغیر دیا جاتا ہے۔ |
shannon-3، shannon-3-pro، shannon-3.1، shannon-3.1-pro | ہر endpoint پر، سٹریم ہو یا نہ ہو، جب بھی ماڈل نے reasoning متن پیدا کیا ہو۔ |
shannon-2-lite، shannon-2-pro | /v1/chat/completions، غیر سٹریم: message.reasoning_content میں۔ سٹریم، tools یا response_format کے بغیر درخواست میں: ماڈل کے reasoning کے دوران سٹریم تبصرے کی لائنیں : thinking لاتی ہے، پھر جواب کے chunks۔ /v1/messages، سٹریم: ٹیکسٹ بلاک سے پہلے thinking بلاک۔ |
shannon-1.6-pro، shannon-coder-1 | سٹریم کیے گئے جوابات میں اور ان درخواستوں کے جوابات میں جن میں tools ہوں، جب بھی ماڈل نے reasoning متن پیدا کیا ہو۔ |
/v1/responses پر غیر سٹریم جواب Shannon 3 فیملی اور ہوسٹڈ اوپن ویٹ ماڈلز کے لیے reasoning آئٹم رکھتا ہے۔
سٹریم پڑھنا
سٹریم میں reasoning متن پہلے آتا ہے، اپنے الگ ڈیلٹاز میں، اور جواب اس کے بعد۔ دونوں کو الگ الگ پرنٹ یا محفوظ کریں:
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، reasoning ہو یا جواب، delta.role: "assistant" بھی رکھتا ہے۔ اسٹریمنگ
reasoning ٹوکنز اور بلنگ
ہوسٹڈ اوپن ویٹ ماڈلز پر 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 اور جواب ملا کر۔ اس فارمیٹ میں الگ گنتی نہیں۔ |
- ہوسٹڈ اوپن ویٹ ماڈلز پر
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 | ہوسٹڈ اوپن ویٹ ماڈل کو فہرست سے باہر کی قدر ملی، مثلاً xhigh۔ آپ کے بیلنس سے کچھ نہیں نکالا جاتا۔ |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | reasoning_effort سٹرنگ نہیں ہے۔ |
توثیق، بیلنس اور سرور کے ایررز ہر درخواست کی طرح ہی ہیں۔ غلطیاں