Chat Completions
Ang POST /v1/chat/completions ay tumatanggap ng isang conversation at nagbabalik ng susunod na message ng model sa OpenAI Chat Completions format. Gamitin ito mula sa anumang OpenAI SDK o sa plain HTTP; ang pahinang ito ay ang reference na field por field.
POST https://api.shannon-ai.com/v1/chat/completions
Ang pinakamaliit na request ay isang model id at isang user message.
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."}]
}' Ang reply ay isang JSON object:
{
"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
}
} Mga header
Mga request header
| Header | Value | Paglalarawan |
|---|---|---|
Authorization | Bearer YOUR_API_KEY | Ang iyong API key. Tinatanggap bilang kapalit nito ang x-api-key: YOUR_API_KEY sa bawat endpoint. |
Content-Type | application/json | Kinakailangan. Ang anumang ibang value ay nagbabalik ng 415. |
x-request-id | Opsyonal. Ang sarili mong id para sa request. Bumabalik ito nang walang pagbabago sa reply. |
Mga reply header
| Header | Paglalarawan |
|---|---|
x-request-id | Sa bawat reply, kasama ang mga error at stream: ang value na ipinadala mo, o 12 hexadecimal na character kapag wala kang ipinadala. Banggitin ito kapag nag-uulat ka ng problema. |
content-type | application/json, o text/event-stream kapag true ang stream. |
Mga request field
messages lamang ang kinakailangan. Pinangangalanan ng column na Ina-apply ng ang mga model kung saan binabago ng isang field ang reply. Ang mga hosted open-weight model ay ang labindalawang id sa listahan ng model; ang pamilyang Shannon 3 ay shannon-3, shannon-3-pro, shannon-3.1 at shannon-3.1-pro. Mga model at presyo
| Field | Type | Default | Paglalarawan | Ina-apply ng |
|---|---|---|---|---|
model | string | shannon-1.6-lite | Ang model na sasagot: isang id mula sa listahan ng model. Ipadala ito sa bawat request. Hindi case-sensitive ang pagtutugma. Ang id na hindi inilathala ay nagbabalik ng 400 unknown model. | Lahat ng model |
messages | array | Kinakailangan. Ang conversation, pinakamatandang mensahe muna. Tingnan ang Messages sa ibaba. | Lahat ng model | |
stream | boolean | false | Ipinapadala ng true ang reply bilang server-sent events habang isinusulat ito. | Lahat ng model |
max_tokens | integer | 4096 | Pinakamataas na limitasyon ng reply, sa tokens. Ang value na wala sa 1 hanggang 65,536 ay ililipat sa saklaw na iyon. Ito rin ang halagang itinatabi mula sa iyong balance habang tumatakbo ang request. Tingnan ang Haba ng output sa ibaba. | Mga hosted open-weight model, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 |
max_completion_tokens | integer | Kapareho ng max_tokens. Kapag parehong ipinadala, ginagamit ang max_tokens. | Mga hosted open-weight model, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
temperature | number | Sampling temperature. Sa mga hosted open-weight model, 1 ang default at pinananatili ang mga value sa pagitan ng 0 at 2. | Mga hosted open-weight model, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
top_p | number | 0.95 | Nucleus sampling. Pinananatili ang mga value sa pagitan ng 0 at 1. | Mga hosted open-weight model |
seed | integer | Seed ng sampler, anumang integer. Kung wala ito, hinango ang seed mula sa model at sa conversation, kaya parehong seed ang ginagamit kapag dalawang beses ipinadala ang parehong request. | Mga hosted open-weight model | |
stop | string | array | Isang string o array ng mga string. Hanggang 4 ang ginagamit. Natatapos ang sagot bago ang una sa mga lumabas; hindi ibinabalik ang mismong stop text. | Mga hosted open-weight model | |
reasoning_effort | string | high | Gaano karami ang pag-reason ng model bago sumagot: off, low, medium o high. Ang none at minimal ay nangangahulugang off, ang default ay nangangahulugang medium, ang max ay nangangahulugang high. Ang anumang ibang value ay nagbabalik ng 400. | Mga hosted open-weight model |
reasoning | object | Ang parehong setting sa anyong object: {"effort": "low"}. Kapag parehong ipinadala, ginagamit ang reasoning_effort. | Mga hosted open-weight model | |
tools | array | Ang mga function na maaaring tawagin ng model, bawat isa bilang {"type": "function", "function": {"name", "description", "parameters"}}. Bumabalik ang mga call ng model sa tool_calls; pinapatakbo ng iyong code ang mga ito. | Lahat ng model | |
tool_choice | string | object | auto | Hinahayaan ng "auto" ang model na magpasya. Pinipilit ng "required" itong tumawag ng tool. Pinipilit ng {"type": "function", "function": {"name": "…"}} itong tawagin ang tool na iyon. | Mga hosted open-weight model |
response_format | object | {"type": "json_object"} para sa sagot na JSON, o {"type": "json_schema", "json_schema": {…}} para sa sagot na sumusunod sa iyong schema. | Lahat ng Shannon tier; mga hosted open-weight model ayon sa nakalista kada id | |
web_search | boolean | false | Hinahayaan ng true ang model na mag-search sa web bago sumagot. | shannon-1.6-*, shannon-2-*, pamilyang Shannon 3 |
Tinatanggap ang iba pang OpenAI field, gaya ng n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store at prompt_cache_key, para tumakbo nang walang pagbabago ang kasalukuyang client code. Hindi nila binabago ang reply: palaging iisa ang choice, at palaging nagtatapos sa usage ang stream.
Ang field na may maling JSON type, halimbawa "max_tokens": "100", ay nagbabalik ng 422. Ganoon din ang request na walang messages.
May sariling pahina ang tools, structured output, reasoning at web search: Function calling, Structured outputs, Reasoning effort, Web search.
Isang request na may mga opsyon
Nagtatakda ang request na ito ng system message, mga sampling field at reasoning effort. Gumagamit ito ng hosted open-weight model, na ina-apply ang lahat ng ito.
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"
}' Kapareho ng hugis sa itaas ang reply. Nagdaragdag ang usage nito ng dalawang detalye sa mga hosted open-weight model: ang mga prompt token na binasa mula sa cache at ang mga token na ginugol sa reasoning.
{
"usage": {
"prompt_tokens": 31,
"completion_tokens": 62,
"total_tokens": 93,
"prompt_tokens_details": {
"cached_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 21
}
}
} Haba ng output
Dalawa ang ginagawa ng max_tokens. Una, ito ang bilang ng token na itinatabi mula sa iyong balance kapag nagsimula ang request. Kapag kumpleto na ang reply, pinapalitan ang halagang iyon ng mga token na aktuwal na nagamit ng request. Kung mas malaki ang max_tokens kaysa sa natitira sa iyong balance, nagbabalik ang request ng 429 Quota exceeded kahit kasya sana ang mismong reply. Magpadala ng mas mababang max_tokens para mas kaunti ang maitabi.
Iba ang pagbilang sa shannon-coder-1 sa endpoint na ito: ang bawat request ay isa sa Shannon Coder calls ng iyong plan, at walang token na itinatabi para rito. Mga limitasyon at balance
Pangalawa, nililimitahan nito ang haba ng reply sa mga model na ito:
| Mga model | Ano ang ginagawa ng max_tokens |
|---|---|
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | Humihinto ang reply kapag naabot ang limitasyon. Nagtatapos ang stream sa finish_reason na length. |
| Mga hosted open-weight model | Humihinto ang text ng sagot sa max_tokens. Hindi binibilang laban dito ang reasoning. Ang mga value na mas mababa sa 256 ay itinuturing na 256. |
Kung walang max_tokens o max_completion_tokens, ang value ay 4,096. Sa shannon-coder-1 ay 65,536.
Messages
Ang bawat message ay isang object na may role at content. Ang content ay isang string, o isang array ng mga part kapag may dalang higit sa text ang message.
| Role | Paglalarawan | Ina-apply ng |
|---|---|---|
system | Mga tagubilin para sa model. Ilagay ito sa simula. Sa mga Shannon tier, ang unang system message ang ginagamit. | Mga hosted open-weight model, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
developer | Binabasa bilang system. | Mga hosted open-weight model |
user | Ang itinatanong mo. Sa mga Shannon tier, ang huling user message ang prompt at ang mga message bago nito ang history. | Lahat ng model |
assistant | Mga naunang reply ng model. Panatilihin ang tool_calls nito kapag nagpapadala ka ng tool result pagkatapos nito. | Lahat ng model |
tool | Ang resulta ng isang tool call: ang tool_call_id ay may id ng call at ang content ang resulta bilang string. | Lahat ng model |
Sa isang id ng pamilyang Shannon 3, ilagay sa user message ang mga tagubiling dapat masunod.
Sa mga Shannon tier, ang request na walang user text at walang tools ay nagbabalik ng 400 No user message provided.
Mga content part
| Part | Paglalarawan | Available sa |
|---|---|---|
{"type": "text", "text": "…"} | Plain text. | Lahat ng model |
{"type": "image_url", "image_url": {"url": "…"}} | Isang image, bilang data: URL na may base64 na content o bilang http(s) URL. | Pamilyang Shannon 3, shannon-1.6-lite, shannon-1.6-pro, at ang mga hosted open-weight model na may image input |
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} | Isang dokumento (PDF, Word, PowerPoint o Excel), bilang base64 o sa pamamagitan ng URL. | Pamilyang Shannon 3 |
May sariling pahina ang mga laki, limitasyon at ang buong listahan ng mga anyo. Mga image at file
Ang reply object
| Field | Type | Paglalarawan |
|---|---|---|
id | string | chatcmpl- na sinusundan ng 32 hexadecimal na character. |
object | string | Palaging chat.completion. |
created | integer | Oras ng reply, sa Unix seconds. |
model | string | Ang canonical id ng model na sumagot. Maaari itong magkaiba sa baybay mula sa id na ipinadala mo. |
choices | array | Palaging eksaktong isang choice, na may index 0. |
choices[0].message.role | string | Palaging assistant. |
choices[0].message.content | string | null | Ang text ng sagot. Kapag may tool_calls, null ito sa mga Shannon tier; maaaring magpadala ang mga hosted open-weight model ng text katabi ng mga call. |
choices[0].message.reasoning_content | string | null | Ang reasoning na isinulat ng model bago ang sagot, o null kapag wala. |
choices[0].message.tool_calls | array | Naroroon lamang kapag tumatawag ng tools ang model. May id, type na function, at function na may name at arguments bilang JSON string ang bawat entry. |
choices[0].message.annotations | array | Sa request lang na may web_search: true na may nakitang resulta ang search. Isang url_citation para sa bawat source na pinangalanan ng isang marker sa content, na may url, title, start_index at end_index (ang posisyon ng marker, binibilang sa mga character, hindi kasama ang dulo). |
choices[0].finish_reason | string | Kung bakit natapos ang reply. Tingnan ang Mga dahilan ng pagtatapos. |
usage | object | Ang mga token ng request. Tingnan ang Usage. |
sources | array | Sa request lang na may web_search: true na may nakitang resulta ang search: ang mga resultang ibinigay sa model, bawat isa ay may index, title at url. Ang [1] sa sagot ay ang entry na may index na 1. |
Mga dahilan ng pagtatapos
| finish_reason | Paglalarawan |
|---|---|
stop | Natapos ng model ang sagot nito, o lumabas ang isang stop string. |
tool_calls | Tumatawag ang model ng isa o higit pang tool. Patakbuhin ang mga ito at ipadala ang mga resulta sa mga tool message. |
length | Naputol ang reply sa output limit. Iniuulat sa mga stream ng shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 at pamilyang Shannon 3. |
Ang reply na hindi naka-stream ay nag-uulat ng stop o tool_calls.
Usage
| Field | Type | Paglalarawan | Available sa |
|---|---|---|---|
usage.prompt_tokens | integer | Input tokens. | Lahat ng model |
usage.completion_tokens | integer | Output tokens: reasoning, sagot at tool call na pinagsama. | Lahat ng model |
usage.total_tokens | integer | prompt_tokens dagdag ang completion_tokens. | Lahat ng model |
usage.prompt_tokens_details.cached_tokens | integer | Ang bahagi ng prompt_tokens na binasa mula sa prompt cache. | Mga hosted open-weight model |
usage.completion_tokens_details.reasoning_tokens | integer | Ang bahagi ng completion_tokens na ginugol sa reasoning. | Mga hosted open-weight model |
Sa mga hosted open-weight model, ang prompt_tokens ay ang iyong mga message at tool definition na binilang gamit ang sariling tokenizer ng model, dagdag ang mga token ng anumang image. Ibinabalik ng mga token counting endpoint ang parehong numero bago ka magpadala. Pagbibilang ng token
Sa mga Shannon tier, binibilang ng prompt_tokens ang lahat ng binasa ng model para isulat ang reply, kaya mas malaki ito kaysa sa text ng iyong mga message lamang.
Streaming
Kapag naka-set ang stream sa true, dumarating ang reply bilang mga chat.completion.chunk event at nagtatapos sa data: [DONE]. Dala ng huling chunk bago nito ang finish_reason at usage; walang kailangang stream_options. May sariling pahina ang mga hugis ng chunk, keep-alive line at mga error sa loob ng stream. Pag‑stream
Mga error
Ang error ay isang JSON object na may miyembrong error. Tumatakbo ang mga pagsusuri sa pagkakasunod na ito: API key, request body, model id, saka balance. Inililista ng talahanayan ang pinakamadalas na ibinabalik ng endpoint na ito. May sariling pahina ang buong listahan, kasama kung ano ang dapat i-retry. Paghawak ng Error
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: no-such-model"
}
} | Status | Type | Mensahe | Kailan |
|---|---|---|---|
401 | authentication_error | Missing authenticationInvalid API key | Walang API key na naipadala, o hindi kilala o na-revoke ang key. |
400 | invalid_request_error | unknown model: <id> | Hindi inilathalang id ang model. |
400 | invalid_request_error | No user message provided | Mga Shannon tier: walang user text at walang tools ang request. |
400 | invalid_request_error | <id> does not accept image input | Nagpadala ng image part sa isang hosted open-weight model na walang image input. |
400 | invalid_request_error | <id> does not accept response_format | Nagpadala ng response_format sa isang hosted open-weight model na walang structured output. |
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | Ang reasoning_effort ay may value na wala sa listahan. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | Kulang ang messages, o mali ang JSON type ng isang field. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | Mas malaki ang max_tokens kaysa sa natitira sa iyong balance. |
429 | rate_limit_error | Too many requests. Retry in <n>s. | Flood protection: higit sa 120 request sa loob ng isang minuto sa iyong account. |
500 | server_error | The model backend failed to answer. Please retry. | Hindi nakabuo ng reply ang model. Ipadala muli ang request. |
502 | api_error | The model backend failed to answer. Please retry. | Pareho, sa pamilyang Shannon 3 at sa mga hosted open-weight model. |