Anthropic
POST /v1/messages Anthropic Messages ফরম্যাটে রিকোয়েস্ট নেয় এবং একই ফরম্যাটে উত্তর দেয়, স্ট্রিম করে বা না করে। এটি Anthropic SDK এবং তার ওপর তৈরি টুলের সাথে, যেমন Claude Code, ব্যবহার করুন: বেস URL সেট করুন, আপনার Shannon API key ব্যবহার করুন এবং একটি Shannon মডেল id দিন।
POST https://api.shannon-ai.com/v1/messages
Anthropic SDK-কে Shannon বেস URL-এ পয়েন্ট করুন। SDK /v1/messages যোগ করে এবং আপনার key x-api-key হেডারে পাঠায়।
import anthropic
client = anthropic.Anthropic(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com",
)
message = client.messages.create(
model="shannon-3",
max_tokens=1024,
messages=[{"role": "user", "content": "Say hello in one sentence."}],
)
for block in message.content:
if block.type == "text":
print(block.text) import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com",
});
const message = await client.messages.create({
model: "shannon-3",
max_tokens: 1024,
messages: [{ role: "user", content: "Say hello in one sentence." }],
});
for (const block of message.content) {
if (block.type === "text") console.log(block.text);
} curl https://api.shannon-ai.com/v1/messages \
-H "x-api-key: YOUR_API_KEY" \
-H "content-type: application/json" \
-d '{
"model": "shannon-3",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Say hello in one sentence."}]
}' উত্তর হলো একটি মেসেজ, যার content ব্লকের একটি তালিকা। ব্লকগুলো তাদের type দিয়ে খুঁজুন: মডেল রিজনিং করলে প্রথম ব্লক thinking হয় এবং টেক্সট তার পরে আসে।
{
"id": "msg_5f0c1e7a9b3d4c62a8e1f07d2b46c9a3",
"type": "message",
"role": "assistant",
"model": "shannon-3",
"content": [
{
"type": "thinking",
"thinking": "The user wants a greeting in one sentence. Keep it short and friendly."
},
{
"type": "text",
"text": "Hello, it is good to meet you."
}
],
"stop_reason": "end_turn",
"usage": {
"input_tokens": 1184,
"output_tokens": 46
}
} হেডার
| হেডার | মান | বিবরণ |
|---|---|---|
x-api-key | YOUR_API_KEY | আপনার API key। এর বদলে Authorization: Bearer YOUR_API_KEY গ্রহণ করা হয়। |
content-type | application/json | আবশ্যক। |
anthropic-version | 2023-06-01 | গ্রহণ করা হয়, আবশ্যক নয়। Anthropic SDK 2023-06-01 পাঠায়; মান যা-ই হোক উত্তরের ফরম্যাট একই থাকে। |
anthropic-beta | গ্রহণ করা হয়, আবশ্যক নয়। | |
x-request-id | ঐচ্ছিক। রিকোয়েস্টের জন্য আপনার নিজের id। এটি উত্তরে অপরিবর্তিত ফেরত আসে; এটি না দিলে উত্তরে 12টি হেক্সাডেসিমাল অক্ষরের একটি id থাকে। |
রিকোয়েস্ট ফিল্ড
শুধু messages আবশ্যক। যারা প্রয়োগ করে কলামে সেই মডেলগুলোর নাম আছে যেগুলোতে একটি ফিল্ড উত্তর বদলায়। হোস্টেড ওপেন-ওয়েট মডেল হলো মডেল তালিকার বারোটি id; Shannon 3 ফ্যামিলি হলো shannon-3, shannon-3-pro, shannon-3.1 ও shannon-3.1-pro। মডেল ও মূল্য
| ফিল্ড | টাইপ | ডিফল্ট | বিবরণ | যারা প্রয়োগ করে |
|---|---|---|---|---|
model | string | shannon-1.6-lite | মডেল তালিকা থেকে একটি Shannon মডেল id। প্রতিটি রিকোয়েস্টের সাথে পাঠান। মিলানোর সময় বড়-ছোট হাতের অক্ষর গুরুত্বপূর্ণ নয়। অন্য কোনো নামে 400 unknown model রিটার্ন হয়, তাই যে টুল নিজের মডেল নাম পাঠায় তাকে Shannon id-তে সেট করতে হবে। | সব মডেল |
messages | array | আবশ্যক। কথোপকথন, সবচেয়ে পুরনো মেসেজ আগে, user ও assistant রোল সহ। নিচে মেসেজ ও কনটেন্ট ব্লক দেখুন। | সব মডেল | |
system | string | array | মডেলের জন্য নির্দেশনা: একটি স্ট্রিং, অথবা টেক্সট ব্লকের একটি অ্যারে। নিচে সিস্টেম প্রম্পট দেখুন। | হোস্টেড ওপেন-ওয়েট মডেল, shannon-1.6-*, shannon-2-*, shannon-coder-1 | |
max_tokens | integer | 4096 | উত্তরের ঊর্ধ্বসীমা, tokens-এ। এই এন্ডপয়েন্টে ঐচ্ছিক; Anthropic SDK সবসময় এটি পাঠায়। 1 থেকে 65,536-এর বাইরের মান ওই সীমার মধ্যে নিয়ে আসা হয়। রিকোয়েস্ট চলার সময় আপনার ব্যালেন্স থেকে এই পরিমাণ আলাদা করে রাখা হয়। | হোস্টেড ওপেন-ওয়েট মডেল, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 |
stream | boolean | false | true উত্তরটি server-sent events হিসেবে পাঠায়। নিচে স্ট্রিমিং দেখুন। | সব মডেল |
temperature | number | স্যাম্পলিং টেম্পারেচার। হোস্টেড ওপেন-ওয়েট মডেলগুলোতে মান 0 থেকে 2-এর মধ্যে রাখা হয়। | হোস্টেড ওপেন-ওয়েট মডেল, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
top_p | number | নিউক্লিয়াস স্যাম্পলিং। | হোস্টেড ওপেন-ওয়েট মডেল | |
stop_sequences | array | সর্বোচ্চ 4টি স্ট্রিং। প্রথমটি যেখানে আসে তার আগেই উত্তর শেষ হয়। stop_reason থাকে end_turn। | হোস্টেড ওপেন-ওয়েট মডেল | |
tools | array | মডেল যেসব টুল কল করতে পারে, প্রতিটি {"name", "description", "input_schema"} হিসেবে। নিচে টুলস দেখুন। | সব মডেল | |
tool_choice | object | {"type": "auto"} মডেলকে সিদ্ধান্ত নিতে দেয়, {"type": "any"} তাকে একটি টুল কল করাতে বাধ্য করে, {"type": "tool", "name": "…"} তাকে সেই টুলটিই কল করাতে বাধ্য করে। | হোস্টেড ওপেন-ওয়েট মডেল | |
thinking | object | উত্তর দেওয়ার আগে মডেল কতটা রিজনিং করে। নিচে থিংকিং দেখুন। | হোস্টেড ওপেন-ওয়েট মডেল | |
web_search | boolean | false | ফরম্যাটে Shannon-এর একটি সংযোজন: true মডেলকে উত্তর দেওয়ার আগে ওয়েবে সার্চ করতে দেয়। | shannon-1.6-*, shannon-2-*, Shannon 3 ফ্যামিলি |
max_tokens ছাড়া মান 4,096, আর shannon-coder-1-এ 65,536।
metadata, top_k, service_tier এবং ব্লকের ওপর cache_control মার্কার গ্রহণ করা হয়, যাতে বিদ্যমান ক্লায়েন্ট কোড অপরিবর্তিত চলে। এগুলো উত্তর বদলায় না; হোস্টেড ওপেন-ওয়েট মডেলগুলোতে প্রম্পট ক্যাশিং স্বয়ংক্রিয়।
schema অনুযায়ী JSON উত্তর চাইতে Chat Completions-এ response_format এবং Responses-এ text.format ব্যবহার করা হয়। স্ট্রাকচার্ড আউটপুট
সিস্টেম প্রম্পট ও থিংকিং সহ একটি রিকোয়েস্ট
এই রিকোয়েস্টে একটি সিস্টেম প্রম্পট, একটি থিংকিং বাজেট, একটি টেম্পারেচার এবং একটি স্টপ সিকোয়েন্স পাঠানো হয়। এটি একটি হোস্টেড ওপেন-ওয়েট মডেল ব্যবহার করে, যা সবগুলো প্রয়োগ করে।
import anthropic
client = anthropic.Anthropic(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com",
)
message = client.messages.create(
model="DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
max_tokens=4096,
system="You are a physics teacher. Answer in two sentences.",
thinking={"type": "enabled", "budget_tokens": 2048},
temperature=0.3,
stop_sequences=["\n\n"],
messages=[{"role": "user", "content": "Why is the sky blue?"}],
)
for block in message.content:
if block.type == "thinking":
print("reasoning:", block.thinking)
elif block.type == "text":
print("answer:", block.text)
print(message.usage) import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com",
});
const message = await client.messages.create({
model: "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
max_tokens: 4096,
system: "You are a physics teacher. Answer in two sentences.",
thinking: { type: "enabled", budget_tokens: 2048 },
temperature: 0.3,
stop_sequences: ["\n\n"],
messages: [{ role: "user", content: "Why is the sky blue?" }],
});
for (const block of message.content) {
if (block.type === "thinking") console.log("reasoning:", block.thinking);
if (block.type === "text") console.log("answer:", block.text);
}
console.log(message.usage); curl https://api.shannon-ai.com/v1/messages \
-H "x-api-key: YOUR_API_KEY" \
-H "content-type: application/json" \
-d '{
"model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
"max_tokens": 4096,
"system": "You are a physics teacher. Answer in two sentences.",
"thinking": {"type": "enabled", "budget_tokens": 2048},
"temperature": 0.3,
"stop_sequences": ["\n\n"],
"messages": [{"role": "user", "content": "Why is the sky blue?"}]
}' হোস্টেড ওপেন-ওয়েট মডেলগুলোতে usage প্রম্পট ক্যাশ থেকে পড়া tokens-কে অন্যান্য ইনপুট tokens থেকে আলাদা করে দেখায়।
{
"usage": {
"input_tokens": 31,
"cache_read_input_tokens": 0,
"cache_creation_input_tokens": 0,
"output_tokens": 62
}
} সিস্টেম প্রম্পট
system হলো একটি স্ট্রিং, অথবা [{"type": "text", "text": "…"}] ফর্মে টেক্সট ব্লকের একটি অ্যারে। ব্লকগুলোর টেক্সট একটি লাইন ব্রেক দিয়ে জোড়া লাগানো হয়।
এটি হোস্টেড ওপেন-ওয়েট মডেল, shannon-1.6-lite, shannon-1.6-pro, shannon-2-lite, shannon-2-pro ও shannon-coder-1 প্রয়োগ করে। Shannon 3 ফ্যামিলির কোনো id-র ক্ষেত্রে, যেসব নির্দেশনা অবশ্যই মানতে হবে তা ইউজার মেসেজে দিন।
মেসেজ ও কনটেন্ট ব্লক
একটি মেসেজে একটি role, user বা assistant, এবং একটি content থাকে। content হলো একটি স্ট্রিং, অথবা ব্লকের একটি অ্যারে।
| ব্লক | বিবরণ | যেখানে পাওয়া যায় |
|---|---|---|
{"type": "text", "text": "…"} | টেক্সট। | সব মডেল |
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": "…"}}{"type": "image", "source": {"type": "url", "url": "…"}} | একটি user মেসেজে একটি ইমেজ, base64 হিসেবে বা URL দিয়ে। | Shannon 3 ফ্যামিলি, shannon-1.6-lite, shannon-1.6-pro, এবং যেসব হোস্টেড ওপেন-ওয়েট মডেল ইমেজ ইনপুট তালিকাভুক্ত করে |
{"type": "document", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} | একটি user মেসেজে একটি ডকুমেন্ট (PDF, Word, PowerPoint বা Excel), base64 হিসেবে বা URL দিয়ে। | Shannon 3 ফ্যামিলি |
{"type": "tool_use", "id": "toolu_…", "name": "…", "input": {…}} | একটি assistant মেসেজে: মডেল আগের একটি উত্তরে যে টুল কল করেছিল। | সব মডেল |
{"type": "tool_result", "tool_use_id": "toolu_…", "content": "…"} | একটি user মেসেজে: সেই কলের ফলাফল। content হলো একটি স্ট্রিং, অথবা টেক্সট ব্লকের একটি তালিকা। | সব মডেল |
আগের একটি উত্তরের content আপনি যেমন আছে তেমনই ফেরত পাঠাতে পারেন: text ও tool_use ব্লক পড়া হয়, thinking ব্লক বাদ দেওয়া হয়।
Shannon টিয়ারগুলোতে ইমেজ ও ডকুমেন্ট শেষ user মেসেজ থেকে পড়া হয়। সাইজ ও লিমিটের জন্য আলাদা পেজ আছে। ইমেজ ও ফাইল
থিংকিং
হোস্টেড ওপেন-ওয়েট মডেলগুলো thinking-কে একটি রিজনিং effort-এ রূপান্তর করে। ফিল্ডটি না দিলে effort হয় high।
| রূপ | budget_tokens | প্রভাব |
|---|---|---|
{"type": "disabled"} | কোনো রিজনিং নেই। উত্তরে কোনো thinking ব্লক থাকে না। | |
{"type": "enabled", "budget_tokens": 2048} | ≤ 2,048 | নিম্ন effort। |
{"type": "enabled", "budget_tokens": 8192} | ≤ 8,192 | মাঝারি effort। |
{"type": "enabled", "budget_tokens": 16000} | > 8,192 | উচ্চ effort। |
যে মডেল রিজনিং করে সে তার রিজনিং টেক্সটের আগে {"type": "thinking", "thinking": "…"} ব্লক হিসেবে ফেরত দেয়। যেসব Shannon টিয়ার রিজনিং করে তারাও এটি পাঠায়।
effort-গুলোর বর্ণনা তাদের নিজস্ব পেজে আছে। রিজনিং effort
টুলস
টুল হলো এমন একটি ফাংশন যা আপনার কোড চালায়। প্রতিটি টুলকে একটি name, একটি description এবং একটি input_schema দিয়ে বর্ণনা করুন। মডেল কোনো টুল চাইলে উত্তরে একটি tool_use ব্লক থাকে এবং stop_reason হয় tool_use।
tools-এ একটি টুল সংজ্ঞা:
[
{
"name": "get_weather",
"description": "Current weather for a city.",
"input_schema": {
"type": "object",
"properties": {
"city": {
"type": "string"
}
},
"required": [
"city"
]
}
}
] যে উত্তর এটি কল করে তার content:
[
{
"type": "text",
"text": ""
},
{
"type": "tool_use",
"id": "toolu_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
"name": "get_weather",
"input": {
"city": "Paris"
}
}
] টুলটি চালান, তারপর কল এবং messages-এ যোগ করা একটি tool_result ব্লক সহ রিকোয়েস্টটি আবার পাঠান:
[
{
"role": "user",
"content": "What is the weather in Paris?"
},
{
"role": "assistant",
"content": [
{
"type": "tool_use",
"id": "toolu_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
"name": "get_weather",
"input": {
"city": "Paris"
}
}
]
},
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
"content": "{\"temperature_c\": 18, \"sky\": \"cloudy\"}"
}
]
}
] tool_choice
| রূপ | প্রভাব | যারা প্রয়োগ করে |
|---|---|---|
{"type": "auto"} | মডেল সিদ্ধান্ত নেয় টুল কল করবে কি না। এটিই ডিফল্ট। | সব মডেল |
{"type": "any"} | মডেলকে অবশ্যই টুলগুলোর একটি কল করতে হবে। | হোস্টেড ওপেন-ওয়েট মডেল |
{"type": "tool", "name": "…"} | মডেলকে অবশ্যই নামকরা টুলটি কল করতে হবে। | হোস্টেড ওপেন-ওয়েট মডেল |
শুধু input_schema আছে এমন টুল পড়া হয়। এই এন্ডপয়েন্টে ওয়েব সার্চ কোনো টুল নয়: web_search ফিল্ড সেট করুন।
টুল লুপের পূর্ণ বর্ণনা তার নিজস্ব পেজে আছে। ফাংশন কলিং
উত্তর
| ফিল্ড | টাইপ | বিবরণ | যে পাঠায় |
|---|---|---|---|
id | string | msg_, তারপর 32টি হেক্সাডেসিমাল অক্ষর। | সব মডেল |
type | string | সবসময় message। | সব মডেল |
role | string | সবসময় assistant। | সব মডেল |
model | string | যে মডেল উত্তর দিয়েছে তার canonical id। | সব মডেল |
content | array | উত্তরের ব্লকগুলো, এই ক্রমে: মডেল রিজনিং করলে thinking, text, তারপর প্রতিটি টুল কলের জন্য একটি tool_use। | সব মডেল |
stop_reason | string | উত্তর কেন শেষ হয়েছে। নিচের মানগুলো দেখুন। | সব মডেল |
usage | object | input_tokens ও output_tokens। | সব মডেল |
sources | array | শুধু সেই রিকোয়েস্টে যাতে web_search: true আছে এবং যার সার্চে কিছু পাওয়া গেছে: মডেলকে দেওয়া ফলাফলগুলো, প্রতিটিতে index, title ও url থাকে। উত্তরের [1] হলো index 1 সহ এন্ট্রি। স্ট্রিমে এটি message_delta ইভেন্টের সঙ্গে আসে। | shannon-1.6-*, shannon-2-*, Shannon 3 ফ্যামিলি |
usage.cache_read_input_tokens | integer | cache_read_input_tokens হলো প্রম্পটের যে অংশ ক্যাশ থেকে পড়া হয়েছে; input_tokens হলো বাকিটা। cache_creation_input_tokens সবসময় 0। | হোস্টেড ওপেন-ওয়েট মডেল |
উত্তরের ব্লক
| ব্লক | বিবরণ |
|---|---|
{"type": "thinking", "thinking": "…"} | মডেলের রিজনিং। এখানে কোনো signature সদস্য নেই। |
{"type": "text", "text": "…"} | উত্তরের টেক্সট। উত্তর যদি কোনো টুল কল হয়, তবে এটি খালি থাকতে পারে। |
{"type": "tool_use", "id": "toolu_…", "name": "…", "input": {…}} | একটি টুল কল। input একটি JSON অবজেক্ট। একই id দিয়ে ফলাফল ফেরত পাঠান। |
stop_reason
| stop_reason | বিবরণ | যে পাঠায় |
|---|---|---|
end_turn | মডেল তার উত্তর শেষ করেছে, অথবা আপনার stop_sequences-এর একটি এসেছে। | সব মডেল |
tool_use | উত্তরে এক বা একাধিক টুল কল আছে। | সব মডেল |
max_tokens | আউটপুট লিমিটে এসে উত্তর কেটে গেছে। | Shannon 3 ফ্যামিলি, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1, স্ট্রিমে |
স্ট্রিমিং
server-sent events পেতে stream true সেট করুন। প্রতিটি ফ্রেমে ইভেন্টের নাম সহ একটি event: লাইন এবং একটি JSON অবজেক্ট সহ একটি data: লাইন থাকে, যা type-এ নামটি পুনরাবৃত্তি করে। Anthropic SDK-র স্ট্রিম হেল্পারগুলো এই ইভেন্টগুলো আপনার জন্য পড়ে:
import anthropic
client = anthropic.Anthropic(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com",
)
with client.messages.stream(
model="shannon-3",
max_tokens=1024,
messages=[{"role": "user", "content": "Explain server-sent events in three sentences."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
message = stream.get_final_message()
print()
print(message.stop_reason, message.usage) import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com",
});
const stream = client.messages.stream({
model: "shannon-3",
max_tokens: 1024,
messages: [{ role: "user", content: "Explain server-sent events in three sentences." }],
});
stream.on("text", (text) => process.stdout.write(text));
const message = await stream.finalMessage();
console.log("\n", message.stop_reason, message.usage); curl -N https://api.shannon-ai.com/v1/messages \
-H "x-api-key: YOUR_API_KEY" \
-H "content-type: application/json" \
-d '{
"model": "shannon-3",
"max_tokens": 1024,
"stream": true,
"messages": [{"role": "user", "content": "Explain server-sent events in three sentences."}]
}' ইভেন্টগুলো, যে ক্রমে আসে:
| ইভেন্ট | ডেটা | কখন |
|---|---|---|
message_start | message | সবসময় প্রথমে। message-এ id, রোল, মডেল, একটি খালি content এবং শূন্য থেকে শুরু হওয়া একটি usage থাকে। |
content_block_start | index, content_block | একটি ব্লক খোলে। content_block হলো একটি খালি text বা thinking ব্লক, অথবা তার id ও name সহ একটি tool_use ব্লক। |
content_block_delta | index, delta {"type": "thinking_delta", "thinking"} | একটি thinking ব্লকের জন্য রিজনিংয়ের একটি অংশ। |
content_block_delta | index, delta {"type": "text_delta", "text"} | একটি text ব্লকের জন্য উত্তরের একটি অংশ। |
content_block_delta | index, delta {"type": "input_json_delta", "partial_json"} | একটি tool_use ব্লকের জন্য টুল কলের আর্গুমেন্ট, একটি ডেল্টায় সম্পূর্ণ। |
content_block_stop | index | এই index-এর ব্লকটি সম্পূর্ণ হয়েছে। |
message_delta | delta {stop_reason, stop_sequence}, usage | উত্তরের শেষ: delta.stop_reason, এবং রিকোয়েস্টের usage। |
message_stop | সবসময় শেষে। |
ব্লকগুলো খোলার ক্রমে index দিয়ে নম্বর করা হয়, এবং একটি ব্লক সম্পূর্ণ হওয়ার পরই পরেরটি খোলে। প্রতিটি ব্লক তার টাইপ দিয়ে পড়ুন, নম্বর দিয়ে নয়: একটি স্ট্রিম প্রথমে একটি খালি text ব্লক খুলতে পারে, তারপর thinking ব্লক, এবং উত্তর পরের একটি text ব্লকে পাঠাতে পারে।
event: message_start
data: {"type":"message_start","message":{"id":"msg_5f0c…","type":"message","role":"assistant","model":"shannon-3","content":[],"usage":{"input_tokens":0,"output_tokens":0}}}
event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}
event: content_block_stop
data: {"type":"content_block_stop","index":0}
event: content_block_start
data: {"type":"content_block_start","index":1,"content_block":{"type":"thinking","thinking":""}}
event: content_block_delta
data: {"type":"content_block_delta","index":1,"delta":{"type":"thinking_delta","thinking":"Three sentences: what it is, how it is framed, why it is used."}}
event: ping
data: {"type": "ping"}
event: content_block_stop
data: {"type":"content_block_stop","index":1}
event: content_block_start
data: {"type":"content_block_start","index":2,"content_block":{"type":"text","text":""}}
event: content_block_delta
data: {"type":"content_block_delta","index":2,"delta":{"type":"text_delta","text":"Server-sent events let a server push text over one HTTP reply."}}
event: content_block_stop
data: {"type":"content_block_stop","index":2}
event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":1190,"output_tokens":84}}
event: message_stop
data: {"type":"message_stop"} কিপ-অ্যালাইভ
| যে পাঠায় | বিবরণ |
|---|---|
Shannon 3 ফ্যামিলি, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | একটি ping ইভেন্ট, ডেটা {"type": "ping"}, প্রতি 15 সেকেন্ডে। |
| হোস্টেড ওপেন-ওয়েট মডেল | একটি কমেন্ট লাইন : keepalive, মডেল কাজ করার সময় প্রতি 15 সেকেন্ডে। |
যে স্ট্রিম ব্যর্থ হয়
স্ট্রিম শুরু হওয়ার পরের ব্যর্থতা হলো একটি error ইভেন্ট, যার বডি এরর উত্তরের বডির মতোই: {"type": "error", "error": {"type", "message"}}। শেষের ইভেন্টগুলো, message_delta ও message_stop, তবুও পরে আসে। উত্তরটি ব্যর্থ হিসেবে ধরুন এবং রিকোয়েস্টটি আবার পাঠান।
এরর
এররে Anthropic এরর বডি ব্যবহৃত হয়: type হলো error, এবং error অবজেক্টে একটি type ও একটি message থাকে। টেবিলে এই এন্ডপয়েন্ট সবচেয়ে বেশি যা রিটার্ন করে তা দেওয়া আছে। কোনটি আবার চেষ্টা করতে হবে সহ সম্পূর্ণ তালিকার জন্য আলাদা পেজ আছে। এরর হ্যান্ডলিং
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "unknown model: no-such-model"
}
} | স্ট্যাটাস | টাইপ | মেসেজ | কখন |
|---|---|---|---|
401 | authentication_error | Missing authenticationInvalid API key | কোনো API key পাঠানো হয়নি, অথবা key অজানা বা বাতিল করা। |
400 | invalid_request_error | unknown model: <id> | model কোনো Shannon মডেল id নয়। |
400 | invalid_request_error | No user message provided | Shannon টিয়ার: রিকোয়েস্টে কোনো ইউজার টেক্সট নেই এবং কোনো tools নেই। |
400 | invalid_request_error | <id> does not accept image input | ইমেজ ইনপুট নেই এমন একটি হোস্টেড ওপেন-ওয়েট মডেলে ইমেজ পাঠানো হয়েছে। |
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-এর বেশি রিকোয়েস্ট। |
429 | rate_limit_error | Shannon Coder call quota reached. Upgrade your plan at shannon-ai.com/plan | shannon-coder-1: বর্তমান 4-ঘণ্টার উইন্ডোর জন্য আপনার প্ল্যানের Shannon Coder কল ব্যবহার হয়ে গেছে। |
500 | server_error | The model backend failed to answer. Please retry. | মডেল কোনো উত্তর তৈরি করেনি। রিকোয়েস্টটি আবার পাঠান। |
502 | api_error | The model backend failed to answer. Please retry. | মডেল কোনো উত্তর তৈরি করেনি। রিকোয়েস্টটি আবার পাঠান। |
Tokens গণনা
POST /v1/messages/count_tokens মেসেজ রিকোয়েস্টের মতো একই বডি (model, system, messages, tools) নেয় এবং {"input_tokens": n} রিটার্ন করে: রিকোয়েস্টটির জন্য যত ইনপুট tokens চার্জ করা হবে তার সংখ্যা। এটি হোস্টেড ওপেন-ওয়েট মডেলগুলোর জন্য গণনা করে, এটি বিনামূল্যে এবং ফ্লাড প্রোটেকশনে গণ্য হয় না।
import anthropic
client = anthropic.Anthropic(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com",
)
count = client.messages.count_tokens(
model="DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
system="You are a physics teacher. Answer in two sentences.",
messages=[{"role": "user", "content": "Why is the sky blue?"}],
)
print(count.input_tokens) import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com",
});
const count = await client.messages.countTokens({
model: "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
system: "You are a physics teacher. Answer in two sentences.",
messages: [{ role: "user", content: "Why is the sky blue?" }],
});
console.log(count.input_tokens); curl https://api.shannon-ai.com/v1/messages/count_tokens \
-H "x-api-key: YOUR_API_KEY" \
-H "content-type: application/json" \
-d '{
"model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
"system": "You are a physics teacher. Answer in two sentences.",
"messages": [{"role": "user", "content": "Why is the sky blue?"}]
}'
# {"input_tokens": 31} গণনার জন্য আলাদা পেজ আছে, যেখানে প্লেইন-টেক্সট এন্ডপয়েন্ট ও লিমিট রয়েছে। Token গণনা