Analyses

Jev : le modèle de décision expliqué aux développeurs

TchaviPar Gael — fondateur de Tchavi

· 9 min de lecture

Retour au blog

Sommaire

Jev est un modèle qui ne rédige rien. Tu lui donnes un texte et une question avec des options, il te rend une probabilité par option. C'est tout, et c'est ce qui le rend utile : tu n'as plus de texte à parser, et tu peux fixer toi-même le seuil à partir duquel ton code agit.

Sur Tchavi, il s'appelle jev-1.13 et il passe par l'endpoint /v1/decisions. J'ai passé cinq messages en français dessus (annonces de boutique, message de support, preuve de paiement). Les résultats, les seuils et les coûts sont plus bas.

En bref

  • Tchavi, une passerelle d'API IA compatible OpenAI que tu paies en mobile money, donne accès à Jev, le modèle de décision de TypeSafe, sur /v1/decisions avec la même clé que pour le reste.
  • Une décision est un texte plus des questions typées : un choix entre libellés, une note sur une échelle, ou une probabilité oui/non. La réponse a toujours cette forme.
  • À utiliser pour classer, modérer, router, vérifier un oui/non. À éviter dès que tu veux du texte écrit.
  • Coût sur Tchavi : 0,09 crédit par millier de tokens d'entrée, sortie gratuite. Mes appels ont coûté entre 0,035 et 0,044 crédit, soit 0,012 à 0,015 F chacun.
  • Latence mesurée en octobre 2026 : de 298 à 575 ms par appel.

Ce qu'est une décision

Quand tu demandes à un modèle de chat « réponds uniquement par oui ou non », tu parses ensuite un mot, et il arrive que le modèle ajoute une excuse ou une phrase. Avec Jev, tu déclares la forme de la réponse dans la requête, et la réponse revient dans cette forme.

Il y a trois types de questions :

typece que tu posescriteriace que tu reçois
choicechoisir entre des libelléslibellé vers sa définitionchoice, confidence, probabilities
scoresituer sur une échelle ordonnéeun tableau, du plus bas au plus hautscore continu, legend, probabilities
noulquelle probabilité que ce soit vraiaucunun nombre entre 0 et 1

Tu nommes les questions comme tu veux, et answers revient indexé par tes noms. Tu peux en poser plusieurs dans le même appel : le texte n'est envoyé qu'une fois.

Sur Tchavi, le texte à juger (state) est une chaîne ou un objet JSON. Je n'ai testé que du texte et du JSON ; je ne parle donc pas d'images ici.

Une requête, une réponse

Voici le cas d'une annonce de boutique en ligne qui ressemble à une arnaque. Le code utilise fetch simple, sans SDK :

const response = await fetch('https://tchavi.com/api/v1/decisions', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    Authorization: `Bearer ${process.env.TCHAVI_API_KEY}`,
  },
  body: JSON.stringify({
    model: 'jev-1.13',
    state:
      'Annonce : « iPhone 15 Pro Max neuf sous scellé, 40 000 F seulement ! Envoie 10 000 F par MoMo pour réserver, je livre demain. Écris-moi sur WhatsApp, pas ici. »',
    questions: {
      verdict: {
        type: 'choice',
        instructions: 'Que doit faire la modération avec cette annonce ?',
        criteria: {
          publier: 'annonce normale, rien à signaler',
          refuser: 'produit interdit ou arnaque évidente',
        },
      },
      arnaque: {
        type: 'noul',
        instructions: 'Cette annonce ressemble-t-elle à une arnaque ?',
      },
    },
  }),
});

const result = await response.json();
console.log(result.answers);
console.log('crédits :', response.headers.get('x-credits-used'));

La réponse que j'ai obtenue :

{
  "model": "jev-1.13.0",
  "answers": {
    "verdict": {
      "type": "choice",
      "choice": "refuser",
      "confidence": 0.96,
      "probabilities": { "publier": 0.02, "refuser": 0.98 }
    },
    "arnaque": { "type": "noul", "noul": 0.92 }
  },
  "usage": { "input_tokens": 426, "output_tokens": 53 }
}

Le coût n'est pas dans le JSON mais dans l'en-tête X-Credits-Used : 0,039 crédit ici. Pour le détail, la page de référence des décisions donne tous les champs.

Deux détails qui comptent : confidence d'un choice mesure la certitude du modèle sur son choix, et elle peut différer un peu de la probabilité du libellé gagnant (ici 0,96 contre 0,98), et une question noul n'a pas de confidence, seulement le nombre.

Cinq appels réels

Mesuré en octobre 2026, à travers Tchavi, sur une instance de test aux tarifs publics. Tous les messages sont inventés. La latence est le temps de l'aller-retour depuis mon poste, un appel à la fois : prends-la comme un ordre de grandeur.

casréponse de Jevlatencecrédits
annonce normale (robe en wax, 12 000 F, retrait à Cotonou)publier 1,00 ; arnaque 0,23575 ms0,037
annonce suspecte (iPhone à 40 000 F, acompte MoMo, contact WhatsApp)refuser 0,98 ; arnaque 0,92298 ms0,039
message de support furieux (colis cassé, menace de poster sur Facebook)reclamation 1,00 ; urgence 2,75 sur 3 ; escalade 0,85316 ms0,044
capture MoMo : 25 000 FCFA à Boutique Ama, commande de 25 000 Fpaiement complet 0,95301 ms0,035
même capture, mais 2 500 FCFA envoyéspaiement complet 0,05422 ms0,035

Le troisième cas montre l'intérêt de poser plusieurs questions d'un coup : l'intention (reclamation), l'urgence sur une échelle (le score 2,75 se lit entre « urgent » et « critique », plus près de « critique » : la probabilité est de 0,75 sur « critique » et 0,25 sur « urgent ») et le besoin d'un humain, pour 0,044 crédit.

Le quatrième et le cinquième cas sont une vérification de preuve de paiement à partir du texte. J'ai passé dans state un objet avec la commande attendue (montant, bénéficiaire) et le message du client. Jev compare les deux : 0,95 quand le montant correspond, 0,05 quand il est dix fois trop bas. Attention à ce que ça prouve : il lit un texte qu'un client peut falsifier. Pour créditer un compte, ne te fie jamais à une capture : l'argent doit arriver par un webhook de l'opérateur, comme c'est le cas sur Tchavi. Ce que Jev peut faire, c'est trier les captures à regarder à la main.

Des seuils plutôt qu'un oui ou non

Une probabilité te laisse décider du risque que tu acceptes. Le schéma le plus simple tient en trois cas : agir, mettre en attente, refuser.

function moderate(answers) {
  const scam = answers.arnaque.noul;
  if (scam >= 0.8) return 'refuser'; // le cas de l'iPhone : 0,92
  if (scam <= 0.3) return 'publier'; // la robe en wax : 0,23
  return 'a_verifier'; // le milieu part dans la file d'un humain
}

Avec mes deux annonces, la robe passe (0,23) et l'iPhone est refusé (0,92). Les valeurs 0,8 et 0,3 sont mon choix pour cet exemple, pas une règle : elles se règlent avec tes propres données.

Comment les fixer ? Prends 50 à 100 messages que tu as déjà jugés à la main, passe-les dans Jev, et regarde à partir de quelle valeur tu te trompes. Si refuser une bonne annonce coûte cher (un vendeur qui s'en va), monte le seuil de refus et envoie plus de cas à la file humaine. Si laisser passer une arnaque coûte plus cher, baisse le seuil de refus.

Sur un choice, confidence joue le même rôle : en dessous de, disons, 0,7, tu passes la main plutôt que d'agir. Dans un test de 40 messages de support que j'ai passés dans Jev, les 38 réponses de confiance supérieure ou égale à 0,9 étaient toutes justes.

Quand l'utiliser, et quand l'éviter

Jev convient quand la réponse tient dans une liste d'options ou un nombre :

  • Classification : intention d'un message, catégorie d'un ticket, langue ou sujet.
  • Modération : annonce, commentaire, avis, avec un seuil que tu règles.
  • Routage : quelle équipe, quel niveau d'urgence, faut-il un humain.
  • Vérifications oui/non : le message contient-il une demande de remboursement, le justificatif correspond-il à la commande.

Il ne convient pas quand tu veux du texte : une réponse à un client, un résumé, une traduction, du code. Il ne streame pas et ne rédige pas, et /v1/chat/completions le refuse avec une erreur 400 (l'inverse aussi : un modèle de chat envoyé sur /v1/decisions est refusé). Le montage classique est de combiner les deux : Jev décide, un modèle de chat écrit.

Ce que ça coûte sur Tchavi

jev-1.13 est facturé à 0,09 crédit par millier de tokens d'entrée, et la sortie est gratuite. Rappel : 3 crédits valent 1 F.

Un point à connaître : tes questions sont développées dans le prompt avant que le modèle les lise. Mes textes tenaient en une ou deux lignes, et le décompte a montré entre 384 et 480 tokens d'entrée. Avec un state court, le coût dépend donc surtout des questions, pas du texte. À 0,035-0,044 crédit par appel, un millier de décisions revient à 35 à 44 crédits, soit 12 à 15 F. Sur mon test de 40 messages de support, la moyenne était de 0,0436 crédit par message : 3 000 crédits (1 000 F) paient alors environ 69 000 classifications.

Les prix sont ceux du catalogue et peuvent changer ; la page du modèle affiche le tarif du moment.

FAQ

Jev est-il un LLM ?

Non. Il ne produit pas de texte : il rend des probabilités pour des questions que tu définis. Il se distingue d'un modèle de chat par sa forme de réponse garantie, pas par une astuce de prompt.

Faut-il un SDK pour l'appeler ?

Non. C'est une requête POST JSON classique : fetch, curl ou requests suffisent. Je n'ai utilisé que fetch pour ces tests.

Que faire quand la confiance est basse ?

Ne laisse pas ton code agir. Envoie le cas à un humain ou, si le coût le permet, à un modèle de chat plus gros. C'est le même principe que les seuils plus haut.

Combien de questions puis-je poser dans un appel ?

Plusieurs : j'en ai posé jusqu'à trois dans le même appel. Chaque question s'ajoute au prompt facturé, donc le coût monte avec leur nombre.

Peut-on se fier à Jev pour valider un paiement ?

Non, pas seul. Il juge un texte que quelqu'un peut inventer. Un crédit doit venir d'une confirmation de l'opérateur, pas d'une capture d'écran. Jev sert à trier.

crée ton compte et recharge 1 000 F

Cet article fait partie de la série « Construire un SaaS IA depuis l'Afrique francophone ». Tchavi est une passerelle d'API IA compatible OpenAI : une seule clé donne accès à plus de 100 modèles de texte, d'image, d'audio et de vidéo, et tu la paies en mobile money, sans carte bancaire (pays et opérateurs). Plus de guides sur le blog. Pour suivre les prochains : LinkedIn et X.

Partager

Ton premier appel d'API, payé en mobile money

Sans carte bancaire. Recharge à partir de 1 000 F ; ta première recharge ajoute 150 crédits de bonus, et tes crédits n'expirent pas.