Saltar ao contido
Chat Completions

Chat Completions

POST /v1/chat/completions recibe unha conversa e devolve a seguinte mensaxe do modelo no formato OpenAI Chat Completions. Úsao desde calquera SDK de OpenAI ou por HTTP simple; esta páxina é a referencia campo por campo.

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

A solicitude máis pequena é un id de modelo e unha mensaxe de usuario.

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)

A resposta é un obxecto 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
  }
}

Cabeceiras

Cabeceiras da solicitude

Cabeceira Valor Descrición
Authorization Bearer YOUR_API_KEY A túa clave API. En todos os endpoints acéptase x-api-key: YOUR_API_KEY no seu lugar.
Content-Type application/json Obrigatoria. Calquera outro valor devolve 415.
x-request-id Opcional. O teu propio id para a solicitude. Volve sen cambios na resposta.

Cabeceiras da resposta

Cabeceira Descrición
x-request-id En todas as respostas, incluídos erros e streams: o valor que enviaches, ou 12 caracteres hexadecimais se non enviaches ningún. Cítao cando informes dun problema.
content-type application/json, ou text/event-stream cando stream é true.

Campos da solicitude

Só messages é obrigatorio. A columna Aplicado por indica os modelos nos que un campo cambia a resposta. Os modelos open-weight alojados son os doce ids da lista de modelos; a familia Shannon 3 é shannon-3, shannon-3-pro, shannon-3.1 e shannon-3.1-pro. Modelos e prezos

Campo Tipo Valor predeterminado Descrición Aplicado por
model string shannon-1.6-lite O modelo que responde: un id da lista de modelos. Envíao en cada solicitude. A coincidencia non distingue maiúsculas de minúsculas. Un id que non está publicado devolve 400 unknown model. Todos os modelos
messages array Obrigatorio. A conversa, coa mensaxe máis antiga primeiro. Consulta Mensaxes máis abaixo. Todos os modelos
stream boolean false true envía a resposta como server-sent events a medida que se escribe. Todos os modelos
max_tokens integer 4096 Límite superior da resposta, en tokens. Un valor fóra do intervalo de 1 a 65,536 axústase a ese intervalo. É tamén a cantidade que se reserva do teu saldo mentres a solicitude está en curso. Consulta Lonxitude da saída máis abaixo. Modelos open-weight alojados, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
max_completion_tokens integer O mesmo que max_tokens. Se se envían os dous, úsase max_tokens. Modelos open-weight alojados, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
temperature number Temperatura de mostraxe. Nos modelos open-weight alojados o valor predeterminado é 1 e os valores mantéñense entre 0 e 2. Modelos open-weight alojados, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
top_p number 0.95 Mostraxe por núcleo (nucleus sampling). Os valores mantéñense entre 0 e 1. Modelos open-weight alojados
seed integer Semente do mostreador, calquera enteiro. Sen ela, a semente derívase do modelo e da conversa, así que a mesma solicitude enviada dúas veces usa a mesma semente. Modelos open-weight alojados
stop string | array Unha cadea ou unha matriz de cadeas. Úsanse ata 4. A resposta remata antes da primeira que apareza; o texto de parada en si non se devolve. Modelos open-weight alojados
reasoning_effort string high Canto razoa o modelo antes de responder: off, low, medium ou high. none e minimal significan off, default significa medium e max significa high. Calquera outro valor devolve 400. Modelos open-weight alojados
reasoning object O mesmo axuste en forma de obxecto: {"effort": "low"}. Se se envían os dous, úsase reasoning_effort. Modelos open-weight alojados
tools array As funcións ás que pode chamar o modelo, cada unha como {"type": "function", "function": {"name", "description", "parameters"}}. As chamadas do modelo volven en tool_calls; o teu código execútaas. Todos os modelos
tool_choice string | object auto "auto" deixa que decida o modelo. "required" obrígao a chamar a unha ferramenta. {"type": "function", "function": {"name": "…"}} obrígao a chamar a esa ferramenta. Modelos open-weight alojados
response_format object {"type": "json_object"} para unha resposta JSON, ou {"type": "json_schema", "json_schema": {…}} para unha resposta que siga o teu esquema. Todos os niveis Shannon; modelos open-weight alojados segundo se indica por id
web_search boolean false true permite que o modelo busque na web antes de responder. shannon-1.6-*, shannon-2-*, familia Shannon 3

Acéptanse outros campos de OpenAI, como n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store e prompt_cache_key, para que o código de cliente existente funcione sen cambios. Non alteran a resposta: sempre hai unha soa opción (choice) e un stream remata sempre co uso.

Un campo co tipo JSON incorrecto, por exemplo "max_tokens": "100", devolve 422. Unha solicitude sen messages tamén.

As ferramentas, a saída estruturada, o razoamento e a busca web teñen cada un a súa propia páxina: Chamadas a funcións, Saídas estruturadas, Esforzo de razoamento, Busca web.

Unha solicitude con opcións

Esta solicitude define unha mensaxe de sistema, os campos de mostraxe e o esforzo de razoamento. Usa un modelo open-weight alojado, que aplica todos eles.

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)

A resposta ten a mesma forma que a anterior. O seu usage engade dous detalles nos modelos open-weight alojados: os tokens de prompt lidos da caché e os tokens gastados en razoamento.

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

Lonxitude da saída

max_tokens fai dúas cousas. Primeiro, é o número de tokens que se reservan do teu saldo cando comeza a solicitude. Cando a resposta está completa, esa cantidade substitúese polos tokens que usou a solicitude. Se max_tokens é maior que o que queda do teu saldo, a solicitude devolve 429 Quota exceeded aínda que a resposta en si tería cabido. Envía un max_tokens menor para reservar menos.

shannon-coder-1 cóntase de forma diferente neste endpoint: cada solicitude é unha das chamadas de Shannon Coder do teu plan, e non se reserva ningún token para ela. Límites e saldo

Segundo, limita a lonxitude da resposta nestes modelos:

Modelos O que fai max_tokens
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 A resposta detense cando alcanza o límite. Un stream remata entón con finish_reason length.
Modelos open-weight alojados O texto da resposta detense en max_tokens. O razoamento non conta para ese límite. Os valores inferiores a 256 actúan como 256.

Sen max_tokens nin max_completion_tokens, o valor é 4,096. En shannon-coder-1 é 65,536.

Mensaxes

Cada mensaxe é un obxecto cun role e un content. content é unha cadea ou unha matriz de partes cando a mensaxe leva algo máis que texto.

Rol Descrición Aplicado por
system Instrucións para o modelo. Ponas primeiro. Nos niveis Shannon, a que se usa é a primeira mensaxe system. Modelos open-weight alojados, shannon-1.6-*, shannon-2-*, shannon-coder-1
developer Lese como system. Modelos open-weight alojados
user O que preguntas. Nos niveis Shannon, a última mensaxe user é o prompt e as mensaxes anteriores son o historial. Todos os modelos
assistant Respostas anteriores do modelo. Conserva os seus tool_calls cando envíes despois un resultado de ferramenta. Todos os modelos
tool O resultado dunha chamada a unha ferramenta: tool_call_id contén o id da chamada e content o resultado como cadea. Todos os modelos

Cun id da familia Shannon 3, pon na mensaxe user as instrucións que deban cumprirse.

Nos niveis Shannon, unha solicitude sen texto de usuario nin tools devolve 400 No user message provided.

Partes de contido

Parte Descrición Dispoñible en
{"type": "text", "text": "…"} Texto simple. Todos os modelos
{"type": "image_url", "image_url": {"url": "…"}} Unha imaxe, como URL data: con contido en base64 ou como URL http(s). Familia Shannon 3, shannon-1.6-lite, shannon-1.6-pro e os modelos open-weight alojados que admiten imaxes como entrada
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} Un documento (PDF, Word, PowerPoint ou Excel), en base64 ou por URL. Familia Shannon 3

Os tamaños, os límites e a lista completa de formas teñen a súa propia páxina. Imaxes e ficheiros

O obxecto de resposta

Campo Tipo Descrición
id string chatcmpl- seguido de 32 caracteres hexadecimais.
object string Sempre chat.completion.
created integer Hora da resposta, en segundos Unix.
model string O id canónico do modelo que respondeu. Pode diferir na grafía do id que enviaches.
choices array Sempre exactamente unha opción (choice), con index 0.
choices[0].message.role string Sempre assistant.
choices[0].message.content string | null O texto da resposta. Con tool_calls é null nos niveis Shannon; os modelos open-weight alojados poden enviar texto xunto coas chamadas.
choices[0].message.reasoning_content string | null O razoamento que o modelo escribiu antes da resposta, ou null cando non hai ningún.
choices[0].message.tool_calls array Só está presente cando o modelo chama a ferramentas. Cada entrada ten un id, type function e function co name e os arguments como cadea JSON.
choices[0].message.annotations array Só nunha solicitude con web_search: true cuxa busca atopou algo. Un url_citation por cada fonte que nomea un marcador en content, con url, title, start_index e end_index (a posición do marcador, contada en caracteres, sen incluír o final).
choices[0].finish_reason string Por que rematou a resposta. Consulta Motivos de finalización.
usage object Os tokens da solicitude. Consulta Uso.
sources array Só nunha solicitude con web_search: true cuxa busca atopou algo: os resultados que recibiu o modelo, cada un con index, title e url. [1] na resposta é a entrada con index 1.

Motivos de finalización

finish_reason Descrición
stop O modelo rematou a súa resposta, ou apareceu unha cadea de stop.
tool_calls O modelo chama a unha ou varias ferramentas. Execútaas e envía os resultados en mensaxes tool.
length A resposta cortouse no límite de saída. Infórmase nos streams de shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 e a familia Shannon 3.

Unha resposta sen stream informa stop ou tool_calls.

Uso

Campo Tipo Descrición Dispoñible en
usage.prompt_tokens integer Tokens de entrada. Todos os modelos
usage.completion_tokens integer Tokens de saída: razoamento, resposta e chamadas a ferramentas xuntos. Todos os modelos
usage.total_tokens integer prompt_tokens máis completion_tokens. Todos os modelos
usage.prompt_tokens_details.cached_tokens integer A parte de prompt_tokens que se leu da caché de prompts. Modelos open-weight alojados
usage.completion_tokens_details.reasoning_tokens integer A parte de completion_tokens que se gastou en razoamento. Modelos open-weight alojados

Nos modelos open-weight alojados, prompt_tokens son as túas mensaxes e definicións de ferramentas contadas co tokenizador propio do modelo, máis os tokens das imaxes. Os endpoints de reconto de tokens devolven o mesmo número antes de que envíes. Reconto de tokens

Nos niveis Shannon, prompt_tokens conta todo o que leu o modelo para escribir a resposta, así que é maior que o texto das túas mensaxes só.

Streaming

Con stream definido como true, a resposta chega como eventos chat.completion.chunk e remata con data: [DONE]. O último chunk antes del leva finish_reason e usage; non fan falta stream_options. As formas dos chunks, as liñas keep-alive e os erros dentro dun stream teñen a súa propia páxina. Streaming

Erros

Un erro é un obxecto JSON cun membro error. As comprobacións execútanse nesta orde: clave API, corpo da solicitude, id do modelo e despois saldo. A táboa mostra o que este endpoint devolve con máis frecuencia. A lista completa, con indicacións sobre que reintentar, ten a súa propia páxina. Xestión de erros

400 JSON
{
  "error": {
    "type": "invalid_request_error",
    "message": "unknown model: no-such-model"
  }
}
Estado Tipo Mensaxe Cando
401 authentication_error Missing authentication
Invalid API key
Non se enviou ningunha clave API, ou a clave é descoñecida ou está revogada.
400 invalid_request_error unknown model: <id> model non é un id publicado.
400 invalid_request_error No user message provided Niveis Shannon: a solicitude non ten texto de usuario nin tools.
400 invalid_request_error <id> does not accept image input Enviouse unha parte de imaxe a un modelo open-weight alojado sen entrada de imaxe.
400 invalid_request_error <id> does not accept response_format Enviouse response_format a un modelo open-weight alojado sen saída estruturada.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high reasoning_effort contén un valor que non está na lista.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Falta messages, ou un campo ten o tipo JSON incorrecto.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_tokens é maior que o que queda do teu saldo.
429 rate_limit_error Too many requests. Retry in <n>s. Protección contra inundación: máis de 120 solicitudes nun minuto na túa conta.
500 server_error The model backend failed to answer. Please retry. O modelo non produciu unha resposta. Envía a solicitude de novo.
502 api_error The model backend failed to answer. Please retry. O mesmo, na familia Shannon 3 e nos modelos open-weight alojados.