Kalkulado de tokenoj
Kalkulu la tokenojn de teksto aŭ de tuta peto antaŭ ol sendi ĝin.
POST https://api.shannon-ai.com/v1/tokenize
POST https://api.shannon-ai.com/v1/messages/count_tokens
Ambaŭ endpoints kalkulas per la tokenizilo de la modelo, kiun vi nomas, kaj neniu modelo funkcias. Ili kovras la gastigitajn malfermpezajn modelojn. /v1/tokenize akceptas simplan tekston aŭ konversacion de Chat Completions. /v1/messages/count_tokens akceptas peton en la formato Anthropic Messages, tio estas la voko, kiun la SDK de Anthropic kaj Claude Code faras.
Kalkulado estas senpaga. Voko bezonas vian API-ŝlosilon, prenas nenion el via saldo kaj ne aperas en via protokolo de uzado.
Kalkuli tekston
Sendu model kaj text. La teksto estas kalkulata tia, kia ĝi estas, sen babila formatado ĉirkaŭ ĝi.
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
} La nombroj en la respondoj en ĉi tiu paĝo estas ekzemploj. La sama teksto donas alian kalkulon ĉe alia modelo.
Kalkuli babilan peton
Sendu model kaj messages, kun tools kiam la peto havas ilin, ĝuste kiel vi sendus ilin al /v1/chat/completions. La respondo estas la grando de la tuta enigo.
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
} Kampoj de /v1/tokenize
| Kampo | Tipo | Priskribo |
|---|---|---|
model | string | Deviga. Id de gastigita malfermpeza modelo. Majuskloj kaj minuskloj estas traktataj same. |
text | string | Teksto kalkulenda tia, kia ĝi estas, sen babila formatado. Ĝis 4,000,000 bajtoj. Sendu text aŭ messages; kiam ambaŭ ĉeestas, text estas kalkulata. |
messages | array | Babilaj mesaĝoj en la formato Chat Completions. Ili estas kalkulataj kiel la plena enigo de peto: ĉiu mesaĝo kun la formatado, kiun la babila ŝablono de la modelo metas ĉirkaŭ ĝi. |
tools | array | Difinoj de iloj inkluzivendaj en la kalkulo. Uzataj kune kun messages. |
La respondo estas JSON-objekto kun ĉi tiuj kampoj:
| Kampo | Tipo | Priskribo |
|---|---|---|
model | string | La model-id, por kiu la kalkulo estis farita, en sia publikigita literumo. |
tokens | integer | Kun text: la tokenoj de la teksto. Kun messages: la tokenoj de la tuta enigo, bildoj inkluzive. |
Kalkuli peton Messages
Sendu la korpon, kiun vi sendus al /v1/messages: model, messages, kaj system kaj tools kiam vi uzas ilin. La oficialaj SDK de Anthropic vokas ĉi tiun endpoint per 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
} Kampoj de /v1/messages/count_tokens
| Kampo | Tipo | Priskribo |
|---|---|---|
model | string | Deviga. Id de gastigita malfermpeza modelo. |
messages | array | Deviga. Mesaĝoj en la formato Anthropic Messages. Blokoj text, image, tool_use kaj tool_result estas kalkulataj. |
system | string | array | La sistema prompt: ĉeno aŭ tabelo de tekstblokoj. |
tools | array | Difinoj de iloj kun name, description kaj input_schema. |
Akceptitaj pro kongrueco, sen efiko sur la kalkulo: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. Vi povas transdoni la korpon de vera peto senŝanĝe.
La respondo estas JSON-objekto kun ĉi tiuj kampoj:
| Kampo | Tipo | Priskribo |
|---|---|---|
input_tokens | integer | La tokenoj de la tuta enigo: sistema prompt, mesaĝoj, iloj kaj bildoj. |
Subtenataj modeloj
Ambaŭ endpoints kalkulas por la gastigitaj malfermpezaj modeloj. GET /v1/models listigas /v1/tokenize kaj /v1/messages/count_tokens en la endpoints de ĉiu modelo, kiu subtenas ilin. Ĉiu alia valoro de model, Shannon-id inkluzive, ricevas respondon 400.
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
Por Shannon-modelo, legu la nombrojn de tokenoj el la objekto usage de respondo.
Kiel la kalkulo estas farata
Ĉiu modelo estas kalkulata per sia propra tokenizilo kaj sia propra babila ŝablono. Neniu takso laŭ signoj aŭ vortoj estas uzata.
| Kio estas kalkulata | Regulo |
|---|---|
| Teksto | La tokenoj de la ĉeno tia, kia ĝi estas sendita. Malplena ĉeno kalkuliĝas kiel 0. |
| Mesaĝoj | La mesaĝoj kaj iloj estas aranĝataj per la propra babila ŝablono de la modelo, ĝis la punkto, kie la respondo komenciĝas, kaj tiu tuta prompt estas kalkulata. |
| Roloj | Mesaĝoj system, user, assistant kaj tool estas kalkulataj. developer estas kalkulata kiel system. Mesaĝo sen enhavo kaj sen voko de ilo aldonas nenion. |
| Vokoj de iloj kaj rezultoj | Vokoj de iloj de pli fruaj vicoj de la asistanto kaj iliaj rezultoj estas parto de la kalkulo, ĉe ambaŭ endpoints. |
| Bildoj | Bildo sendita ene de la korpo (base64 aŭ URL data:) aldonas unu tokenon por peceto de 28 × 28 pikseloj: ceil(width / 28) × ceil(height / 28). Bildo donita kiel URL http(s) ne estas elŝutata de ĉi tiuj endpoints kaj kalkuliĝas kiel 1,024. |
Ekzemplo: bildo de 1,024 × 768 pikseloj kalkuliĝas kiel ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 tokenoj.
La kalkulo kaj kio estas kalkulata por peto
La kalkulo de tuta peto estas farata same kiel la enig-kalkulo de vera peto kun la sama modelo, mesaĝoj kaj iloj. Respondo raportas tiun nombron kiel usage.prompt_tokens ĉe Chat Completions, kiel usage.input_tokens ĉe Responses, kaj kiel usage.input_tokens plus usage.cache_read_input_tokens ĉe Messages.
- La kalkulo estas la enigo antaŭ la rabato por kaŝmemorita enigo. Vera peto povas legi parton de tiu enigo el la kaŝmemoro kaj kalkuli tiun parton laŭ la kaŝmemorita prezo. Prompt-kaŝado
- Bildo donita kiel URL
http(s)kalkuliĝas ĉi tie kiel 1,024. Vera peto elŝutas la bildon kaj kalkulas ĝin laŭ ĝia grando en pikseloj, do la du nombroj povas malsami. Sendu la bildon kiel base64 por ricevi la saman nombron. - Eligo ne estas parto de la kalkulo. La respondo de vera peto estas kalkulata krome kiel eligaj tokenoj, rezonado inkluzive.
- Kalkulo de
textne havas babilan formatadon. Uzu ĝin por mezuri dokumenton aŭ parton de prompt, kaj la formonmessagespor mezuri peton.
Por ŝanĝi kalkulon en koston, multipliku ĝin per la enig-prezo de la modelo por 1M tokenoj. Modeloj kaj prezoj
Limoj
| Limo | Valoro | Super ĝi |
|---|---|---|
Longeco de text | 4,000,000 bajtoj (UTF-8) | 413 kun la mesaĝo text too long |
| Korpo de peto | 32 MiB | 413 |
| Por peto | Unu teksto aŭ unu konversacio | Por kalkuli plurajn tekstojn, sendu unu peton por teksto. |
Kalkulaj vokoj ne kalkuliĝas en la limon de 120 petoj por minuto. Limoj kaj saldo
Eraroj
| Stato | Tipo | Mesaĝo | Kiam |
|---|---|---|---|
400 | invalid_request_error | tokenize is available for the hosted open models; unknown model: <model> | /v1/tokenize kun model, kiu ne estas id de gastigita malfermpeza modelo. |
400 | invalid_request_error | count_tokens is available for the hosted open models; unknown model: <model> | /v1/messages/count_tokens kun model, kiu ne estas id de gastigita malfermpeza modelo, aŭ sen model. |
400 | invalid_request_error | send `text` or `messages` | /v1/tokenize sen text kaj sen messages. |
401 | authentication_error | Missing authentication / Invalid API key | Neniu ŝlosilo estis sendita, aŭ la ŝlosilo ne validas. |
413 | invalid_request_error | text too long | text estas pli longa ol 4,000,000 bajtoj. Korpo super 32 MiB ricevas ankaŭ respondon 413. |
415 | invalid_request_error | Expected request with `Content-Type: application/json` | La peto ne havas JSON-enhavtipon. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | Deviga kampo mankas (model ĉe /v1/tokenize, messages ĉe /v1/messages/count_tokens) aŭ kampo havas malĝustan tipon. |
503 | api_error | token counting is temporarily unavailable for this model | La kalkulo ne povas esti farata por ĉi tiu modelo en la momento. Reprovu poste. |
/v1/tokenize redonas erarojn en la formo de OpenAI. Ĉe /v1/messages/count_tokens la eraroj de la endpoint mem (400 pro la modelo, 503) venas en la formo de Anthropic, kaj 401, 413, 415 kaj 422 venas en la formo de OpenAI. Legu unue la statokodon, poste error.type kaj error.message, kiuj ĉeestas en ambaŭ formoj.
{
"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"
}
}