Chat Completions
POST /v1/chat/completions tar en konversation och returnerar modellens nästa meddelande i formatet OpenAI Chat Completions. Använd det från valfri OpenAI SDK eller över ren HTTP; den här sidan är referensen fält för fält.
POST https://api.shannon-ai.com/v1/chat/completions
Den minsta begäran är ett modell-id och ett användarmeddelande.
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) import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com/v1",
});
const response = await client.chat.completions.create({
model: "shannon-3",
messages: [{ role: "user", content: "Say hello in one sentence." }],
});
console.log(response.choices[0].message.content); curl https://api.shannon-ai.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-3",
"messages": [{"role": "user", "content": "Say hello in one sentence."}]
}' Svaret är ett JSON-objekt:
{
"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
}
} Headers
Begäransheaders
| Header | Värde | Beskrivning |
|---|---|---|
Authorization | Bearer YOUR_API_KEY | Din API-nyckel. x-api-key: YOUR_API_KEY accepteras i stället på varje endpoint. |
Content-Type | application/json | Obligatoriskt. Alla andra värden ger 415. |
x-request-id | Valfritt. Ditt eget id för begäran. Det kommer tillbaka oförändrat i svaret. |
Svarsheaders
| Header | Beskrivning |
|---|---|
x-request-id | På varje svar, även fel och strömmar: värdet du skickade, eller 12 hexadecimala tecken om du inte skickade något. Ange det när du rapporterar ett problem. |
content-type | application/json, eller text/event-stream när stream är true. |
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 | Modellen som svarar: ett id från modellistan. Skicka det med varje begäran. Matchningen är inte skiftlägeskänslig. Ett id som inte är publicerat ger 400 unknown model. | Alla modeller |
messages | array | Obligatoriskt. Konversationen, äldsta meddelandet först. Se Meddelanden nedan. | Alla modeller | |
stream | boolean | false | true skickar svaret som server-sent events medan det skrivs. | Alla modeller |
max_tokens | integer | 4096 | Övre gräns för svaret, i tokens. 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. Se Outputlängd nedan. | Hostade open-weight-modeller, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 |
max_completion_tokens | integer | Samma som max_tokens. När båda skickas används max_tokens. | Hostade open-weight-modeller, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
temperature | number | Samplingstemperatur. På de hostade open-weight-modellerna är standardvärdet 1 och värdena hålls mellan 0 och 2. | Hostade open-weight-modeller, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
top_p | number | 0.95 | Nucleus-sampling. Värdena hålls mellan 0 och 1. | Hostade open-weight-modeller |
seed | integer | Seed för samplern, valfritt heltal. Utan det härleds seed från modellen och konversationen, så samma begäran som skickas två gånger använder samma seed. | Hostade open-weight-modeller | |
stop | string | array | En sträng eller en array av strängar. Upp till 4 används. Svaret slutar före den första som förekommer; själva stopptexten returneras inte. | Hostade open-weight-modeller | |
reasoning_effort | string | high | Hur mycket modellen resonerar innan den svarar: off, low, medium eller high. none och minimal betyder off, default betyder medium, max betyder high. Alla andra värden ger 400. | Hostade open-weight-modeller |
reasoning | object | Samma inställning i objektform: {"effort": "low"}. När båda skickas används reasoning_effort. | Hostade open-weight-modeller | |
tools | array | De funktioner som modellen får anropa, var och en som {"type": "function", "function": {"name", "description", "parameters"}}. Modellens anrop kommer tillbaka i tool_calls; din kod kör dem. | Alla modeller | |
tool_choice | string | object | auto | "auto" låter modellen avgöra. "required" får den att anropa ett verktyg. {"type": "function", "function": {"name": "…"}} får den att anropa just det verktyget. | Hostade open-weight-modeller |
response_format | object | {"type": "json_object"} för ett JSON-svar, eller {"type": "json_schema", "json_schema": {…}} för ett svar som följer ditt schema. | Alla Shannon-nivåer; hostade open-weight-modeller enligt listan per id | |
web_search | boolean | false | true låter modellen söka på webben innan den svarar. | shannon-1.6-*, shannon-2-*, Shannon 3-familjen |
Andra OpenAI-fält, som n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store och prompt_cache_key, accepteras så att befintlig klientkod körs oförändrad. De ändrar inte svaret: det finns alltid ett val (choice), och en ström slutar alltid med usage.
Ett fält med fel JSON-typ, till exempel "max_tokens": "100", ger 422. Det gör även en begäran utan messages.
Verktyg, strukturerad utdata, resonemang och webbsökning har var sin sida: Funktionsanrop, Strukturerade utdata, Resonemangsansträngning, Inbyggd webbsökning.
En begäran med alternativ
Den här begäran anger ett systemmeddelande, samplingsfälten och resonemangsansträngningen. Den använder en hostad open-weight-modell, som tillämpar alla dessa.
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) import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com/v1",
});
const response = await 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",
});
const message = response.choices[0].message;
console.log(message.reasoning_content); // the reasoning
console.log(message.content); // the answer
console.log(response.usage); curl https://api.shannon-ai.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"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"
}' Svaret har samma form som ovan. Dess usage lägger till två uppgifter på de hostade open-weight-modellerna: de prompttokens som lästs från cachen och de tokens som gått åt till resonemang.
{
"usage": {
"prompt_tokens": 31,
"completion_tokens": 62,
"total_tokens": 93,
"prompt_tokens_details": {
"cached_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 21
}
}
} Outputlängd
max_tokens gör två saker. För det första är det antalet tokens som reserveras från din balans när begäran startar. När svaret är klart ersätts det beloppet av de tokens som begäran förbrukade. Om max_tokens är större än vad som återstår av din balans ger begäran 429 Quota exceeded även om själva svaret hade fått plats. Skicka ett lägre max_tokens för att reservera mindre.
shannon-coder-1 räknas annorlunda på den här endpointen: varje begäran är ett av din plans Shannon Coder-anrop, och inga tokens reserveras för den. Gränser och balans
För det andra begränsar det svarets längd på de här modellerna:
| Modeller | Vad max_tokens gör |
|---|---|
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | Svaret stannar när det når gränsen. En ström slutar då med finish_reason length. |
| Hostade open-weight-modeller | Svarstexten stannar vid max_tokens. Resonemang räknas inte mot det. Värden under 256 fungerar som 256. |
Utan max_tokens eller max_completion_tokens är värdet 4,096. På shannon-coder-1 är det 65,536.
Meddelanden
Varje meddelande är ett objekt med en role och ett content. content är en sträng, eller en array av delar när meddelandet innehåller mer än text.
| Roll | Beskrivning | Tillämpas av |
|---|---|---|
system | Instruktioner till modellen. Lägg det först. På Shannon-nivåerna är det första system-meddelandet det som används. | Hostade open-weight-modeller, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
developer | Läses som system. | Hostade open-weight-modeller |
user | Det du frågar om. På Shannon-nivåerna är det sista user-meddelandet prompten och meddelandena före det är historiken. | Alla modeller |
assistant | Modellens tidigare svar. Behåll dess tool_calls när du skickar ett verktygsresultat efter det. | Alla modeller |
tool | Resultatet av ett verktygsanrop: tool_call_id innehåller anropets id och content resultatet som en sträng. | Alla modeller |
Med ett id i Shannon 3-familjen ska instruktioner som måste gälla läggas i user-meddelandet.
På Shannon-nivåerna ger en begäran utan användartext och utan tools 400 No user message provided.
Innehållsdelar
| Del | Beskrivning | Tillgänglig på |
|---|---|---|
{"type": "text", "text": "…"} | Ren text. | Alla modeller |
{"type": "image_url", "image_url": {"url": "…"}} | En bild, som en data:-URL med base64-innehåll eller som en http(s)-URL. | Shannon 3-familjen, shannon-1.6-lite, shannon-1.6-pro och de hostade open-weight-modeller som anger bildinput |
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} | Ett dokument (PDF, Word, PowerPoint eller Excel), som base64 eller via URL. | Shannon 3-familjen |
Storlekar, gränser och den fullständiga listan över former har en egen sida. Bilder och filer
Svarsobjektet
| Fält | Typ | Beskrivning |
|---|---|---|
id | string | chatcmpl- följt av 32 hexadecimala tecken. |
object | string | Alltid chat.completion. |
created | integer | Svarets tidpunkt, i Unix-sekunder. |
model | string | Kanoniskt id för modellen som svarade. Det kan skilja sig i stavning från det id du skickade. |
choices | array | Alltid exakt ett val (choice), med index 0. |
choices[0].message.role | string | Alltid assistant. |
choices[0].message.content | string | null | Svarstexten. Med tool_calls är den null på Shannon-nivåerna; de hostade open-weight-modellerna kan skicka text vid sidan av anropen. |
choices[0].message.reasoning_content | string | null | Det resonemang som modellen skrev före svaret, eller null när det saknas. |
choices[0].message.tool_calls | array | Finns bara när modellen anropar verktyg. Varje post har ett id, type function och function med name och arguments som en JSON-sträng. |
choices[0].message.annotations | array | Bara på en begäran med web_search: true vars sökning fann något. En url_citation för varje källa som en markör i content namnger, med url, title, start_index och end_index (markörens position, räknad i tecken, slutet ingår inte). |
choices[0].finish_reason | string | Varför svaret tog slut. Se Avslutsorsaker. |
usage | object | Begärans tokens. Se Användning. |
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. |
Avslutsorsaker
| finish_reason | Beskrivning |
|---|---|
stop | Modellen avslutade sitt svar, eller en stop-sträng förekom. |
tool_calls | Modellen anropar ett eller flera verktyg. Kör dem och skicka resultaten i tool-meddelanden. |
length | Svaret avbröts vid outputgränsen. Rapporteras i strömmar från shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 och Shannon 3-familjen. |
Ett svar som inte streamas rapporterar stop eller tool_calls.
Användning
| Fält | Typ | Beskrivning | Tillgänglig på |
|---|---|---|---|
usage.prompt_tokens | integer | Inputtokens. | Alla modeller |
usage.completion_tokens | integer | Outputtokens: resonemang, svar och verktygsanrop tillsammans. | Alla modeller |
usage.total_tokens | integer | prompt_tokens plus completion_tokens. | Alla modeller |
usage.prompt_tokens_details.cached_tokens | integer | Den del av prompt_tokens som lästes från promptcachen. | Hostade open-weight-modeller |
usage.completion_tokens_details.reasoning_tokens | integer | Den del av completion_tokens som gick åt till resonemang. | Hostade open-weight-modeller |
På de hostade open-weight-modellerna är prompt_tokens dina meddelanden och verktygsdefinitioner räknade med modellens egen tokenizer, plus tokens för eventuella bilder. Endpointsen för tokenräkning returnerar samma tal innan du skickar. Tokenräkning
På Shannon-nivåerna räknar prompt_tokens allt som modellen läste för att skriva svaret, så det är större än enbart texten i dina meddelanden.
Streaming
Med stream satt till true kommer svaret som chat.completion.chunk-händelser och slutar med data: [DONE]. Sista chunken före den bär finish_reason och usage; inga stream_options behövs. Chunkformerna, keep-alive-raderna och felen inuti en ström har en egen sida. Streaming
Fel
Ett fel är ett JSON-objekt med en error-medlem. Kontrollerna körs i den här ordningen: API-nyckel, begäranskropp, modell-id, därefter balans. 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
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: no-such-model"
}
} | Status | Typ | Meddelande | När |
|---|---|---|---|
401 | authentication_error | Missing authenticationInvalid 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 publicerat 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 bilddel skickades till en hostad open-weight-modell utan bildinput. |
400 | invalid_request_error | <id> does not accept response_format | response_format skickades till en hostad open-weight-modell utan strukturerad utdata. |
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | reasoning_effort har ett värde utanför listan. |
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. |
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. | Detsamma, på Shannon 3-familjen och de hostade open-weight-modellerna. |