Chat Completions
POST /v1/chat/completions neem 'n gesprek en gee die model se volgende boodskap terug in die OpenAI Chat Completions-formaat. Gebruik dit vanaf enige OpenAI SDK of oor gewone HTTP; hierdie bladsy is die veld-vir-veld-verwysing.
POST https://api.shannon-ai.com/v1/chat/completions
Die kleinste versoek is 'n model-id en een gebruikersboodskap.
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."}]
}' Die antwoord is een JSON-objek:
{
"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
Versoek-headers
| Header | Waarde | Beskrywing |
|---|---|---|
Authorization | Bearer YOUR_API_KEY | Jou API-sleutel. x-api-key: YOUR_API_KEY word op elke eindpunt in sy plek aanvaar. |
Content-Type | application/json | Verpligtend. Enige ander waarde gee 415 terug. |
x-request-id | Opsioneel. Jou eie id vir die versoek. Dit kom ongewysig terug op die antwoord. |
Antwoord-headers
| Header | Beskrywing |
|---|---|
x-request-id | Op elke antwoord, foute en strome ingesluit: die waarde wat jy gestuur het, of 12 heksadesimale karakters wanneer jy niks gestuur het nie. Haal dit aan wanneer jy 'n probleem rapporteer. |
content-type | application/json, of text/event-stream wanneer stream true is. |
Versoekvelde
Slegs messages is verpligtend. Die kolom Toegepas deur noem die modelle waarop 'n veld die antwoord verander. Die gehuisveste oopgewig-modelle is die twaalf id's van die modellys; die Shannon 3-familie is shannon-3, shannon-3-pro, shannon-3.1 en shannon-3.1-pro. Modelle en pryse
| Veld | Tipe | Verstek | Beskrywing | Toegepas deur |
|---|---|---|---|---|
model | string | shannon-1.6-lite | Die model wat antwoord: 'n id uit die modellys. Stuur dit met elke versoek. Ooreenstemming is nie hooflettergevoelig nie. 'n Id wat nie gepubliseer is nie, gee 400 unknown model terug. | Alle modelle |
messages | array | Verpligtend. Die gesprek, oudste boodskap eerste. Sien Boodskappe hieronder. | Alle modelle | |
stream | boolean | false | true stuur die antwoord as server-sent events terwyl dit geskryf word. | Alle modelle |
max_tokens | integer | 4096 | Boonste limiet van die antwoord, in tokens. 'n Waarde buite 1 tot 65,536 word in daardie reeks geskuif. Dit is ook die hoeveelheid wat van jou balans opsy gesit word terwyl die versoek loop. Sien Uitvoerlengte hieronder. | Gehuisveste oopgewig-modelle, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 |
max_completion_tokens | integer | Dieselfde as max_tokens. Wanneer albei gestuur word, word max_tokens gebruik. | Gehuisveste oopgewig-modelle, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
temperature | number | Steekproef-temperatuur. Op die gehuisveste oopgewig-modelle is die verstek 1 en waardes word tussen 0 en 2 gehou. | Gehuisveste oopgewig-modelle, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
top_p | number | 0.95 | Nucleus-steekproefneming. Waardes word tussen 0 en 1 gehou. | Gehuisveste oopgewig-modelle |
seed | integer | Saad van die steekproefnemer, enige heelgetal. Daarsonder word die saad van die model en die gesprek afgelei, so dieselfde versoek wat twee keer gestuur word, gebruik dieselfde saad. | Gehuisveste oopgewig-modelle | |
stop | string | array | 'n String of 'n skikking van stringe. Tot 4 word gebruik. Die antwoord eindig voor die eerste een wat verskyn; die stopteks self word nie teruggegee nie. | Gehuisveste oopgewig-modelle | |
reasoning_effort | string | high | Hoeveel die model redeneer voor dit antwoord: off, low, medium of high. none en minimal beteken off, default beteken medium, max beteken high. Enige ander waarde gee 400 terug. | Gehuisveste oopgewig-modelle |
reasoning | object | Dieselfde instelling in objekvorm: {"effort": "low"}. Wanneer albei gestuur word, word reasoning_effort gebruik. | Gehuisveste oopgewig-modelle | |
tools | array | Die funksies wat die model mag oproep, elk as {"type": "function", "function": {"name", "description", "parameters"}}. Die model se oproepe kom terug in tool_calls; jou kode voer hulle uit. | Alle modelle | |
tool_choice | string | object | auto | "auto" laat die model besluit. "required" laat dit 'n gereedskap oproep. {"type": "function", "function": {"name": "…"}} laat dit daardie gereedskap oproep. | Gehuisveste oopgewig-modelle |
response_format | object | {"type": "json_object"} vir 'n JSON-antwoord, of {"type": "json_schema", "json_schema": {…}} vir 'n antwoord wat jou skema volg. | Alle Shannon-vlakke; gehuisveste oopgewig-modelle soos per id gelys | |
web_search | boolean | false | true laat die model die web deursoek voor dit antwoord. | shannon-1.6-*, shannon-2-*, Shannon 3-familie |
Ander OpenAI-velde, soos n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store en prompt_cache_key, word aanvaar sodat bestaande kliëntkode ongewysig loop. Hulle verander nie die antwoord nie: daar is altyd een keuse, en 'n stroom eindig altyd met gebruik.
'n Veld met die verkeerde JSON-tipe, byvoorbeeld "max_tokens": "100", gee 422 terug. 'n Versoek sonder messages doen dit ook.
Gereedskap, gestruktureerde uitvoer, redenering en websoektog het elk hul eie bladsy: Funksie-oproepe, Gestruktureerde uitvoer, Redeneringspoging, Websoektog.
'n Versoek met opsies
Hierdie versoek stel 'n stelselboodskap, die steekproefvelde en die redeneringspoging. Dit gebruik 'n gehuisveste oopgewig-model, wat almal toepas.
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"
}' Die antwoord het dieselfde vorm as hierbo. Sy usage voeg twee besonderhede by op die gehuisveste oopgewig-modelle: die prompt-tokens wat uit die kas gelees is en die tokens wat aan redenering bestee is.
{
"usage": {
"prompt_tokens": 31,
"completion_tokens": 62,
"total_tokens": 93,
"prompt_tokens_details": {
"cached_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 21
}
}
} Uitvoerlengte
max_tokens doen twee dinge. Eerstens is dit die aantal tokens wat van jou balans opsy gesit word wanneer die versoek begin. Wanneer die antwoord voltooi is, word daardie bedrag vervang deur die tokens wat die versoek gebruik het. As max_tokens groter is as wat van jou balans oor is, gee die versoek 429 Quota exceeded terug selfs wanneer die antwoord self gepas het. Stuur 'n laer max_tokens om minder opsy te sit.
shannon-coder-1 word op hierdie eindpunt anders getel: elke versoek is een van jou plan se Shannon Coder-oproepe, en geen tokens word daarvoor opsy gesit nie. Perke en balans
Tweedens beperk dit die lengte van die antwoord op hierdie modelle:
| Modelle | Wat max_tokens doen |
|---|---|
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | Die antwoord stop wanneer dit die limiet bereik. 'n Stroom eindig dan met finish_reason length. |
| Gehuisveste oopgewig-modelle | Die antwoordteks stop by max_tokens. Redenering word nie daarteen getel nie. Waardes onder 256 tree op as 256. |
Sonder max_tokens of max_completion_tokens is die waarde 4,096. Op shannon-coder-1 is dit 65,536.
Boodskappe
Elke boodskap is 'n objek met 'n role en 'n content. content is 'n string, of 'n skikking van dele wanneer die boodskap meer as teks dra.
| Rol | Beskrywing | Toegepas deur |
|---|---|---|
system | Instruksies vir die model. Sit dit eerste. Op die Shannon-vlakke is die eerste system-boodskap die een wat gebruik word. | Gehuisveste oopgewig-modelle, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
developer | Word as system gelees. | Gehuisveste oopgewig-modelle |
user | Wat jy vra. Op die Shannon-vlakke is die laaste user-boodskap die prompt en die boodskappe daarvoor is die geskiedenis. | Alle modelle |
assistant | Vroeëre antwoorde van die model. Behou sy tool_calls wanneer jy 'n gereedskapresultaat daarna stuur. | Alle modelle |
tool | Die resultaat van 'n gereedskapoproep: tool_call_id bevat die id van die oproep en content die resultaat as 'n string. | Alle modelle |
Met 'n Shannon 3-familie-id, sit instruksies wat moet geld in die user-boodskap.
Op die Shannon-vlakke gee 'n versoek sonder gebruikersteks en sonder tools 400 No user message provided terug.
Inhouddele
| Deel | Beskrywing | Beskikbaar op |
|---|---|---|
{"type": "text", "text": "…"} | Gewone teks. | Alle modelle |
{"type": "image_url", "image_url": {"url": "…"}} | 'n Beeld, as 'n data:-URL met base64-inhoud of as 'n http(s)-URL. | Shannon 3-familie, shannon-1.6-lite, shannon-1.6-pro, en die gehuisveste oopgewig-modelle wat beeldinset lys |
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} | 'n Dokument (PDF, Word, PowerPoint of Excel), as base64 of per URL. | Shannon 3-familie |
Groottes, limiete en die volledige lys vorme het hul eie bladsy. Beelde en lêers
Die antwoordobjek
| Veld | Tipe | Beskrywing |
|---|---|---|
id | string | chatcmpl- gevolg deur 32 heksadesimale karakters. |
object | string | Altyd chat.completion. |
created | integer | Tyd van die antwoord, in Unix-sekondes. |
model | string | Die kanonieke id van die model wat geantwoord het. Dit kan in spelling verskil van die id wat jy gestuur het. |
choices | array | Altyd presies een keuse, met index 0. |
choices[0].message.role | string | Altyd assistant. |
choices[0].message.content | string | null | Die antwoordteks. Met tool_calls is dit null op die Shannon-vlakke; die gehuisveste oopgewig-modelle kan teks langs die oproepe stuur. |
choices[0].message.reasoning_content | string | null | Die redenering wat die model voor die antwoord geskryf het, of null wanneer daar geen is nie. |
choices[0].message.tool_calls | array | Slegs teenwoordig wanneer die model gereedskap oproep. Elke inskrywing het 'n id, type function, en function met die name en die arguments as 'n JSON-string. |
choices[0].message.annotations | array | Net op 'n versoek met web_search: true waarvan die soektog iets gevind het. Een url_citation vir elke bron wat 'n merker in content noem, met url, title, start_index en end_index (die posisie van die merker, in karakters getel, einde nie ingesluit nie). |
choices[0].finish_reason | string | Hoekom die antwoord geëindig het. Sien Eindredes. |
usage | object | Die tokens van die versoek. Sien Gebruik. |
sources | array | Net op 'n versoek met web_search: true waarvan die soektog iets gevind het: die resultate wat aan die model gegee is, elk met index, title en url. [1] in die antwoord is die inskrywing met index 1. |
Eindredes
| finish_reason | Beskrywing |
|---|---|
stop | Die model het sy antwoord voltooi, of 'n stop-string het verskyn. |
tool_calls | Die model roep een of meer gereedskap op. Voer hulle uit en stuur die resultate in tool-boodskappe. |
length | Die antwoord is by die uitvoerlimiet afgesny. Word gerapporteer in strome van shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 en die Shannon 3-familie. |
'n Antwoord wat nie gestroom word nie, rapporteer stop of tool_calls.
Gebruik
| Veld | Tipe | Beskrywing | Beskikbaar op |
|---|---|---|---|
usage.prompt_tokens | integer | Insettokens. | Alle modelle |
usage.completion_tokens | integer | Uitvoertokens: redenering, antwoord en gereedskapoproepe saam. | Alle modelle |
usage.total_tokens | integer | prompt_tokens plus completion_tokens. | Alle modelle |
usage.prompt_tokens_details.cached_tokens | integer | Die deel van prompt_tokens wat uit die prompt-kas gelees is. | Gehuisveste oopgewig-modelle |
usage.completion_tokens_details.reasoning_tokens | integer | Die deel van completion_tokens wat aan redenering bestee is. | Gehuisveste oopgewig-modelle |
Op die gehuisveste oopgewig-modelle is prompt_tokens jou boodskappe en gereedskapdefinisies getel met die model se eie tokeniseerder, plus die tokens van enige beelde. Die tokentel-eindpunte gee dieselfde getal terug voordat jy stuur. Tokens tel
Op die Shannon-vlakke tel prompt_tokens alles wat die model gelees het om die antwoord te skryf, so dit is groter as die teks van jou boodskappe alleen.
Streaming
Met stream op true kom die antwoord aan as chat.completion.chunk-gebeurtenisse en eindig met data: [DONE]. Die laaste brokkie daarvoor dra finish_reason en usage; geen stream_options is nodig nie. Die brokkievorme, keep-alive-reëls en foute binne 'n stroom het hul eie bladsy. Stroming
Foute
'n Fout is 'n JSON-objek met 'n error-lid. Kontroles loop in hierdie volgorde: API-sleutel, versoekliggaam, model-id, dan balans. Die tabel lys wat hierdie eindpunt die meeste teruggee. Die volledige lys, met wat om weer te probeer, het sy eie bladsy. Fouthantering
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: no-such-model"
}
} | Status | Tipe | Boodskap | Wanneer |
|---|---|---|---|
401 | authentication_error | Missing authenticationInvalid API key | Geen API-sleutel is gestuur nie, of die sleutel is onbekend of herroep. |
400 | invalid_request_error | unknown model: <id> | model is nie 'n gepubliseerde id nie. |
400 | invalid_request_error | No user message provided | Shannon-vlakke: die versoek het geen gebruikersteks en geen tools nie. |
400 | invalid_request_error | <id> does not accept image input | 'n Beelddeel is na 'n gehuisveste oopgewig-model gestuur sonder beeldinset. |
400 | invalid_request_error | <id> does not accept response_format | response_format is gestuur na 'n gehuisveste oopgewig-model sonder gestruktureerde uitvoer. |
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | reasoning_effort bevat 'n waarde buite die lys. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | messages ontbreek, of 'n veld het die verkeerde JSON-tipe. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | max_tokens is groter as wat van jou balans oor is. |
429 | rate_limit_error | Too many requests. Retry in <n>s. | Vloedbeskerming: meer as 120 versoeke in een minuut op jou rekening. |
500 | server_error | The model backend failed to answer. Please retry. | Die model het nie 'n antwoord gelewer nie. Stuur die versoek weer. |
502 | api_error | The model backend failed to answer. Please retry. | Dieselfde, op die Shannon 3-familie en die gehuisveste oopgewig-modelle. |