কনটেন্টে যান
Chat Completions

Chat Completions

POST /v1/chat/completions একটি কথোপকথন নেয় এবং OpenAI Chat Completions ফরম্যাটে মডেলের পরের মেসেজ রিটার্ন করে। এটি যেকোনো OpenAI SDK থেকে বা সাধারণ HTTP-তে ব্যবহার করুন; এই পেজটি ফিল্ড ধরে ধরে রেফারেন্স।

POST https://api.shannon-ai.com/v1/chat/completions

সবচেয়ে ছোট রিকোয়েস্ট হলো একটি মডেল id এবং একটি ইউজার মেসেজ।

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="shannon-3",
    messages=[{"role": "user", "content": "Say hello in one sentence."}],
)

print(response.choices[0].message.content)

উত্তর একটি JSON অবজেক্ট:

200 JSON
{
  "id": "chatcmpl-5f0c1e7a9b3d4c62a8e1f07d2b46c9a3",
  "object": "chat.completion",
  "created": 1791625200,
  "model": "shannon-3",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Hello, it is good to meet you.",
        "reasoning_content": "The user wants a greeting in one sentence. Keep it short and friendly."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 1184,
    "completion_tokens": 46,
    "total_tokens": 1230
  }
}

হেডার

রিকোয়েস্ট হেডার

হেডার মান বিবরণ
Authorization Bearer YOUR_API_KEY আপনার API key। প্রতিটি এন্ডপয়েন্টে এর বদলে x-api-key: YOUR_API_KEY গ্রহণ করা হয়।
Content-Type application/json আবশ্যক। অন্য যেকোনো মানে 415 রিটার্ন হয়।
x-request-id ঐচ্ছিক। রিকোয়েস্টের জন্য আপনার নিজের id। এটি উত্তরে অপরিবর্তিত ফেরত আসে।

উত্তরের হেডার

হেডার বিবরণ
x-request-id প্রতিটি উত্তরে, এরর ও স্ট্রিম সহ: আপনার পাঠানো মান, অথবা আপনি কিছু না পাঠালে 12টি হেক্সাডেসিমাল অক্ষর। সমস্যা জানানোর সময় এটি উল্লেখ করুন।
content-type application/json, অথবা stream true হলে text/event-stream।

রিকোয়েস্ট ফিল্ড

শুধু messages আবশ্যক। যারা প্রয়োগ করে কলামে সেই মডেলগুলোর নাম আছে যেগুলোতে একটি ফিল্ড উত্তর বদলায়। হোস্টেড ওপেন-ওয়েট মডেল হলো মডেল তালিকার বারোটি id; Shannon 3 ফ্যামিলি হলো shannon-3, shannon-3-pro, shannon-3.1 ও shannon-3.1-pro। মডেল ও মূল্য

ফিল্ড টাইপ ডিফল্ট বিবরণ যারা প্রয়োগ করে
model string shannon-1.6-lite যে মডেল উত্তর দেবে: মডেল তালিকা থেকে একটি id। প্রতিটি রিকোয়েস্টের সাথে পাঠান। মিলানোর সময় বড়-ছোট হাতের অক্ষর গুরুত্বপূর্ণ নয়। প্রকাশিত নয় এমন id-তে 400 unknown model রিটার্ন হয়। সব মডেল
messages array আবশ্যক। কথোপকথন, সবচেয়ে পুরনো মেসেজ আগে। নিচে মেসেজ দেখুন। সব মডেল
stream boolean false true উত্তরটি লেখার সাথে সাথে server-sent events হিসেবে পাঠায়। সব মডেল
max_tokens integer 4096 উত্তরের ঊর্ধ্বসীমা, tokens-এ। 1 থেকে 65,536-এর বাইরের মান ওই সীমার মধ্যে নিয়ে আসা হয়। রিকোয়েস্ট চলার সময় আপনার ব্যালেন্স থেকে এই পরিমাণ আলাদা করে রাখা হয়। নিচে আউটপুটের দৈর্ঘ্য দেখুন। হোস্টেড ওপেন-ওয়েট মডেল, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
max_completion_tokens integer max_tokens-এর মতোই। দুটিই পাঠানো হলে max_tokens ব্যবহার হয়। হোস্টেড ওপেন-ওয়েট মডেল, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
temperature number স্যাম্পলিং টেম্পারেচার। হোস্টেড ওপেন-ওয়েট মডেলগুলোতে ডিফল্ট 1 এবং মান 0 থেকে 2-এর মধ্যে রাখা হয়। হোস্টেড ওপেন-ওয়েট মডেল, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
top_p number 0.95 নিউক্লিয়াস স্যাম্পলিং। মান 0 থেকে 1-এর মধ্যে রাখা হয়। হোস্টেড ওপেন-ওয়েট মডেল
seed integer স্যাম্পলারের সিড, যেকোনো পূর্ণসংখ্যা। এটি না দিলে সিড মডেল ও কথোপকথন থেকে নির্ধারিত হয়, তাই একই রিকোয়েস্ট দুবার পাঠালে একই সিড ব্যবহার হয়। হোস্টেড ওপেন-ওয়েট মডেল
stop string | array একটি স্ট্রিং বা স্ট্রিংয়ের একটি অ্যারে। সর্বোচ্চ 4টি ব্যবহার হয়। প্রথমটি যেখানে আসে তার আগেই উত্তর শেষ হয়; স্টপ টেক্সট নিজে ফেরত দেওয়া হয় না। হোস্টেড ওপেন-ওয়েট মডেল
reasoning_effort string high উত্তর দেওয়ার আগে মডেল কতটা রিজনিং করে: off, low, medium বা high। none ও minimal মানে off, default মানে medium, max মানে high। অন্য যেকোনো মানে 400 রিটার্ন হয়। হোস্টেড ওপেন-ওয়েট মডেল
reasoning object একই সেটিং অবজেক্ট ফর্মে: {"effort": "low"}। দুটিই পাঠানো হলে reasoning_effort ব্যবহার হয়। হোস্টেড ওপেন-ওয়েট মডেল
tools array মডেল যেসব ফাংশন কল করতে পারে, প্রতিটি {"type": "function", "function": {"name", "description", "parameters"}} হিসেবে। মডেলের কলগুলো tool_calls-এ ফেরত আসে; আপনার কোড সেগুলো চালায়। সব মডেল
tool_choice string | object auto "auto" মডেলকে সিদ্ধান্ত নিতে দেয়। "required" তাকে একটি টুল কল করাতে বাধ্য করে। {"type": "function", "function": {"name": "…"}} তাকে সেই টুলটিই কল করাতে বাধ্য করে। হোস্টেড ওপেন-ওয়েট মডেল
response_format object JSON উত্তরের জন্য {"type": "json_object"}, অথবা আপনার schema অনুসরণ করা উত্তরের জন্য {"type": "json_schema", "json_schema": {…}}। সব Shannon টিয়ার; হোস্টেড ওপেন-ওয়েট মডেল প্রতিটি id-র তালিকা অনুযায়ী
web_search boolean false true উত্তর দেওয়ার আগে মডেলকে ওয়েবে সার্চ করতে দেয়। shannon-1.6-*, shannon-2-*, Shannon 3 ফ্যামিলি

অন্যান্য OpenAI ফিল্ড, যেমন n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store ও prompt_cache_key, গ্রহণ করা হয়, যাতে বিদ্যমান ক্লায়েন্ট কোড অপরিবর্তিত চলে। এগুলো উত্তর বদলায় না: সবসময় একটিই choice থাকে, এবং স্ট্রিম সবসময় ইউসেজ দিয়ে শেষ হয়।

ভুল JSON টাইপের ফিল্ড, যেমন "max_tokens": "100", 422 রিটার্ন করে। messages ছাড়া রিকোয়েস্টও তা-ই করে।

টুলস, স্ট্রাকচার্ড আউটপুট, রিজনিং ও ওয়েব সার্চের প্রতিটির নিজস্ব পেজ আছে: ফাংশন কলিং, স্ট্রাকচার্ড আউটপুট, রিজনিং effort, ওয়েব সার্চ.

অপশন সহ একটি রিকোয়েস্ট

এই রিকোয়েস্টে একটি সিস্টেম মেসেজ, স্যাম্পলিং ফিল্ড এবং রিজনিং effort সেট করা হয়। এটি একটি হোস্টেড ওপেন-ওয়েট মডেল ব্যবহার করে, যা সবগুলো প্রয়োগ করে।

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="DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
    messages=[
        {"role": "system", "content": "You are a physics teacher. Answer in two sentences."},
        {"role": "user", "content": "Why is the sky blue?"},
    ],
    max_tokens=512,
    temperature=0.3,
    top_p=0.9,
    seed=7,
    stop=["\n\n"],
    reasoning_effort="low",
)

message = response.choices[0].message
print(message.reasoning_content)  # the reasoning
print(message.content)            # the answer
print(response.usage)

উত্তরের গঠন উপরের মতোই। হোস্টেড ওপেন-ওয়েট মডেলগুলোতে এর usage দুটি বিবরণ যোগ করে: ক্যাশ থেকে পড়া প্রম্পট tokens এবং রিজনিংয়ে খরচ হওয়া tokens।

200 JSON
{
  "usage": {
    "prompt_tokens": 31,
    "completion_tokens": 62,
    "total_tokens": 93,
    "prompt_tokens_details": {
      "cached_tokens": 0
    },
    "completion_tokens_details": {
      "reasoning_tokens": 21
    }
  }
}

আউটপুটের দৈর্ঘ্য

max_tokens দুটি কাজ করে। প্রথমত, রিকোয়েস্ট শুরুর সময় আপনার ব্যালেন্স থেকে যত tokens আলাদা করে রাখা হয় এটি সেই সংখ্যা। উত্তর সম্পূর্ণ হলে সেই পরিমাণ রিকোয়েস্টের ব্যবহৃত tokens দিয়ে প্রতিস্থাপিত হয়। max_tokens আপনার ব্যালেন্সের বাকি অংশের চেয়ে বড় হলে উত্তর নিজে ঢুকে গেলেও রিকোয়েস্ট 429 Quota exceeded রিটার্ন করে। কম আলাদা করে রাখতে কম max_tokens পাঠান।

এই এন্ডপয়েন্টে shannon-coder-1 ভিন্নভাবে গণনা হয়: প্রতিটি রিকোয়েস্ট আপনার প্ল্যানের একটি Shannon Coder কল, এবং এর জন্য কোনো tokens আলাদা করে রাখা হয় না। সীমা ও ব্যালেন্স

দ্বিতীয়ত, এটি এই মডেলগুলোতে উত্তরের দৈর্ঘ্য সীমিত করে:

মডেল উত্তরের দৈর্ঘ্যে max_tokens-এর প্রভাব
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 লিমিটে পৌঁছালে উত্তর থামে। তখন স্ট্রিম finish_reason length দিয়ে শেষ হয়।
হোস্টেড ওপেন-ওয়েট মডেল উত্তরের টেক্সট max_tokens-এ থামে। রিজনিং এর হিসাবে ধরা হয় না। 256-এর নিচের মান 256 হিসেবে কাজ করে।

max_tokens বা max_completion_tokens ছাড়া মান 4,096। shannon-coder-1-এ এটি 65,536।

মেসেজ

প্রতিটি মেসেজ একটি role ও একটি content সহ অবজেক্ট। content হলো একটি স্ট্রিং, অথবা মেসেজ শুধু টেক্সটের বেশি কিছু বহন করলে অংশের একটি অ্যারে।

রোল বিবরণ যারা প্রয়োগ করে
system মডেলের জন্য নির্দেশনা। এটি সবার আগে দিন। Shannon টিয়ারগুলোতে প্রথম system মেসেজটিই ব্যবহার হয়। হোস্টেড ওপেন-ওয়েট মডেল, shannon-1.6-*, shannon-2-*, shannon-coder-1
developer system হিসেবে পড়া হয়। হোস্টেড ওপেন-ওয়েট মডেল
user আপনি যা জিজ্ঞাসা করেন। Shannon টিয়ারগুলোতে শেষ user মেসেজটি প্রম্পট এবং এর আগের মেসেজগুলো হিস্ট্রি। সব মডেল
assistant মডেলের আগের উত্তর। এর পরে টুল ফলাফল পাঠানোর সময় এর tool_calls রেখে দিন। সব মডেল
tool একটি টুল কলের ফলাফল: tool_call_id-তে কলের id থাকে এবং content-এ ফলাফল একটি স্ট্রিং হিসেবে। সব মডেল

Shannon 3 ফ্যামিলির কোনো id-র ক্ষেত্রে, যেসব নির্দেশনা অবশ্যই মানতে হবে তা user মেসেজে দিন।

Shannon টিয়ারগুলোতে ইউজার টেক্সট ও tools ছাড়া রিকোয়েস্ট 400 No user message provided রিটার্ন করে।

কনটেন্ট অংশ

অংশ বিবরণ যেখানে পাওয়া যায়
{"type": "text", "text": "…"} সাধারণ টেক্সট। সব মডেল
{"type": "image_url", "image_url": {"url": "…"}} একটি ইমেজ, base64 কনটেন্ট সহ data: URL হিসেবে অথবা http(s) URL হিসেবে। Shannon 3 ফ্যামিলি, shannon-1.6-lite, shannon-1.6-pro, এবং যেসব হোস্টেড ওপেন-ওয়েট মডেল ইমেজ ইনপুট তালিকাভুক্ত করে
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} একটি ডকুমেন্ট (PDF, Word, PowerPoint বা Excel), base64 হিসেবে বা URL দিয়ে। Shannon 3 ফ্যামিলি

সাইজ, লিমিট এবং ফর্মের সম্পূর্ণ তালিকার জন্য আলাদা পেজ আছে। ইমেজ ও ফাইল

উত্তরের অবজেক্ট

ফিল্ড টাইপ বিবরণ
id string chatcmpl-, তারপর 32টি হেক্সাডেসিমাল অক্ষর।
object string সবসময় chat.completion।
created integer উত্তরের সময়, Unix সেকেন্ডে।
model string যে মডেল উত্তর দিয়েছে তার canonical id। বানানে এটি আপনার পাঠানো id থেকে আলাদা হতে পারে।
choices array সবসময় ঠিক একটি choice, index 0 সহ।
choices[0].message.role string সবসময় assistant।
choices[0].message.content string | null উত্তরের টেক্সট। tool_calls থাকলে Shannon টিয়ারগুলোতে এটি null; হোস্টেড ওপেন-ওয়েট মডেল কলের পাশে টেক্সট পাঠাতে পারে।
choices[0].message.reasoning_content string | null উত্তরের আগে মডেল যে রিজনিং লিখেছে, অথবা কিছু না থাকলে null।
choices[0].message.tool_calls array শুধু মডেল টুল কল করলেই থাকে। প্রতিটি এন্ট্রিতে একটি id, type function, এবং function-এ name ও JSON স্ট্রিং হিসেবে arguments থাকে।
choices[0].message.annotations array শুধু সেই রিকোয়েস্টে যাতে web_search: true আছে এবং যার সার্চে কিছু পাওয়া গেছে। content-এর কোনো মার্কারের নাম করা প্রতিটি উৎসের জন্য একটি url_citation, তাতে url, title, start_index ও end_index থাকে (মার্কারের অবস্থান, অক্ষরে গোনা, শেষটি অন্তর্ভুক্ত নয়)।
choices[0].finish_reason string উত্তর কেন শেষ হয়েছে। ফিনিশ রিজন দেখুন।
usage object রিকোয়েস্টের tokens। ইউসেজ দেখুন।
sources array শুধু সেই রিকোয়েস্টে যাতে web_search: true আছে এবং যার সার্চে কিছু পাওয়া গেছে: মডেলকে দেওয়া ফলাফলগুলো, প্রতিটিতে index, title ও url থাকে। উত্তরের [1] হলো index 1 সহ এন্ট্রি।

ফিনিশ রিজন

finish_reason বিবরণ
stop মডেল তার উত্তর শেষ করেছে, অথবা একটি stop স্ট্রিং এসেছে।
tool_calls মডেল এক বা একাধিক টুল কল করে। সেগুলো চালান এবং ফলাফল tool মেসেজে পাঠান।
length আউটপুট লিমিটে এসে উত্তর কেটে গেছে। shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 ও Shannon 3 ফ্যামিলির স্ট্রিমে জানানো হয়।

স্ট্রিম না করা উত্তর stop বা tool_calls জানায়।

ইউসেজ

ফিল্ড টাইপ বিবরণ যেখানে পাওয়া যায়
usage.prompt_tokens integer ইনপুট tokens। সব মডেল
usage.completion_tokens integer আউটপুট tokens: রিজনিং, উত্তর ও টুল কল একসাথে। সব মডেল
usage.total_tokens integer prompt_tokens যোগ completion_tokens। সব মডেল
usage.prompt_tokens_details.cached_tokens integer prompt_tokens-এর যে অংশ প্রম্পট ক্যাশ থেকে পড়া হয়েছে। হোস্টেড ওপেন-ওয়েট মডেল
usage.completion_tokens_details.reasoning_tokens integer completion_tokens-এর যে অংশ রিজনিংয়ে খরচ হয়েছে। হোস্টেড ওপেন-ওয়েট মডেল

হোস্টেড ওপেন-ওয়েট মডেলগুলোতে prompt_tokens হলো আপনার মেসেজ ও টুল সংজ্ঞা মডেলের নিজস্ব টোকেনাইজার দিয়ে গণনা করা, সঙ্গে যেকোনো ইমেজের tokens। token গণনার এন্ডপয়েন্টগুলো পাঠানোর আগেই একই সংখ্যা রিটার্ন করে। Token গণনা

Shannon টিয়ারগুলোতে prompt_tokens উত্তর লিখতে মডেল যা কিছু পড়েছে সবকিছু গণনা করে, তাই এটি শুধু আপনার মেসেজের টেক্সটের চেয়ে বড় হয়।

স্ট্রিমিং

stream true সেট করলে উত্তর chat.completion.chunk ইভেন্ট হিসেবে আসে এবং data: [DONE] দিয়ে শেষ হয়। এর আগের শেষ চাংকে finish_reason ও usage থাকে; কোনো stream_options লাগে না। চাংকের গঠন, কিপ-অ্যালাইভ লাইন এবং স্ট্রিমের ভেতরের এররের জন্য আলাদা পেজ আছে। স্ট্রিমিং

এরর

এরর হলো error সদস্য সহ একটি JSON অবজেক্ট। যাচাই এই ক্রমে চলে: API key, রিকোয়েস্ট বডি, মডেল id, তারপর ব্যালেন্স। টেবিলে এই এন্ডপয়েন্ট সবচেয়ে বেশি যা রিটার্ন করে তা দেওয়া আছে। কোনটি আবার চেষ্টা করতে হবে সহ সম্পূর্ণ তালিকার জন্য আলাদা পেজ আছে। এরর হ্যান্ডলিং

400 JSON
{
  "error": {
    "type": "invalid_request_error",
    "message": "unknown model: no-such-model"
  }
}
স্ট্যাটাস টাইপ মেসেজ কখন
401 authentication_error Missing authentication
Invalid API key
কোনো API key পাঠানো হয়নি, অথবা key অজানা বা বাতিল করা।
400 invalid_request_error unknown model: <id> model কোনো প্রকাশিত id নয়।
400 invalid_request_error No user message provided Shannon টিয়ার: রিকোয়েস্টে কোনো ইউজার টেক্সট নেই এবং কোনো tools নেই।
400 invalid_request_error <id> does not accept image input ইমেজ ইনপুট নেই এমন একটি হোস্টেড ওপেন-ওয়েট মডেলে ইমেজ অংশ পাঠানো হয়েছে।
400 invalid_request_error <id> does not accept response_format স্ট্রাকচার্ড আউটপুট নেই এমন একটি হোস্টেড ওপেন-ওয়েট মডেলে response_format পাঠানো হয়েছে।
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high reasoning_effort-এ তালিকার বাইরের মান আছে।
422 invalid_request_error Failed to deserialize the JSON body into the target type: … messages নেই, অথবা কোনো ফিল্ডের JSON টাইপ ভুল।
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_tokens আপনার ব্যালেন্সের বাকি অংশের চেয়ে বড়।
429 rate_limit_error Too many requests. Retry in <n>s. ফ্লাড প্রোটেকশন: আপনার অ্যাকাউন্টে এক মিনিটে 120-এর বেশি রিকোয়েস্ট।
500 server_error The model backend failed to answer. Please retry. মডেল কোনো উত্তর তৈরি করেনি। রিকোয়েস্টটি আবার পাঠান।
502 api_error The model backend failed to answer. Please retry. একই, Shannon 3 ফ্যামিলি এবং হোস্টেড ওপেন-ওয়েট মডেলগুলোতে।