max_tokens, comporte une virgule finale, ou le contenu est encadré par un bloc de code Markdown. Côté application, il faut généralement écrire une logique de nouvelle tentative ou de correction manuelle pour y remédier.
La réparation de sortie structurée (Structured Output Repair) est une capacité au niveau de la clé, désactivée par défaut. Une fois activée, pour les requêtes non-streaming déclarant une sortie JSON structurée, lorsque le JSON renvoyé par le modèle présente des erreurs de format, la passerelle AIHubMix le répare automatiquement, avant le retour, en un JSON valide et analysable ; le code client n’a besoin d’aucune modification.
Cette option est désactivée par défaut ; lorsqu’elle n’est pas activée, toutes les réponses sont renvoyées telles quelles. L’option se configure indépendamment pour chaque clé et prend effet immédiatement après activation.
Accéder à la page de gestion des clés
Créez ou modifiez une clé, puis activez l’option « Réparation de sortie structurée » (Structured Output Repair).

1. Conditions de déclenchement
La réparation n’a lieu que lorsque toutes les conditions suivantes sont réunies :- La clé utilisée par la requête a activé « Réparation de sortie structurée ».
- La requête est non-streaming (
stream: truen’est pas défini). - La requête déclare une sortie JSON structurée (voir le tableau ci-dessous pour les champs de déclaration de chaque protocole).
- Le contenu textuel renvoyé par le modèle ne peut pas être analysé en JSON.
| Protocole | Point de terminaison | Champ de déclaration de sortie structurée |
|---|---|---|
| Chat Completions | /v1/chat/completions | response_format.type vaut json_object ou json_schema |
| Responses | /v1/responses | text.format.type vaut json_schema ou json_object |
| Claude Messages | /v1/messages | output_config.format.type vaut json_schema |
| Gemini | /gemini/v1beta/models/{model}:generateContent | generationConfig.responseMimeType vaut application/json, ou responseSchema est défini |
2. Erreurs de format réparables
Parenthèses / guillemets non fermés en raison d’une troncature de la sortie (par exemple lorsquefinish_reason vaut length) :
Avant
Après
Avant
Après
Avant
Après
Avant
Après
Avant
Après
Avant
Après
- La réparation se contente de compléter ou de normaliser la syntaxe JSON ; les valeurs numériques et le contenu des chaînes conservent leur texte d’origine, sans perte de précision ni réécriture.
- Le produit de la réparation doit être un objet ou un tableau JSON valide, et l’écart avec le texte d’origine doit rester dans une plage raisonnable ; si l’une de ces conditions n’est pas remplie, la réparation est abandonnée et le contenu d’origine est renvoyé tel quel.
3. Comment déterminer qu’une réponse a été réparée
Lorsqu’une réparation a lieu, deux signaux sont disponibles, l’un exploitable par programme, l’autre consultable :- En-tête de réponse
X-JSON-Repaired: true(cet en-tête est absent lorsqu’aucune réparation n’a eu lieu). - Note dans le journal d’appels : sur la page des journaux d’appels, la colonne des notes de la requête correspondante affiche
This request gateway automatically corrected the JSON format issue in the model output.
4. Exemple complet
Prenons l’exemple de la génération d’informations sur un produit : la requête utilisejson_schema pour déclarer une sortie structurée ; une fois l’option activée, même si la sortie du modèle présente les erreurs de format évoquées ci-dessus, le content obtenu peut être analysé directement :
max_tokens sur une valeur faible (par exemple 80) afin de tronquer la sortie : le finish_reason de la réponse vaut length, le content est un JSON valide après réparation, et l’en-tête de réponse porte X-JSON-Repaired: true.
5. Limites et précisions
- Réparation syntaxique : la conformité des noms et des types de champs à votre schéma doit toujours être validée côté application.
- Les paramètres d’appel d’outils ne sont pas concernés par la réparation : le JSON des paramètres de
tool_calls/function_calln’est pas réparé ; les paramètres d’outils doivent toujours être validés côté application avant exécution. - Les sorties à blocs de texte multiples ne sont pas réparées : lorsque la sortie du modèle contient plusieurs blocs de texte (par exemple lorsque Gemini renvoie plusieurs
parts), elle est renvoyée telle quelle. - Le contenu de raisonnement n’est pas affecté : les textes de raisonnement tels que
reasoning_contentou la partie « thought » de Gemini ne participent pas à la réparation.
FAQ
La réparation modifie-t-elle les valeurs numériques ou le texte du contenu renvoyé ? Non. La réparation se contente de compléter ou de normaliser la syntaxe JSON (fermeture des parenthèses manquantes, suppression des virgules finales, normalisation des guillemets, retrait des marqueurs de bloc de code) ; les valeurs numériques et le contenu des chaînes conservent le texte d’origine de la sortie du modèle. Activer l’option affecte-t-il les requêtes ordinaires ne déclarant pas de sortie structurée ? Non. Les requêtes ne déclarant pas de champ de sortie structurée tel queresponse_format, ainsi que toutes les requêtes en streaming, voient leur réponse renvoyée telle quelle.
La réparation entraîne-t-elle une facturation supplémentaire ou modifie-t-elle la consommation de tokens ?
Non. La consommation de tokens et la facturation sont calculées sur la sortie d’origine du modèle ; le processus de réparation ne génère aucun coût supplémentaire.
Le JSON réparé est-il forcément conforme au schéma que j’ai défini ?
La réparation garantit que le contenu peut être analysé en JSON ; la conformité des noms et des types de champs au schéma dépend de la sortie du modèle elle-même. Il est recommandé de conserver une validation du schéma côté application.