Anthropic format
POST /v1/messages prima zahtjev u Anthropic Messages formatu i odgovara u istom formatu, streamano ili ne. Koristite ga s Anthropic SDK-om i alatima izgrađenima na njemu, kao što je Claude Code: postavite osnovni URL, koristite svoj Shannon API ključ i navedite id Shannon modela.
POST https://api.shannon-ai.com/v1/messages
Usmjerite Anthropic SDK na Shannon osnovni URL. SDK dodaje /v1/messages i šalje vaš ključ u zaglavlju 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."}]
}' Odgovor je poruka čiji je content popis blokova. Blokove pronađite po njihovom type: kada je model rezonirao, prvi blok je thinking, a tekst dolazi nakon njega.
{
"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
}
} Zaglavlja
| Zaglavlje | Vrijednost | Opis |
|---|---|---|
x-api-key | YOUR_API_KEY | Vaš API ključ. Umjesto njega prihvaća se Authorization: Bearer YOUR_API_KEY. |
content-type | application/json | Obavezno. |
anthropic-version | 2023-06-01 | Prihvaća se, nije obavezno. Anthropic SDK šalje 2023-06-01; odgovor ima isti format bez obzira na vrijednost. |
anthropic-beta | Prihvaća se, nije obavezno. | |
x-request-id | Neobavezno. Vaš vlastiti id zahtjeva. Vraća se nepromijenjen u odgovoru; bez njega odgovor nosi id od 12 heksadecimalnih znakova. |
Polja zahtjeva
Obavezan je samo messages. Stupac Primjenjuju navodi modele na kojima polje mijenja odgovor. Hostirani open-weight modeli su dvanaest id-ova s popisa modela; obitelj Shannon 3 su shannon-3, shannon-3-pro, shannon-3.1 i shannon-3.1-pro. Modeli i cijene
| Polje | Tip | Zadano | Opis | Primjenjuju |
|---|---|---|---|---|
model | string | shannon-1.6-lite | Id Shannon modela s popisa modela. Šaljite ga sa svakim zahtjevom. Podudaranje ne razlikuje velika i mala slova. Svako drugo ime vraća 400 unknown model, pa alat koji šalje vlastita imena modela treba postaviti na Shannon id. | Svi modeli |
messages | array | Obavezno. Razgovor, najstarija poruka prva, s ulogama user i assistant. Pogledajte Poruke i blokovi sadržaja u nastavku. | Svi modeli | |
system | string | array | Upute za model: string ili niz tekstualnih blokova. Pogledajte System prompt u nastavku. | Hostirani open-weight modeli, shannon-1.6-*, shannon-2-*, shannon-coder-1 | |
max_tokens | integer | 4096 | Gornja granica odgovora, u tokenima. Neobavezno na ovom endpointu; Anthropic SDK ga uvijek šalje. Vrijednost izvan raspona od 1 do 65,536 pomiče se u taj raspon. To je ujedno iznos koji se odvaja sa stanja dok zahtjev traje. | Hostirani open-weight modeli, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 |
stream | boolean | false | true šalje odgovor kao server-sent events. Pogledajte Streaming u nastavku. | Svi modeli |
temperature | number | Temperatura uzorkovanja. Na hostiranim open-weight modelima vrijednosti se drže između 0 i 2. | Hostirani open-weight modeli, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
top_p | number | Nucleus sampling. | Hostirani open-weight modeli | |
stop_sequences | array | Do 4 stringa. Odgovor završava prije prvog koji se pojavi. stop_reason ostaje end_turn. | Hostirani open-weight modeli | |
tools | array | Alati koje model smije pozvati, svaki kao {"name", "description", "input_schema"}. Pogledajte Alati u nastavku. | Svi modeli | |
tool_choice | object | {"type": "auto"} prepušta odluku modelu, {"type": "any"} tjera ga da pozove alat, {"type": "tool", "name": "…"} tjera ga da pozove taj alat. | Hostirani open-weight modeli | |
thinking | object | Koliko model rezonira prije nego odgovori. Pogledajte Thinking u nastavku. | Hostirani open-weight modeli | |
web_search | boolean | false | Shannonov dodatak formatu: true dopušta modelu da pretraži web prije odgovora. | shannon-1.6-*, shannon-2-*, obitelj Shannon 3 |
Bez max_tokens vrijednost je 4,096, a na shannon-coder-1 65,536.
metadata, top_k, service_tier i oznake cache_control na blokovima se prihvaćaju kako bi postojeći klijentski kod radio nepromijenjen. Ne mijenjaju odgovor; keširanje promptova na hostiranim open-weight modelima je automatsko.
JSON odgovor prema shemi traži se pomoću response_format na Chat Completions i pomoću text.format na Responses. Strukturirani izlazi
Zahtjev sa system promptom i thinkingom
Ovaj zahtjev šalje system prompt, thinking budget, temperaturu i stop sekvencu. Koristi hostirani open-weight model, koji primjenjuje sve njih.
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?"}]
}' Na hostiranim open-weight modelima usage prijavljuje tokene pročitane iz prompt cachea odvojeno od ostalih ulaznih tokena.
{
"usage": {
"input_tokens": 31,
"cache_read_input_tokens": 0,
"cache_creation_input_tokens": 0,
"output_tokens": 62
}
} System prompt
system je string ili niz tekstualnih blokova u obliku [{"type": "text", "text": "…"}]. Tekstovi blokova spajaju se prijelomom retka.
Primjenjuju ga hostirani open-weight modeli, shannon-1.6-lite, shannon-1.6-pro, shannon-2-lite, shannon-2-pro i shannon-coder-1. S id-om iz obitelji Shannon 3 upute koje moraju vrijediti stavite u korisničku poruku.
Poruke i blokovi sadržaja
Poruka ima role, user ili assistant, i content. content je string ili niz blokova.
| Blok | Opis | Dostupno na |
|---|---|---|
{"type": "text", "text": "…"} | Tekst. | Svi modeli |
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": "…"}}{"type": "image", "source": {"type": "url", "url": "…"}} | Slika u poruci user, kao base64 ili putem URL-a. | Obitelj Shannon 3, shannon-1.6-lite, shannon-1.6-pro i hostirani open-weight modeli koji navode ulaz slike |
{"type": "document", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} | Dokument (PDF, Word, PowerPoint ili Excel) u poruci user, kao base64 ili putem URL-a. | Obitelj Shannon 3 |
{"type": "tool_use", "id": "toolu_…", "name": "…", "input": {…}} | U poruci assistant: poziv alata koji je model izvršio u ranijem odgovoru. | Svi modeli |
{"type": "tool_result", "tool_use_id": "toolu_…", "content": "…"} | U poruci user: rezultat tog poziva. content je string ili popis tekstualnih blokova. | Svi modeli |
content ranijeg odgovora možete poslati natrag onakav kakav jest: blokovi text i tool_use se čitaju, blokovi thinking se preskaču.
Na Shannon razinama slike i dokumenti čitaju se iz zadnje poruke user. Veličine i ograničenja imaju vlastitu stranicu. Slike i datoteke
Thinking
Hostirani open-weight modeli preslikavaju thinking u razinu napora rezoniranja. Bez polja razina je visoka.
| Oblik | budget_tokens | Učinak |
|---|---|---|
{"type": "disabled"} | Bez rezoniranja. Odgovor nema thinking blok. | |
{"type": "enabled", "budget_tokens": 2048} | ≤ 2,048 | Niska razina napora. |
{"type": "enabled", "budget_tokens": 8192} | ≤ 8,192 | Srednja razina napora. |
{"type": "enabled", "budget_tokens": 16000} | > 8,192 | Visoka razina napora. |
Model koji rezonira vraća svoje rezoniranje kao blok {"type": "thinking", "thinking": "…"} ispred teksta. Shannon razine koje rezoniraju šalju ga također.
Razine napora opisane su na vlastitoj stranici. Razina napora rezoniranja
Alati
Alat je funkcija koju izvršava vaš kod. Svaki opišite pomoću name, description i input_schema. Kada model želi alat, odgovor sadrži tool_use blok, a stop_reason je tool_use.
Definicija alata u tools:
[
{
"name": "get_weather",
"description": "Current weather for a city.",
"input_schema": {
"type": "object",
"properties": {
"city": {
"type": "string"
}
},
"required": [
"city"
]
}
}
] content odgovora koji ga poziva:
[
{
"type": "text",
"text": ""
},
{
"type": "tool_use",
"id": "toolu_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
"name": "get_weather",
"input": {
"city": "Paris"
}
}
] Izvršite alat, zatim ponovno pošaljite zahtjev s pozivom i blokom tool_result dodanima u 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
| Oblik | Učinak | Primjenjuju |
|---|---|---|
{"type": "auto"} | Model odlučuje hoće li pozvati alat. Ovo je zadano. | Svi modeli |
{"type": "any"} | Model mora pozvati jedan od alata. | Hostirani open-weight modeli |
{"type": "tool", "name": "…"} | Model mora pozvati imenovani alat. | Hostirani open-weight modeli |
Čitaju se samo alati s input_schema. Web pretraga nije alat na ovom endpointu: postavite polje web_search.
Petlja alata opisana je u cijelosti na vlastitoj stranici. Pozivanje funkcija
Odgovor
| Polje | Tip | Opis | Šalje |
|---|---|---|---|
id | string | msg_ iza kojeg slijedi 32 heksadecimalna znaka. | Svi modeli |
type | string | Uvijek message. | Svi modeli |
role | string | Uvijek assistant. | Svi modeli |
model | string | Kanonski id modela koji je odgovorio. | Svi modeli |
content | array | Blokovi odgovora, ovim redom: thinking kada je model rezonirao, text, zatim jedan tool_use po pozivu alata. | Svi modeli |
stop_reason | string | Zašto je odgovor završio. Pogledajte vrijednosti u nastavku. | Svi modeli |
usage | object | input_tokens i output_tokens. | Svi modeli |
sources | array | Samo na zahtjevu s web_search: true čija je pretraga nešto pronašla: rezultati koje je model dobio, svaki s index, title i url. [1] u odgovoru je unos s index 1. U streamu dolazi s događajem message_delta. | shannon-1.6-*, shannon-2-*, obitelj Shannon 3 |
usage.cache_read_input_tokens | integer | cache_read_input_tokens je dio prompta pročitan iz cachea; input_tokens je ostatak. cache_creation_input_tokens je uvijek 0. | Hostirani open-weight modeli |
Blokovi odgovora
| Blok | Opis |
|---|---|
{"type": "thinking", "thinking": "…"} | Rezoniranje modela. Nema člana signature. |
{"type": "text", "text": "…"} | Tekst odgovora. Može biti prazan kada je odgovor poziv alata. |
{"type": "tool_use", "id": "toolu_…", "name": "…", "input": {…}} | Poziv alata. input je JSON objekt. Rezultat pošaljite natrag s istim id. |
stop_reason
| stop_reason | Opis | Šalje |
|---|---|---|
end_turn | Model je završio svoj odgovor ili se pojavio jedan od vaših stop_sequences. | Svi modeli |
tool_use | Odgovor sadrži jedan ili više poziva alata. | Svi modeli |
max_tokens | Odgovor je prekinut na ograničenju izlaza. | Obitelj Shannon 3, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1, u streamovima |
Streaming
Postavite stream na true za server-sent events. Svaki okvir ima redak event: s imenom događaja i redak data: s JSON objektom koji ponavlja ime u type. Stream pomoćnici Anthropic SDK-a čitaju te događaje umjesto vas:
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."}]
}' Događaji, redom kojim stižu:
| Događaj | Podaci | Kada |
|---|---|---|
message_start | message | Uvijek prvi. message sadrži id, ulogu, model, prazan content i usage koji počinje od nule. |
content_block_start | index, content_block | Blok se otvara. content_block je prazan text ili thinking blok, ili tool_use blok sa svojim id i name. |
content_block_delta | index, delta {"type": "thinking_delta", "thinking"} | Dio rezoniranja, za thinking blok. |
content_block_delta | index, delta {"type": "text_delta", "text"} | Dio odgovora, za text blok. |
content_block_delta | index, delta {"type": "input_json_delta", "partial_json"} | Argumenti poziva alata, kompletni u jednoj delti, za tool_use blok. |
content_block_stop | index | Blok s ovim index je dovršen. |
message_delta | delta {stop_reason, stop_sequence}, usage | Kraj odgovora: delta.stop_reason i usage zahtjeva. |
message_stop | Uvijek zadnji. |
Blokovi su numerirani pomoću index redom kojim se otvaraju, a jedan blok je dovršen prije nego što se otvori sljedeći. Svaki blok čitajte po njegovom tipu, a ne po broju: stream može prvo otvoriti prazan text blok, zatim thinking blok, a odgovor isporučiti u kasnijem text bloku.
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
| Šalje | Opis |
|---|---|
Obitelj Shannon 3, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | Događaj ping s podacima {"type": "ping"}, svakih 15 sekundi. |
| Hostirani open-weight modeli | Redak komentara : keepalive, svakih 15 sekundi dok model radi. |
Stream koji ne uspije
Greška nakon što je stream započeo je error događaj s istim tijelom kao odgovor s greškom: {"type": "error", "error": {"type", "message"}}. Završni događaji, message_delta i message_stop, i dalje slijede. Smatrajte odgovor neuspjelim i pošaljite zahtjev ponovno.
Greške
Greške koriste Anthropic tijelo greške: type je error, a objekt error sadrži type i message. Tablica navodi što ovaj endpoint najčešće vraća. Potpuni popis, s uputom što ponoviti, ima vlastitu stranicu. Upravljanje greškama
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "unknown model: no-such-model"
}
} | Status | Tip | Poruka | Kada |
|---|---|---|---|
401 | authentication_error | Missing authenticationInvalid API key | API ključ nije poslan, ili je ključ nepoznat ili opozvan. |
400 | invalid_request_error | unknown model: <id> | model nije id Shannon modela. |
400 | invalid_request_error | No user message provided | Shannon razine: zahtjev nema korisnički tekst ni tools. |
400 | invalid_request_error | <id> does not accept image input | Slika je poslana hostiranom open-weight modelu bez ulaza slike. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | messages nedostaje ili polje ima pogrešan JSON tip. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | max_tokens je veći od onoga što je preostalo na vašem stanju. |
429 | rate_limit_error | Too many requests. Retry in <n>s. | Flood protection: više od 120 zahtjeva u jednoj minuti na vašem računu. |
429 | rate_limit_error | Shannon Coder call quota reached. Upgrade your plan at shannon-ai.com/plan | shannon-coder-1: pozivi Shannon Codera vašeg plana za trenutačni 4-satni prozor su iskorišteni. |
500 | server_error | The model backend failed to answer. Please retry. | Model nije proizveo odgovor. Pošaljite zahtjev ponovno. |
502 | api_error | The model backend failed to answer. Please retry. | Model nije proizveo odgovor. Pošaljite zahtjev ponovno. |
Brojanje tokena
POST /v1/messages/count_tokens prima isto tijelo kao zahtjev za poruku (model, system, messages, tools) i vraća {"input_tokens": n}: broj ulaznih tokena koji bi se zahtjevu naplatio. Broji za hostirane open-weight modele, besplatno je i ne uračunava se u 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} Brojanje ima vlastitu stranicu, s endpointom za običan tekst i ograničenjima. Brojanje tokena