Թոքենների հաշվարկ
Հաշվեք տեքստի կամ ամբողջ հարցման թոքենները՝ նախքան այն ուղարկելը։
POST https://api.shannon-ai.com/v1/tokenize
POST https://api.shannon-ai.com/v1/messages/count_tokens
Երկու endpoint-ներն էլ հաշվում են ձեր նշած մոդելի tokenizer-ով, և ոչ մի մոդել չի աշխատում։ Դրանք վերաբերում են hosted 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 | Պարտադիր է։ Hosted 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-ները կանչում են այս 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 | Պարտադիր է։ Hosted open-weight մոդելի id (նույնացուցիչ)։ |
messages | array | Պարտադիր է։ Հաղորդագրություններ Anthropic Messages ձևաչափով։ Հաշվվում են text, image, tool_use և tool_result բլոկները։ |
system | string | array | System prompt-ը՝ տող կամ տեքստային բլոկների զանգված։ |
tools | array | Գործիքների սահմանումներ՝ name-ով, description-ով և input_schema-ով։ |
Ընդունվում են համատեղելիության համար, առանց հաշվարկի վրա ազդեցության՝ tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking։ Կարող եք փոխանցել իրական հարցման մարմինն առանց փոփոխության։
Պատասխանը JSON օբյեկտ է հետևյալ դաշտերով.
| Դաշտ | Տեսակ | Նկարագրություն |
|---|---|---|
input_tokens | integer | Ամբողջ մուտքի թոքենները՝ system prompt, հաղորդագրություններ, գործիքներ և պատկերներ։ |
Աջակցվող մոդելներ
Երկու endpoint-ներն էլ հաշվում են hosted 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 օբյեկտից։
Ինչպես է կատարվում հաշվարկը
Յուրաքանչյուր մոդելը հաշվվում է իր սեփական tokenizer-ով և իր սեփական չաթի ձևանմուշով (chat template)։ Նիշերից կամ բառերից կատարված գնահատական չի օգտագործվում։
| Ինչ է հաշվվում | Կանոն |
|---|---|
| Տեքստ | Տողի թոքենները՝ ինչպես ուղարկվել է։ Դատարկ տողը հաշվվում է 0։ |
| Հաղորդագրություններ | Հաղորդագրություններն ու գործիքները դասավորվում են մոդելի սեփական չաթի ձևանմուշով՝ մինչև այն կետը, որտեղ սկսվում է պատասխանը, և այդ ամբողջ prompt-ը հաշվվում է։ |
| Դերեր | Հաշվվում են system, user, assistant և tool հաղորդագրությունները։ developer-ը հաշվվում է որպես system։ Առանց բովանդակության և առանց գործիքի կանչի հաղորդագրությունը ոչինչ չի ավելացնում։ |
| Գործիքի կանչեր և արդյունքներ | Նախորդ assistant փուլերի գործիքի կանչերը և դրանց արդյունքները հաշվարկի մաս են երկու endpoint-ներում էլ։ |
| Պատկերներ | Մարմնի ներսում ուղարկված պատկերը (base64 կամ data: URL) ավելացնում է մեկ թոքեն 28 × 28 պիքսել հատվածի համար՝ ceil(width / 28) × ceil(height / 28)։ http(s) URL-ով տրված պատկերը այս endpoint-ները չեն ներբեռնում, և այն հաշվվում է 1,024։ |
Օրինակ՝ 1,024 × 768 պիքսել պատկերը հաշվվում է ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 թոքեն։
Հաշվարկը և այն, ինչ գանձվում է հարցումից
Ամբողջ հարցման հաշվարկը կատարվում է նույն ձևով, ինչ նույն մոդելով, հաղորդագրություններով և գործիքներով իրական հարցման մուտքի հաշվարկը։ Պատասխանը այդ թիվը հայտնում է որպես usage.prompt_tokens Chat Completions-ում, որպես usage.input_tokens Responses-ում և որպես usage.input_tokens գումարած usage.cache_read_input_tokens Messages-ում։
- Հաշվարկը մուտքն է՝ cached-input զեղչից առաջ։ Իրական հարցումը կարող է այդ մուտքի մի մասը կարդալ cache-ից և այդ մասը գանձել cached գնով։ Հարցման քեշավորում
http(s)URL-ով տրված պատկերն այստեղ հաշվվում է 1,024։ Իրական հարցումը ներբեռնում է պատկերը և հաշվում է այն պիքսելներով իր չափից, ուստի երկու թվերը կարող են տարբերվել։ Պատկերն ուղարկեք base64-ով՝ նույն թիվը ստանալու համար։- Ելքը հաշվարկի մաս չէ։ Իրական հարցման պատասխանը գանձվում է որպես ելքի թոքեններ՝ դրան գումարած, ներառյալ reasoning-ը։
textհաշվարկը չաթի ֆորմատավորում չունի։ Օգտագործեք այն փաստաթուղթը կամ prompt-ի մասը չափելու համար, իսկmessagesձևը՝ հարցումը չափելու համար։
Հաշվարկը ծախսի վերածելու համար բազմապատկեք այն մոդելի մուտքի գնով՝ 1M թոքենի համար։ Մոդելներ և գներ
Սահմաններ
| Սահման | Արժեք | Դրանից բարձր |
|---|---|---|
text-ի երկարությունը | 4,000,000 բայթ (UTF-8) | 413 text too long հաղորդագրությամբ |
| Հարցման մարմին | 32 MiB | 413 |
| Մեկ հարցման համար | Մեկ տեքստ կամ մեկ զրույց | Մի քանի տեքստ հաշվելու համար ուղարկեք մեկ հարցում յուրաքանչյուր տեքստի համար։ |
Հաշվարկի կանչերը չեն հաշվվում րոպեում 120 հարցման սահմանի մեջ։ Սահմանաչափեր և մնացորդ
Սխալներ
| Կարգավիճակ | Տեսակ | Հաղորդագրություն | Երբ |
|---|---|---|---|
400 | invalid_request_error | tokenize is available for the hosted open models; unknown model: <model> | /v1/tokenize այնպիսի model-ով, որը hosted open-weight id չէ։ |
400 | invalid_request_error | count_tokens is available for the hosted open models; unknown model: <model> | /v1/messages/count_tokens այնպիսի model-ով, որը hosted open-weight id չէ, կամ առանց model-ի։ |
400 | invalid_request_error | send `text` or `messages` | /v1/tokenize առանց text-ի և առանց messages-ի։ |
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 content type չունի։ |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | Պարտադիր դաշտը բացակայում է (model /v1/tokenize-ում, messages /v1/messages/count_tokens-ում) կամ դաշտն ունի սխալ տեսակ։ |
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"
}
}