Kalo te përmbajtja
Numërimi i tokens-ave

Numërimi i tokens-ave

Numëroni tokens-at e një teksti ose të një kërkese të tërë para se ta dërgoni.

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

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

Të dy endpoint-et numërojnë me tokenizuesin e modelit që emërtoni, dhe nuk ekzekutohet asnjë model. Mbulojnë modelet open-weight të hostuara. /v1/tokenize pranon një tekst të thjeshtë ose një bisedë Chat Completions. /v1/messages/count_tokens pranon një kërkesë në formatin Anthropic Messages, që është thirrja që bëjnë SDK-ja Anthropic dhe Claude Code.

Numërimi është falas. Një thirrje kërkon çelësin tuaj API, nuk merr asgjë nga bilanci juaj dhe nuk shfaqet në regjistrin tuaj të përdorimit.

Numëroni një tekst

Dërgoni model dhe text. Teksti numërohet siç është, pa formatim bisede rreth tij.

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 Përgjigjja
{
  "model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
  "tokens": 3
}

Numrat në përgjigjet e kësaj faqeje janë shembuj. I njëjti tekst jep një numërim tjetër në një model tjetër.

Numëroni një kërkesë bisede

Dërgoni model dhe messages, me tools kur kërkesa i ka, saktësisht siç do t'i dërgonit te /v1/chat/completions. Përgjigjja është madhësia e gjithë hyrjes.

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 Përgjigjja
{
  "model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
  "tokens": 164
}

Fushat e /v1/tokenize

Fusha Lloji Përshkrimi
model string E detyrueshme. Një id modeli open-weight i hostuar. Shkronjat e mëdha dhe të vogla trajtohen njësoj.
text string Një tekst që numërohet siç është, pa formatim bisede. Deri në 4,000,000 bajte. Dërgoni text ose messages; kur janë të dyja të pranishme, numërohet text.
messages array Mesazhe bisede në formatin Chat Completions. Numërohen si hyrja e plotë e një kërkese: çdo mesazh me formatimin që shablloni i bisedës së modelit vendos rreth tij.
tools array Përkufizime mjetesh që përfshihen në numërim. Përdoret së bashku me messages.

Përgjigjja është një objekt JSON me këto fusha:

Fusha Lloji Përshkrimi
model string Id-ja e modelit për të cilin u bë numërimi, në shkrimin e saj të publikuar.
tokens integer Me text: tokens-at e tekstit. Me messages: tokens-at e gjithë hyrjes, imazhet e përfshira.

Numëroni një kërkesë Messages

Dërgoni trupin që do t'i dërgonit te /v1/messages: model, messages, dhe system e tools kur i përdorni. SDK-të zyrtare Anthropic e thërrasin këtë endpoint përmes 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)
200 Përgjigjja
{
  "input_tokens": 21
}

Fushat e /v1/messages/count_tokens

Fusha Lloji Përshkrimi
model string E detyrueshme. Një id modeli open-weight i hostuar.
messages array E detyrueshme. Mesazhe në formatin Anthropic Messages. Numërohen blloqet text, image, tool_use dhe tool_result.
system string | array System prompt-i: një string ose një varg blloqesh teksti.
tools array Përkufizime mjetesh me name, description dhe input_schema.

Pranohen për pajtueshmëri, pa efekt në numërim: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. Mund ta kaloni të pandryshuar trupin e një kërkese të vërtetë.

Përgjigjja është një objekt JSON me këto fusha:

Fusha Lloji Përshkrimi
input_tokens integer Tokens-at e gjithë hyrjes: system prompt-i, mesazhet, mjetet dhe imazhet.

Modelet e mbështetura

Të dy endpoint-et numërojnë për modelet open-weight të hostuara. GET /v1/models liston /v1/tokenize dhe /v1/messages/count_tokens te endpoints të çdo modeli që i mbështet. Çdo vlerë tjetër model, përfshirë id-të Shannon, merr përgjigje 400.

  • 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

Për një model Shannon, lexoni numërimet e tokens-ave nga objekti usage i një përgjigjeje.

Si bëhet numërimi

Çdo model numërohet me tokenizuesin e vet dhe shabllonin e vet të bisedës. Nuk përdoret asnjë vlerësim nga shkronjat ose fjalët.

Çfarë numërohet Rregulli
Një tekst Tokens-at e stringut siç dërgohet. Një string bosh numëron 0.
Mesazhet Mesazhet dhe mjetet vendosen me shabllonin e vetë modelit të bisedës, deri te pika ku fillon përgjigjja, dhe i gjithë ai prompt numërohet.
Rolet Numërohen mesazhet system, user, assistant dhe tool. developer numërohet si system. Një mesazh pa përmbajtje dhe pa thirrje mjeti nuk shton asgjë.
Thirrjet e mjeteve dhe rezultatet Thirrjet e mjeteve të radhëve të mëparshme të assistant dhe rezultatet e tyre janë pjesë e numërimit, në të dy endpoint-et.
Imazhet Një imazh i dërguar brenda trupit (base64 ose URL data:) shton një token për çdo copë 28 × 28 pikselë: ceil(width / 28) × ceil(height / 28). Një imazh i dhënë si URL http(s) nuk shkarkohet nga këta endpoint-e dhe numëron 1,024.

Shembull: një imazh 1,024 × 768 pikselë numëron ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 tokens.

Numërimi dhe çfarë faturohet një kërkesë

Numërimi i një kërkese të tërë bëhet në të njëjtën mënyrë si numërimi i hyrjes së një kërkese të vërtetë me të njëjtin model, mesazhe dhe mjete. Një përgjigje e raporton atë numër si usage.prompt_tokens te Chat Completions, si usage.input_tokens te Responses, dhe si usage.input_tokens plus usage.cache_read_input_tokens te Messages.

  • Numërimi është hyrja para uljes për hyrjen e ruajtur në cache. Një kërkesë e vërtetë mund të lexojë një pjesë të asaj hyrjeje nga cache-i dhe ta faturojë atë pjesë me tarifën e cache-it. Caching i prompt-it
  • Një imazh i dhënë si URL http(s) numëron 1,024 këtu. Një kërkesë e vërtetë e shkarkon imazhin dhe e numëron sipas madhësisë së tij në pikselë, prandaj dy numrat mund të ndryshojnë. Dërgojeni imazhin si base64 për të marrë të njëjtin numër.
  • Dalja nuk është pjesë e numërimit. Përgjigjja e një kërkese të vërtetë faturohet si tokens dalje përveç kësaj, arsyetimi i përfshirë.
  • Një numërim text nuk ka formatim bisede. Përdoreni për të matur një dokument ose një pjesë prompt-i, dhe formën messages për të matur një kërkesë.

Për ta kthyer një numërim në kosto, shumëzojeni me çmimin e hyrjes së modelit për 1M tokens. Modelet dhe çmimet

Kufijtë

Kufiri Vlera Mbi të
Gjatësia e text 4,000,000 bajte (UTF-8) 413 me mesazhin text too long
Trupi i kërkesës 32 MiB 413
Për kërkesë Një tekst ose një bisedë Dërgoni një kërkesë për tekst për të numëruar disa tekste.

Thirrjet e numërimit nuk numërohen te kufiri prej 120 kërkesash në minutë. Kufijtë dhe bilanci

Gabimet

Statusi Lloji Mesazhi Kur
400 invalid_request_error tokenize is available for the hosted open models; unknown model: <model> /v1/tokenize me një model që nuk është id open-weight e hostuar.
400 invalid_request_error count_tokens is available for the hosted open models; unknown model: <model> /v1/messages/count_tokens me një model që nuk është id open-weight e hostuar, ose pa model.
400 invalid_request_error send `text` or `messages` /v1/tokenize pa text dhe pa messages.
401 authentication_error Missing authentication / Invalid API key Nuk u dërgua çelës, ose çelësi nuk është i vlefshëm.
413 invalid_request_error text too long text është më i gjatë se 4,000,000 bajte. Një trup mbi 32 MiB merr gjithashtu përgjigje 413.
415 invalid_request_error Expected request with `Content-Type: application/json` Kërkesa nuk ka lloj përmbajtjeje JSON.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Mungon një fushë e detyrueshme (model te /v1/tokenize, messages te /v1/messages/count_tokens) ose një fushë ka lloj të gabuar.
503 api_error token counting is temporarily unavailable for this model Numërimi nuk mund të bëhet për këtë model për momentin. Provoni përsëri më vonë.

/v1/tokenize i kthen gabimet në formën OpenAI. Në /v1/messages/count_tokens gabimet e vetë endpoint-it (400 për modelin, 503) vijnë në formën Anthropic, dhe 401, 413, 415 e 422 vijnë në formën OpenAI. Lexoni fillimisht kodin e statusit, pastaj error.type dhe error.message, që janë të pranishme në të dyja format.

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