docs
API

Jev — modèle de décision

Markdown

Le modèle de décision Jev de TypeSafe répond à des questions typées sur du texte ou du JSON : choix d’une option, évaluation sur une échelle ou oui/non avec des probabilités. Il ne sert ni au clavardage ni à la génération de texte.

Guide complet
POSThttps://api.ailoot.ai/v1/systemone
Jev — modèle de décision
curl https://api.ailoot.ai/v1/systemone \
  -H "Authorization: Bearer $AILOOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "jev-latest",
    "state": "Au secours ! Mes versements échouent depuis 3 jours.",
    "questions": {
      "is_urgent": {
        "type": "noul",
        "instructions": "Cela exprime-t-il une urgence ?"
      }
    }
  }' 
200 OK
{
  "model": "jev-1.13.0",
  "answers": {
    "is_urgent": {
      "type": "noul",
      "noul": 0.95
    }
  },
  "usage": { "input_tokens": 296, "output_tokens": 20 }
}

Jev est un modèle de décision de classe System One proposé par TypeSafe. Il ne rédige pas de texte et ne dialogue pas : vous transmettez un état (state) — sous forme de texte ou de JSON — et un ensemble de questions, puis recevez des valeurs typées accompagnées de probabilités. Votre code peut directement effectuer des branchements, trier et router sans analyser du texte libre.

Toutes les questions d’une requête sont évaluées en parallèle et indépendamment, sur le même state. Selon TypeSafe, ajouter des questions modifie très peu le temps de réponse et les questions n’interfèrent pas entre elles.

ÉlémentEn bref
Modèlejev-latest — alias de la dernière version stable de Jev ; fiche du catalogue
MéthodePOST /v1/systemone. Il ne s’agit pas de clavardage : les formats OpenAI, Anthropic et Gemini ne conviennent pas à Jev. La réponse arrive entière, sous la forme d’un seul JSON
Entrées acceptéesUniquement du texte : chaîne, objet JSON ou tableau de textes. Convertissez d’abord les images, l’audio et la vidéo en texte
Contexte64K jetons par requête, state et toutes les questions réunis; state avec la question la plus longue : jusqu’à 32K
LangueSelon TypeSafe, le modèle est le plus précis en anglais. Il accepte d’autres langues, avec une précision inférieure : testez-le sur vos données
PrixEntrée : 0,084 USD pour 1 million de jetons; sortie gratuite

Requête

Autorisation

  • Authorizationheaderobligatoire

    Clé Ailoot au format Bearer sk-….

Corps de la requête

  • modelstringobligatoire

    jev-latest.

  • statestring | object | arrayobligatoire

    Contenu à évaluer : chaîne de texte ou JSON, demande d’un client, enregistrement de base de données, échange ou état actuel de votre application. Un objet avec des noms de champs clairs est généralement plus pratique qu’une seule chaîne.

  • questionsobjectobligatoire

    Questions. Vous choisissez les clés et les réponses utilisent les mêmes clés. La clé n’influence pas la réponse : la question est définie dans instructions.

  • questions.*.typestringobligatoire

    noul, choice ou score — voir ci-dessous.

  • questions.*.instructionsstring | object | arrayobligatoire

    La question elle-même. Une longue question contenant des données peut être transmise sous forme d’objet : la question dans un champ et les données dans les autres. Référencez les champs par leur nom entre accents graves.

  • questions.*.criteriaobject | array

    Options de réponse propres à chaque type : descriptions de oui et non pour noul (facultatives), dictionnaire d’options pour choice, liste ordonnée de niveaux pour score.

Types de questions

TypeQuestion poséeValeur retournée
noulL’affirmation est-elle vraie : oui ou nonnoul — probabilité de oui, de 0 à 1
choiceQuelle option parmi celles proposées convientchoice, probabilities, confidence
scoreOù se situe state sur votre échelle de niveauxscore, legend, probabilities, confidence

Vous pouvez combiner plusieurs types dans une même requête.

noul — oui ou non

Le champ criteria est facultatif : il peut décrire la signification de oui (true) et de non (false). La réponse noul — nombre de 0 (non) à 1 (oui).

"is_urgent": {
  "type": "noul",
  "instructions": "Cela exprime-t-il une urgence ?",
  "criteria": {
    "true": "Explicitement soumis à une contrainte de temps",
    "false": "Aucune urgence exprimée"
  }
}

choice — choix d’une option

criteria — dictionnaire « option → description ». Si aucune description n’est nécessaire, indiquez null. Jusqu’à 255 options. Dans la réponse, choice — l’option la plus probable, probabilities — la probabilité de chaque option (somme égale à 1), confidence — confiance de 0 à 1.

"department": {
  "type": "choice",
  "instructions": "Quelle équipe doit s’en charger ?",
  "criteria": {
    "billing": "Paiements, facturation, remboursements",
    "technical": "Bugs, pannes, intégrations",
    "sales": "Tarifs, passages à une offre supérieure, nouveaux clients"
  }
}

score — évaluation sur une échelle

criteria — niveaux classés du plus bas au plus haut, au maximum 10 (TypeSafe recommande au moins deux). Dans la réponse, score — valeur pondérée par les probabilités des niveaux, qui peut se situer entre deux niveaux, legend — numéro du niveau et sa description, probabilities et confidence. Selon TypeSafe, score convient à une comparaison avec un seuil, mais pas à une valeur exacte entre les niveaux.

"frustration": {
  "type": "score",
  "instructions": "À quel point le client est-il frustré ?",
  "criteria": ["Calme", "Frustré", "Très en colère"]
}

Réponse

  • modelstring

    Version du modèle ayant répondu. L’alias jev-latest évolue vers de nouvelles versions. Si vous avez réglé les seuils de confidence pour une version précise, surveillez ce champ.

  • answersobject

    Une réponse pour chaque question, sous les mêmes clés. Chaque réponse comporte type; pour choice et score, également confidence.

  • usageobject

    input_tokens et output_tokens. Seuls les jetons d’entrée sont facturés.

Plusieurs questions en une seule requête

Posez toutes les questions sur un même state dans une requête unique : elles sont évaluées en parallèle et state n’est transmis qu’une fois. Selon TypeSafe, dans leur exemple avec 13 questions, une requête commune était 12,2 fois moins chère et 10 fois plus rapide que 13 requêtes séparées envoyées successivement, pour les mêmes réponses.

Il vaut mieux décomposer un jugement complexe en questions simples et combiner les réponses dans le code. Par exemple, au lieu de « évaluer la demande », évaluez séparément le marché, la faisabilité et la différenciation par rapport aux concurrents. Les pondérations changent alors dans le code, et non dans la question.

{
  "model": "jev-latest",
  "state": "Au secours ! Mes versements échouent depuis 3 jours.",
  "questions": {
    "department": {
      "type": "choice",
      "instructions": "Quelle équipe doit s’en charger ?",
      "criteria": {
        "billing": "Paiements, facturation, remboursements",
        "technical": "Bugs, pannes, intégrations",
        "sales": "Tarifs, passages à une offre supérieure, nouveaux clients"
      }
    },
    "frustration": {
      "type": "score",
      "instructions": "À quel point le client est-il frustré ?",
      "criteria": ["Calme", "Frustré", "Très en colère"]
    },
    "is_urgent": {
      "type": "noul",
      "instructions": "Cela exprime-t-il une urgence ?"
    }
  }
}

Quand l’utiliser

  • Routage. Envoyer une demande au bon service et une requête au bon responsable du traitement : code simple, grand modèle ou personne.
  • Tri et priorité. Urgence, tonalité et risque évalués sur une échelle, avec des seuils dans le code.
  • Modération et vérifications. Vérifier si un message enfreint les règles, si une source confirme une citation ou si un document répond à une question, avant de transmettre le texte.
  • Notation et classement. Évaluer des documents, des candidats ou des passages trouvés selon votre grille et décider dans le code de la suite.
  • À la place d’un fragile « renvoie du JSON ». Un appel qui retourne des valeurs typées par construction, au lieu d’un texte à analyser.

Quand ne pas l’utiliser

  • Clavardage, réponses aux utilisateurs, génération de texte ou de code. Jev ne rédige pas de texte; pour cela, utilisez les modèles textuels.
  • Modèle pour Claude Code, Cursor et d’autres agents. Vous ne pouvez pas remplacer le modèle d’un agent par jev-latest : l’agent a besoin d’un modèle qui rédige du texte et appelle des outils. Vous pouvez appeler Jev depuis le code que l’agent écrit pour vous.
  • Arithmétique, comptage et comparaison de dates. Selon TypeSafe, il est plus fiable de les effectuer dans le code et de ne demander au modèle que l’interprétation sémantique, par exemple extraire les éléments d’une date via choice.
  • Images, audio et vidéo. Le modèle accepte uniquement du texte. Convertissez ces données en texte au préalable.

Prix

La facturation porte uniquement sur les jetons d’entrée comptés dans le champ usage.input_tokens de la réponse : 0,084 USD pour 1 million. Les jetons de sortie sont gratuits.

La requête de l’exemple de cette page (296 jetons d’entrée) coûte moins de $0.0001.

Avant la requête, Ailoot réserve le montant sur le solde puis, après la réponse, effectue un seul débit selon l’utilisation réelle. Voir le fonctionnement.

Limites

ÉlémentLimite
Requête entière : state et toutes les questions64K jetons
state avec la question la plus longue32K jetons
Nombre d’options dans un choicejusqu’à 255
Nombre de niveaux dans un scorede 2 à 10
Entréeuniquement du texte : chaîne, objet JSON ou tableau de textes

Les limites du modèle sont celles indiquées par TypeSafe. Les restrictions de votre clé et de votre solde s’appliquent comme pour tout modèle Ailoot : Erreurs et limites.

Erreurs

Les erreurs utilisent le format commun Ailoot API : code, message clair et Request ID. Les cas les plus fréquents pour cette méthode sont :

CodeQuandQue faire
400 invalid_requestCorps non validé : state, model ou questions manquants, type inconnu, plus de 255 options dans choice ou plus de 10 niveaux dans scoreCorrigez la requête d’après le message d’erreur. Sans modification, elle échouera à nouveau
400 context_length_exceededstate et les questions dépassent ensemble la limite du modèleFiltrez state dans le code et conservez les données utiles aux questions
401 invalid_api_keyClé absente ou incorrecteTransmettez la clé dans l’en-tête Authorization
402 insufficient_balanceSolde disponible insuffisant pour la réserveAjoutez des fonds à votre solde
404 model_not_found, unsupported_endpointID incorrect ou modèle appelé avec une mauvaise méthode, par exemple via /v1/chat/completionsAppelez jev-latest uniquement via POST /v1/systemone
429 rate_limit_exceededTrop de requêtesAttendez le nombre de secondes indiqué dans l’en-tête Retry-After, puis réessayez
503 model_overloaded, model_unavailableModèle temporairement surchargé ou indisponibleSi X-Should-Retry : true, réessayez après le nombre de secondes indiqué dans Retry-After; si false, vérifiez d’abord le Request ID dans l’historique
504 model_timeoutLe modèle n’a pas répondu à tempsNe renvoyez pas la requête avant d’avoir vérifié le Request ID dans l’historique

La liste complète des codes figure sur la page Erreurs et limites.

Vous avez d’autres questions? Envoyez le Request ID et une description : nous vous aiderons à comprendre.Contacter le soutien