Preskoči na sadržaj
Brojanje tokena

Brojanje tokena

Izbrojte tokene teksta ili celog zahteva pre 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, a nijedan model se ne pokreće. Obuhvataju hostovane open-weight modele. /v1/tokenize prima običan tekst ili Chat Completions razgovor. /v1/messages/count_tokens prima zahtev u Anthropic Messages formatu, što je poziv koji upućuju 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 upotrebe.

Brojanje teksta

Pošaljite model i text. Tekst se broji takav kakav jeste, bez čet 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 primeri. Isti tekst daje drugačiji broj na drugom modelu.

Brojanje čet zahteva

Pošaljite model i messages, sa tools kada ih zahtev ima, tačno kao što biste ih poslali na /v1/chat/completions. Odgovor je veličina celog 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 hostovanog open-weight modela. Velika i mala slova se tretiraju isto.
text string Tekst koji se broji takav kakav jeste, bez čet formatiranja. Do 4,000,000 bajtova. Pošaljite text ili messages; kada su prisutna oba, broji se text.
messages array Čet poruke u Chat Completions formatu. Broje se kao ceo ulaz zahteva: svaka poruka sa formatiranjem koje čet šablon modela stavlja oko nje.
tools array Definicije alata koje treba uključiti u broj. Koriste se zajedno sa messages.

Odgovor je JSON objekat sa ovim poljima:

Polje Tip Opis
model string Id modela za koji je brojanje urađeno, u objavljenom zapisu.
tokens integer Sa text: tokeni teksta. Sa messages: tokeni celog ulaza, uključujući slike.

Brojanje Messages zahteva

Pošaljite telo koje biste poslali na /v1/messages: model, messages, i system i tools kada ih koristite. Zvanični 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 hostovanog open-weight modela.
messages array Obavezno. Poruke u Anthropic Messages formatu. Broje se blokovi text, image, tool_use i tool_result.
system string | array System prompt: string ili niz tekstualnih blokova.
tools array Definicije alata sa name, description i input_schema.

Prihvaćeno radi kompatibilnosti, bez uticaja na broj: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. Možete proslediti telo pravog zahteva nepromenjeno.

Odgovor je JSON objekat sa ovim poljima:

Polje Tip Opis
input_tokens integer Tokeni celog ulaza: system prompt, poruke, alati i slike.

Podržani modeli

Oba endpointa broje za hostovane 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 vrednost model, uključujući Shannon id-jeve, 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 pročitajte brojeve tokena iz objekta usage odgovora.

Kako se broji

Svaki model se broji sopstvenim tokenizerom i sopstvenim čet šablonom. Ne koristi se procena na osnovu znakova ili reči.

Šta se broji Pravilo
Tekst Tokeni stringa onako kako je poslat. Prazan string se računa kao 0.
Poruke Poruke i alati se slažu sopstvenim čet šablonom modela, do mesta gde odgovor počinje, i broji se ceo taj prompt.
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 poteza asistenta i njihovi rezultati deo su broja, na oba endpointa.
Slike Slika poslata unutar tela (base64 ili data: URL) dodaje jedan token po komadu od 28 × 28 piksela: ceil(width / 28) × ceil(height / 28). Sliku datu kao http(s) URL ovi endpointi ne preuzimaju i računaju je kao 1,024.

Primer: slika od 1,024 × 768 piksela računa se kao ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 tokena.

Broj i šta se zahtevu naplaćuje

Brojanje celog zahteva radi se na isti način kao brojanje ulaza pravog zahteva sa 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 pre popusta za keširani ulaz. Pravi zahtev može da pročita deo tog ulaza iz keša i da taj deo naplati po ceni keširanog. Keširanje promptova
  • Slika data kao http(s) URL ovde se računa kao 1,024. Pravi zahtev preuzima sliku i računa je prema veličini u pikselima, pa se ta dva broja mogu razlikovati. Pošaljite sliku kao base64 da dobijete isti broj.
  • Izlaz nije deo broja. Odgovor pravog zahteva se dodatno naplaćuje kao izlazni tokeni, uključujući rezonovanje.
  • Brojanje text nema čet formatiranje. Koristite ga za merenje dokumenta ili dela prompta, a oblik messages za merenje zahteva.

Da broj pretvorite u cenu, pomnožite ga cenom ulaza modela po 1M tokena. Modeli i cene

Ograničenja

Ograničenje Vrednost Iznad toga
Dužina text 4,000,000 bajtova (UTF-8) 413 sa porukom text too long
Telo zahteva 32 MiB 413
Po zahtevu Jedan tekst ili jedan razgovor Pošaljite po jedan zahtev za svaki tekst da izbrojite više tekstova.

Pozivi za brojanje ne računaju se u ograničenje od 120 zahteva 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 sa model koji nije id hostovanog open-weight modela.
400 invalid_request_error count_tokens is available for the hosted open models; unknown model: <model> /v1/messages/count_tokens sa model koji nije id hostovanog open-weight modela, ili bez model.
400 invalid_request_error send `text` or `messages` /v1/tokenize ni sa text ni sa messages.
401 authentication_error Missing authentication / Invalid API key Ključ nije poslat, ili ključ nije važeći.
413 invalid_request_error text too long text je duži od 4,000,000 bajtova. Na telo veće od 32 MiB takođe se odgovara sa 413.
415 invalid_request_error Expected request with `Content-Type: application/json` Zahtev 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 trenutno ne može da se izvrši 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) stižu u Anthropic obliku, a 401, 413, 415 i 422 stižu u OpenAI obliku. Prvo pročitajte statusni kod, zatim error.type i error.message, koji su prisutni 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"
  }
}