Aller au contenu

Guides

Référence des résultats et de l’exécution

Ce qu’une exécution envoie à un système HTTP et attend en retour, comment chaque cas entre dans le dénominateur d’une métrique, les états de décision et les codes de raison qui les expliquent, les codes de sortie, et quelles données restent en local ou partent vers un espace de travail hébergé. Pour les idées qui les sous-tendent, lisez les Concepts ; pour les champs de la politique, lisez la Référence de configuration.

Le contrat d’un système HTTP

Un système HTTP (system.http dans oloproof.yaml) est appelé une fois par cas, et une fois par réplique.

AspectComportement
RequêtePOST par défaut (GET et PUT sont acceptés). Le corps est la valeur input du cas, en JSON.
En-têtes et authentificationAucun ne peut être configuré. La requête ne porte que les valeurs par défaut du client HTTP. Un point de terminaison qui exige une clé doit se placer derrière un système appelable Python qui l’ajoute.
RéponseDoit être du JSON. output_path sélectionne la sortie par un chemin pointé, comme result.answer ; sans lui, le corps entier est la sortie. Un champ output_path absent est enregistré comme une erreur d’exécution pour ce cas.
ArtefactsChaque entrée de http.artifacts lit un chemin pointé dans la réponse. Un champ déclaré absent d’une réponse est une erreur de contrat, et l’exécution s’arrête avec le code de sortie 2.
Délai d’attentehttp.timeout_s par requête, 30 secondes par défaut.
Nouvelles tentativesLes délais dépassés, les échecs de connexion et les réponses HTTP 408, 429 et 5xx sont retentés, jusqu’à quatre tentatives au total, avec un recul exponentiel aléatoire qui respecte Retry-After. Les autres réponses 4xx ne sont pas retentées.
Après la dernière tentativeL’exécution du cas est enregistrée comme une erreur et le cas compte comme manquant (ou comme échoué, avec on_execution_error: fail). L’exécution continue.
ConcurrenceAu plus concurrency.system requêtes en cours, 8 par défaut.

L’URL, la méthode, le chemin de sortie et la correspondance des artefacts entrent dans la version du système, mais pas ce que fait le serveur. Changez system.version chaque fois que le comportement du serveur change ; voyez la Référence de configuration pour comprendre pourquoi.

Trois vocabulaires différents

Un résultat a trois sortes d’état, et aucune ne remplace une autre.

SorteValeursRépond à
État de décisionPASS, FAIL, INSUFFICIENT_EVIDENCE, MANUAL_REVIEWCe que disent les preuves sur une règle.
État d’exécutionStatut d’exécution RUN_ERROR ou CANCELLED ; complétude d’exécution PARTIAL ; exécution d’un cas ERROR ou TIMEOUTCe qui est arrivé à l’exécution ou à l’appel d’un cas. Ce n’est pas un résultat de qualité.
Action de publicationALLOW, WARN, BLOCKCe que votre politique fait de chaque décision : les états de block_on bloquent, ceux de warn_on avertissent, les autres autorisent.

Une exécution qui se termine normalement est DECIDED, ou DECIDED_EARLY quand l’arrêt anticipé l’a terminée. Une exécution interrompue par Ctrl-C ou par l’annulation de la tâche est CANCELLED ; celle dont le harnais a levé une exception est RUN_ERROR. L’un comme l’autre laisse l’exécution PARTIAL, conserve les cas terminés, et permet à l’exécution suivante de réutiliser leurs enregistrements en cache. Voyez Erreurs.

Pour un seuil minimum T et un intervalle [L, U], une règle est PASS quand L >= T, FAIL quand U < T, et INSUFFICIENT_EVIDENCE sinon. Un seuil maximum est symétrique. Avant de lire l’intervalle, une règle vérifie si elle doit décider tout court : d’abord les raisons de MANUAL_REVIEW, puis celles de INSUFFICIENT_EVIDENCE. Le premier niveau qui a une raison décide, et liste toutes les raisons qu’il a trouvées.

Codes de raison

Chaque décision porte un ou plusieurs codes de raison.

MANUAL_REVIEW

CodeSignification
policy_requires_reviewLa règle fixe requires_manual_review: true.
unsupported_methodAucun intervalle admis n’existe pour cette métrique dans cette situation. Voyez plus bas.
unsupported_dependence_structureLa suite déclare des grappes (group_id) et aucune méthode admise ne les traite pour cette métrique.
approximate_method_not_permittedLe seul intervalle est approché, et la politique ne fixe pas allow_approximate_methods: true.
evaluator_retiredUn évaluateur derrière la métrique a été retiré.

INSUFFICIENT_EVIDENCE

CodeSignification
no_observationsAucun cas n’a été observé pour cette métrique.
missingness_exceeds_policyIl manque une part des cas éligibles supérieure à ce que permet le max_missing_fraction de la règle.
missingness_unboundedLa méthode écarte les cas manquants au lieu de les borner, et la règle ne déclare aucun max_missing_fraction.
evaluator_not_validatedUn juge modèle derrière la métrique n’a pas été validé contre des étiquettes humaines, et require_validated_evaluators est actif (par défaut).
evaluator_recalibration_requiredLe juge a été validé sur un modèle servi dont les verdicts de cette exécution ne proviennent pas.
interval_unavailableLa métrique n’a aucun intervalle à lire.
insufficient_clustersMoins de grappes que le min_clusters de la politique.
interval_monte_carlo_uncertainLe seuil tombe dans l’incertitude de simulation d’une borne en grappes.
interval_overlaps_thresholdL’intervalle contient le seuil. Davantage de cas le resserreraient.
interval_unboundedL’intervalle n’a pas de borne du côté que lit la règle.
missing_could_change_outcomeUne règle observed_count : les cas manquants pourraient porter les échecs au delà de max_failures.
interval_overlaps_zero, interval_overlaps_margin, interval_overlaps_marginsUne comparaison dont l’intervalle de différence chevauche zéro ou une marge.
insufficient_supportUne règle de comparaison de segment dont le segment a moins de cas que son min_support.
family_correction_withheldUne règle d’une entrée families: devant laquelle la correction de Holm s’est arrêtée.

PASS et FAIL

CodeÉtat
lower_bound_meets_minimum, upper_bound_meets_maximumPASS
upper_bound_below_minimum, lower_bound_above_maximumFAIL
observed_failures_within_limitPASS
observed_failures_exceed_limitFAIL
difference_above_zero, lower_bound_above_margin, interval_within_marginsPASS (comparaison)
difference_below_zero, upper_bound_below_margin, interval_outside_marginsFAIL (comparaison)
cost_ceiling_exceededIndiqué à côté de l’état d’une règle de coût dont une exécution enregistrée a dépassé le plafond déclaré

Espace de travail hébergé uniquement

Un espace de travail qui décide lui-même d’une exécution poussée peut retenir une décision avec ppi_not_verified (il n’a pas vérifié l’intervalle sur lequel repose la décision), execution_not_verified (les sorties ne viennent pas d’un exécuteur enregistré) ou workspace_cannot_decide (il ne détient aucune copie de la politique, ou n’a pas pu lire les preuves). Voyez Porte de CI.

Comment chaque cas entre dans le dénominateur

Chaque métrique rapporte quatre effectifs : n_total (cas de la suite), n_eligible, n_observed et n_missing, avec n_eligible = n_observed + n_missing. Les cas hors de n_eligible sont listés sous exclusions avec une raison.

Ce qui est arrivé au casCompte commeDans le dénominateur
L’évaluateur a rendu réussite ou échecobservé, réussite ou échecoui
L’évaluateur s’est déclaré non applicable (par exemple, aucune valeur attendue à comparer)exclu, avec la raisonnon
L’appel au système a échoué ou dépassé son délaimanquant, ou échec avec on_execution_error: failoui
L’évaluateur a levé une exception, ou la réponse d’un juge n’a pas pu être luemanquantoui
Le cas n’a jamais été exécuté parce que l’exécution a été interrompuemanquant, et l’exécution est PARTIALoui

Un cas manquant est borné, pas écarté. Pour un taux de réussite, la borne inférieure de l’intervalle traite chaque cas manquant comme un échec et sa borne supérieure comme une réussite, si bien qu’une exécution avec beaucoup de cas manquants a un intervalle large qui ne peut pas satisfaire une règle exigeante ; une moyenne bornée substitue de la même façon les extrémités de sa plage déclarée. Une méthode qui ne peut pas borner les cas manquants (une statistique de classement, par exemple) les écarte et enregistre l’hypothèse, et une règle qui s’y appuie lit missingness_unbounded tant qu’elle ne déclare pas max_missing_fraction.

Une règle observed_count compte les échecs sur la suite exécutée et ne lit aucun intervalle. Elle ne passe que lorsque les échecs observés plus tous les cas manquants tiennent encore dans max_failures.

Métriques sans intervalle admis

Une règle ne décide que sur un intervalle dont la méthode a été admise par audit. Là où il n’en existe pas, la métrique est quand même calculée et affichée, et une règle qui s’y appuie n’emprunte pas une méthode non validée :

SituationCe que lit une règle qui s’y appuie
Une métrique de score (moyenne) sans plage déclarée, comme un évaluateur de score personnalisé sans score_rangeMANUAL_REVIEW, unsupported_method
Une métrique de moyenne, de quantile, de classement ou de coût sur une suite qui déclare group_idMANUAL_REVIEW, unsupported_dependence_structure
Un taux de réussite sur une suite en grappesun intervalle approché : MANUAL_REVIEW sauf avec allow_approximate_methods: true, puis les vérifications de grappes ci-dessus
Une métrique de quantile ou de classement avec replicates supérieur à 1MANUAL_REVIEW, unsupported_method
Toute métrique sur une suite qui a à la fois group_id et des répliquesMANUAL_REVIEW, unsupported_dependence_structure
Une comparaison sur une suite en grappesMANUAL_REVIEW
Un segment sous min_slice_supportaucun intervalle, mais les segments n’atteignent jamais la porte
Les métriques human_score, human_preference ou cost_per_acceptedrefusées à la lecture du fichier, code de sortie 2

Codes de sortie

oloproof gate, oloproof run avec une politique, et les autres commandes qui décident utilisent tous les mêmes codes.

CodeSignification
0Rien sur quoi la politique bloque : chaque règle a réussi, ou celles qui n’ont pas réussi sont hors de block_on.
1Une règle de block_on a échoué.
2La configuration ou l’invocation était erronée, ou un système a rompu son contrat ; rien n’a été décidé.
3Une règle de block_on a lu INSUFFICIENT_EVIDENCE.
4Une règle de block_on a lu MANUAL_REVIEW.
5L’exécution ne s’est pas terminée et block_on_partial_run est actif (par défaut).

Quand plusieurs s’appliquent, le code rapporté est le premier de 1, 5, 4, 3. Un état absent de block_on ne peut pas changer le code de sortie : avec block_on: [FAIL] et warn_on: [INSUFFICIENT_EVIDENCE], une règle indécise avertit et la porte sort avec 0. Le code 0 signifie donc seulement que rien de ce sur quoi votre politique bloque ne s’est produit, et non que chaque règle a réussi. Voyez Porte de CI.

Où le travail s’exécute et où vont les données

En local, par défaut

oloproof run, oloproof gate et le SDK s’exécutent sur votre machine. Chaque enregistrement (cas, sorties, artefacts, jugements, métriques et décisions) est écrit dans .oloproof/store.sqlite à côté de oloproof.yaml, ou sous OLOPROOF_HOME s’il est défini. Rien n’est envoyé à Oloproof. Le seul trafic réseau est celui que provoque votre configuration : les appels à l’URL de votre système HTTP, et les appels qu’un juge modèle ou un classifieur modèle fait à son fournisseur, qui reçoit le contenu des cas qu’il juge et vous le facture.

Pousser vers un espace de travail hébergé

oloproof push envoie les preuves d’une exécution à l’espace de travail que vous avez connecté avec oloproof login. Par défaut, il envoie les métriques, les intervalles, les décisions et les segments agrégés, ainsi que l’identité, le statut, les durées et l’usage de chaque enregistrement, mais pas son contenu. Le contenu brut est expurgé champ par champ avant que quoi que ce soit ne quitte la machine, et un enregistrement expurgé indique quelles catégories ont été retenues. Une catégorie ne part que lorsque egress: dans oloproof.yaml la liste :

CatégorieCe qu’elle couvre
raw_inputsLes entrées des scénarios, les valeurs attendues et les métadonnées des cas : les lignes du jeu de données
raw_outputsCe que le système évalué a renvoyé pour chaque cas
judge_rationalesLe texte qu’un juge a écrit pour expliquer un verdict, qui cite la sortie
artifactsLe contexte de récupération, les citations et les trajectoires enregistrés pendant une exécution
error_detailLes messages et détails d’exception, qui portent souvent l’entrée mot pour mot
system_configLa configuration déclarée du système évalué et de ses évaluateurs
label_notesLa note qu’une personne a écrite à côté d’une étiquette, qui cite souvent la sortie
span_namesLes noms de traces, de spans, d’outils et d’agents qu’une instrumentation a enregistrés

Les empreintes des enregistrements ne sont pas recalculées après l’expurgation, si bien qu’un enregistrement hébergé désigne toujours les preuves d’origine, qui restent sur votre machine. L’expurgation n’est pas un chiffrement, et une métrique sur un très petit segment peut encore identifier les cas qui la composent.

Quand des relecteurs étiquettent des cas dans la file de relecture hébergée, leur navigateur récupère le contenu des cas auprès de oloproof collect qui tourne de votre côté ; il ne passe pas par l’espace de travail. Les clés de fournisseur qu’utilise un espace de travail sont stockées avec oloproof credentials set, et oloproof credentials list affiche leurs noms, jamais leurs valeurs. Une tâche gérée s’exécute sur un worker qu’exploite Oloproof, qui n’exécute pas votre code Python ; oloproof job rapporte son résultat et sort selon sa porte.

Dans un espace de travail hébergé, le moteur ne réutilise jamais les exécutions, jugements ou analyses en cache, parce qu’un push peut écrire dans ces caches ; il les recalcule.