> ## Documentation Index
> Fetch the complete documentation index at: https://veniceai-mintlify-d2fddb8a.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Réponses structurées

> Forcez les modèles de chat Venice à renvoyer du JSON conforme à votre schéma en utilisant response_format et JSON Schema pour une sortie fiable et facilement parsable.

Venice a désormais inclus les sorties structurées via le champ « response\_format » disponible dans l'API. Ce champ vous permet de générer des réponses à vos prompts qui suivent un format pré-défini spécifique. Avec cette nouvelle méthode, les modèles sont moins susceptibles d'halluciner des clés ou valeurs incorrectes dans la réponse, ce qui était plus fréquent lors de tentatives via la manipulation du prompt système ou via les appels de fonction.

Le champ « response\_format » pour les sorties structurées utilise le format de l'API OpenAI, et est décrit plus en détail dans le guide OpenAI [ici](https://platform.openai.com/docs/guides/structured-outputs). OpenAI a également publié un article d'introduction à l'utilisation des sorties structurées dans l'API spécifiquement [ici](https://openai.com/index/introducing-structured-outputs-in-the-api/). Comme il s'agit d'une fonctionnalité avancée, il y a quelques « points à surveiller » en bas de cette page qui doivent être suivis.

Cette fonctionnalité n'est pas nativement disponible pour tous les modèles. Veuillez consulter la section modèles [ici](https://docs.venice.ai/api-reference/endpoint/models/list?playground=open), et rechercher « supportsResponseSchema » pour les modèles applicables.

```json theme={null}
    {
      "id": "venice-uncensored",
      "type": "text",
      "object": "model",
      "created": 1726869022,
      "owned_by": "venice.ai",
      "model_spec": {
        "availableContextTokens": 32768,
        "capabilities": {
          "supportsFunctionCalling": true,
          "supportsResponseSchema": true,
          "supportsWebSearch": true
        },
```

### Comment utiliser les réponses structurées

Pour utiliser correctement « response\_format », vous pouvez définir votre schéma avec diverses « properties », représentant des catégories de sorties, chacune avec des types de données configurés individuellement. Ces objets peuvent être imbriqués pour créer des structures de sortie plus avancées.

Voici un exemple d'appel API utilisant response\_format pour expliquer le processus étape par étape de résolution d'une équation mathématique.

Vous pouvez voir que les propriétés ont été configurées pour exiger à la fois « steps » et « final\_answer » dans la réponse. Au sein de l'imbrication, la catégorie steps se compose à la fois d'une « explanation » et d'un « output », chacun sous forme de chaîne.

```json theme={null}
curl --request POST \
  --url https://api.venice.ai/api/v1/chat/completions \
  --header 'Authorization: Bearer <api-key>' \
  --header 'Content-Type: application/json' \
  --data '{
  "model": "venice-uncensored",
  "messages": [
    {
      "role": "system",
      "content": "You are a helpful math tutor."
    },
    {
      "role": "user",
      "content": "solve 8x + 31 = 2"
    }
  ],
  "response_format": {
    "type": "json_schema",
    "json_schema": {
      "name": "math_response",
      "strict": true,
      "schema": {
        "type": "object",
        "properties": {
          "steps": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "explanation": {
                  "type": "string"
                },
                "output": {
                  "type": "string"
                }
              },
              "required": ["explanation", "output"],
              "additionalProperties": false
            }
          },
          "final_answer": {
            "type": "string"
          }
        },
        "required": ["steps", "final_answer"],
        "additionalProperties": false
      }
    }
  }
}

```

Voici la réponse qui a été reçue du modèle. Vous pouvez voir que la structure a suivi les exigences en fournissant d'abord les « steps » avec l'« explanation » et l'« output » de chaque étape, puis la « final answer ».

```json theme={null}
{
  "steps": [
    {
      "explanation": "Subtract 31 from both sides to isolate the term with x.",
      "output": "8x + 31 - 31 = 2 - 31"
    },
    {
      "explanation": "This simplifies to 8x = -29.",
      "output": "8x = -29"
    },
    {
      "explanation": "Divide both sides by 8 to solve for x.",
      "output": "x = -29 / 8"
    }
  ],
  "final_answer": "x = -29 / 8"
}

```

Bien qu'il s'agisse d'un exemple simple, cela peut être extrapolé à des cas d'usage plus avancés comme : extraction de données, exercices de chaîne de pensée, génération d'UI, catégorisation de données et bien d'autres.

### Points à surveiller

Voici quelques exigences clés à garder à l'esprit lors de l'utilisation des sorties structurées via response\_format :

* Les requêtes initiales utilisant response\_format peuvent prendre plus de temps à générer une réponse. Les requêtes suivantes ne connaîtront pas la même latence que la requête initiale.

* Pour les requêtes plus volumineuses, le modèle peut échouer à se terminer si soit `max_tokens`, soit le timeout du modèle est atteint, ou si des limites de débit sont dépassées

* Un format de schéma incorrect entraînera des erreurs lors de la complétion, généralement dues à un timeout

* Bien que response\_format garantisse que le modèle produira une sortie d'une manière particulière, cela ne garantit pas que le modèle a fourni les informations correctes à l'intérieur. Le contenu est piloté par le prompt et la performance du modèle.

* Les sorties structurées via response\_format ne sont pas compatibles avec les appels de fonction parallèles

* Important : Tous les champs ou paramètres doivent inclure une balise `required`. Pour rendre un champ optionnel, vous devez ajouter une option `null` dans le `type` du champ, comme ceci `"type": ["string", "null"]`&#x20;

* Il est possible de rendre les champs optionnels en donnant des options `null` dans le champ required pour permettre une réponse vide.

* Important : `additionalProperties` doit être défini à false pour que response\_format fonctionne correctement

* Important : `strict` doit être défini à true pour que response\_format fonctionne correctement
