কুইক স্টার্ট
প্রথম রিকোয়েস্ট করুন: আপনার 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) 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: 'shannon-3',
messages: [
{ role: 'user', content: 'Hello, Shannon!' }
],
max_tokens: 1024
});
console.log(response.choices[0].message.content); package main
import (
"context"
"fmt"
openai "github.com/sashabaranov/go-openai"
)
func main() {
config := openai.DefaultConfig("YOUR_API_KEY")
config.BaseURL = "https://api.shannon-ai.com/v1"
client := openai.NewClientWithConfig(config)
resp, err := client.CreateChatCompletion(
context.Background(),
openai.ChatCompletionRequest{
Model: "shannon-3",
Messages: []openai.ChatCompletionMessage{
{Role: "user", Content: "Hello, Shannon!"},
},
MaxTokens: 1024,
},
)
if err != nil {
panic(err)
}
fmt.Println(resp.Choices[0].Message.Content)
} curl -X POST "https://api.shannon-ai.com/v1/chat/completions" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-3",
"messages": [
{"role": "user", "content": "Hello, Shannon!"}
],
"max_tokens": 1024
}' | ফিল্ড | টাইপ | ডিফল্ট | বিবরণ |
|---|---|---|---|
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 অবজেক্ট ফেরত দেয়। নিচের টেক্সট ও সংখ্যাগুলো উদাহরণ।
{
"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) 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: 'shannon-3',
messages: [
{ role: 'user', content: 'Hello, Shannon!' }
],
max_tokens: 1024,
stream: true
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? '');
} curl -N -X POST "https://api.shannon-ai.com/v1/chat/completions" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-3",
"messages": [
{"role": "user", "content": "Hello, Shannon!"}
],
"max_tokens": 1024,
"stream": 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 দিয়ে ব্রাউজারে রিকোয়েস্ট চেষ্টা করুন।