> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sunra.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Create a chat completion

Envía una solicitud para obtener una respuesta del modelo para la conversación de chat dada. Soporta modos streaming y no-streaming. Compatible con el formato de la API OpenAI Chat Completions.

## Autenticación

<ParamField header="Authorization" type="string" required>
  Token Bearer. Use su clave API como token Bearer en el encabezado Authorization.

  Formato: `Bearer <SUNRA_KEY>`
</ParamField>

## Solicitud

Este endpoint espera un objeto.

<ParamField body="messages" type="object[]" required>
  Lista de mensajes para la conversación.

  <Expandable title="propiedades">
    <ParamField body="role" type="string" required>
      El rol del autor del mensaje. Valores admitidos: `system`, `user`, `assistant`, `tool`.
    </ParamField>

    <ParamField body="content" type="string | object[]" required>
      El contenido del mensaje. Puede ser una cadena de texto o un array de partes de contenido para entrada multimodal.
    </ParamField>

    <ParamField body="name" type="string">
      Un nombre opcional para el participante. Proporciona al modelo información para diferenciar entre participantes del mismo rol.
    </ParamField>

    <ParamField body="tool_calls" type="object[]">
      Las llamadas a herramientas generadas por el modelo, como llamadas a funciones. Solo presente en mensajes `assistant`.
    </ParamField>

    <ParamField body="tool_call_id" type="string">
      La llamada a herramienta a la que responde este mensaje. Solo presente en mensajes `tool`.
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="model" type="string" required>
  El modelo a utilizar para el completado. Explore los modelos disponibles en [sunra.ai/models](https://sunra.ai/models).
</ParamField>

<ParamField body="stream" type="boolean" default={false}>
  Si se establece en `true`, se enviarán deltas de mensajes parciales como eventos server-sent (SSE).
</ParamField>

<ParamField body="max_tokens" type="integer">
  El número máximo de tokens a generar en el completado. La longitud total de tokens de entrada y tokens generados está limitada por la longitud de contexto del modelo.
</ParamField>

<ParamField body="temperature" type="number" default={1}>
  Temperatura de muestreo entre 0 y 2. Valores más altos como 0.8 hacen la salida más aleatoria, valores más bajos como 0.2 la hacen más enfocada y determinista.
</ParamField>

<ParamField body="top_p" type="number" default={1}>
  Parámetro de muestreo por núcleo (0-1). Una alternativa al muestreo por temperatura donde el modelo considera los tokens con masa de probabilidad top\_p.
</ParamField>

<ParamField body="frequency_penalty" type="number" default={0}>
  Número entre -2.0 y 2.0. Los valores positivos penalizan los nuevos tokens según su frecuencia existente en el texto hasta el momento, disminuyendo la probabilidad de que el modelo repita la misma línea textualmente.
</ParamField>

<ParamField body="presence_penalty" type="number" default={0}>
  Número entre -2.0 y 2.0. Los valores positivos penalizan los nuevos tokens según si aparecen en el texto hasta el momento, aumentando la probabilidad de que el modelo hable sobre nuevos temas.
</ParamField>

<ParamField body="stop" type="string | string[]">
  Hasta 4 secuencias donde la API dejará de generar tokens adicionales.
</ParamField>

<ParamField body="n" type="integer" default={1}>
  Cuántas opciones de completado de chat generar para cada mensaje de entrada.
</ParamField>

<ParamField body="logprobs" type="boolean" default={false}>
  Indica si se deben devolver las log-probabilidades de los tokens de salida. Si es verdadero, devuelve las log-probabilidades de cada token de salida retornado en el contenido del mensaje.
</ParamField>

<ParamField body="top_logprobs" type="integer">
  Un entero entre 0 y 20 que especifica el número de tokens más probables a devolver en cada posición de token. `logprobs` debe estar establecido en `true` si se usa este parámetro.
</ParamField>

<ParamField body="response_format" type="object">
  Un objeto que especifica el formato que el modelo debe producir.

  <Expandable title="propiedades">
    <ParamField body="type" type="string" required>
      El tipo de formato de respuesta. Valores admitidos: `text`, `json_object`, `json_schema`.
    </ParamField>

    <ParamField body="json_schema" type="object">
      El objeto de esquema JSON. Requerido cuando el tipo es `json_schema`.
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="seed" type="integer">
  Si se especifica, el sistema hará un esfuerzo óptimo para muestrear de forma determinista, de modo que las solicitudes repetidas con el mismo seed y parámetros deberían devolver el mismo resultado.
</ParamField>

<ParamField body="tools" type="object[]">
  Una lista de herramientas que el modelo puede llamar. Actualmente, solo se admiten funciones como herramienta.

  <Expandable title="propiedades">
    <ParamField body="type" type="string" required>
      El tipo de herramienta. Actualmente, solo se admite `function`.
    </ParamField>

    <ParamField body="function" type="object" required>
      La definición de la función.

      <Expandable title="propiedades">
        <ParamField body="name" type="string" required>
          El nombre de la función a llamar.
        </ParamField>

        <ParamField body="description" type="string">
          Una descripción de lo que hace la función.
        </ParamField>

        <ParamField body="parameters" type="object">
          Los parámetros que acepta la función, descritos como un objeto JSON Schema.
        </ParamField>

        <ParamField body="strict" type="boolean" default={false}>
          Indica si se debe habilitar la adherencia estricta al esquema.
        </ParamField>
      </Expandable>
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="tool_choice" type="string | object">
  Controla qué herramienta (si alguna) es llamada por el modelo. `none` significa que el modelo no llamará a ninguna herramienta. `auto` significa que el modelo puede elegir entre generar un mensaje o llamar herramientas. `required` significa que el modelo debe llamar a una o más herramientas. También puede especificar una función particular mediante `{"type": "function", "function": {"name": "my_function"}}`.
</ParamField>

<ParamField body="parallel_tool_calls" type="boolean" default={true}>
  Indica si se debe habilitar la llamada de funciones en paralelo durante el uso de herramientas.
</ParamField>

<ParamField body="user" type="string">
  Un identificador único que representa a su usuario final, que puede ayudar a monitorear y detectar abusos.
</ParamField>

## Respuesta

Respuesta exitosa de completado de chat.

<ResponseField name="id" type="string">
  Un identificador único para el completado de chat.
</ResponseField>

<ResponseField name="object" type="string">
  El tipo de objeto. Siempre `chat.completion`.
</ResponseField>

<ResponseField name="created" type="integer">
  La marca de tiempo Unix (en segundos) de cuándo se creó el completado de chat.
</ResponseField>

<ResponseField name="model" type="string">
  El modelo utilizado para el completado de chat.
</ResponseField>

<ResponseField name="choices" type="object[]">
  Una lista de opciones de completado de chat. Puede contener más de una si `n` es mayor que 1.

  <Expandable title="propiedades">
    <ResponseField name="index" type="integer">
      El índice de la opción en la lista de opciones.
    </ResponseField>

    <ResponseField name="message" type="object">
      Un mensaje de completado de chat generado por el modelo.

      <Expandable title="propiedades">
        <ResponseField name="role" type="string">
          El rol del autor de este mensaje. Siempre `assistant`.
        </ResponseField>

        <ResponseField name="content" type="string | null">
          El contenido del mensaje.
        </ResponseField>

        <ResponseField name="tool_calls" type="object[]">
          Las llamadas a herramientas generadas por el modelo, como llamadas a funciones.

          <Expandable title="propiedades">
            <ResponseField name="id" type="string">
              El ID de la llamada a herramienta.
            </ResponseField>

            <ResponseField name="type" type="string">
              El tipo de herramienta. Actualmente, solo se admite `function`.
            </ResponseField>

            <ResponseField name="function" type="object">
              La función que el modelo llamó.

              <Expandable title="propiedades">
                <ResponseField name="name" type="string">
                  El nombre de la función a llamar.
                </ResponseField>

                <ResponseField name="arguments" type="string">
                  Los argumentos para llamar a la función, generados por el modelo en formato JSON.
                </ResponseField>
              </Expandable>
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="finish_reason" type="string">
      La razón por la que el modelo dejó de generar tokens. Puede ser `stop`, `length`, `tool_calls` o `content_filter`.
    </ResponseField>

    <ResponseField name="logprobs" type="object | null">
      Información de log-probabilidad para la opción.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="usage" type="object">
  Estadísticas de uso para la solicitud de completado.

  <Expandable title="propiedades">
    <ResponseField name="prompt_tokens" type="integer">
      Número de tokens en el prompt.
    </ResponseField>

    <ResponseField name="completion_tokens" type="integer">
      Número de tokens en el completado generado.
    </ResponseField>

    <ResponseField name="total_tokens" type="integer">
      Número total de tokens utilizados en la solicitud (prompt + completado).
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="system_fingerprint" type="string | null">
  Esta huella digital representa la configuración del backend con la que se ejecuta el modelo. Se puede usar con el parámetro `seed` para entender cuándo se han realizado cambios en el backend.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST https://api-llm.sunra.ai/v1/chat/completions \
    -H "Authorization: Bearer <SUNRA_KEY>" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "openai/gpt-4o",
      "messages": [
        {
          "role": "system",
          "content": "You are a helpful assistant."
        },
        {
          "role": "user",
          "content": "What is the capital of France?"
        }
      ]
    }'
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      "https://api-llm.sunra.ai/v1/chat/completions",
      headers={
          "Authorization": "Bearer <SUNRA_KEY>",
          "Content-Type": "application/json"
      },
      json={
          "model": "openai/gpt-4o",
          "messages": [
              {"role": "system", "content": "You are a helpful assistant."},
              {"role": "user", "content": "What is the capital of France?"}
          ]
      }
  )
  print(response.json())
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch("https://api-llm.sunra.ai/v1/chat/completions", {
    method: "POST",
    headers: {
      "Authorization": "Bearer <SUNRA_KEY>",
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      model: "openai/gpt-4o",
      messages: [
        { role: "system", content: "You are a helpful assistant." },
        { role: "user", content: "What is the capital of France?" }
      ]
    })
  });
  const data = await response.json();
  console.log(data);
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "id": "chatcmpl-abc123",
    "object": "chat.completion",
    "created": 1677652288,
    "model": "openai/gpt-4o",
    "choices": [
      {
        "index": 0,
        "message": {
          "role": "assistant",
          "content": "The capital of France is Paris."
        },
        "finish_reason": "stop",
        "logprobs": null
      }
    ],
    "system_fingerprint": "fp_44709d6fcb",
    "usage": {
      "prompt_tokens": 25,
      "completion_tokens": 8,
      "total_tokens": 33
    }
  }
  ```
</ResponseExample>
