রিজনিং effort
নতুনযে মডেল রিজনিং করে সে উত্তরের পাশে নিজস্ব একটি ফিল্ডে তার রিজনিং টেক্সট ফেরত দেয়। হোস্টেড ওপেন-ওয়েট মডেলে একটি রিকোয়েস্ট ফিল্ড ঠিক করে উত্তর দেওয়ার আগে মডেল কত গভীরভাবে রিজনিং করবে।
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_content-এ, উত্তর content-এ, এবং রিজনিং tokens থাকে 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}
}
} কোন মডেল রিজনিং করে
| মডেল | রিজনিং টেক্সট ফেরত দেয় | এফোর্ট ফিল্ড প্রয়োগ করে |
|---|---|---|
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 | হ্যাঁ | — |
| প্রতিটি হোস্টেড ওপেন-ওয়েট মডেল | হ্যাঁ | হ্যাঁ |
GET /v1/models প্রতিটি id-র জন্য যে capabilities.reasoning ও capabilities.reasoning_effort ফ্ল্যাগ জানায়, এগুলো সেই ফ্ল্যাগ। মডেল কিছু তৈরি করলেই কেবল উত্তরে রিজনিং টেক্সট থাকে। মডেল ও মূল্য
এফোর্ট সেট করা
প্রতিটি এন্ডপয়েন্টে এফোর্ট লেখার নিজস্ব ধরন আছে। সবগুলোই একই চারটি স্তরের একটি বাছে।
| ফিল্ড | টাইপ | ডিফল্ট | বিবরণ | যারা প্রয়োগ করে |
|---|---|---|---|---|
reasoning_effort | string | high | /v1/chat/completions। উত্তর দেওয়ার আগে মডেল কত গভীরভাবে রিজনিং করে: off, low, medium বা high। | হোস্টেড ওপেন-ওয়েট মডেল |
reasoning | object | string | /v1/chat/completions। একই মান {"effort": "low"} হিসেবে বা সরাসরি string হিসেবে। দুটি ফিল্ডই পাঠালে 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 | রিজনিং নেই। উত্তরে কোনো রিজনিং টেক্সট থাকে না। |
low | সংক্ষিপ্ত রিজনিং। | |
medium | default | মাঝারি গভীরতা। |
high | max | সবচেয়ে গভীর স্তর। কোনো মান না পাঠানো রিকোয়েস্টের স্তর এটিই। |
- মান পড়ার সময় বড়-ছোট হাতের অক্ষর বিবেচনা করা হয় না।
defaultমান মানেmedium। ফিল্ড না দিলে মানেhigh।- Shannon মডেলগুলো (
shannon-*) প্রতিটি রিকোয়েস্টে নিজের গভীরতা নিজে ঠিক করে;GET /v1/modelsতাদের জন্যreasoning_effort: falseজানায়।
/v1/messages-এ থিংকিং বাজেট
/v1/messages-এ thinking ফিল্ড স্তর বাছে। budget_tokens ওপরের স্তরগুলোর একটি বাছে; এটি আলাদা কোনো token সীমা নয়। adaptive পড়া হয় enabled-এর মতো।
| আপনি পাঠান | স্তর |
|---|---|
{"type": "disabled"} | off |
n সর্বোচ্চ 2,048 সহ {"type": "enabled", "budget_tokens": n} | low |
n 2,049 থেকে 8,192 | medium |
আরও বড় n, অথবা budget_tokens ছাড়া enabled | high |
thinking ফিল্ড নেই | high |
রিজনিং টেক্সট কোথায় আসে
রিজনিং টেক্সট সবসময় উত্তর থেকে আলাদা। প্রতিটি ফরম্যাটে এর নিজস্ব জায়গা আছে:
| এন্ডপয়েন্ট | স্ট্রিম ছাড়া | স্ট্রিম করা |
|---|---|---|
/v1/chat/completions | choices[0].message.reasoning_content: একটি string, অথবা মডেল কিছু তৈরি না করলে null। | choices[0].delta.reasoning_content সহ চাঙ্ক, delta.content সহ চাঙ্কের আগে। |
/v1/responses | message আইটেমের আগে output-এর একটি আইটেম {"type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]}। রিজনিং না থাকলে কোনো আইটেম নেই। | reasoning আইটেমসহ response.output_item.added, তারপর response.reasoning_summary_text.delta ইভেন্ট এবং একটি response.reasoning_summary_text.done। |
/v1/messages | প্রথম কনটেন্ট ব্লক {"type": "thinking", "thinking": "…"}, তারপর text ব্লক। রিজনিং না থাকলে কোনো 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
}
} মডেল অনুযায়ী কোথায় দেখবেন:
| মডেল | টেক্সট কোথায় আসে |
|---|---|
| হোস্টেড ওপেন-ওয়েট মডেল | প্রতিটি এন্ডপয়েন্টে, স্ট্রিম করা বা না করা। এফোর্ট off সহ, অথবা response_format / text.format সহ রিকোয়েস্টের উত্তর রিজনিং টেক্সট ছাড়াই আসে। |
shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro | প্রতিটি এন্ডপয়েন্টে, স্ট্রিম করা বা না করা, যখনই মডেল রিজনিং টেক্সট তৈরি করেছে। |
shannon-2-lite, shannon-2-pro | /v1/chat/completions, স্ট্রিম ছাড়া: message.reasoning_content-এ। tools বা response_format ছাড়া রিকোয়েস্টে স্ট্রিম করলে: মডেল রিজনিং করার সময় স্ট্রিমে : thinking মন্তব্য লাইন আসে, তারপর উত্তরের চাঙ্ক। /v1/messages, স্ট্রিম করা: টেক্সট ব্লকের আগে একটি thinking ব্লক। |
shannon-1.6-pro, shannon-coder-1 | স্ট্রিম করা উত্তরে এবং tools সহ রিকোয়েস্টের উত্তরে, যখনই মডেল রিজনিং টেক্সট তৈরি করেছে। |
/v1/responses-এ স্ট্রিম না করা উত্তরে Shannon 3 পরিবার ও হোস্টেড ওপেন-ওয়েট মডেলের জন্য 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?"}
]
}' হোস্টেড ওপেন-ওয়েট মডেলের প্রথম চাঙ্ক, রিজনিং বা উত্তর যা-ই হোক, delta.role: "assistant"-ও বহন করে। স্ট্রিমিং
রিজনিং tokens ও বিলিং
হোস্টেড ওপেন-ওয়েট মডেলে রিজনিং tokens আউটপুট tokens: এগুলো মডেলের আউটপুট দামে বিল হয়, এবং আউটপুট সংখ্যায় আগে থেকেই ধরা থাকে। usage এখানে রিজনিংয়ের অংশ দেখায়:
| এন্ডপয়েন্ট | ফিল্ড | টীকা |
|---|---|---|
/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 | রিজনিং ও উত্তর একসাথে। এই ফরম্যাটে আলাদা কোনো গণনা নেই। |
- হোস্টেড ওপেন-ওয়েট মডেলে
max_tokensউত্তরের টেক্সট সীমিত করে। রিজনিং tokens এর হিসাবে ধরা হয় না। - রিজনিং আউটপুট হিসেবে বিল হয় বলে এফোর্ট স্তর একটি খরচের সেটিংও:
offকোনো রিজনিং tokens তৈরি করে না। - Shannon মডেল রিজনিংয়ের অংশ ছাড়া
prompt_tokens,completion_tokensওtotal_tokens(/v1/messages-এinput_tokensওoutput_tokens) জানায়, এবং প্রতি token-এ একটি সমান দামে বিল করে। মডেল ও মূল্য
পরের রিকোয়েস্টে রিজনিং
রিজনিং ফেরত পাঠাতে হয় না। আপনার পাঠানো কথোপকথনে thinking ব্লক বা reasoning আইটেম মডেলকে দেওয়া হয় না, তাই অ্যাসিস্ট্যান্ট টার্ন সেটি সহ বা ছাড়া ফেরত পাঠানো যায়। 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 কোনো string নয়। |
অথেনটিকেশন, ব্যালেন্স ও সার্ভার এরর প্রতিটি রিকোয়েস্টের মতোই। এরর হ্যান্ডলিং