Przejdź do treści

Przewodniki

Dokumentacja wyników i wykonania

Co przebieg wysyła do systemu HTTP i czego oczekuje w odpowiedzi, jak każdy przypadek trafia do mianownika metryki, stany decyzji i kody przyczyn, które je wyjaśniają, kody wyjścia oraz jakie dane pozostają lokalnie, a jakie trafiają do hostowanego obszaru roboczego. Idee stojące za nimi opisują Pojęcia; pola polityki opisuje Dokumentacja konfiguracji.

Kontrakt systemu HTTP

System HTTP (system.http w oloproof.yaml) jest wywoływany raz na przypadek i raz na replikację.

AspektZachowanie
ŻądanieDomyślnie POST (akceptowane są też GET i PUT). Treścią jest wartość input przypadku jako JSON.
Nagłówki i uwierzytelnianieNie da się ich skonfigurować. Żądanie niesie tylko domyślne ustawienia klienta HTTP. Punkt końcowy wymagający klucza należy umieścić za systemem z funkcją wywoływalną w Pythonie, która go dodaje.
OdpowiedźMusi być w JSON. output_path wybiera wynik ścieżką z kropkami, taką jak result.answer; bez niej wynikiem jest cała treść. Brakujące pole output_path jest zapisywane jako błąd wykonania dla tego przypadku.
ArtefaktyKażdy wpis http.artifacts czyta ścieżkę z kropkami z odpowiedzi. Zadeklarowane pole, którego brakuje w odpowiedzi, to błąd kontraktu, a przebieg zatrzymuje się z kodem 2.
Limit czasuhttp.timeout_s na żądanie, domyślnie 30 sekund.
PonowieniaPrzekroczenia limitu czasu, błędy połączenia oraz HTTP 408, 429 i 5xx są ponawiane, łącznie do czterech prób, z wykładniczym wycofaniem z losowym rozrzutem, które respektuje Retry-After. Inne odpowiedzi 4xx nie są ponawiane.
Po ostatniej próbieWykonanie przypadku jest zapisywane jako błąd, a przypadek liczy się jako brakujący (lub jako niepowodzenie przy on_execution_error: fail). Przebieg trwa dalej.
WspółbieżnośćNajwyżej concurrency.system żądań w toku, domyślnie 8.

URL, metoda, ścieżka wyniku i odwzorowanie artefaktów wchodzą do wersji systemu, ale to, co robi serwer, już nie. Zmieniaj system.version za każdym razem, gdy zmienia się zachowanie serwera; dlaczego, wyjaśnia Dokumentacja konfiguracji.

Trzy różne słowniki

Wynik ma trzy rodzaje stanu i nigdy nie zastępują się nawzajem.

RodzajWartościOdpowiada na pytanie
Stan decyzjiPASS, FAIL, INSUFFICIENT_EVIDENCE, MANUAL_REVIEWCo dowody mówią o jednej regule.
Stan wykonaniaStatus przebiegu RUN_ERROR lub CANCELLED; kompletność przebiegu PARTIAL; wykonanie przypadku ERROR lub TIMEOUTCo stało się z przebiegiem lub z wywołaniem jednego przypadku. To nie jest wynik jakościowy.
Działanie dotyczące wydaniaALLOW, WARN, BLOCKCo Twoja polityka robi z każdą decyzją: stany z block_on blokują, stany z warn_on ostrzegają, pozostałe przepuszczają.

Przebieg, który kończy się normalnie, ma stan DECIDED albo DECIDED_EARLY, gdy zakończyło go wczesne zatrzymanie. Przebieg przerwany przez Ctrl-C lub anulowanie zadania ma stan CANCELLED; taki, w którym zgłosiła wyjątek infrastruktura, ma stan RUN_ERROR. Każdy z nich zostawia przebieg jako PARTIAL, zachowuje ukończone przypadki i pozwala następnemu przebiegowi ponownie użyć ich rekordów z cache. Zob. Błędy.

Dla progu minimalnego T i przedziału [L, U] reguła ma stan PASS, gdy L >= T, FAIL, gdy U < T, a w przeciwnym razie INSUFFICIENT_EVIDENCE. Próg maksymalny jest symetryczny. Zanim przeczyta przedział, reguła sprawdza, czy w ogóle powinna rozstrzygać: najpierw przyczyny dla MANUAL_REVIEW, potem te dla INSUFFICIENT_EVIDENCE. Rozstrzyga pierwszy poziom, który ma przyczynę, i wymienia każdą znalezioną przyczynę.

Kody przyczyn

Każda decyzja niesie jeden lub więcej kodów przyczyn.

MANUAL_REVIEW

KodZnaczenie
policy_requires_reviewReguła ustawia requires_manual_review: true.
unsupported_methodDla tej metryki w tej sytuacji nie istnieje przyjęty przedział. Zob. niżej.
unsupported_dependence_structureZestaw deklaruje klastry (group_id), a żadna przyjęta metoda nie obsługuje ich dla tej metryki.
approximate_method_not_permittedJedyny przedział jest przybliżony, a polityka nie ustawia allow_approximate_methods: true.
evaluator_retiredEwaluator stojący za metryką został wycofany.

INSUFFICIENT_EVIDENCE

KodZnaczenie
no_observationsDla tej metryki nie zaobserwowano żadnego przypadku.
missingness_exceeds_policyBrakuje większej części kwalifikujących się przypadków, niż pozwala max_missing_fraction reguły.
missingness_unboundedMetoda pomija brakujące przypadki zamiast je ograniczać, a reguła nie deklaruje max_missing_fraction.
evaluator_not_validatedSędzia-model stojący za metryką nie został zwalidowany względem ludzkich etykiet, a require_validated_evaluators jest włączone (domyślnie).
evaluator_recalibration_requiredSędzia został zwalidowany na serwowanym modelu, z którego nie pochodzą werdykty tego przebiegu.
interval_unavailableMetryka nie ma przedziału do odczytania.
insufficient_clustersMniej klastrów niż min_clusters polityki.
interval_monte_carlo_uncertainPróg wypada w niepewności symulacji klastrowanej granicy.
interval_overlaps_thresholdPrzedział zawiera próg. Więcej przypadków by go zwęziło.
interval_unboundedPrzedział nie ma granicy po stronie, którą czyta reguła.
missing_could_change_outcomeReguła observed_count: brakujące przypadki mogłyby przesunąć liczbę niepowodzeń poza max_failures.
interval_overlaps_zero, interval_overlaps_margin, interval_overlaps_marginsPorównanie, którego przedział różnicy obejmuje zero lub margines.
insufficient_supportReguła porównania wycinka, którego wycinek ma mniej przypadków niż jego min_support.
family_correction_withheldReguła we wpisie families:, przed którą zatrzymała się korekta Holma.

PASS i FAIL

KodStan
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 (porównanie)
difference_below_zero, upper_bound_below_margin, interval_outside_marginsFAIL (porównanie)
cost_ceiling_exceededPodawany obok stanu reguły kosztowej, której zadeklarowany pułap przekroczyło zapisane wykonanie

Tylko w hostowanym obszarze roboczym

Obszar roboczy, który sam rozstrzyga wypchnięty przebieg, może wstrzymać decyzję z ppi_not_verified (nie zweryfikował przedziału, na którym opiera się decyzja), execution_not_verified (wyniki nie pochodziły z zarejestrowanego runnera) lub workspace_cannot_decide (nie ma kopii polityki albo nie mógł odczytać dowodów). Zob. Bramkowanie.

Jak każdy przypadek trafia do mianownika

Każda metryka raportuje cztery liczności: n_total (przypadki w zestawie), n_eligible, n_observed i n_missing, przy czym n_eligible = n_observed + n_missing. Przypadki spoza n_eligible są wymienione pod exclusions z przyczyną.

Co stało się z przypadkiemLiczy się jakoW mianowniku
Ewaluator zwrócił pass lub failzaobserwowany, sukces lub niepowodzenietak
Ewaluator zadeklarował, że go nie dotyczy (na przykład brak oczekiwanej wartości do porównania)wykluczony, z przyczynąnie
Wywołanie systemu zakończyło się błędem lub przekroczyło limit czasubrakujący albo niepowodzenie przy on_execution_error: failtak
Ewaluator zgłosił wyjątek albo nie dało się odczytać odpowiedzi sędziegobrakującytak
Przypadek nigdy się nie uruchomił, bo przebieg przerwanobrakujący, a przebieg ma stan PARTIALtak

Brakujący przypadek jest ograniczany, a nie pomijany. Dla odsetka zaliczeń dolna granica przedziału traktuje każdy brakujący przypadek jako niepowodzenie, a górna jako sukces, więc przebieg z wieloma brakującymi przypadkami ma szeroki przedział, który nie może przejść wymagającej reguły; ograniczona średnia podstawia w ten sam sposób krańce swojego zadeklarowanego zakresu. Metoda, która nie potrafi ograniczyć brakujących przypadków (na przykład statystyka rankingowa), pomija je i zapisuje to założenie, a reguła na niej pokazuje missingness_unbounded, dopóki nie zadeklaruje max_missing_fraction.

Reguła observed_count liczy niepowodzenia na wykonanym zestawie i nie czyta przedziału. Przechodzi tylko wtedy, gdy zaobserwowane niepowodzenia plus każdy brakujący przypadek nadal mieszczą się w max_failures.

Metryki bez przyjętego przedziału

Reguła rozstrzyga tylko na podstawie przedziału, którego metoda została przyjęta po audycie. Gdy takiego nie ma, metryka jest nadal liczona i pokazywana, a reguła na niej nie pożycza niezwalidowanej metody:

SytuacjaCo pokazuje reguła na niej
Metryka wyniku liczbowego (średnia) bez zadeklarowanego zakresu, na przykład własny ewaluator wyniku bez score_rangeMANUAL_REVIEW, unsupported_method
Metryka średniej, kwantyla, rankingu lub kosztu na zestawie, który deklaruje group_idMANUAL_REVIEW, unsupported_dependence_structure
Odsetek zaliczeń na zestawie klastrowanymprzedział przybliżony: MANUAL_REVIEW, chyba że allow_approximate_methods: true, a wtedy sprawdzenia klastrów opisane wyżej
Metryka kwantyla lub rankingu z replicates powyżej 1MANUAL_REVIEW, unsupported_method
Dowolna metryka na zestawie z group_id i replikacjami jednocześnieMANUAL_REVIEW, unsupported_dependence_structure
Porównanie na zestawie klastrowanymMANUAL_REVIEW
Wycinek poniżej min_slice_supportbrak przedziału, ale wycinki nigdy nie docierają do bramki
Metryki human_score, human_preference lub cost_per_acceptedodrzucane przy wczytywaniu pliku, kod 2

Kody wyjścia

oloproof gate, oloproof run z polityką i inne polecenia, które rozstrzygają, używają tych samych kodów.

KodZnaczenie
0Nie wystąpiło nic, na czym polityka blokuje: każda reguła przeszła albo te, które nie przeszły, są poza block_on.
1Reguła z block_on miała wynik fail.
2Konfiguracja lub wywołanie były błędne albo system złamał swój kontrakt; niczego nie rozstrzygnięto.
3Reguła z block_on pokazała INSUFFICIENT_EVIDENCE.
4Reguła z block_on pokazała MANUAL_REVIEW.
5Przebieg się nie zakończył, a block_on_partial_run jest włączone (domyślnie).

Gdy pasuje kilka kodów, zgłaszany jest pierwszy z 1, 5, 4, 3. Stan pominięty w block_on nie może zmienić kodu wyjścia: przy block_on: [FAIL] i warn_on: [INSUFFICIENT_EVIDENCE] nierozstrzygnięta reguła ostrzega, a bramka kończy się kodem 0. Kod 0 oznacza więc tylko, że nie wystąpiło nic, na czym blokuje Twoja polityka, a nie że każda reguła przeszła. Zob. Bramkowanie.

Gdzie odbywa się praca i dokąd trafiają dane

Lokalnie, domyślnie

oloproof run, oloproof gate i SDK działają na Twojej maszynie. Każdy rekord (przypadki, wyniki, artefakty, oceny, metryki i decyzje) jest zapisywany w .oloproof/store.sqlite obok oloproof.yaml albo pod OLOPROOF_HOME, gdy jest ustawione. Nic nie jest wysyłane do Oloproof. Jedyny ruch sieciowy to ten, który powoduje Twoja konfiguracja: wywołania URL Twojego systemu HTTP oraz wywołania, które sędzia-model lub klasyfikator-model wykonuje do swojego dostawcy; ten otrzymuje treść przypadków, które ocenia, i obciąża Cię za to.

Wypychanie do hostowanego obszaru roboczego

oloproof push wysyła dowody przebiegu do obszaru roboczego, z którym połączyłeś się przez oloproof login. Domyślnie wysyła metryki, przedziały, decyzje i zagregowane wycinki oraz tożsamość, status, czasy i zużycie każdego rekordu, ale nie jego treść. Surowa treść jest redagowana pole po polu, zanim cokolwiek opuści maszynę, a zredagowany rekord mówi, które kategorie wstrzymano. Kategoria jest wysyłana tylko wtedy, gdy wymienia ją egress: w oloproof.yaml:

KategoriaCo obejmuje
raw_inputsWejścia scenariuszy, oczekiwane wartości i metadane przypadków: wiersze zbioru danych
raw_outputsCo testowany system zwrócił dla każdego przypadku
judge_rationalesTekst, którym sędzia wyjaśnił werdykt, cytujący wynik
artifactsKontekst wyszukiwania, cytowania i trajektorie zapisane podczas przebiegu
error_detailKomunikaty i szczegóły wyjątków, które często niosą wejście dosłownie
system_configZadeklarowana konfiguracja testowanego systemu i jego ewaluatorów
label_notesNotatka, którą osoba zapisała obok etykiety, często cytująca wynik
span_namesNazwy śladów, spanów, narzędzi i agentów zapisane przez instrumentację

Skróty rekordów nie są przeliczane po redakcji, więc rekord w hostowanym obszarze nadal wskazuje oryginalne dowody, które pozostają na Twojej maszynie. Redakcja to nie szyfrowanie, a metryka na bardzo małym wycinku może nadal zidentyfikować stojące za nią przypadki.

Gdy recenzenci etykietują przypadki w hostowanej kolejce przeglądu, ich przeglądarka pobiera treść przypadków z oloproof collect działającego po Twojej stronie; nie przechodzi ona przez obszar roboczy. Klucze dostawców używane przez obszar roboczy są przechowywane przez oloproof credentials set, a oloproof credentials list pokazuje ich nazwy, nigdy wartości. Zadanie zarządzane działa na workerze obsługiwanym przez Oloproof, który nie uruchamia Twojego kodu w Pythonie; oloproof job raportuje jego wynik i kończy się zgodnie z jego bramką.

W hostowanym obszarze roboczym silnik nigdy nie używa ponownie wykonań, ocen ani analiz z cache, ponieważ push może zapisywać te cache; liczy je od nowa.