ტოკენების დათვლა
დათვალეთ ტექსტის ან მთელი მოთხოვნის ტოკენები გაგზავნამდე.
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-ის მოთხოვნის ველები
| ველი | ტიპი | აღწერა |
|---|---|---|
model | string | აუცილებელია. hosted open-weight მოდელის იდენტიფიკატორი (id). |
messages | array | აუცილებელია. შეტყობინებები Anthropic Messages ფორმატში. ითვლება text, image, tool_use და tool_result ბლოკები. |
system | string | array | სისტემური პრომპტი: სტრიქონი ან ტექსტური ბლოკების მასივი. |
tools | array | ინსტრუმენტების განსაზღვრებები name-ით, description-ით და input_schema-თი. |
მიიღება თავსებადობისთვის და დათვლაზე გავლენას არ ახდენს: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. რეალური მოთხოვნის სხეული უცვლელად გადაგეცემათ.
პასუხი არის JSON ობიექტი შემდეგი ველებით:
| ველი | ტიპი | აღწერა |
|---|---|---|
input_tokens | integer | მთელი შემავალის ტოკენები: სისტემური პრომპტი, შეტყობინებები, ინსტრუმენტები და სურათები. |
მხარდაჭერილი მოდელები
ორივე 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-ად. |
| შეტყობინებები | შეტყობინებები და ინსტრუმენტები განლაგდება მოდელის საკუთარი ჩატ-შაბლონით, იმ წერტილამდე, სადაც პასუხი იწყება, და ეს მთელი პრომპტი ითვლება. |
| როლები | ითვლება 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 ტოკენად.
დათვლა და რა ჩამოიჭრება მოთხოვნაზე
მთელი მოთხოვნის დათვლა ისევე კეთდება, როგორც იმავე მოდელის, შეტყობინებებისა და ინსტრუმენტების მქონე რეალური მოთხოვნის შემავალი ტოკენების დათვლა. პასუხი ამ რიცხვს აბრუნებს როგორც usage.prompt_tokens Chat Completions-ზე, როგორც usage.input_tokens Responses-ზე და როგორც usage.input_tokens პლუს usage.cache_read_input_tokens Messages-ზე.
- რაოდენობა არის შემავალი მონაცემი ქეშირებული შემავალის ფასდაკლებამდე. რეალურ მოთხოვნას ამ შემავალის ნაწილი შეიძლება ქეშიდან წაეკითხა და ეს ნაწილი ქეშირებული ტარიფით დაეანგარიშებინა. პრომპტის ქეშირება
- სურათი, რომელიც
http(s)URL-ით არის მოცემული, აქ 1,024-ად ითვლება. რეალური მოთხოვნა სურათს ჩამოტვირთავს და მის ზომას პიქსელებში დათვლის, ამიტომ ორი რიცხვი შეიძლება განსხვავდებოდეს. სურათი base64-ად გაგზავნეთ, რომ იგივე რიცხვი მიიღოთ. - გამოტანა დათვლაში არ შედის. რეალური მოთხოვნის პასუხი ზემოდან გამომავალი ტოკენების სახით იანგარიშება, მსჯელობის ჩათვლით.
textდათვლას ჩატის ფორმატირება არ აქვს. გამოიყენეთ დოკუმენტის ან პრომპტის ნაწილის გასაზომად, ხოლო მოთხოვნის გასაზომად - ფორმაmessages.
რაოდენობის ღირებულებად გადასაქცევად გაამრავლეთ ის მოდელის შემავალის ფასზე 1M ტოკენზე. მოდელები და ფასები
ლიმიტები
| ლიმიტი | მნიშვნელობა | მის ზემოთ |
|---|---|---|
text-ის სიგრძე | 4,000,000 ბაიტი (UTF-8) | 413 შეტყობინებით text too long |
| მოთხოვნის სხეული | 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 content type არ აქვს. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | აუცილებელი ველი აკლია (model /v1/tokenize-ზე, messages /v1/messages/count_tokens-ზე) ან ველს არასწორი ტიპი აქვს. |
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"
}
}