Preskoči na sadržaj
Brojanje tokena

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"])
200 Odgovor
{
  "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"])
200 Odgovor
{
  "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)
200 Odgovor
{
  "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-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

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 text nema chat formatiranje. Koristite ga za mjerenje dokumenta ili dijela prompta, a oblik messages za 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.

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