Brojanje tokena
Izbrojite tokene teksta ili cijelog zahtjeva prije nego što ga pošaljete.
POST https://api.shannon-ai.com/v1/tokenize
POST https://api.shannon-ai.com/v1/messages/count_tokens
Oba endpointa broje tokenizerom modela koji navedete, i nijedan model se ne pokreće. Pokrivaju hostirane open-weight modele. /v1/tokenize prima običan tekst ili razgovor u formatu Chat Completions. /v1/messages/count_tokens prima zahtjev u formatu Anthropic Messages, a to je poziv koji prave Anthropic SDK i Claude Code.
Brojanje je besplatno. Poziv traži vaš API ključ, ne uzima ništa sa vašeg stanja i ne pojavljuje se u vašem dnevniku korištenja.
Brojanje teksta
Pošaljite model i text. Tekst se broji onakav kakav jest, bez chat formatiranja oko 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
} Brojevi u odgovorima na ovoj stranici su primjeri. Isti tekst daje drugačiji broj na drugom modelu.
Brojanje chat zahtjeva
Pošaljite model i messages, s tools kada ih zahtjev ima, tačno kao što biste ih poslali na /v1/chat/completions. Odgovor je veličina cijelog ulaza.
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 | Obavezno. Id hostiranog open-weight modela. Velika i mala slova se tretiraju isto. |
text | string | Tekst koji se broji onakav kakav jest, bez chat formatiranja. Do 4,000,000 bajtova. Pošaljite text ili messages; kada su prisutni oba, broji se text. |
messages | array | Chat poruke u formatu Chat Completions. Broje se kao puni ulaz zahtjeva: svaka poruka s formatiranjem koje chat šablon modela stavlja oko nje. |
tools | array | Definicije alata koje treba uključiti u broj. Koriste se zajedno s messages. |
Odgovor je JSON objekat s ovim poljima:
| Polje | Tip | Opis |
|---|---|---|
model | string | Id modela za koji je brojanje napravljeno, u objavljenom zapisu. |
tokens | integer | Sa text: tokeni teksta. Sa messages: tokeni cijelog ulaza, uključujući slike. |
Brojanje zahtjeva Messages
Pošaljite tijelo koje biste poslali na /v1/messages: model, messages, te system i tools kada ih koristite. Službeni Anthropic SDK-ovi pozivaju ovaj endpoint preko 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 | Obavezno. Id hostiranog open-weight modela. |
messages | array | Obavezno. Poruke u formatu Anthropic Messages. Broje se blokovi text, image, tool_use i tool_result. |
system | string | array | System prompt: string ili niz tekstualnih blokova. |
tools | array | Definicije alata s name, description i input_schema. |
Prihvaćeno radi kompatibilnosti, bez učinka na broj: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. Možete proslijediti tijelo stvarnog zahtjeva neizmijenjeno.
Odgovor je JSON objekat s ovim poljima:
| Polje | Tip | Opis |
|---|---|---|
input_tokens | integer | Tokeni cijelog ulaza: system prompt, poruke, alati i slike. |
Podržani modeli
Oba endpointa broje za hostirane open-weight modele. GET /v1/models navodi /v1/tokenize i /v1/messages/count_tokens u endpoints svakog modela koji ih podržava. Na svaku drugu vrijednost model, uključujući Shannon id-ove, odgovara se sa 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
Za Shannon model, brojeve tokena pročitajte iz objekta usage u odgovoru.
Kako se broji
Svaki model se broji vlastitim tokenizerom i vlastitim chat šablonom. Ne koristi se procjena iz znakova ili riječi.
| Šta se broji | Pravilo |
|---|---|
| Tekst | Tokeni stringa onako kako je poslan. Prazan string se računa kao 0. |
| Poruke | Poruke i alati se slažu vlastitim chat šablonom modela, do mjesta gdje počinje odgovor, i cijeli taj prompt se broji. |
| Uloge | Broje se poruke system, user, assistant i tool. developer se broji kao system. Poruka bez sadržaja i bez poziva alata ne dodaje ništa. |
| Pozivi alata i rezultati | Pozivi alata iz ranijih krugova asistenta i njihovi rezultati ulaze u broj, na oba endpointa. |
| Slike | Slika poslana unutar tijela (base64 ili data: URL) dodaje jedan token po komadu od 28 × 28 piksela: ceil(width / 28) × ceil(height / 28). Sliku zadanu kao http(s) URL ovi endpointi ne preuzimaju i računaju je kao 1,024. |
Primjer: slika od 1,024 × 768 piksela računa se kao ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 tokena.
Broj i ono što se zahtjevu naplaćuje
Brojanje cijelog zahtjeva radi se na isti način kao brojanje ulaza stvarnog zahtjeva s istim modelom, porukama i alatima. Odgovor taj broj prijavljuje kao usage.prompt_tokens na Chat Completions, kao usage.input_tokens na Responses, i kao usage.input_tokens plus usage.cache_read_input_tokens na Messages.
- Broj je ulaz prije popusta za keširani ulaz. Stvarni zahtjev može pročitati dio tog ulaza iz keša i taj dio naplatiti po keširanoj cijeni. Keširanje promptova
- Slika zadana kao
http(s)URL ovdje se računa kao 1,024. Stvarni zahtjev preuzima sliku i broji je prema veličini u pikselima, pa se ta dva broja mogu razlikovati. Pošaljite sliku kao base64 da dobijete isti broj. - Izlaz nije dio broja. Odgovor stvarnog zahtjeva naplaćuje se povrh toga kao izlazni tokeni, uključujući razmišljanje.
- Brojanje
textnema chat formatiranje. Koristite ga za mjerenje dokumenta ili dijela prompta, a oblikmessagesza mjerenje zahtjeva.
Da pretvorite broj u trošak, pomnožite ga ulaznom cijenom modela za 1M tokena. Modeli i cijene
Ograničenja
| Ograničenje | Vrijednost | Iznad njega |
|---|---|---|
Dužina text | 4,000,000 bajtova (UTF-8) | 413 s porukom text too long |
| Tijelo zahtjeva | 32 MiB | 413 |
| Po zahtjevu | Jedan tekst ili jedan razgovor | Pošaljite jedan zahtjev po tekstu da izbrojite više tekstova. |
Pozivi za brojanje ne računaju se u ograničenje od 120 zahtjeva u minuti. Ograničenja i stanje
Greške
| Status | Tip | Poruka | Kada |
|---|---|---|---|
400 | invalid_request_error | tokenize is available for the hosted open models; unknown model: <model> | /v1/tokenize s model koji nije id hostiranog open-weight modela. |
400 | invalid_request_error | count_tokens is available for the hosted open models; unknown model: <model> | /v1/messages/count_tokens s model koji nije id hostiranog open-weight modela, ili 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 | Ključ nije poslan, ili ključ nije valjan. |
413 | invalid_request_error | text too long | text je duži od 4,000,000 bajtova. Na tijelo veće od 32 MiB također se odgovara sa 413. |
415 | invalid_request_error | Expected request with `Content-Type: application/json` | Zahtjev nema JSON tip sadržaja. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | Obavezno polje nedostaje (model na /v1/tokenize, messages na /v1/messages/count_tokens) ili polje ima pogrešan tip. |
503 | api_error | token counting is temporarily unavailable for this model | Brojanje se trenutno ne može izvršiti za ovaj model. Pokušajte ponovo kasnije. |
/v1/tokenize vraća greške u OpenAI obliku. Na /v1/messages/count_tokens greške samog endpointa (400 za model, 503) dolaze u Anthropic obliku, a 401, 413, 415 i 422 dolaze u OpenAI obliku. Prvo pročitajte statusni kod, zatim error.type i error.message, koji postoje u oba oblika.
{
"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"
}
}