Vai al contenuto

Guide

Riferimento dei risultati e dell'esecuzione

Che cosa un'esecuzione invia a un sistema HTTP e che cosa si aspetta in risposta, come ogni caso entra nel denominatore di una metrica, gli stati di decisione e i codici di motivo che li spiegano, i codici di uscita, e quali dati restano in locale o si spostano in uno spazio di lavoro ospitato. Per le idee alla base leggi Concetti; per i campi della policy leggi il Riferimento della configurazione.

Il contratto del sistema HTTP

Un sistema HTTP (system.http in oloproof.yaml) viene chiamato una volta per caso, e una volta per replica.

AspettoComportamento
RichiestaPOST per impostazione predefinita (sono accettati GET e PUT). Il corpo è il valore input del caso come JSON.
Header e autenticazioneNessuno è configurabile. La richiesta porta solo i valori predefiniti del client HTTP. Un endpoint che richiede una chiave va messo dietro un sistema Python callable che la aggiunge.
RispostaDeve essere JSON. output_path seleziona l'output tramite un percorso puntato, come result.answer; senza di esso l'output è l'intero corpo. Un campo output_path mancante viene registrato come errore di esecuzione per quel caso.
ArtefattiOgni voce di http.artifacts legge un percorso puntato dalla risposta. Un campo dichiarato che manca da una risposta è un errore di contratto, e l'esecuzione si ferma con uscita 2.
Timeouthttp.timeout_s per richiesta, 30 secondi per impostazione predefinita.
Tentativi ripetutiTimeout, errori di connessione e HTTP 408, 429 e 5xx vengono ritentati, fino a quattro tentativi in tutto, con backoff esponenziale con jitter che rispetta Retry-After. Le altre risposte 4xx non vengono ritentate.
Dopo l'ultimo tentativoL'esecuzione del caso viene registrata come errore e il caso conta come mancante (o come fallito, con on_execution_error: fail). L'esecuzione continua.
ConcorrenzaAl massimo concurrency.system richieste in corso, 8 per impostazione predefinita.

L'URL, il metodo, il percorso dell'output e la mappatura degli artefatti entrano nella versione del sistema, ma ciò che fa il server no. Cambia system.version ogni volta che cambia il comportamento del server; il Riferimento della configurazione spiega perché.

Tre vocabolari diversi

Un risultato ha tre tipi di stato, e nessuno sostituisce mai un altro.

TipoValoriRisponde a
Stato di decisionePASS, FAIL, INSUFFICIENT_EVIDENCE, MANUAL_REVIEWChe cosa dicono le evidenze su una regola.
Stato di esecuzioneStato dell'esecuzione RUN_ERROR o CANCELLED; completezza dell'esecuzione PARTIAL; esecuzione del caso ERROR o TIMEOUTChe cosa è accaduto all'esecuzione o alla chiamata di un caso. Non è un risultato di qualità.
Azione di rilascioALLOW, WARN, BLOCKChe cosa fa la tua policy di ogni decisione: gli stati in block_on bloccano, quelli in warn_on avvisano, gli altri lasciano passare.

Un'esecuzione che termina normalmente è DECIDED, oppure DECIDED_EARLY quando l'arresto anticipato l'ha conclusa. Un'esecuzione interrotta da Ctrl-C o dalla cancellazione del task è CANCELLED; una il cui harness ha sollevato un'eccezione è RUN_ERROR. In entrambi i casi l'esecuzione resta PARTIAL, conserva i casi terminati e permette all'esecuzione successiva di riutilizzarne i record in cache. Vedi Errori.

Per una soglia minima T e un intervallo [L, U], una regola è PASS quando L >= T, FAIL quando U < T, e INSUFFICIENT_EVIDENCE altrimenti. Una soglia massima è simmetrica. Prima di leggere l'intervallo, una regola verifica se debba decidere del tutto: prima i motivi per MANUAL_REVIEW, poi quelli per INSUFFICIENT_EVIDENCE. Decide il primo livello che ha un motivo, ed elenca ogni motivo trovato.

Codici di motivo

Ogni decisione porta uno o più codici di motivo.

MANUAL_REVIEW

CodiceSignificato
policy_requires_reviewLa regola imposta requires_manual_review: true.
unsupported_methodNon esiste un intervallo ammesso per questa metrica in questa situazione. Vedi sotto.
unsupported_dependence_structureLa suite dichiara cluster (group_id) e nessun metodo ammesso li gestisce per questa metrica.
approximate_method_not_permittedL'unico intervallo è approssimato, e la policy non imposta allow_approximate_methods: true.
evaluator_retiredUn valutatore dietro la metrica è stato ritirato.

INSUFFICIENT_EVIDENCE

CodiceSignificato
no_observationsNessun caso è stato osservato per questa metrica.
missingness_exceeds_policyMancano più casi idonei di quanti ne consenta il max_missing_fraction della regola.
missingness_unboundedIl metodo scarta i casi mancanti anziché delimitarli, e la regola non dichiara max_missing_fraction.
evaluator_not_validatedUn giudice basato su modello dietro la metrica non è stato validato rispetto a etichette umane, e require_validated_evaluators è attivo (l'impostazione predefinita).
evaluator_recalibration_requiredIl giudice è stato validato su un modello servito da cui non provengono i verdetti di questa esecuzione.
interval_unavailableLa metrica non ha un intervallo da leggere.
insufficient_clustersMeno cluster del min_clusters della policy.
interval_monte_carlo_uncertainLa soglia cade dentro l'incertezza di simulazione di un limite per cluster.
interval_overlaps_thresholdL'intervallo contiene la soglia. Più casi lo restringerebbero.
interval_unboundedL'intervallo non ha un limite dal lato che la regola legge.
missing_could_change_outcomeUna regola observed_count: i casi mancanti potrebbero portare i fallimenti oltre max_failures.
interval_overlaps_zero, interval_overlaps_margin, interval_overlaps_marginsUn confronto il cui intervallo della differenza sta a cavallo dello zero o di un margine.
insufficient_supportUna regola di confronto per slice la cui slice ha meno casi del suo min_support.
family_correction_withheldUna regola in una voce families: prima della quale la correzione di Holm si è fermata.

PASS e FAIL

CodiceStato
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 (confronto)
difference_below_zero, upper_bound_below_margin, interval_outside_marginsFAIL (confronto)
cost_ceiling_exceededIndicato accanto allo stato di una regola di costo il cui tetto dichiarato è stato superato da un'esecuzione registrata

Solo spazio di lavoro ospitato

Uno spazio di lavoro che decide da sé un'esecuzione ricevuta via push può trattenere una decisione con ppi_not_verified (non ha verificato l'intervallo su cui la decisione si basa), execution_not_verified (gli output non provengono da un runner registrato) o workspace_cannot_decide (non ha una copia della policy, o non ha potuto leggere le evidenze). Vedi Gating.

Come ogni caso entra nel denominatore

Ogni metrica riporta quattro conteggi: n_total (casi nella suite), n_eligible, n_observed e n_missing, con n_eligible = n_observed + n_missing. I casi fuori da n_eligible sono elencati sotto exclusions con un motivo.

Che cosa è successo al casoConta comeNel denominatore
Il valutatore ha restituito successo o fallimentoosservato, successo o fallimentosì
Il valutatore si è dichiarato non applicabile (per esempio, nessun valore atteso da confrontare)escluso, con il motivono
La chiamata al sistema è andata in errore o in timeoutmancante, o fallimento con on_execution_error: failsì
Il valutatore ha sollevato un'eccezione, o la risposta di un giudice non era leggibilemancantesì
Il caso non è mai stato eseguito perché l'esecuzione è stata interrottamancante, e l'esecuzione è PARTIALsì

Un caso mancante viene delimitato, non scartato. Per un tasso di successo il limite inferiore dell'intervallo tratta ogni caso mancante come un fallimento e il limite superiore come un successo, quindi un'esecuzione con molti casi mancanti ha un intervallo ampio che non può superare una regola esigente; una media delimitata sostituisce allo stesso modo gli estremi del suo intervallo dichiarato. Un metodo che non può delimitare i casi mancanti (una statistica di ranking, per esempio) li scarta e registra l'assunzione, e una regola su di esso riporta missingness_unbounded finché non dichiara max_missing_fraction.

Una regola observed_count conta i fallimenti sulla suite eseguita e non legge alcun intervallo. Passa solo quando i fallimenti osservati più ogni caso mancante rientrano ancora in max_failures.

Metriche senza un intervallo ammesso

Una regola decide solo su un intervallo il cui metodo è stato ammesso tramite audit. Dove non ne esiste uno, la metrica viene comunque calcolata e mostrata, e una regola su di essa non prende in prestito un metodo non validato:

SituazioneChe cosa riporta una regola su di essa
Una metrica di punteggio (media) senza intervallo di valori dichiarato, come un valutatore di punteggio personalizzato senza score_rangeMANUAL_REVIEW, unsupported_method
Una metrica di media, quantile, ranking o costo su una suite che dichiara group_idMANUAL_REVIEW, unsupported_dependence_structure
Un tasso di successo su una suite con clusterun intervallo approssimato: MANUAL_REVIEW a meno di allow_approximate_methods: true, poi i controlli sui cluster sopra
Una metrica di quantile o ranking con replicates sopra 1MANUAL_REVIEW, unsupported_method
Qualsiasi metrica su una suite con sia group_id sia replicheMANUAL_REVIEW, unsupported_dependence_structure
Un confronto su una suite con clusterMANUAL_REVIEW
Una slice sotto min_slice_supportnessun intervallo, ma le slice non arrivano mai al gate
Metriche human_score, human_preference o cost_per_acceptedrifiutate quando il file viene letto, uscita 2

Codici di uscita

oloproof gate, oloproof run con una policy e gli altri comandi che decidono usano tutti gli stessi codici.

CodiceSignificato
0Nulla su cui la policy blocca: ogni regola è passata, oppure quelle che non lo hanno fatto sono fuori da block_on.
1Una regola in block_on è fallita.
2La configurazione o l'invocazione era sbagliata, o un sistema ha violato il suo contratto; non è stato deciso nulla.
3Una regola in block_on ha riportato INSUFFICIENT_EVIDENCE.
4Una regola in block_on ha riportato MANUAL_REVIEW.
5L'esecuzione non è stata completata e block_on_partial_run è attivo (l'impostazione predefinita).

Quando ne valgono diversi, il codice riportato è il primo tra 1, 5, 4, 3. Uno stato lasciato fuori da block_on non può cambiare il codice di uscita: con block_on: [FAIL] e warn_on: [INSUFFICIENT_EVIDENCE], una regola indecisa avvisa e il gate esce con 0. L'uscita 0 significa quindi solo che non si è verificato nulla su cui la tua policy blocca, non che ogni regola è passata. Vedi Gating.

Dove gira il lavoro e dove vanno i dati

In locale, l'impostazione predefinita

oloproof run, oloproof gate e l'SDK girano sulla tua macchina. Ogni record (casi, output, artefatti, giudizi, metriche e decisioni) viene scritto in .oloproof/store.sqlite accanto a oloproof.yaml, o sotto OLOPROOF_HOME quando è impostata. Nulla viene inviato a Oloproof. L'unico traffico di rete è quello causato dalla tua configurazione: le chiamate all'URL del tuo sistema HTTP, e le chiamate che un giudice basato su modello o un classificatore basato su modello fa al proprio provider, che riceve il contenuto dei casi che giudica e te lo fattura.

Push in uno spazio di lavoro ospitato

oloproof push invia le evidenze di un'esecuzione allo spazio di lavoro che hai collegato con oloproof login. Per impostazione predefinita invia metriche, intervalli, decisioni e slice aggregate, e l'identità, lo stato, i tempi e l'utilizzo di ogni record, ma non il suo contenuto. Il contenuto grezzo viene oscurato campo per campo prima che qualsiasi cosa lasci la macchina, e un record oscurato dice quali categorie sono state trattenute. Una categoria viene inviata solo quando egress: in oloproof.yaml la elenca:

CategoriaChe cosa copre
raw_inputsInput degli scenari, valori attesi e metadati dei casi: le righe del dataset
raw_outputsCiò che il sistema sotto test ha restituito per ogni caso
judge_rationalesIl testo che un giudice ha scritto per spiegare un verdetto, che cita l'output
artifactsContesto di recupero, citazioni e traiettorie registrati durante un'esecuzione
error_detailMessaggi e dettagli delle eccezioni, che spesso riportano l'input alla lettera
system_configLa configurazione dichiarata del sistema sotto test e dei suoi valutatori
label_notesLa nota che una persona ha scritto accanto a un'etichetta, che spesso cita l'output
span_namesNomi di trace, span, strumenti e agenti registrati da una strumentazione

I digest dei record non vengono ricalcolati dopo l'oscuramento, quindi un record ospitato nomina ancora le evidenze originali, che restano sulla tua macchina. L'oscuramento non è cifratura, e una metrica su una slice molto piccola può ancora identificare i casi che vi stanno dietro.

Quando i revisori etichettano casi nella coda di revisione ospitata, il loro browser recupera il contenuto dei casi da oloproof collect in esecuzione dalla tua parte; non passa attraverso lo spazio di lavoro. Le chiavi dei provider che uno spazio di lavoro usa vengono memorizzate con oloproof credentials set, e oloproof credentials list ne mostra i nomi, mai i valori. Un job gestito gira su un worker gestito da Oloproof, che non esegue il tuo codice Python; oloproof job ne riporta il risultato ed esce sul suo gate.

In uno spazio di lavoro ospitato il motore non riutilizza mai esecuzioni, giudizi o analisi in cache, perché un push può scrivere quelle cache; li ricalcola.