Preskoči na sadržaj
Anthropic format

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)

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.

200 JSON
{
  "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)

Na hostiranim open-weight modelima usage prijavljuje tokene pročitane iz prompt cachea odvojeno od ostalih ulaznih tokena.

200 JSON
{
  "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:

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:

200 content
[
  {
    "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:

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)

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.

200 text/event-stream
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

400 JSON
{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "unknown model: no-such-model"
  }
}
Status Tip Poruka Kada
401 authentication_error Missing authentication
Invalid 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)

Brojanje ima vlastitu stranicu, s endpointom za običan tekst i ograničenjima. Brojanje tokena