Zum Inhalt springen
Chat Completions

Chat Completions

POST /v1/chat/completions nimmt eine Konversation entgegen und gibt die nächste Nachricht des Modells im Format der OpenAI Chat Completions zurück. Verwenden Sie es mit jedem OpenAI-SDK oder über einfaches HTTP; diese Seite ist die Referenz Feld für Feld.

POST https://api.shannon-ai.com/v1/chat/completions

Die kleinste Anfrage besteht aus einer Modell-ID und einer User-Nachricht.

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com/v1",
)

response = client.chat.completions.create(
    model="shannon-3",
    messages=[{"role": "user", "content": "Say hello in one sentence."}],
)

print(response.choices[0].message.content)

Die Antwort ist ein JSON-Objekt:

200 JSON
{
  "id": "chatcmpl-5f0c1e7a9b3d4c62a8e1f07d2b46c9a3",
  "object": "chat.completion",
  "created": 1791625200,
  "model": "shannon-3",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Hello, it is good to meet you.",
        "reasoning_content": "The user wants a greeting in one sentence. Keep it short and friendly."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 1184,
    "completion_tokens": 46,
    "total_tokens": 1230
  }
}

Header

Anfrage-Header

Header Wert Beschreibung
Authorization Bearer YOUR_API_KEY Ihr API-Key. Stattdessen wird bei jedem Endpunkt x-api-key: YOUR_API_KEY akzeptiert.
Content-Type application/json Erforderlich. Jeder andere Wert gibt 415 zurück.
x-request-id Optional. Ihre eigene ID für die Anfrage. Sie kommt unverändert in der Antwort zurück.

Antwort-Header

Header Beschreibung
x-request-id Bei jeder Antwort, auch bei Fehlern und Streams: der von Ihnen gesendete Wert oder 12 hexadezimale Zeichen, wenn Sie keinen gesendet haben. Nennen Sie ihn, wenn Sie ein Problem melden.
content-type application/json oder text/event-stream, wenn stream true ist.

Anfragefelder

Nur messages ist erforderlich. Die Spalte Angewendet von nennt die Modelle, bei denen ein Feld die Antwort verändert. Die gehosteten Open-Weight-Modelle sind die zwölf IDs der Modellliste; die Shannon-3-Familie besteht aus shannon-3, shannon-3-pro, shannon-3.1 und shannon-3.1-pro. Modelle & Preise

Feld Typ Standard Beschreibung Angewendet von
model string shannon-1.6-lite Das Modell, das antwortet: eine ID aus der Modellliste. Senden Sie sie mit jeder Anfrage. Die Zuordnung unterscheidet nicht zwischen Groß- und Kleinschreibung. Eine ID, die nicht veröffentlicht ist, gibt 400 unknown model zurück. Alle Modelle
messages array Erforderlich. Die Konversation, älteste Nachricht zuerst. Siehe Nachrichten weiter unten. Alle Modelle
stream boolean false true sendet die Antwort als Server-Sent Events, während sie geschrieben wird. Alle Modelle
max_tokens integer 4096 Obergrenze der Antwort, in Tokens. Ein Wert außerhalb von 1 bis 65,536 wird in diesen Bereich verschoben. Es ist auch der Betrag, der von Ihrem Guthaben zurückgelegt wird, solange die Anfrage läuft. Siehe Output-Länge weiter unten. Gehostete Open-Weight-Modelle, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
max_completion_tokens integer Wie max_tokens. Wenn beide gesendet werden, wird max_tokens verwendet. Gehostete Open-Weight-Modelle, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
temperature number Sampling-Temperatur. Bei den gehosteten Open-Weight-Modellen ist der Standard 1, und Werte werden zwischen 0 und 2 gehalten. Gehostete Open-Weight-Modelle, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
top_p number 0.95 Nucleus-Sampling. Werte werden zwischen 0 und 1 gehalten. Gehostete Open-Weight-Modelle
seed integer Seed des Samplers, eine beliebige Ganzzahl. Ohne ihn wird der Seed aus dem Modell und der Konversation abgeleitet, sodass dieselbe Anfrage, zweimal gesendet, denselben Seed verwendet. Gehostete Open-Weight-Modelle
stop string | array Ein String oder ein Array von Strings. Bis zu 4 werden verwendet. Die Antwort endet vor dem ersten, der darin vorkommt; der Stop-Text selbst wird nicht zurückgegeben. Gehostete Open-Weight-Modelle
reasoning_effort string high Wie viel das Modell nachdenkt, bevor es antwortet: off, low, medium oder high. none und minimal bedeuten off, default bedeutet medium, max bedeutet high. Jeder andere Wert gibt 400 zurück. Gehostete Open-Weight-Modelle
reasoning object Dieselbe Einstellung in Objektform: {"effort": "low"}. Wenn beide gesendet werden, wird reasoning_effort verwendet. Gehostete Open-Weight-Modelle
tools array Die Funktionen, die das Modell aufrufen darf, jeweils als {"type": "function", "function": {"name", "description", "parameters"}}. Die Aufrufe des Modells kommen in tool_calls zurück; Ihr Code führt sie aus. Alle Modelle
tool_choice string | object auto "auto" lässt das Modell entscheiden. "required" zwingt es, ein Tool aufzurufen. {"type": "function", "function": {"name": "…"}} zwingt es, dieses Tool aufzurufen. Gehostete Open-Weight-Modelle
response_format object {"type": "json_object"} für eine JSON-Antwort oder {"type": "json_schema", "json_schema": {…}} für eine Antwort, die Ihrem Schema folgt. Alle Shannon-Stufen; gehostete Open-Weight-Modelle wie pro ID aufgeführt
web_search boolean false true lässt das Modell das Web durchsuchen, bevor es antwortet. shannon-1.6-*, shannon-2-*, Shannon-3-Familie

Weitere OpenAI-Felder wie n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store und prompt_cache_key werden akzeptiert, damit vorhandener Client-Code unverändert läuft. Sie verändern die Antwort nicht: Es gibt immer genau eine Choice, und ein Stream endet immer mit Nutzungsdaten.

Ein Feld mit dem falschen JSON-Typ, zum Beispiel "max_tokens": "100", gibt 422 zurück. Eine Anfrage ohne messages ebenfalls.

Tools, strukturierte Ausgabe, Reasoning und Websuche haben jeweils eine eigene Seite: Funktionsaufrufe, Strukturierte Ausgaben, Reasoning-Aufwand, Integrierte Websuche.

Eine Anfrage mit Optionen

Diese Anfrage setzt eine System-Nachricht, die Sampling-Felder und den Reasoning-Aufwand. Sie verwendet ein gehostetes Open-Weight-Modell, das alle davon anwendet.

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com/v1",
)

response = client.chat.completions.create(
    model="DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
    messages=[
        {"role": "system", "content": "You are a physics teacher. Answer in two sentences."},
        {"role": "user", "content": "Why is the sky blue?"},
    ],
    max_tokens=512,
    temperature=0.3,
    top_p=0.9,
    seed=7,
    stop=["\n\n"],
    reasoning_effort="low",
)

message = response.choices[0].message
print(message.reasoning_content)  # the reasoning
print(message.content)            # the answer
print(response.usage)

Die Antwort hat dieselbe Form wie oben. Ihre usage ergänzt bei den gehosteten Open-Weight-Modellen zwei Details: die aus dem Cache gelesenen Prompt-Tokens und die für Reasoning aufgewendeten Tokens.

200 JSON
{
  "usage": {
    "prompt_tokens": 31,
    "completion_tokens": 62,
    "total_tokens": 93,
    "prompt_tokens_details": {
      "cached_tokens": 0
    },
    "completion_tokens_details": {
      "reasoning_tokens": 21
    }
  }
}

Output-Länge

max_tokens bewirkt zwei Dinge. Erstens ist es die Anzahl der Tokens, die beim Start der Anfrage von Ihrem Guthaben zurückgelegt werden. Ist die Antwort vollständig, wird dieser Betrag durch die Tokens ersetzt, die die Anfrage verbraucht hat. Ist max_tokens größer als das, was von Ihrem Guthaben übrig ist, gibt die Anfrage 429 Quota exceeded zurück, auch wenn die Antwort selbst gepasst hätte. Senden Sie ein niedrigeres max_tokens, um weniger zurückzulegen.

shannon-coder-1 wird bei diesem Endpunkt anders gezählt: Jede Anfrage ist einer der Shannon-Coder-Aufrufe Ihres Plans, und dafür werden keine Tokens zurückgelegt. Limits und Guthaben

Zweitens begrenzt es bei diesen Modellen die Länge der Antwort:

Modelle Was max_tokens bewirkt
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 Die Antwort endet, wenn sie das Limit erreicht. Ein Stream endet dann mit finish_reason length.
Gehostete Open-Weight-Modelle Der Antworttext endet bei max_tokens. Reasoning wird darauf nicht angerechnet. Werte unter 256 gelten als 256.

Ohne max_tokens oder max_completion_tokens beträgt der Wert 4,096. Bei shannon-coder-1 sind es 65,536.

Nachrichten

Jede Nachricht ist ein Objekt mit einer role und einem content. content ist ein String oder ein Array von Teilen, wenn die Nachricht mehr als Text enthält.

Rolle Beschreibung Angewendet von
system Anweisungen für das Modell. Setzen Sie sie an den Anfang. Bei den Shannon-Stufen wird die erste system-Nachricht verwendet. Gehostete Open-Weight-Modelle, shannon-1.6-*, shannon-2-*, shannon-coder-1
developer Wird wie system gelesen. Gehostete Open-Weight-Modelle
user Das, was Sie fragen. Bei den Shannon-Stufen ist die letzte user-Nachricht der Prompt, und die Nachrichten davor sind der Verlauf. Alle Modelle
assistant Frühere Antworten des Modells. Behalten Sie seine tool_calls, wenn Sie danach ein Tool-Ergebnis senden. Alle Modelle
tool Das Ergebnis eines Tool-Aufrufs: tool_call_id enthält die ID des Aufrufs und content das Ergebnis als String. Alle Modelle

Bei einer ID der Shannon-3-Familie gehören Anweisungen, die gelten müssen, in die user-Nachricht.

Bei den Shannon-Stufen gibt eine Anfrage ohne Nutzertext und ohne tools 400 No user message provided zurück.

Content-Teile

Teil Beschreibung Verfügbar bei
{"type": "text", "text": "…"} Einfacher Text. Alle Modelle
{"type": "image_url", "image_url": {"url": "…"}} Ein Bild, als data:-URL mit Base64-Inhalt oder als http(s)-URL. Shannon-3-Familie, shannon-1.6-lite, shannon-1.6-pro und die gehosteten Open-Weight-Modelle, die Bild-Input aufführen
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} Ein Dokument (PDF, Word, PowerPoint oder Excel), als Base64 oder per URL. Shannon-3-Familie

Größen, Limits und die vollständige Liste der Formen haben eine eigene Seite. Bilder und Dateien

Das Antwortobjekt

Feld Typ Beschreibung
id string chatcmpl- gefolgt von 32 hexadezimalen Zeichen.
object string Immer chat.completion.
created integer Zeitpunkt der Antwort, in Unix-Sekunden.
model string Die kanonische ID des Modells, das geantwortet hat. Sie kann in der Schreibweise von der ID abweichen, die Sie gesendet haben.
choices array Immer genau eine Choice, mit index 0.
choices[0].message.role string Immer assistant.
choices[0].message.content string | null Der Antworttext. Mit tool_calls ist er bei den Shannon-Stufen null; die gehosteten Open-Weight-Modelle können Text neben den Aufrufen senden.
choices[0].message.reasoning_content string | null Das Reasoning, das das Modell vor der Antwort geschrieben hat, oder null, wenn es keines gibt.
choices[0].message.tool_calls array Nur vorhanden, wenn das Modell Tools aufruft. Jeder Eintrag hat eine id, den type function und function mit dem name und den arguments als JSON-String.
choices[0].message.annotations array Nur bei einer Anfrage mit web_search: true, deren Suche etwas gefunden hat. Ein url_citation für jede Quelle, die ein Marker in content nennt, mit url, title, start_index und end_index (die Position des Markers, in Zeichen gezählt, das Ende ist nicht eingeschlossen).
choices[0].finish_reason string Warum die Antwort endete. Siehe Finish-Gründe.
usage object Die Tokens der Anfrage. Siehe Nutzung.
sources array Nur bei einer Anfrage mit web_search: true, deren Suche etwas gefunden hat: die Ergebnisse, die dem Modell gegeben wurden, jeweils mit index, title und url. [1] in der Antwort ist der Eintrag mit index 1.

Finish-Gründe

finish_reason Beschreibung
stop Das Modell hat seine Antwort beendet, oder ein stop-String ist aufgetreten.
tool_calls Das Modell ruft ein oder mehrere Tools auf. Führen Sie sie aus und senden Sie die Ergebnisse in tool-Nachrichten.
length Die Antwort wurde am Output-Limit abgeschnitten. Wird in Streams von shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 und der Shannon-3-Familie gemeldet.

Eine Antwort, die nicht gestreamt wird, meldet stop oder tool_calls.

Nutzung

Feld Typ Beschreibung Verfügbar bei
usage.prompt_tokens integer Input-Tokens. Alle Modelle
usage.completion_tokens integer Output-Tokens: Reasoning, Antwort und Tool-Aufrufe zusammen. Alle Modelle
usage.total_tokens integer prompt_tokens plus completion_tokens. Alle Modelle
usage.prompt_tokens_details.cached_tokens integer Der Teil von prompt_tokens, der aus dem Prompt-Cache gelesen wurde. Gehostete Open-Weight-Modelle
usage.completion_tokens_details.reasoning_tokens integer Der Teil von completion_tokens, der für Reasoning aufgewendet wurde. Gehostete Open-Weight-Modelle

Bei den gehosteten Open-Weight-Modellen sind prompt_tokens Ihre Nachrichten und Tool-Definitionen, gezählt mit dem eigenen Tokenizer des Modells, plus die Tokens eventueller Bilder. Die Endpunkte zum Token-Zählen liefern dieselbe Zahl, bevor Sie senden. Token zählen

Bei den Shannon-Stufen zählt prompt_tokens alles, was das Modell gelesen hat, um die Antwort zu schreiben, und ist daher größer als allein der Text Ihrer Nachrichten.

Streaming

Ist stream auf true gesetzt, trifft die Antwort als chat.completion.chunk-Events ein und endet mit data: [DONE]. Der letzte Chunk davor enthält finish_reason und usage; stream_options sind nicht nötig. Die Chunk-Formen, Keep-alive-Zeilen und Fehler innerhalb eines Streams haben eine eigene Seite. Streaming

Fehler

Ein Fehler ist ein JSON-Objekt mit einem Member error. Die Prüfungen laufen in dieser Reihenfolge: API-Key, Request-Body, Modell-ID, dann Guthaben. Die Tabelle listet, was dieser Endpunkt am häufigsten zurückgibt. Die vollständige Liste, mit Hinweisen, was wiederholt werden sollte, hat eine eigene Seite. Fehlerbehandlung

400 JSON
{
  "error": {
    "type": "invalid_request_error",
    "message": "unknown model: no-such-model"
  }
}
Status Typ Nachricht Wann
401 authentication_error Missing authentication
Invalid API key
Es wurde kein API-Key gesendet, oder der Key ist unbekannt oder widerrufen.
400 invalid_request_error unknown model: <id> model ist keine veröffentlichte ID.
400 invalid_request_error No user message provided Shannon-Stufen: Die Anfrage enthält weder Nutzertext noch tools.
400 invalid_request_error <id> does not accept image input Ein Bildteil wurde an ein gehostetes Open-Weight-Modell ohne Bild-Input gesendet.
400 invalid_request_error <id> does not accept response_format response_format wurde an ein gehostetes Open-Weight-Modell ohne strukturierte Ausgabe gesendet.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high reasoning_effort enthält einen Wert außerhalb der Liste.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … messages fehlt, oder ein Feld hat den falschen JSON-Typ.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_tokens ist größer als das, was von Ihrem Guthaben übrig ist.
429 rate_limit_error Too many requests. Retry in <n>s. Flood-Schutz: mehr als 120 Anfragen in einer Minute auf Ihrem Konto.
500 server_error The model backend failed to answer. Please retry. Das Modell hat keine Antwort erzeugt. Senden Sie die Anfrage erneut.
502 api_error The model backend failed to answer. Please retry. Dasselbe, bei der Shannon-3-Familie und den gehosteten Open-Weight-Modellen.