Chat Completions
POST /v1/chat/completions tar en samtale og returnerer modellens neste melding i OpenAI Chat Completions-formatet. Bruk det fra en hvilken som helst OpenAI-SDK eller over ren HTTP; denne siden er referansen felt for felt.
POST https://api.shannon-ai.com/v1/chat/completions
Den minste forespørselen er en modell-id og én brukermelding.
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 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
}
} Headere
Forespørsels-headere
| Header | Verdi | Beskrivelse |
|---|---|---|
Authorization | Bearer YOUR_API_KEY | API-nøkkelen din. x-api-key: YOUR_API_KEY godtas i stedet på alle endepunkter. |
Content-Type | application/json | Påkrevd. Alle andre verdier gir 415. |
x-request-id | Valgfritt. Din egen id for forespørselen. Den kommer tilbake uendret i svaret. |
Svar-headere
| Header | Beskrivelse |
|---|---|
x-request-id | På hvert svar, også feil og strømmer: verdien du sendte, eller 12 heksadesimale tegn hvis du ikke sendte noen. Oppgi den når du melder fra om et problem. |
content-type | application/json, eller text/event-stream når stream er true. |
Forespørselsfelt
Bare messages er påkrevd. Kolonnen Brukes av nevner modellene der et felt endrer svaret. De hostede åpne vektmodellene er de tolv id-ene i modelllisten; Shannon 3-familien er shannon-3, shannon-3-pro, shannon-3.1 og shannon-3.1-pro. Modeller og priser
| Felt | Type | Standard | Beskrivelse | Brukes av |
|---|---|---|---|---|
model | string | shannon-1.6-lite | Modellen som svarer: en id fra modelllisten. Send den med hver forespørsel. Det skilles ikke mellom store og små bokstaver. En id som ikke er publisert, gir 400 unknown model. | Alle modeller |
messages | array | Påkrevd. Samtalen, eldste melding først. Se Meldinger nedenfor. | Alle modeller | |
stream | boolean | false | true sender svaret som server-sent events mens det skrives. | Alle modeller |
max_tokens | integer | 4096 | Øvre grense for svaret, i tokens. En verdi utenfor 1 til 65,536 flyttes inn i dette området. Det er også beløpet som settes av fra saldoen din mens forespørselen kjører. Se Output-lengde nedenfor. | Hostede åpne vektmodeller, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 |
max_completion_tokens | integer | Samme som max_tokens. Når begge sendes, brukes max_tokens. | Hostede åpne vektmodeller, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
temperature | number | Samplingtemperatur. På de hostede åpne vektmodellene er standardverdien 1, og verdiene holdes mellom 0 og 2. | Hostede åpne vektmodeller, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
top_p | number | 0.95 | Nucleus sampling. Verdiene holdes mellom 0 og 1. | Hostede åpne vektmodeller |
seed | integer | Seed for sampleren, et vilkårlig heltall. Uten den utledes seeden fra modellen og samtalen, så den samme forespørselen sendt to ganger bruker samme seed. | Hostede åpne vektmodeller | |
stop | string | array | En streng eller en matrise av strenger. Opptil 4 brukes. Svaret avsluttes før den første som dukker opp; selve stopp-teksten returneres ikke. | Hostede åpne vektmodeller | |
reasoning_effort | string | high | Hvor mye modellen resonnerer før den svarer: off, low, medium eller high. none og minimal betyr off, default betyr medium, max betyr high. Alle andre verdier gir 400. | Hostede åpne vektmodeller |
reasoning | object | Den samme innstillingen i objektform: {"effort": "low"}. Når begge sendes, brukes reasoning_effort. | Hostede åpne vektmodeller | |
tools | array | Funksjonene modellen kan kalle, hver som {"type": "function", "function": {"name", "description", "parameters"}}. Modellens kall kommer tilbake i tool_calls; koden din kjører dem. | Alle modeller | |
tool_choice | string | object | auto | "auto" lar modellen bestemme. "required" får den til å kalle et verktøy. {"type": "function", "function": {"name": "…"}} får den til å kalle akkurat det verktøyet. | Hostede åpne vektmodeller |
response_format | object | {"type": "json_object"} for et JSON-svar, eller {"type": "json_schema", "json_schema": {…}} for et svar som følger skjemaet ditt. | Alle Shannon-nivåer; hostede åpne vektmodeller som oppført per id | |
web_search | boolean | false | true lar modellen søke på nettet før den svarer. | shannon-1.6-*, shannon-2-*, Shannon 3-familien |
Andre OpenAI-felt, som n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store og prompt_cache_key, godtas slik at eksisterende klientkode kjører uendret. De endrer ikke svaret: det er alltid ett valg, og en strøm avsluttes alltid med bruksdata.
Et felt med feil JSON-type, for eksempel "max_tokens": "100", gir 422. Det gjør også en forespørsel uten messages.
Verktøy, strukturert output, resonnering og nettsøk har hver sin side: Funksjonskall, Strukturerte utdata, Resonneringsinnsats, Innebygd websøk.
En forespørsel med valg
Denne forespørselen setter en systemmelding, samplingfeltene og resonneringsinnsatsen. Den bruker en hostet åpen vektmodell, som anvender alle disse.
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. usage får to detaljer til på de hostede åpne vektmodellene: prompt-tokens lest fra cachen og tokens brukt på resonnering.
{
"usage": {
"prompt_tokens": 31,
"completion_tokens": 62,
"total_tokens": 93,
"prompt_tokens_details": {
"cached_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 21
}
}
} Output-lengde
max_tokens gjør to ting. For det første er det antallet tokens som settes av fra saldoen din når forespørselen starter. Når svaret er fullført, erstattes beløpet av tokens forespørselen brukte. Hvis max_tokens er større enn det som er igjen av saldoen din, gir forespørselen 429 Quota exceeded selv om selve svaret ville ha passet. Send en lavere max_tokens for å sette av mindre.
shannon-coder-1 telles annerledes på dette endepunktet: hver forespørsel er ett av Shannon Coder-kallene i planen din, og ingen tokens settes av for den. Grenser og saldo
For det andre begrenser det lengden på svaret på disse modellene:
| Modeller | Hva max_tokens gjør |
|---|---|
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | Svaret stopper når det når grensen. En strøm avsluttes da med finish_reason length. |
| Hostede åpne vektmodeller | Svarteksten stopper ved max_tokens. Resonnering regnes ikke med. Verdier under 256 virker som 256. |
Uten max_tokens eller max_completion_tokens er verdien 4,096. På shannon-coder-1 er den 65,536.
Meldinger
Hver melding er et objekt med en role og et content. content er en streng, eller en matrise av deler når meldingen inneholder mer enn tekst.
| Rolle | Beskrivelse | Brukes av |
|---|---|---|
system | Instruksjoner til modellen. Sett den først. På Shannon-nivåene er det den første system-meldingen som brukes. | Hostede åpne vektmodeller, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
developer | Leses som system. | Hostede åpne vektmodeller |
user | Det du spør om. På Shannon-nivåene er den siste user-meldingen prompten, og meldingene før den er historikken. | Alle modeller |
assistant | Tidligere svar fra modellen. Behold tool_calls når du sender et verktøyresultat etter det. | Alle modeller |
tool | Resultatet av et verktøykall: tool_call_id har id-en til kallet og content resultatet som streng. | Alle modeller |
Med en id fra Shannon 3-familien setter du instruksjoner som må gjelde, i user-meldingen.
På Shannon-nivåene gir en forespørsel uten brukertekst og uten tools 400 No user message provided.
Innholdsdeler
| Del | Beskrivelse | Tilgjengelig på |
|---|---|---|
{"type": "text", "text": "…"} | Ren tekst. | Alle modeller |
{"type": "image_url", "image_url": {"url": "…"}} | Et bilde, som en data:-URL med base64-innhold eller som en http(s)-URL. | Shannon 3-familien, shannon-1.6-lite, shannon-1.6-pro og de hostede åpne vektmodellene som støtter bilde som input |
{"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, grenser og den fullstendige listen over former har sin egen side. Bilder og filer
Svarobjektet
| Felt | Type | Beskrivelse |
|---|---|---|
id | string | chatcmpl- etterfulgt av 32 heksadesimale tegn. |
object | string | Alltid chat.completion. |
created | integer | Tidspunktet for svaret, i Unix-sekunder. |
model | string | Den kanoniske id-en til modellen som svarte. Den kan avvike i skrivemåte fra id-en du sendte. |
choices | array | Alltid nøyaktig ett valg, med index 0. |
choices[0].message.role | string | Alltid assistant. |
choices[0].message.content | string | null | Svarteksten. Med tool_calls er den null på Shannon-nivåene; de hostede åpne vektmodellene kan sende tekst ved siden av kallene. |
choices[0].message.reasoning_content | string | null | Resonneringen modellen skrev før svaret, eller null når det ikke finnes noen. |
choices[0].message.tool_calls | array | Finnes bare når modellen kaller verktøy. Hver oppføring har en id, type function, og function med name og arguments som en JSON-streng. |
choices[0].message.annotations | array | Bare på en forespørsel med web_search: true der søket fant noe. Én url_citation for hver kilde en markør i content navngir, med url, title, start_index og end_index (posisjonen til markøren, talt i tegn, slutten er ikke med). |
choices[0].finish_reason | string | Hvorfor svaret tok slutt. Se Avslutningsårsaker. |
usage | object | Tokens i forespørselen. Se Bruk. |
sources | array | Bare på en forespørsel med web_search: true der søket fant noe: resultatene modellen fikk, hvert med index, title og url. [1] i svaret er oppføringen med index 1. |
Avslutningsårsaker
| finish_reason | Beskrivelse |
|---|---|
stop | Modellen fullførte svaret sitt, eller en stop-streng dukket opp. |
tool_calls | Modellen kaller ett eller flere verktøy. Kjør dem og send resultatene i tool-meldinger. |
length | Svaret ble kuttet ved output-grensen. Rapporteres i strømmer fra shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 og Shannon 3-familien. |
Et svar uten strømming rapporterer stop eller tool_calls.
Bruk
| Felt | Type | Beskrivelse | Tilgjengelig på |
|---|---|---|---|
usage.prompt_tokens | integer | Input-tokens. | Alle modeller |
usage.completion_tokens | integer | Output-tokens: resonnering, svar og verktøykall til sammen. | Alle modeller |
usage.total_tokens | integer | prompt_tokens pluss completion_tokens. | Alle modeller |
usage.prompt_tokens_details.cached_tokens | integer | Delen av prompt_tokens som ble lest fra prompt-cachen. | Hostede åpne vektmodeller |
usage.completion_tokens_details.reasoning_tokens | integer | Delen av completion_tokens som ble brukt på resonnering. | Hostede åpne vektmodeller |
På de hostede åpne vektmodellene er prompt_tokens meldingene og verktøydefinisjonene dine talt med modellens egen tokenizer, pluss tokens for eventuelle bilder. Endepunktene for token-telling returnerer det samme tallet før du sender. Token-telling
På Shannon-nivåene teller prompt_tokens alt modellen leste for å skrive svaret, så tallet er større enn teksten i meldingene dine alene.
Strømming
Med stream satt til true kommer svaret som chat.completion.chunk-hendelser og avsluttes med data: [DONE]. Den siste chunken før den har finish_reason og usage; ingen stream_options trengs. Chunk-formene, keep-alive-linjene og feil inne i en strøm har sin egen side. Strømming
Feil
En feil er et JSON-objekt med et error-medlem. Sjekkene kjøres i denne rekkefølgen: API-nøkkel, forespørselskropp, modell-id, deretter saldo. Tabellen viser det dette endepunktet oftest returnerer. Den fullstendige listen, med hva som kan prøves på nytt, har sin egen side. Feilhåndtering
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: no-such-model"
}
} | Status | Type | Melding | Når |
|---|---|---|---|
401 | authentication_error | Missing authenticationInvalid API key | Ingen API-nøkkel ble sendt, eller nøkkelen er ukjent eller tilbakekalt. |
400 | invalid_request_error | unknown model: <id> | model er ikke en publisert id. |
400 | invalid_request_error | No user message provided | Shannon-nivåer: forespørselen har ingen brukertekst og ingen tools. |
400 | invalid_request_error | <id> does not accept image input | En bildedel ble sendt til en hostet åpen vektmodell uten støtte for bilde som input. |
400 | invalid_request_error | <id> does not accept response_format | response_format ble sendt til en hostet åpen vektmodell uten strukturert output. |
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | reasoning_effort har en verdi utenfor listen. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | messages mangler, eller et felt har feil JSON-type. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | max_tokens er større enn det som er igjen av saldoen din. |
429 | rate_limit_error | Too many requests. Retry in <n>s. | Flood protection: mer enn 120 forespørsler i løpet av ett minutt på kontoen din. |
500 | server_error | The model backend failed to answer. Please retry. | Modellen ga ikke noe svar. Send forespørselen på nytt. |
502 | api_error | The model backend failed to answer. Please retry. | Det samme, på Shannon 3-familien og de hostede åpne vektmodellene. |