Tokenlərin sayılması
Mətnin və ya bütöv sorğunun tokenlərini göndərməzdən əvvəl sayın.
POST https://api.shannon-ai.com/v1/tokenize
POST https://api.shannon-ai.com/v1/messages/count_tokens
Hər iki endpoint adını verdiyiniz modelin tokenizer-i ilə sayır və heç bir model işləmir. Onlar host edilən açıq çəkili modelləri əhatə edir. /v1/tokenize sadə mətni və ya Chat Completions söhbətini qəbul edir. /v1/messages/count_tokens Anthropic Messages formatında sorğu qəbul edir, yəni Anthropic SDK və Claude Code-un etdiyi çağırışı.
Say pulsuzdur. Çağırış API açarınızı tələb edir, balansınızdan heç nə götürmür və istifadə jurnalınızda görünmür.
Mətni sayın
model və text göndərin. Mətn ətrafında çat formatlaması olmadan olduğu kimi sayılır.
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
} Bu səhifədəki cavablardakı ədədlər nümunədir. Eyni mətn başqa modeldə fərqli say verir.
Çat sorğusunu sayın
model və messages-i, sorğuda varsa tools ilə birlikdə, /v1/chat/completions-a göndərdiyiniz kimi göndərin. Cavab bütün girişin ölçüsüdür.
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 sahələri
| Sahə | Tip | Təsvir |
|---|---|---|
model | string | Məcburidir. Host edilən açıq çəkili model id-si. Böyük və kiçik hərf eyni sayılır. |
text | string | Çat formatlaması olmadan olduğu kimi sayılacaq mətn. 4,000,000 bayta qədər. text və ya messages göndərin; ikisi də olduqda text sayılır. |
messages | array | Chat Completions formatında çat mesajları. Onlar sorğunun tam girişi kimi sayılır: hər mesaj modelin çat şablonunun onun ətrafına qoyduğu formatlama ilə. |
tools | array | Saya daxil ediləcək alət tərifləri. messages ilə birlikdə istifadə olunur. |
Cavab bu sahələri olan JSON obyektidir:
| Sahə | Tip | Təsvir |
|---|---|---|
model | string | Sayın aparıldığı model id-si, dərc edilmiş yazılışda. |
tokens | integer | text ilə: mətnin tokenləri. messages ilə: təsvirlər daxil olmaqla bütün girişin tokenləri. |
Messages sorğusunu sayın
/v1/messages-ə göndərəcəyiniz gövdəni göndərin: model, messages və istifadə etdikdə system və tools. Rəsmi Anthropic SDK-ları bu endpoint-i messages.count_tokens ilə çağırır.
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 sahələri
| Sahə | Tip | Təsvir |
|---|---|---|
model | string | Məcburidir. Host edilən açıq çəkili model id-si. |
messages | array | Məcburidir. Anthropic Messages formatında mesajlar. text, image, tool_use və tool_result blokları sayılır. |
system | string | array | System prompt: sətir və ya mətn blokları massivi. |
tools | array | name, description və input_schema olan alət tərifləri. |
Uyğunluq üçün qəbul edilir, sayma təsiri yoxdur: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. Real sorğunun gövdəsini dəyişmədən verə bilərsiniz.
Cavab bu sahələri olan JSON obyektidir:
| Sahə | Tip | Təsvir |
|---|---|---|
input_tokens | integer | Bütün girişin tokenləri: system prompt, mesajlar, alətlər və təsvirlər. |
Dəstəklənən modellər
Hər iki endpoint host edilən açıq çəkili modellər üçün sayır. GET /v1/models onları dəstəkləyən hər modelin endpoints-ində /v1/tokenize və /v1/messages/count_tokens-i siyahıya alır. Hər digər model dəyəri, Shannon id-ləri daxil olmaqla, 400 ilə cavablandırılır.
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 modeli üçün token saylarını cavabın usage obyektindən oxuyun.
Say necə aparılır
Hər model öz tokenizer-i və öz çat şablonu ilə sayılır. Simvol və ya sözlərdən təxmin istifadə olunmur.
| Nə sayılır | Qayda |
|---|---|
| Mətn | Sətrin göndərildiyi kimi tokenləri. Boş sətir 0 sayılır. |
| Mesajlar | Mesajlar və alətlər cavabın başladığı nöqtəyə qədər modelin öz çat şablonu ilə düzülür və bütün həmin prompt sayılır. |
| Rollar | system, user, assistant və tool mesajları sayılır. developer system kimi sayılır. Məzmunu və alət çağırışı olmayan mesaj heç nə əlavə etmir. |
| Alət çağırışları və nəticələr | Əvvəlki assistant növbələrinin alət çağırışları və onların nəticələri hər iki endpoint-də saya daxildir. |
| Təsvirlər | Gövdənin içində göndərilən təsvir (base64 və ya data: URL) hər 28 × 28 piksellik parça üçün bir token əlavə edir: ceil(width / 28) × ceil(height / 28). http(s) URL kimi verilən təsviri bu endpoint-lər yükləmir və 1,024 sayır. |
Nümunə: 1,024 × 768 piksellik təsvir ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 token sayılır.
Say və sorğunun nə ilə hesablandığı
Bütöv sorğunun sayı eyni model, mesajlar və alətlərlə real sorğunun giriş sayı ilə eyni qaydada aparılır. Cavab bu ədədi Chat Completions-da usage.prompt_tokens, Responses-da usage.input_tokens, Messages-də isə usage.input_tokens plus usage.cache_read_input_tokens kimi bildirir.
- Say keşlənmiş giriş endirimindən əvvəlki girişdir. Real sorğu həmin girişin bir hissəsini keşdən oxuya və o hissəni keşlənmiş tarifdə hesablaya bilər. Prompt keşləmə
http(s)URL kimi verilən təsvir burada 1,024 sayılır. Real sorğu təsviri yükləyir və piksel ölçüsünə görə sayır, ona görə iki ədəd fərqli ola bilər. Eyni ədədi almaq üçün təsviri base64 kimi göndərin.- Çıxış sayın tərkibinə daxil deyil. Real sorğunun cavabı üstəlik, reasoning daxil olmaqla, çıxış tokenləri kimi hesablanır.
textsayında çat formatlaması yoxdur. Onu sənədi və ya prompt hissəsini ölçmək üçün,messagesformasını isə sorğunu ölçmək üçün istifadə edin.
Sayı xərcə çevirmək üçün onu modelin 1M token üçün giriş qiymətinə vurun. Modellər və qiymətlər
Limitlər
| Limit | Dəyər | Ondan yuxarı |
|---|---|---|
text uzunluğu | 4,000,000 bayt (UTF-8) | text too long mesajı ilə 413 |
| Sorğu gövdəsi | 32 MiB | 413 |
| Hər sorğuya | Bir mətn və ya bir söhbət | Bir neçə mətni saymaq üçün hər mətn üçün ayrıca sorğu göndərin. |
Say çağırışları dəqiqədə 120 sorğu limitinə sayılmır. Limitlər və balans
Xətalar
| Status | Tip | Mesaj | Nə vaxt |
|---|---|---|---|
400 | invalid_request_error | tokenize is available for the hosted open models; unknown model: <model> | Host edilən açıq çəkili id olmayan model ilə /v1/tokenize. |
400 | invalid_request_error | count_tokens is available for the hosted open models; unknown model: <model> | Host edilən açıq çəkili id olmayan model ilə və ya model-siz /v1/messages/count_tokens. |
400 | invalid_request_error | send `text` or `messages` | Nə text, nə messages olmadan /v1/tokenize. |
401 | authentication_error | Missing authentication / Invalid API key | Açar göndərilməyib və ya açar etibarlı deyil. |
413 | invalid_request_error | text too long | text 4,000,000 baytdan uzundur. 32 MiB-dan böyük gövdə də 413 ilə cavablandırılır. |
415 | invalid_request_error | Expected request with `Content-Type: application/json` | Sorğuda JSON məzmun tipi yoxdur. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | Məcburi sahə yoxdur (/v1/tokenize-də model, /v1/messages/count_tokens-də messages) və ya sahənin tipi yanlışdır. |
503 | api_error | token counting is temporarily unavailable for this model | Hazırda bu model üçün say aparıla bilmir. Sonra yenidən cəhd edin. |
/v1/tokenize xətaları OpenAI formasında qaytarır. /v1/messages/count_tokens-də endpoint-in öz xətaları (model üçün 400, 503) Anthropic formasında, 401, 413, 415 və 422 isə OpenAI formasında gəlir. Əvvəlcə status kodunu, sonra hər iki formada olan error.type və error.message-i oxuyun.
{
"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"
}
}