Anthropic
POST /v1/messages prenas peton en la formato Anthropic Messages kaj respondas en la sama formato, fluate aŭ ne. Uzu ĝin kun la Anthropic SDK kaj kun iloj konstruitaj sur ĝi, kiel Claude Code: agordu la bazan URL, uzu vian Shannon API-ŝlosilon kaj nomu Shannon-modelo-id.
POST https://api.shannon-ai.com/v1/messages
Direktu la Anthropic SDK al la baza URL de Shannon. La SDK aldonas /v1/messages kaj sendas vian ŝlosilon en la kapo x-api-key.
import anthropic
client = anthropic.Anthropic(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com",
)
message = client.messages.create(
model="shannon-3",
max_tokens=1024,
messages=[{"role": "user", "content": "Say hello in one sentence."}],
)
for block in message.content:
if block.type == "text":
print(block.text) import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com",
});
const message = await client.messages.create({
model: "shannon-3",
max_tokens: 1024,
messages: [{ role: "user", content: "Say hello in one sentence." }],
});
for (const block of message.content) {
if (block.type === "text") console.log(block.text);
} curl https://api.shannon-ai.com/v1/messages \
-H "x-api-key: YOUR_API_KEY" \
-H "content-type: application/json" \
-d '{
"model": "shannon-3",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Say hello in one sentence."}]
}' La respondo estas mesaĝo, kies content estas listo de blokoj. Trovu la blokojn laŭ ilia type: se la modelo rezonis, la unua bloko estas thinking kaj la teksto sekvas post ĝi.
{
"id": "msg_5f0c1e7a9b3d4c62a8e1f07d2b46c9a3",
"type": "message",
"role": "assistant",
"model": "shannon-3",
"content": [
{
"type": "thinking",
"thinking": "The user wants a greeting in one sentence. Keep it short and friendly."
},
{
"type": "text",
"text": "Hello, it is good to meet you."
}
],
"stop_reason": "end_turn",
"usage": {
"input_tokens": 1184,
"output_tokens": 46
}
} Kapoj
| Kapo | Valoro | Priskribo |
|---|---|---|
x-api-key | YOUR_API_KEY | Via API-ŝlosilo. Authorization: Bearer YOUR_API_KEY estas akceptata anstataŭ ĝi. |
content-type | application/json | Deviga. |
anthropic-version | 2023-06-01 | Akceptata, ne necesa. La Anthropic SDK sendas 2023-06-01; la respondo havas la saman formaton kia ajn estas la valoro. |
anthropic-beta | Akceptata, ne necesa. | |
x-request-id | Laŭvola. Via propra id por la peto. Ĝi revenas senŝanĝe en la respondo; sen ĝi la respondo portas id de 12 deksesumaj signoj. |
Kampoj de peto
Nur messages estas deviga. La kolumno Aplikata de nomas la modelojn, ĉe kiuj kampo ŝanĝas la respondon. La gastigitaj malfermpezaj modeloj estas la dek du id-oj de la modellisto; la familio Shannon 3 estas shannon-3, shannon-3-pro, shannon-3.1 kaj shannon-3.1-pro. Modeloj kaj prezoj
| Kampo | Tipo | Defaŭlto | Priskribo | Aplikata de |
|---|---|---|---|---|
model | string | shannon-1.6-lite | Shannon-modelo-id el la modellisto. Sendu ĝin kun ĉiu peto. La kongruigo ne distingas majusklojn. Ĉiu alia nomo redonas 400 unknown model, do ilo, kiu sendas siajn proprajn modelnomojn, devas esti agordita al Shannon-id. | Ĉiuj modeloj |
messages | array | Deviga. La konversacio, plej malnova mesaĝo unue, kun la roloj user kaj assistant. Vidu Mesaĝoj kaj enhavaj blokoj sube. | Ĉiuj modeloj | |
system | string | array | Instrukcioj por la modelo: ĉeno aŭ tabelo de tekstaj blokoj. Vidu System prompt sube. | Gastigitaj malfermpezaj modeloj, shannon-1.6-*, shannon-2-*, shannon-coder-1 | |
max_tokens | integer | 4096 | Supra limo de la respondo, en tokenoj. Laŭvola ĉe ĉi tiu endpoint; la Anthropic SDK ĉiam sendas ĝin. Valoro ekster 1 ĝis 65,536 estas movita en tiun intervalon. Ĝi ankaŭ estas la kvanto, kiu estas rezervita el via saldo dum la peto funkcias. | Gastigitaj malfermpezaj modeloj, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 |
stream | boolean | false | true sendas la respondon kiel server-sent events. Vidu Streaming sube. | Ĉiuj modeloj |
temperature | number | Specimena temperaturo. Ĉe la gastigitaj malfermpezaj modeloj la valoroj estas tenataj inter 0 kaj 2. | Gastigitaj malfermpezaj modeloj, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
top_p | number | Specimenado per nukleo (nucleus sampling). | Gastigitaj malfermpezaj modeloj | |
stop_sequences | array | Ĝis 4 ĉenoj. La respondo finiĝas antaŭ la unua, kiu aperas. stop_reason restas end_turn. | Gastigitaj malfermpezaj modeloj | |
tools | array | La iloj, kiujn la modelo rajtas voki, ĉiu kiel {"name", "description", "input_schema"}. Vidu Tools sube. | Ĉiuj modeloj | |
tool_choice | object | {"type": "auto"} lasas la modelon decidi, {"type": "any"} devigas ĝin voki ilon, {"type": "tool", "name": "…"} devigas ĝin voki tiun ilon. | Gastigitaj malfermpezaj modeloj | |
thinking | object | Kiom la modelo rezonas antaŭ ol respondi. Vidu Thinking sube. | Gastigitaj malfermpezaj modeloj | |
web_search | boolean | false | Aldono de Shannon al la formato: true lasas la modelon serĉi en la reto antaŭ ol respondi. | shannon-1.6-*, shannon-2-*, familio Shannon 3 |
Sen max_tokens la valoro estas 4,096, kaj 65,536 ĉe shannon-coder-1.
metadata, top_k, service_tier kaj markoj cache_control sur blokoj estas akceptataj, por ke ekzistanta klienta kodo funkciu senŝanĝe. Ili ne ŝanĝas la respondon; prompt caching ĉe la gastigitaj malfermpezaj modeloj estas aŭtomata.
JSON-respondo laŭ skemo estas petata per response_format ĉe Chat Completions kaj per text.format ĉe Responses. Strukturitaj eligoj
Peto kun system prompt kaj thinking
Ĉi tiu peto sendas system prompt, pensbuĝeton, temperaturon kaj haltigan sekvencon. Ĝi uzas gastigitan malfermpezan modelon, kiu aplikas ĉiujn.
import anthropic
client = anthropic.Anthropic(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com",
)
message = client.messages.create(
model="DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
max_tokens=4096,
system="You are a physics teacher. Answer in two sentences.",
thinking={"type": "enabled", "budget_tokens": 2048},
temperature=0.3,
stop_sequences=["\n\n"],
messages=[{"role": "user", "content": "Why is the sky blue?"}],
)
for block in message.content:
if block.type == "thinking":
print("reasoning:", block.thinking)
elif block.type == "text":
print("answer:", block.text)
print(message.usage) import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com",
});
const message = await client.messages.create({
model: "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
max_tokens: 4096,
system: "You are a physics teacher. Answer in two sentences.",
thinking: { type: "enabled", budget_tokens: 2048 },
temperature: 0.3,
stop_sequences: ["\n\n"],
messages: [{ role: "user", content: "Why is the sky blue?" }],
});
for (const block of message.content) {
if (block.type === "thinking") console.log("reasoning:", block.thinking);
if (block.type === "text") console.log("answer:", block.text);
}
console.log(message.usage); curl https://api.shannon-ai.com/v1/messages \
-H "x-api-key: YOUR_API_KEY" \
-H "content-type: application/json" \
-d '{
"model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
"max_tokens": 4096,
"system": "You are a physics teacher. Answer in two sentences.",
"thinking": {"type": "enabled", "budget_tokens": 2048},
"temperature": 0.3,
"stop_sequences": ["\n\n"],
"messages": [{"role": "user", "content": "Why is the sky blue?"}]
}' Ĉe la gastigitaj malfermpezaj modeloj usage raportas la tokenojn legitajn el la prompt-kaŝmemoro aparte de la aliaj enirtokenoj.
{
"usage": {
"input_tokens": 31,
"cache_read_input_tokens": 0,
"cache_creation_input_tokens": 0,
"output_tokens": 62
}
} System prompt
system estas ĉeno aŭ tabelo de tekstaj blokoj en la formo [{"type": "text", "text": "…"}]. La tekstoj de la blokoj estas kunigitaj per linisalto.
Ĝin aplikas la gastigitaj malfermpezaj modeloj, shannon-1.6-lite, shannon-1.6-pro, shannon-2-lite, shannon-2-pro kaj shannon-coder-1. Kun id de la familio Shannon 3 metu instrukciojn, kiuj devas validi, en la uzantan mesaĝon.
Mesaĝoj kaj enhavaj blokoj
Mesaĝo havas role, user aŭ assistant, kaj content. content estas ĉeno aŭ tabelo de blokoj.
| Bloko | Priskribo | Disponebla ĉe |
|---|---|---|
{"type": "text", "text": "…"} | Teksto. | Ĉiuj modeloj |
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": "…"}}{"type": "image", "source": {"type": "url", "url": "…"}} | Bildo en mesaĝo user, kiel base64 aŭ per URL. | Familio Shannon 3, shannon-1.6-lite, shannon-1.6-pro kaj la gastigitaj malfermpezaj modeloj, kiuj listigas bildan enigon |
{"type": "document", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} | Dokumento (PDF, Word, PowerPoint aŭ Excel) en mesaĝo user, kiel base64 aŭ per URL. | Familio Shannon 3 |
{"type": "tool_use", "id": "toolu_…", "name": "…", "input": {…}} | En mesaĝo assistant: ilovoko, kiun la modelo faris en pli frua respondo. | Ĉiuj modeloj |
{"type": "tool_result", "tool_use_id": "toolu_…", "content": "…"} | En mesaĝo user: la rezulto de tiu voko. content estas ĉeno aŭ listo de tekstaj blokoj. | Ĉiuj modeloj |
Vi povas resendi la content de pli frua respondo senŝanĝe: blokoj text kaj tool_use estas legataj, blokoj thinking estas preterlasataj.
Ĉe la Shannon-niveloj bildoj kaj dokumentoj estas legataj el la lasta mesaĝo user. Grandoj kaj limoj havas sian propran paĝon. Bildoj kaj dosieroj
Thinking
La gastigitaj malfermpezaj modeloj tradukas thinking al peno de reasoning. Sen la kampo la peno estas alta.
| Formo | budget_tokens | Efiko |
|---|---|---|
{"type": "disabled"} | Neniu reasoning. La respondo ne havas blokon thinking. | |
{"type": "enabled", "budget_tokens": 2048} | ≤ 2,048 | Malalta peno. |
{"type": "enabled", "budget_tokens": 8192} | ≤ 8,192 | Meza peno. |
{"type": "enabled", "budget_tokens": 16000} | > 8,192 | Alta peno. |
Modelo, kiu rezonas, redonas sian reasoning kiel blokon {"type": "thinking", "thinking": "…"} antaŭ la teksto. La Shannon-niveloj, kiuj rezonas, ankaŭ sendas ĝin.
La penoj estas priskribitaj en sia propra paĝo. Peno de reasoning
Tools
Ilo estas funkcio, kiun via kodo plenumas. Priskribu ĉiun per name, description kaj input_schema. Kiam la modelo volas ilon, la respondo enhavas blokon tool_use kaj stop_reason estas tool_use.
Ilo-difino en tools:
[
{
"name": "get_weather",
"description": "Current weather for a city.",
"input_schema": {
"type": "object",
"properties": {
"city": {
"type": "string"
}
},
"required": [
"city"
]
}
}
] La content de respondo, kiu vokas ĝin:
[
{
"type": "text",
"text": ""
},
{
"type": "tool_use",
"id": "toolu_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
"name": "get_weather",
"input": {
"city": "Paris"
}
}
] Plenumu la ilon, poste sendu la peton denove kun la voko kaj bloko tool_result aldonitaj al messages:
[
{
"role": "user",
"content": "What is the weather in Paris?"
},
{
"role": "assistant",
"content": [
{
"type": "tool_use",
"id": "toolu_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
"name": "get_weather",
"input": {
"city": "Paris"
}
}
]
},
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
"content": "{\"temperature_c\": 18, \"sky\": \"cloudy\"}"
}
]
}
] tool_choice
| Formo | Efiko | Aplikata de |
|---|---|---|
{"type": "auto"} | La modelo mem decidas, ĉu voki ilon. Tio estas la defaŭlto. | Ĉiuj modeloj |
{"type": "any"} | La modelo devas voki unu el la iloj. | Gastigitaj malfermpezaj modeloj |
{"type": "tool", "name": "…"} | La modelo devas voki la nomitan ilon. | Gastigitaj malfermpezaj modeloj |
Nur iloj kun input_schema estas legataj. Retserĉo ne estas ilo ĉe ĉi tiu endpoint: agordu la kampon web_search.
La ilo-buklo estas plene priskribita en sia propra paĝo. Funkci-alvokoj
La respondo
| Kampo | Tipo | Priskribo | Sendita de |
|---|---|---|---|
id | string | msg_ sekvata de 32 deksesumaj signoj. | Ĉiuj modeloj |
type | string | Ĉiam message. | Ĉiuj modeloj |
role | string | Ĉiam assistant. | Ĉiuj modeloj |
model | string | La kanona id de la modelo, kiu respondis. | Ĉiuj modeloj |
content | array | La blokoj de la respondo, en ĉi tiu ordo: thinking se la modelo rezonis, text, poste unu tool_use por ĉiu ilovoko. | Ĉiuj modeloj |
stop_reason | string | Kial la respondo finiĝis. Vidu la valorojn sube. | Ĉiuj modeloj |
usage | object | input_tokens kaj output_tokens. | Ĉiuj modeloj |
sources | array | Nur ĉe peto kun web_search: true, kies serĉo trovis ion: la rezultoj, kiujn la modelo ricevis, ĉiu kun index, title kaj url. [1] en la respondo estas la enskribo kun index 1. En fluo ĝi venas kun la evento message_delta. | shannon-1.6-*, shannon-2-*, familio Shannon 3 |
usage.cache_read_input_tokens | integer | cache_read_input_tokens estas la parto de la prompt legita el la kaŝmemoro; input_tokens estas la resto. cache_creation_input_tokens ĉiam estas 0. | Gastigitaj malfermpezaj modeloj |
Blokoj de la respondo
| Bloko | Priskribo |
|---|---|
{"type": "thinking", "thinking": "…"} | La reasoning de la modelo. Ne ekzistas membro signature. |
{"type": "text", "text": "…"} | La teksto de la respondo. Ĝi povas esti malplena, kiam la respondo estas ilovoko. |
{"type": "tool_use", "id": "toolu_…", "name": "…", "input": {…}} | Ilovoko. input estas JSON-objekto. Resendu la rezulton kun la sama id. |
stop_reason
| stop_reason | Priskribo | Sendita de |
|---|---|---|
end_turn | La modelo finis sian respondon, aŭ aperis unu el viaj stop_sequences. | Ĉiuj modeloj |
tool_use | La respondo enhavas unu aŭ pli da ilovokoj. | Ĉiuj modeloj |
max_tokens | La respondo estis detranĉita ĉe la eliga limo. | Familio Shannon 3, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1, en fluoj |
Streaming
Agordu stream al true por server-sent events. Ĉiu kadro havas linion event: kun la nomo de la evento kaj linion data: kun JSON-objekto, kiu ripetas la nomon en type. La stream-helpiloj de la Anthropic SDK legas ĉi tiujn eventojn por vi:
import anthropic
client = anthropic.Anthropic(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com",
)
with client.messages.stream(
model="shannon-3",
max_tokens=1024,
messages=[{"role": "user", "content": "Explain server-sent events in three sentences."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
message = stream.get_final_message()
print()
print(message.stop_reason, message.usage) import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com",
});
const stream = client.messages.stream({
model: "shannon-3",
max_tokens: 1024,
messages: [{ role: "user", content: "Explain server-sent events in three sentences." }],
});
stream.on("text", (text) => process.stdout.write(text));
const message = await stream.finalMessage();
console.log("\n", message.stop_reason, message.usage); curl -N https://api.shannon-ai.com/v1/messages \
-H "x-api-key: YOUR_API_KEY" \
-H "content-type: application/json" \
-d '{
"model": "shannon-3",
"max_tokens": 1024,
"stream": true,
"messages": [{"role": "user", "content": "Explain server-sent events in three sentences."}]
}' La eventoj, laŭ la ordo de alveno:
| Evento | Datumoj | Kiam |
|---|---|---|
message_start | message | Ĉiam unua. message enhavas la id, la rolon, la modelon, malplenan content kaj usage, kiu komenciĝas je nulo. |
content_block_start | index, content_block | Bloko malfermiĝas. content_block estas malplena bloko text aŭ thinking, aŭ bloko tool_use kun sia id kaj name. |
content_block_delta | index, delta {"type": "thinking_delta", "thinking"} | Peco de la reasoning, por bloko thinking. |
content_block_delta | index, delta {"type": "text_delta", "text"} | Peco de la respondo, por bloko text. |
content_block_delta | index, delta {"type": "input_json_delta", "partial_json"} | La argumentoj de ilovoko, kompletaj en unu delta, por bloko tool_use. |
content_block_stop | index | La bloko kun ĉi tiu index estas kompleta. |
message_delta | delta {stop_reason, stop_sequence}, usage | La fino de la respondo: delta.stop_reason, kaj la usage de la peto. |
message_stop | Ĉiam lasta. |
La blokoj estas numeritaj per index laŭ la ordo de malfermo, kaj unu bloko estas kompleta antaŭ ol la sekva malfermiĝas. Legu ĉiun blokon laŭ ĝia tipo, ne laŭ ĝia numero: fluo povas unue malfermi malplenan blokon text, poste la blokon thinking, kaj liveri la respondon en pli posta bloko text.
event: message_start
data: {"type":"message_start","message":{"id":"msg_5f0c…","type":"message","role":"assistant","model":"shannon-3","content":[],"usage":{"input_tokens":0,"output_tokens":0}}}
event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}
event: content_block_stop
data: {"type":"content_block_stop","index":0}
event: content_block_start
data: {"type":"content_block_start","index":1,"content_block":{"type":"thinking","thinking":""}}
event: content_block_delta
data: {"type":"content_block_delta","index":1,"delta":{"type":"thinking_delta","thinking":"Three sentences: what it is, how it is framed, why it is used."}}
event: ping
data: {"type": "ping"}
event: content_block_stop
data: {"type":"content_block_stop","index":1}
event: content_block_start
data: {"type":"content_block_start","index":2,"content_block":{"type":"text","text":""}}
event: content_block_delta
data: {"type":"content_block_delta","index":2,"delta":{"type":"text_delta","text":"Server-sent events let a server push text over one HTTP reply."}}
event: content_block_stop
data: {"type":"content_block_stop","index":2}
event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":1190,"output_tokens":84}}
event: message_stop
data: {"type":"message_stop"} Keep-alive
| Sendita de | Priskribo |
|---|---|
Familio Shannon 3, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | Evento ping kun la datumoj {"type": "ping"}, ĉiujn 15 sekundojn. |
| Gastigitaj malfermpezaj modeloj | Komenta linio : keepalive, ĉiujn 15 sekundojn dum la modelo laboras. |
Fluo, kiu malsukcesas
Malsukceso post la komenco de la fluo estas evento error kun la sama korpo kiel erarrespondo: {"type": "error", "error": {"type", "message"}}. La fermaj eventoj, message_delta kaj message_stop, ankoraŭ sekvas. Traktu la respondon kiel malsukcesan kaj sendu la peton denove.
Eraroj
Eraroj uzas la erarkorpon de Anthropic: type estas error, kaj la objekto error enhavas type kaj message. La tabelo listigas tion, kion ĉi tiu endpoint plej ofte redonas. La plena listo, kun indiko kiam reprovi, havas sian propran paĝon. Erarotraktado
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "unknown model: no-such-model"
}
} | Stato | Tipo | Mesaĝo | Kiam |
|---|---|---|---|
401 | authentication_error | Missing authenticationInvalid API key | Neniu API-ŝlosilo estis sendita, aŭ la ŝlosilo estas nekonata aŭ revokita. |
400 | invalid_request_error | unknown model: <id> | model ne estas Shannon-modelo-id. |
400 | invalid_request_error | No user message provided | Shannon-niveloj: la peto havas nek uzantan tekston nek tools. |
400 | invalid_request_error | <id> does not accept image input | Bildo estis sendita al gastigita malfermpeza modelo sen bilda enigo. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | messages mankas, aŭ kampo havas malĝustan JSON-tipon. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | max_tokens estas pli granda ol tio, kio restas el via saldo. |
429 | rate_limit_error | Too many requests. Retry in <n>s. | Flood protection: pli ol 120 petoj en unu minuto en via konto. |
429 | rate_limit_error | Shannon Coder call quota reached. Upgrade your plan at shannon-ai.com/plan | shannon-coder-1: la vokoj de Shannon Coder de via plano por la nuna 4-hora fenestro estas elĉerpitaj. |
500 | server_error | The model backend failed to answer. Please retry. | La modelo ne produktis respondon. Sendu la peton denove. |
502 | api_error | The model backend failed to answer. Please retry. | La modelo ne produktis respondon. Sendu la peton denove. |
Kalkulado de tokenoj
POST /v1/messages/count_tokens prenas la saman korpon kiel peto de mesaĝo (model, system, messages, tools) kaj redonas {"input_tokens": n}: la nombron de enirtokenoj, kiujn la peto kostus. Ĝi validas por la gastigitaj malfermpezaj modeloj, estas senpaga kaj ne estas kalkulata de la flood protection.
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 physics teacher. Answer in two sentences.",
messages=[{"role": "user", "content": "Why is the sky blue?"}],
)
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 physics teacher. Answer in two sentences.",
messages: [{ role: "user", content: "Why is the sky blue?" }],
});
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 physics teacher. Answer in two sentences.",
"messages": [{"role": "user", "content": "Why is the sky blue?"}]
}'
# {"input_tokens": 31} Kalkulado havas sian propran paĝon, kun la endpoint por simpla teksto kaj la limoj. Kalkulado de tokenoj