Токендерді санау
Мәтіннің немесе бүкіл сұраудың токендерін жіберместен бұрын санаңыз.
POST https://api.shannon-ai.com/v1/tokenize
POST https://api.shannon-ai.com/v1/messages/count_tokens
Екі endpoint те өзіңіз атаған модельдің токенизаторымен санайды, ешқандай модель іске қосылмайды. Олар hosted open-weight модельдерді қамтиды. /v1/tokenize жай мәтінді немесе Chat Completions сөйлесуін қабылдайды. /v1/messages/count_tokens Anthropic Messages форматындағы сұрауды қабылдайды, Anthropic SDK мен Claude Code дәл осыны шақырады.
Санау тегін. Шақыру үшін API кілтіңіз қажет, балансыңыздан ештеңе алынбайды және қолдану журналында көрінбейді.
Мәтінді санау
model және text жіберіңіз. Мәтін айналасында чат пішімдеуінсіз, сол күйінде саналады.
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
} Осы беттегі жауаптардағы сандар — мысалдар. Бірдей мәтін басқа модельде басқа санды береді.
Чат сұрауын санау
model және messages жіберіңіз, сұрауда болса tools да, дәл /v1/chat/completions үшін жібергендей. Жауап — бүкіл кірістің көлемі.
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
} /v1/tokenize өрістері
| Өріс | Түрі | Сипаттама |
|---|---|---|
model | string | Міндетті. Hosted open-weight модельдің идентификаторы (id). Бас және кіші әріптер бірдей қаралады. |
text | string | Чат пішімдеуінсіз, сол күйінде санайтын мәтін. 4,000,000 байтқа дейін. text немесе messages жіберіңіз; екеуі де болса, text саналады. |
messages | array | Chat Completions форматындағы чат хабарламалары. Олар сұраудың толық кірісі ретінде саналады: әр хабарлама модельдің чат үлгісі оның айналасына қоятын пішімдеумен. |
tools | array | Санауға қосылатын құрал анықтамалары. messages мәнімен бірге қолданылады. |
Жауап осы өрістері бар JSON нысаны:
| Өріс | Түрі | Сипаттама |
|---|---|---|
model | string | Санау жасалған модель id-і, жарияланған жазылуымен. |
tokens | integer | text болса: мәтіннің токендері. messages болса: бүкіл кірістің токендері, суреттерді қоса. |
Messages сұрауын санау
/v1/messages үшін жіберетін денені жіберіңіз: model, messages, ал қолдансаңыз system және tools. Ресми Anthropic SDK-лары бұл endpoint-ті 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
} /v1/messages/count_tokens endpoint-інің өрістері
| Өріс | Түрі | Сипаттама |
|---|---|---|
model | string | Міндетті. Hosted open-weight модельдің идентификаторы (id). |
messages | array | Міндетті. Anthropic Messages форматындағы хабарламалар. text, image, tool_use және tool_result блоктары саналады. |
system | string | array | System prompt: жол немесе мәтін блоктарының массиві. |
tools | array | name, description және input_schema бар құрал анықтамалары. |
Үйлесімділік үшін қабылданады, санауға әсер етпейді: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. Нақты сұрау денесін өзгеріссіз бере аласыз.
Жауап осы өрістері бар JSON нысаны:
| Өріс | Түрі | Сипаттама |
|---|---|---|
input_tokens | integer | Бүкіл кірістің токендері: system prompt, хабарламалар, құралдар және суреттер. |
Қолдау көрсетілетін модельдер
Екі endpoint те hosted open-weight модельдер үшін санайды. GET /v1/models оларды қолдайтын әр модельдің endpoints ішінде /v1/tokenize және /v1/messages/count_tokens тізеді. Кез келген басқа model мәніне, Shannon id-лерін қоса, 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
Shannon моделі үшін токен сандарын жауаптың usage нысанынан оқыңыз.
Санау қалай жасалады
Әр модель өз токенизаторымен және өз чат үлгісімен саналады. Таңбалар немесе сөздер бойынша бағалау қолданылмайды.
| Не саналады | Ереже |
|---|---|
| Мәтін | Жолдың жіберілген күйіндегі токендері. Бос жол 0 болып саналады. |
| Хабарламалар | Хабарламалар мен құралдар модельдің өз чат үлгісімен, жауап басталатын жерге дейін орналастырылады, және сол бүкіл prompt саналады. |
| Рөлдер | system, user, assistant және tool хабарламалары саналады. developer system ретінде саналады. Мазмұны да, құрал шақыруы да жоқ хабарлама ештеңе қоспайды. |
| Құрал шақырулары мен нәтижелері | Алдыңғы assistant кезеңдерінің құрал шақырулары мен олардың нәтижелері екі endpoint-те де санаудың бөлігі болады. |
| Суреттер | Дене ішінде жіберілген сурет (base64 немесе data: URL) әр 28 × 28 пиксельдік патчқа бір токен қосады: ceil(width / 28) × ceil(height / 28). http(s) URL ретінде берілген суретті бұл endpoint-тер жүктемейді және 1,024 деп санайды. |
Мысал: 1,024 × 768 пиксельдік сурет ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 токен болып саналады.
Санау және сұраудан не алынады
Бүкіл сұрауды санау дәл сол модельмен, хабарламалармен және құралдармен нақты сұраудың кіріс санауы сияқты жасалады. Жауап бұл санды Chat Completions бойынша usage.prompt_tokens, Responses бойынша usage.input_tokens, ал Messages бойынша usage.input_tokens плюс usage.cache_read_input_tokens ретінде көрсетеді.
- Сан — кэштелген кіріс жеңілдігіне дейінгі кіріс. Нақты сұрау сол кірістің бір бөлігін кэштен оқып, ол бөлікті кэштелген бағамен есептеуі мүмкін. Промпт кэштеу
http(s)URL ретінде берілген сурет мұнда 1,024 деп есептеледі. Нақты сұрау суретті жүктеп алады және оны пиксельдегі көлемінен санайды, сондықтан екі сан әртүрлі болуы мүмкін. Бірдей сан алу үшін суретті base64 ретінде жіберіңіз.- Шығыс санға кірмейді. Нақты сұраудың жауабына үстіне шығыс токендері ретінде, пайымдауды қоса, төленеді.
textсанауында чат пішімдеуі жоқ. Оны құжатты немесе prompt бөлігін өлшеу үшін, алmessagesтүрін сұрауды өлшеу үшін қолданыңыз.
Санды құнға айналдыру үшін оны модельдің 1M токен үшін кіріс бағасына көбейтіңіз. Модельдер және бағалар
Лимиттер
| Лимит | Мән | Одан асқанда |
|---|---|---|
text ұзындығы | 4,000,000 байт (UTF-8) | text too long хабарламасымен 413 |
| Сұрау денесі | 32 MiB | 413 |
| Бір сұрауға | Бір мәтін немесе бір сөйлесу | Бірнеше мәтінді санау үшін әр мәтінге бір сұрау жіберіңіз. |
Санау шақырулары минутына 120 сұрау лимитіне есептелмейді. Шектеулер және баланс
Қателер
| Мәртебе | Түрі | Хабарлама | Қашан |
|---|---|---|---|
400 | invalid_request_error | tokenize is available for the hosted open models; unknown model: <model> | /v1/tokenize, model мәні hosted open-weight id емес. |
400 | invalid_request_error | count_tokens is available for the hosted open models; unknown model: <model> | /v1/messages/count_tokens, model мәні hosted open-weight id емес, немесе model жоқ. |
400 | invalid_request_error | send `text` or `messages` | /v1/tokenize, text та, messages те жоқ. |
401 | authentication_error | Missing authentication / Invalid API key | Кілт жіберілмеді, немесе кілт жарамсыз. |
413 | invalid_request_error | text too long | text 4,000,000 байттан ұзын. 32 MiB-тан үлкен денеге де 413 жауап беріледі. |
415 | invalid_request_error | Expected request with `Content-Type: application/json` | Сұрауда JSON мазмұн түрі жоқ. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | Міндетті өріс жоқ (/v1/tokenize бойынша model, /v1/messages/count_tokens бойынша messages) немесе өрістің түрі қате. |
503 | api_error | token counting is temporarily unavailable for this model | Санауды бұл модель үшін қазір жасау мүмкін емес. Кейінірек қайталап көріңіз. |
/v1/tokenize қателерді OpenAI пішімінде қайтарады. /v1/messages/count_tokens бойынша endpoint-тің өз қателері (модель үшін 400, 503) Anthropic пішімінде, ал 401, 413, 415 және 422 OpenAI пішімінде келеді. Алдымен мәртебе кодын, содан кейін екі пішімде де бар error.type және error.message мәндерін оқыңыз.
{
"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"
}
}