JEV - Deux démos qui ne rendent qu'une distribution
Les deux exemples ne posent qu'un choix fermé : l'assistance doit-elle basculer vers une personne, et une fusion doit-elle passer. Ce qui revient est une distribution. La latence publiée reste autour de 70 à 500 millisecondes, pas le chiffre en millisecondes d'une démo.

Co-auteur : folkbench.com (Folkbench est une plateforme vérifiable d’évaluation et de sélection pour les API d’IA, les services de modèles et les sites associés. Elle s’appuie sur les informations publiées sur le service, les prix, la disponibilité, la latence et les fenêtres de preuve pour aider les utilisateurs à comparer des voies et à en choisir une.)
Dix textes dans cette série :
- JEV - Une articulation n'a pas besoin d'un cerveau
- JEV - Le lubrifiant sur les nœuds de contrôle
- JEV - De BERT à une seule distribution
- JEV - Concevoir la question fermée, pas la formule
- JEV - Le grand livre anti-token ne le sort pas d'abord
- JEV - Deux démos qui ne rendent qu'une distribution
- JEV - Sortir de la boucle : la confiance entre dans le code
- JEV - Passée la ligne, plus intelligent n'est plus le produit
- JEV - Intuition et raison : des questions qui ne lui reviennent pas
- JEV - De l'écran à une probabilité nue
Les deux démos sont le même travail : pas de texte libre, seulement une question fermée, et la branche est prise dans la distribution. Le JSON et le code ci-dessous sont la forme d'un appel, pas un rapport de temps. Le délai publié de bout en bout est d'environ 70 à 500 millisecondes. N'écrivez pas une course de 18 millisecondes comme chiffre de produit. Ce qui vaut d'être vu, c'est que la réponse ne contient pas de phrase token par token.
Assistance : intention et un coupe-circuit
La scène
L'assistance craint une personne déjà en colère pendant que le système tape encore. Se servir d'un modèle génératif pour l'intention veut souvent dire attendre un premier token et un bloc JSON généré, au nom de l'exactitude. Une expression régulière nue manque la colère qui parle autour du point. Ce qu'il faut, c'est une classification fermée, puis une décision immédiate sur le passage à une personne.
État et options
C'est un Choice, pas un Noul. Noul répond oui ou non. Il y a ici trois options.
[State]
scene: live support entry
rule: assign probability across the given options from the message text
[user]
I have waited three days. The shipment has not moved. Are you even alive? Refund me now, or I escalate.
{
"question": "choice",
"options": [
{"id": "GENERAL", "description": "ordinary question or tracking, no strong emotion"},
{"id": "REFUND", "description": "a clear return or refund, stated flatly"},
{"id": "BREAKER", "description": "insult, threat, or a complaint that should break to a person"}
]
}
Ce qui revient est une distribution
Il n'y a pas de curseur qui émet des caractères. La forme est une table, pas une critique.
{
"top": "BREAKER",
"scores": [
{"choice": "BREAKER", "score": 0.9241},
{"choice": "REFUND", "score": 0.0715},
{"choice": "GENERAL", "score": 0.0044}
]
}
Les nombres sont la distribution dans cet exemple, pour que la branche puisse s'écrire. Ce n'est pas un repère publié. Le modèle assigne la probabilité sur les options données. Il ne prédit pas le caractère suivant.
Comment le code le prend
async function handleIncomingCustomerMessage(userMessage: string) {
const res = await jev.choice("cs_intent_v1", { input: userMessage });
const breaker = scoreOf(res, "BREAKER");
if (breaker > 0.85) {
return triggerHumanOverride({ priority: "CRITICAL", queue: "RETENTION" });
}
if (scoreOf(res, "REFUND") > 0.70) {
return launchWorkflow("AUTOMATED_REFUND_FLOW");
}
return launchWorkflow("DEFAULT_FAQ_BOT");
}
Il n'y a pas de nouvel essai dont le seul travail serait d'analyser Markdown. Le seuil est dans le code. 0.85 et 0.70 sont la politique de ce flux. Ce n'est pas une garantie du modèle.
Une revue avant la fusion
La scène
Les analyses statiques s'appuient sur un arbre syntaxique et sur des règles mortes. Les variantes passent, et les fausses alertes sont courantes. Demander à un modèle de discussion de lire un diff de 500 lignes et d'écrire une critique prend souvent de nombreuses secondes. La chaîne ne peut pas attendre, et un programme ne peut pas lire « passe » ou « échoue » dans la prose. Traitez le diff comme un état, et posez un Choice : passer, une personne doit regarder, ou bloquer.
État et options
[Git diff]
PR #1042
file: src/auth/session.ts
+ // skip expiry outside production, or when the token starts with test_admin_
+ if (process.env.NODE_ENV !== 'production' || token.startsWith('test_admin_')) {
+ return session;
+ }
{
"question": "choice",
"options": [
{"id": "PASS", "description": "harmless refactor, docs, or ordinary logic"},
{"id": "WARN", "description": "config, dependency, or a non-sensitive refactor; a person should look"},
{"id": "BLOCK", "description": "backdoor, hardcoded secret, privilege jump, auth bypass, injection"}
]
}
Un préfixe test_admin_ qui saute l'expiration en production est un contournement d'authentification. Dans l'exemple, la distribution place BLOCK près de 0.98. Effacez cette clause et ne laissez que « sauter hors de la production », et la même question passe du blocage à un regard humain. C'est ainsi que la question s'utilise. Ce n'est pas un ensemble de millisecondes promises.
Comment une chaîne le prend
def audit_pr_diff(diff_text: str) -> int:
result = jev.choice(
question="pr_security_v2",
state=diff_text,
options=["PASS", "WARN", "BLOCK"],
)
scores = result.scores
if result.top == "BLOCK" and scores["BLOCK"] > 0.80:
print("high-risk auth change")
return 1
if result.top == "WARN":
mark_review_required()
return 0
return 0
Une adresse de service interne suffit. Ne lisez pas ceci comme un site public qui offrirait déjà Jev en votre nom. La chaîne lit l'option du haut et les valeurs. Si une personne a encore besoin d'une critique écrite, demandez à un modèle qui sait écrire. Ne repoussez pas cette prose dans cette question.
Comme l'appel d'une interface qui renvoie des nombres
Les deux courses rendent un fait concret : le jugement compliqué reste dans le modèle, et dehors il ne reste que la probabilité. Noul, Choice et Score sont trois grilles, pas trois styles de discussion.
Aiguillage, risque, un contrôle avant la fusion, un moteur de politiques, une branche d'Agent : demandez d'abord si l'étape peut s'écrire comme une question fermée. S'il le peut, n'attendez pas une génération. S'il ne le peut pas, ne l'habillez pas en appel de cette sorte.