Saltar al contenido
Chat Completions

Chat Completions

POST /v1/chat/completions recibe una conversación y devuelve el siguiente mensaje del modelo en el formato OpenAI Chat Completions. Úsalo desde cualquier SDK de OpenAI o por HTTP simple; esta página es la referencia campo por campo.

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

La solicitud más pequeña es un id de modelo y un mensaje 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)

La respuesta es un único objeto 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
  }
}

Headers

Headers de la solicitud

Header Valor Descripción
Authorization Bearer YOUR_API_KEY Tu clave API. En su lugar se acepta x-api-key: YOUR_API_KEY en todos los endpoints.
Content-Type application/json Obligatorio. Cualquier otro valor devuelve 415.
x-request-id Opcional. Tu propio id para la solicitud. Vuelve sin cambios en la respuesta.

Headers de la respuesta

Header Descripción
x-request-id En todas las respuestas, incluidos errores y streams: el valor que enviaste, o 12 caracteres hexadecimales si no enviaste ninguno. Cítalo cuando informes de un problema.
content-type application/json, o text/event-stream cuando stream es true.

Campos de solicitud

Solo messages es obligatorio. La columna Aplicado por indica los modelos en los que un campo cambia la respuesta. Los modelos de pesos abiertos alojados son los doce ids de la lista de modelos; la familia Shannon 3 es shannon-3, shannon-3-pro, shannon-3.1 y shannon-3.1-pro. Modelos y precios

Campo Tipo Predeterminado Descripción Aplicado por
model string shannon-1.6-lite El modelo que responde: un id de la lista de modelos. Envíalo en cada solicitud. La comparación no distingue mayúsculas de minúsculas. Un id que no está publicado devuelve 400 unknown model. Todos los modelos
messages array Obligatorio. La conversación, del mensaje más antiguo al más reciente. Consulta Mensajes más abajo. Todos los modelos
stream boolean false true envía la respuesta como server-sent events mientras se escribe. Todos los modelos
max_tokens integer 4096 Límite superior de la respuesta, en tokens. Un valor fuera del rango de 1 a 65,536 se ajusta a ese rango. Es también la cantidad que se reserva de tu saldo mientras se ejecuta la solicitud. Consulta Longitud de salida más abajo. Modelos de pesos abiertos alojados, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
max_completion_tokens integer Igual que max_tokens. Si se envían ambos, se usa max_tokens. Modelos de pesos abiertos alojados, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
temperature number Temperatura de muestreo. En los modelos de pesos abiertos alojados el valor predeterminado es 1 y los valores se mantienen entre 0 y 2. Modelos de pesos abiertos alojados, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
top_p number 0.95 Muestreo por núcleo (nucleus sampling). Los valores se mantienen entre 0 y 1. Modelos de pesos abiertos alojados
seed integer Semilla del muestreador, cualquier entero. Sin ella, la semilla se deriva del modelo y de la conversación, de modo que la misma solicitud enviada dos veces usa la misma semilla. Modelos de pesos abiertos alojados
stop string | array Una cadena o un array de cadenas. Se usan hasta 4. La respuesta termina antes de la primera que aparezca; el propio texto de parada no se devuelve. Modelos de pesos abiertos alojados
reasoning_effort string high Cuánto razona el modelo antes de responder: off, low, medium o high. none y minimal equivalen a off, default equivale a medium, max equivale a high. Cualquier otro valor devuelve 400. Modelos de pesos abiertos alojados
reasoning object El mismo ajuste en forma de objeto: {"effort": "low"}. Si se envían ambos, se usa reasoning_effort. Modelos de pesos abiertos alojados
tools array Las funciones que el modelo puede llamar, cada una como {"type": "function", "function": {"name", "description", "parameters"}}. Las llamadas del modelo vuelven en tool_calls; tu código las ejecuta. Todos los modelos
tool_choice string | object auto "auto" deja que el modelo decida. "required" lo obliga a llamar a una herramienta. {"type": "function", "function": {"name": "…"}} lo obliga a llamar a esa herramienta. Modelos de pesos abiertos alojados
response_format object {"type": "json_object"} para una respuesta JSON, o {"type": "json_schema", "json_schema": {…}} para una respuesta que sigue tu esquema. Todos los niveles de Shannon; modelos de pesos abiertos alojados según se indica por id
web_search boolean false true permite que el modelo busque en la web antes de responder. shannon-1.6-*, shannon-2-*, familia Shannon 3

Se aceptan otros campos de OpenAI, como n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store y prompt_cache_key, para que el código de cliente existente funcione sin cambios. No modifican la respuesta: siempre hay una sola choice, y un stream siempre termina con el uso.

Un campo con un tipo JSON incorrecto, por ejemplo "max_tokens": "100", devuelve 422. Una solicitud sin messages también.

Las herramientas, la salida estructurada, el razonamiento y la búsqueda web tienen cada uno su propia página: Llamadas a funciones, Salidas estructuradas, Esfuerzo de razonamiento, Búsqueda web integrada.

Una solicitud con opciones

Esta solicitud establece un mensaje de sistema, los campos de muestreo y el esfuerzo de razonamiento. Usa un modelo de pesos abiertos alojado, que aplica todos ellos.

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 respuesta tiene la misma forma que la anterior. Su usage añade dos detalles en los modelos de pesos abiertos alojados: los tokens del prompt leídos de la caché y los tokens gastados en razonamiento.

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 salida

max_tokens hace dos cosas. Primero, es el número de tokens que se reservan de tu saldo cuando empieza la solicitud. Cuando la respuesta está completa, esa cantidad se sustituye por los tokens que usó la solicitud. Si max_tokens es mayor que lo que queda de tu saldo, la solicitud devuelve 429 Quota exceeded aunque la respuesta en sí hubiera cabido. Envía un max_tokens menor para reservar menos.

shannon-coder-1 se cuenta de forma distinta en este endpoint: cada solicitud es una de las llamadas de Shannon Coder de tu plan, y no se reservan tokens para ella. Límites y saldo

Segundo, limita la longitud de la respuesta en estos modelos:

Modelos Qué hace max_tokens
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 La respuesta se detiene al llegar al límite. Entonces un stream termina con finish_reason length.
Modelos de pesos abiertos alojados El texto de la respuesta se detiene en max_tokens. El razonamiento no cuenta para él. Los valores inferiores a 256 se tratan como 256.

Sin max_tokens ni max_completion_tokens, el valor es 4,096. En shannon-coder-1 es 65,536.

Mensajes

Cada mensaje es un objeto con un role y un content. content es una cadena o un array de partes cuando el mensaje lleva algo más que texto.

Rol Descripción Aplicado por
system Instrucciones para el modelo. Ponlo primero. En los niveles de Shannon se usa el primer mensaje system. Modelos de pesos abiertos alojados, shannon-1.6-*, shannon-2-*, shannon-coder-1
developer Se lee como system. Modelos de pesos abiertos alojados
user Lo que preguntas. En los niveles de Shannon, el último mensaje user es el prompt y los mensajes anteriores son el historial. Todos los modelos
assistant Respuestas anteriores del modelo. Conserva sus tool_calls cuando envíes después un resultado de herramienta. Todos los modelos
tool El resultado de una llamada a herramienta: tool_call_id contiene el id de la llamada y content el resultado como cadena. Todos los modelos

Con un id de la familia Shannon 3, pon las instrucciones que deben cumplirse en el mensaje user.

En los niveles de Shannon, una solicitud sin texto de usuario ni tools devuelve 400 No user message provided.

Partes de contenido

Parte Descripción Disponible en
{"type": "text", "text": "…"} Texto simple. Todos los modelos
{"type": "image_url", "image_url": {"url": "…"}} Una imagen, como URL data: con contenido en base64 o como URL http(s). Familia Shannon 3, shannon-1.6-lite, shannon-1.6-pro y los modelos de pesos abiertos alojados que indican entrada de imágenes
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} Un documento (PDF, Word, PowerPoint o Excel), en base64 o por URL. Familia Shannon 3

Los tamaños, los límites y la lista completa de formas tienen su propia página. Imágenes y archivos

El objeto de respuesta

Campo Tipo Descripción
id string chatcmpl- seguido de 32 caracteres hexadecimales.
object string Siempre chat.completion.
created integer Hora de la respuesta, en segundos Unix.
model string El id canónico del modelo que respondió. Puede diferir en la ortografía del id que enviaste.
choices array Siempre exactamente una choice, con index 0.
choices[0].message.role string Siempre assistant.
choices[0].message.content string | null El texto de la respuesta. Con tool_calls es null en los niveles de Shannon; los modelos de pesos abiertos alojados pueden enviar texto junto a las llamadas.
choices[0].message.reasoning_content string | null El razonamiento que el modelo escribió antes de la respuesta, o null cuando no hay ninguno.
choices[0].message.tool_calls array Presente solo cuando el modelo llama a herramientas. Cada entrada tiene un id, type function y function con el name y los arguments como cadena JSON.
choices[0].message.annotations array Solo en una solicitud con web_search: true cuya búsqueda encontró algo. Un url_citation por cada fuente que nombra un marcador en content, con url, title, start_index y end_index (la posición del marcador, contada en caracteres, sin incluir el final).
choices[0].finish_reason string Por qué terminó la respuesta. Consulta Motivos de finalización.
usage object Los tokens de la solicitud. Consulta Uso.
sources array Solo en una solicitud con web_search: true cuya búsqueda encontró algo: los resultados que recibió el modelo, cada uno con index, title y url. [1] en la respuesta es la entrada con index 1.

Motivos de finalización

finish_reason Descripción
stop El modelo terminó su respuesta, o apareció una cadena de stop.
tool_calls El modelo llama a una o más herramientas. Ejecútalas y envía los resultados en mensajes tool.
length La respuesta se cortó en el límite de salida. Se informa en los streams de shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 y la familia Shannon 3.

Una respuesta sin streaming informa stop o tool_calls.

Uso

Campo Tipo Descripción Disponible en
usage.prompt_tokens integer Tokens de entrada. Todos los modelos
usage.completion_tokens integer Tokens de salida: razonamiento, respuesta y llamadas a herramientas en conjunto. Todos los modelos
usage.total_tokens integer prompt_tokens más completion_tokens. Todos los modelos
usage.prompt_tokens_details.cached_tokens integer La parte de prompt_tokens que se leyó de la caché de prompts. Modelos de pesos abiertos alojados
usage.completion_tokens_details.reasoning_tokens integer La parte de completion_tokens que se gastó en razonamiento. Modelos de pesos abiertos alojados

En los modelos de pesos abiertos alojados, prompt_tokens son tus mensajes y definiciones de herramientas contados con el tokenizador propio del modelo, más los tokens de las imágenes. Los endpoints de conteo de tokens devuelven el mismo número antes de que envíes. Conteo de tokens

En los niveles de Shannon, prompt_tokens cuenta todo lo que el modelo leyó para escribir la respuesta, por lo que es mayor que el texto de tus mensajes por sí solo.

Streaming

Con stream en true, la respuesta llega como eventos chat.completion.chunk y termina con data: [DONE]. El último fragmento antes de este lleva finish_reason y usage; no hacen falta stream_options. Las formas de los fragmentos, las líneas de keep-alive y los errores dentro de un stream tienen su propia página. Streaming

Errores

Un error es un objeto JSON con un miembro error. Las comprobaciones se ejecutan en este orden: clave API, cuerpo de la solicitud, id del modelo y después saldo. La tabla muestra lo que este endpoint devuelve con más frecuencia. La lista completa, con qué reintentar, tiene su propia página. Manejo de errores

400 JSON
{
  "error": {
    "type": "invalid_request_error",
    "message": "unknown model: no-such-model"
  }
}
Estado Tipo Mensaje Cuándo
401 authentication_error Missing authentication
Invalid API key
No se envió ninguna clave API, o la clave es desconocida o está revocada.
400 invalid_request_error unknown model: <id> model no es un id publicado.
400 invalid_request_error No user message provided Niveles de Shannon: la solicitud no tiene texto de usuario ni tools.
400 invalid_request_error <id> does not accept image input Se envió una parte de imagen a un modelo de pesos abiertos alojado sin entrada de imágenes.
400 invalid_request_error <id> does not accept response_format Se envió response_format a un modelo de pesos abiertos alojado sin salida estructurada.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high reasoning_effort contiene un valor fuera de la lista.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Falta messages, o un campo tiene un tipo JSON incorrecto.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_tokens es mayor que lo que queda de tu saldo.
429 rate_limit_error Too many requests. Retry in <n>s. Protección contra flood: más de 120 solicitudes en un minuto en tu cuenta.
500 server_error The model backend failed to answer. Please retry. El modelo no produjo una respuesta. Envía la solicitud de nuevo.
502 api_error The model backend failed to answer. Please retry. Lo mismo, en la familia Shannon 3 y en los modelos de pesos abiertos alojados.