Preskoči na sadržaj
Anthropic format

Anthropic format

POST /v1/messages prima zahtev u Anthropic Messages formatu i odgovara u istom formatu, strimovano ili ne. Koristite ga sa Anthropic SDK-om i alatima izgrađenim na njemu, kao što je Claude Code: podesite osnovni URL, koristite svoj Shannon API ključ i navedite id Shannon modela.

POST https://api.shannon-ai.com/v1/messages

Usmerite 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 rezonovao, prvi blok je thinking, a tekst dolazi posle 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 Vrednost Opis
x-api-key YOUR_API_KEY Vaš API ključ. Umesto 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 vrednost.
anthropic-beta Prihvata se, nije obavezno.
x-request-id Opciono. Vaš sopstveni id zahteva. Vraća se nepromenjen u odgovoru; bez njega odgovor nosi id od 12 heksadecimalnih znakova.

Polja zahteva

Obavezan je samo messages. Kolona Primenjuju navodi modele na kojima polje menja odgovor. Hostovani open-weight modeli su dvanaest id-jeva sa liste modela; porodica Shannon 3 su shannon-3, shannon-3-pro, shannon-3.1 i shannon-3.1-pro. Modeli i cene

Polje Tip Podrazumevano Opis Primenjuju
model string shannon-1.6-lite Id Shannon modela sa liste modela. Šaljite ga uz svaki zahtev. Poređenje ne razlikuje velika i mala slova. Svako drugo ime vraća 400 unknown model, pa alat koji šalje sopstvena imena modela morate podesiti na Shannon id. Svi modeli
messages array Obavezno. Razgovor, najstarija poruka prvo, sa ulogama user i assistant. Pogledajte Poruke i blokovi sadržaja ispod. Svi modeli
system string | array Uputstva za model: string ili niz tekstualnih blokova. Pogledajte System prompt ispod. Hostovani open-weight modeli, shannon-1.6-*, shannon-2-*, shannon-coder-1
max_tokens integer 4096 Gornja granica odgovora, u tokenima. Opciono na ovom endpointu; Anthropic SDK ga uvek šalje. Vrednost van opsega od 1 do 65,536 pomera se u taj opseg. To je i iznos koji se izdvaja sa vašeg stanja dok zahtev traje. Hostovani 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 ispod. Svi modeli
temperature number Temperatura uzorkovanja. Na hostovanim open-weight modelima vrednosti se drže između 0 i 2. Hostovani open-weight modeli, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
top_p number Nucleus uzorkovanje. Hostovani open-weight modeli
stop_sequences array Do 4 stringa. Odgovor se završava pre prvog koji se pojavi. stop_reason ostaje end_turn. Hostovani open-weight modeli
tools array Alati koje model sme da pozove, svaki kao {"name", "description", "input_schema"}. Pogledajte Alati ispod. Svi modeli
tool_choice object {"type": "auto"} prepušta odluku modelu, {"type": "any"} tera ga da pozove alat, {"type": "tool", "name": "…"} tera ga da pozove taj alat. Hostovani open-weight modeli
thinking object Koliko model rezonuje pre nego što odgovori. Pogledajte Thinking ispod. Hostovani open-weight modeli
web_search boolean false Shannon dodatak formatu: true dozvoljava modelu da pretraži web pre nego što odgovori. shannon-1.6-*, shannon-2-*, porodica Shannon 3

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

metadata, top_k, service_tier i cache_control oznake na blokovima se prihvataju da bi postojeći klijentski kod radio nepromenjen. Ne menjaju odgovor; keširanje promptova na hostovanim 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

Zahtev sa system promptom i thinkingom

Ovaj zahtev šalje system prompt, thinking budžet, temperaturu i stop sekvencu. Koristi hostovani open-weight model, koji primenjuje sve to.

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 hostovanim open-weight modelima usage prijavljuje tokene pročitane iz keša promptova 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 se spajaju prelomom reda.

Primenjuju ga hostovani open-weight modeli, shannon-1.6-lite, shannon-1.6-pro, shannon-2-lite, shannon-2-pro i shannon-coder-1. Sa id-jem iz porodice Shannon 3 stavite uputstva koja moraju da važe 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 preko URL-a. Porodica Shannon 3, shannon-1.6-lite, shannon-1.6-pro i hostovani open-weight modeli koji navode sliku na ulazu
{"type": "document", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} Dokument (PDF, Word, PowerPoint ili Excel) u user poruci, kao base64 ili preko URL-a. Porodica Shannon 3
{"type": "tool_use", "id": "toolu_…", "name": "…", "input": {…}} U assistant poruci: poziv alata koji je model uputio 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 nepromenjen: blokovi text i tool_use se čitaju, blokovi thinking se preskaču.

Na Shannon nivoima slike i dokumenti se čitaju iz poslednje user poruke. Veličine i ograničenja imaju svoju stranicu. Slike i fajlovi

Thinking

Hostovani open-weight modeli preslikavaju thinking u napor pri zaključivanju. Bez tog polja napor je visok.

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

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

Nivoi napora opisani su na svojoj stranici. Napor pri zaključivanju

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 zahtev sa pozivom i tool_result blokom dodatim 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 Primenjuju
{"type": "auto"} Model odlučuje da li će pozvati alat. Ovo je podrazumevano. Svi modeli
{"type": "any"} Model mora da pozove jedan od alata. Hostovani open-weight modeli
{"type": "tool", "name": "…"} Model mora da pozove imenovani alat. Hostovani open-weight modeli

Čitaju se samo alati sa input_schema. Web pretraga nije alat na ovom endpointu: postavite polje web_search.

Petlja alata je u celini opisana na svojoj stranici. Pozivanje funkcija

Odgovor

Polje Tip Opis Šalje
id string msg_ iza kog sledi 32 heksadecimalna znaka. Svi modeli
type string Uvek message. Svi modeli
role string Uvek assistant. Svi modeli
model string Kanonski id modela koji je odgovorio. Svi modeli
content array Blokovi odgovora, ovim redom: thinking kada je model rezonovao, text, zatim po jedan tool_use za svaki poziv alata. Svi modeli
stop_reason string Zašto je odgovor završen. Pogledajte vrednosti ispod. Svi modeli
usage object input_tokens i output_tokens. Svi modeli
sources array Samo na zahtevu sa web_search: true čija je pretraga nešto našla: rezultati koji su dati modelu, svaki sa index, title i url. [1] u odgovoru je unos sa index 1. U streamu stiže sa događajem message_delta. shannon-1.6-*, shannon-2-*, porodica Shannon 3
usage.cache_read_input_tokens integer cache_read_input_tokens je deo prompta pročitan iz keša; input_tokens je ostatak. cache_creation_input_tokens je uvek 0. Hostovani open-weight modeli

Blokovi odgovora

Blok Opis
{"type": "thinking", "thinking": "…"} Rezonovanje 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 vratite sa 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 presečen 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: sa imenom događaja i liniju data: sa JSON objektom koji ponavlja ime u type. Stream helperi Anthropic SDK-a čitaju ove događaje umesto 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 Uvek 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"} Deo rezonovanja, za thinking blok.
content_block_delta index, delta {"type": "text_delta", "text"} Deo odgovora, za text blok.
content_block_delta index, delta {"type": "input_json_delta", "partial_json"} Argumenti poziva alata, kompletni u jednom delta-u, za tool_use blok.
content_block_stop index Blok sa ovim index je završen.
message_delta delta {stop_reason, stop_sequence}, usage Kraj odgovora: delta.stop_reason i usage zahteva.
message_stop Uvek poslednji.

Blokovi su numerisani pomoću index redom kojim se otvaraju, i jedan blok je završen pre nego što se otvori sledeći. Čitajte svaki blok po njegovom tipu, a ne po broju: stream može prvo da otvori prazan text blok, zatim thinking blok, a odgovor isporuči 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 Događaj ping sa podatkom {"type": "ping"}, na svakih 15 sekundi.
Hostovani open-weight modeli Komentarska linija : keepalive, na svakih 15 sekundi dok model radi.

Stream koji ne uspe

Greška nakon početka streama stiže kao error događaj sa istim telom kao odgovor sa greškom: {"type": "error", "error": {"type", "message"}}. Završni događaji, message_delta i message_stop, i dalje slede. Smatrajte odgovor neuspelim i pošaljite zahtev ponovo.

Greške

Greške koriste Anthropic telo greške: type je error, a objekat error sadrži type i message. Tabela navodi šta ovaj endpoint najčešće vraća. Kompletna lista, sa uputstvom šta ponoviti, ima svoju 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 poslat, 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 nivoi: zahtev nema korisnički tekst i nema tools.
400 invalid_request_error <id> does not accept image input Slika je poslata hostovanom open-weight modelu bez podrške za sliku na ulazu.
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. Zaštita od flooda (flood protection): više od 120 zahteva u jednom minutu na vašem nalogu.
429 rate_limit_error Shannon Coder call quota reached. Upgrade your plan at shannon-ai.com/plan shannon-coder-1: pozivi Shannon Coder vašeg plana za trenutni 4-časovni period su iskorišćeni.
500 server_error The model backend failed to answer. Please retry. Model nije proizveo odgovor. Pošaljite zahtev ponovo.
502 api_error The model backend failed to answer. Please retry. Model nije proizveo odgovor. Pošaljite zahtev ponovo.

Brojanje tokena

POST /v1/messages/count_tokens prima isto telo kao zahtev za poruku (model, system, messages, tools) i vraća {"input_tokens": n}: broj ulaznih tokena koji bi zahtev naplatio. Važi za hostovane open-weight modele, besplatan je i ne računa se u zaštitu od flooda (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 svoju stranicu, sa endpointom za običan tekst i ograničenjima. Brojanje tokena