Comparaisons A/B
L'écran Comparaisons A/B vous permet d'exécuter une suite d'évaluation sur une référence et sur un candidat (deux modèles, deux versions de modèle, deux agents ou deux prompts) et de lire les écarts par métrique et le verdict. Chemin dans le portail : /quality/comparisons. Les développeurs, les responsables sécurité et les administrateurs du tenant comparent avant de changer une route ou une version ; les auditeurs et la FinOps lisent les résultats. L'écran est dessiné par portal/src/screens/kit-data.tsx.
Ce que montre l'écran
- Tableau Comparaisons, lu par
GET /v1/evaluations/comparisons(les 200 plus récentes, en un appel). Colonnes : Identifiant, Suite, Référence, Candidat, Verdict, Créé. - Filtre Suite (identifiant de suite), puis Filtrer.
- Liste vide : Aucune comparaison, avec l'aide Comparez un candidat à une référence sur une suite., et le bouton Nouvelle comparaison pour les rôles autorisés à créer.
- Un clic sur une ligne, ou Voir le détail, ouvre un panneau latéral avec
GET /v1/evaluations/comparisons/{comparison_id}: référence, candidat, les deux identifiants d'exécution, les lignes par métrique (metric,baseline,candidate,delta,comparator,threshold), la tolérance et le verdict. - Nouvelle comparaison ouvre un panneau latéral avec Suite (obligatoire), Référence (JSON, obligatoire, défaut
{"type": "model", "ref": "", "version": ""}), Candidat (JSON, obligatoire, même défaut), Tolérance (nombre de 0 à 1) et Sorties (JSON, défaut{"baseline": [], "candidate": []}).
Les verdicts (services/control-plane/src/eai/domains/evaluation/ab.py) :
| Verdict | Signification |
|---|---|
regression | Au moins une métrique est moins bonne que la référence de plus que la tolérance. |
candidate_better | Aucune métrique n'est moins bonne, et au moins une est meilleure de plus que la tolérance. |
equivalent | Tous les écarts restent dans la tolérance. |
inconclusive | L'une des deux exécutions a fini en erreur, ou une métrique n'a pas de score d'un côté. |
Actions
| Bouton ou action | Ce qu'il fait | Appel d'API | Rôles |
|---|---|---|---|
| Actualiser (icône) | Recharge la liste. | GET /v1/evaluations/comparisons | tenant_admin, developer, security_officer, auditor, viewer, finops |
| Filtrer | Garde les comparaisons d'une suite. | GET /v1/evaluations/comparisons avec suite_id | Comme Actualiser |
| Nouvelle comparaison (masqué pour les autres rôles) | Exécute la suite sur la référence, puis sur le candidat, calcule les écarts orientés par le comparateur de chaque métrique et enregistre le verdict. | POST /v1/evaluations/comparisons | tenant_admin, developer, security_officer |
| Clic sur une ligne ou Voir le détail | Ouvre la comparaison. | GET /v1/evaluations/comparisons/{comparison_id} | Comme Actualiser |
| Réessayer (état d'erreur) | Relance la lecture qui a échoué. | Même appel | Mêmes rôles |
Exemple des champs Référence et Candidat pour deux versions d'un même modèle :
{"type": "model", "ref": "llama-3-1-70b-local", "version": "2026-01"}
Le type vaut model, agent ou prompt ; la référence et le candidat doivent différer. Avec Sorties, chaque côté est noté sur les réponses que vous donnez (une par cas, dans l'ordre) au lieu d'appeler la cible.
Rôles
C'est le seul écran de ce groupe où le portail masque lui-même un bouton : Nouvelle comparaison ne s'affiche que pour ROLES.comparisonWriters de portal/src/lib/kit.ts (tenant_admin, developer, security_officer). Le serveur contrôle les mêmes WRITE_ROLES à la création et les READ_ROLES (tenant_admin, developer, security_officer, auditor, viewer, finops) sur la liste et le détail (services/control-plane/src/eai/domains/evaluation/ab.py). platform_admin passe tous les contrôles de rôle.
Tâches courantes
Comparer une nouvelle version de modèle à la version actuelle
- Choisir la suite. La comparaison réutilise les cas et les métriques d'une suite. Copiez l'
evaluation_idd'une suite depuis Suites d'évaluation. Résultat attendu : vous avez l'identifiant. En cas d'échec : créez d'abord une suite. - Décrire les deux côtés. La référence est ce qui tourne aujourd'hui. Cliquez sur Nouvelle comparaison, collez Suite, écrivez Référence et Candidat en JSON avec
type,refetversion, fixez une Tolérance comme 0.02, puis cliquez sur Créer. Résultat attendu : le message Créé et une ligne avec son Verdict. En cas d'échec :comparison_invalid(422) nomme le champ en cause (baseline,candidate,tolerance,outputs). - Lire les écarts. Le verdict résume, les écarts expliquent. Cliquez sur la ligne et lisez
metrics. Résultat attendu : aucune ligne avec une perte supérieure à la tolérance. En cas d'échec : un verdictregressionsignifie que le candidat ne doit pas encore remplacer la référence.
Revoir les comparaisons passées d'une suite
- Filtrer par suite. Chaque suite garde son historique. Saisissez l'identifiant de la suite dans Suite et cliquez sur Filtrer. Résultat attendu : les comparaisons de la suite, les plus récentes d'abord. En cas d'échec :
comparison_not_found(404) signifie que l'identifiant n'est pas un identifiant de suite valide.
Dépannage
| Symptôme | Cause | Correction |
|---|---|---|
comparison_invalid (422) : « La comparaison d'évaluation est invalide : ... » | Un côté n'a pas de ref, un type n'est pas model, agent ou prompt, les deux côtés sont égaux, la tolérance sort de 0 à 1, ou Sorties n'est pas un objet. | Corrigez le champ nommé après les deux-points. |
not_found (404) sur Créer | L'identifiant de suite n'existe pas. | Copiez evaluation_id depuis la suite. |
Verdict inconclusive | Une exécution a fini en erreur, ou une métrique n'a pas de score. | Ouvrez les deux exécutions dans Exécutions d'évaluation et lisez leur error. |
| Nouvelle comparaison absent | Vos rôles ne sont pas tenant_admin, developer ou security_officer. | Demandez l'un de ces rôles. |
forbidden (403) sur la liste | Vos rôles ne font pas partie des lecteurs. | Demandez viewer ou auditor. |