Počítanie tokenov
Spočítajte tokeny textu alebo celého requestu skôr, než ho pošlete.
POST https://api.shannon-ai.com/v1/tokenize
POST https://api.shannon-ai.com/v1/messages/count_tokens
Oba endpointy počítajú tokenizerom modelu, ktorý uvediete, a nespúšťa sa žiadny model. Pokrývajú hostované open-weight modely. /v1/tokenize berie obyčajný text alebo konverzáciu vo formáte Chat Completions. /v1/messages/count_tokens berie request vo formáte Anthropic Messages, čo je volanie, ktoré robia SDK Anthropic a Claude Code.
Počítanie je zadarmo. Volanie potrebuje váš API kľúč, nič neberie zo zostatku a neobjaví sa vo vašom zázname využitia.
Spočítať text
Pošlite model a text. Text sa počíta tak, ako je, bez chatového formátovania okolo neho.
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
} Čísla v odpovediach na tejto stránke sú príklady. Ten istý text dá na inom modeli iný počet.
Spočítať chatový request
Pošlite model a messages, s tools, keď ich request má, presne tak, ako by ste ich poslali na /v1/chat/completions. Odpoveď je veľkosť celého vstupu.
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
} Polia /v1/tokenize
| Pole | Typ | Popis |
|---|---|---|
model | string | Povinné. Id hostovaného open-weight modelu. Veľké a malé písmená sa berú rovnako. |
text | string | Text na spočítanie tak, ako je, bez chatového formátovania. Do 4,000,000 bajtov. Pošlite text alebo messages; keď sú prítomné oba, počíta sa text. |
messages | array | Chatové správy vo formáte Chat Completions. Počítajú sa ako celý vstup requestu: každá správa s formátovaním, ktoré okolo nej kladie šablóna chatu modelu. |
tools | array | Definície nástrojov, ktoré sa majú zahrnúť do počtu. Používajú sa spolu s messages. |
Odpoveď je objekt JSON s týmito poľami:
| Pole | Typ | Popis |
|---|---|---|
model | string | Id modelu, pre ktorý sa počet urobil, v jeho zverejnenom zápise. |
tokens | integer | S text: tokeny textu. S messages: tokeny celého vstupu, vrátane obrázkov. |
Spočítať request Messages
Pošlite telo, ktoré by ste poslali na /v1/messages: model, messages a system a tools, keď ich používate. Oficiálne SDK Anthropic volajú tento endpoint cez 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
} Polia /v1/messages/count_tokens
| Pole | Typ | Popis |
|---|---|---|
model | string | Povinné. Id hostovaného open-weight modelu. |
messages | array | Povinné. Správy vo formáte Anthropic Messages. Počítajú sa bloky text, image, tool_use a tool_result. |
system | string | array | Systémový prompt: reťazec alebo pole textových blokov. |
tools | array | Definície nástrojov s name, description a input_schema. |
Prijaté kvôli kompatibilite, bez vplyvu na počet: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. Môžete odovzdať telo skutočného requestu bez zmeny.
Odpoveď je objekt JSON s týmito poľami:
| Pole | Typ | Popis |
|---|---|---|
input_tokens | integer | Tokeny celého vstupu: systémový prompt, správy, nástroje a obrázky. |
Podporované modely
Oba endpointy počítajú pre hostované open-weight modely. GET /v1/models uvádza /v1/tokenize a /v1/messages/count_tokens v endpoints každého modelu, ktorý ich podporuje. Na každú inú hodnotu model, vrátane id Shannon, sa odpovie 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
Pri modeli Shannon čítajte počty tokenov z objektu usage v odpovedi.
Ako sa počet robí
Každý model sa počíta vlastným tokenizerom a vlastnou šablónou chatu. Nepoužíva sa žiadny odhad zo znakov ani slov.
| Čo sa počíta | Pravidlo |
|---|---|
| Text | Tokeny reťazca tak, ako bol poslaný. Prázdny reťazec je 0. |
| Správy | Správy a nástroje sa rozložia vlastnou šablónou chatu modelu, až po miesto, kde odpoveď začína, a počíta sa celý tento prompt. |
| Roly | Počítajú sa správy system, user, assistant a tool. developer sa počíta ako system. Správa bez obsahu a bez volania nástroja nepridá nič. |
| Volania nástrojov a výsledky | Volania nástrojov skorších krokov asistenta a ich výsledky sú súčasťou počtu, na oboch endpointoch. |
| Obrázky | Obrázok poslaný vo vnútri tela (base64 alebo URL data:) pridá jeden token na plochu 28 × 28 pixelov: ceil(width / 28) × ceil(height / 28). Obrázok zadaný ako URL http(s) tieto endpointy nesťahujú a počítajú ho ako 1,024. |
Príklad: obrázok 1,024 × 768 pixelov sa počíta ako ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 tokenov.
Počet a čo sa requestu účtuje
Počet celého requestu sa robí rovnako ako počet vstupu skutočného requestu s rovnakým modelom, správami a nástrojmi. Odpoveď hlási toto číslo ako usage.prompt_tokens na Chat Completions, ako usage.input_tokens na Responses a ako usage.input_tokens plus usage.cache_read_input_tokens na Messages.
- Počet je vstup pred zľavou za cachovaný vstup. Skutočný request môže časť tohto vstupu prečítať z cache a túto časť fakturovať za cachovanú sadzbu. Caching promptov
- Obrázok zadaný ako URL
http(s)sa tu počíta ako 1,024. Skutočný request obrázok stiahne a počíta ho z jeho veľkosti v pixeloch, takže sa tieto dve čísla môžu líšiť. Pošlite obrázok ako base64, aby ste dostali rovnaké číslo. - Výstup nie je súčasťou počtu. Odpoveď skutočného requestu sa navyše fakturuje ako výstupné tokeny, vrátane uvažovania.
- Počet
textnemá chatové formátovanie. Použite ho na meranie dokumentu alebo časti promptu a formumessagesna meranie requestu.
Ak chcete premeniť počet na cenu, vynásobte ho vstupnou cenou modelu za 1M tokenov. Modely a ceny
Limity
| Limit | Hodnota | Nad ním |
|---|---|---|
Dĺžka text | 4,000,000 bajtov (UTF-8) | 413 so správou text too long |
| Telo requestu | 32 MiB | 413 |
| Na request | Jeden text alebo jedna konverzácia | Na spočítanie viacerých textov pošlite jeden request na každý text. |
Volania na počítanie sa nezapočítavajú do limitu 120 requestov za minútu. Limity a zostatok
Chyby
| Status | Typ | Správa | Kedy |
|---|---|---|---|
400 | invalid_request_error | tokenize is available for the hosted open models; unknown model: <model> | /v1/tokenize s model, ktorý nie je id hostovaného open-weight modelu. |
400 | invalid_request_error | count_tokens is available for the hosted open models; unknown model: <model> | /v1/messages/count_tokens s model, ktorý nie je id hostovaného open-weight modelu, alebo bez model. |
400 | invalid_request_error | send `text` or `messages` | /v1/tokenize bez text aj bez messages. |
401 | authentication_error | Missing authentication / Invalid API key | Nebol poslaný žiadny kľúč, alebo kľúč nie je platný. |
413 | invalid_request_error | text too long | text je dlhší než 4,000,000 bajtov. Telo nad 32 MiB dostane tiež odpoveď 413. |
415 | invalid_request_error | Expected request with `Content-Type: application/json` | Request nemá typ obsahu JSON. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | Chýba povinné pole (model na /v1/tokenize, messages na /v1/messages/count_tokens) alebo má pole nesprávny typ. |
503 | api_error | token counting is temporarily unavailable for this model | Počet sa pre tento model v tejto chvíli nedá urobiť. Skúste neskôr. |
/v1/tokenize vracia chyby v tvare OpenAI. Na /v1/messages/count_tokens prichádzajú chyby samotného endpointu (400 pre model, 503) v tvare Anthropic a 401, 413, 415 a 422 v tvare OpenAI. Čítajte najprv stavový kód, potom error.type a error.message, ktoré sú prítomné v oboch tvaroch.
{
"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"
}
}