გადასვლა შინაარსზე
ტოკენების დათვლა

ტოკენების დათვლა

დათვალეთ ტექსტის ან მთელი მოთხოვნის ტოკენები გაგზავნამდე.

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"])
200 პასუხი
{
  "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"])
200 პასუხი
{
  "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)
200 პასუხი
{
  "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-REAP
  • GLM-5.2-3BIT-REAP
  • Kimi-K3-3BIT-REAP
  • Nemotron3Ultra-3BIT-REAP
  • MiniMax-M3-3BIT-REAP
  • DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP
  • Kimi-K2.6-W4A16-AUTOROUND-REAP
  • Laguna-S-2.1-W4A16-AUTOROUND-REAP
  • inkling-W4A16-AUTOROUND-REAP
  • MiMo-V2.5-Pro-W8A16
  • MiMo-V2.5-W8A16
  • Hy3-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, რომლებიც ორივე ფორმაში არის.

400 /v1/tokenize
{
  "error": {
    "type": "invalid_request_error",
    "message": "tokenize is available for the hosted open models; unknown model: shannon-3"
  }
}
400 /v1/messages/count_tokens
{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "count_tokens is available for the hosted open models; unknown model: shannon-3"
  }
}