Présentation du modèle
Jeeves est un classificateur de type Jev qui intègre un module de raisonnement avant de produire une décision. Le projet open source, publié par PostHog, repose sur le modèle Qwen3.5‑9B, adapté via LoRA et un pointer head. Il accepte trois types de requêtes – oui/non (noul), choix multiples (choice) et notation (score) – via une API compatible Jev, ce qui simplifie son intégration dans les pipelines existants.
Architecture et entraînement
Le cœur du système combine un « diffusion drafter » à quatre blocs et un entraînement supervisé fin (SFT) enrichi par la méthode CISPO, qui incite le modèle à « penser » avant de décider. Le drafter, stocké sous drafter_k4.safetensors, génère des chaînes de pensée limitées à 512 tokens lorsqu’on active l’option max_think. Le code d’exportation fusionne le checkpoint LoRA et le drafter en un seul fichier, facilitant le déploiement sur GPU CUDA, notamment les cartes Hopper avec noyau FP8.
python export.py runs/cispo/final --out runs/fused
python -m inference.serve --model runs/fused \
--drafter runs/drafter_k4/drafter.safetensors --port 8009Performances et comparaison
Sur un jeu de test hors‑domaine de 2 962 items, Jeeves atteint un score global de 0.889, surpassant Kev‑9B (0.822) et le modèle Jev original (0.857). Sur le benchmark public JevBench (231 items), le modèle obtient 0.935 contre 0.866 pour Jev, et 0.865 sur la version « hard » (111 items) contre 0.730. En moyenne, la latence passe de 0.3 s sans raisonnement à 3.3 s avec réflexion sur un H100, ce qui reste acceptable pour des applications interactives. Les gains sont particulièrement marqués sur les tâches de transfert (MMLU‑Pro) où Jeeves passe de 0.579 à 0.746.
Déploiement et limites
Le service s’installe avec Python 3.12 et un GPU CUDA compatible ; la commande pip install -r requirements.txt prépare l’environnement. Une requête typique, illustrée ci‑dessous, montre la réponse simultanée aux trois questions posées.
curl -s localhost:8009/v1/systemone -H 'content-type: application/json' -d '{
"state": "Shoes arrived late and wrong size.",
"questions": {
"department": {"type": "choice", "instructions": "Which team?"},
"escalate": {"type": "noul", "instructions": "Urgent?"},
"frustration": {"type": "score", "instructions": "Level?"}
},
"options": {"max_think": 512}
}'La principale contrainte réside dans le temps de réflexion, qui augmente proportionnellement à la longueur de la chaîne de pensée. Truncer la chaîne réduit la latence mais peut diminuer l’avantage de précision. De plus, le modèle dépend d’un GPU de dernière génération ; les performances sur des cartes plus anciennes ne sont pas détaillées dans la documentation.