Tokenzielung
Zielt d'Tokens vun engem Text oder vun enger ganzer Ufro, ier Dir se schéckt.
POST https://api.shannon-ai.com/v1/tokenize
POST https://api.shannon-ai.com/v1/messages/count_tokens
Béid Endpoints zielen mam Tokenizer vum Modell, dat Dir nennt, a kee Modell leeft. Si decken d'Hosted Open-Weight-Modeller of. /v1/tokenize hëlt e blannen Text oder eng Chat-Completions-Konversatioun. /v1/messages/count_tokens hëlt eng Ufro am Anthropic-Messages-Format, dat ass de Ruff, deen d'Anthropic-SDK a Claude Code maachen.
D'Zielen ass gratis. E Ruff brauch Äre API-Schlëssel, hëlt näischt aus Ärem Solde a erschéngt net an Ärem Notzungs-Log.
En Text zielen
Schéckt model an text. Den Text gëtt gezielt, wéi e ass, ouni Chat-Formatéierung drëms.
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
} D'Zuelen an den Äntwerten op dëser Säit sinn Beispiller. Deeselwechten Text gëtt bei engem anere Modell eng aner Zuel.
Eng Chat-Ufro zielen
Schéckt model an messages, mat tools, wann d'Ufro se huet, genau esou, wéi Dir se un /v1/chat/completions géift schécken. D'Äntwert ass d'Gréisst vum ganzen 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"]) 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
} Felder vun /v1/tokenize
| Feld | Typ | Beschreiwung |
|---|---|---|
model | string | Erfuerderlech. Eng Hosted-Open-Weight-Modell-ID. Grouss- a Klengschreiwung gëtt gläich behandelt. |
text | string | En Text, deen esou gezielt gëtt, wéi en ass, ouni Chat-Formatéierung. Bis zu 4,000,000 Bytes. Schéckt text oder messages; wann déi zwee do sinn, gëtt text gezielt. |
messages | array | Chat-Messagen am Chat-Completions-Format. Si ginn als kompletten Input vun enger Ufro gezielt: all Message mat der Formatéierung, déi d'Chat-Template vum Modell drëms setzt. |
tools | array | Tool-Definitiounen, déi an d'Zielung abegraff solle ginn. Gëtt zesumme mat messages benotzt. |
D'Äntwert ass e JSON-Objet mat dëse Felder:
| Feld | Typ | Beschreiwung |
|---|---|---|
model | string | D'Modell-ID, fir déi gezielt gouf, a senger publizéierter Schreifweis. |
tokens | integer | Mat text: d'Tokens vum Text. Mat messages: d'Tokens vum ganzen Input, Biller abegraff. |
Eng Messages-Ufro zielen
Schéckt de Body, deen Dir un /v1/messages schécke géift: model, messages, an system an tools, wann Dir se benotzt. D'offiziell Anthropic-SDKs ruffen dësen Endpoint iwwer 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
} Felder vun /v1/messages/count_tokens
| Feld | Typ | Beschreiwung |
|---|---|---|
model | string | Erfuerderlech. Eng Hosted-Open-Weight-Modell-ID. |
messages | array | Erfuerderlech. Messagen am Anthropic-Messages-Format. text-, image-, tool_use- an tool_result-Blöck ginn gezielt. |
system | string | array | De System-Prompt: e String oder en Array vun Text-Blöck. |
tools | array | Tool-Definitiounen mat name, description an input_schema. |
Fir d'Kompatibilitéit akzeptéiert, ouni Effekt op d'Zielung: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. Dir kënnt de Body vun enger richteger Ufro onverännert iwwerginn.
D'Äntwert ass e JSON-Objet mat dëse Felder:
| Feld | Typ | Beschreiwung |
|---|---|---|
input_tokens | integer | D'Tokens vum ganzen Input: System-Prompt, Messagen, Tools a Biller. |
Ënnerstëtzt Modeller
Béid Endpoints zielen fir d'Hosted Open-Weight-Modeller. GET /v1/models lëscht /v1/tokenize an /v1/messages/count_tokens an den endpoints vun all Modell op, dee se ënnerstëtzt. All aneren model-Wäert, d'Shannon-IDen abegraff, gëtt mat 400 beäntwert.
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
Bei engem Shannon-Modell liest d'Tokenzuelen aus dem usage-Objet vun enger Äntwert of.
Wéi gezielt gëtt
All Modell gëtt mat sengem eegenen Tokenizer a mat sengem eegene Chat-Template gezielt. Et gëtt keng Schätzung no Zeechen oder Wierder benotzt.
| Wat gezielt gëtt | Regel |
|---|---|
| En Text | D'Tokens vum String, wéi e geschéckt gëtt. E leere String zielt 0. |
| Messagen | D'Messagen an d'Tools ginn mam eegene Chat-Template vum Modell opgebaut, bis dohin, wou d'Äntwert ufänkt, an dee ganze Prompt gëtt gezielt. |
| Rollen | system-, user-, assistant- an tool-Messagen ginn gezielt. developer gëtt als system gezielt. Eng Message ouni Inhalt an ouni Tool-Ruff füügt näischt derbäi. |
| Tool-Ruffer a Resultater | Tool-Ruffer vu fréieren Assistent-Tourë a hir Resultater sinn en Deel vun der Zielung, op béiden Endpoints. |
| Biller | E Bild, dat am Body geschéckt gëtt (base64 oder eng data:-URL), füügt een Token pro 28 × 28 Pixel grousse Patch derbäi: ceil(width / 28) × ceil(height / 28). E Bild, dat als http(s)-URL ginn ass, gëtt vun dësen Endpoints net erofgelueden a zielt 1,024. |
Beispill: e Bild vun 1,024 × 768 Pixel zielt ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 Tokens.
D'Zielung a wat eng Ufro berechent gëtt
D'Zielung vun enger ganzer Ufro gëtt op déiselwecht Manéier gemaach wéi d'Input-Zielung vun enger richteger Ufro mam selwechte Modell, de selwechte Messagen an de selwechten Tools. Eng Äntwert mellt dës Zuel als usage.prompt_tokens bei Chat Completions, als usage.input_tokens bei Responses, an als usage.input_tokens plus usage.cache_read_input_tokens bei Messages.
- D'Zuel ass den Input virum Rabatt fir gecachten Input. Eng richteg Ufro ka en Deel vun deem Input aus dem Cache liesen an deen Deel zum Cache-Tarif berechnen. Prompt Caching
- E Bild, dat als
http(s)-URL ginn ass, zielt hei 1,024. Eng richteg Ufro luet d'Bild erof a zielt et no senger Gréisst a Pixel, sou datt déi zwou Zuele sech ënnerscheede kënnen. Schéckt d'Bild als base64, fir déiselwecht Zuel ze kréien. - Den Output ass kee Bestanddeel vun der Zielung. D'Äntwert vun enger richteger Ufro gëtt zousätzlech als Output-Tokens berechent, Reasoning abegraff.
- Eng
text-Zielung huet keng Chat-Formatéierung. Benotzt se, fir en Dokument oder en Deel vun engem Prompt ze moossen, an d'messages-Form, fir eng Ufro ze moossen.
Fir eng Zuel an Käschte ëmzewandelen, multiplizéiert se mam Input-Präis vum Modell pro 1M Tokens. Modeller a Präisser
Limiten
| Limit | Wäert | Doriwwer |
|---|---|---|
Längt vun text | 4,000,000 Bytes (UTF-8) | 413 mat der Message text too long |
| Body vun der Ufro | 32 MiB | 413 |
| Pro Ufro | Ee Text oder eng Konversatioun | Schéckt eng Ufro pro Text, fir méi Texter ze zielen. |
Zielruffer zielen net bei der Limit vun 120 Ufroen pro Minutt mat. Limiten a Solde
Feeler
| Status | Typ | Message | Wéini |
|---|---|---|---|
400 | invalid_request_error | tokenize is available for the hosted open models; unknown model: <model> | /v1/tokenize mat engem model, deen keng Hosted-Open-Weight-ID ass. |
400 | invalid_request_error | count_tokens is available for the hosted open models; unknown model: <model> | /v1/messages/count_tokens mat engem model, deen keng Hosted-Open-Weight-ID ass, oder ouni model. |
400 | invalid_request_error | send `text` or `messages` | /v1/tokenize mat weder text nach messages. |
401 | authentication_error | Missing authentication / Invalid API key | Et gouf kee Schlëssel geschéckt, oder de Schlëssel ass net gülteg. |
413 | invalid_request_error | text too long | text ass méi laang wéi 4,000,000 Bytes. E Body iwwer 32 MiB gëtt och mat 413 beäntwert. |
415 | invalid_request_error | Expected request with `Content-Type: application/json` | D'Ufro huet keen JSON-Content-Type. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | E erfuerderlecht Feld feelt (model op /v1/tokenize, messages op /v1/messages/count_tokens) oder e Feld huet de falsche Typ. |
503 | api_error | token counting is temporarily unavailable for this model | D'Zielung kann fir dëse Modell momentan net gemaach ginn. Probéiert et méi spéit nach eng Kéier. |
/v1/tokenize gëtt Feeler an der OpenAI-Form zréck. Op /v1/messages/count_tokens kommen d'Feeler vum Endpoint selwer (400 fir de Modell, 503) an der Anthropic-Form, an 401, 413, 415 an 422 kommen an der OpenAI-Form. Liest fir d'éischt de Status-Code, dann error.type an error.message, déi a béiden Forme präsent sinn.
{
"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"
}
}