Joan edukira
Tokenen kontaketa

Tokenen kontaketa

Kontatu testu baten edo eskaera oso baten tokenak bidali aurretik.

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

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

Bi endpointek izendatzen duzun modeloaren tokenizer-arekin kontatzen dute, eta ez da modelorik exekutatzen. Pisu irekiko modelo ostatatuak hartzen dituzte. /v1/tokenize-k testu soil bat edo Chat Completions elkarrizketa bat hartzen du. /v1/messages/count_tokens-ek Anthropic Messages formatuko eskaera bat hartzen du, hau da, Anthropic SDKak eta Claude Code-k egiten duten deia.

Kontatzea doakoa da. Dei batek zure API giltza behar du, ez du ezer kentzen zure saldotik eta ez da agertzen zure erabilera-erregistroan.

Testu bat kontatu

Bidali model eta text. Testua dagoen bezala kontatzen da, txat-formaturik gabe.

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

Orri honetako erantzunetako zenbakiak adibideak dira. Testu berak kontaketa desberdina ematen du beste modelo batean.

Txat-eskaera bat kontatu

Bidali model eta messages, eta tools eskaerak baditu, /v1/chat/completions-era bidaliko zenituzkeen bezala. Erantzuna sarrera osoaren tamaina da.

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

/v1/tokenize-ren eremuak

Eremua Mota Deskribapena
model string Derrigorrezkoa. Pisu irekiko modelo ostatatu baten id-a. Maiuskulak eta minuskulak berdin tratatzen dira.
text string Dagoen bezala kontatzeko testu bat, txat-formaturik gabe. 4,000,000 byte arte. Bidali text edo messages; biak daudenean, text kontatzen da.
messages array Txat-mezuak Chat Completions formatuan. Eskaera baten sarrera osoa balitz bezala kontatzen dira: mezu bakoitza modeloaren txat-txantiloiak inguruan jartzen duen formatuarekin.
tools array Kontaketan sartzeko tresna-definizioak. messages-ekin batera erabiltzen dira.

Erantzuna eremu hauek dituen JSON objektu bat da:

Eremua Mota Deskribapena
model string Kontaketa egin zaion modeloaren id-a, argitaratutako idazkeran.
tokens integer text-ekin: testuaren tokenak. messages-ekin: sarrera osoaren tokenak, irudiak barne.

Messages eskaera bat kontatu

Bidali /v1/messages-era bidaliko zenukeen gorputza: model, messages, eta system eta tools erabiltzen badituzu. Anthropic SDK ofizialek endpoint hau messages.count_tokens bidez deitzen dute.

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 Erantzuna
{
  "input_tokens": 21
}

/v1/messages/count_tokens-en eremuak

Eremua Mota Deskribapena
model string Derrigorrezkoa. Pisu irekiko modelo ostatatu baten id-a.
messages array Derrigorrezkoa. Mezuak Anthropic Messages formatuan. text, image, tool_use eta tool_result blokeak kontatzen dira.
system string | array Sistema-prompt-a: kate bat edo testu-blokeen array bat.
tools array Tresna-definizioak name, description eta input_schema-rekin.

Bateragarritasunerako onartzen dira, kontaketan eraginik gabe: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. Benetako eskaera baten gorputza aldatu gabe pasa dezakezu.

Erantzuna eremu hauek dituen JSON objektu bat da:

Eremua Mota Deskribapena
input_tokens integer Sarrera osoaren tokenak: sistema-prompt-a, mezuak, tresnak eta irudiak.

Onartutako modeloak

Bi endpointek pisu irekiko modelo ostatatuentzat kontatzen dute. GET /v1/models-ek /v1/tokenize eta /v1/messages/count_tokens zerrendatzen ditu hauek onartzen dituen modelo bakoitzaren endpoints-en. Beste edozein model baliori, Shannon id-ak barne, 400-rekin erantzuten zaio.

  • 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 modelo baterako, irakurri token-kopuruak erantzun baten usage objektutik.

Kontaketa nola egiten den

Modelo bakoitza bere tokenizer eta bere txat-txantiloiarekin kontatzen da. Ez da karaktere edo hitzetatik abiatutako estimaziorik erabiltzen.

Zer kontatzen den Araua
Testu bat Kateak bidalitako moduan dituen tokenak. Kate huts batek 0 kontatzen du.
Mezuak Mezuak eta tresnak modeloaren txat-txantiloiarekin antolatzen dira, erantzuna hasten den punturaino, eta prompt osoa kontatzen da.
Rolak system, user, assistant eta tool mezuak kontatzen dira. developer system gisa kontatzen da. Edukirik eta tresna-deirik ez duen mezu batek ez du ezer gehitzen.
Tresna-deiak eta emaitzak Assistant-aren aurreko txandetako tresna-deiak eta haien emaitzak kontaketaren parte dira, bi endpointetan.
Irudiak Gorputzaren barruan bidalitako irudi batek (base64 edo data: URL) token bat gehitzen du 28 × 28 pixeleko adabaki bakoitzeko: ceil(width / 28) × ceil(height / 28). http(s) URL gisa emandako irudi bat ez dute endpoint hauek deskargatzen, eta 1,024 kontatzen du.

Adibidea: 1,024 × 768 pixeleko irudi batek ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 token kontatzen ditu.

Kontaketa eta eskaera batean kobratzen dena

Eskaera oso baten kontaketa egiten da modelo, mezu eta tresna berberekin egindako benetako eskaera baten sarrera-kontaketa egiten den modu berean. Erantzun batek zenbaki hori usage.prompt_tokens gisa jakinarazten du Chat Completions-en, usage.input_tokens gisa Responses-en, eta usage.input_tokens gehi usage.cache_read_input_tokens gisa Messages-en.

  • Kontaketa cached-input deskontua aplikatu aurreko sarrera da. Benetako eskaera batek sarrera horren zati bat cache-tik irakur dezake eta zati hori cached tarifan kobratu. Prompt-cache
  • http(s) URL gisa emandako irudi batek 1,024 kontatzen du hemen. Benetako eskaera batek irudia deskargatzen du eta bere pixel-tamainatik kontatzen du, beraz bi zenbakiak desberdinak izan daitezke. Bidali irudia base64 gisa zenbaki bera lortzeko.
  • Irteera ez da kontaketaren parte. Benetako eskaera baten erantzuna irteera-token gisa kobratzen da gainera, arrazonamendua barne.
  • text kontaketak ez du txat-formaturik. Erabili dokumentu bat edo prompt zati bat neurtzeko, eta messages forma eskaera bat neurtzeko.

Kontaketa kostu bihurtzeko, biderkatu modeloaren sarrera-prezioarekin 1M tokeneko. Modeloak eta prezioak

Mugak

Muga Balioa Hortik gora
text-aren luzera 4,000,000 byte (UTF-8) 413 eta text too long mezua
Eskaeraren gorputza 32 MiB 413
Eskaera bakoitzeko Testu bat edo elkarrizketa bat Hainbat testu kontatzeko, bidali eskaera bat testu bakoitzeko.

Kontaketa-deiak ez dira kontatzen minutuko 120 eskaerako mugan. Mugak eta saldoa

Erroreak

Egoera Mota Mezua Noiz
400 invalid_request_error tokenize is available for the hosted open models; unknown model: <model> /v1/tokenize pisu irekiko modelo ostatatu baten id ez den model batekin.
400 invalid_request_error count_tokens is available for the hosted open models; unknown model: <model> /v1/messages/count_tokens pisu irekiko modelo ostatatu baten id ez den model batekin, edo model gabe.
400 invalid_request_error send `text` or `messages` /v1/tokenize text ez messages gabe.
401 authentication_error Missing authentication / Invalid API key Ez da giltzarik bidali, edo giltza ez da baliozkoa.
413 invalid_request_error text too long text 4,000,000 byte baino luzeagoa da. 32 MiB baino gorputz bati ere 413-rekin erantzuten zaio.
415 invalid_request_error Expected request with `Content-Type: application/json` Eskaerak ez du JSON eduki-motarik.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Derrigorrezko eremu bat falta da (model /v1/tokenize-n, messages /v1/messages/count_tokens-en) edo eremu batek mota okerra du.
503 api_error token counting is temporarily unavailable for this model Kontaketa ezin da egin modelo honetarako une honetan. Saiatu berriro geroago.

/v1/tokenize-k erroreak OpenAI formaren arabera itzultzen ditu. /v1/messages/count_tokens-en endpointaren beraren erroreak (400 modeloarentzat, 503) Anthropic formaren arabera datoz, eta 401, 413, 415 eta 422 OpenAI formaren arabera. Irakurri lehenengo egoera-kodea, gero error.type eta error.message, bi formetan daudenak.

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