1. C’est quoi, en deux lignes
Jev est un modèle de TypeSafe AI lancé le 15 septembre 2026. Il ne génère pas de texte : tu lui donnes un état (un mail, un ticket, un log) et des questions typées, et il te renvoie des réponses exploitables directement dans ton code, avec une probabilité.
TypeSafe appelle ça un modèle « System One ». Concrètement : pas de prompt à bricoler, pas de JSON à parser, pas de réponse hors format.
2. Les chiffres à connaître
| Ce que tu regardes | La valeur |
|---|---|
| Prix en entrée | 0,042 $ par million de tokens |
| Prix en sortie | Gratuit |
| Temps de réponse annoncé | 70 à 500 ms |
| Mesuré dans l’article Spring | 275 ms à une question, 310 ms à trois |
| Contexte | 64k par requête, dont 32k pour l’état + la plus longue question |
| Entrée | Texte uniquement, meilleur en anglais |
3. Les trois types de questions
| Type | Tu demandes | Tu reçois |
|---|---|---|
| Noul | Une question oui/non | Une valeur entre 0 et 1 |
| Choice | Choisir une étiquette | L’étiquette, une probabilité par option, et une confiance |
| Score | Placer sur une échelle ordonnée | Une valeur continue, le barème, les probabilités par niveau, et une confiance |
Le Noul n’a pas de confiance séparée : la valeur est la certitude. Un 0,5 veut dire indécis.
4. Installation
Ajoute la dépendance :
<dependency>
<groupId>org.springaicommunity</groupId>
<artifactId>spring-ai-starter-typesafe</artifactId>
<version>0.1.0</version>
</dependency>
Ajoute aussi typesafe-spring-ai (même groupe, même version) si tu veux le juge et les advisors.
En Java pur sans Spring Boot, il te faut seulement typesafe-java-sdk.
Puis la clé :
spring.ai.typesafe.api-key=${TYPESAFE_API_KEY}
L’auto-configuration te donne un bean TypeSafeClient, sans rien câbler de plus.
5. L’exemple de base
Un ticket client, trois décisions, un seul appel :
SystemOneResponse response = typeSafeClient.systemOne(
"Help! My payouts have been failing for 3 days.",
Map.of(
"is_urgent", Noul.of("Does this convey urgency?"),
"department", Choice.builder()
.instructions("Which team should handle this?")
.option("billing", "Payments, invoicing, refunds")
.option("technical", "Bugs, outages, integrations")
.option("sales", "Pricing, upgrades, new accounts")
.build(),
"frustration", Score.of("How frustrated is the customer?",
"Calm", "Frustrated", "Very angry")));
response.noulValue("is_urgent"); // 0.95
response.choiceValue("department"); // "billing"
response.choice("department").confidence(); // 0.82
response.scoreValue("frustration"); // 1.1
6. Le garde-fou
Deux advisors, deux rôles différents : la qualité réessaie, la sécurité a le dernier mot.
ChatClient.builder(chatModel)
.defaultAdvisors(
JevSelfRefineAdvisor.builder().judge(judge).build(), // qualité : réessaie
JevGuardrailAdvisor.builder(typeSafeClient).build()) // sécurité : dernier mot
.build();
Une requête bloquée n’atteint jamais le modèle : zéro token généré, zéro euro dépensé.
Les seuils par défaut : au-dessus de 0,70 l’action du danger s’applique, entre 0,35 et 0,70 c’est un passage en revue humaine, en dessous ça passe.
7. Le juge
Chaque critère est une question plus le seuil qu’elle doit franchir :
JevJudge judge = JevJudge.builder(typeSafeClient)
.score("helpfulness", helpfulnessRubric, 2.0d)
.noul("is_plausible", plausible, 0.8d)
.noul("is_grounded", grounded, 0.8d)
.build();
JevVerdict verdict = judge.judge(question, answer);
Un critère qui ne sait pas trancher revient en INCONCLUSIVE plutôt qu’en échec, et laisse décider ceux qui étaient sûrs. Mets failOnInconclusive(true) si une réponse non vérifiée est pire qu’une réponse rejetée.
8. Les quatre pièges
Écris de vraies descriptions d’options. Avec des étiquettes nues, la confiance tombe de 0,82 à 0,60 sur le même ticket.
Un Choice désigne toujours un gagnant, puisque les probabilités font 1. Si « aucune de ces options » est une réponse valable, pose-la comme un Noul séparé.
La confiance n’est pas une note de qualité, c’est une décision d’aiguillage. En dessous de ton seuil, tu envoies à un humain ou à un LLM.
Découpe tes questions. Sur un test indépendant de 2 000 mails de phishing, Jev fait 62,6 % en une grosse question, contre 81,3 % pour Claude Haiku. Découpé en cinq questions précises recombinées, il monte à 95 % contre 93,2 %, pour environ douze fois moins cher.
9. Quand l’utiliser, quand ne pas
| Utilise Jev pour | Garde un LLM pour |
|---|---|
| Juger, noter, évaluer contre des critères | Générer la réponse elle-même |
| Classer et router avec un seuil de confiance | Tout ce dont la sortie est du texte |
| Filtrer des prompts ou des passages retrouvés | Résumer, rédiger, expliquer |
| Mettre une vérification pas chère devant un appel cher | Le raisonnement ouvert |
À savoir aussi : Jev ne fait pas de streaming, l’état doit être une chaîne, un objet, un tableau ou null (un simple nombre renvoie une erreur 422), et le travail par document, c’est un appel par document.