Chat Completions
POST /v1/chat/completions tager en samtale og returnerer modellens næste besked i OpenAI Chat Completions-formatet. Brug det fra enhver OpenAI SDK eller over almindelig HTTP; denne side er referencen felt for felt.
POST https://api.shannon-ai.com/v1/chat/completions
Den mindste anmodning er et model-id og én brugerbesked.
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 er ét 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
Anmodningsheaders
| Header | Værdi | Beskrivelse |
|---|---|---|
Authorization | Bearer YOUR_API_KEY | Din API-nøgle. x-api-key: YOUR_API_KEY accepteres i stedet på alle endpoints. |
Content-Type | application/json | Påkrævet. Enhver anden værdi returnerer 415. |
x-request-id | Valgfri. Dit eget id for anmodningen. Det kommer uændret tilbage i svaret. |
Svarheaders
| Header | Beskrivelse |
|---|---|
x-request-id | På hvert svar, fejl og streams inklusive: den værdi, du sendte, eller 12 hexadecimale tegn, hvis du ikke sendte nogen. Oplys den, når du melder et problem. |
content-type | application/json eller text/event-stream, når stream er true. |
Anmodningsfelter
Kun messages er påkrævet. Kolonnen Anvendes af angiver de modeller, hvor et felt ændrer svaret. De hostede open-weight-modeller er de tolv id'er på modellisten; Shannon 3-familien er shannon-3, shannon-3-pro, shannon-3.1 og shannon-3.1-pro. Modeller og priser
| Felt | Type | Standard | Beskrivelse | Anvendes af |
|---|---|---|---|---|
model | string | shannon-1.6-lite | Den model, der svarer: et id fra modellisten. Send det med hver anmodning. Der skelnes ikke mellem store og små bogstaver. Et id, der ikke er offentliggjort, returnerer 400 unknown model. | Alle modeller |
messages | array | Påkrævet. Samtalen med den ældste besked først. Se Beskeder nedenfor. | Alle modeller | |
stream | boolean | false | true sender svaret som server-sent events, mens det skrives. | Alle modeller |
max_tokens | integer | 4096 | Øvre grænse for svaret, i tokens. En værdi uden for 1 til 65,536 flyttes ind i det interval. Det er også det beløb, der reserveres fra din saldo, mens anmodningen kører. Se Outputlængde nedenfor. | Hostede open-weight-modeller, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 |
max_completion_tokens | integer | Det samme som max_tokens. Når begge sendes, bruges max_tokens. | Hostede open-weight-modeller, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
temperature | number | Samplingtemperatur. På de hostede open-weight-modeller er standarden 1, og værdierne holdes mellem 0 og 2. | Hostede open-weight-modeller, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
top_p | number | 0.95 | Nucleus sampling. Værdierne holdes mellem 0 og 1. | Hostede open-weight-modeller |
seed | integer | Samplerens seed, et vilkårligt heltal. Uden det udledes seedet af modellen og samtalen, så den samme anmodning sendt to gange bruger det samme seed. | Hostede open-weight-modeller | |
stop | string | array | En streng eller et array af strenge. Op til 4 bruges. Svaret slutter før den første, der forekommer; selve stoptesten returneres ikke. | Hostede open-weight-modeller | |
reasoning_effort | string | high | Hvor meget modellen ræsonnerer, før den svarer: off, low, medium eller high. none og minimal betyder off, default betyder medium, max betyder high. Enhver anden værdi returnerer 400. | Hostede open-weight-modeller |
reasoning | object | Den samme indstilling i objektform: {"effort": "low"}. Når begge sendes, bruges reasoning_effort. | Hostede open-weight-modeller | |
tools | array | De funktioner, modellen må kalde, hver som {"type": "function", "function": {"name", "description", "parameters"}}. Modellens kald kommer tilbage i tool_calls; din kode kører dem. | Alle modeller | |
tool_choice | string | object | auto | "auto" lader modellen bestemme. "required" får den til at kalde et værktøj. {"type": "function", "function": {"name": "…"}} får den til at kalde netop det værktøj. | Hostede open-weight-modeller |
response_format | object | {"type": "json_object"} for et JSON-svar eller {"type": "json_schema", "json_schema": {…}} for et svar, der følger dit skema. | Alle Shannon-niveauer; hostede open-weight-modeller som angivet per id | |
web_search | boolean | false | true lader modellen søge på nettet, før den svarer. | shannon-1.6-*, shannon-2-*, Shannon 3-familien |
Andre OpenAI-felter, f.eks. n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store og prompt_cache_key, accepteres, så eksisterende klientkode kører uændret. De ændrer ikke svaret: der er altid ét valg, og en stream slutter altid med forbrug.
Et felt med den forkerte JSON-type, f.eks. "max_tokens": "100", returnerer 422. Det gør en anmodning uden messages også.
Værktøjer, struktureret output, reasoning og websøgning har hver deres egen side: Funktionskald, Strukturerede outputs, Reasoning effort, Indbygget websøgning.
En anmodning med indstillinger
Denne anmodning angiver en systembesked, samplingfelterne og reasoning effort. Den bruger en hostet open-weight-model, som anvender dem alle.
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 samme form som ovenfor. Dets usage tilføjer to detaljer på de hostede open-weight-modeller: de prompt-tokens, der er læst fra cachen, og de tokens, der er brugt på reasoning.
{
"usage": {
"prompt_tokens": 31,
"completion_tokens": 62,
"total_tokens": 93,
"prompt_tokens_details": {
"cached_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 21
}
}
} Outputlængde
max_tokens gør to ting. For det første er det det antal tokens, der reserveres fra din saldo, når anmodningen starter. Når svaret er færdigt, erstattes det beløb af de tokens, anmodningen brugte. Hvis max_tokens er større end det, der er tilbage af din saldo, returnerer anmodningen 429 Quota exceeded, selv om selve svaret ville have passet. Send en lavere max_tokens for at reservere mindre.
shannon-coder-1 tælles anderledes på dette endpoint: hver anmodning er ét af din plans Shannon Coder-kald, og der reserveres ingen tokens til den. Grænser og saldo
For det andet begrænser det svarets længde på disse modeller:
| Modeller | Hvad max_tokens gør |
|---|---|
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | Svaret stopper, når det når grænsen. En stream slutter da med finish_reason length. |
| Hostede open-weight-modeller | Svarteksten stopper ved max_tokens. Reasoning tælles ikke med. Værdier under 256 virker som 256. |
Uden max_tokens eller max_completion_tokens er værdien 4,096. På shannon-coder-1 er den 65,536.
Beskeder
Hver besked er et objekt med en role og et content. content er en streng eller et array af dele, når beskeden indeholder mere end tekst.
| Rolle | Beskrivelse | Anvendes af |
|---|---|---|
system | Instruktioner til modellen. Sæt den først. På Shannon-niveauerne er det den første system-besked, der bruges. | Hostede open-weight-modeller, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
developer | Læses som system. | Hostede open-weight-modeller |
user | Det, du spørger om. På Shannon-niveauerne er den sidste user-besked prompten, og beskederne før den er historikken. | Alle modeller |
assistant | Modellens tidligere svar. Behold dens tool_calls, når du sender et værktøjsresultat efter den. | Alle modeller |
tool | Resultatet af et værktøjskald: tool_call_id indeholder kaldets id og content resultatet som en streng. | Alle modeller |
Med et id fra Shannon 3-familien skal du lægge instruktioner, der skal overholdes, i user-beskeden.
På Shannon-niveauerne returnerer en anmodning uden brugertekst og uden tools 400 No user message provided.
Indholdsdele
| Del | Beskrivelse | Tilgængelig på |
|---|---|---|
{"type": "text", "text": "…"} | Ren tekst. | Alle modeller |
{"type": "image_url", "image_url": {"url": "…"}} | Et billede, som en data:-URL med base64-indhold eller som en http(s)-URL. | Shannon 3-familien, shannon-1.6-lite, shannon-1.6-pro og de hostede open-weight-modeller, der angiver billedinput |
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} | Et dokument (PDF, Word, PowerPoint eller Excel), som base64 eller via URL. | Shannon 3-familien |
Størrelser, grænser og den fulde liste over former har deres egen side. Billeder og filer
Svarobjektet
| Felt | Type | Beskrivelse |
|---|---|---|
id | string | chatcmpl- efterfulgt af 32 hexadecimale tegn. |
object | string | Altid chat.completion. |
created | integer | Svarets tidspunkt, i Unix-sekunder. |
model | string | Det kanoniske id for den model, der svarede. Det kan afvige i stavemåde fra det id, du sendte. |
choices | array | Altid præcis ét valg med index 0. |
choices[0].message.role | string | Altid assistant. |
choices[0].message.content | string | null | Svarteksten. Med tool_calls er den null på Shannon-niveauerne; de hostede open-weight-modeller kan sende tekst ved siden af kaldene. |
choices[0].message.reasoning_content | string | null | Den reasoning, modellen skrev før svaret, eller null, når der ingen er. |
choices[0].message.tool_calls | array | Findes kun, når modellen kalder værktøjer. Hver post har et id, type function og function med name og arguments som en JSON-streng. |
choices[0].message.annotations | array | Kun på en anmodning med web_search: true, hvis søgning fandt noget. Én url_citation for hver kilde, en markør i content nævner, med url, title, start_index og end_index (markørens position, talt i tegn, slutningen er ikke med). |
choices[0].finish_reason | string | Hvorfor svaret sluttede. Se Afslutningsårsager. |
usage | object | Anmodningens tokens. Se Forbrug. |
sources | array | Kun på en anmodning med web_search: true, hvis søgning fandt noget: de resultater, modellen fik, hver med index, title og url. [1] i svaret er posten med index 1. |
Afslutningsårsager
| finish_reason | Beskrivelse |
|---|---|
stop | Modellen afsluttede sit svar, eller en stop-streng forekom. |
tool_calls | Modellen kalder ét eller flere værktøjer. Kør dem, og send resultaterne i tool-beskeder. |
length | Svaret blev afbrudt ved outputgrænsen. Rapporteres i streams fra shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 og Shannon 3-familien. |
Et svar, der ikke streames, rapporterer stop eller tool_calls.
Forbrug
| Felt | Type | Beskrivelse | Tilgængelig på |
|---|---|---|---|
usage.prompt_tokens | integer | Input-tokens. | Alle modeller |
usage.completion_tokens | integer | Output-tokens: reasoning, svar og værktøjskald tilsammen. | Alle modeller |
usage.total_tokens | integer | prompt_tokens plus completion_tokens. | Alle modeller |
usage.prompt_tokens_details.cached_tokens | integer | Den del af prompt_tokens, der blev læst fra prompt-cachen. | Hostede open-weight-modeller |
usage.completion_tokens_details.reasoning_tokens | integer | Den del af completion_tokens, der blev brugt på reasoning. | Hostede open-weight-modeller |
På de hostede open-weight-modeller er prompt_tokens dine beskeder og værktøjsdefinitioner talt med modellens egen tokenizer plus tokens fra eventuelle billeder. Endpointene til tokentælling returnerer det samme tal, før du sender. Tælling af tokens
På Shannon-niveauerne tæller prompt_tokens alt, modellen læste for at skrive svaret, så tallet er større end teksten i dine beskeder alene.
Streaming
Når stream er sat til true, kommer svaret som chat.completion.chunk-hændelser og slutter med data: [DONE]. Den sidste chunk før den indeholder finish_reason og usage; der er ikke brug for nogen stream_options. Chunk-formerne, keep-alive-linjerne og fejl inde i en stream har deres egen side. Streaming
Fejl
En fejl er et JSON-objekt med et error-medlem. Kontrollerne køres i denne rækkefølge: API-nøgle, anmodningens body, model-id og til sidst saldo. Tabellen viser, hvad dette endpoint oftest returnerer. Den fulde liste med, hvad der kan prøves igen, har sin egen side. Fejlhåndtering
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: no-such-model"
}
} | Status | Type | Besked | Hvornår |
|---|---|---|---|
401 | authentication_error | Missing authenticationInvalid API key | Der blev ikke sendt nogen API-nøgle, eller nøglen er ukendt eller tilbagekaldt. |
400 | invalid_request_error | unknown model: <id> | model er ikke et offentliggjort id. |
400 | invalid_request_error | No user message provided | Shannon-niveauer: anmodningen har ingen brugertekst og ingen tools. |
400 | invalid_request_error | <id> does not accept image input | En billeddel blev sendt til en hostet open-weight-model uden billedinput. |
400 | invalid_request_error | <id> does not accept response_format | response_format blev sendt til en hostet open-weight-model uden struktureret output. |
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | reasoning_effort indeholder en værdi uden for listen. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | messages mangler, eller et felt har den forkerte JSON-type. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | max_tokens er større end det, der er tilbage af din saldo. |
429 | rate_limit_error | Too many requests. Retry in <n>s. | Flood protection: mere end 120 anmodninger på ét minut på din konto. |
500 | server_error | The model backend failed to answer. Please retry. | Modellen gav ikke noget svar. Send anmodningen igen. |
502 | api_error | The model backend failed to answer. Please retry. | Det samme, på Shannon 3-familien og de hostede open-weight-modeller. |