Počítání tokenů
Spočítejte tokeny textu nebo celého požadavku dřív, než jej pošlete.
POST https://api.shannon-ai.com/v1/tokenize
POST https://api.shannon-ai.com/v1/messages/count_tokens
Oba endpointy počítají tokenizerem modelu, který pojmenujete, a žádný model neběží. Pokrývají hostované modely s otevřenými váhami. /v1/tokenize přijímá prostý text nebo konverzaci ve formátu Chat Completions. /v1/messages/count_tokens přijímá požadavek ve formátu Anthropic Messages, což je volání, které provádí SDK Anthropic a Claude Code.
Počítání je zdarma. Volání potřebuje váš klíč API, nic neodebírá ze zůstatku a neobjeví se v protokolu využití.
Počítání textu
Pošlete model a text. Text se počítá tak, jak je, bez chatového formátování kolem něj.
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 odpovědích na této stránce jsou příklady. Stejný text dává u jiného modelu jiný počet.
Počítání chatového požadavku
Pošlete model a messages, s tools, pokud je požadavek má, přesně tak, jak byste je poslali na /v1/chat/completions. Odpověď je velikost 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
} Pole /v1/tokenize
| Pole | Typ | Popis |
|---|---|---|
model | string | Povinné. Id hostovaného modelu s otevřenými váhami. Velká a malá písmena se berou stejně. |
text | string | Text, který se počítá tak, jak je, bez chatového formátování. Až 4,000,000 bajtů. Pošlete text nebo messages; když jsou přítomny obě, počítá se text. |
messages | array | Chatové zprávy ve formátu Chat Completions. Počítají se jako celý vstup požadavku: každá zpráva s formátováním, které kolem ní vloží chatová šablona modelu. |
tools | array | Definice nástrojů, které se mají zahrnout do počtu. Používají se spolu s messages. |
Odpověď je objekt JSON s těmito poli:
| Pole | Typ | Popis |
|---|---|---|
model | string | Id modelu, pro který se počítalo, ve zveřejněném zápisu. |
tokens | integer | U text: tokeny textu. U messages: tokeny celého vstupu, včetně obrázků. |
Počítání požadavku Messages
Pošlete tělo, které byste poslali na /v1/messages: model, messages a system a tools, pokud je používáte. Oficiální SDK Anthropic volají tento endpoint přes 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
} Pole /v1/messages/count_tokens
| Pole | Typ | Popis |
|---|---|---|
model | string | Povinné. Id hostovaného modelu s otevřenými váhami. |
messages | array | Povinné. Zprávy ve formátu Anthropic Messages. Počítají se bloky text, image, tool_use a tool_result. |
system | string | array | Systémový prompt: řetězec nebo pole textových bloků. |
tools | array | Definice nástrojů s name, description a input_schema. |
Přijímáno kvůli kompatibilitě, bez vlivu na počet: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. Můžete předat tělo skutečného požadavku beze změny.
Odpověď je objekt JSON s těmito poli:
| Pole | Typ | Popis |
|---|---|---|
input_tokens | integer | Tokeny celého vstupu: systémový prompt, zprávy, nástroje a obrázky. |
Podporované modely
Oba endpointy počítají pro hostované modely s otevřenými váhami. GET /v1/models uvádí /v1/tokenize a /v1/messages/count_tokens v endpoints každého modelu, který je podporuje. Na jakoukoli jinou hodnotu model, včetně id Shannon, se odpoví 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
U modelu Shannon čtěte počty tokenů z objektu usage odpovědi.
Jak se počítá
Každý model se počítá vlastním tokenizerem a vlastní chatovou šablonou. Nepoužívá se žádný odhad ze znaků nebo slov.
| Co se počítá | Pravidlo |
|---|---|
| Text | Tokeny řetězce tak, jak byl poslán. Prázdný řetězec se počítá jako 0. |
| Zprávy | Zprávy a nástroje se rozloží vlastní chatovou šablonou modelu až do místa, kde odpověď začíná, a počítá se celý tento prompt. |
| Role | Počítají se zprávy system, user, assistant a tool. developer se počítá jako system. Zpráva bez obsahu a bez volání nástroje nepřidá nic. |
| Volání nástrojů a výsledky | Volání nástrojů z dřívějších kol asistenta a jejich výsledky jsou součástí počtu, na obou endpointech. |
| Obrázky | Obrázek poslaný uvnitř těla (base64 nebo URL data:) přidá jeden token na čtverec 28 × 28 pixelů: ceil(width / 28) × ceil(height / 28). Obrázek zadaný jako URL http(s) tyto endpointy nestahují a počítají jej jako 1,024. |
Příklad: obrázek 1,024 × 768 pixelů se počítá jako ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 tokenů.
Počet a to, co se požadavku účtuje
Počet celého požadavku se dělá stejným způsobem jako počet vstupu skutečného požadavku se stejným modelem, zprávami a nástroji. Odpověď toto číslo hlásí jako usage.prompt_tokens u Chat Completions, jako usage.input_tokens u Responses a jako usage.input_tokens plus usage.cache_read_input_tokens u Messages.
- Počet je vstup před slevou za cachovaný vstup. Skutečný požadavek může část tohoto vstupu číst z cache a tuto část účtovat za cachovanou sazbu. Caching promptů
- Obrázek zadaný jako URL
http(s)se zde počítá jako 1,024. Skutečný požadavek obrázek stáhne a počítá jej podle velikosti v pixelech, takže se obě čísla mohou lišit. Pošlete obrázek jako base64, abyste dostali stejné číslo. - Výstup není součástí počtu. Odpověď skutečného požadavku se navíc účtuje jako výstupní tokeny, včetně uvažování.
- Počet pro
textnemá chatové formátování. Použijte jej k měření dokumentu nebo části promptu a formumessagesk měření požadavku.
Chcete-li počet převést na náklady, vynásobte jej cenou vstupu modelu za 1M tokenů. Modely a ceny
Limity
| Limit | Hodnota | Nad ním |
|---|---|---|
Délka text | 4,000,000 bajtů (UTF-8) | 413 se zprávou text too long |
| Tělo požadavku | 32 MiB | 413 |
| Na požadavek | Jeden text nebo jedna konverzace | Chcete-li spočítat více textů, pošlete jeden požadavek na každý text. |
Volání pro počítání se nezapočítávají do limitu 120 požadavků za minutu. Limity a zůstatek
Chyby
| Status | Typ | Zpráva | Kdy |
|---|---|---|---|
400 | invalid_request_error | tokenize is available for the hosted open models; unknown model: <model> | /v1/tokenize s model, který není id hostovaného modelu s otevřenými váhami. |
400 | invalid_request_error | count_tokens is available for the hosted open models; unknown model: <model> | /v1/messages/count_tokens s model, který není id hostovaného modelu s otevřenými váhami, nebo bez model. |
400 | invalid_request_error | send `text` or `messages` | /v1/tokenize bez text i bez messages. |
401 | authentication_error | Missing authentication / Invalid API key | Nebyl poslán žádný klíč, nebo klíč není platný. |
413 | invalid_request_error | text too long | text je delší než 4,000,000 bajtů. Na tělo nad 32 MiB se také odpoví 413. |
415 | invalid_request_error | Expected request with `Content-Type: application/json` | Požadavek nemá typ obsahu JSON. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | Chybí povinné pole (model na /v1/tokenize, messages na /v1/messages/count_tokens), nebo má některé pole špatný typ. |
503 | api_error | token counting is temporarily unavailable for this model | Počet se pro tento model v tuto chvíli nedá udělat. Zkuste to později. |
/v1/tokenize vrací chyby ve tvaru OpenAI. Na /v1/messages/count_tokens přicházejí chyby samotného endpointu (400 pro model, 503) ve tvaru Anthropic a 401, 413, 415 a 422 ve tvaru OpenAI. Čtěte nejdřív stavový kód, potom error.type a error.message, které jsou přítomny v obou tvarech.
{
"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"
}
}