Kuhesabu tokens
Hesabu tokens za maandishi au za ombi zima kabla ya kulituma.
POST https://api.shannon-ai.com/v1/tokenize
POST https://api.shannon-ai.com/v1/messages/count_tokens
Endpoint zote mbili huhesabu kwa tokenizer ya model unayotaja, na hakuna model inayoendeshwa. Zinashughulikia model za open-weight zinazopangishwa. /v1/tokenize inakubali maandishi matupu au mazungumzo ya Chat Completions. /v1/messages/count_tokens inakubali ombi kwa umbizo la Anthropic Messages, ambalo ni wito ambao SDK ya Anthropic na Claude Code hufanya.
Kuhesabu ni bure. Wito unahitaji API key yako, hauchukui chochote kutoka kwenye salio lako na hauonekani kwenye usage log yako.
Hesabu maandishi
Tuma model na text. Maandishi huhesabiwa kama yalivyo, bila uumbizaji wa chat kuyazunguka.
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
} Namba kwenye majibu ya ukurasa huu ni mifano. Maandishi yale yale hutoa hesabu tofauti kwenye model tofauti.
Hesabu ombi la chat
Tuma model na messages, pamoja na tools ombi likiwa nazo, kama ungezituma kwa /v1/chat/completions. Jibu ni ukubwa wa input nzima.
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
} Fields za /v1/tokenize
| Field | Aina | Maelezo |
|---|---|---|
model | string | Inahitajika. Model id ya open-weight inayopangishwa. Herufi kubwa na ndogo huchukuliwa sawa. |
text | string | Maandishi ya kuhesabu kama yalivyo, bila uumbizaji wa chat. Hadi bytes 4,000,000. Tuma text au messages; zote zikiwepo, text ndiyo inayohesabiwa. |
messages | array | Ujumbe wa chat kwa umbizo la Chat Completions. Huhesabiwa kama input kamili ya ombi: kila ujumbe pamoja na uumbizaji ambao chat template ya model huuweka kuuzunguka. |
tools | array | Ufafanuzi wa tools wa kujumuisha kwenye hesabu. Hutumika pamoja na messages. |
Jibu ni kitu cha JSON chenye fields hizi:
| Field | Aina | Maelezo |
|---|---|---|
model | string | Model id ambayo hesabu ilifanywa kwa ajili yake, kwa tahajia yake iliyochapishwa. |
tokens | integer | Kwa text: tokens za maandishi. Kwa messages: tokens za input nzima, picha zikijumuishwa. |
Hesabu ombi la Messages
Tuma mwili ambao ungetuma kwa /v1/messages: model, messages, na system na tools ukizitumia. SDK rasmi za Anthropic huita endpoint hii kupitia 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
} Fields za /v1/messages/count_tokens
| Field | Aina | Maelezo |
|---|---|---|
model | string | Inahitajika. Model id ya open-weight inayopangishwa. |
messages | array | Inahitajika. Ujumbe kwa umbizo la Anthropic Messages. Blocks za text, image, tool_use na tool_result huhesabiwa. |
system | string | array | System prompt: string au array ya blocks za maandishi. |
tools | array | Ufafanuzi wa tools wenye name, description na input_schema. |
Zinakubaliwa kwa ulinganifu, bila athari kwenye hesabu: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. Unaweza kupitisha mwili wa ombi halisi bila mabadiliko.
Jibu ni kitu cha JSON chenye fields hizi:
| Field | Aina | Maelezo |
|---|---|---|
input_tokens | integer | Tokens za input nzima: system prompt, messages, tools na picha. |
Model zinazoungwa mkono
Endpoint zote mbili huhesabu kwa model za open-weight zinazopangishwa. GET /v1/models inaorodhesha /v1/tokenize na /v1/messages/count_tokens kwenye endpoints za kila model inayozikubali. Thamani nyingine yoyote ya model, pamoja na id za Shannon, hujibiwa kwa 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
Kwa model ya Shannon, soma hesabu za tokens kutoka kwenye kitu cha usage cha jibu.
Jinsi hesabu inavyofanywa
Kila model huhesabiwa kwa tokenizer yake na chat template yake. Hakuna makadirio kutoka kwa herufi au maneno yanayotumika.
| Nini kinahesabiwa | Kanuni |
|---|---|
| Maandishi | Tokens za string kama ilivyotumwa. String tupu huhesabiwa 0. |
| Ujumbe | Messages na tools hupangwa kwa chat template ya model yenyewe, hadi mahali jibu linapoanzia, na prompt hiyo yote huhesabiwa. |
| Roles | Ujumbe wa system, user, assistant na tool huhesabiwa. developer huhesabiwa kama system. Ujumbe usio na maudhui na usio na wito wa tool haongezi chochote. |
| Wito wa tools na matokeo | Wito wa tools wa zamu za awali za assistant na matokeo yake ni sehemu ya hesabu, kwenye endpoint zote mbili. |
| Picha | Picha iliyotumwa ndani ya mwili (base64 au URL ya data:) huongeza token moja kwa kila kipande cha pikseli 28 × 28: ceil(width / 28) × ceil(height / 28). Picha iliyotolewa kama URL ya http(s) haipakuliwi na endpoint hizi na huhesabiwa 1,024. |
Mfano: picha ya pikseli 1,024 × 768 inahesabiwa ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = tokens 1,036.
Hesabu na kinachotozwa kwa ombi
Hesabu ya ombi zima hufanywa kwa njia ile ile kama hesabu ya input ya ombi halisi lenye model, messages na tools zile zile. Jibu huripoti namba hiyo kama usage.prompt_tokens kwenye Chat Completions, kama usage.input_tokens kwenye Responses, na kama usage.input_tokens pamoja na usage.cache_read_input_tokens kwenye Messages.
- Hesabu ni input kabla ya punguzo la input iliyokeshwa. Ombi halisi linaweza kusoma sehemu ya input hiyo kutoka cache na kutoza sehemu hiyo kwa bei ya cached. Kukesha kwa prompt
- Picha iliyotolewa kama URL ya
http(s)huhesabiwa 1,024 hapa. Ombi halisi hupakua picha na kuihesabu kutoka ukubwa wake kwa pikseli, kwa hiyo namba hizo mbili zinaweza kutofautiana. Tuma picha kama base64 ili kupata namba ile ile. - Output si sehemu ya hesabu. Jibu la ombi halisi hutozwa kama tokens za output juu yake, reasoning ikijumuishwa.
- Hesabu ya
texthaina uumbizaji wa chat. Itumie kupima hati au sehemu ya prompt, na umbo lamessageskupima ombi.
Ili kubadilisha hesabu kuwa gharama, izidishe kwa bei ya input ya model kwa tokens 1M. Model na bei
Mipaka
| Kikomo | Thamani | Juu yake |
|---|---|---|
Urefu wa text | Bytes 4,000,000 (UTF-8) | 413 na ujumbe text too long |
| Mwili wa ombi | 32 MiB | 413 |
| Kwa kila ombi | Maandishi moja au mazungumzo moja | Tuma ombi moja kwa kila maandishi ili kuhesabu maandishi kadhaa. |
Wito wa kuhesabu hauhesabiwi kwenye kikomo cha maombi 120 kwa dakika. Mipaka na salio
Makosa
| Hali | Aina | Ujumbe | Lini |
|---|---|---|---|
400 | invalid_request_error | tokenize is available for the hosted open models; unknown model: <model> | /v1/tokenize na model ambayo si id ya open-weight inayopangishwa. |
400 | invalid_request_error | count_tokens is available for the hosted open models; unknown model: <model> | /v1/messages/count_tokens na model ambayo si id ya open-weight inayopangishwa, au bila model. |
400 | invalid_request_error | send `text` or `messages` | /v1/tokenize bila text wala messages. |
401 | authentication_error | Missing authentication / Invalid API key | Hakuna key iliyotumwa, au key si halali. |
413 | invalid_request_error | text too long | text ni ndefu kuliko bytes 4,000,000. Mwili unaozidi 32 MiB pia hujibiwa kwa 413. |
415 | invalid_request_error | Expected request with `Content-Type: application/json` | Ombi halina content type ya JSON. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | Field inayohitajika haipo (model kwenye /v1/tokenize, messages kwenye /v1/messages/count_tokens) au field ina aina isiyo sahihi. |
503 | api_error | token counting is temporarily unavailable for this model | Hesabu haiwezi kufanywa kwa model hii kwa sasa. Jaribu tena baadaye. |
/v1/tokenize hurudisha makosa kwa umbo la OpenAI. Kwenye /v1/messages/count_tokens makosa ya endpoint yenyewe (400 kwa model, 503) huja kwa umbo la Anthropic, na 401, 413, 415 na 422 huja kwa umbo la OpenAI. Soma status code kwanza, kisha error.type na error.message, ambazo zipo katika maumbo yote mawili.
{
"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"
}
}