Štetje tokenov
Preštejte tokene besedila ali celotnega zahtevka, preden ga pošljete.
POST https://api.shannon-ai.com/v1/tokenize
POST https://api.shannon-ai.com/v1/messages/count_tokens
Obe končni točki štejeta s tokenizerjem modela, ki ga navedete, in noben model se ne zažene. Zajemata gostovane modele z odprtimi utežmi. /v1/tokenize sprejme golo besedilo ali pogovor Chat Completions. /v1/messages/count_tokens sprejme zahtevek v formatu Anthropic Messages, kar je klic, ki ga delata SDK Anthropic in Claude Code.
Štetje je brezplačno. Klic potrebuje vaš API ključ, ne vzame ničesar z vašega stanja in se ne pojavi v dnevniku vaše porabe.
Štetje besedila
Pošljite model in text. Besedilo se šteje, kot je, brez oblikovanja za klepet okoli njega.
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
} Števila v odgovorih na tej strani so primeri. Isto besedilo na drugem modelu da drugačno število.
Štetje zahtevka za klepet
Pošljite model in messages, s tools, kadar jih zahtevek ima, natanko tako, kot bi jih poslali na /v1/chat/completions. Odgovor je velikost celotnega vhoda.
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
} Polja /v1/tokenize
| Polje | Tip | Opis |
|---|---|---|
model | string | Obvezno. Id gostovanega modela z odprtimi utežmi. Velike in male črke se obravnavajo enako. |
text | string | Besedilo, ki se šteje, kot je, brez oblikovanja za klepet. Do 4,000,000 bajtov. Pošljite text ali messages; kadar sta prisotna oba, se šteje text. |
messages | array | Sporočila klepeta v formatu Chat Completions. Štejejo se kot celoten vhod zahtevka: vsako sporočilo z oblikovanjem, ki ga okoli njega postavi predloga za klepet modela. |
tools | array | Definicije orodij, ki naj bodo vključene v štetje. Uporabljajo se skupaj z messages. |
Odgovor je objekt JSON s temi polji:
| Polje | Tip | Opis |
|---|---|---|
model | string | Id modela, za katerega je bilo štetje opravljeno, v objavljenem zapisu. |
tokens | integer | Pri text: tokeni besedila. Pri messages: tokeni celotnega vhoda, vključno s slikami. |
Štetje zahtevka Messages
Pošljite telo, ki bi ga poslali na /v1/messages: model, messages ter system in tools, kadar ju uporabljate. Uradni SDK-ji Anthropic to končno točko kličejo prek 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
} Polja /v1/messages/count_tokens
| Polje | Tip | Opis |
|---|---|---|
model | string | Obvezno. Id gostovanega modela z odprtimi utežmi. |
messages | array | Obvezno. Sporočila v formatu Anthropic Messages. Štejejo se bloki text, image, tool_use in tool_result. |
system | string | array | Sistemski prompt: niz ali polje besedilnih blokov. |
tools | array | Definicije orodij z name, description in input_schema. |
Sprejeto zaradi združljivosti, brez vpliva na štetje: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. Telo pravega zahtevka lahko podate nespremenjeno.
Odgovor je objekt JSON s temi polji:
| Polje | Tip | Opis |
|---|---|---|
input_tokens | integer | Tokeni celotnega vhoda: sistemski prompt, sporočila, orodja in slike. |
Podprti modeli
Obe končni točki štejeta za gostovane modele z odprtimi utežmi. GET /v1/models navaja /v1/tokenize in /v1/messages/count_tokens v endpoints vsakega modela, ki ju podpira. Na vsako drugo vrednost model, vključno z id Shannon, se odgovori z 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 modelu Shannon števila tokenov preberite iz objekta usage v odgovoru.
Kako se šteje
Vsak model se šteje z lastnim tokenizerjem in lastno predlogo za klepet. Ocena po znakih ali besedah se ne uporablja.
| Kaj se šteje | Pravilo |
|---|---|
| Besedilo | Tokeni niza, kot je poslan. Prazen niz se šteje 0. |
| Sporočila | Sporočila in orodja se razporedijo z modelovo lastno predlogo za klepet, do točke, kjer se začne odgovor, in šteje se ves ta prompt. |
| Vloge | Štejejo se sporočila system, user, assistant in tool. developer se šteje kot system. Sporočilo brez vsebine in brez klica orodja ne doda nič. |
| Klici orodij in rezultati | Klici orodij prejšnjih obratov asistenta in njihovi rezultati so del štetja, na obeh končnih točkah. |
| Slike | Slika, poslana znotraj telesa (base64 ali URL data:), doda en token na košček 28 × 28 pikslov: ceil(width / 28) × ceil(height / 28). Slike, podane kot URL http(s), ti končni točki ne prenašata in se šteje 1,024. |
Primer: slika 1,024 × 768 pikslov se šteje ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 tokenov.
Število in kaj se zahtevku obračuna
Štetje celotnega zahtevka poteka enako kot štetje vhoda pravega zahtevka z istim modelom, sporočili in orodji. Odgovor to število sporoča kot usage.prompt_tokens pri Chat Completions, kot usage.input_tokens pri Responses in kot usage.input_tokens plus usage.cache_read_input_tokens pri Messages.
- Število je vhod pred popustom za predpomnjen vhod. Pravi zahtevek lahko del tega vhoda prebere iz predpomnilnika in ta del obračuna po predpomnjeni ceni. Predpomaganje promptov
- Slika, podana kot URL
http(s), se tu šteje 1,024. Pravi zahtevek sliko prenese in jo šteje po velikosti v pikslih, zato se števili lahko razlikujeta. Sliko pošljite kot base64, da dobite isto število. - Izhod ni del štetja. Odgovor pravega zahtevka se obračuna kot izhodni tokeni povrhu, vključno z razmišljanjem.
- Štetje
textnima oblikovanja za klepet. Uporabite ga za merjenje dokumenta ali dela prompta, oblikomessagespa za merjenje zahtevka.
Če želite število pretvoriti v strošek, ga pomnožite z vhodno ceno modela za 1M tokenov. Modeli in cene
Omejitve
| Omejitev | Vrednost | Nad njo |
|---|---|---|
Dolžina text | 4,000,000 bajtov (UTF-8) | 413 s sporočilom text too long |
| Telo zahtevka | 32 MiB | 413 |
| Na zahtevek | Eno besedilo ali en pogovor | Za štetje več besedil pošljite po en zahtevek na besedilo. |
Klici za štetje se ne vštevajo v omejitev 120 zahtevkov na minuto. Omejitve in stanje
Napake
| Status | Tip | Sporočilo | Kdaj |
|---|---|---|---|
400 | invalid_request_error | tokenize is available for the hosted open models; unknown model: <model> | /v1/tokenize z model, ki ni id gostovanega modela z odprtimi utežmi. |
400 | invalid_request_error | count_tokens is available for the hosted open models; unknown model: <model> | /v1/messages/count_tokens z model, ki ni id gostovanega modela z odprtimi utežmi, ali brez model. |
400 | invalid_request_error | send `text` or `messages` | /v1/tokenize brez text in brez messages. |
401 | authentication_error | Missing authentication / Invalid API key | Ključ ni bil poslan ali ni veljaven. |
413 | invalid_request_error | text too long | text je daljši od 4,000,000 bajtov. Na telo nad 32 MiB se prav tako odgovori z 413. |
415 | invalid_request_error | Expected request with `Content-Type: application/json` | Zahtevek nima tipa vsebine JSON. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | Manjka obvezno polje (model na /v1/tokenize, messages na /v1/messages/count_tokens) ali pa ima polje napačen tip. |
503 | api_error | token counting is temporarily unavailable for this model | Štetja za ta model trenutno ni mogoče opraviti. Poskusite znova pozneje. |
/v1/tokenize vrača napake v obliki OpenAI. Na /v1/messages/count_tokens napake same končne točke (400 za model, 503) pridejo v obliki Anthropic, 401, 413, 415 in 422 pa v obliki OpenAI. Najprej preberite statusno kodo, nato error.type in error.message, ki sta prisotna v obeh oblikah.
{
"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"
}
}