टोकन गिनती
किसी टेक्स्ट या पूरे अनुरोध के टोकन भेजने से पहले गिनें।
POST https://api.shannon-ai.com/v1/tokenize
POST https://api.shannon-ai.com/v1/messages/count_tokens
दोनों endpoints आपके बताए मॉडल के tokenizer से गिनते हैं, और कोई मॉडल नहीं चलता। वे होस्टेड ओपन-वेट मॉडल को कवर करते हैं। /v1/tokenize सादा टेक्स्ट या Chat Completions बातचीत लेता है। /v1/messages/count_tokens Anthropic Messages फ़ॉर्मेट का अनुरोध लेता है, जो वही कॉल है जो Anthropic SDK और Claude Code करते हैं।
गिनती मुफ़्त है। कॉल के लिए आपकी API key चाहिए, वह आपके बैलेंस से कुछ नहीं लेती और आपके 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
} इस पेज के उत्तरों की संख्याएँ उदाहरण हैं। वही टेक्स्ट दूसरे मॉडल पर अलग गिनती देता है।
चैट अनुरोध की गिनती
model और messages भेजें, और अनुरोध में हों तो tools भी, ठीक वैसे जैसे आप उन्हें /v1/chat/completions को भेजते। उत्तर पूरे इनपुट का आकार है।
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 इस endpoint को 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 | पूरे इनपुट के टोकन: सिस्टम प्रॉम्प्ट, संदेश, टूल और इमेज। |
समर्थित मॉडल
दोनों endpoints होस्टेड ओपन-वेट मॉडल के लिए गिनते हैं। 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 ऑब्जेक्ट से पढ़ें।
गिनती कैसे की जाती है
हर मॉडल की गिनती उसके अपने tokenizer और अपने चैट टेम्पलेट से होती है। अक्षरों या शब्दों से लगाया कोई अनुमान इस्तेमाल नहीं होता।
| क्या गिना जाता है | नियम |
|---|---|
| टेक्स्ट | स्ट्रिंग के टोकन जैसी वह भेजी गई। खाली स्ट्रिंग 0 गिनी जाती है। |
| संदेश | संदेश और टूल मॉडल के अपने चैट टेम्पलेट से सजाए जाते हैं, उस बिंदु तक जहाँ उत्तर शुरू होता है, और वह पूरा प्रॉम्प्ट गिना जाता है। |
| रोल | system, user, assistant और tool संदेश गिने जाते हैं। developer को system की तरह गिना जाता है। जिस संदेश में न कंटेंट है न टूल कॉल, वह कुछ नहीं जोड़ता। |
| टूल कॉल और परिणाम | पिछले असिस्टेंट टर्न की टूल कॉल और उनके परिणाम दोनों endpoints पर गिनती का हिस्सा हैं। |
| इमेज | बॉडी के भीतर भेजी गई इमेज (base64 या data: URL) हर 28 × 28 पिक्सेल पैच के लिए एक टोकन जोड़ती है: ceil(width / 28) × ceil(height / 28)। http(s) URL के रूप में दी गई इमेज इन endpoints द्वारा डाउनलोड नहीं की जाती और 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> | ऐसे model के साथ /v1/tokenize जो होस्टेड ओपन-वेट id नहीं है। |
400 | invalid_request_error | count_tokens is available for the hosted open models; unknown model: <model> | ऐसे model के साथ /v1/messages/count_tokens जो होस्टेड ओपन-वेट id नहीं है, या model के बिना। |
400 | invalid_request_error | send `text` or `messages` | text और messages में से किसी के बिना /v1/tokenize। |
401 | authentication_error | Missing authentication / Invalid API key | कोई key नहीं भेजी गई, या 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 पर endpoint के अपने एरर (मॉडल के लिए 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"
}
}