Numërimi i tokens-ave
Numëroni tokens-at e një teksti ose të një kërkese të tërë para se ta dërgoni.
POST https://api.shannon-ai.com/v1/tokenize
POST https://api.shannon-ai.com/v1/messages/count_tokens
Të dy endpoint-et numërojnë me tokenizuesin e modelit që emërtoni, dhe nuk ekzekutohet asnjë model. Mbulojnë modelet open-weight të hostuara. /v1/tokenize pranon një tekst të thjeshtë ose një bisedë Chat Completions. /v1/messages/count_tokens pranon një kërkesë në formatin Anthropic Messages, që është thirrja që bëjnë SDK-ja Anthropic dhe Claude Code.
Numërimi është falas. Një thirrje kërkon çelësin tuaj API, nuk merr asgjë nga bilanci juaj dhe nuk shfaqet në regjistrin tuaj të përdorimit.
Numëroni një tekst
Dërgoni model dhe text. Teksti numërohet siç është, pa formatim bisede rreth tij.
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
} Numrat në përgjigjet e kësaj faqeje janë shembuj. I njëjti tekst jep një numërim tjetër në një model tjetër.
Numëroni një kërkesë bisede
Dërgoni model dhe messages, me tools kur kërkesa i ka, saktësisht siç do t'i dërgonit te /v1/chat/completions. Përgjigjja është madhësia e gjithë hyrjes.
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
} Fushat e /v1/tokenize
| Fusha | Lloji | Përshkrimi |
|---|---|---|
model | string | E detyrueshme. Një id modeli open-weight i hostuar. Shkronjat e mëdha dhe të vogla trajtohen njësoj. |
text | string | Një tekst që numërohet siç është, pa formatim bisede. Deri në 4,000,000 bajte. Dërgoni text ose messages; kur janë të dyja të pranishme, numërohet text. |
messages | array | Mesazhe bisede në formatin Chat Completions. Numërohen si hyrja e plotë e një kërkese: çdo mesazh me formatimin që shablloni i bisedës së modelit vendos rreth tij. |
tools | array | Përkufizime mjetesh që përfshihen në numërim. Përdoret së bashku me messages. |
Përgjigjja është një objekt JSON me këto fusha:
| Fusha | Lloji | Përshkrimi |
|---|---|---|
model | string | Id-ja e modelit për të cilin u bë numërimi, në shkrimin e saj të publikuar. |
tokens | integer | Me text: tokens-at e tekstit. Me messages: tokens-at e gjithë hyrjes, imazhet e përfshira. |
Numëroni një kërkesë Messages
Dërgoni trupin që do t'i dërgonit te /v1/messages: model, messages, dhe system e tools kur i përdorni. SDK-të zyrtare Anthropic e thërrasin këtë endpoint përmes 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
} Fushat e /v1/messages/count_tokens
| Fusha | Lloji | Përshkrimi |
|---|---|---|
model | string | E detyrueshme. Një id modeli open-weight i hostuar. |
messages | array | E detyrueshme. Mesazhe në formatin Anthropic Messages. Numërohen blloqet text, image, tool_use dhe tool_result. |
system | string | array | System prompt-i: një string ose një varg blloqesh teksti. |
tools | array | Përkufizime mjetesh me name, description dhe input_schema. |
Pranohen për pajtueshmëri, pa efekt në numërim: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. Mund ta kaloni të pandryshuar trupin e një kërkese të vërtetë.
Përgjigjja është një objekt JSON me këto fusha:
| Fusha | Lloji | Përshkrimi |
|---|---|---|
input_tokens | integer | Tokens-at e gjithë hyrjes: system prompt-i, mesazhet, mjetet dhe imazhet. |
Modelet e mbështetura
Të dy endpoint-et numërojnë për modelet open-weight të hostuara. GET /v1/models liston /v1/tokenize dhe /v1/messages/count_tokens te endpoints të çdo modeli që i mbështet. Çdo vlerë tjetër model, përfshirë id-të Shannon, merr përgjigje 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
Për një model Shannon, lexoni numërimet e tokens-ave nga objekti usage i një përgjigjeje.
Si bëhet numërimi
Çdo model numërohet me tokenizuesin e vet dhe shabllonin e vet të bisedës. Nuk përdoret asnjë vlerësim nga shkronjat ose fjalët.
| Çfarë numërohet | Rregulli |
|---|---|
| Një tekst | Tokens-at e stringut siç dërgohet. Një string bosh numëron 0. |
| Mesazhet | Mesazhet dhe mjetet vendosen me shabllonin e vetë modelit të bisedës, deri te pika ku fillon përgjigjja, dhe i gjithë ai prompt numërohet. |
| Rolet | Numërohen mesazhet system, user, assistant dhe tool. developer numërohet si system. Një mesazh pa përmbajtje dhe pa thirrje mjeti nuk shton asgjë. |
| Thirrjet e mjeteve dhe rezultatet | Thirrjet e mjeteve të radhëve të mëparshme të assistant dhe rezultatet e tyre janë pjesë e numërimit, në të dy endpoint-et. |
| Imazhet | Një imazh i dërguar brenda trupit (base64 ose URL data:) shton një token për çdo copë 28 × 28 pikselë: ceil(width / 28) × ceil(height / 28). Një imazh i dhënë si URL http(s) nuk shkarkohet nga këta endpoint-e dhe numëron 1,024. |
Shembull: një imazh 1,024 × 768 pikselë numëron ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 tokens.
Numërimi dhe çfarë faturohet një kërkesë
Numërimi i një kërkese të tërë bëhet në të njëjtën mënyrë si numërimi i hyrjes së një kërkese të vërtetë me të njëjtin model, mesazhe dhe mjete. Një përgjigje e raporton atë numër si usage.prompt_tokens te Chat Completions, si usage.input_tokens te Responses, dhe si usage.input_tokens plus usage.cache_read_input_tokens te Messages.
- Numërimi është hyrja para uljes për hyrjen e ruajtur në cache. Një kërkesë e vërtetë mund të lexojë një pjesë të asaj hyrjeje nga cache-i dhe ta faturojë atë pjesë me tarifën e cache-it. Caching i prompt-it
- Një imazh i dhënë si URL
http(s)numëron 1,024 këtu. Një kërkesë e vërtetë e shkarkon imazhin dhe e numëron sipas madhësisë së tij në pikselë, prandaj dy numrat mund të ndryshojnë. Dërgojeni imazhin si base64 për të marrë të njëjtin numër. - Dalja nuk është pjesë e numërimit. Përgjigjja e një kërkese të vërtetë faturohet si tokens dalje përveç kësaj, arsyetimi i përfshirë.
- Një numërim
textnuk ka formatim bisede. Përdoreni për të matur një dokument ose një pjesë prompt-i, dhe formënmessagespër të matur një kërkesë.
Për ta kthyer një numërim në kosto, shumëzojeni me çmimin e hyrjes së modelit për 1M tokens. Modelet dhe çmimet
Kufijtë
| Kufiri | Vlera | Mbi të |
|---|---|---|
Gjatësia e text | 4,000,000 bajte (UTF-8) | 413 me mesazhin text too long |
| Trupi i kërkesës | 32 MiB | 413 |
| Për kërkesë | Një tekst ose një bisedë | Dërgoni një kërkesë për tekst për të numëruar disa tekste. |
Thirrjet e numërimit nuk numërohen te kufiri prej 120 kërkesash në minutë. Kufijtë dhe bilanci
Gabimet
| Statusi | Lloji | Mesazhi | Kur |
|---|---|---|---|
400 | invalid_request_error | tokenize is available for the hosted open models; unknown model: <model> | /v1/tokenize me një model që nuk është id open-weight e hostuar. |
400 | invalid_request_error | count_tokens is available for the hosted open models; unknown model: <model> | /v1/messages/count_tokens me një model që nuk është id open-weight e hostuar, ose pa model. |
400 | invalid_request_error | send `text` or `messages` | /v1/tokenize pa text dhe pa messages. |
401 | authentication_error | Missing authentication / Invalid API key | Nuk u dërgua çelës, ose çelësi nuk është i vlefshëm. |
413 | invalid_request_error | text too long | text është më i gjatë se 4,000,000 bajte. Një trup mbi 32 MiB merr gjithashtu përgjigje 413. |
415 | invalid_request_error | Expected request with `Content-Type: application/json` | Kërkesa nuk ka lloj përmbajtjeje JSON. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | Mungon një fushë e detyrueshme (model te /v1/tokenize, messages te /v1/messages/count_tokens) ose një fushë ka lloj të gabuar. |
503 | api_error | token counting is temporarily unavailable for this model | Numërimi nuk mund të bëhet për këtë model për momentin. Provoni përsëri më vonë. |
/v1/tokenize i kthen gabimet në formën OpenAI. Në /v1/messages/count_tokens gabimet e vetë endpoint-it (400 për modelin, 503) vijnë në formën Anthropic, dhe 401, 413, 415 e 422 vijnë në formën OpenAI. Lexoni fillimisht kodin e statusit, pastaj error.type dhe error.message, që janë të pranishme në të dyja format.
{
"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"
}
}