टोकन मोजणी
मजकुराची किंवा संपूर्ण रिक्वेस्टची टोकन्स ती पाठवण्यापूर्वी मोजा.
POST https://api.shannon-ai.com/v1/tokenize
POST https://api.shannon-ai.com/v1/messages/count_tokens
दोन्ही एंडपॉइंट्स तुम्ही नाव दिलेल्या मॉडेलच्या टोकनायझरने मोजतात, आणि कोणतेही मॉडेल चालत नाही. ते होस्ट केलेल्या open-weight मॉडेल्सना लागू आहेत. /v1/tokenize साधा मजकूर किंवा Chat Completions संभाषण घेते. /v1/messages/count_tokens Anthropic Messages फॉरमॅटमधील रिक्वेस्ट घेते, जो कॉल Anthropic SDK आणि Claude Code करतात.
मोजणी मोफत आहे. कॉलला तुमची API की लागते, तुमच्या बॅलन्समधून काहीही घेतले जात नाही आणि ती तुमच्या वापर लॉगमध्ये दिसत नाही.
मजकूर मोजा
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 | आवश्यक. होस्ट केलेल्या open-weight मॉडेलचा 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 | आवश्यक. होस्ट केलेल्या open-weight मॉडेलचा 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 | संपूर्ण इनपुटची टोकन्स: सिस्टम प्रॉम्प्ट, संदेश, टूल्स आणि इमेज. |
समर्थित मॉडेल्स
दोन्ही एंडपॉइंट्स होस्ट केलेल्या open-weight मॉडेल्ससाठी मोजतात. GET /v1/models ज्या मॉडेल्सना /v1/tokenize आणि /v1/messages/count_tokens चे समर्थन आहे त्यांच्या endpoints मध्ये ते दाखवते. इतर कोणत्याही 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> | होस्ट केलेल्या open-weight id नसलेल्या model सह /v1/tokenize. |
400 | invalid_request_error | count_tokens is available for the hosted open models; unknown model: <model> | होस्ट केलेल्या open-weight 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"
}
}