İçeriğe geç
Token sayma

Token sayma

Bir metnin ya da bir isteğin tamamının token'larını göndermeden önce sayın.

POST https://api.shannon-ai.com/v1/tokenize

POST https://api.shannon-ai.com/v1/messages/count_tokens

Her iki uç nokta da adını verdiğiniz modelin tokenizer'ı ile sayar ve hiçbir model çalışmaz. Host edilen açık ağırlıklı modelleri kapsarlar. /v1/tokenize düz bir metni ya da bir Chat Completions konuşmasını alır. /v1/messages/count_tokens, Anthropic Messages biçiminde bir istek alır; Anthropic SDK'sının ve Claude Code'un yaptığı çağrı budur.

Sayım ücretsizdir. Bir çağrı API anahtarınızı gerektirir, bakiyenizden hiçbir şey almaz ve kullanım günlüğünüzde görünmez.

Bir metni sayma

model ve text gönderin. Metin, çevresinde sohbet biçimlendirmesi olmadan, olduğu gibi 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 Yanıt
{
  "model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
  "tokens": 3
}

Bu sayfadaki yanıtlardaki sayılar örnektir. Aynı metin farklı bir modelde farklı bir sayım verir.

Bir sohbet isteğini sayma

model ve messages alanlarını, istekte varsa tools ile birlikte, /v1/chat/completions adresine göndereceğiniz gibi gönderin. Yanıt, girişin tamamının boyutudur.

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 Yanıt
{
  "model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
  "tokens": 164
}

/v1/tokenize alanları

Alan Tür Açıklama
model string Zorunlu. Host edilen açık ağırlıklı bir model kimliği. Büyük ve küçük harf aynı sayılır.
text string Sohbet biçimlendirmesi olmadan, olduğu gibi sayılacak bir metin. En fazla 4,000,000 bayt. text veya messages gönderin; ikisi de varsa text sayılır.
messages array Chat Completions biçiminde sohbet mesajları. Bir isteğin girişinin tamamı olarak sayılırlar: her mesaj, modelin sohbet şablonunun çevresine koyduğu biçimlendirmeyle birlikte.
tools array Sayıma dahil edilecek araç tanımları. messages ile birlikte kullanılır.

Yanıt, şu alanları içeren bir JSON nesnesidir:

Alan Tür Açıklama
model string Sayımın yapıldığı model kimliği, yayımlanmış yazımıyla.
tokens integer text ile: metnin token'ları. messages ile: görseller dahil girişin tamamının token'ları.

Bir Messages isteğini sayma

/v1/messages adresine göndereceğiniz gövdeyi gönderin: model, messages ve kullanıyorsanız system ile tools. Resmi Anthropic SDK'ları bu uç noktayı messages.count_tokens ile ç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 Yanıt
{
  "input_tokens": 21
}

/v1/messages/count_tokens alanları

Alan Tür Açıklama
model string Zorunlu. Host edilen bir açık ağırlıklı model kimliği.
messages array Zorunlu. Anthropic Messages biçiminde mesajlar. text, image, tool_use ve tool_result blokları sayılır.
system string | array Sistem istemi: bir dize ya da metin blokları dizisi.
tools array name, description ve input_schema içeren araç tanımları.

Uyumluluk için kabul edilir, sayıma etkisi yoktur: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. Gerçek bir isteğin gövdesini değiştirmeden verebilirsiniz.

Yanıt, şu alanları içeren bir JSON nesnesidir:

Alan Tür Açıklama
input_tokens integer Girişin tamamının token'ları: sistem istemi, mesajlar, araçlar ve görseller.

Desteklenen modeller

Her iki uç nokta da host edilen açık ağırlıklı modeller için sayar. GET /v1/models, bunları destekleyen her modelin endpoints alanında /v1/tokenize ve /v1/messages/count_tokens uç noktalarını listeler. Shannon kimlikleri dahil, başka herhangi bir model değeri 400 ile yanıtlanı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

Bir Shannon modeli için token sayılarını bir yanıtın usage nesnesinden okuyun.

Sayım nasıl yapılır

Her model kendi tokenizer'ı ve kendi sohbet şablonuyla sayılır. Karakter ya da sözcüklerden yapılan bir tahmin kullanılmaz.

Ne sayılır Kural
Bir metin Dizenin gönderildiği haliyle token'ları. Boş bir dize 0 sayılır.
Mesajlar Mesajlar ve araçlar, yanıtın başladığı noktaya kadar modelin kendi sohbet şablonuyla düzenlenir ve o istemin tamamı sayılır.
Roller system, user, assistant ve tool mesajları sayılır. developer, system olarak sayılır. İçeriği ve araç çağrısı olmayan bir mesaj hiçbir şey eklemez.
Araç çağrıları ve sonuçları Önceki asistan turlarının araç çağrıları ve sonuçları, her iki uç noktada da sayıma dahildir.
Görseller Gövde içinde gönderilen bir görsel (base64 ya da bir data: URL'si) her 28 × 28 piksellik parça için bir token ekler: ceil(width / 28) × ceil(height / 28). Bir http(s) URL'si olarak verilen görsel bu uç noktalar tarafından indirilmez ve 1,024 sayılır.

Örnek: 1,024 × 768 piksellik bir görsel ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 token sayılır.

Sayım ve bir isteğin neyle ücretlendirildiği

Bir isteğin tamamının sayımı, aynı model, mesaj ve araçlarla yapılan gerçek bir isteğin giriş sayımıyla aynı şekilde yapılır. Yanıt bu sayıyı Chat Completions'ta usage.prompt_tokens, Responses'ta usage.input_tokens, Messages'ta ise usage.input_tokens artı usage.cache_read_input_tokens olarak bildirir.

  • Sayım, önbelleğe alınmış giriş indiriminden önceki girişi gösterir. Gerçek bir istek bu girişin bir kısmını önbellekten okuyabilir ve o kısmı önbellek fiyatından faturalandırabilir. İstem önbelleğe alma
  • Bir http(s) URL'si olarak verilen görsel burada 1,024 sayılır. Gerçek bir istek görseli indirir ve piksel boyutundan sayar, bu yüzden iki sayı farklı olabilir. Aynı sayıyı almak için görseli base64 olarak gönderin.
  • Çıktı sayıma dahil değildir. Gerçek bir isteğin yanıtı, akıl yürütme dahil, ayrıca çıktı token'ı olarak faturalandırılır.
  • Bir text sayımında sohbet biçimlendirmesi yoktur. Bir dokümanı ya da bir istem parçasını ölçmek için onu, bir isteği ölçmek için messages biçimini kullanın.

Bir sayımı maliyete çevirmek için onu modelin 1M token başına giriş fiyatıyla çarpın. Modeller ve fiyatlandırma

Sınırlar

Sınır Değer Aşıldığında
text uzunluğu 4,000,000 bayt (UTF-8) text too long mesajıyla 413
İstek gövdesi 32 MiB 413
İstek başına Bir metin ya da bir konuşma Birkaç metni saymak için metin başına bir istek gönderin.

Sayım çağrıları dakikada 120 istek sınırına sayılmaz. Limitler ve bakiye

Hatalar

Durum Tür Mesaj Ne zaman
400 invalid_request_error tokenize is available for the hosted open models; unknown model: <model> Host edilen bir açık ağırlıklı kimlik olmayan bir model ile /v1/tokenize.
400 invalid_request_error count_tokens is available for the hosted open models; unknown model: <model> Host edilen bir açık ağırlıklı kimlik olmayan bir model ile ya da model olmadan /v1/messages/count_tokens.
400 invalid_request_error send `text` or `messages` Ne text ne messages içeren /v1/tokenize.
401 authentication_error Missing authentication / Invalid API key Anahtar gönderilmedi ya da anahtar geçerli değil.
413 invalid_request_error text too long text 4,000,000 bayttan uzun. 32 MiB'tan büyük bir gövde de 413 ile yanıtlanır.
415 invalid_request_error Expected request with `Content-Type: application/json` İstekte JSON içerik türü yok.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Zorunlu bir alan eksik (/v1/tokenize üzerinde model, /v1/messages/count_tokens üzerinde messages) ya da bir alanın türü yanlış.
503 api_error token counting is temporarily unavailable for this model Sayım bu model için şu anda yapılamıyor. Daha sonra yeniden deneyin.

/v1/tokenize hataları OpenAI biçiminde döndürür. /v1/messages/count_tokens üzerinde uç noktanın kendi hataları (model için 400, 503) Anthropic biçiminde, 401, 413, 415 ve 422 ise OpenAI biçiminde gelir. Önce durum kodunu, sonra iki biçimde de bulunan error.type ve error.message alanlarını okuyun.

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