Hoppa till innehållet
Tokenräkning

Tokenräkning

Räkna tokens i en text eller i en hel begäran innan du skickar den.

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

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

Båda endpointsen räknar med tokenizern för den modell du anger, och ingen modell körs. De gäller de hostade open-weight-modellerna. /v1/tokenize tar en ren text eller en Chat Completions-konversation. /v1/messages/count_tokens tar en begäran i Anthropic Messages-formatet, vilket är anropet som Anthropic-SDK:n och Claude Code gör.

Att räkna är gratis. Ett anrop kräver din API-nyckel, tar ingenting från din balans och syns inte i din användningslogg.

Räkna en text

Skicka model och text. Texten räknas som den är, utan någon chattformatering runt den.

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 Svar
{
  "model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
  "tokens": 3
}

Talen i svaren på den här sidan är exempel. Samma text ger en annan räkning på en annan modell.

Räkna en chattbegäran

Skicka model och messages, med tools när begäran har dem, precis som du skulle skicka dem till /v1/chat/completions. Svaret är storleken på hela inputen.

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 Svar
{
  "model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
  "tokens": 164
}

Fält i /v1/tokenize

Fält Typ Beskrivning
model string Obligatoriskt. Ett id för en hostad open-weight-modell. Versaler och gemener behandlas lika.
text string En text som ska räknas som den är, utan chattformatering. Upp till 4,000,000 byte. Skicka text eller messages; när båda finns räknas text.
messages array Chattmeddelanden i Chat Completions-formatet. De räknas som hela inputen i en begäran: varje meddelande med den formatering som modellens chattmall lägger runt det.
tools array Verktygsdefinitioner som ska ingå i räkningen. Används tillsammans med messages.

Svaret är ett JSON-objekt med dessa fält:

Fält Typ Beskrivning
model string Modell-id:t som räkningen gjordes för, i sin publicerade stavning.
tokens integer Med text: textens tokens. Med messages: tokens i hela inputen, bilder inräknade.

Räkna en Messages-begäran

Skicka den body som du skulle skicka till /v1/messages: model, messages, samt system och tools när du använder dem. De officiella Anthropic-SDK:erna anropar den här endpointen via 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 Svar
{
  "input_tokens": 21
}

Fält i /v1/messages/count_tokens

Fält Typ Beskrivning
model string Obligatoriskt. Ett id för en hostad open-weight-modell.
messages array Obligatoriskt. Meddelanden i Anthropic Messages-formatet. Block av typen text, image, tool_use och tool_result räknas.
system string | array Systemprompten: en sträng eller en array av textblock.
tools array Verktygsdefinitioner med name, description och input_schema.

Accepteras för kompatibilitet, utan effekt på räkningen: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. Du kan skicka bodyn från en riktig begäran oförändrad.

Svaret är ett JSON-objekt med dessa fält:

Fält Typ Beskrivning
input_tokens integer Tokens i hela inputen: systemprompt, meddelanden, verktyg och bilder.

Modeller som stöds

Båda endpointsen räknar för de hostade open-weight-modellerna. GET /v1/models listar /v1/tokenize och /v1/messages/count_tokens i endpoints för varje modell som stöder dem. Varje annat model-värde, Shannon-id:na inräknade, besvaras med 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

För en Shannon-modell läser du tokenantalen från usage-objektet i ett svar.

Hur räkningen görs

Varje modell räknas med sin egen tokenizer och sin egen chattmall. Ingen uppskattning utifrån tecken eller ord används.

Vad som räknas Regel
En text Strängens tokens så som den skickades. En tom sträng räknas som 0.
Meddelanden Meddelandena och verktygen läggs upp med modellens egen chattmall, fram till den punkt där svaret börjar, och hela den prompten räknas.
Roller Meddelanden med system, user, assistant och tool räknas. developer räknas som system. Ett meddelande utan innehåll och utan verktygsanrop lägger inte till något.
Verktygsanrop och resultat Verktygsanrop i tidigare assistentvändningar och deras resultat ingår i räkningen, på båda endpointsen.
Bilder En bild som skickas inne i bodyn (base64 eller en data:-URL) lägger till en token per ruta på 28 × 28 pixlar: ceil(width / 28) × ceil(height / 28). En bild som anges som http(s)-URL laddas inte ned av de här endpointsen och räknas som 1,024.

Exempel: en bild på 1,024 × 768 pixlar räknas som ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 tokens.

Räkningen och vad en begäran debiteras

Räkningen av en hel begäran görs på samma sätt som inputräkningen för en riktig begäran med samma modell, meddelanden och verktyg. Ett svar rapporterar det talet som usage.prompt_tokens på Chat Completions, som usage.input_tokens på Responses, och som usage.input_tokens plus usage.cache_read_input_tokens på Messages.

  • Räkningen är inputen före rabatten för cachad input. En riktig begäran kan läsa en del av den inputen från cachen och fakturera den delen till cachepriset. Prompt-caching
  • En bild som anges som http(s)-URL räknas som 1,024 här. En riktig begäran laddar ned bilden och räknar den utifrån dess storlek i pixlar, så de två talen kan skilja sig åt. Skicka bilden som base64 för att få samma tal.
  • Output ingår inte i räkningen. Svaret på en riktig begäran faktureras som outputtokens utöver detta, resonemang inräknat.
  • En text-räkning har ingen chattformatering. Använd den för att mäta ett dokument eller en del av en prompt, och messages-formen för att mäta en begäran.

För att göra om en räkning till en kostnad, multiplicera den med modellens inputpris per 1M tokens. Modeller och priser

Gränser

Gräns Värde Över den
Längd på text 4,000,000 byte (UTF-8) 413 med meddelandet text too long
Begäranbody 32 MiB 413
Per begäran En text eller en konversation Skicka en begäran per text för att räkna flera texter.

Räkneanrop räknas inte mot gränsen på 120 begäranden per minut. Gränser och balans

Fel

Status Typ Meddelande När
400 invalid_request_error tokenize is available for the hosted open models; unknown model: <model> /v1/tokenize med ett model som inte är ett id för en hostad open-weight-modell.
400 invalid_request_error count_tokens is available for the hosted open models; unknown model: <model> /v1/messages/count_tokens med ett model som inte är ett id för en hostad open-weight-modell, eller utan model.
400 invalid_request_error send `text` or `messages` /v1/tokenize med varken text eller messages.
401 authentication_error Missing authentication / Invalid API key Ingen nyckel skickades, eller nyckeln är inte giltig.
413 invalid_request_error text too long text är längre än 4,000,000 byte. En body över 32 MiB besvaras också med 413.
415 invalid_request_error Expected request with `Content-Type: application/json` Begäran har ingen JSON-innehållstyp.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Ett obligatoriskt fält saknas (model på /v1/tokenize, messages på /v1/messages/count_tokens) eller ett fält har fel typ.
503 api_error token counting is temporarily unavailable for this model Räkningen kan inte göras för den här modellen just nu. Försök igen senare.

/v1/tokenize returnerar fel i OpenAI-formen. På /v1/messages/count_tokens kommer endpointens egna fel (400 för modellen, 503) i Anthropic-formen, och 401, 413, 415 och 422 kommer i OpenAI-formen. Läs statuskoden först, sedan error.type och error.message, som finns i båda formerna.

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