Salta al contingut
Chat Completions

Chat Completions

POST /v1/chat/completions accepta una conversa i retorna el missatge següent del model en el format OpenAI Chat Completions. Fes-lo servir des de qualsevol SDK d'OpenAI o amb HTTP pla; aquesta pàgina és la referència camp per camp.

POST https://api.shannon-ai.com/v1/chat/completions

La sol·licitud més petita és un id de model i un missatge d'usuari.

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)

La resposta és un sol objecte JSON:

200 JSON
{
  "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
  }
}

Capçaleres

Capçaleres de la sol·licitud

Capçalera Valor Descripció
Authorization Bearer YOUR_API_KEY La teva clau API. En lloc seu, a tots els endpoints s'accepta x-api-key: YOUR_API_KEY.
Content-Type application/json Obligatori. Qualsevol altre valor retorna 415.
x-request-id Opcional. El teu propi id per a la sol·licitud. Torna sense canvis a la resposta.

Capçaleres de la resposta

Capçalera Descripció
x-request-id A cada resposta, errors i streams inclosos: el valor que has enviat, o 12 caràcters hexadecimals si no n'has enviat cap. Cita'l quan informis d'un problema.
content-type application/json, o text/event-stream quan stream és true.

Camps de la sol·licitud

Només messages és obligatori. La columna S'aplica a indica els models en què un camp canvia la resposta. Els models open-weight hostejats són els dotze ids de la llista de models; la família Shannon 3 és shannon-3, shannon-3-pro, shannon-3.1 i shannon-3.1-pro. Models i preus

Camp Tipus Per defecte Descripció S'aplica a
model string shannon-1.6-lite El model que respon: un id de la llista de models. Envia'l a cada sol·licitud. La coincidència no distingeix majúscules i minúscules. Un id que no és publicat retorna 400 unknown model. Tots els models
messages array Obligatori. La conversa, amb el missatge més antic primer. Vegeu Missatges més avall. Tots els models
stream boolean false true envia la resposta com a server-sent events mentre s'escriu. Tots els models
max_tokens integer 4096 Límit superior de la resposta, en tokens. Un valor fora de l'interval d'1 a 65,536 es porta a aquest interval. També és la quantitat que es reserva del teu saldo mentre la sol·licitud s'executa. Vegeu Longitud de la sortida més avall. Models open-weight hostejats, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
max_completion_tokens integer Igual que max_tokens. Quan s'envien tots dos, es fa servir max_tokens. Models open-weight hostejats, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
temperature number Temperatura de mostreig. Als models open-weight hostejats el valor per defecte és 1 i els valors es mantenen entre 0 i 2. Models open-weight hostejats, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
top_p number 0.95 Mostreig de nucli. Els valors es mantenen entre 0 i 1. Models open-weight hostejats
seed integer Llavor del mostrejador, qualsevol enter. Sense ella, la llavor es deriva del model i de la conversa, de manera que la mateixa sol·licitud enviada dues vegades fa servir la mateixa llavor. Models open-weight hostejats
stop string | array Una cadena o una matriu de cadenes. Se'n fan servir fins a 4. La resposta acaba abans de la primera que aparegui; el text d'aturada en si no es retorna. Models open-weight hostejats
reasoning_effort string high Quant raona el model abans de respondre: off, low, medium o high. none i minimal volen dir off, default vol dir medium, max vol dir high. Qualsevol altre valor retorna 400. Models open-weight hostejats
reasoning object El mateix paràmetre en forma d'objecte: {"effort": "low"}. Quan s'envien tots dos, es fa servir reasoning_effort. Models open-weight hostejats
tools array Les funcions que el model pot cridar, cadascuna com a {"type": "function", "function": {"name", "description", "parameters"}}. Les crides del model tornen a tool_calls; el teu codi les executa. Tots els models
tool_choice string | object auto "auto" deixa que el model decideixi. "required" l'obliga a cridar una eina. {"type": "function", "function": {"name": "…"}} l'obliga a cridar aquesta eina. Models open-weight hostejats
response_format object {"type": "json_object"} per a una resposta JSON, o {"type": "json_schema", "json_schema": {…}} per a una resposta que segueix el teu esquema. Tots els nivells Shannon; models open-weight hostejats segons s'indica per id
web_search boolean false true deixa que el model cerqui al web abans de respondre. shannon-1.6-*, shannon-2-*, família Shannon 3

Altres camps d'OpenAI, com n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store i prompt_cache_key, s'accepten perquè el codi de client existent funcioni sense canvis. No canvien la resposta: sempre hi ha una sola opció, i un stream sempre acaba amb l'ús.

Un camp amb un tipus JSON incorrecte, per exemple "max_tokens": "100", retorna 422. Una sol·licitud sense messages també.

Les eines, la sortida estructurada, el raonament i la cerca web tenen cadascun la seva pròpia pàgina: Crida de funcions, Sortides estructurades, Esforç de raonament, Cerca web.

Una sol·licitud amb opcions

Aquesta sol·licitud defineix un missatge de sistema, els camps de mostreig i l'esforç de raonament. Fa servir un model open-weight hostejat, que els aplica tots.

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)

La resposta té la mateixa forma que dalt. El seu usage afegeix dos detalls als models open-weight hostejats: els tokens de prompt llegits de la cache i els tokens gastats en raonament.

200 JSON
{
  "usage": {
    "prompt_tokens": 31,
    "completion_tokens": 62,
    "total_tokens": 93,
    "prompt_tokens_details": {
      "cached_tokens": 0
    },
    "completion_tokens_details": {
      "reasoning_tokens": 21
    }
  }
}

Longitud de la sortida

max_tokens fa dues coses. Primer, és el nombre de tokens que es reserven del teu saldo quan comença la sol·licitud. Quan la resposta és completa, aquesta quantitat se substitueix pels tokens que la sol·licitud ha fet servir. Si max_tokens és més gran que el que queda del teu saldo, la sol·licitud retorna 429 Quota exceeded encara que la resposta mateixa hauria cabut. Envia un max_tokens més baix per reservar-ne menys.

shannon-coder-1 es compta de manera diferent en aquest endpoint: cada sol·licitud és una de les crides de Shannon Coder del teu pla, i no es reserva cap token per a ella. Límits i saldo

Segon, limita la longitud de la resposta en aquests models:

Models Què fa max_tokens
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 La resposta s'atura quan arriba al límit. Un stream acaba llavors amb finish_reason length.
Models open-weight hostejats El text de la resposta s'atura a max_tokens. El raonament no hi compta. Els valors per sota de 256 actuen com a 256.

Sense max_tokens ni max_completion_tokens, el valor és 4,096. A shannon-coder-1 és 65,536.

Missatges

Cada missatge és un objecte amb un role i un content. content és una cadena o una matriu de parts quan el missatge porta més que text.

Rol Descripció S'aplica a
system Instruccions per al model. Posa'l primer. Als nivells Shannon es fa servir el primer missatge system. Models open-weight hostejats, shannon-1.6-*, shannon-2-*, shannon-coder-1
developer Es llegeix com a system. Models open-weight hostejats
user El que demanes. Als nivells Shannon, l'últim missatge user és el prompt i els missatges anteriors són l'historial. Tots els models
assistant Respostes anteriors del model. Conserva'n els tool_calls quan enviïs un resultat d'eina després. Tots els models
tool El resultat d'una crida d'eina: tool_call_id conté l'id de la crida i content el resultat com a cadena. Tots els models

Amb un id de la família Shannon 3, posa les instruccions que s'han de complir al missatge user.

Als nivells Shannon, una sol·licitud sense text d'usuari ni tools retorna 400 No user message provided.

Parts del contingut

Part Descripció Disponible a
{"type": "text", "text": "…"} Text pla. Tots els models
{"type": "image_url", "image_url": {"url": "…"}} Una imatge, com a URL data: amb contingut en base64 o com a URL http(s). Família Shannon 3, shannon-1.6-lite, shannon-1.6-pro i els models open-weight hostejats que admeten entrada d'imatge
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} Un document (PDF, Word, PowerPoint o Excel), en base64 o per URL. Família Shannon 3

Les mides, els límits i la llista completa de formes tenen la seva pròpia pàgina. Imatges i fitxers

L'objecte de resposta

Camp Tipus Descripció
id string chatcmpl- seguit de 32 caràcters hexadecimals.
object string Sempre chat.completion.
created integer Hora de la resposta, en segons Unix.
model string L'id canònic del model que ha respost. Pot diferir en l'ortografia de l'id que has enviat.
choices array Sempre exactament una opció, amb index 0.
choices[0].message.role string Sempre assistant.
choices[0].message.content string | null El text de la resposta. Amb tool_calls és null als nivells Shannon; els models open-weight hostejats poden enviar text al costat de les crides.
choices[0].message.reasoning_content string | null El raonament que el model ha escrit abans de la resposta, o null quan no n'hi ha.
choices[0].message.tool_calls array Present només quan el model crida eines. Cada entrada té un id, type function, i function amb el name i els arguments com a cadena JSON.
choices[0].message.annotations array Només en una sol·licitud amb web_search: true la cerca de la qual ha trobat alguna cosa. Un url_citation per a cada font que anomena un marcador a content, amb url, title, start_index i end_index (la posició del marcador, comptada en caràcters, el final no s'inclou).
choices[0].finish_reason string Per què ha acabat la resposta. Vegeu Motius de finalització.
usage object Els tokens de la sol·licitud. Vegeu Ús.
sources array Només en una sol·licitud amb web_search: true la cerca de la qual ha trobat alguna cosa: els resultats que s'han donat al model, cadascun amb index, title i url. [1] a la resposta és l'entrada amb index 1.

Motius de finalització

finish_reason Descripció
stop El model ha acabat la seva resposta, o ha aparegut una cadena de stop.
tool_calls El model crida una o més eines. Executa-les i envia els resultats en missatges tool.
length La resposta s'ha tallat al límit de sortida. S'informa als streams de shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 i la família Shannon 3.

Una resposta sense stream informa stop o tool_calls.

Ús

Camp Tipus Descripció Disponible a
usage.prompt_tokens integer Tokens d'entrada. Tots els models
usage.completion_tokens integer Tokens de sortida: raonament, resposta i crides d'eina junts. Tots els models
usage.total_tokens integer prompt_tokens més completion_tokens. Tots els models
usage.prompt_tokens_details.cached_tokens integer La part de prompt_tokens que s'ha llegit de la cache del prompt. Models open-weight hostejats
usage.completion_tokens_details.reasoning_tokens integer La part de completion_tokens que s'ha gastat en raonament. Models open-weight hostejats

Als models open-weight hostejats, prompt_tokens són els teus missatges i definicions d'eines comptats amb el tokenitzador del mateix model, més els tokens de les imatges. Els endpoints de recompte de tokens retornen el mateix número abans que enviïs. Recompte de tokens

Als nivells Shannon, prompt_tokens compta tot el que el model ha llegit per escriure la resposta, de manera que és més gran que el text dels teus missatges sol.

Streaming

Amb stream definit a true, la resposta arriba com a esdeveniments chat.completion.chunk i acaba amb data: [DONE]. L'últim fragment abans porta finish_reason i usage; no calen stream_options. Les formes dels fragments, les línies keep-alive i els errors dins d'un stream tenen la seva pròpia pàgina. Streaming

Errors

Un error és un objecte JSON amb un membre error. Les comprovacions s'executen en aquest ordre: clau API, cos de la sol·licitud, id del model i després saldo. La taula llista el que aquest endpoint retorna més sovint. La llista completa, amb què cal tornar a provar, té la seva pròpia pàgina. Gestió d’errors

400 JSON
{
  "error": {
    "type": "invalid_request_error",
    "message": "unknown model: no-such-model"
  }
}
Estat Tipus Missatge Quan
401 authentication_error Missing authentication
Invalid API key
No s'ha enviat cap clau API, o la clau és desconeguda o està revocada.
400 invalid_request_error unknown model: <id> model no és un id publicat.
400 invalid_request_error No user message provided Nivells Shannon: la sol·licitud no té text d'usuari ni tools.
400 invalid_request_error <id> does not accept image input S'ha enviat una part d'imatge a un model open-weight hostejat sense entrada d'imatge.
400 invalid_request_error <id> does not accept response_format S'ha enviat response_format a un model open-weight hostejat sense sortida estructurada.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high reasoning_effort conté un valor fora de la llista.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Falta messages, o un camp té un tipus JSON incorrecte.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_tokens és més gran que el que queda del teu saldo.
429 rate_limit_error Too many requests. Retry in <n>s. Protecció contra inundació: més de 120 sol·licituds en un minut al teu compte.
500 server_error The model backend failed to answer. Please retry. El model no ha produït cap resposta. Torna a enviar la sol·licitud.
502 api_error The model backend failed to answer. Please retry. El mateix, a la família Shannon 3 i als models open-weight hostejats.