Preskoči na sadržaj
Anthropic format

Anthropic format

POST /v1/messages prima zahtjev u Anthropic Messages formatu i odgovara u istom formatu, streamovano ili ne. Koristite ga s Anthropic SDK-om i alatima izgrađenim na njemu, kao što je Claude Code: postavite osnovni URL, koristite svoj Shannon API ključ i navedite Shannon id 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 lista blokova. Blokove pronađite po njihovom type: kada je model razmišljao, prvi blok je thinking, a tekst dolazi poslije 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 se prihvata Authorization: Bearer YOUR_API_KEY.
content-type application/json Obavezno.
anthropic-version 2023-06-01 Prihvata se, nije obavezno. Anthropic SDK šalje 2023-06-01; odgovor ima isti format bez obzira na vrijednost.
anthropic-beta Prihvata se, nije obavezno.
x-request-id Opcionalno. 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. Kolona Primjenjuje navodi modele na kojima polje mijenja odgovor. Hostirani open-weight modeli su dvanaest idova s liste modela; porodica Shannon 3 su shannon-3, shannon-3-pro, shannon-3.1 i shannon-3.1-pro. Modeli i cijene

Polje Tip Zadano Opis Primjenjuje
model string shannon-1.6-lite Shannon id modela s liste modela. Šaljite ga uz svaki zahtjev. Poređenje ne razlikuje velika i mala slova. Svako drugo ime vraća 400 unknown model, pa alat koji šalje vlastita imena modela treba podesiti 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 Instrukcije 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. Opcionalno na ovom endpointu; Anthropic SDK ga uvijek šalje. Vrijednost izvan raspona od 1 do 65,536 pomjera se u taj raspon. To je i iznos koji se odvaja sa vašeg 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 se 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 razmišlja prije nego odgovori. Pogledajte Thinking u nastavku. Hostirani open-weight modeli
web_search boolean false Shannon dodatak formatu: true omogućava modelu da pretraži web prije nego odgovori. shannon-1.6-*, shannon-2-*, porodica Shannon 3

Bez max_tokens vrijednost je 4,096, a na shannon-coder-1 65,536.

metadata, top_k, service_tier i cache_control oznake na blokovima se prihvataju kako bi postojeći klijentski kod radio nepromijenjen. Ne mijenjaju odgovor; keširanje promptova na hostiranim open-weight modelima je automatsko.

JSON odgovor prema šemi 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 budžet, 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 odvojeno od ostalih ulaznih tokena prijavljuje tokene pročitane iz keša promptova.

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 reda.

Primjenjuju ga hostirani open-weight modeli, shannon-1.6-lite, shannon-1.6-pro, shannon-2-lite, shannon-2-pro i shannon-coder-1. Uz id iz porodice Shannon 3, instrukcije koje moraju važiti 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 user poruci, kao base64 ili putem URL-a. Porodica 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 user poruci, kao base64 ili putem URL-a. Porodica Shannon 3
{"type": "tool_use", "id": "toolu_…", "name": "…", "input": {…}} U assistant poruci: poziv alata koji je model napravio u ranijem odgovoru. Svi modeli
{"type": "tool_result", "tool_use_id": "toolu_…", "content": "…"} U user poruci: rezultat tog poziva. content je string ili lista tekstualnih blokova. Svi modeli

content ranijeg odgovora možete poslati nazad onakav kakav jeste: blokovi text i tool_use se čitaju, blokovi thinking se preskaču.

Na Shannon nivoima slike i dokumenti se čitaju iz zadnje user poruke. Veličine i ograničenja imaju vlastitu stranicu. Slike i datoteke

Thinking

Hostirani open-weight modeli preslikavaju thinking u reasoning effort. Bez ovog polja effort je high.

Oblik budget_tokens Efekat
{"type": "disabled"} Bez reasoninga. Odgovor nema thinking blok.
{"type": "enabled", "budget_tokens": 2048} ≤ 2,048 Nizak effort.
{"type": "enabled", "budget_tokens": 8192} ≤ 8,192 Srednji effort.
{"type": "enabled", "budget_tokens": 16000} > 8,192 Visok effort.

Model koji rezonuje vraća svoj reasoning kao blok {"type": "thinking", "thinking": "…"} ispred teksta. Shannon nivoi koji rezonuju šalju ga također.

Effort nivoi su opisani na vlastitoj stranici. Reasoning effort

Alati

Alat je funkcija koju izvršava vaš kod. Opišite svaki 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"
    }
  }
]

Pokrenite alat, zatim ponovo pošaljite zahtjev s pozivom i tool_result blokom dodanim 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 Efekat Primjenjuje
{"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 je u cijelosti opisana 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 redoslijedom: thinking kada je model razmišljao, text, zatim po jedan tool_use za svaki poziv 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 našla: rezultati koji su dati modelu, 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-*, porodica Shannon 3
usage.cache_read_input_tokens integer cache_read_input_tokens je dio prompta pročitan iz keša; input_tokens je ostatak. cache_creation_input_tokens je uvijek 0. Hostirani open-weight modeli

Blokovi odgovora

Blok Opis
{"type": "thinking", "thinking": "…"} Reasoning 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 objekat. Rezultat pošaljite nazad s istim id.

stop_reason

stop_reason Opis Šalje
end_turn Model je završio odgovor, ili se pojavila jedna 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. Porodica 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 frame ima liniju event: s imenom događaja i liniju data: s JSON objektom koji ponavlja ime u type. Stream helperi Anthropic SDK-a čitaju ove 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, redoslijedom 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 reasoninga, 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 završen.
message_delta delta {stop_reason, stop_sequence}, usage Kraj odgovora: delta.stop_reason i usage zahtjeva.
message_stop Uvijek zadnji.

Blokovi su numerisani pomoću index redoslijedom otvaranja, a jedan blok je završ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
Porodica Shannon 3, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 ping događaj s podacima {"type": "ping"}, svakih 15 sekundi.
Hostirani open-weight modeli Linija komentara : keepalive, svakih 15 sekundi dok model radi.

Stream koji ne uspije

Greška nakon što je stream poč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, ipak slijede. Smatrajte odgovor neuspjelim i pošaljite zahtjev ponovo.

Greške

Greške koriste Anthropic tijelo greške: type je error, a objekat error sadrži type i message. Tabela navodi šta ovaj endpoint najčešće vraća. Potpuna lista, s tim šta 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 Shannon id modela.
400 invalid_request_error No user message provided Shannon nivoi: zahtjev nema korisnički tekst i nema 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 zaštita: 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: iskorišteni su Shannon Coder pozivi vašeg plana za trenutni 4-satni prozor.
500 server_error The model backend failed to answer. Please retry. Model nije dao odgovor. Pošaljite zahtjev ponovo.
502 api_error The model backend failed to answer. Please retry. Model nije dao odgovor. Pošaljite zahtjev ponovo.

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 naplatili za zahtjev. Radi za hostirane open-weight modele, besplatno je i ne broji se u flood zaštitu.

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 plain-text endpointom i ograničenjima. Brojanje tokena