Zum Inhalt sprangen
Anthropic-Format

Anthropic-Format

POST /v1/messages hëlt eng Ufro am Anthropic-Messages-Format un an äntwert am selwechte Format, gestreamt oder net. Benotzt et mat der Anthropic-SDK a mat Tools, déi doropper opbauen, wéi Claude Code: stellt d'Basis-URL an, benotzt Ären Shannon-API-Schlëssel an nennt eng Shannon-Modell-ID.

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

Riicht d'Anthropic-SDK op d'Shannon-Basis-URL. D'SDK hänkt /v1/messages un a schéckt Äre Schlëssel am x-api-key-Header.

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)

D'Äntwert ass eng Message, deem säi content eng Lëscht vu Blöck ass. Fannt d'Blöck un hirem type: wann de Modell reasonéiert huet, ass den éischte Block thinking an den Text kënnt duerno.

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 Wäert Beschreiwung
x-api-key YOUR_API_KEY Äre API-Schlëssel. Authorization: Bearer YOUR_API_KEY gëtt amplaz dovun akzeptéiert.
content-type application/json Erfuerderlech.
anthropic-version 2023-06-01 Gëtt akzeptéiert, ass net erfuerderlech. D'Anthropic-SDK schéckt 2023-06-01; d'Äntwert huet dasselwecht Format, egal wéi de Wäert ass.
anthropic-beta Gëtt akzeptéiert, ass net erfuerderlech.
x-request-id Optional. Är eege ID fir d'Ufro. Si kënnt onverännert an der Äntwert zréck; ouni si huet d'Äntwert eng ID aus 12 hexadezimale Zeechen.

Request-Felder

Nëmmen messages ass erfuerderlech. D'Kolonn Ugewannt vun nennt d'Modeller, bei deenen e Feld d'Äntwert ännert. D'Hosted Open-Weight-Modeller sinn déi zwielef IDen aus der Modellëscht; d'Shannon-3-Famill ass shannon-3, shannon-3-pro, shannon-3.1 an shannon-3.1-pro. Modeller a Präisser

Feld Typ Standard Beschreiwung Ugewannt vun
model string shannon-1.6-lite Eng Shannon-Modell-ID aus der Modellëscht. Schéckt se bei all Ufro mat. D'Zuerdnung ënnerscheet net tëscht Groß- a Kleinschreiwung. All aneren Numm gëtt 400 unknown model zréck, dofir muss en Tool, dat seng eege Modellnimm schéckt, op eng Shannon-ID agestallt ginn. All Modeller
messages array Erfuerderlech. D'Gespréich, eelst Message als éischt, mat de Rollen user an assistant. Kuckt ënnen Messagen a Content-Blöck. All Modeller
system string | array Instruktioune fir de Modell: e String oder en Array vun Text-Blöck. Kuckt ënnen System-Prompt. Hosted Open-Weight-Modeller, shannon-1.6-*, shannon-2-*, shannon-coder-1
max_tokens integer 4096 Uewergrenz vun der Äntwert, an Tokens. Optional bei dësem Endpoint; d'Anthropic-SDK schéckt et ëmmer mat. E Wäert ausserhalb vun 1 bis 65,536 gëtt an dee Beräich geréckelt. Et ass och de Betrag, dee vun Ärem Solde reservéiert gëtt, während d'Ufro leeft. Hosted Open-Weight-Modeller, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
stream boolean false true schéckt d'Äntwert als Server-sent Events. Kuckt ënnen Streaming. All Modeller
temperature number Sampling-Temperatur. Bei den Hosted Open-Weight-Modeller ginn d'Wäerter tëscht 0 an 2 gehalen. Hosted Open-Weight-Modeller, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
top_p number Nucleus-Sampling. Hosted Open-Weight-Modeller
stop_sequences array Bis zu 4 Strings. D'Äntwert hält virum éischten op, deen optrëtt. stop_reason bleift end_turn. Hosted Open-Weight-Modeller
tools array D'Tools, déi de Modell opruffe kann, jidderee als {"name", "description", "input_schema"}. Kuckt ënnen Tools. All Modeller
tool_choice object {"type": "auto"} léisst de Modell entscheeden, {"type": "any"} zwéngt en, en Tool opzeruffen, {"type": "tool", "name": "…"} zwéngt en, dat Tool opzeruffen. Hosted Open-Weight-Modeller
thinking object Wéi vill de Modell reasonéiert, éier hien äntwert. Kuckt ënnen Thinking. Hosted Open-Weight-Modeller
web_search boolean false En Zousaz vu Shannon zum Format: true léisst de Modell um Web sichen, éier hien äntwert. shannon-1.6-*, shannon-2-*, Shannon-3-Famill

Ouni max_tokens ass de Wäert 4,096, a bei shannon-coder-1 65,536.

metadata, top_k, service_tier an cache_control-Markéierungen op Blöck ginn akzeptéiert, sou datt bestehende Client-Code onverännert leeft. Si änneren d'Äntwert net; Prompt Caching bei den Hosted Open-Weight-Modeller ass automatesch.

Eng JSON-Äntwert no engem Schema gëtt bei Chat Completions mat response_format an bei Responses mat text.format ugefrot. Strukturéiert Output

Eng Ufro mat System-Prompt an Thinking

Dës Ufro schéckt e System-Prompt, e Thinking-Budget, eng Temperatur an eng Stop-Sequenz. Si benotzt en Hosted Open-Weight-Modell, dee se all applizéiert.

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)

Bei den Hosted Open-Weight-Modeller mellt usage d'Tokens, déi aus dem Prompt-Cache gelies goufen, getrennt vun deenen anere Input-Tokens.

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

System-Prompt

system ass e String oder en Array vun Text-Blöck an der Form [{"type": "text", "text": "…"}]. D'Texter vun de Blöck ginn mat engem Zeilenëmbroch verbonnen.

Hie gëtt vun den Hosted Open-Weight-Modeller, shannon-1.6-lite, shannon-1.6-pro, shannon-2-lite, shannon-2-pro a shannon-coder-1 ugewannt. Bei enger ID aus der Shannon-3-Famill setzt Instruktioune, déi gëllen, an d'Benotzermessage.

Messagen a Content-Blöck

Eng Message huet eng role, user oder assistant, an e content. content ass e String oder en Array vu Blöck.

Block Beschreiwung Verfügbar bei
{"type": "text", "text": "…"} Text. All Modeller
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": "…"}}
{"type": "image", "source": {"type": "url", "url": "…"}}
E Bild an enger user-Message, als base64 oder iwwer URL. Shannon-3-Famill, shannon-1.6-lite, shannon-1.6-pro, an d'Hosted Open-Weight-Modeller, déi Bild-Input opféieren
{"type": "document", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} En Dokument (PDF, Word, PowerPoint oder Excel) an enger user-Message, als base64 oder iwwer URL. Shannon-3-Famill
{"type": "tool_use", "id": "toolu_…", "name": "…", "input": {…}} An enger assistant-Message: en Tool-Opruff, deen de Modell an enger fréierer Äntwert gemaach huet. All Modeller
{"type": "tool_result", "tool_use_id": "toolu_…", "content": "…"} An enger user-Message: d'Resultat vun deem Opruff. content ass e String oder eng Lëscht vun Text-Blöck. All Modeller

Dir kënnt de content vun enger fréierer Äntwert onverännert zréckschécken: text- an tool_use-Blöck ginn gelies, thinking-Blöck ginn iwwersprong.

Bei den Shannon-Niveaue ginn Biller an Dokumenter aus der leschter user-Message gelies. Gréissten a Limite hunn hir eege Säit. Biller a Fichieren

Thinking

D'Hosted Open-Weight-Modeller ordnen thinking engem Reasoning-Effort zou. Ouni d'Feld ass den Effort héich.

Form budget_tokens Wierkung
{"type": "disabled"} Keng Reasoning. D'Äntwert huet keen thinking-Block.
{"type": "enabled", "budget_tokens": 2048} ≤ 2,048 Niddregen Effort.
{"type": "enabled", "budget_tokens": 8192} ≤ 8,192 Mëttleren Effort.
{"type": "enabled", "budget_tokens": 16000} > 8,192 Héijen Effort.

E Modell, dat reasonéiert, schéckt seng Reasoning als Block {"type": "thinking", "thinking": "…"} virum Text zréck. D'Shannon-Niveauen, déi reasonéieren, schécken et och.

D'Efforte si op hirer eegener Säit beschriwwen. Reasoning-Effort

Tools

En Tool ass eng Funktioun, déi Äre Code ausféiert. Beschreift all Tool mat engem name, enger description an engem input_schema. Wann de Modell en Tool wëll, enthält d'Äntwert en tool_use-Block an stop_reason ass tool_use.

Eng Tool-Definitioun an tools:

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

De content vun enger Äntwert, déi et opruff:

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

Féiert d'Tool aus, schéckt dann d'Ufro nach eng Kéier mam Opruff an engem tool_result-Block, deen zu messages dobäikënnt:

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 Wierkung Ugewannt vun
{"type": "auto"} De Modell entscheet, ob en en Tool opruff. Dat ass de Standard. All Modeller
{"type": "any"} De Modell muss ee vun den Tools opruffen. Hosted Open-Weight-Modeller
{"type": "tool", "name": "…"} De Modell muss dat genannt Tool opruffen. Hosted Open-Weight-Modeller

Nëmme Tools mat engem input_schema ginn gelies. D'Websich ass bei dësem Endpoint kee Tool: setzt d'Feld web_search.

D'Tool-Loop ass komplett op hirer eegener Säit beschriwwen. Funktiounsofruff

D'Äntwert

Feld Typ Beschreiwung Geschéckt vun
id string msg_ gefollegt vun 32 hexadezimale Zeechen. All Modeller
type string Ëmmer message. All Modeller
role string Ëmmer assistant. All Modeller
model string Déi kanonesch ID vum Modell, dee geäntwert huet. All Modeller
content array D'Blöck vun der Äntwert, an dëser Reiefolleg: thinking, wann de Modell reasonéiert huet, text, dann een tool_use pro Tool-Opruff. All Modeller
stop_reason string Firwat d'Äntwert opgehalen huet. Kuckt d'Wäerter ënnen. All Modeller
usage object input_tokens an output_tokens. All Modeller
sources array Just bei enger Ufro mat web_search: true, där hir Sich eppes fonnt huet: d'Resultater, déi de Modell kritt huet, all mat index, title an url. [1] an der Äntwert ass den Androck mat index 1. An engem Stream kënnt et mam message_delta-Event. shannon-1.6-*, shannon-2-*, Shannon-3-Famill
usage.cache_read_input_tokens integer cache_read_input_tokens ass den Deel vum Prompt, deen aus dem Cache gelies gouf; input_tokens ass de Rescht. cache_creation_input_tokens ass ëmmer 0. Hosted Open-Weight-Modeller

Äntwert-Blöck

Block Beschreiwung
{"type": "thinking", "thinking": "…"} D'Reasoning vum Modell. Et gëtt kee signature-Member.
{"type": "text", "text": "…"} Den Text vun der Äntwert. Hie kann eidel sinn, wann d'Äntwert en Tool-Opruff ass.
{"type": "tool_use", "id": "toolu_…", "name": "…", "input": {…}} En Tool-Opruff. input ass en JSON-Objet. Schéckt d'Resultat mat derselwechter id zréck.

stop_reason

stop_reason Beschreiwung Geschéckt vun
end_turn De Modell huet seng Äntwert fäerdeg gemaach, oder eng vun Ären stop_sequences ass opgetruede. All Modeller
tool_use D'Äntwert enthält een oder méi Tool-Ufruffer. All Modeller
max_tokens D'Äntwert gouf um Output-Limit ofgeschnidden. Shannon-3-Famill, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1, a Streams

Streaming

Setzt stream op true fir Server-sent Events. All Frame huet eng event:-Zeil mam Numm vum Event an eng data:-Zeil mat engem JSON-Objet, dat den Numm an type widderhëlt. D'Stream-Helper vun der Anthropic-SDK liesen dës Events fir Iech:

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)

D'Events, an der Reiefolleg, wéi si ukommen:

Event Daten Wéini
message_start message Ëmmer als éischt. message enthält d'ID, d'Roll, de Modell, e leeren content an eng usage, déi bei null ufänkt.
content_block_start index, content_block E Block geet op. content_block ass en eidele text- oder thinking-Block, oder en tool_use-Block mat senger id a sengem name.
content_block_delta index, delta {"type": "thinking_delta", "thinking"} E Stéck vun der Reasoning, fir en thinking-Block.
content_block_delta index, delta {"type": "text_delta", "text"} E Stéck vun der Äntwert, fir en text-Block.
content_block_delta index, delta {"type": "input_json_delta", "partial_json"} D'Argumenter vun engem Tool-Opruff, komplett an engem Delta, fir en tool_use-Block.
content_block_stop index De Block mat dësem index ass komplett.
message_delta delta {stop_reason, stop_sequence}, usage D'Enn vun der Äntwert: delta.stop_reason, an d'usage vun der Ufro.
message_stop Ëmmer als lescht.

D'Blöck si per index an der Reiefolleg nummeréiert, an där si opgoen, an ee Block ass komplett, éier dee nächste opgeet. Liest all Block no sengem Typ, net no senger Nummer: e Stream kann zuerst en eidele text-Block opmaachen, dann den thinking-Block, an d'Äntwert an engem spéideren text-Block liwweren.

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

Geschéckt vun Beschreiwung
Shannon-3-Famill, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 E ping-Event mat den Daten {"type": "ping"}, all 15 Sekonnen.
Hosted Open-Weight-Modeller Eng Kommentarzeil : keepalive, all 15 Sekonnen, während de Modell schafft.

E Stream, dee feelschléit

E Feeler, nodeems de Stream ugefaang huet, ass en error-Event mat deemselwechte Body wéi eng Feeler-Äntwert: {"type": "error", "error": {"type", "message"}}. D'Ofschlossevents message_delta an message_stop kommen trotzdem nach. Behandelt d'Äntwert als feelgeschloen a schéckt d'Ufro nach eng Kéier.

Feeler

Feeler benotzen den Anthropic-Feeler-Body: type ass error, an d'error-Objet enthält en type an eng message. D'Tabell lëscht, wat dësen Endpoint am heefegsten zréckgëtt. Déi komplett Lëscht, mat deem, wat Dir nei probéiere sollt, huet hir eege Säit. Feelerbehandlung

400 JSON
{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "unknown model: no-such-model"
  }
}
Status Typ Message Wéini
401 authentication_error Missing authentication
Invalid API key
Et gouf kee API-Schlëssel geschéckt, oder de Schlëssel ass onbekannt oder widderruff.
400 invalid_request_error unknown model: <id> model ass keng Shannon-Modell-ID.
400 invalid_request_error No user message provided Shannon-Niveauen: d'Ufro huet keen Benotzertext a keng tools.
400 invalid_request_error <id> does not accept image input E Bild gouf un en Hosted Open-Weight-Modell ouni Bild-Input geschéckt.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … messages feelt, oder e Feld huet de falsche JSON-Typ.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_tokens ass méi grouss wéi dat, wat vun Ärem Solde iwwreg ass.
429 rate_limit_error Too many requests. Retry in <n>s. Flood-Schutz: méi wéi 120 Ufroen an enger Minutt op Ärem Kont.
429 rate_limit_error Shannon Coder call quota reached. Upgrade your plan at shannon-ai.com/plan shannon-coder-1: d'Shannon-Coder-Ufruffer vun Ärem Plan fir dat aktuellt 4-Stonne-Fënster sinn opgebraucht.
500 server_error The model backend failed to answer. Please retry. De Modell huet keng Äntwert produzéiert. Schéckt d'Ufro nach eng Kéier.
502 api_error The model backend failed to answer. Please retry. De Modell huet keng Äntwert produzéiert. Schéckt d'Ufro nach eng Kéier.

Tokens zielen

POST /v1/messages/count_tokens hëlt deeselwechte Body wéi eng Message-Ufro (model, system, messages, tools) a gëtt {"input_tokens": n} zréck: d'Zuel vun den Input-Tokens, déi d'Ufro kaschte géif. Et zielt fir d'Hosted Open-Weight-Modeller, ass gratis a gëtt net vum Flood-Schutz gezielt.

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)

D'Zielen huet seng eege Säit, mam Plain-Text-Endpoint an de Limiten. Tokenzielung