Məzmuna keç
Tokenlərin sayılması

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"])
200 Cavab
{
  "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"])
200 Cavab
{
  "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)
200 Cavab
{
  "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-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 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.
  • text sayında çat formatlaması yoxdur. Onu sənədi və ya prompt hissəsini ölçmək üçün, messages forması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.

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"
  }
}