{
  "aboutHtml": "<p>Jev est le modèle phare de TypeSafe et le premier modèle de la nouvelle classe <strong>System One</strong>. Il ne rédige pas de texte, mais prend rapidement des décisions qu’un programme peut utiliser directement : vous fournissez un <strong>état</strong> (<code>state</code>) — du texte ou du JSON — et un ensemble de <strong>questions</strong>, et recevez des valeurs typées avec des probabilités calibrées.</p><p>Les modèles de langage écrivent des mots pour les humains ; selon TypeSafe, Jev est plus proche du code : la réponse a immédiatement la forme requise par le code, avec une grande vitesse et aucune valeur en dehors des options définies. Le modèle est conçu pour donner des réponses stables aux requêtes répétées.</p><h4>En quoi System One diffère d’un modèle de langage</h4><ul><li><strong>Il ne génère pas.</strong> Jev ne rédige pas de réponses à l’utilisateur, n’écrit pas de code et n’explique pas son raisonnement. Vous définissez les réponses possibles au moyen de l’un des trois types de questions.</li><li><strong>Il est entraîné à prendre des décisions calibrées.</strong> TypeSafe entraîne le modèle par RLCD (Reinforcement Learning for Calibrated Decisions) : les probabilités sont ajustées aux résultats réels et reflètent l’incertitude. Sur un grand nombre de réponses avec une probabilité de 0,8, environ 80% devraient être correctes. La calibration est une propriété d’un grand échantillon, et non une garantie d’exactitude d’une réponse particulière.</li><li><strong>L’objectif d’entraînement est différent.</strong> Les modèles de chat sont entraînés à plaire aux humains (RLHF), ce qui, selon les observations de TypeSafe, encourage la complaisance et les erreurs formulées avec assurance. L’un des coauteurs du RLHF, Diogo Almeida, est cofondateur de TypeSafe.</li></ul><p>Le nom fait référence au « Système 1 » du livre de Daniel Kahneman « Les deux vitesses de la pensée » : le jugement intuitif rapide s’oppose à la réflexion lente et délibérée du « Système 2 ». Jev est conçu pour les jugements rapides et ciblés.</p><h4>Trois types de questions</h4><p>Une question est un jugement sur l’état ; la réponse est une valeur que le code compare à un seuil, trie ou transmet à la suite du processus.</p><ol><li><strong>Choice — choisir une option.</strong> Le service auquel adresser une demande, la catégorie d’un produit, le langage d’un fragment de code. Les options forment un dictionnaire « option → description », avec jusqu’à 255 entrées. La réponse comprend le <code>choice</code> sélectionné, les <code>probabilities</code> de toutes les options (dont la somme est 1) et la confiance <code>confidence</code>. Si la liste risque de ne pas couvrir tous les cas, ajoutez « autre » ou « aucune des options ».</li><li><strong>Score — noter sur une échelle.</strong> La position sur une échelle ordonnée que vous décrivez : gravité d’une erreur, irritation du client, niveau de compétence. De 2 à 10 niveaux, du plus faible au plus élevé ; le modèle évalue chaque niveau séparément, sans voir son numéro ni ses voisins. La réponse comprend le <code>score</code> (la somme des numéros des niveaux multipliés par leurs probabilités, ce qui peut donner une valeur entre les niveaux), la <code>legend</code> décrivant les niveaux, les <code>probabilities</code> et la <code>confidence</code>.</li><li><strong>Noul — oui ou non.</strong> L’affirmation est-elle vraie ? La réponse <code>noul</code> est la probabilité du « oui », de 0 à 1 : près de 1, un « oui » assuré ; près de 0, un « non » assuré ; près de 0,5, le modèle hésite. Il n’y a pas de <code>confidence</code> distincte : un seul nombre décrit entièrement la réponse. Le paramètre facultatif <code>criteria</code> précise ce qu’il faut considérer comme « oui » ou « non ».</li></ol><p>Comment choisir : des options connues sans ordre — choice ; des degrés sur un spectre — score ; un simple « oui/non » où la probabilité elle-même compte — noul. Noul 0,5 signifie des chances égales de « oui » et de « non », et non un « niveau moyen » : le degré se mesure avec score. Entre deux types adaptés, choisissez celui sur lequel le code agit directement : choice pour les branches, score pour le seuil, noul pour <code>if</code>.</p><p>Les types peuvent être mélangés dans une même requête. La réponse est toujours limitée à vos options et ne dépend pas des autres questions : les questions peuvent être ajoutées ou retirées sans modifier les autres réponses.</p><h4>L’état</h4><p>L’état est ce que le modèle évalue : un message client, un segment de document, une entrée de base de données ou l’état de votre application.</p><ul><li><strong>Chaîne</strong> — lorsqu’il n’y a qu’un texte : message, article, extrait.</li><li><strong>Objet</strong> — champs nommés, entrées liées, état de l’application. TypeSafe recommande un objet pour la plupart des requêtes : chaque partie porte un nom clair.</li><li><strong>Tableau</strong> — une séquence de messages ou d’entrées.</li></ul><p>Préparez-le comme des documents destinés à des experts : réunissez les échanges, la commande et les règles de remboursement si la décision nécessite de les comparer. Placez le contenu dans l’état et les jugements dans les questions. Si une question concerne une partie de l’état, indiquez-y le chemin entre accents graves, par exemple <code>ticket.messages[0].text</code>.</p><h4>Comment poser les questions</h4><ul><li><strong>Un jugement rapide par question.</strong> Une bonne question est celle à laquelle une personne compétente disposant du contexte nécessaire répondrait en une seconde : « Le message exprime-t-il une urgence ? ». « Analyse le message et décide quoi faire » relève déjà d’un raisonnement lent et doit être décomposé en questions simples.</li><li><strong>La question entière dans <code>instructions</code>.</strong> La clé de la question, par exemple <code>refund_requested</code>, sert uniquement à votre code et n’est pas transmise au modèle.</li><li><strong>Toutes les questions sur un même état dans une seule requête.</strong> Le modèle les évalue en parallèle : selon TypeSafe, les questions supplémentaires augmentent très peu le temps de réponse et ne coûtent que leurs propres tokens. Une question posée « au cas où » coûte presque rien ; le code décidera lui-même des réponses à utiliser.</li><li><strong>Un jugement complexe en plusieurs parties.</strong> Au lieu d’« évalue la candidature de la start-up », posez des questions distinctes sur la taille du marché, la faisabilité technique et les différences avec les concurrents, puis calculez le résultat dans le code avec des poids. Si les priorités changent, modifiez les poids plutôt que de réécrire la question.</li><li><strong>Les questions dépendantes dans une deuxième requête.</strong> Les réponses d’une même requête ne servent pas de contexte les unes aux autres. Une deuxième requête n’est nécessaire que si elle ne peut pas être construite sans la première réponse : il faut charger des données ou choisir les options de la question suivante.</li><li><strong>Une question longue sous forme d’objet.</strong> <code>instructions</code> et <code>criteria</code> sont généralement des chaînes, mais peuvent être un objet ou un tableau : la question dans un champ, les données dans les autres. Cela permet de comparer un CV aux entrées d’une base avec une seule question.</li></ul><h4>La confiance</h4><p>Pour choice et score, <code>confidence</code>, de 0 à 1, indique à quel point la probabilité est concentrée sur une réponse : 1 signifie qu’elle est entièrement concentrée sur une option, 0 qu’elle est répartie également entre toutes. Pour score, un niveau voisin réduit moins la confiance qu’un niveau éloigné. Pour noul, la confiance est la valeur elle-même : plus elle s’éloigne de 0,5, plus la réponse est ferme.</p><p>TypeSafe recommande trois plages :</p><ol><li><strong>Confiance élevée</strong> — agir automatiquement.</li><li><strong>Confiance moyenne</strong> — agir avec prudence, par exemple demander une confirmation à l’utilisateur.</li><li><strong>Confiance faible</strong> — confier le cas à une personne, préciser la requête ou utiliser une solution de repli, par exemple un modèle plus puissant avec raisonnement.</li></ol><p>Plus une erreur coûte cher, plus le seuil doit être strict : plus élevé pour les actions irréversibles que pour la lecture. La réponse indique quoi choisir, et la confiance s’il faut agir. Ajustez les seuils sur vos propres données, en comparant la confiance à la précision.</p><h4>Comment construire un système autour de Jev</h4><p>Jev vise les programmes où le code pilote le processus et où le modèle répond à des questions sémantiques ciblées, plutôt que les agents qui choisissent eux-mêmes l’étape suivante et peuvent dévier à chaque cycle. Les huit étapes de conception selon TypeSafe :</p><ol><li>Faites en code tout ce qui peut l’être, de façon fiable et peu coûteuse.</li><li>Ne placez dans l’état que ce dont les questions actuelles ont besoin ; tirez les faits récents de votre base de connaissances, et non de la mémoire du modèle.</li><li>Structurez l’état avec du JSON imbriqué et indiquez dans la question le chemin vers le champ nécessaire entre accents graves si cela réduit l’ambiguïté.</li><li>Posez les questions les plus ciblées et les plus concrètes possible : selon TypeSafe, c’est peut-être la règle principale ; une question large cache plusieurs jugements derrière une seule réponse.</li><li>Structurez les questions : gardez la question elle-même courte ; placez les explications, les exemples et les valeurs de votre base dans des champs voisins de l’objet <code>instructions</code> ou <code>criteria</code>, plutôt que dans une longue chaîne unique.</li><li>Posez de nombreuses questions indépendantes sur un même état dans une seule requête pour obtenir davantage de valeur par dollar.</li><li>Le code combine les réponses : avec des règles, une somme pondérée ou comme caractéristiques d’un modèle classique d’apprentissage automatique.</li><li>Créez des branches selon la confiance : les cas incertains vont à une personne ou à un modèle avec raisonnement.</li></ol><p>Jev n’est ni un chat ni un modèle de complétion de code ; il ne peut pas remplacer un modèle de langage dans un agent de programmation. En revanche, un agent peut écrire pour vous du code qui appelle Jev lorsqu’une réponse rapide et calibrée est nécessaire.</p><h4>Les usages</h4><ul><li><strong>Automatisation en arrière-plan</strong> — des décisions exécutées un million de fois sans présence humaine.</li><li><strong>Temps réel</strong> — selon TypeSafe, la plupart des requêtes prennent environ 100 ms : assez pour le traitement à la volée et les interfaces.</li><li><strong>Données massives</strong> — recherche dans d’immenses corpus, annotation des journaux de travail des agents, caractéristiques pour les prévisions.</li><li><strong>Vérification d’autres modèles</strong> — requêtes, extractions, raisonnements et appels d’outils : contournements des limites, erreurs de citation, inventions.</li><li><strong>Recherche et classement</strong> — pertinence d’une paire « requête — candidat », reclassement, sélection du contexte.</li><li><strong>Orientation selon l’intention</strong> — ce que souhaite l’utilisateur et le traitement nécessaire : logique simple, modèle spécialisé ou personne ; le sujet, la difficulté et le risque déterminent le modèle de langage auquel confier la requête.</li><li><strong>Vérifications de protection</strong> — entrées, sorties et appels d’outils du modèle de langage : instructions injectées, infractions aux règles, fuites de données personnelles.</li><li><strong>Support</strong> — sujet et intention de la demande, urgence, irritation, risque de départ, demande de remboursement, file d’attente.</li><li><strong>Modération</strong> — selon les règles de votre plateforme : toxicité, harcèlement, spam, fraude, conseils dangereux, données personnelles ; selon la gravité et la confiance, autoriser, avertir, vérifier ou bloquer.</li><li><strong>Secteurs</strong> — sinistres, enquêtes financières et KYC, contrats et publicité, fiches produits, recrutement, prospects, jeux, risques, prévision de la demande, graphes de connaissances, revues scientifiques, vérifications sémantiques du code en CI.</li></ul><h4>Les caractéristiques</h4><ul><li><strong><code>jev-latest</code></strong> — alias de la dernière version stable, actuellement Jev 1.13 ; la version ayant répondu figure dans le champ <code>model</code>, par exemple <code>jev-1.13.0</code>. Avec une nouvelle version, l’alias pointe vers elle, et les réponses peuvent changer sans modification de votre part : surveillez ce champ si vos seuils sont ajustés à une version.</li><li><strong>Contexte</strong> — 64K tokens par requête : l’état et toutes les questions réunis ; l’état avec la question la plus longue, jusqu’à 32K. Le modèle lit l’état une fois et évalue toutes les questions en parallèle par rapport à lui.</li><li><strong>Entrée</strong> — uniquement du texte : une chaîne, un objet JSON ou un tableau de textes. Les images, l’audio et la vidéo ne sont pas encore pris en charge ; transformez-les d’abord en texte.</li><li><strong>Langue</strong> — la langue principale de l’entraînement est l’anglais, et la précision y est actuellement la plus élevée. Le modèle accepte d’autres langues, dont le chinois, le japonais et le coréen, mais avec une précision moindre : vérifiez sur vos propres données.</li><li><strong>Tarifs et facturation dans Ailoot API</strong> — les conditions dépendent de la méthode choisie et sont indiquées dans sa fiche.</li><li><strong>Personnalisation</strong> — Jev n’est pas affiné sur les données du client : vos contenus vont dans <code>state</code>, et les règles du domaine dans <code>instructions</code> et <code>criteria</code>.</li><li><strong>Données</strong> — TypeSafe indique que Jev n’est pas entraîné sur les requêtes et les réponses des clients.</li></ul><h4>Les faiblesses connues de Jev 1.13</h4><p>TypeSafe énumère ouvertement les faiblesses de la version actuelle et promet d’en corriger beaucoup dans les suivantes. Le modèle est rapide, calibré et exerce un bon jugement de bon sens, mais :</p><ol><li><strong>Il lit littéralement.</strong> Il répond à la question écrite, et non à celle sous-entendue : réserves, négations et conditions implicites sont comprises littéralement. Écrivez la condition précise et les cas limites dans <code>criteria</code> ; décomposez une interprétation inévitable en deux questions littérales.</li><li><strong>Ce n’est pas une calculatrice.</strong> Le comptage des caractères, des répétitions et des éléments d’une liste n’est pas fiable, et l’erreur augmente avec la taille : comptez dans le code, avec une question par candidat. Le modèle comprend moins bien les couleurs en hex ou RGB que leurs noms. <code>score</code> convient à un seuil, mais pas à un nombre exact entre les niveaux.</li><li><strong>Dates et heures.</strong> Déterminer quelle date précède une autre, l’intervalle entre elles ou l’appartenance d’une date à une période n’est pas fiable, surtout avec des formats mélangés et des dates relatives. Extrayez les parties de la date avec choice (avec une option « non indiqué »), et comparez-les dans le code.</li><li><strong>Formulations indirectes.</strong> Les doubles négations et les questions sur la propriété d’une propriété réduisent la précision. Écrivez directement et nommez les parties de l’état.</li><li><strong>Contenu superflu dans l’état.</strong> Les textes étrangers à la tâche réduisent la précision. Filtrez dans le code ou, si ce n’est pas possible, écartez le contenu non pertinent par des questions noul.</li><li><strong>Texte hostile.</strong> Le modèle ne s’attend pas par défaut à des pièges dans l’état : une instruction injectée ou un texte contestant sa propre classification peut déplacer la réponse. Écrivez des critères précis et vérifiez les cas limites avant le lancement.</li><li><strong>Contradictions.</strong> Si <code>instructions</code> et <code>criteria</code> demandent des choses différentes — par exemple si, pour noul, « oui » est décrit comme « non » — la précision baisse. Les critères prolongent la question.</li><li><strong>Ordre des options.</strong> Le modèle penche parfois vers la première option choice. Réordonnez les options et vérifiez que la réponse ne change pas.</li><li><strong>Génération.</strong> Jev n’est pas entraîné à écrire du texte. Pour extraire des données, trouvez les candidats avec une expression régulière ou un modèle génératif, puis laissez Jev choisir le bon avec choice.</li></ol>",
  "aboutText": "Jev est le modèle phare de TypeSafe et le premier modèle de la nouvelle classe **System One**. Il ne rédige pas de texte, mais prend rapidement des décisions qu’un programme peut utiliser directement : vous fournissez un **état** (`state`) — du texte ou du JSON — et un ensemble de **questions**, et recevez des valeurs typées avec des probabilités calibrées.\n\nLes modèles de langage écrivent des mots pour les humains ; selon TypeSafe, Jev est plus proche du code : la réponse a immédiatement la forme requise par le code, avec une grande vitesse et aucune valeur en dehors des options définies. Le modèle est conçu pour donner des réponses stables aux requêtes répétées.\n\n### En quoi System One diffère d’un modèle de langage\n\n- **Il ne génère pas.** Jev ne rédige pas de réponses à l’utilisateur, n’écrit pas de code et n’explique pas son raisonnement. Vous définissez les réponses possibles au moyen de l’un des trois types de questions.\n- **Il est entraîné à prendre des décisions calibrées.** TypeSafe entraîne le modèle par RLCD (Reinforcement Learning for Calibrated Decisions) : les probabilités sont ajustées aux résultats réels et reflètent l’incertitude. Sur un grand nombre de réponses avec une probabilité de 0,8, environ 80% devraient être correctes. La calibration est une propriété d’un grand échantillon, et non une garantie d’exactitude d’une réponse particulière.\n- **L’objectif d’entraînement est différent.** Les modèles de chat sont entraînés à plaire aux humains (RLHF), ce qui, selon les observations de TypeSafe, encourage la complaisance et les erreurs formulées avec assurance. L’un des coauteurs du RLHF, Diogo Almeida, est cofondateur de TypeSafe.\n\nLe nom fait référence au « Système 1 » du livre de Daniel Kahneman « Les deux vitesses de la pensée » : le jugement intuitif rapide s’oppose à la réflexion lente et délibérée du « Système 2 ». Jev est conçu pour les jugements rapides et ciblés.\n\n### Trois types de questions\n\nUne question est un jugement sur l’état ; la réponse est une valeur que le code compare à un seuil, trie ou transmet à la suite du processus.\n\n1. **Choice — choisir une option.** Le service auquel adresser une demande, la catégorie d’un produit, le langage d’un fragment de code. Les options forment un dictionnaire « option → description », avec jusqu’à 255 entrées. La réponse comprend le `choice` sélectionné, les `probabilities` de toutes les options (dont la somme est 1) et la confiance `confidence`. Si la liste risque de ne pas couvrir tous les cas, ajoutez « autre » ou « aucune des options ».\n2. **Score — noter sur une échelle.** La position sur une échelle ordonnée que vous décrivez : gravité d’une erreur, irritation du client, niveau de compétence. De 2 à 10 niveaux, du plus faible au plus élevé ; le modèle évalue chaque niveau séparément, sans voir son numéro ni ses voisins. La réponse comprend le `score` (la somme des numéros des niveaux multipliés par leurs probabilités, ce qui peut donner une valeur entre les niveaux), la `legend` décrivant les niveaux, les `probabilities` et la `confidence`.\n3. **Noul — oui ou non.** L’affirmation est-elle vraie ? La réponse `noul` est la probabilité du « oui », de 0 à 1 : près de 1, un « oui » assuré ; près de 0, un « non » assuré ; près de 0,5, le modèle hésite. Il n’y a pas de `confidence` distincte : un seul nombre décrit entièrement la réponse. Le paramètre facultatif `criteria` précise ce qu’il faut considérer comme « oui » ou « non ».\n\nComment choisir : des options connues sans ordre — choice ; des degrés sur un spectre — score ; un simple « oui/non » où la probabilité elle-même compte — noul. Noul 0,5 signifie des chances égales de « oui » et de « non », et non un « niveau moyen » : le degré se mesure avec score. Entre deux types adaptés, choisissez celui sur lequel le code agit directement : choice pour les branches, score pour le seuil, noul pour `if`.\n\nLes types peuvent être mélangés dans une même requête. La réponse est toujours limitée à vos options et ne dépend pas des autres questions : les questions peuvent être ajoutées ou retirées sans modifier les autres réponses.\n\n### L’état\n\nL’état est ce que le modèle évalue : un message client, un segment de document, une entrée de base de données ou l’état de votre application.\n\n- **Chaîne** — lorsqu’il n’y a qu’un texte : message, article, extrait.\n- **Objet** — champs nommés, entrées liées, état de l’application. TypeSafe recommande un objet pour la plupart des requêtes : chaque partie porte un nom clair.\n- **Tableau** — une séquence de messages ou d’entrées.\n\nPréparez-le comme des documents destinés à des experts : réunissez les échanges, la commande et les règles de remboursement si la décision nécessite de les comparer. Placez le contenu dans l’état et les jugements dans les questions. Si une question concerne une partie de l’état, indiquez-y le chemin entre accents graves, par exemple `ticket.messages[0].text`.\n\n### Comment poser les questions\n\n- **Un jugement rapide par question.** Une bonne question est celle à laquelle une personne compétente disposant du contexte nécessaire répondrait en une seconde : « Le message exprime-t-il une urgence ? ». « Analyse le message et décide quoi faire » relève déjà d’un raisonnement lent et doit être décomposé en questions simples.\n- **La question entière dans `instructions`.** La clé de la question, par exemple `refund_requested`, sert uniquement à votre code et n’est pas transmise au modèle.\n- **Toutes les questions sur un même état dans une seule requête.** Le modèle les évalue en parallèle : selon TypeSafe, les questions supplémentaires augmentent très peu le temps de réponse et ne coûtent que leurs propres tokens. Une question posée « au cas où » coûte presque rien ; le code décidera lui-même des réponses à utiliser.\n- **Un jugement complexe en plusieurs parties.** Au lieu d’« évalue la candidature de la start-up », posez des questions distinctes sur la taille du marché, la faisabilité technique et les différences avec les concurrents, puis calculez le résultat dans le code avec des poids. Si les priorités changent, modifiez les poids plutôt que de réécrire la question.\n- **Les questions dépendantes dans une deuxième requête.** Les réponses d’une même requête ne servent pas de contexte les unes aux autres. Une deuxième requête n’est nécessaire que si elle ne peut pas être construite sans la première réponse : il faut charger des données ou choisir les options de la question suivante.\n- **Une question longue sous forme d’objet.** `instructions` et `criteria` sont généralement des chaînes, mais peuvent être un objet ou un tableau : la question dans un champ, les données dans les autres. Cela permet de comparer un CV aux entrées d’une base avec une seule question.\n\n### La confiance\n\nPour choice et score, `confidence`, de 0 à 1, indique à quel point la probabilité est concentrée sur une réponse : 1 signifie qu’elle est entièrement concentrée sur une option, 0 qu’elle est répartie également entre toutes. Pour score, un niveau voisin réduit moins la confiance qu’un niveau éloigné. Pour noul, la confiance est la valeur elle-même : plus elle s’éloigne de 0,5, plus la réponse est ferme.\n\nTypeSafe recommande trois plages :\n\n1. **Confiance élevée** — agir automatiquement.\n2. **Confiance moyenne** — agir avec prudence, par exemple demander une confirmation à l’utilisateur.\n3. **Confiance faible** — confier le cas à une personne, préciser la requête ou utiliser une solution de repli, par exemple un modèle plus puissant avec raisonnement.\n\nPlus une erreur coûte cher, plus le seuil doit être strict : plus élevé pour les actions irréversibles que pour la lecture. La réponse indique quoi choisir, et la confiance s’il faut agir. Ajustez les seuils sur vos propres données, en comparant la confiance à la précision.\n\n### Comment construire un système autour de Jev\n\nJev vise les programmes où le code pilote le processus et où le modèle répond à des questions sémantiques ciblées, plutôt que les agents qui choisissent eux-mêmes l’étape suivante et peuvent dévier à chaque cycle. Les huit étapes de conception selon TypeSafe :\n\n1. Faites en code tout ce qui peut l’être, de façon fiable et peu coûteuse.\n2. Ne placez dans l’état que ce dont les questions actuelles ont besoin ; tirez les faits récents de votre base de connaissances, et non de la mémoire du modèle.\n3. Structurez l’état avec du JSON imbriqué et indiquez dans la question le chemin vers le champ nécessaire entre accents graves si cela réduit l’ambiguïté.\n4. Posez les questions les plus ciblées et les plus concrètes possible : selon TypeSafe, c’est peut-être la règle principale ; une question large cache plusieurs jugements derrière une seule réponse.\n5. Structurez les questions : gardez la question elle-même courte ; placez les explications, les exemples et les valeurs de votre base dans des champs voisins de l’objet `instructions` ou `criteria`, plutôt que dans une longue chaîne unique.\n6. Posez de nombreuses questions indépendantes sur un même état dans une seule requête pour obtenir davantage de valeur par dollar.\n7. Le code combine les réponses : avec des règles, une somme pondérée ou comme caractéristiques d’un modèle classique d’apprentissage automatique.\n8. Créez des branches selon la confiance : les cas incertains vont à une personne ou à un modèle avec raisonnement.\n\nJev n’est ni un chat ni un modèle de complétion de code ; il ne peut pas remplacer un modèle de langage dans un agent de programmation. En revanche, un agent peut écrire pour vous du code qui appelle Jev lorsqu’une réponse rapide et calibrée est nécessaire.\n\n### Les usages\n\n- **Automatisation en arrière-plan** — des décisions exécutées un million de fois sans présence humaine.\n- **Temps réel** — selon TypeSafe, la plupart des requêtes prennent environ 100 ms : assez pour le traitement à la volée et les interfaces.\n- **Données massives** — recherche dans d’immenses corpus, annotation des journaux de travail des agents, caractéristiques pour les prévisions.\n- **Vérification d’autres modèles** — requêtes, extractions, raisonnements et appels d’outils : contournements des limites, erreurs de citation, inventions.\n- **Recherche et classement** — pertinence d’une paire « requête — candidat », reclassement, sélection du contexte.\n- **Orientation selon l’intention** — ce que souhaite l’utilisateur et le traitement nécessaire : logique simple, modèle spécialisé ou personne ; le sujet, la difficulté et le risque déterminent le modèle de langage auquel confier la requête.\n- **Vérifications de protection** — entrées, sorties et appels d’outils du modèle de langage : instructions injectées, infractions aux règles, fuites de données personnelles.\n- **Support** — sujet et intention de la demande, urgence, irritation, risque de départ, demande de remboursement, file d’attente.\n- **Modération** — selon les règles de votre plateforme : toxicité, harcèlement, spam, fraude, conseils dangereux, données personnelles ; selon la gravité et la confiance, autoriser, avertir, vérifier ou bloquer.\n- **Secteurs** — sinistres, enquêtes financières et KYC, contrats et publicité, fiches produits, recrutement, prospects, jeux, risques, prévision de la demande, graphes de connaissances, revues scientifiques, vérifications sémantiques du code en CI.\n\n### Les caractéristiques\n\n- **`jev-latest`** — alias de la dernière version stable, actuellement Jev 1.13 ; la version ayant répondu figure dans le champ `model`, par exemple `jev-1.13.0`. Avec une nouvelle version, l’alias pointe vers elle, et les réponses peuvent changer sans modification de votre part : surveillez ce champ si vos seuils sont ajustés à une version.\n- **Contexte** — 64K tokens par requête : l’état et toutes les questions réunis ; l’état avec la question la plus longue, jusqu’à 32K. Le modèle lit l’état une fois et évalue toutes les questions en parallèle par rapport à lui.\n- **Entrée** — uniquement du texte : une chaîne, un objet JSON ou un tableau de textes. Les images, l’audio et la vidéo ne sont pas encore pris en charge ; transformez-les d’abord en texte.\n- **Langue** — la langue principale de l’entraînement est l’anglais, et la précision y est actuellement la plus élevée. Le modèle accepte d’autres langues, dont le chinois, le japonais et le coréen, mais avec une précision moindre : vérifiez sur vos propres données.\n- **Tarifs et facturation dans Ailoot API** — les conditions dépendent de la méthode choisie et sont indiquées dans sa fiche.\n- **Personnalisation** — Jev n’est pas affiné sur les données du client : vos contenus vont dans `state`, et les règles du domaine dans `instructions` et `criteria`.\n- **Données** — TypeSafe indique que Jev n’est pas entraîné sur les requêtes et les réponses des clients.\n\n### Les faiblesses connues de Jev 1.13\n\nTypeSafe énumère ouvertement les faiblesses de la version actuelle et promet d’en corriger beaucoup dans les suivantes. Le modèle est rapide, calibré et exerce un bon jugement de bon sens, mais :\n\n1. **Il lit littéralement.** Il répond à la question écrite, et non à celle sous-entendue : réserves, négations et conditions implicites sont comprises littéralement. Écrivez la condition précise et les cas limites dans `criteria` ; décomposez une interprétation inévitable en deux questions littérales.\n2. **Ce n’est pas une calculatrice.** Le comptage des caractères, des répétitions et des éléments d’une liste n’est pas fiable, et l’erreur augmente avec la taille : comptez dans le code, avec une question par candidat. Le modèle comprend moins bien les couleurs en hex ou RGB que leurs noms. `score` convient à un seuil, mais pas à un nombre exact entre les niveaux.\n3. **Dates et heures.** Déterminer quelle date précède une autre, l’intervalle entre elles ou l’appartenance d’une date à une période n’est pas fiable, surtout avec des formats mélangés et des dates relatives. Extrayez les parties de la date avec choice (avec une option « non indiqué »), et comparez-les dans le code.\n4. **Formulations indirectes.** Les doubles négations et les questions sur la propriété d’une propriété réduisent la précision. Écrivez directement et nommez les parties de l’état.\n5. **Contenu superflu dans l’état.** Les textes étrangers à la tâche réduisent la précision. Filtrez dans le code ou, si ce n’est pas possible, écartez le contenu non pertinent par des questions noul.\n6. **Texte hostile.** Le modèle ne s’attend pas par défaut à des pièges dans l’état : une instruction injectée ou un texte contestant sa propre classification peut déplacer la réponse. Écrivez des critères précis et vérifiez les cas limites avant le lancement.\n7. **Contradictions.** Si `instructions` et `criteria` demandent des choses différentes — par exemple si, pour noul, « oui » est décrit comme « non » — la précision baisse. Les critères prolongent la question.\n8. **Ordre des options.** Le modèle penche parfois vers la première option choice. Réordonnez les options et vérifiez que la réponse ne change pas.\n9. **Génération.** Jev n’est pas entraîné à écrire du texte. Pour extraire des données, trouvez les candidats avec une expression régulière ou un modèle génératif, puis laissez Jev choisir le bon avec choice.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "8817cd23ed4cc5c53cc59daf6e88b656e34797e530230ed2e5aa01cb70a4ae7d",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "fr-be",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">TS</span><h2 id=\"sheet-title\">jev-latest</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Fermer\">×</button></div><div class=\"idline\"><span>TypeSafe /</span><code>jev-latest</code><button type=\"button\" id=\"copy-id\">Copier l’ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Rubriques de la fiche modèle\"><button type=\"button\" data-card-jump=\"overview\">Premiers pas</button><button type=\"button\" data-card-jump=\"methods\">Entrées et méthodes</button><button type=\"button\" data-card-jump=\"pricing\">Tarifs</button><button type=\"button\" data-card-jump=\"examples\">Exemples</button><button type=\"button\" data-card-jump=\"results\">Résultats</button><button type=\"button\" data-card-jump=\"aliases\">Alias</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Méthodes API\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Core|systemone|/v1/systemone|jev-latest\">System One</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Premiers pas</h3><p class=\"mdesc-full\">Un modèle de décision de TypeSafe : il ne rédige pas de texte, mais répond à des questions typées sur du texte ou du JSON — choix d’une option, note sur une échelle ou « oui/non » avec des probabilités. Il convient au routage, au tri des demandes, à la modération et au scoring ; toutes les questions d’une requête sont évaluées en parallèle.</p><dl class=\"card-io\" data-card-io><div><dt>Entrées acceptées</dt><dd>Texte</dd></div><div><dt>Résultats</dt><dd>structured</dd></div></dl><details class=\"card-about\"><summary>À propos du modèle</summary><p class=\"note-s\" data-model-method-boundary>Cette description présente les capacités du modèle. Les entrées, sorties et options disponibles dans Ailoot pour la méthode sélectionnée figurent ci-dessous.</p><div class=\"mabout\" id=\"m-about\"><p>Jev est le modèle phare de TypeSafe et le premier modèle de la nouvelle classe <strong>System One</strong>. Il ne rédige pas de texte, mais prend rapidement des décisions qu’un programme peut utiliser directement : vous fournissez un <strong>état</strong> (<code>state</code>) — du texte ou du JSON — et un ensemble de <strong>questions</strong>, et recevez des valeurs typées avec des probabilités calibrées.</p><p>Les modèles de langage écrivent des mots pour les humains ; selon TypeSafe, Jev est plus proche du code : la réponse a immédiatement la forme requise par le code, avec une grande vitesse et aucune valeur en dehors des options définies. Le modèle est conçu pour donner des réponses stables aux requêtes répétées.</p><h4>En quoi System One diffère d’un modèle de langage</h4><ul><li><strong>Il ne génère pas.</strong> Jev ne rédige pas de réponses à l’utilisateur, n’écrit pas de code et n’explique pas son raisonnement. Vous définissez les réponses possibles au moyen de l’un des trois types de questions.</li><li><strong>Il est entraîné à prendre des décisions calibrées.</strong> TypeSafe entraîne le modèle par RLCD (Reinforcement Learning for Calibrated Decisions) : les probabilités sont ajustées aux résultats réels et reflètent l’incertitude. Sur un grand nombre de réponses avec une probabilité de 0,8, environ 80% devraient être correctes. La calibration est une propriété d’un grand échantillon, et non une garantie d’exactitude d’une réponse particulière.</li><li><strong>L’objectif d’entraînement est différent.</strong> Les modèles de chat sont entraînés à plaire aux humains (RLHF), ce qui, selon les observations de TypeSafe, encourage la complaisance et les erreurs formulées avec assurance. L’un des coauteurs du RLHF, Diogo Almeida, est cofondateur de TypeSafe.</li></ul><p>Le nom fait référence au « Système 1 » du livre de Daniel Kahneman « Les deux vitesses de la pensée » : le jugement intuitif rapide s’oppose à la réflexion lente et délibérée du « Système 2 ». Jev est conçu pour les jugements rapides et ciblés.</p><h4>Trois types de questions</h4><p>Une question est un jugement sur l’état ; la réponse est une valeur que le code compare à un seuil, trie ou transmet à la suite du processus.</p><ol><li><strong>Choice — choisir une option.</strong> Le service auquel adresser une demande, la catégorie d’un produit, le langage d’un fragment de code. Les options forment un dictionnaire « option → description », avec jusqu’à 255 entrées. La réponse comprend le <code>choice</code> sélectionné, les <code>probabilities</code> de toutes les options (dont la somme est 1) et la confiance <code>confidence</code>. Si la liste risque de ne pas couvrir tous les cas, ajoutez « autre » ou « aucune des options ».</li><li><strong>Score — noter sur une échelle.</strong> La position sur une échelle ordonnée que vous décrivez : gravité d’une erreur, irritation du client, niveau de compétence. De 2 à 10 niveaux, du plus faible au plus élevé ; le modèle évalue chaque niveau séparément, sans voir son numéro ni ses voisins. La réponse comprend le <code>score</code> (la somme des numéros des niveaux multipliés par leurs probabilités, ce qui peut donner une valeur entre les niveaux), la <code>legend</code> décrivant les niveaux, les <code>probabilities</code> et la <code>confidence</code>.</li><li><strong>Noul — oui ou non.</strong> L’affirmation est-elle vraie ? La réponse <code>noul</code> est la probabilité du « oui », de 0 à 1 : près de 1, un « oui » assuré ; près de 0, un « non » assuré ; près de 0,5, le modèle hésite. Il n’y a pas de <code>confidence</code> distincte : un seul nombre décrit entièrement la réponse. Le paramètre facultatif <code>criteria</code> précise ce qu’il faut considérer comme « oui » ou « non ».</li></ol><p>Comment choisir : des options connues sans ordre — choice ; des degrés sur un spectre — score ; un simple « oui/non » où la probabilité elle-même compte — noul. Noul 0,5 signifie des chances égales de « oui » et de « non », et non un « niveau moyen » : le degré se mesure avec score. Entre deux types adaptés, choisissez celui sur lequel le code agit directement : choice pour les branches, score pour le seuil, noul pour <code>if</code>.</p><p>Les types peuvent être mélangés dans une même requête. La réponse est toujours limitée à vos options et ne dépend pas des autres questions : les questions peuvent être ajoutées ou retirées sans modifier les autres réponses.</p><h4>L’état</h4><p>L’état est ce que le modèle évalue : un message client, un segment de document, une entrée de base de données ou l’état de votre application.</p><ul><li><strong>Chaîne</strong> — lorsqu’il n’y a qu’un texte : message, article, extrait.</li><li><strong>Objet</strong> — champs nommés, entrées liées, état de l’application. TypeSafe recommande un objet pour la plupart des requêtes : chaque partie porte un nom clair.</li><li><strong>Tableau</strong> — une séquence de messages ou d’entrées.</li></ul><p>Préparez-le comme des documents destinés à des experts : réunissez les échanges, la commande et les règles de remboursement si la décision nécessite de les comparer. Placez le contenu dans l’état et les jugements dans les questions. Si une question concerne une partie de l’état, indiquez-y le chemin entre accents graves, par exemple <code>ticket.messages[0].text</code>.</p><h4>Comment poser les questions</h4><ul><li><strong>Un jugement rapide par question.</strong> Une bonne question est celle à laquelle une personne compétente disposant du contexte nécessaire répondrait en une seconde : « Le message exprime-t-il une urgence ? ». « Analyse le message et décide quoi faire » relève déjà d’un raisonnement lent et doit être décomposé en questions simples.</li><li><strong>La question entière dans <code>instructions</code>.</strong> La clé de la question, par exemple <code>refund_requested</code>, sert uniquement à votre code et n’est pas transmise au modèle.</li><li><strong>Toutes les questions sur un même état dans une seule requête.</strong> Le modèle les évalue en parallèle : selon TypeSafe, les questions supplémentaires augmentent très peu le temps de réponse et ne coûtent que leurs propres tokens. Une question posée « au cas où » coûte presque rien ; le code décidera lui-même des réponses à utiliser.</li><li><strong>Un jugement complexe en plusieurs parties.</strong> Au lieu d’« évalue la candidature de la start-up », posez des questions distinctes sur la taille du marché, la faisabilité technique et les différences avec les concurrents, puis calculez le résultat dans le code avec des poids. Si les priorités changent, modifiez les poids plutôt que de réécrire la question.</li><li><strong>Les questions dépendantes dans une deuxième requête.</strong> Les réponses d’une même requête ne servent pas de contexte les unes aux autres. Une deuxième requête n’est nécessaire que si elle ne peut pas être construite sans la première réponse : il faut charger des données ou choisir les options de la question suivante.</li><li><strong>Une question longue sous forme d’objet.</strong> <code>instructions</code> et <code>criteria</code> sont généralement des chaînes, mais peuvent être un objet ou un tableau : la question dans un champ, les données dans les autres. Cela permet de comparer un CV aux entrées d’une base avec une seule question.</li></ul><h4>La confiance</h4><p>Pour choice et score, <code>confidence</code>, de 0 à 1, indique à quel point la probabilité est concentrée sur une réponse : 1 signifie qu’elle est entièrement concentrée sur une option, 0 qu’elle est répartie également entre toutes. Pour score, un niveau voisin réduit moins la confiance qu’un niveau éloigné. Pour noul, la confiance est la valeur elle-même : plus elle s’éloigne de 0,5, plus la réponse est ferme.</p><p>TypeSafe recommande trois plages :</p><ol><li><strong>Confiance élevée</strong> — agir automatiquement.</li><li><strong>Confiance moyenne</strong> — agir avec prudence, par exemple demander une confirmation à l’utilisateur.</li><li><strong>Confiance faible</strong> — confier le cas à une personne, préciser la requête ou utiliser une solution de repli, par exemple un modèle plus puissant avec raisonnement.</li></ol><p>Plus une erreur coûte cher, plus le seuil doit être strict : plus élevé pour les actions irréversibles que pour la lecture. La réponse indique quoi choisir, et la confiance s’il faut agir. Ajustez les seuils sur vos propres données, en comparant la confiance à la précision.</p><h4>Comment construire un système autour de Jev</h4><p>Jev vise les programmes où le code pilote le processus et où le modèle répond à des questions sémantiques ciblées, plutôt que les agents qui choisissent eux-mêmes l’étape suivante et peuvent dévier à chaque cycle. Les huit étapes de conception selon TypeSafe :</p><ol><li>Faites en code tout ce qui peut l’être, de façon fiable et peu coûteuse.</li><li>Ne placez dans l’état que ce dont les questions actuelles ont besoin ; tirez les faits récents de votre base de connaissances, et non de la mémoire du modèle.</li><li>Structurez l’état avec du JSON imbriqué et indiquez dans la question le chemin vers le champ nécessaire entre accents graves si cela réduit l’ambiguïté.</li><li>Posez les questions les plus ciblées et les plus concrètes possible : selon TypeSafe, c’est peut-être la règle principale ; une question large cache plusieurs jugements derrière une seule réponse.</li><li>Structurez les questions : gardez la question elle-même courte ; placez les explications, les exemples et les valeurs de votre base dans des champs voisins de l’objet <code>instructions</code> ou <code>criteria</code>, plutôt que dans une longue chaîne unique.</li><li>Posez de nombreuses questions indépendantes sur un même état dans une seule requête pour obtenir davantage de valeur par dollar.</li><li>Le code combine les réponses : avec des règles, une somme pondérée ou comme caractéristiques d’un modèle classique d’apprentissage automatique.</li><li>Créez des branches selon la confiance : les cas incertains vont à une personne ou à un modèle avec raisonnement.</li></ol><p>Jev n’est ni un chat ni un modèle de complétion de code ; il ne peut pas remplacer un modèle de langage dans un agent de programmation. En revanche, un agent peut écrire pour vous du code qui appelle Jev lorsqu’une réponse rapide et calibrée est nécessaire.</p><h4>Les usages</h4><ul><li><strong>Automatisation en arrière-plan</strong> — des décisions exécutées un million de fois sans présence humaine.</li><li><strong>Temps réel</strong> — selon TypeSafe, la plupart des requêtes prennent environ 100 ms : assez pour le traitement à la volée et les interfaces.</li><li><strong>Données massives</strong> — recherche dans d’immenses corpus, annotation des journaux de travail des agents, caractéristiques pour les prévisions.</li><li><strong>Vérification d’autres modèles</strong> — requêtes, extractions, raisonnements et appels d’outils : contournements des limites, erreurs de citation, inventions.</li><li><strong>Recherche et classement</strong> — pertinence d’une paire « requête — candidat », reclassement, sélection du contexte.</li><li><strong>Orientation selon l’intention</strong> — ce que souhaite l’utilisateur et le traitement nécessaire : logique simple, modèle spécialisé ou personne ; le sujet, la difficulté et le risque déterminent le modèle de langage auquel confier la requête.</li><li><strong>Vérifications de protection</strong> — entrées, sorties et appels d’outils du modèle de langage : instructions injectées, infractions aux règles, fuites de données personnelles.</li><li><strong>Support</strong> — sujet et intention de la demande, urgence, irritation, risque de départ, demande de remboursement, file d’attente.</li><li><strong>Modération</strong> — selon les règles de votre plateforme : toxicité, harcèlement, spam, fraude, conseils dangereux, données personnelles ; selon la gravité et la confiance, autoriser, avertir, vérifier ou bloquer.</li><li><strong>Secteurs</strong> — sinistres, enquêtes financières et KYC, contrats et publicité, fiches produits, recrutement, prospects, jeux, risques, prévision de la demande, graphes de connaissances, revues scientifiques, vérifications sémantiques du code en CI.</li></ul><h4>Les caractéristiques</h4><ul><li><strong><code>jev-latest</code></strong> — alias de la dernière version stable, actuellement Jev 1.13 ; la version ayant répondu figure dans le champ <code>model</code>, par exemple <code>jev-1.13.0</code>. Avec une nouvelle version, l’alias pointe vers elle, et les réponses peuvent changer sans modification de votre part : surveillez ce champ si vos seuils sont ajustés à une version.</li><li><strong>Contexte</strong> — 64K tokens par requête : l’état et toutes les questions réunis ; l’état avec la question la plus longue, jusqu’à 32K. Le modèle lit l’état une fois et évalue toutes les questions en parallèle par rapport à lui.</li><li><strong>Entrée</strong> — uniquement du texte : une chaîne, un objet JSON ou un tableau de textes. Les images, l’audio et la vidéo ne sont pas encore pris en charge ; transformez-les d’abord en texte.</li><li><strong>Langue</strong> — la langue principale de l’entraînement est l’anglais, et la précision y est actuellement la plus élevée. Le modèle accepte d’autres langues, dont le chinois, le japonais et le coréen, mais avec une précision moindre : vérifiez sur vos propres données.</li><li><strong>Tarifs et facturation dans Ailoot API</strong> — les conditions dépendent de la méthode choisie et sont indiquées dans sa fiche.</li><li><strong>Personnalisation</strong> — Jev n’est pas affiné sur les données du client : vos contenus vont dans <code>state</code>, et les règles du domaine dans <code>instructions</code> et <code>criteria</code>.</li><li><strong>Données</strong> — TypeSafe indique que Jev n’est pas entraîné sur les requêtes et les réponses des clients.</li></ul><h4>Les faiblesses connues de Jev 1.13</h4><p>TypeSafe énumère ouvertement les faiblesses de la version actuelle et promet d’en corriger beaucoup dans les suivantes. Le modèle est rapide, calibré et exerce un bon jugement de bon sens, mais :</p><ol><li><strong>Il lit littéralement.</strong> Il répond à la question écrite, et non à celle sous-entendue : réserves, négations et conditions implicites sont comprises littéralement. Écrivez la condition précise et les cas limites dans <code>criteria</code> ; décomposez une interprétation inévitable en deux questions littérales.</li><li><strong>Ce n’est pas une calculatrice.</strong> Le comptage des caractères, des répétitions et des éléments d’une liste n’est pas fiable, et l’erreur augmente avec la taille : comptez dans le code, avec une question par candidat. Le modèle comprend moins bien les couleurs en hex ou RGB que leurs noms. <code>score</code> convient à un seuil, mais pas à un nombre exact entre les niveaux.</li><li><strong>Dates et heures.</strong> Déterminer quelle date précède une autre, l’intervalle entre elles ou l’appartenance d’une date à une période n’est pas fiable, surtout avec des formats mélangés et des dates relatives. Extrayez les parties de la date avec choice (avec une option « non indiqué »), et comparez-les dans le code.</li><li><strong>Formulations indirectes.</strong> Les doubles négations et les questions sur la propriété d’une propriété réduisent la précision. Écrivez directement et nommez les parties de l’état.</li><li><strong>Contenu superflu dans l’état.</strong> Les textes étrangers à la tâche réduisent la précision. Filtrez dans le code ou, si ce n’est pas possible, écartez le contenu non pertinent par des questions noul.</li><li><strong>Texte hostile.</strong> Le modèle ne s’attend pas par défaut à des pièges dans l’état : une instruction injectée ou un texte contestant sa propre classification peut déplacer la réponse. Écrivez des critères précis et vérifiez les cas limites avant le lancement.</li><li><strong>Contradictions.</strong> Si <code>instructions</code> et <code>criteria</code> demandent des choses différentes — par exemple si, pour noul, « oui » est décrit comme « non » — la précision baisse. Les critères prolongent la question.</li><li><strong>Ordre des options.</strong> Le modèle penche parfois vers la première option choice. Réordonnez les options et vérifiez que la réponse ne change pas.</li><li><strong>Génération.</strong> Jev n’est pas entraîné à écrire du texte. Pour extraire des données, trouvez les candidats avec une expression régulière ou un modèle génératif, puis laissez Jev choisir le bon avec choice.</li></ol></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Disponible dans Ailoot · entrées et méthodes</h3><details class=\"card-method\" open><summary><b>Ailoot · System One</b> <code>POST /v1/systemone</code></summary><dl class=\"method-capabilities\"><div><dt>Entrée</dt><dd><code>text</code></dd></div><div><dt>Sortie</dt><dd><code>structured</code></dd></div><div><dt>Contexte</dt><dd>64 000 tokens</dd></div><div><dt>Format de sortie</dt><dd>json</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Champ</th><th>Type</th><th>Exigence</th><th>Valeurs et limites</th><th>Par défaut</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Obligatoire</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span><div>jev-latest</div></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">state</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string|object|array</code></td><td data-cell-label=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Obligatoire</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">questions</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>object</code></td><td data-cell-label=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Obligatoire</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span><div>Nombre minimal de champs de l’objet: 1</div></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">questions.&lt;id&gt;.type</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Obligatoire</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span><div>noul, choice, score</div></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">questions.&lt;id&gt;.instructions</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string|object|array|null</code></td><td data-cell-label=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Facultatif</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">questions.&lt;id&gt;.criteria</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>object|array|null</code></td><td data-cell-label=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Facultatif</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span><div>Conditions: noul : descriptions true/false facultatives et pouvant valoir null ; choice : objet de critères ; score : tableau de critères non vide</div></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">stream</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>boolean|null</code></td><td data-cell-label=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Facultatif</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span><div>false, null</div></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Combinaisons d’éléments d’entrée</summary><p class=\"note-s\"><b>noul</b> · Obligatoire : state, questions.&lt;id&gt;.type=noul</p><p class=\"note-s\"><b>choice</b> · Obligatoire : state, questions.&lt;id&gt;.type=choice, criteria object</p><p class=\"note-s\"><b>score</b> · Obligatoire : state, questions.&lt;id&gt;.type=score, nonemptycriteriaarray</p></details><details class=\"note-s\" data-method-contract><summary>Paramètres et cycle de vie de la méthode</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Paramètre</th><th>Contrat</th></tr></thead><tbody><tr><th data-cell-label=\"Paramètre\" scope=\"row\"><span class=\"card-cell-label\">Paramètre</span><code>material_types</code></th><td data-cell-label=\"Contrat\"><span class=\"card-cell-label\">Contrat</span>text</td></tr><tr><th data-cell-label=\"Paramètre\" scope=\"row\"><span class=\"card-cell-label\">Paramètre</span><code>required</code></th><td data-cell-label=\"Contrat\"><span class=\"card-cell-label\">Contrat</span>model, state, questions</td></tr><tr><th data-cell-label=\"Paramètre\" scope=\"row\"><span class=\"card-cell-label\">Paramètre</span><code>optional_controls</code></th><td data-cell-label=\"Contrat\"><span class=\"card-cell-label\">Contrat</span>null</td></tr><tr><th data-cell-label=\"Paramètre\" scope=\"row\"><span class=\"card-cell-label\">Paramètre</span><code>content_type</code></th><td data-cell-label=\"Contrat\"><span class=\"card-cell-label\">Contrat</span>application/json</td></tr></tbody></table></div><p>Cycle de vie : <code>exact retained published method</code></p><p class=\"note-s\">Les structures des méthodes et les identifiants sont exacts ; la capacité du fournisseur est distincte de l’admission.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Tarifs</h3><h4>Tarifs des méthodes Ailoot</h4><section class=\"meth\" data-route=\"Core\"><header><b><span class=\"alias\">Ailoot</span> System One</b><code>POST /v1/systemone</code></header><dl><div><dt>Entrée</dt><dd>≈0,000084 USD <em>/ 1K</em></dd></div><div><dt>Sortie</dt><dd>0,00 USD <em>/ 1K</em></dd></div></dl></section><p class=\"note-s\">Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. <a href=\"/docs/fr-be/billing/reserve/\">Fonctionnement de la réservation et du débit →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Exemples de requêtes</h3><h4>Ailoot · System One</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Variantes du code\"><button class=\"cg-tab\" id=\"model-code-665-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-665-panel-0\" aria-selected=\"true\" tabindex=\"0\">Exemple de classification</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Copier le code\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-665-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-665-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_TEXT_FILE:?Set your actual UTF-8 customer message}&quot;\nexport AILOOT_TEXT_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;jev-latest&quot;, &quot;state&quot;: &quot;&quot;, &quot;questions&quot;: {&quot;is_urgent&quot;: {&quot;type&quot;: &quot;noul&quot;, &quot;instructions&quot;: &quot;Does the supplied customer message express urgency?&quot;}}}&#39;)\nf=Path(os.environ[&quot;AILOOT_TEXT_FILE&quot;])\nif not f.is_file():raise SystemExit(&quot;Choose your actual UTF-8 source material&quot;)\ntext=f.read_text(encoding=&quot;utf-8&quot;)\nif not text.strip():raise SystemExit(&quot;Source material must contain text&quot;)\np[&quot;state&quot;]=text\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/systemone \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(&quot;result.json&quot;).read_text()),ensure_ascii=False,indent=2))\nPY_RESULT\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Recevoir et enregistrer les résultats</h3><h4>Ailoot · System One</h4><p class=\"note-s\">json</p><div class=\"card-result-process\" data-all-results><h5>Conserver tous les résultats terminés</h5><p class=\"note-s\">Conservez chaque réponse, fichier et partie de contenu renvoyés dans leur intégralité.</p><p class=\"note-s\">Conservez chaque réponse avec l’ID de question fourni, sa probabilité et sa légende ; la formule de confiance utilisant n nécessite n&gt;1, sans affirmer que l’API impose un nombre minimum de choix.</p></div><details class=\"card-about\" data-output-fields><summary>Champs de la réponse</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Champ</th><th>Type</th></tr></thead><tbody><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">answers.&lt;id&gt;.type</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string</td></tr><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">answers.&lt;id&gt;.noul</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>number</td></tr><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">answers.&lt;id&gt;.choice</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string</td></tr><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">answers.&lt;id&gt;.score</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>number</td></tr><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">answers.&lt;id&gt;.confidence</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>number</td></tr><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">answers.&lt;id&gt;.probabilities</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>object</td></tr><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">answers.&lt;id&gt;.legend</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>object</td></tr><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">usage</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>object</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Erreurs et étapes suivantes</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Réponse</th><th>Condition</th><th>Étape suivante</th></tr></thead><tbody><tr><th data-cell-label=\"Réponse\" scope=\"row\"><span class=\"card-cell-label\">Réponse</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>Champs obligatoires, représentation des contenus ou valeur de paramètre non valides</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span>Corrigez les champs indiqués avant une nouvelle requête de création.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Alias</h3><h4>Alias du modèle</h4><p class=\"note-s\"><span data-model-alias-route=\"Core\"><b>Ailoot</b> <a href=\"#m=jev-latest&amp;route=Core&amp;caller=jev-latest&amp;fmt=systemone\"><code>jev-latest</code></a></span></p><h4>Alias des chemins de méthode</h4><p class=\"note-s\">Utilisez les chemins de méthode indiqués ci-dessus.</p><h4>ID d’appel associés</h4><p class=\"note-s\"><a href=\"#m=jev-latest&amp;route=Core&amp;caller=jev-latest&amp;fmt=systemone\"><code>jev-latest</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "jev-latest",
        "fmt": "systemone",
        "http": "POST",
        "path": "/v1/systemone",
        "request_model_id": "jev-latest",
        "route_label": "Core"
      },
      "method_key": "Core|systemone|/v1/systemone|jev-latest",
      "ordinal": 0,
      "rawMethod": {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": null,
        "contract": {
          "data": {
            "all_results": "Retain every answer by its supplied question ID, probability and legend; confidenceformulausingnrequiresn>1withoutassertinganAPIminchoicesrule.",
            "errors": [
              {
                "code": null,
                "condition": "Champs obligatoires, représentation des contenus ou valeur de paramètre non valides",
                "http_status": 400,
                "recovery": "Corrigez les champs indiqués avant une nouvelle requête de création.",
                "type": "invalid_request_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "mode": "exact retained published method"
            },
            "material_combinations": [
              {
                "mode": "noul",
                "required": [
                  "state",
                  "questions.<id>.type=noul"
                ]
              },
              {
                "mode": "choice",
                "required": [
                  "state",
                  "questions.<id>.type=choice",
                  "criteria object"
                ]
              },
              {
                "mode": "score",
                "required": [
                  "state",
                  "questions.<id>.type=score",
                  "nonemptycriteriaarray"
                ]
              }
            ],
            "operation_modes": [
              "noul",
              "choice",
              "score"
            ],
            "outputs": {
              "all_results": "Conservez chaque réponse avec l’ID de question fourni, sa probabilité et sa légende ; la formule de confiance utilisant n nécessite n>1, sans affirmer que l’API impose un nombre minimum de choix.",
              "family": "structured",
              "fields": [
                {
                  "description": null,
                  "name": "answers.<id>.type",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "answers.<id>.noul",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "answers.<id>.choice",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "answers.<id>.score",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "answers.<id>.confidence",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "answers.<id>.probabilities",
                  "type": "object"
                },
                {
                  "description": null,
                  "name": "answers.<id>.legend",
                  "type": "object"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "json"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "jev-latest"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "state",
                "required": true,
                "type": "string|object|array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "min_properties": 1,
                "name": "questions",
                "required": true,
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "noul",
                  "choice",
                  "score"
                ],
                "enum_known": true,
                "name": "questions.<id>.type",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "questions.<id>.instructions",
                "required": false,
                "type": "string|object|array|null"
              },
              {
                "availability": "source_interface",
                "conditions": "noul : descriptions true/false facultatives et pouvant valoir null ; choice : objet de critères ; score : tableau de critères non vide",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "questions.<id>.criteria",
                "required": false,
                "type": "object|array|null"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  false,
                  null
                ],
                "enum_known": true,
                "name": "stream",
                "required": false,
                "type": "boolean|null"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "stream=true",
              "duplicateandcase-variedcanonicalkeys"
            ]
          },
          "hints": [
            "Les structures des méthodes et les identifiants sont exacts ; la capacité du fournisseur est distincte de l’admission."
          ],
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": [
              "model",
              "state",
              "questions"
            ]
          },
          "lifecycle": {
            "mode": "exact retained published method"
          },
          "method": {
            "http": "POST",
            "path": "/v1/systemone"
          },
          "operation_modes": [
            "systemone"
          ],
          "output": {
            "family": [
              "structured"
            ],
            "format": "structured decisions JSON",
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": 64000,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 customer message}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"jev-latest\", \"state\": \"\", \"questions\": {\"is_urgent\": {\"type\": \"noul\", \"instructions\": \"Does the supplied customer message express urgency?\"}}}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"state\"]=text\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/systemone \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"result.json\").read_text()),ensure_ascii=False,indent=2))\nPY_RESULT\n",
            "label": "Classify your actual customer message",
            "language": "bash"
          }
        ],
        "family": "systemone",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "systemone",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": 0.084,
        "input": [
          "text"
        ],
        "label": "System One",
        "max_out": 0,
        "max_tool_calls": null,
        "out": 0,
        "output": [
          "structured"
        ],
        "path": "/v1/systemone",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 0.084,
                "amount_unit": "usd_per_million_tokens",
                "key": "in",
                "label": "Input",
                "side": "in"
              },
              {
                "amount": 0,
                "amount_unit": "usd_per_million_tokens",
                "key": "out",
                "label": "Output",
                "side": "out"
              }
            ]
          }
        ],
        "request_model_id": "jev-latest",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "token",
        "units": []
      }
    }
  ],
  "model_id": "jev-latest",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "fe5dc134fdd3c2988c106f13004b0ca4a4577df5780e3c410d783c944d12ee2e",
    "input_html_sha256": "1ddabe365975f0d2f6b5d88d585d35d7e063179ebd6c7cb7b8cac72688d849c2",
    "private_audit_sha256": "76a5a66fbd2c66ffaefdd2505805b6a52dcdb74b4ab5d13f0bbe3b8f4a7b56da",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/fr-be/jev-latest/",
    "description": "Un modèle de décision de TypeSafe : il ne rédige pas de texte, mais répond à des questions typées sur du texte ou du JSON — choix d’une option, note sur une échelle ou « oui/non » avec des probabilités. Il convient au routage, au tri des demandes, à la modération et au scoring ; toutes les questions d’une requête sont évaluées en parallèle.",
    "locale": "fr-be",
    "md_url": "https://ailoot.ai/models/fr-be/jev-latest/index.md",
    "title": "jev-latest — Ailoot",
    "url": "https://ailoot.ai/models/fr-be/jev-latest/"
  },
  "rawModel": {
    "about": "Jev est le modèle phare de TypeSafe et le premier modèle de la nouvelle classe **System One**. Il ne rédige pas de texte, mais prend rapidement des décisions qu’un programme peut utiliser directement : vous fournissez un **état** (`state`) — du texte ou du JSON — et un ensemble de **questions**, et recevez des valeurs typées avec des probabilités calibrées.\n\nLes modèles de langage écrivent des mots pour les humains ; selon TypeSafe, Jev est plus proche du code : la réponse a immédiatement la forme requise par le code, avec une grande vitesse et aucune valeur en dehors des options définies. Le modèle est conçu pour donner des réponses stables aux requêtes répétées.\n\n### En quoi System One diffère d’un modèle de langage\n\n- **Il ne génère pas.** Jev ne rédige pas de réponses à l’utilisateur, n’écrit pas de code et n’explique pas son raisonnement. Vous définissez les réponses possibles au moyen de l’un des trois types de questions.\n- **Il est entraîné à prendre des décisions calibrées.** TypeSafe entraîne le modèle par RLCD (Reinforcement Learning for Calibrated Decisions) : les probabilités sont ajustées aux résultats réels et reflètent l’incertitude. Sur un grand nombre de réponses avec une probabilité de 0,8, environ 80% devraient être correctes. La calibration est une propriété d’un grand échantillon, et non une garantie d’exactitude d’une réponse particulière.\n- **L’objectif d’entraînement est différent.** Les modèles de chat sont entraînés à plaire aux humains (RLHF), ce qui, selon les observations de TypeSafe, encourage la complaisance et les erreurs formulées avec assurance. L’un des coauteurs du RLHF, Diogo Almeida, est cofondateur de TypeSafe.\n\nLe nom fait référence au « Système 1 » du livre de Daniel Kahneman « Les deux vitesses de la pensée » : le jugement intuitif rapide s’oppose à la réflexion lente et délibérée du « Système 2 ». Jev est conçu pour les jugements rapides et ciblés.\n\n### Trois types de questions\n\nUne question est un jugement sur l’état ; la réponse est une valeur que le code compare à un seuil, trie ou transmet à la suite du processus.\n\n1. **Choice — choisir une option.** Le service auquel adresser une demande, la catégorie d’un produit, le langage d’un fragment de code. Les options forment un dictionnaire « option → description », avec jusqu’à 255 entrées. La réponse comprend le `choice` sélectionné, les `probabilities` de toutes les options (dont la somme est 1) et la confiance `confidence`. Si la liste risque de ne pas couvrir tous les cas, ajoutez « autre » ou « aucune des options ».\n2. **Score — noter sur une échelle.** La position sur une échelle ordonnée que vous décrivez : gravité d’une erreur, irritation du client, niveau de compétence. De 2 à 10 niveaux, du plus faible au plus élevé ; le modèle évalue chaque niveau séparément, sans voir son numéro ni ses voisins. La réponse comprend le `score` (la somme des numéros des niveaux multipliés par leurs probabilités, ce qui peut donner une valeur entre les niveaux), la `legend` décrivant les niveaux, les `probabilities` et la `confidence`.\n3. **Noul — oui ou non.** L’affirmation est-elle vraie ? La réponse `noul` est la probabilité du « oui », de 0 à 1 : près de 1, un « oui » assuré ; près de 0, un « non » assuré ; près de 0,5, le modèle hésite. Il n’y a pas de `confidence` distincte : un seul nombre décrit entièrement la réponse. Le paramètre facultatif `criteria` précise ce qu’il faut considérer comme « oui » ou « non ».\n\nComment choisir : des options connues sans ordre — choice ; des degrés sur un spectre — score ; un simple « oui/non » où la probabilité elle-même compte — noul. Noul 0,5 signifie des chances égales de « oui » et de « non », et non un « niveau moyen » : le degré se mesure avec score. Entre deux types adaptés, choisissez celui sur lequel le code agit directement : choice pour les branches, score pour le seuil, noul pour `if`.\n\nLes types peuvent être mélangés dans une même requête. La réponse est toujours limitée à vos options et ne dépend pas des autres questions : les questions peuvent être ajoutées ou retirées sans modifier les autres réponses.\n\n### L’état\n\nL’état est ce que le modèle évalue : un message client, un segment de document, une entrée de base de données ou l’état de votre application.\n\n- **Chaîne** — lorsqu’il n’y a qu’un texte : message, article, extrait.\n- **Objet** — champs nommés, entrées liées, état de l’application. TypeSafe recommande un objet pour la plupart des requêtes : chaque partie porte un nom clair.\n- **Tableau** — une séquence de messages ou d’entrées.\n\nPréparez-le comme des documents destinés à des experts : réunissez les échanges, la commande et les règles de remboursement si la décision nécessite de les comparer. Placez le contenu dans l’état et les jugements dans les questions. Si une question concerne une partie de l’état, indiquez-y le chemin entre accents graves, par exemple `ticket.messages[0].text`.\n\n### Comment poser les questions\n\n- **Un jugement rapide par question.** Une bonne question est celle à laquelle une personne compétente disposant du contexte nécessaire répondrait en une seconde : « Le message exprime-t-il une urgence ? ». « Analyse le message et décide quoi faire » relève déjà d’un raisonnement lent et doit être décomposé en questions simples.\n- **La question entière dans `instructions`.** La clé de la question, par exemple `refund_requested`, sert uniquement à votre code et n’est pas transmise au modèle.\n- **Toutes les questions sur un même état dans une seule requête.** Le modèle les évalue en parallèle : selon TypeSafe, les questions supplémentaires augmentent très peu le temps de réponse et ne coûtent que leurs propres tokens. Une question posée « au cas où » coûte presque rien ; le code décidera lui-même des réponses à utiliser.\n- **Un jugement complexe en plusieurs parties.** Au lieu d’« évalue la candidature de la start-up », posez des questions distinctes sur la taille du marché, la faisabilité technique et les différences avec les concurrents, puis calculez le résultat dans le code avec des poids. Si les priorités changent, modifiez les poids plutôt que de réécrire la question.\n- **Les questions dépendantes dans une deuxième requête.** Les réponses d’une même requête ne servent pas de contexte les unes aux autres. Une deuxième requête n’est nécessaire que si elle ne peut pas être construite sans la première réponse : il faut charger des données ou choisir les options de la question suivante.\n- **Une question longue sous forme d’objet.** `instructions` et `criteria` sont généralement des chaînes, mais peuvent être un objet ou un tableau : la question dans un champ, les données dans les autres. Cela permet de comparer un CV aux entrées d’une base avec une seule question.\n\n### La confiance\n\nPour choice et score, `confidence`, de 0 à 1, indique à quel point la probabilité est concentrée sur une réponse : 1 signifie qu’elle est entièrement concentrée sur une option, 0 qu’elle est répartie également entre toutes. Pour score, un niveau voisin réduit moins la confiance qu’un niveau éloigné. Pour noul, la confiance est la valeur elle-même : plus elle s’éloigne de 0,5, plus la réponse est ferme.\n\nTypeSafe recommande trois plages :\n\n1. **Confiance élevée** — agir automatiquement.\n2. **Confiance moyenne** — agir avec prudence, par exemple demander une confirmation à l’utilisateur.\n3. **Confiance faible** — confier le cas à une personne, préciser la requête ou utiliser une solution de repli, par exemple un modèle plus puissant avec raisonnement.\n\nPlus une erreur coûte cher, plus le seuil doit être strict : plus élevé pour les actions irréversibles que pour la lecture. La réponse indique quoi choisir, et la confiance s’il faut agir. Ajustez les seuils sur vos propres données, en comparant la confiance à la précision.\n\n### Comment construire un système autour de Jev\n\nJev vise les programmes où le code pilote le processus et où le modèle répond à des questions sémantiques ciblées, plutôt que les agents qui choisissent eux-mêmes l’étape suivante et peuvent dévier à chaque cycle. Les huit étapes de conception selon TypeSafe :\n\n1. Faites en code tout ce qui peut l’être, de façon fiable et peu coûteuse.\n2. Ne placez dans l’état que ce dont les questions actuelles ont besoin ; tirez les faits récents de votre base de connaissances, et non de la mémoire du modèle.\n3. Structurez l’état avec du JSON imbriqué et indiquez dans la question le chemin vers le champ nécessaire entre accents graves si cela réduit l’ambiguïté.\n4. Posez les questions les plus ciblées et les plus concrètes possible : selon TypeSafe, c’est peut-être la règle principale ; une question large cache plusieurs jugements derrière une seule réponse.\n5. Structurez les questions : gardez la question elle-même courte ; placez les explications, les exemples et les valeurs de votre base dans des champs voisins de l’objet `instructions` ou `criteria`, plutôt que dans une longue chaîne unique.\n6. Posez de nombreuses questions indépendantes sur un même état dans une seule requête pour obtenir davantage de valeur par dollar.\n7. Le code combine les réponses : avec des règles, une somme pondérée ou comme caractéristiques d’un modèle classique d’apprentissage automatique.\n8. Créez des branches selon la confiance : les cas incertains vont à une personne ou à un modèle avec raisonnement.\n\nJev n’est ni un chat ni un modèle de complétion de code ; il ne peut pas remplacer un modèle de langage dans un agent de programmation. En revanche, un agent peut écrire pour vous du code qui appelle Jev lorsqu’une réponse rapide et calibrée est nécessaire.\n\n### Les usages\n\n- **Automatisation en arrière-plan** — des décisions exécutées un million de fois sans présence humaine.\n- **Temps réel** — selon TypeSafe, la plupart des requêtes prennent environ 100 ms : assez pour le traitement à la volée et les interfaces.\n- **Données massives** — recherche dans d’immenses corpus, annotation des journaux de travail des agents, caractéristiques pour les prévisions.\n- **Vérification d’autres modèles** — requêtes, extractions, raisonnements et appels d’outils : contournements des limites, erreurs de citation, inventions.\n- **Recherche et classement** — pertinence d’une paire « requête — candidat », reclassement, sélection du contexte.\n- **Orientation selon l’intention** — ce que souhaite l’utilisateur et le traitement nécessaire : logique simple, modèle spécialisé ou personne ; le sujet, la difficulté et le risque déterminent le modèle de langage auquel confier la requête.\n- **Vérifications de protection** — entrées, sorties et appels d’outils du modèle de langage : instructions injectées, infractions aux règles, fuites de données personnelles.\n- **Support** — sujet et intention de la demande, urgence, irritation, risque de départ, demande de remboursement, file d’attente.\n- **Modération** — selon les règles de votre plateforme : toxicité, harcèlement, spam, fraude, conseils dangereux, données personnelles ; selon la gravité et la confiance, autoriser, avertir, vérifier ou bloquer.\n- **Secteurs** — sinistres, enquêtes financières et KYC, contrats et publicité, fiches produits, recrutement, prospects, jeux, risques, prévision de la demande, graphes de connaissances, revues scientifiques, vérifications sémantiques du code en CI.\n\n### Les caractéristiques\n\n- **`jev-latest`** — alias de la dernière version stable, actuellement Jev 1.13 ; la version ayant répondu figure dans le champ `model`, par exemple `jev-1.13.0`. Avec une nouvelle version, l’alias pointe vers elle, et les réponses peuvent changer sans modification de votre part : surveillez ce champ si vos seuils sont ajustés à une version.\n- **Contexte** — 64K tokens par requête : l’état et toutes les questions réunis ; l’état avec la question la plus longue, jusqu’à 32K. Le modèle lit l’état une fois et évalue toutes les questions en parallèle par rapport à lui.\n- **Entrée** — uniquement du texte : une chaîne, un objet JSON ou un tableau de textes. Les images, l’audio et la vidéo ne sont pas encore pris en charge ; transformez-les d’abord en texte.\n- **Langue** — la langue principale de l’entraînement est l’anglais, et la précision y est actuellement la plus élevée. Le modèle accepte d’autres langues, dont le chinois, le japonais et le coréen, mais avec une précision moindre : vérifiez sur vos propres données.\n- **Tarifs et facturation dans Ailoot API** — les conditions dépendent de la méthode choisie et sont indiquées dans sa fiche.\n- **Personnalisation** — Jev n’est pas affiné sur les données du client : vos contenus vont dans `state`, et les règles du domaine dans `instructions` et `criteria`.\n- **Données** — TypeSafe indique que Jev n’est pas entraîné sur les requêtes et les réponses des clients.\n\n### Les faiblesses connues de Jev 1.13\n\nTypeSafe énumère ouvertement les faiblesses de la version actuelle et promet d’en corriger beaucoup dans les suivantes. Le modèle est rapide, calibré et exerce un bon jugement de bon sens, mais :\n\n1. **Il lit littéralement.** Il répond à la question écrite, et non à celle sous-entendue : réserves, négations et conditions implicites sont comprises littéralement. Écrivez la condition précise et les cas limites dans `criteria` ; décomposez une interprétation inévitable en deux questions littérales.\n2. **Ce n’est pas une calculatrice.** Le comptage des caractères, des répétitions et des éléments d’une liste n’est pas fiable, et l’erreur augmente avec la taille : comptez dans le code, avec une question par candidat. Le modèle comprend moins bien les couleurs en hex ou RGB que leurs noms. `score` convient à un seuil, mais pas à un nombre exact entre les niveaux.\n3. **Dates et heures.** Déterminer quelle date précède une autre, l’intervalle entre elles ou l’appartenance d’une date à une période n’est pas fiable, surtout avec des formats mélangés et des dates relatives. Extrayez les parties de la date avec choice (avec une option « non indiqué »), et comparez-les dans le code.\n4. **Formulations indirectes.** Les doubles négations et les questions sur la propriété d’une propriété réduisent la précision. Écrivez directement et nommez les parties de l’état.\n5. **Contenu superflu dans l’état.** Les textes étrangers à la tâche réduisent la précision. Filtrez dans le code ou, si ce n’est pas possible, écartez le contenu non pertinent par des questions noul.\n6. **Texte hostile.** Le modèle ne s’attend pas par défaut à des pièges dans l’état : une instruction injectée ou un texte contestant sa propre classification peut déplacer la réponse. Écrivez des critères précis et vérifiez les cas limites avant le lancement.\n7. **Contradictions.** Si `instructions` et `criteria` demandent des choses différentes — par exemple si, pour noul, « oui » est décrit comme « non » — la précision baisse. Les critères prolongent la question.\n8. **Ordre des options.** Le modèle penche parfois vers la première option choice. Réordonnez les options et vérifiez que la réponse ne change pas.\n9. **Génération.** Jev n’est pas entraîné à écrire du texte. Pour extraire des données, trouvez les candidats avec une expression régulière ou un modèle génératif, puis laissez Jev choisir le bon avec choice.",
    "alias_of": null,
    "aliases": [],
    "author": "TypeSafe",
    "ctx": 64000,
    "formats": [
      "systemone"
    ],
    "guide": "/docs/api/systemone/",
    "id": "jev-latest",
    "input": [
      "text"
    ],
    "kind": "decision",
    "max_out": null,
    "methods": [
      {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": null,
        "contract": {
          "data": {
            "all_results": "Retain every answer by its supplied question ID, probability and legend; confidenceformulausingnrequiresn>1withoutassertinganAPIminchoicesrule.",
            "errors": [
              {
                "code": null,
                "condition": "Champs obligatoires, représentation des contenus ou valeur de paramètre non valides",
                "http_status": 400,
                "recovery": "Corrigez les champs indiqués avant une nouvelle requête de création.",
                "type": "invalid_request_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "mode": "exact retained published method"
            },
            "material_combinations": [
              {
                "mode": "noul",
                "required": [
                  "state",
                  "questions.<id>.type=noul"
                ]
              },
              {
                "mode": "choice",
                "required": [
                  "state",
                  "questions.<id>.type=choice",
                  "criteria object"
                ]
              },
              {
                "mode": "score",
                "required": [
                  "state",
                  "questions.<id>.type=score",
                  "nonemptycriteriaarray"
                ]
              }
            ],
            "operation_modes": [
              "noul",
              "choice",
              "score"
            ],
            "outputs": {
              "all_results": "Conservez chaque réponse avec l’ID de question fourni, sa probabilité et sa légende ; la formule de confiance utilisant n nécessite n>1, sans affirmer que l’API impose un nombre minimum de choix.",
              "family": "structured",
              "fields": [
                {
                  "description": null,
                  "name": "answers.<id>.type",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "answers.<id>.noul",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "answers.<id>.choice",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "answers.<id>.score",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "answers.<id>.confidence",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "answers.<id>.probabilities",
                  "type": "object"
                },
                {
                  "description": null,
                  "name": "answers.<id>.legend",
                  "type": "object"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "json"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "jev-latest"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "state",
                "required": true,
                "type": "string|object|array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "min_properties": 1,
                "name": "questions",
                "required": true,
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "noul",
                  "choice",
                  "score"
                ],
                "enum_known": true,
                "name": "questions.<id>.type",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "questions.<id>.instructions",
                "required": false,
                "type": "string|object|array|null"
              },
              {
                "availability": "source_interface",
                "conditions": "noul : descriptions true/false facultatives et pouvant valoir null ; choice : objet de critères ; score : tableau de critères non vide",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "questions.<id>.criteria",
                "required": false,
                "type": "object|array|null"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  false,
                  null
                ],
                "enum_known": true,
                "name": "stream",
                "required": false,
                "type": "boolean|null"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "stream=true",
              "duplicateandcase-variedcanonicalkeys"
            ]
          },
          "hints": [
            "Les structures des méthodes et les identifiants sont exacts ; la capacité du fournisseur est distincte de l’admission."
          ],
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": [
              "model",
              "state",
              "questions"
            ]
          },
          "lifecycle": {
            "mode": "exact retained published method"
          },
          "method": {
            "http": "POST",
            "path": "/v1/systemone"
          },
          "operation_modes": [
            "systemone"
          ],
          "output": {
            "family": [
              "structured"
            ],
            "format": "structured decisions JSON",
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": 64000,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 customer message}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"jev-latest\", \"state\": \"\", \"questions\": {\"is_urgent\": {\"type\": \"noul\", \"instructions\": \"Does the supplied customer message express urgency?\"}}}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"state\"]=text\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/systemone \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"result.json\").read_text()),ensure_ascii=False,indent=2))\nPY_RESULT\n",
            "label": "Classify your actual customer message",
            "language": "bash"
          }
        ],
        "family": "systemone",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "systemone",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": 0.084,
        "input": [
          "text"
        ],
        "label": "System One",
        "max_out": 0,
        "max_tool_calls": null,
        "out": 0,
        "output": [
          "structured"
        ],
        "path": "/v1/systemone",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 0.084,
                "amount_unit": "usd_per_million_tokens",
                "key": "in",
                "label": "Input",
                "side": "in"
              },
              {
                "amount": 0,
                "amount_unit": "usd_per_million_tokens",
                "key": "out",
                "label": "Output",
                "side": "out"
              }
            ]
          }
        ],
        "request_model_id": "jev-latest",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "token",
        "units": []
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "jev-latest",
        "request_model_id": "jev-latest",
        "route_label": "Core"
      }
    ],
    "name": "jev-latest",
    "price": {
      "in": 0.084,
      "in_label": null,
      "out": 0,
      "out_label": null,
      "sort_in": 0.084,
      "sort_out": 0,
      "varies": false
    },
    "short": "Un modèle de décision de TypeSafe : il ne rédige pas de texte, mais répond à des questions typées sur du texte ou du JSON — choix d’une option, note sur une échelle ou « oui/non » avec des probabilités. Il convient au routage, au tri des demandes, à la modération et au scoring ; toutes les questions d’une requête sont évaluées en parallèle."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Un modèle de décision de TypeSafe : il ne rédige pas de texte, mais répond à des questions typées sur du texte ou du JSON — choix d’une option, note sur une échelle ou « oui/non » avec des probabilités. Il convient au routage, au tri des demandes, à la modération et au scoring ; toutes les questions d’une requête sont évaluées en parallèle.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "d8fafb5117427f308841a45daa81c6a09ad6fedd816a1a7342074af2777e99d9",
    "renderer_sha256": "9d578ff8df69ef70403308c9943a1179a11b94114c10b333bf1c012005d4a7f4"
  },
  "sourceRevision": "8c41a63c64f74185e984cd2a6f24056cb6001e2dd7d9f669cad90eb610f71be4"
}
