> ## 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

Envoie une requête pour obtenir une réponse du modèle pour la conversation de chat donnée. Prend en charge les modes streaming et non-streaming. Compatible avec le format de l'API OpenAI Chat Completions.

## Authentification

<ParamField header="Authorization" type="string" required>
  Jeton Bearer. Utilisez votre clé API comme jeton Bearer dans l'en-tête Authorization.

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

## Requête

Cet endpoint attend un objet.

<ParamField body="messages" type="object[]" required>
  Liste des messages pour la conversation.

  <Expandable title="propriétés">
    <ParamField body="role" type="string" required>
      Le rôle de l'auteur du message. Valeurs prises en charge : `system`, `user`, `assistant`, `tool`.
    </ParamField>

    <ParamField body="content" type="string | object[]" required>
      Le contenu du message. Peut être une chaîne de caractères ou un tableau de parties de contenu pour une entrée multimodale.
    </ParamField>

    <ParamField body="name" type="string">
      Un nom optionnel pour le participant. Fournit au modèle des informations pour différencier les participants ayant le même rôle.
    </ParamField>

    <ParamField body="tool_calls" type="object[]">
      Les appels d'outils générés par le modèle, tels que les appels de fonctions. Présent uniquement dans les messages `assistant`.
    </ParamField>

    <ParamField body="tool_call_id" type="string">
      L'appel d'outil auquel ce message répond. Présent uniquement dans les messages `tool`.
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="model" type="string" required>
  Le modèle à utiliser pour la complétion. Parcourez les modèles disponibles sur [sunra.ai/models](https://sunra.ai/models).
</ParamField>

<ParamField body="stream" type="boolean" default={false}>
  Si défini sur `true`, des deltas de messages partiels seront envoyés sous forme d'événements server-sent (SSE).
</ParamField>

<ParamField body="max_tokens" type="integer">
  Le nombre maximum de tokens à générer dans la complétion. La longueur totale des tokens d'entrée et des tokens générés est limitée par la longueur de contexte du modèle.
</ParamField>

<ParamField body="temperature" type="number" default={1}>
  Température d'échantillonnage entre 0 et 2. Des valeurs plus élevées comme 0.8 rendent la sortie plus aléatoire, des valeurs plus basses comme 0.2 la rendent plus ciblée et déterministe.
</ParamField>

<ParamField body="top_p" type="number" default={1}>
  Paramètre d'échantillonnage par noyau (0-1). Une alternative à l'échantillonnage par température où le modèle considère les tokens avec une masse de probabilité top\_p.
</ParamField>

<ParamField body="frequency_penalty" type="number" default={0}>
  Nombre entre -2.0 et 2.0. Les valeurs positives pénalisent les nouveaux tokens en fonction de leur fréquence existante dans le texte jusqu'à présent, diminuant la probabilité que le modèle répète la même ligne mot pour mot.
</ParamField>

<ParamField body="presence_penalty" type="number" default={0}>
  Nombre entre -2.0 et 2.0. Les valeurs positives pénalisent les nouveaux tokens en fonction de leur apparition dans le texte jusqu'à présent, augmentant la probabilité que le modèle aborde de nouveaux sujets.
</ParamField>

<ParamField body="stop" type="string | string[]">
  Jusqu'à 4 séquences où l'API cessera de générer des tokens supplémentaires.
</ParamField>

<ParamField body="n" type="integer" default={1}>
  Le nombre de choix de complétion de chat à générer pour chaque message d'entrée.
</ParamField>

<ParamField body="logprobs" type="boolean" default={false}>
  Indique s'il faut retourner les log-probabilités des tokens de sortie. Si vrai, retourne les log-probabilités de chaque token de sortie retourné dans le contenu du message.
</ParamField>

<ParamField body="top_logprobs" type="integer">
  Un entier entre 0 et 20 spécifiant le nombre de tokens les plus probables à retourner à chaque position de token. `logprobs` doit être défini sur `true` si ce paramètre est utilisé.
</ParamField>

<ParamField body="response_format" type="object">
  Un objet spécifiant le format que le modèle doit produire.

  <Expandable title="propriétés">
    <ParamField body="type" type="string" required>
      Le type de format de réponse. Valeurs prises en charge : `text`, `json_object`, `json_schema`.
    </ParamField>

    <ParamField body="json_schema" type="object">
      L'objet de schéma JSON. Requis lorsque le type est `json_schema`.
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="seed" type="integer">
  Si spécifié, le système fera un effort optimal pour échantillonner de manière déterministe, de sorte que les requêtes répétées avec le même seed et les mêmes paramètres devraient retourner le même résultat.
</ParamField>

<ParamField body="tools" type="object[]">
  Une liste d'outils que le modèle peut appeler. Actuellement, seules les fonctions sont prises en charge comme outil.

  <Expandable title="propriétés">
    <ParamField body="type" type="string" required>
      Le type de l'outil. Actuellement, seul `function` est pris en charge.
    </ParamField>

    <ParamField body="function" type="object" required>
      La définition de la fonction.

      <Expandable title="propriétés">
        <ParamField body="name" type="string" required>
          Le nom de la fonction à appeler.
        </ParamField>

        <ParamField body="description" type="string">
          Une description de ce que fait la fonction.
        </ParamField>

        <ParamField body="parameters" type="object">
          Les paramètres acceptés par la fonction, décrits sous forme d'objet JSON Schema.
        </ParamField>

        <ParamField body="strict" type="boolean" default={false}>
          Indique s'il faut activer l'adhérence stricte au schéma.
        </ParamField>
      </Expandable>
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="tool_choice" type="string | object">
  Contrôle quel outil (le cas échéant) est appelé par le modèle. `none` signifie que le modèle n'appellera aucun outil. `auto` signifie que le modèle peut choisir entre générer un message ou appeler des outils. `required` signifie que le modèle doit appeler un ou plusieurs outils. Peut également spécifier une fonction particulière via `{"type": "function", "function": {"name": "my_function"}}`.
</ParamField>

<ParamField body="parallel_tool_calls" type="boolean" default={true}>
  Indique s'il faut activer l'appel de fonctions en parallèle lors de l'utilisation d'outils.
</ParamField>

<ParamField body="user" type="string">
  Un identifiant unique représentant votre utilisateur final, qui peut aider à surveiller et détecter les abus.
</ParamField>

## Réponse

Réponse de complétion de chat réussie.

<ResponseField name="id" type="string">
  Un identifiant unique pour la complétion de chat.
</ResponseField>

<ResponseField name="object" type="string">
  Le type d'objet. Toujours `chat.completion`.
</ResponseField>

<ResponseField name="created" type="integer">
  L'horodatage Unix (en secondes) de la création de la complétion de chat.
</ResponseField>

<ResponseField name="model" type="string">
  Le modèle utilisé pour la complétion de chat.
</ResponseField>

<ResponseField name="choices" type="object[]">
  Une liste de choix de complétion de chat. Peut contenir plus d'un élément si `n` est supérieur à 1.

  <Expandable title="propriétés">
    <ResponseField name="index" type="integer">
      L'index du choix dans la liste des choix.
    </ResponseField>

    <ResponseField name="message" type="object">
      Un message de complétion de chat généré par le modèle.

      <Expandable title="propriétés">
        <ResponseField name="role" type="string">
          Le rôle de l'auteur de ce message. Toujours `assistant`.
        </ResponseField>

        <ResponseField name="content" type="string | null">
          Le contenu du message.
        </ResponseField>

        <ResponseField name="tool_calls" type="object[]">
          Les appels d'outils générés par le modèle, tels que les appels de fonctions.

          <Expandable title="propriétés">
            <ResponseField name="id" type="string">
              L'ID de l'appel d'outil.
            </ResponseField>

            <ResponseField name="type" type="string">
              Le type de l'outil. Actuellement, seul `function` est pris en charge.
            </ResponseField>

            <ResponseField name="function" type="object">
              La fonction que le modèle a appelée.

              <Expandable title="propriétés">
                <ResponseField name="name" type="string">
                  Le nom de la fonction à appeler.
                </ResponseField>

                <ResponseField name="arguments" type="string">
                  Les arguments pour appeler la fonction, générés par le modèle au format JSON.
                </ResponseField>
              </Expandable>
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="finish_reason" type="string">
      La raison pour laquelle le modèle a cessé de générer des tokens. Peut être `stop`, `length`, `tool_calls` ou `content_filter`.
    </ResponseField>

    <ResponseField name="logprobs" type="object | null">
      Informations de log-probabilité pour le choix.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="usage" type="object">
  Statistiques d'utilisation pour la requête de complétion.

  <Expandable title="propriétés">
    <ResponseField name="prompt_tokens" type="integer">
      Nombre de tokens dans le prompt.
    </ResponseField>

    <ResponseField name="completion_tokens" type="integer">
      Nombre de tokens dans la complétion générée.
    </ResponseField>

    <ResponseField name="total_tokens" type="integer">
      Nombre total de tokens utilisés dans la requête (prompt + complétion).
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="system_fingerprint" type="string | null">
  Cette empreinte représente la configuration backend avec laquelle le modèle s'exécute. Peut être utilisée avec le paramètre `seed` pour comprendre quand des modifications du backend ont été effectuées.
</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>
