Collez un schéma JSON, choisissez la cible et générez l’extrait localement. La page indique les mots-clés écartés, vérifie si le mode strict d’OpenAI est applicable et n’envoie rien à un fournisseur.
Fonctionne localement dans votre navigateurLa page lit un schéma JSON et écrit la configuration attendue par chaque fournisseur pour une sortie structurée : un response_format OpenAI, une définition d’outil Anthropic, un generationConfig Gemini ou une interface TypeScript. La conversion est un parcours local de l’arbre du schéma : aucun fournisseur n’est contacté et aucune clé d’API n’intervient.
Les quatre cibles n’acceptant pas les mêmes mots-clés, la ligne d’état énumère ceux que la cible choisie ne peut pas reprendre, et l’extrait est écrit sans eux. Lisez cette ligne avant de coller l’extrait dans une requête : un $ref ou un default écarté change ce que le modèle peut renvoyer.
OpenAI reçoit un objet response_format avec un bloc json_schema ; strict n’est écrit à true que lorsque chaque objet du schéma fixe additionalProperties à false et liste toutes ses propriétés dans required, car c’est la forme qu’OpenAI accepte en mode strict. Sinon, l’extrait porte strict: false et un commentaire l’explique.
Anthropic reçoit un objet tool dont l’input_schema est le schéma converti, prêt pour le tableau tools. Gemini reçoit un responseSchema avec des types en majuscules, const transformé en enum à valeur unique et une union nullable convertie en nullable. TypeScript reçoit une interface dont les noms de propriétés correspondent exactement aux clés JSON : les clés qui ne sont pas des identifiants valides sont entre guillemets, les unions comme type: ["string","null"] sont conservées, et une racine qui n’est pas un objet devient un alias export type.
Les mots-clés de composition et de référence demandent un résolveur : $ref, $defs, anyOf, oneOf, allOf, not, if/then/else, patternProperties et prefixItems ne sont repris dans aucune cible. Les contraintes que les sorties OpenAI et Anthropic conservent, comme pattern, format, minimum ou maxLength, sont signalées pour Gemini, qui accepte un schéma plus restreint.
L’imbrication est suivie jusqu’à huit niveaux sous la racine ; au-delà, le schéma est remplacé par un schéma vide et la ligne d’état le signale. En TypeScript, les contraintes comme minLength ou pattern n’ont pas leur place : un type décrit une forme, il ne valide pas, elles ne font donc pas partie de l’interface.
Le nom du schéma est réduit aux lettres, chiffres, tirets et traits de soulignement ; un champ vide devient structured_response, les noms de plus de 64 caractères sont raccourcis pour les cibles fournisseur, et une interface TypeScript reçoit en plus un identifiant valide, un chiffre initial devenant _123report. Chaque fois que le texte a dû changer, la ligne d’état affiche le nom réellement utilisé.
Quand un passage ne peut pas produire d’extrait - entrée vide, JSON mal formé, tableau, ou objet sans type ni properties - la raison est indiquée, avec ligne et colonne pour les erreurs JSON, et le panneau de sortie est vidé, pour qu’un ancien extrait ne soit jamais pris pour le courant. Rien n’est téléversé : le schéma, le code généré et le nom restent dans le navigateur.