Hoppa till innehållet
Anthropic‑format

Anthropic‑format

POST /v1/messages tar emot en begäran i Anthropic Messages-formatet och svarar i samma format, streamat eller inte. Använd det med Anthropic SDK och med verktyg byggda på den, till exempel Claude Code: ange bas-URL, använd din Shannon API-nyckel och ange ett Shannon-modell-id.

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

Peka Anthropic SDK mot Shannons bas-URL. SDK:n lägger till /v1/messages och skickar din nyckel i headern 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)

Svaret är ett meddelande vars content är en lista med block. Hitta blocken via deras type: när modellen resonerade är det första blocket thinking och texten kommer efter det.

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
  }
}

Headers

Header Värde Beskrivning
x-api-key YOUR_API_KEY Din API-nyckel. Authorization: Bearer YOUR_API_KEY accepteras i stället.
content-type application/json Obligatoriskt.
anthropic-version 2023-06-01 Accepteras, krävs inte. Anthropic SDK skickar 2023-06-01; svaret har samma format oavsett värde.
anthropic-beta Accepteras, krävs inte.
x-request-id Valfritt. Ditt eget id för begäran. Det kommer tillbaka oförändrat i svaret; utan det har svaret ett id på 12 hexadecimala tecken.

Begäranfält

Endast messages är obligatoriskt. Kolumnen Tillämpas av anger de modeller där ett fält ändrar svaret. De hostade open-weight-modellerna är de tolv id:n i modellistan; Shannon 3-familjen är shannon-3, shannon-3-pro, shannon-3.1 och shannon-3.1-pro. Modeller och priser

Fält Typ Standard Beskrivning Tillämpas av
model string shannon-1.6-lite Ett Shannon-modell-id från modellistan. Skicka det med varje begäran. Matchningen är inte skiftlägeskänslig. Alla andra namn ger 400 unknown model, så ett verktyg som skickar egna modellnamn måste ställas in på ett Shannon-id. Alla modeller
messages array Obligatoriskt. Konversationen, äldsta meddelandet först, med rollerna user och assistant. Se Meddelanden och innehållsblock nedan. Alla modeller
system string | array Instruktioner till modellen: en sträng eller en array av textblock. Se Systemprompt nedan. Hostade open-weight-modeller, shannon-1.6-*, shannon-2-*, shannon-coder-1
max_tokens integer 4096 Övre gräns för svaret, i tokens. Valfritt på den här endpointen; Anthropic SDK skickar det alltid. Ett värde utanför 1 till 65,536 flyttas in i det intervallet. Det är också det belopp som reserveras från din balans medan begäran körs. Hostade open-weight-modeller, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
stream boolean false true skickar svaret som server-sent events. Se Streaming nedan. Alla modeller
temperature number Samplingstemperatur. På de hostade open-weight-modellerna hålls värdena mellan 0 och 2. Hostade open-weight-modeller, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
top_p number Nucleus-sampling. Hostade open-weight-modeller
stop_sequences array Upp till 4 strängar. Svaret slutar före den första som förekommer. stop_reason förblir end_turn. Hostade open-weight-modeller
tools array De verktyg som modellen får anropa, vart och ett som {"name", "description", "input_schema"}. Se Verktyg nedan. Alla modeller
tool_choice object {"type": "auto"} låter modellen avgöra, {"type": "any"} får den att anropa ett verktyg, {"type": "tool", "name": "…"} får den att anropa just det verktyget. Hostade open-weight-modeller
thinking object Hur mycket modellen resonerar innan den svarar. Se Thinking nedan. Hostade open-weight-modeller
web_search boolean false Ett Shannon-tillägg till formatet: true låter modellen söka på webben innan den svarar. shannon-1.6-*, shannon-2-*, Shannon 3-familjen

Utan max_tokens är värdet 4,096, och 65,536 på shannon-coder-1.

metadata, top_k, service_tier och cache_control-markeringar på block accepteras så att befintlig klientkod körs oförändrad. De ändrar inte svaret; prompt-caching på de hostade open-weight-modellerna är automatisk.

Ett JSON-svar enligt ett schema begärs med response_format i Chat Completions och med text.format i Responses. Strukturerade utdata

En begäran med systemprompt och thinking

Den här begäran skickar en systemprompt, en thinking-budget, en temperatur och en stoppsekvens. Den använder en hostad open-weight-modell, som tillämpar alla dessa.

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)

På de hostade open-weight-modellerna rapporterar usage de tokens som lästs från promptcachen separat från övriga inputtokens.

200 JSON
{
  "usage": {
    "input_tokens": 31,
    "cache_read_input_tokens": 0,
    "cache_creation_input_tokens": 0,
    "output_tokens": 62
  }
}

Systemprompt

system är en sträng eller en array av textblock i formen [{"type": "text", "text": "…"}]. Blockens texter sammanfogas med ett radbrytningstecken.

Den tillämpas av de hostade open-weight-modellerna, shannon-1.6-lite, shannon-1.6-pro, shannon-2-lite, shannon-2-pro och shannon-coder-1. Med ett id i Shannon 3-familjen ska instruktioner som måste gälla läggas i användarmeddelandet.

Meddelanden och innehållsblock

Ett meddelande har en role, user eller assistant, och ett content. content är en sträng eller en array av block.

Block Beskrivning Tillgänglig på
{"type": "text", "text": "…"} Text. Alla modeller
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": "…"}}
{"type": "image", "source": {"type": "url", "url": "…"}}
En bild i ett user-meddelande, som base64 eller via URL. Shannon 3-familjen, shannon-1.6-lite, shannon-1.6-pro och de hostade open-weight-modeller som anger bildinput
{"type": "document", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} Ett dokument (PDF, Word, PowerPoint eller Excel) i ett user-meddelande, som base64 eller via URL. Shannon 3-familjen
{"type": "tool_use", "id": "toolu_…", "name": "…", "input": {…}} I ett assistant-meddelande: ett verktygsanrop som modellen gjorde i ett tidigare svar. Alla modeller
{"type": "tool_result", "tool_use_id": "toolu_…", "content": "…"} I ett user-meddelande: resultatet av det anropet. content är en sträng eller en lista med textblock. Alla modeller

Du kan skicka tillbaka content från ett tidigare svar som det är: text- och tool_use-block läses, thinking-block hoppas över.

På Shannon-nivåerna läses bilder och dokument från det sista user-meddelandet. Storlekar och gränser har en egen sida. Bilder och filer

Thinking

De hostade open-weight-modellerna mappar thinking till en resonemangsansträngning. Utan fältet är ansträngningen hög.

Form budget_tokens Effekt
{"type": "disabled"} Inget resonemang. Svaret har inget thinking-block.
{"type": "enabled", "budget_tokens": 2048} ≤ 2,048 Låg ansträngning.
{"type": "enabled", "budget_tokens": 8192} ≤ 8,192 Medelhög ansträngning.
{"type": "enabled", "budget_tokens": 16000} > 8,192 Hög ansträngning.

En modell som resonerar returnerar sitt resonemang som ett block {"type": "thinking", "thinking": "…"} före texten. De Shannon-nivåer som resonerar skickar det också.

Ansträngningsnivåerna beskrivs på sin egen sida. Resonemangsansträngning

Verktyg

Ett verktyg är en funktion som din kod kör. Beskriv varje verktyg med ett name, en description och ett input_schema. När modellen vill använda ett verktyg innehåller svaret ett tool_use-block och stop_reason är tool_use.

En verktygsdefinition i tools:

tools
[
  {
    "name": "get_weather",
    "description": "Current weather for a city.",
    "input_schema": {
      "type": "object",
      "properties": {
        "city": {
          "type": "string"
        }
      },
      "required": [
        "city"
      ]
    }
  }
]

content i ett svar som anropar det:

200 content
[
  {
    "type": "text",
    "text": ""
  },
  {
    "type": "tool_use",
    "id": "toolu_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
    "name": "get_weather",
    "input": {
      "city": "Paris"
    }
  }
]

Kör verktyget och skicka sedan begäran igen, med anropet och ett tool_result-block tillagda i 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

Form Effekt Tillämpas av
{"type": "auto"} Modellen avgör om den ska anropa ett verktyg. Detta är standard. Alla modeller
{"type": "any"} Modellen måste anropa ett av verktygen. Hostade open-weight-modeller
{"type": "tool", "name": "…"} Modellen måste anropa det namngivna verktyget. Hostade open-weight-modeller

Endast verktyg med ett input_schema läses. Webbsökning är inget verktyg på den här endpointen: sätt fältet web_search.

Verktygsloopen beskrivs i sin helhet på sin egen sida. Funktionsanrop

Svaret

Fält Typ Beskrivning Skickas av
id string msg_ följt av 32 hexadecimala tecken. Alla modeller
type string Alltid message. Alla modeller
role string Alltid assistant. Alla modeller
model string Kanoniskt id för modellen som svarade. Alla modeller
content array Svarets block, i den här ordningen: thinking när modellen resonerade, text, därefter ett tool_use per verktygsanrop. Alla modeller
stop_reason string Varför svaret tog slut. Se värdena nedan. Alla modeller
usage object input_tokens och output_tokens. Alla modeller
sources array Bara på en begäran med web_search: true vars sökning fann något: de resultat som modellen fick, vart och ett med index, title och url. [1] i svaret är posten med index 1. I en ström kommer det med händelsen message_delta. shannon-1.6-*, shannon-2-*, Shannon 3-familjen
usage.cache_read_input_tokens integer cache_read_input_tokens är den del av prompten som lästs från cachen; input_tokens är resten. cache_creation_input_tokens är alltid 0. Hostade open-weight-modeller

Svarsblock

Block Beskrivning
{"type": "thinking", "thinking": "…"} Modellens resonemang. Det finns ingen signature-medlem.
{"type": "text", "text": "…"} Svarstexten. Den kan vara tom när svaret är ett verktygsanrop.
{"type": "tool_use", "id": "toolu_…", "name": "…", "input": {…}} Ett verktygsanrop. input är ett JSON-objekt. Skicka tillbaka resultatet med samma id.

stop_reason

stop_reason Beskrivning Skickas av
end_turn Modellen avslutade sitt svar, eller en av dina stop_sequences förekom. Alla modeller
tool_use Svaret innehåller ett eller flera verktygsanrop. Alla modeller
max_tokens Svaret avbröts vid outputgränsen. Shannon 3-familjen, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1, i strömmar

Streaming

Sätt stream till true för server-sent events. Varje ram har en event:-rad med händelsens namn och en data:-rad med ett JSON-objekt som upprepar namnet i type. Strömhjälparna i Anthropic SDK läser de här händelserna åt dig:

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)

Händelserna, i den ordning de kommer:

Händelse Data När
message_start message Alltid först. message innehåller id, roll, modell, ett tomt content och en usage som börjar på noll.
content_block_start index, content_block Ett block öppnas. content_block är ett tomt text- eller thinking-block, eller ett tool_use-block med sitt id och name.
content_block_delta index, delta {"type": "thinking_delta", "thinking"} En bit av resonemanget, för ett thinking-block.
content_block_delta index, delta {"type": "text_delta", "text"} En bit av svaret, för ett text-block.
content_block_delta index, delta {"type": "input_json_delta", "partial_json"} Argumenten till ett verktygsanrop, kompletta i ett enda delta, för ett tool_use-block.
content_block_stop index Blocket med detta index är färdigt.
message_delta delta {stop_reason, stop_sequence}, usage Svarets slut: delta.stop_reason och begärans usage.
message_stop Alltid sist.

Block numreras med index i den ordning de öppnas, och ett block är färdigt innan nästa öppnas. Läs varje block efter dess typ, inte efter dess nummer: en ström kan först öppna ett tomt text-block, sedan thinking-blocket, och leverera svaret i ett senare text-block.

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

Skickas av Beskrivning
Shannon 3-familjen, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 En ping-händelse med data {"type": "ping"}, var 15:e sekund.
Hostade open-weight-modeller En kommentarsrad : keepalive, var 15:e sekund medan modellen arbetar.

En ström som misslyckas

Ett fel efter att strömmen har startat är en error-händelse med samma kropp som ett felsvar: {"type": "error", "error": {"type", "message"}}. De avslutande händelserna, message_delta och message_stop, följer ändå. Behandla svaret som misslyckat och skicka begäran igen.

Fel

Fel använder Anthropics felkropp: type är error, och error-objektet innehåller en type och ett message. Tabellen listar det som den här endpointen oftast returnerar. Den fullständiga listan, med vad som ska försökas igen, har en egen sida. Felhantering

400 JSON
{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "unknown model: no-such-model"
  }
}
Status Typ Meddelande När
401 authentication_error Missing authentication
Invalid API key
Ingen API-nyckel skickades, eller så är nyckeln okänd eller återkallad.
400 invalid_request_error unknown model: <id> model är inte ett Shannon-modell-id.
400 invalid_request_error No user message provided Shannon-nivåer: begäran har ingen användartext och inga tools.
400 invalid_request_error <id> does not accept image input En bild skickades till en hostad open-weight-modell utan bildinput.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … messages saknas, eller ett fält har fel JSON-typ.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_tokens är större än vad som återstår av din balans.
429 rate_limit_error Too many requests. Retry in <n>s. Flood protection: fler än 120 begäranden på en minut på ditt konto.
429 rate_limit_error Shannon Coder call quota reached. Upgrade your plan at shannon-ai.com/plan shannon-coder-1: de Shannon Coder-anrop som din plan ger för det aktuella 4-timmarsfönstret är förbrukade.
500 server_error The model backend failed to answer. Please retry. Modellen gav inget svar. Skicka begäran igen.
502 api_error The model backend failed to answer. Please retry. Modellen gav inget svar. Skicka begäran igen.

Räkna tokens

POST /v1/messages/count_tokens tar samma kropp som en meddelandebegäran (model, system, messages, tools) och returnerar {"input_tokens": n}: antalet inputtokens som begäran skulle debiteras. Det räknar för de hostade open-weight-modellerna, är gratis och räknas inte av 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)

Räkningen har en egen sida, med endpointen för ren text och gränserna. Tokenräkning