Preskoči na sadržaj
Brojanje tokena

Brojanje tokena

Izbrojite tokene teksta ili cijelog zahtjeva prije nego 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. 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 šalju Anthropic SDK i Claude Code.

Brojanje je besplatno. Poziv treba vaš API ključ, ništa ne uzima s vašeg stanja i ne pojavljuje se u vašem zapisniku upotrebe.

Brojanje teksta

Pošaljite model i text. Tekst se broji 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, točno onako kako 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 tretiraju se jednako.
text string Tekst koji se broji 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 predložak modela stavlja oko nje.
tools array Definicije alata koje treba uključiti u brojanje. Koriste se zajedno s messages.

Odgovor je JSON objekt 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: niz ili polje tekstualnih blokova.
tools array Definicije alata s name, description i input_schema.

Prihvaćeno radi kompatibilnosti, bez učinka na brojanje: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. Možete proslijediti tijelo stvarnog zahtjeva nepromijenjeno.

Odgovor je JSON objekt 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 s 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 broji se vlastitim tokenizerom i vlastitim chat predloškom. Ne koristi se procjena prema znakovima ili riječima.

Što se broji Pravilo
Tekst Tokeni niza onako kako je poslan. Prazan niz računa se kao 0.
Poruke Poruke i alati slažu se vlastitim chat predloškom modela, do točke gdje počinje odgovor, i broji se cijeli 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 okreta asistenta i njihovi rezultati dio su brojanja, 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čuna se 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 š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 cacheirani ulaz. Stvarni zahtjev može pročitati dio tog ulaza iz cachea i naplatiti taj dio po cijeni cacheiranog ulaza. 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 brojanja. Odgovor stvarnog zahtjeva naplaćuje se povrh toga kao izlazni tokeni, uključujući razmišljanje.
  • Brojanje za text nema chat formatiranja. Koristite ga za mjerenje dokumenta ili dijela prompta, a oblik messages za mjerenje zahtjeva.

Da broj pretvorite u trošak, pomnožite ga cijenom ulaza modela za 1M tokena. Modeli i cijene

Ograničenja

Ograničenje Vrijednost Iznad njega
Duljina 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 Za brojanje više tekstova pošaljite jedan zahtjev po tekstu.

Pozivi za brojanje ne ulaze 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 dulji od 4,000,000 bajtova. Na tijelo veće od 32 MiB također se odgovara s 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 za ovaj model trenutačno ne može provesti. Pokušajte ponovno 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 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"
  }
}