ወደ ይዘቱ እለፍ
የToken ቆጠራ

የToken ቆጠራ

ጽሑፍን ወይም ሙሉ ጥያቄን ከመላክዎ በፊት tokens ዎቹን ይቁጠሩ።

POST https://api.shannon-ai.com/v1/tokenize

POST https://api.shannon-ai.com/v1/messages/count_tokens

ሁለቱም endpoints የሰየሙትን ሞዴል tokenizer በመጠቀም ይቆጥራሉ፣ ምንም ሞዴል አይሰራም። የተስተናገዱ open-weight ሞዴሎችን ይሸፍናሉ። /v1/tokenize ተራ ጽሑፍ ወይም የChat Completions ውይይት ይቀበላል። /v1/messages/count_tokens በAnthropic Messages ፎርማት ጥያቄ ይቀበላል፣ ይህም የAnthropic SDK እና Claude Code የሚያደርጉት ጥሪ ነው።

መቁጠር ነፃ ነው። ጥሪ የAPI ቁልፍዎን ይፈልጋል፣ ከቀሪ ሂሳብዎ ምንም አይወስድም እና በአጠቃቀም መዝገብዎ ውስጥ አይታይም።

ጽሑፍን መቁጠር

model እና text ይላኩ። ጽሑፉ ዙሪያው ያለ chat ቅርጸት እንዳለ ይቆጠራል።

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
}

በዚህ ገጽ ላይ በምላሾቹ ውስጥ ያሉት ቁጥሮች ምሳሌዎች ናቸው። ተመሳሳይ ጽሑፍ በተለየ ሞዴል ላይ የተለየ ቆጠራ ይሰጣል።

የchat ጥያቄን መቁጠር

model እና messages ይላኩ፣ ጥያቄው ካለው tools ጋር፣ ወደ /v1/chat/completions እንደሚልኳቸው ልክ። ምላሹ የሙሉ input መጠን ነው።

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 ግዴታ። የተስተናገደ open-weight ሞዴል id። ትላልቅና ትናንሽ ፊደላት እኩል ይታያሉ።
text string ያለ chat ቅርጸት እንዳለ የሚቆጠር ጽሑፍ። እስከ 4,000,000 ባይቶች። text ወይም messages ይላኩ፤ ሁለቱም ሲኖሩ text ይቆጠራል።
messages array በChat Completions ፎርማት የchat መልእክቶች። እንደ ጥያቄው ሙሉ input ይቆጠራሉ፦ እያንዳንዱ መልእክት የሞዴሉ chat template በዙሪያው ከሚያደርገው ቅርጸት ጋር።
tools array በቆጠራው ውስጥ የሚካተቱ የtool ትርጓሜዎች። ከmessages ጋር አብረው ይጠቅማሉ።

ምላሹ እነዚህ መስኮች ያሉት JSON object ነው፦

መስክ ዓይነት መግለጫ
model string ቆጠራው የተደረገለት የሞዴል id፣ በታተመው አጻጻፉ።
tokens integer ከtext ጋር፦ የጽሑፉ tokens። ከmessages ጋር፦ ምስሎችን ጨምሮ የሙሉው input tokens።

የMessages ጥያቄን መቁጠር

ወደ /v1/messages የሚልኩትን body ይላኩ፦ model፣ messages፣ እና ሲጠቀሙባቸው system እና tools። ኦፊሴላዊ የAnthropic SDKs ይህን 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 ግዴታ። የተስተናገደ open-weight ሞዴል id።
messages array ግዴታ። በAnthropic Messages ፎርማት መልእክቶች። text፣ image፣ tool_use እና tool_result blocks ይቆጠራሉ።
system string | array የsystem prompt፦ string ወይም የጽሑፍ blocks array ሊሆን ይችላል።
tools array name፣ description እና input_schema ያላቸው የtool ትርጓሜዎች።

ለተኳሃኝነት ተቀባይነት አላቸው፣ በቆጠራው ላይ ምንም ተጽዕኖ የላቸውም፦ tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking። የእውነተኛ ጥያቄን body ሳይቀይሩ ማስተላለፍ ይችላሉ።

ምላሹ እነዚህ መስኮች ያሉት JSON object ነው፦

መስክ ዓይነት መግለጫ
input_tokens integer የሙሉው input tokens፦ system prompt፣ መልእክቶች፣ tools እና ምስሎች።

የሚደገፉ ሞዴሎች

ሁለቱም endpoints ለተስተናገዱ open-weight ሞዴሎች ይቆጥራሉ። GET /v1/models /v1/tokenize እና /v1/messages/count_tokens ን በሚደግፍ እያንዳንዱ ሞዴል endpoints ውስጥ ይዘረዝራል። ማንኛውም ሌላ የ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 ሞዴል የtoken ቆጠራዎቹን ከምላሽ usage object ያንብቡ።

ቆጠራው እንዴት ይደረጋል

እያንዳንዱ ሞዴል በራሱ tokenizer እና በራሱ chat template ይቆጠራል። ከቁምፊዎች ወይም ከቃላት የተገመተ ግምት አይጠቀምም።

የሚቆጠረው ሕግ
ጽሑፍ እንደተላከ የstring tokens። ባዶ string 0 ይቆጠራል።
መልእክቶች መልእክቶቹ እና tools በሞዴሉ የራሱ chat template ምላሹ እስከሚጀምርበት ነጥብ ድረስ ይደረደራሉ፣ እና ያ ሙሉ prompt ይቆጠራል።
ሚናዎች system፣ user፣ assistant እና tool መልእክቶች ይቆጠራሉ። developer እንደ system ይቆጠራል። ይዘት እና የtool ጥሪ የሌለው መልእክት ምንም አይጨምርም።
የtool ጥሪዎች እና ውጤቶች የቀደሙ የassistant ዙሮች የtool ጥሪዎች እና ውጤቶቻቸው በሁለቱም endpoints ላይ የቆጠራው አካል ናቸው።
ምስሎች በbody ውስጥ የተላከ ምስል (base64 ወይም data: URL) ለእያንዳንዱ 28 × 28 ፒክሰል ቁራጭ አንድ token ይጨምራል፦ ceil(width / 28) × ceil(height / 28)። እንደ http(s) URL የተሰጠ ምስል በእነዚህ endpoints አይወርድም እና 1,024 ይቆጠራል።

ምሳሌ፦ 1,024 × 768 ፒክሰል ምስል ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 tokens ይቆጠራል።

ቆጠራው እና ጥያቄ የሚከፈለው

የሙሉ ጥያቄ ቆጠራ ተመሳሳይ ሞዴል፣ መልእክቶች እና tools ካለው እውነተኛ ጥያቄ input ቆጠራ ጋር በተመሳሳይ መንገድ ይደረጋል። ምላሽ ያንን ቁጥር በChat Completions ላይ እንደ usage.prompt_tokens፣ በResponses ላይ እንደ usage.input_tokens፣ በMessages ላይ ደግሞ እንደ usage.input_tokens ሲደመር usage.cache_read_input_tokens ያሳውቃል።

  • ቆጠራው የcached-input ቅናሽ ከመደረጉ በፊት ያለው input ነው። እውነተኛ ጥያቄ ከዚያ input የተወሰነውን ከcache ሊያነብ እና ያንን ክፍል በcached ዋጋ ሊያስከፍል ይችላል። የፕሮምፕት ካሽንግ
  • እንደ http(s) URL የተሰጠ ምስል እዚህ 1,024 ይቆጠራል። እውነተኛ ጥያቄ ምስሉን ያወርዳል እና ከፒክሰል መጠኑ ይቆጥረዋል፣ ስለዚህ ሁለቱ ቁጥሮች ሊለያዩ ይችላሉ። ተመሳሳይ ቁጥር ለማግኘት ምስሉን እንደ base64 ይላኩ።
  • Output የቆጠራው አካል አይደለም። የእውነተኛ ጥያቄ ምላሽ reasoning ን ጨምሮ በተጨማሪ እንደ output tokens ይከፈላል።
  • የtext ቆጠራ የchat ቅርጸት የለውም። ሰነድን ወይም የprompt ክፍልን ለመለካት ይጠቀሙበት፣ ጥያቄን ለመለካት ደግሞ የmessages ቅርጽን።

ቆጠራን ወደ ወጪ ለመቀየር በሞዴሉ በ1M tokens የinput ዋጋ ያባዙት። ሞዴሎችና ዋጋ

ገደቦች

ገደብ እሴት ከዚያ በላይ
የtext ርዝመት 4,000,000 ባይቶች (UTF-8) 413 ከtext too long መልእክት ጋር
የጥያቄ body 32 MiB 413
በአንድ ጥያቄ አንድ ጽሑፍ ወይም አንድ ውይይት ብዙ ጽሑፎችን ለመቁጠር ለእያንዳንዱ ጽሑፍ አንድ ጥያቄ ይላኩ።

የመቁጠሪያ ጥሪዎች በደቂቃ 120 ጥያቄዎች ገደብ ውስጥ አይቆጠሩም። ገደቦች እና ቀሪ ሂሳብ

ስህተቶች

Status አይነት መልእክት መቼ
400 invalid_request_error tokenize is available for the hosted open models; unknown model: <model> /v1/tokenize የተስተናገደ open-weight id ባልሆነ model።
400 invalid_request_error count_tokens is available for the hosted open models; unknown model: <model> /v1/messages/count_tokens የተስተናገደ open-weight id ባልሆነ model፣ ወይም ያለ 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 በላይ የሆነ body እንዲሁ በ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: … አስፈላጊ መስክ ይጎድላል (በ/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 ቅርጽ። መጀመሪያ የstatus ኮዱን ያንብቡ፣ ከዚያ በሁለቱም ቅርጾች ውስጥ ያሉትን 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"
  }
}