Zum Inhalt springen

Anleitungen

Referenz: Ergebnisse und Ausführung

Was ein Lauf an ein HTTP-System sendet und zurückerwartet, wie jeder Fall in den Nenner einer Metrik eingeht, die Entscheidungszustände und die Begründungscodes, die sie erklären, die Exit-Codes und welche Daten lokal bleiben oder in einen gehosteten Workspace wandern. Die Ideen dahinter stehen in Konzepte; die Policy-Felder in der Konfigurationsreferenz.

Der Vertrag eines HTTP-Systems

Ein HTTP-System (system.http in oloproof.yaml) wird einmal pro Fall und einmal pro Replikat aufgerufen.

AspektVerhalten
AnfrageStandardmäßig POST (GET und PUT werden akzeptiert). Der Body ist der input-Wert des Falls als JSON.
Header und AuthentifizierungKeine konfigurierbar. Die Anfrage trägt nur die Standardwerte des HTTP-Clients. Ein Endpunkt, der einen Schlüssel braucht, gehört hinter ein Python-Callable-System, das ihn hinzufügt.
AntwortMuss JSON sein. output_path wählt die Ausgabe über einen Punktpfad wie result.answer; ohne ihn ist der ganze Body die Ausgabe. Ein fehlendes output_path-Feld wird als Ausführungsfehler für diesen Fall aufgezeichnet.
ArtefakteJeder http.artifacts-Eintrag liest einen Punktpfad aus der Antwort. Ein deklariertes Feld, das in einer Antwort fehlt, ist ein Vertragsfehler, und der Lauf stoppt mit Exit 2.
Timeouthttp.timeout_s pro Anfrage, standardmäßig 30 Sekunden.
WiederholungenTimeouts, Verbindungsfehler und HTTP 408, 429 und 5xx werden wiederholt, insgesamt bis zu vier Versuche, mit zufällig gestreutem exponentiellem Backoff, der Retry-After beachtet. Andere 4xx-Antworten werden nicht wiederholt.
Nach dem letzten VersuchDie Ausführung des Falls wird als Fehler aufgezeichnet, und der Fall zählt als fehlend (oder als fehlgeschlagen unter on_execution_error: fail). Der Lauf geht weiter.
NebenläufigkeitHöchstens concurrency.system Anfragen gleichzeitig, standardmäßig 8.

URL, Methode, Ausgabepfad und Artefakt-Zuordnung gehen in die Version des Systems ein, das Verhalten des Servers aber nicht. Ändern Sie system.version, wann immer sich das Verhalten des Servers ändert; warum, steht in der Konfigurationsreferenz.

Drei verschiedene Vokabulare

Ein Ergebnis hat drei Arten von Zustand, und keine steht für eine andere.

ArtWerteBeantwortet
EntscheidungszustandPASS, FAIL, INSUFFICIENT_EVIDENCE, MANUAL_REVIEWWas die Evidenz über eine Regel sagt.
AusführungszustandLaufstatus RUN_ERROR oder CANCELLED; Lauf-Vollständigkeit PARTIAL; Fallausführung ERROR oder TIMEOUTWas mit dem Lauf oder dem Aufruf eines Falls geschah. Kein Qualitätsergebnis.
Release-AktionALLOW, WARN, BLOCKWas Ihre Policy mit jeder Entscheidung tut: Zustände in block_on blockieren, Zustände in warn_on warnen, andere lassen durch.

Ein Lauf, der normal endet, ist DECIDED, oder DECIDED_EARLY, wenn ein frühes Stoppen ihn beendet hat. Ein Lauf, der durch Ctrl-C oder Task-Abbruch unterbrochen wurde, ist CANCELLED; einer, dessen Harness eine Ausnahme warf, ist RUN_ERROR. Beides lässt den Lauf PARTIAL, behält die abgeschlossenen Fälle und erlaubt dem nächsten Lauf, ihre gecachten Datensätze wiederzuverwenden. Siehe Fehler.

Für eine Mindestschwelle T und ein Intervall [L, U] ist eine Regel PASS, wenn L >= T, FAIL, wenn U < T, und sonst INSUFFICIENT_EVIDENCE. Eine Höchstschwelle ist symmetrisch. Bevor sie das Intervall liest, prüft eine Regel, ob sie überhaupt entscheiden soll: zuerst die Gründe für MANUAL_REVIEW, dann die für INSUFFICIENT_EVIDENCE. Die erste Stufe mit einem Grund entscheidet und listet jeden Grund auf, den sie gefunden hat.

Begründungscodes

Jede Entscheidung trägt einen oder mehrere Begründungscodes.

MANUAL_REVIEW

CodeBedeutung
policy_requires_reviewDie Regel setzt requires_manual_review: true.
unsupported_methodFür diese Metrik gibt es in dieser Situation kein zugelassenes Intervall. Siehe unten.
unsupported_dependence_structureDie Suite deklariert Cluster (group_id), und keine zugelassene Methode behandelt sie für diese Metrik.
approximate_method_not_permittedDas einzige Intervall ist approximativ, und die Policy setzt nicht allow_approximate_methods: true.
evaluator_retiredEin Evaluator hinter der Metrik wurde stillgelegt.

INSUFFICIENT_EVIDENCE

CodeBedeutung
no_observationsFür diese Metrik wurde kein Fall beobachtet.
missingness_exceeds_policyMehr der zulässigen Fälle fehlen, als max_missing_fraction der Regel erlaubt.
missingness_unboundedDie Methode lässt fehlende Fälle weg, statt sie zu begrenzen, und die Regel deklariert kein max_missing_fraction.
evaluator_not_validatedEin Modell-Judge hinter der Metrik wurde nicht gegen menschliche Labels validiert, und require_validated_evaluators ist an (der Standard).
evaluator_recalibration_requiredDer Judge wurde auf einem bereitgestellten Modell validiert, von dem die Urteile dieses Laufs nicht stammen.
interval_unavailableDie Metrik hat kein Intervall zum Lesen.
insufficient_clustersWeniger Cluster als min_clusters der Policy.
interval_monte_carlo_uncertainDie Schwelle liegt innerhalb der Simulationsunsicherheit einer geclusterten Schranke.
interval_overlaps_thresholdDas Intervall enthält die Schwelle. Mehr Fälle würden es verengen.
interval_unboundedDas Intervall hat keine Schranke auf der Seite, die die Regel liest.
missing_could_change_outcomeEine observed_count-Regel: Die fehlenden Fälle könnten die Fehlschläge über max_failures bringen.
interval_overlaps_zero, interval_overlaps_margin, interval_overlaps_marginsEin Vergleich, dessen Differenzintervall null oder eine Marge überspannt.
insufficient_supportEine Slice-Vergleichsregel, deren Slice weniger Fälle hat als ihr min_support.
family_correction_withheldEine Regel in einem families:-Eintrag, vor der die Holm-Korrektur angehalten hat.

PASS und FAIL

CodeZustand
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 (Vergleich)
difference_below_zero, upper_bound_below_margin, interval_outside_marginsFAIL (Vergleich)
cost_ceiling_exceededSteht neben dem Zustand einer Kostenregel, deren deklarierte Obergrenze eine aufgezeichnete Ausführung überschritten hat

Nur im gehosteten Workspace

Ein Workspace, der einen gepushten Lauf selbst entscheidet, kann eine Entscheidung zurückhalten mit ppi_not_verified (er hat das Intervall, auf dem die Entscheidung beruht, nicht verifiziert), execution_not_verified (die Ausgaben stammen nicht von einem registrierten Runner) oder workspace_cannot_decide (er hält keine Kopie der Policy oder konnte die Evidenz nicht lesen). Siehe Gating.

Wie jeder Fall in den Nenner eingeht

Jede Metrik meldet vier Zählungen: n_total (Fälle in der Suite), n_eligible, n_observed und n_missing, mit n_eligible = n_observed + n_missing. Fälle außerhalb von n_eligible stehen unter exclusions mit einem Grund.

Was mit dem Fall geschahZählt alsIm Nenner
Der Evaluator lieferte bestanden oder nicht bestandenbeobachtet, Erfolg oder Fehlschlagja
Der Evaluator erklärte sich für nicht anwendbar (zum Beispiel kein erwarteter Wert zum Vergleichen)ausgeschlossen, mit Grundnein
Der Systemaufruf schlug fehl oder lief in ein Timeoutfehlend, oder Fehlschlag unter on_execution_error: failja
Der Evaluator warf eine Ausnahme, oder die Antwort eines Judges war nicht lesbarfehlendja
Der Fall lief nie, weil der Lauf unterbrochen wurdefehlend, und der Lauf ist PARTIALja

Ein fehlender Fall wird begrenzt, nicht weggelassen. Für eine Bestehensrate behandelt die untere Schranke des Intervalls jeden fehlenden Fall als Fehlschlag und die obere als Erfolg, sodass ein Lauf mit vielen fehlenden Fällen ein breites Intervall hat, das keine anspruchsvolle Regel bestehen kann; ein begrenzter Mittelwert setzt auf dieselbe Weise die Enden seines deklarierten Bereichs ein. Eine Methode, die fehlende Fälle nicht begrenzen kann (etwa eine Ranking-Statistik), lässt sie weg und zeichnet die Annahme auf, und eine Regel darüber liest missingness_unbounded, bis sie max_missing_fraction deklariert.

Eine observed_count-Regel zählt Fehlschläge über die ausgeführte Suite und liest kein Intervall. Sie besteht nur, wenn die beobachteten Fehlschläge plus jeder fehlende Fall noch in max_failures passen.

Metriken ohne zugelassenes Intervall

Eine Regel entscheidet nur auf einem Intervall, dessen Methode durch ein Audit zugelassen wurde. Wo keines existiert, wird die Metrik trotzdem berechnet und angezeigt, und eine Regel darüber leiht sich keine unvalidierte Methode:

SituationWas eine Regel darüber liest
Eine Score-Metrik (Mittelwert) ohne deklarierten Bereich, etwa ein eigener Score-Evaluator ohne score_rangeMANUAL_REVIEW, unsupported_method
Eine Mittelwert-, Quantil-, Ranking- oder Kostenmetrik auf einer Suite, die group_id deklariertMANUAL_REVIEW, unsupported_dependence_structure
Eine Bestehensrate auf einer geclusterten Suiteein approximatives Intervall: MANUAL_REVIEW, außer bei allow_approximate_methods: true, dann die Cluster-Prüfungen oben
Eine Quantil- oder Ranking-Metrik mit replicates über 1MANUAL_REVIEW, unsupported_method
Jede Metrik auf einer Suite mit group_id und Replikaten zugleichMANUAL_REVIEW, unsupported_dependence_structure
Ein Vergleich auf einer geclusterten SuiteMANUAL_REVIEW
Ein Slice unter min_slice_supportkein Intervall, aber Slices erreichen das Gate nie
Metriken human_score, human_preference oder cost_per_acceptedbeim Lesen der Datei abgewiesen, Exit 2

Exit-Codes

oloproof gate, oloproof run mit einer Policy und die anderen entscheidenden Befehle verwenden alle dieselben Codes.

CodeBedeutung
0Nichts, worauf die Policy blockiert: Jede Regel hat bestanden, oder die übrigen liegen außerhalb von block_on.
1Eine Regel in block_on ist durchgefallen.
2Die Konfiguration oder der Aufruf war falsch, oder ein System hat seinen Vertrag gebrochen; nichts wurde entschieden.
3Eine Regel in block_on las INSUFFICIENT_EVIDENCE.
4Eine Regel in block_on las MANUAL_REVIEW.
5Der Lauf wurde nicht abgeschlossen, und block_on_partial_run ist an (der Standard).

Wenn mehrere zutreffen, wird der erste von 1, 5, 4, 3 gemeldet. Ein Zustand, der nicht in block_on steht, kann den Exit-Code nicht ändern: Mit block_on: [FAIL] und warn_on: [INSUFFICIENT_EVIDENCE] warnt eine unentschiedene Regel, und das Gate endet mit 0. Exit 0 bedeutet daher nur, dass nichts eingetreten ist, worauf Ihre Policy blockiert, nicht dass jede Regel bestanden hat. Siehe Gating.

Wo die Arbeit läuft und wohin die Daten gehen

Lokal, der Standard

oloproof run, oloproof gate und das SDK laufen auf Ihrem Rechner. Jeder Datensatz (Fälle, Ausgaben, Artefakte, Urteile, Metriken und Entscheidungen) wird in .oloproof/store.sqlite neben oloproof.yaml geschrieben, oder unter OLOPROOF_HOME, wenn gesetzt. Nichts wird an Oloproof gesendet. Der einzige Netzwerkverkehr ist der, den Ihre Konfiguration verursacht: Aufrufe an die URL Ihres HTTP-Systems und Aufrufe, die ein Modell-Judge oder Modell-Klassifikator an seinen Provider macht, der den beurteilten Fallinhalt erhält und Ihnen dafür Rechnung stellt.

In einen gehosteten Workspace pushen

oloproof push sendet die Evidenz eines Laufs an den Workspace, den Sie mit oloproof login verbunden haben. Standardmäßig sendet es Metriken, Intervalle, Entscheidungen und aggregierte Slices sowie Identität, Status, Zeiten und Verbrauch jedes Datensatzes, aber nicht seinen Inhalt. Roher Inhalt wird Feld für Feld geschwärzt, bevor irgendetwas den Rechner verlässt, und ein geschwärzter Datensatz sagt, welche Kategorien zurückgehalten wurden. Eine Kategorie geht nur mit, wenn egress: in oloproof.yaml sie aufführt:

KategorieWas sie umfasst
raw_inputsSzenario-Eingaben, erwartete Werte und Fall-Metadaten: die Zeilen des Datensatzes
raw_outputsWas das getestete System für jeden Fall zurückgab
judge_rationalesDer Text, mit dem ein Judge ein Urteil begründet hat und der die Ausgabe zitiert
artifactsRetrieval-Kontext, Zitate und Trajektorien, die während eines Laufs aufgezeichnet wurden
error_detailAusnahmemeldungen und Details, die oft die Eingabe wörtlich enthalten
system_configDie deklarierte Konfiguration des getesteten Systems und seiner Evaluatoren
label_notesDie Notiz, die eine Person neben ein Label geschrieben hat und die oft die Ausgabe zitiert
span_namesTrace-, Span-, Tool- und Agentennamen, die eine Instrumentierung aufgezeichnet hat

Datensatz-Digests werden nach dem Schwärzen nicht neu berechnet, sodass ein gehosteter Datensatz weiterhin die ursprüngliche Evidenz benennt, die auf Ihrem Rechner bleibt. Schwärzen ist keine Verschlüsselung, und eine Metrik über einen sehr kleinen Slice kann die Fälle dahinter dennoch identifizierbar machen.

Wenn Reviewer Fälle in der gehosteten Review-Queue labeln, holt ihr Browser den Fallinhalt von oloproof collect, das auf Ihrer Seite läuft; er geht nicht durch den Workspace. Provider-Schlüssel, die ein Workspace verwendet, werden mit oloproof credentials set gespeichert, und oloproof credentials list zeigt ihre Namen, nie ihre Werte. Ein verwalteter Job läuft auf einem Worker, den Oloproof betreibt und der Ihren Python-Code nicht ausführt; oloproof job meldet sein Ergebnis und endet entsprechend seinem Gate.

In einem gehosteten Workspace verwendet die Engine gecachte Ausführungen, Urteile oder Analysen nie wieder, weil ein Push diese Caches beschreiben kann; sie berechnet sie neu.