टोकन गणना
टेक्स्ट वा पूरै अनुरोध पठाउनु अघि त्यसका टोकन गन्नुहोस्।
POST https://api.shannon-ai.com/v1/tokenize
POST https://api.shannon-ai.com/v1/messages/count_tokens
दुवै इन्डपोइन्टले तपाईंले नाम दिएको मोडलको टोकनाइजरले गन्छन्, र कुनै मोडल चल्दैन। तिनले होस्ट गरिएका ओपन-वेट मोडलहरूलाई समेट्छन्। /v1/tokenize ले सादा टेक्स्ट वा Chat Completions कुराकानी लिन्छ। /v1/messages/count_tokens ले Anthropic Messages ढाँचामा अनुरोध लिन्छ, जुन Anthropic SDK र Claude Code ले गर्ने कल हो।
गणना निःशुल्क छ। कलका लागि तपाईंको API की चाहिन्छ, तपाईंको ब्यालेन्सबाट केही लिँदैन र तपाईंको usage लगमा देखिँदैन।
टेक्स्ट गन्ने
model र text पठाउनुहोस्। टेक्स्ट वरिपरि च्याट फर्म्याटिङ बिना, जस्ताको तस्तै गनिन्छ।
import requests
response = requests.post(
"https://api.shannon-ai.com/v1/tokenize",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
"text": "Hello, world",
},
)
print(response.json()["tokens"]) const response = await fetch("https://api.shannon-ai.com/v1/tokenize", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
text: "Hello, world",
}),
});
const { tokens } = await response.json();
console.log(tokens); curl https://api.shannon-ai.com/v1/tokenize \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
"text": "Hello, world"
}' {
"model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
"tokens": 3
} यो पेजका जवाफहरूमा भएका संख्याहरू उदाहरण हुन्। उही टेक्स्टले फरक मोडलमा फरक गणना दिन्छ।
च्याट अनुरोध गन्ने
/v1/chat/completions मा जसरी पठाउनुहुन्छ त्यसै गरी model र messages पठाउनुहोस्, अनुरोधमा tools भए तिनीसहित। जवाफ पूरै इनपुटको आकार हो।
import requests
request = {
"model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
"messages": [
{"role": "system", "content": "You are a concise assistant."},
{"role": "user", "content": "What is the weather in Paris?"},
],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Current weather for a city",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}
],
}
response = requests.post(
"https://api.shannon-ai.com/v1/tokenize",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json=request,
)
print(response.json()["tokens"]) const request = {
model: "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
messages: [
{ role: "system", content: "You are a concise assistant." },
{ role: "user", content: "What is the weather in Paris?" },
],
tools: [
{
type: "function",
function: {
name: "get_weather",
description: "Current weather for a city",
parameters: {
type: "object",
properties: { city: { type: "string" } },
required: ["city"],
},
},
},
],
};
const response = await fetch("https://api.shannon-ai.com/v1/tokenize", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify(request),
});
const { tokens } = await response.json();
console.log(tokens); curl https://api.shannon-ai.com/v1/tokenize \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
"messages": [
{"role": "system", "content": "You are a concise assistant."},
{"role": "user", "content": "What is the weather in Paris?"}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Current weather for a city",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]
}
}
}
]
}' {
"model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
"tokens": 164
} /v1/tokenize का फिल्डहरू
| फिल्ड | प्रकार | विवरण |
|---|---|---|
model | string | आवश्यक। होस्ट गरिएको ओपन-वेट मोडल id। ठूलो र सानो अक्षरलाई उस्तै मानिन्छ। |
text | string | च्याट फर्म्याटिङ बिना, जस्ताको तस्तै गन्नुपर्ने टेक्स्ट। 4,000,000 बाइटसम्म। text वा messages पठाउनुहोस्; दुवै भएमा text गनिन्छ। |
messages | array | Chat Completions ढाँचामा च्याट सन्देशहरू। तिनीहरू अनुरोधको पूरा इनपुटका रूपमा गनिन्छन्: हरेक सन्देश मोडलको च्याट टेम्प्लेटले यसवरिपरि राख्ने फर्म्याटिङसहित। |
tools | array | गणनामा समावेश गर्नुपर्ने टुल परिभाषाहरू। messages सँगै प्रयोग गरिन्छ। |
जवाफ यी फिल्डहरू भएको JSON अब्जेक्ट हो:
| फिल्ड | प्रकार | विवरण |
|---|---|---|
model | string | गणना जसका लागि गरिएको हो त्यो मोडल id, यसको प्रकाशित हिज्जेमा। |
tokens | integer | text सँग: टेक्स्टका टोकन। messages सँग: छविहरू सहित पूरै इनपुटका टोकन। |
Messages अनुरोध गन्ने
/v1/messages मा पठाउने बडी पठाउनुहोस्: model, messages, र प्रयोग गर्दा system र tools। आधिकारिक Anthropic SDK हरूले यो इन्डपोइन्ट messages.count_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 concise assistant.",
messages=[
{"role": "user", "content": "Summarise the attached report."}
],
)
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 concise assistant.",
messages: [
{ role: "user", content: "Summarise the attached report." },
],
});
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 concise assistant.",
"messages": [
{"role": "user", "content": "Summarise the attached report."}
]
}' {
"input_tokens": 21
} /v1/messages/count_tokens इन्डपोइन्टका फिल्डहरू
| फिल्ड | प्रकार | विवरण |
|---|---|---|
model | string | आवश्यक। होस्ट गरिएको ओपन-वेट मोडल id। |
messages | array | आवश्यक। Anthropic Messages ढाँचामा सन्देशहरू। text, image, tool_use र tool_result ब्लकहरू गनिन्छन्। |
system | string | array | सिस्टम प्रम्प्ट: स्ट्रिङ वा टेक्स्ट ब्लकहरूको एरे। |
tools | array | name, description र input_schema सहितका टुल परिभाषाहरू। |
अनुकूलताका लागि स्वीकार गरिन्छ, गणनामा असर नपारी: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking। तपाईं वास्तविक अनुरोधको बडी बिना परिवर्तन पठाउन सक्नुहुन्छ।
जवाफ यी फिल्डहरू भएको JSON अब्जेक्ट हो:
| फिल्ड | प्रकार | विवरण |
|---|---|---|
input_tokens | integer | पूरै इनपुटका टोकन: सिस्टम प्रम्प्ट, सन्देश, टुल र छविहरू। |
समर्थित मोडलहरू
दुवै इन्डपोइन्टले होस्ट गरिएका ओपन-वेट मोडलहरूका लागि गन्छन्। GET /v1/models ले तिनलाई समर्थन गर्ने हरेक मोडलको endpoints मा /v1/tokenize र /v1/messages/count_tokens सूचीबद्ध गर्छ। अरू कुनै पनि model मान, Shannon id हरू सहित, लाई 400 सहित जवाफ दिइन्छ।
DeepSeek-V4-Pro-0813-3BIT-REAPGLM-5.2-3BIT-REAPKimi-K3-3BIT-REAPNemotron3Ultra-3BIT-REAPMiniMax-M3-3BIT-REAPDeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAPKimi-K2.6-W4A16-AUTOROUND-REAPLaguna-S-2.1-W4A16-AUTOROUND-REAPinkling-W4A16-AUTOROUND-REAPMiMo-V2.5-Pro-W8A16MiMo-V2.5-W8A16Hy3-W8A16
Shannon मोडलका लागि, जवाफको usage अब्जेक्टबाट टोकन गणना पढ्नुहोस्।
गणना कसरी गरिन्छ
हरेक मोडल आफ्नै टोकनाइजर र आफ्नै च्याट टेम्प्लेटले गनिन्छ। अक्षर वा शब्दबाट गरिएको कुनै अनुमान प्रयोग गरिँदैन।
| के गनिन्छ | नियम |
|---|---|
| टेक्स्ट | पठाइएझैं स्ट्रिङका टोकन। खाली स्ट्रिङ 0 गनिन्छ। |
| सन्देशहरू | सन्देश र टुलहरू जवाफ सुरु हुने बिन्दुसम्म मोडलको आफ्नै च्याट टेम्प्लेटले सजाइन्छन्, र त्यो पूरै प्रम्प्ट गनिन्छ। |
| भूमिकाहरू | system, user, assistant र tool सन्देशहरू गनिन्छन्। developer लाई system का रूपमा गनिन्छ। सामग्री र टुल कल दुवै नभएको सन्देशले केही थप्दैन। |
| टुल कल र नतिजाहरू | अघिल्ला असिस्टेन्ट टर्नका टुल कल र तिनका नतिजा दुवै इन्डपोइन्टमा गणनाको भाग हुन्छन्। |
| छविहरू | बडीभित्र (base64 वा data: URL) पठाइएको छविले हरेक 28 × 28 पिक्सेल प्याचको एक टोकन थप्छ: ceil(width / 28) × ceil(height / 28)। http(s) URL का रूपमा दिइएको छवि यी इन्डपोइन्टहरूले डाउनलोड गर्दैनन् र 1,024 गनिन्छ। |
उदाहरण: 1,024 × 768 पिक्सेलको छवि ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 टोकन गनिन्छ।
गणना र अनुरोधमा के शुल्क लाग्छ
पूरै अनुरोधको गणना उही मोडल, सन्देश र टुलसहितको वास्तविक अनुरोधको इनपुट गणनाजस्तै गरी गरिन्छ। जवाफले त्यो संख्यालाई Chat Completions मा usage.prompt_tokens, Responses मा usage.input_tokens, र Messages मा usage.input_tokens जोड usage.cache_read_input_tokens का रूपमा रिपोर्ट गर्छ।
- गणना क्याश्ड-इनपुट छुटभन्दा अघिको इनपुट हो। वास्तविक अनुरोधले त्यो इनपुटको केही भाग क्याशबाट पढ्न सक्छ र त्यो भागलाई क्याश्ड दरमा बिल गर्न सक्छ। प्रम्प्ट क्याशिङ
http(s)URL का रूपमा दिइएको छवि यहाँ 1,024 गनिन्छ। वास्तविक अनुरोधले छवि डाउनलोड गर्छ र पिक्सेलमा यसको आकारबाट गन्छ, त्यसैले दुई संख्या फरक हुन सक्छन्। उही संख्या पाउन छवि base64 मा पठाउनुहोस्।- आउटपुट गणनाको भाग होइन। वास्तविक अनुरोधको जवाफ, रिजनिङसहित, माथिबाट आउटपुट टोकनका रूपमा बिल हुन्छ।
textगणनामा च्याट फर्म्याटिङ हुँदैन। कागजात वा प्रम्प्टको भाग नाप्न यसलाई प्रयोग गर्नुहोस्, र अनुरोध नाप्नmessagesरूप।
गणनालाई लागतमा बदल्न, यसलाई मोडलको प्रति 1M टोकन इनपुट मूल्यले गुणा गर्नुहोस्। मोडल र मूल्य
सीमाहरू
| सीमा | मान | यसभन्दा माथि |
|---|---|---|
text को लम्बाइ | 4,000,000 बाइट (UTF-8) | text too long सन्देशसहित 413 |
| अनुरोध बडी | 32 MiB | 413 |
| प्रति अनुरोध | एउटा टेक्स्ट वा एउटा कुराकानी | धेरै टेक्स्ट गन्न प्रत्येक टेक्स्टका लागि एउटा अनुरोध पठाउनुहोस्। |
गणना कलहरू प्रति मिनेट 120 अनुरोधको सीमामा गनिँदैनन्। सीमा र ब्यालेन्स
त्रुटिहरू
| स्टेटस | प्रकार | सन्देश | कहिले |
|---|---|---|---|
400 | invalid_request_error | tokenize is available for the hosted open models; unknown model: <model> | होस्ट गरिएको ओपन-वेट id नभएको model सहित /v1/tokenize। |
400 | invalid_request_error | count_tokens is available for the hosted open models; unknown model: <model> | होस्ट गरिएको ओपन-वेट id नभएको model सहित, वा model बिना /v1/messages/count_tokens। |
400 | invalid_request_error | send `text` or `messages` | text र messages कुनै पनि नभएको /v1/tokenize। |
401 | authentication_error | Missing authentication / Invalid API key | कुनै की पठाइएन, वा की मान्य छैन। |
413 | invalid_request_error | text too long | text 4,000,000 बाइटभन्दा लामो छ। 32 MiB भन्दा ठूलो बडीलाई पनि 413 सहित जवाफ दिइन्छ। |
415 | invalid_request_error | Expected request with `Content-Type: application/json` | अनुरोधमा JSON कन्टेन्ट प्रकार छैन। |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | आवश्यक फिल्ड हराएको छ (/v1/tokenize मा model, /v1/messages/count_tokens मा messages) वा फिल्डको प्रकार गलत छ। |
503 | api_error | token counting is temporarily unavailable for this model | यस क्षण यो मोडलका लागि गणना गर्न सकिँदैन। पछि फेरि प्रयास गर्नुहोस्। |
/v1/tokenize ले OpenAI आकारमा त्रुटि फर्काउँछ। /v1/messages/count_tokens मा इन्डपोइन्टकै आफ्ना त्रुटिहरू (मोडलका लागि 400, 503) Anthropic आकारमा आउँछन्, र 401, 413, 415 र 422 OpenAI आकारमा आउँछन्। पहिले स्टेटस कोड पढ्नुहोस्, त्यसपछि error.type र error.message, जुन दुवै आकारमा हुन्छन्।
{
"error": {
"type": "invalid_request_error",
"message": "tokenize is available for the hosted open models; unknown model: shannon-3"
}
} {
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "count_tokens is available for the hosted open models; unknown model: shannon-3"
}
}