Réponse courte : jev-1.13 ne génère pas de texte. Vous POSTez un morceau de texte plus un ensemble de questions nommées à https://aihubmix.com/v1/systemone, et vous obtenez des réponses tapées associées à vos noms de questions — une catégorie, un score ou une probabilité. Rien à analyser. Ci-dessous, une requête fonctionnelle, le format de réponse complet, et l'une des erreurs de conception qui vous coûtera silencieusement en précision.
À quoi sert Jev
Utilisez-le lorsque vous avez besoin d'un jugement, pas d'un paragraphe : acheminer un ticket de support, évaluer la gravité, signaler l'urgence, contrôler le contenu. La page du modèle l'indique clairement : "Pas de génération de texte, rien à analyser."
Utilisez plutôt un modèle de chat normal lorsque vous avez besoin d'explications, de résumés ou de toute sortie libre. Jev ne peut pas produire cela.
Avant de commencer
- [ ] Python 3 installé (la bibliothèque standard suffit)
- [ ] Un compte AiHubMix et une clé API
- [ ] Clé exportée en tant que
AIHUBMIX_API_KEY, jamais codée en dur dans le code source
Vous ne avez pas besoin d'un SDK OpenAI, de LangChain, ou du requests package.
Étape 1 — Connaître le point de terminaison
POST https://aihubmix.com/v1/systemone
Authorization: Bearer YOUR_KEY
Content-Type: application/json
C'est une route spécifique au modèle, pas /v1/chat/completions. Les clients compatibles OpenAI ne peuvent pas l'appeler. Utilisez HTTP simple.
Étape 2 — Choisissez vos types de questions
Il y en a trois, et vous pouvez les mélanger librement dans une seule requête :
| Type | Utilisez-le pour | Vous fournissez |
|---|---|---|
choice | Choisir une catégorie | criteria en tant que dict : label → définition |
score | Évaluation sur une échelle ordonnée | criteria en tant que liste, du plus bas au plus élevé |
noul | Un jugement oui/non | rien au-delà de instructions |
Étape 3 — Construire la requête
state est le texte à juger. questions les clés sont des noms que vous inventez ; la réponse utilise les mêmes noms.
payload = {
"model": "jev-1.13",
"state": "Bonjour, j'essaie de connecter mon compte Stripe depuis 3 jours "
"et cela échoue constamment. Je perds des ventes. Merci de m'aider ASAP.",
"questions": {
"department": {
"type": "choice",
"instructions": "Quelle équipe devrait s'en occuper",
"criteria": {
"billing": "Problèmes de paiement ou d'abonnement",
"technical": "Bugs ou problèmes d'intégration",
"sales": "Questions de prix ou de compte",
},
},
"frustration": {
"type": "score",
"instructions": "À quel point le client semble frustré",
"criteria": [
"Calme, énonçant simplement des faits",
"Frustré mais civil",
"Très en colère, langage fort",
],
},
"is_urgent": {
"type": "noul",
"instructions": "Le message transmet une urgence ou une sensibilité au temps",
},
},
}
Étape 4 — Envoyez-le avec la bibliothèque standard
import json, os, urllib.error, urllib.request
def ask(payload):
req = urllib.request.Request(
"https://aihubmix.com/v1/systemone",
data=json.dumps(payload).encode(),
headers={"Authorization": "Bearer " + os.environ["AIHUBMIX_API_KEY"],
"Content-Type": "application/json"},
method="POST",
)
try:
with urllib.request.urlopen(req, timeout=60) as r:
return json.loads(r.read())
except urllib.error.HTTPError as e:
raise SystemExit(f"HTTP {e.code}: {e.read().decode(errors='replace')[:500]}")
Gardez la construction de la requête à l'intérieur d'une fonction. Si vous construisez et envoyez au niveau du module, l'importation du fichier relance l'appel et dépense des tokens.
Étape 5 — Lire les réponses
Chaque réponse stocke sa valeur sous une clé correspondant à son type, donc un accesseur couvre les trois :
data = ask(payload)
for name, ans in data["answers"].items():
kind = ans["type"]
print(name, kind, ans[kind], ans.get("confidence"))
print("usage:", data.get("usage"))
Sortie vérifiée :
department choice billing 0.51
frustration score 1 1
is_urgent noul 1 None
usage: {'input_tokens': 424, 'output_tokens': 73}
Étape 6 — Comprendre l'enveloppe complète
La boucle d'impression cache des champs utiles. Le JSON brut pour une réponse score :
{
"type": "score",
"score": 1,
"legend": {"0": "Calme, énonçant simplement des faits", "1": "Frustré mais civil", "2": "Très en colère, langage fort"},
"probabilities": {"0": 0, "1": 1, "2": 0},
"confidence": 1
}
legendmappe l'index à votre propre formulation — l'entier est auto-descriptif, donc vous n'avez pas besoin de table de correspondance dans votre code.probabilitiesdonne la distribution complète, utile pour détecter un quasi-égalité.nouln'a pas de champconfidence. Sa probabilité est le signal.
Le niveau supérieur retourne également usage, id, provider (TypeSafe), et la version backend résolue typesafe/jev-1.13-20260917.
L'erreur qui vous coûte en précision
Dans la requête ci-dessus, department a retourné billing avec une confiance de 0.51. Répéter la même requête a retourné la même étiquette à 0.38 — la réponse était stable, la certitude déclarée ne l'était pas.
La cause réside dans les critères, pas dans le modèle. billing est "Problèmes de paiement ou d'abonnement" et technical est "Bugs ou problèmes d'intégration." Une intégration Stripe qui échoue constamment correspond réellement aux deux. Le modèle rapportait une ambiguïté qui était inscrite dans le schéma.
Deux règles avant la production :
- Rédigez des critères
choicequi sont mutuellement exclusifs. Si un humain hésiterait entre deux étiquettes, le modèle le fera aussi. - Définissez un seuil de confiance et acheminez les résultats à faible confiance vers une file d'attente humaine au lieu de les accepter comme décisions. Un modèle qui admet l'incertitude est plus précieux qu'un qui la cache.
Liste de vérification avant le lancement
- [ ] Clé chargée depuis l'environnement ou un fichier en mode
600que votre VCS ignore - [ ] Critères
choicerévisés pour chevauchement - [ ] Seuil de confiance défini, avec un chemin de secours en dessous
- [ ] Réponses
noultraitées séparément — elles n'ont pas deconfidence - [ ] Questions inutilisées supprimées (3 questions coûtent 424 tokens d'entrée ; 2 coûtent 355)
- [ ] Réponses non-2xx enregistrées avec le corps brut
FAQ
Puis-je utiliser le SDK OpenAI ? Non. /v1/systemone n'est pas une route compatible avec OpenAI.
Jev peut-il retourner une phrase ou un résumé ? Non. Il répond uniquement aux questions tapées que vous définissez.
Combien de questions par requête ? Les tests vérifiés ont utilisé deux et trois. Chaque question ajoute des tokens d'entrée et de sortie, donc incluez uniquement ce sur quoi vous allez agir.
Y a-t-il un alias de version ? La page du modèle liste un alias jev-latest aux côtés de jev-1.13. Fixez la version explicite si la reproductibilité est importante.
Quel est le coût ? La page du modèle publie $0.0462 / M tokens d'entrée et $0 / M tokens de sortie. Ce sont des chiffres du fournisseur — confirmez les prix actuels avant de budgétiser.
Quelle est la fenêtre de contexte ? La page du modèle est incohérente : 64K dans son en-tête, 32K dans le tableau des fournisseurs. Vérifiez contre votre propre entrée la plus longue avant de vous fier à l'un ou l'autre.
Portée de ce guide
Tout ce qui précède a été vérifié avec trois appels en direct contre une seule entrée. Cela ne couvre pas la latence, le regroupement, le débit ou le comportement sur des entrées différentes de l'exemple. La dérive de confiance est une observation reproduite, pas un taux d'erreur mesuré — répétez-la sur vos propres données avant de définir un seuil.
Commencez sur AiHubMix
jev-1.13 est disponible via AiHubMix, et la page du modèle contient tout ce que ce tutoriel a référencé : le /v1/systemone point de terminaison, les trois types de questions avec leurs criteria formats, les champs de réponse complets, et les prix publiés de $0.0462 / M tokens d'entrée avec $0 / M tokens de sortie. L'alias jev-latest résout vers la dernière version, donc il reste à jour au fur et à mesure que les versions évoluent.
Commencez ici : https://aihubmix.com/model/jev-latest
Prochaines étapes :
- Créez un compte AiHubMix et générez une clé API
- Copiez la requête de l'étape 3 et la fonction
ask()de l'étape 4 - Remplacez
statepar un enregistrement réel de votre propre file d'attente - Comparez le résultat avec la façon dont vous classez cet enregistrement aujourd'hui
Si ce guide a été utile, abonnez-vous pour des futurs articles sur les modèles de sortie structurée et les pipelines de classification.



