Прескокни до содржината
Броење токени

Броење токени

Избројте ги токените на текст или на цело барање пред да го испратите.

POST https://api.shannon-ai.com/v1/tokenize

POST https://api.shannon-ai.com/v1/messages/count_tokens

Двата ендпоинта бројат со tokenizer-от на моделот што го именувате и не се извршува ниту еден модел. Ги покриваат хостираните open-weight модели. /v1/tokenize прима обичен текст или разговор од Chat Completions. /v1/messages/count_tokens прима барање во форматот Anthropic Messages, што е повикот што го прават SDK-то на Anthropic и Claude Code.

Броењето е бесплатно. Повикот бара ваш API клуч, не зема ништо од вашето салдо и не се појавува во вашиот дневник на употреба.

Броење на текст

Испратете model и text. Текстот се брои каков што е, без chat форматирање околу него.

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 Одговор
{
  "model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
  "tokens": 3
}

Броевите во одговорите на оваа страница се примери. Истиот текст дава различна бројка на различен модел.

Броење на chat барање

Испратете model и messages, со tools кога барањето ги има, точно како што би ги испратиле на /v1/chat/completions. Одговорот е големината на целиот влез.

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 Одговор
{
  "model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
  "tokens": 164
}

Полиња на /v1/tokenize

Поле Тип Опис
model string Задолжително. Ид на хостиран open-weight модел. Големите и малите букви се третираат исто.
text string Текст што се брои каков што е, без chat форматирање. До 4,000,000 бајти. Испратете text или messages; кога се присутни двете, се брои text.
messages array Chat пораки во форматот Chat Completions. Се бројат како целосен влез на барање: секоја порака со форматирањето што chat шаблонот на моделот го става околу неа.
tools array Дефиниции на алатки што се вклучуваат во бројката. Се користат заедно со messages.

Одговорот е JSON објект со овие полиња:

Поле Тип Опис
model string Идот на моделот за кој е направено броењето, во објавениот запис.
tokens integer Со text: токените на текстот. Со messages: токените на целиот влез, вклучително сликите.

Броење на барање Messages

Испратете го телото што би го испратиле на /v1/messages: model, messages, а system и tools кога ги користите. Официјалните SDK-а на Anthropic го повикуваат овој ендпоинт преку 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 Одговор
{
  "input_tokens": 21
}

Полиња на барањето до /v1/messages/count_tokens

Поле Тип Опис
model string Задолжително. Ид на хостиран open-weight модел.
messages array Задолжително. Пораки во форматот Anthropic Messages. Се бројат блоковите text, image, tool_use и tool_result.
system string | array System prompt-от: стринг или низа од текстуални блокови.
tools array Дефиниции на алатки со name, description и input_schema.

Прифатено заради компатибилност, без ефект врз бројката: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. Можете да пренесете тело на вистинско барање непроменето.

Одговорот е JSON објект со овие полиња:

Поле Тип Опис
input_tokens integer Токените на целиот влез: system prompt, пораки, алатки и слики.

Поддржани модели

Двата ендпоинта бројат за хостираните open-weight модели. GET /v1/models ги наведува /v1/tokenize и /v1/messages/count_tokens во endpoints на секој модел што ги поддржува. Секоја друга вредност на model, вклучително и идовите на Shannon, се одговара со 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

За модел Shannon, прочитајте ги бројките на токени од објектот usage на одговорот.

Како се прави броењето

Секој модел се брои со свој tokenizer и свој chat шаблон. Не се користи проценка според знаци или зборови.

Што се брои Правило
Текст Токените на стрингот каков што е испратен. Празен стринг брои 0.
Пораки Пораките и алатките се распоредуваат со сопствениот chat шаблон на моделот, до точката каде започнува одговорот, и целиот тој prompt се брои.
Улоги Се бројат пораките system, user, assistant и tool. developer се брои како system. Порака без содржина и без повик на алатка не додава ништо.
Повици на алатки и резултати Повиците на алатки од претходните чекори на assistant и нивните резултати се дел од бројката, на двата ендпоинта.
Слики Слика испратена во телото (base64 или data: URL) додава еден токен по поле од 28 × 28 пиксели: ceil(width / 28) × ceil(height / 28). Слика дадена како http(s) URL овие ендпоинти не ја преземаат и брои 1,024.

Пример: слика од 1,024 × 768 пиксели брои ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 токени.

Бројката и што се наплатува за барање

Броењето на цело барање се прави на ист начин како броењето на влезот на вистинско барање со истиот модел, пораки и алатки. Одговорот ја пријавува таа бројка како usage.prompt_tokens на Chat Completions, како usage.input_tokens на Responses, и како usage.input_tokens плус usage.cache_read_input_tokens на Messages.

  • Бројката е влезот пред попустот за кеширан влез. Вистинско барање може да прочита дел од тој влез од кешот и да го наплати тој дел по цената за кеширано. Кеширање на промптови
  • Слика дадена како http(s) URL тука брои 1,024. Вистинско барање ја презема сликата и ја брои според нејзината големина во пиксели, па двете бројки може да се разликуваат. Испратете ја сликата како base64 за да добиете иста бројка.
  • Излезот не е дел од бројката. Одговорот на вистинско барање дополнително се наплатува како излезни токени, вклучувајќи го reasoning-от.
  • Броењето на text нема chat форматирање. Користете го за да измерите документ или дел од prompt, а формата messages за да измерите барање.

За да претворите бројка во трошок, помножете ја со цената за влез на моделот за 1M токени. Модели и цени

Ограничувања

Ограничување Вредност Над него
Должина на text 4,000,000 бајти (UTF-8) 413 со пораката text too long
Тело на барање 32 MiB 413
По барање Еден текст или еден разговор За да броите повеќе текстови, испратете по едно барање за секој текст.

Повиците за броење не се вбројуваат во ограничувањето од 120 барања во минута. Ограничувања и салдо

Грешки

Статус Тип Порака Кога
400 invalid_request_error tokenize is available for the hosted open models; unknown model: <model> /v1/tokenize со model што не е ид на хостиран open-weight модел.
400 invalid_request_error count_tokens is available for the hosted open models; unknown model: <model> /v1/messages/count_tokens со model што не е ид на хостиран open-weight модел, или без model.
400 invalid_request_error send `text` or `messages` /v1/tokenize ниту со text, ниту со messages.
401 authentication_error Missing authentication / Invalid API key Не е испратен клуч, или клучот не е валиден.
413 invalid_request_error text too long text е подолг од 4,000,000 бајти. Тело над 32 MiB исто така се одговара со 413.
415 invalid_request_error Expected request with `Content-Type: application/json` Барањето нема JSON тип на содржина.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Недостасува задолжително поле (model на /v1/tokenize, messages на /v1/messages/count_tokens) или поле има погрешен тип.
503 api_error token counting is temporarily unavailable for this model Броењето не може да се направи за овој модел во моментов. Обидете се повторно подоцна.

/v1/tokenize ги враќа грешките во обликот на OpenAI. На /v1/messages/count_tokens грешките на самиот ендпоинт (400 за моделот, 503) доаѓаат во обликот на Anthropic, а 401, 413, 415 и 422 доаѓаат во обликот на OpenAI. Прво прочитајте го статус кодот, потоа error.type и error.message, кои постојат во двата облика.

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