কনটেন্টে যান
কুইক স্টার্ট

কুইক স্টার্ট

প্রথম রিকোয়েস্ট করুন: আপনার key নিন, একটি মেসেজ পাঠান এবং উত্তর পড়ুন। API OpenAI ও Anthropic ফরম্যাট বোঝে, তাই আপনি যে SDK ইতিমধ্যে ব্যবহার করেন, base URL ও key বদলালেই সেটি কাজ করে।

1. আপনার key নিন

প্রতিটি অ্যাকাউন্টে একটি API key আছে। সাইন ইন করুন, Keys & usage খুলুন এবং এটি কপি করুন। key প্রতিটি এন্ডপয়েন্টে ও প্রতিটি মডেলে কাজ করে। Keys & usage

2. ক্লায়েন্টকে API-র দিকে নির্দেশ করুন

সব এন্ডপয়েন্ট একটি base URL-এর অধীনে থাকে। OpenAI SDK এটি শেষে /v1 সহ নেয়; Anthropic SDK তা ছাড়াই নেয়, কারণ সে নিজেই /v1/messages যোগ করে।

ক্লায়েন্ট Base URL
OpenAI SDK এবং OpenAI-সামঞ্জস্যপূর্ণ ক্লায়েন্ট https://api.shannon-ai.com/v1
Anthropic SDK https://api.shannon-ai.com

টেক্সট তৈরি করে তিনটি এন্ডপয়েন্ট। সেগুলো একই মডেলে পৌঁছায়; আপনার কোড যে ফরম্যাট ইতিমধ্যে ব্যবহার করে সেটি বেছে নিন।

এন্ডপয়েন্ট ফরম্যাট
POST /v1/chat/completions OpenAI Chat Completions
POST /v1/messages Anthropic Messages
POST /v1/responses OpenAI Responses

3. প্রথম রিকোয়েস্ট পাঠান

Chat Completions এন্ডপয়েন্টে shannon-3-কে একটি user মেসেজ পাঠান। YOUR_API_KEY-এর জায়গায় আপনার key বসান।

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="shannon-3",
    messages=[
        {"role": "user", "content": "Hello, Shannon!"}
    ],
    max_tokens=1024
)

print(response.choices[0].message.content)
ফিল্ড টাইপ ডিফল্ট বিবরণ
model string যে মডেল উত্তর দেবে তার id। id-গুলো Models & pricing-এ তালিকাভুক্ত।
messages array এখন পর্যন্ত কথোপকথন: role ও content সহ অবজেক্ট। শেষ user মেসেজটি প্রম্পট। আবশ্যক।
max_tokens integer 4096 রিকোয়েস্টের আউটপুট বাজেট, 1 থেকে 65,536। রিকোয়েস্ট আপনার ব্যালেন্স থেকে এই পরিমাণ সংরক্ষণ করে এবং প্রকৃত ব্যবহারের জন্য চার্জ হয়।
stream boolean false true হলে উত্তর লেখা হওয়ার সাথে সাথে টুকরো টুকরো করে পাঠানো হয়।

রিকোয়েস্ট বডি JSON এবং এর জন্য Content-Type: application/json হেডার লাগে। ফিল্ডের পূর্ণ তালিকা এন্ডপয়েন্ট পেজে আছে। Chat Completions

উত্তর

stream ছাড়া কল উত্তর সম্পূর্ণ হলে একটি JSON অবজেক্ট ফেরত দেয়। নিচের টেক্সট ও সংখ্যাগুলো উদাহরণ।

200 JSON
{
  "id": "chatcmpl-9b2f6c1e4a7d4f0f8a3c5d2e1b6a7c90",
  "object": "chat.completion",
  "created": 1791590400,
  "model": "shannon-3",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Hello! What would you like to work on?",
        "reasoning_content": "A greeting. A short, friendly reply fits."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 1386,
    "completion_tokens": 74,
    "total_tokens": 1460
  }
}
ফিল্ড টাইপ বিবরণ
id string chatcmpl--এর পরে 32টি হেক্সাডেসিমাল অক্ষর।
object string সবসময় chat.completion।
created integer উত্তরের সময়, Unix সেকেন্ডে।
model string যে মডেল উত্তর দিয়েছে তার প্রকাশিত id, আপনি অ্যালিয়াস বা অন্য বানান পাঠালেও।
choices array সবসময় একটি এন্ট্রি, index 0 সহ।
choices[0].message.role string সবসময় assistant।
choices[0].message.content string | null উত্তর। উত্তরে tool_calls থাকলে এটি null হতে পারে।
choices[0].message.reasoning_content string | null উত্তরের আগে মডেলের রিজনিং, না থাকলে null।
choices[0].message.tool_calls array মডেল আপনার ঘোষণা করা কোনো টুল কল করলেই শুধু থাকে।
choices[0].finish_reason string উত্তরের জন্য stop, মডেল টুল কল করলে tool_calls।
usage.prompt_tokens integer এই উত্তরের জন্য মডেল যত tokens পড়েছে। shannon-2-* ও Shannon 3 পরিবারে এটি আপনার পাঠানো টেক্সটের চেয়ে বেশি হতে পারে।
usage.completion_tokens integer মডেল যত tokens লিখেছে।
usage.total_tokens integer মোট। Shannon মডেলের চার্জ এই সংখ্যা থেকে হিসাব হয়।
  • usage-এ token সংখ্যা থাকে, টাকার অঙ্ক নয়। কলটি আপনার ব্যালেন্স থেকে কত নিয়েছে তা প্রতি রিকোয়েস্টে Keys & usage-এ দেখানো হয়; কীভাবে হিসাব হয় তা সীমা ও ব্যালেন্স পেজে আছে। সীমা ও ব্যালেন্স
  • প্রতিটি উত্তরে, এরর ও স্ট্রিমেও, x-request-id হেডার থাকে। আপনার রিকোয়েস্টে x-request-id হেডার থাকলে তার মান ফিরে আসে; না থাকলে মান 12টি হেক্সাডেসিমাল অক্ষর। এটি লগে রাখুন: এটি এই একটি রিকোয়েস্টকে চিহ্নিত করে।

একই কল স্ট্রিম হিসেবে

উত্তর লেখার সাথে সাথে পড়তে stream true করুন। রিকোয়েস্টের বাকি সব একই থাকে।

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="shannon-3",
    messages=[
        {"role": "user", "content": "Hello, Shannon!"}
    ],
    max_tokens=1024,
    stream=True
)

for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

স্ট্রিমের প্রতিটি ফ্রেম data: দিয়ে শুরু হওয়া একটি লাইন, যাতে একটি JSON অবজেক্ট থাকে। একটি ফ্রেম, কয়েক লাইনে ছাপা:

একটি ফ্রেম
{
  "id": "chatcmpl-9b2f6c1e4a7d4f0f8a3c5d2e1b6a7c90",
  "object": "chat.completion.chunk",
  "created": 1791590400,
  "model": "shannon-3",
  "choices": [
    {
      "index": 0,
      "delta": {
        "content": "Hello! "
      },
      "finish_reason": null
    }
  ]
}
ফ্রেম, ক্রমানুসারে delta finish_reason
মডেল যখন রিজনিং করে। শূন্য বা তার বেশি ফ্রেম। {"reasoning_content": "…"} null
উত্তর, টুকরো টুকরো করে। শূন্য বা তার বেশি ফ্রেম। {"content": "…"} null
শেষ JSON ফ্রেম। এতে usage-ও থাকে; আলাদা করে চাইতে হয় না। {} "stop"
স্ট্রিমের শেষ: data: [DONE] লাইন।
  • উত্তরের স্ট্যাটাস 200 এবং content-type: text/event-stream। প্রতিটি ফ্রেম data: <json> লাইন, তারপর একটি ফাঁকা লাইন।
  • প্রতি 15 সেকেন্ডে : ping লাইন আসে। এটি একটি মন্তব্য, যা সংযোগ খোলা রাখে; SSE ক্লায়েন্ট এটি বাদ দেয়।
  • স্ট্রিম খোলার পর কোনো ব্যর্থতা এলে তা data: {"error": {…}} ফ্রেম হিসেবে আসে। স্ট্যাটাস 200-ই থাকে, তাই ফ্রেমগুলো যাচাই করুন।

স্ট্রিমিং

কল ব্যর্থ হলে

এরর হলো একটি JSON অবজেক্ট, যার error-এ type ও message থাকে। প্রথম কলে সবচেয়ে বেশি যে উত্তরগুলো মেলে সেগুলো এখানে।

স্ট্যাটাস টাইপ বার্তা এর অর্থ
401 authentication_error Missing authentication API-তে কোনো key পৌঁছায়নি। Authorization: Bearer-এর পরে আপনার key পাঠান।
401 authentication_error Invalid API key key কোনো অ্যাকাউন্টের বর্তমান key নয়। Keys & usage থেকে আবার কপি করুন।
400 invalid_request_error unknown model: <id> model কোনো প্রকাশিত id নয়। Models & pricing থেকে একটি id ব্যবহার করুন।
422 invalid_request_error Failed to deserialize the JSON body into the target type… কোনো ফিল্ডের JSON type ভুল, অথবা messages নেই।
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan রিকোয়েস্টের আউটপুট বাজেট আপনার ব্যালেন্সে ধরে না।

এরর হ্যান্ডলিং

এরপর কোথায় যাবেন

  • মডেল ও মূল্য — একটি মডেল বাছুন: id, কনটেক্সট উইন্ডো ও দাম।
  • Chat Completions — আপনার কল করা এন্ডপয়েন্টের প্রতিটি রিকোয়েস্ট ফিল্ড, উত্তরের ফিল্ড ও স্ট্রিম ইভেন্ট।
  • স্ট্রিমিং — স্ট্রিমের ফ্রেম, কিপ-অ্যালাইভ লাইন এবং স্ট্রিমের ভেতরের এরর।
  • ফাংশন কলিং — মডেলকে আপনার ফাংশন কল করতে দিন।
  • সীমা ও ব্যালেন্স — একটি রিকোয়েস্ট কী সংরক্ষণ করে ও তার খরচ কত, এবং কতগুলো রিকোয়েস্ট পাঠাতে পারেন।
  • API প্লেগ্রাউন্ড — আপনার key দিয়ে ব্রাউজারে রিকোয়েস্ট চেষ্টা করুন।