Tokenien laskenta
Laske tekstin tai koko pyynnön tokenit ennen kuin lähetät sen.
POST https://api.shannon-ai.com/v1/tokenize
POST https://api.shannon-ai.com/v1/messages/count_tokens
Molemmat päätepisteet laskevat nimeämäsi mallin tokenizerilla, eikä mitään mallia suoriteta. Ne kattavat hostatut avoimen painon mallit. /v1/tokenize ottaa pelkän tekstin tai Chat Completions -keskustelun. /v1/messages/count_tokens ottaa pyynnön Anthropic Messages -muodossa, mikä on kutsu, jonka Anthropic-SDK ja Claude Code tekevät.
Laskenta on ilmaista. Kutsu tarvitsee API-avaimesi, ei vie mitään saldostasi eikä näy käyttölokissasi.
Laske teksti
Lähetä model ja text. Teksti lasketaan sellaisenaan, ilman chat-muotoilua ympärillä.
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"]) const response = await fetch("https://api.shannon-ai.com/v1/tokenize", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
text: "Hello, world",
}),
});
const { tokens } = await response.json();
console.log(tokens); curl https://api.shannon-ai.com/v1/tokenize \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
"text": "Hello, world"
}' {
"model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
"tokens": 3
} Tämän sivun vastausten luvut ovat esimerkkejä. Sama teksti antaa eri määrän eri mallilla.
Laske chat-pyyntö
Lähetä model ja messages, ja tools, kun pyynnössä niitä on, täsmälleen kuten lähettäisit ne päätepisteeseen /v1/chat/completions. Vastaus on koko syötteen koko.
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"]) const 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"],
},
},
},
],
};
const response = await fetch("https://api.shannon-ai.com/v1/tokenize", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify(request),
});
const { tokens } = await response.json();
console.log(tokens); curl https://api.shannon-ai.com/v1/tokenize \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"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"]
}
}
}
]
}' {
"model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
"tokens": 164
} Päätepisteen /v1/tokenize kentät
| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
model | string | Pakollinen. Hostatun avoimen painon mallin id. Isoja ja pieniä kirjaimia kohdellaan samoin. |
text | string | Teksti, joka lasketaan sellaisenaan, ilman chat-muotoilua. Enintään 4,000,000 tavua. Lähetä text tai messages; kun molemmat ovat mukana, text lasketaan. |
messages | array | Chat-viestit Chat Completions -muodossa. Ne lasketaan pyynnön täytenä syötteenä: jokainen viesti sillä muotoilulla, jonka mallin chat-mallipohja asettaa sen ympärille. |
tools | array | Työkalumääritykset, jotka sisällytetään laskentaan. Käytetään yhdessä kentän messages kanssa. |
Vastaus on JSON-objekti, jossa on nämä kentät:
| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
model | string | Mallin id, jolle laskenta tehtiin, julkaistussa kirjoitusasussaan. |
tokens | integer | Kentällä text: tekstin tokenit. Kentällä messages: koko syötteen tokenit, kuvat mukaan lukien. |
Laske Messages-pyyntö
Lähetä runko, jonka lähettäisit päätepisteeseen /v1/messages: model, messages sekä system ja tools, jos käytät niitä. Viralliset Anthropic-SDK:t kutsuvat tätä päätepistettä funktiolla 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) import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com",
});
const count = await client.messages.countTokens({
model: "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
system: "You are a concise assistant.",
messages: [
{ role: "user", content: "Summarise the attached report." },
],
});
console.log(count.input_tokens); curl https://api.shannon-ai.com/v1/messages/count_tokens \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
"system": "You are a concise assistant.",
"messages": [
{"role": "user", "content": "Summarise the attached report."}
]
}' {
"input_tokens": 21
} Päätepisteen /v1/messages/count_tokens kentät
| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
model | string | Pakollinen. Hostatun avoimen painon mallin id. |
messages | array | Pakollinen. Viestit Anthropic Messages -muodossa. text-, image-, tool_use- ja tool_result-lohkot lasketaan. |
system | string | array | Järjestelmäprompt: merkkijono tai tekstilohkojen taulukko. |
tools | array | Työkalumääritykset kentillä name, description ja input_schema. |
Hyväksytään yhteensopivuuden vuoksi, ilman vaikutusta laskentaan: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. Voit välittää todellisen pyynnön rungon sellaisenaan.
Vastaus on JSON-objekti, jossa on nämä kentät:
| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
input_tokens | integer | Koko syötteen tokenit: järjestelmäprompt, viestit, työkalut ja kuvat. |
Tuetut mallit
Molemmat päätepisteet laskevat hostatuille avoimen painon malleille. GET /v1/models listaa /v1/tokenize ja /v1/messages/count_tokens jokaisen niitä tukevan mallin endpoints-kentässä. Mihin tahansa muuhun model-arvoon, Shannon-id:t mukaan lukien, vastataan 400:lla.
DeepSeek-V4-Pro-0813-3BIT-REAPGLM-5.2-3BIT-REAPKimi-K3-3BIT-REAPNemotron3Ultra-3BIT-REAPMiniMax-M3-3BIT-REAPDeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAPKimi-K2.6-W4A16-AUTOROUND-REAPLaguna-S-2.1-W4A16-AUTOROUND-REAPinkling-W4A16-AUTOROUND-REAPMiMo-V2.5-Pro-W8A16MiMo-V2.5-W8A16Hy3-W8A16
Shannon-mallilla lue tokenmäärät vastauksen usage-objektista.
Miten laskenta tehdään
Jokainen malli lasketaan omalla tokenizerillaan ja omalla chat-mallipohjallaan. Merkkeihin tai sanoihin perustuvaa arviota ei käytetä.
| Mitä lasketaan | Sääntö |
|---|---|
| Teksti | Merkkijonon tokenit sellaisena kuin se lähetettiin. Tyhjä merkkijono lasketaan 0:ksi. |
| Viestit | Viestit ja työkalut aseteltu mallin oman chat-mallipohjan mukaan siihen kohtaan asti, jossa vastaus alkaa, ja koko tuo prompt lasketaan. |
| Roolit | system-, user-, assistant- ja tool-viestit lasketaan. developer lasketaan system-viestiksi. Viesti, jossa ei ole sisältöä eikä työkalukutsua, ei lisää mitään. |
| Työkalukutsut ja tulokset | Aiempien avustajavuorojen työkalukutsut ja niiden tulokset kuuluvat laskentaan molemmissa päätepisteissä. |
| Kuvat | Rungon sisällä lähetetty kuva (base64 tai data:-URL) lisää yhden tokenin jokaista 28 × 28 pikselin ruutua kohti: ceil(width / 28) × ceil(height / 28). Kuvaa, joka annetaan http(s)-URL:na, nämä päätepisteet eivät lataa, ja se lasketaan 1,024:ksi. |
Esimerkki: 1,024 × 768 pikselin kuva lasketaan ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 tokeniksi.
Laskenta ja se, mitä pyynnöstä veloitetaan
Koko pyynnön laskenta tehdään samalla tavalla kuin todellisen pyynnön syötteen laskenta samalla mallilla, viesteillä ja työkaluilla. Vastaus ilmoittaa tuon luvun muodossa usage.prompt_tokens Chat Completionsissa, usage.input_tokens Responsesissa ja usage.input_tokens plus usage.cache_read_input_tokens Messagesissa.
- Määrä on syöte ennen välimuistisyötteen alennusta. Todellinen pyyntö voi lukea osan syötteestä välimuistista ja laskuttaa sen välimuistihinnalla. Prompt-välimuistitus
- Kuva, joka annetaan
http(s)-URL:na, lasketaan tässä 1,024:ksi. Todellinen pyyntö lataa kuvan ja laskee sen pikselikoosta, joten luvut voivat poiketa toisistaan. Lähetä kuva base64-koodattuna saadaksesi saman luvun. - Tuloste ei kuulu laskentaan. Todellisen pyynnön vastaus laskutetaan tulostetokeneina lisäksi, päättely mukaan lukien.
text-laskennassa ei ole chat-muotoilua. Käytä sitä dokumentin tai promptin osan mittaamiseen jamessages-muotoa pyynnön mittaamiseen.
Muuntaaksesi määrän kustannukseksi kerro se mallin syötehinnalla per 1M tokenia. Mallit ja hinnoittelu
Rajat
| Raja | Arvo | Sen yli |
|---|---|---|
Kentän text pituus | 4,000,000 tavua (UTF-8) | 413 viestillä text too long |
| Pyynnön runko | 32 MiB | 413 |
| Pyyntöä kohti | Yksi teksti tai yksi keskustelu | Jos haluat laskea useita tekstejä, lähetä yksi pyyntö tekstiä kohti. |
Laskentakutsuja ei lasketa mukaan 120 pyynnön minuuttirajaan. Rajat ja saldo
Virheet
| Tila | Tyyppi | Viesti | Milloin |
|---|---|---|---|
400 | invalid_request_error | tokenize is available for the hosted open models; unknown model: <model> | /v1/tokenize kentällä model, joka ei ole hostatun avoimen painon mallin id. |
400 | invalid_request_error | count_tokens is available for the hosted open models; unknown model: <model> | /v1/messages/count_tokens kentällä model, joka ei ole hostatun avoimen painon mallin id, tai ilman model-kenttää. |
400 | invalid_request_error | send `text` or `messages` | /v1/tokenize ilman text- tai messages-kenttää. |
401 | authentication_error | Missing authentication / Invalid API key | Avainta ei lähetetty, tai avain ei kelpaa. |
413 | invalid_request_error | text too long | text on pidempi kuin 4,000,000 tavua. Myös yli 32 MiB:n runkoon vastataan 413:lla. |
415 | invalid_request_error | Expected request with `Content-Type: application/json` | Pyynnössä ei ole JSON-sisältötyyppiä. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | Pakollinen kenttä puuttuu (model päätepisteessä /v1/tokenize, messages päätepisteessä /v1/messages/count_tokens) tai kentän tyyppi on väärä. |
503 | api_error | token counting is temporarily unavailable for this model | Laskentaa ei voida tehdä tälle mallille juuri nyt. Yritä myöhemmin uudelleen. |
/v1/tokenize palauttaa virheet OpenAI-muodossa. Päätepisteessä /v1/messages/count_tokens päätepisteen omat virheet (400 mallille, 503) tulevat Anthropic-muodossa, ja 401, 413, 415 ja 422 tulevat OpenAI-muodossa. Lue ensin tilakoodi, sitten error.type ja error.message, jotka ovat mukana molemmissa muodoissa.
{
"error": {
"type": "invalid_request_error",
"message": "tokenize is available for the hosted open models; unknown model: shannon-3"
}
} {
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "count_tokens is available for the hosted open models; unknown model: shannon-3"
}
}