कंटेंट पर जाएँ
टोकन गिनती

टोकन गिनती

किसी टेक्स्ट या पूरे अनुरोध के टोकन भेजने से पहले गिनें।

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"])
200 उत्तर
{
  "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"])
200 उत्तर
{
  "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)
200 उत्तर
{
  "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-REAP
  • GLM-5.2-3BIT-REAP
  • Kimi-K3-3BIT-REAP
  • Nemotron3Ultra-3BIT-REAP
  • MiniMax-M3-3BIT-REAP
  • DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP
  • Kimi-K2.6-W4A16-AUTOROUND-REAP
  • Laguna-S-2.1-W4A16-AUTOROUND-REAP
  • inkling-W4A16-AUTOROUND-REAP
  • MiMo-V2.5-Pro-W8A16
  • MiMo-V2.5-W8A16
  • Hy3-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, जो दोनों रूपों में होते हैं।

400 /v1/tokenize
{
  "error": {
    "type": "invalid_request_error",
    "message": "tokenize is available for the hosted open models; unknown model: shannon-3"
  }
}
400 /v1/messages/count_tokens
{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "count_tokens is available for the hosted open models; unknown model: shannon-3"
  }
}