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ę.
| Aspekt | Zachowanie |
|---|---|
| Żądanie | Domyślnie POST (akceptowane są też GET i PUT). Treścią jest wartość input przypadku jako JSON. |
| Nagłówki i uwierzytelnianie | Nie 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. |
| Artefakty | Każ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 czasu | http.timeout_s na żądanie, domyślnie 30 sekund. |
| Ponowienia | Przekroczenia 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óbie | Wykonanie 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.
| Rodzaj | Wartości | Odpowiada na pytanie |
|---|---|---|
| Stan decyzji | PASS, FAIL, INSUFFICIENT_EVIDENCE, MANUAL_REVIEW | Co dowody mówią o jednej regule. |
| Stan wykonania | Status przebiegu RUN_ERROR lub CANCELLED; kompletność przebiegu PARTIAL; wykonanie przypadku ERROR lub TIMEOUT | Co stało się z przebiegiem lub z wywołaniem jednego przypadku. To nie jest wynik jakościowy. |
| Działanie dotyczące wydania | ALLOW, WARN, BLOCK | Co 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
| Kod | Znaczenie |
|---|---|
| policy_requires_review | Reguła ustawia requires_manual_review: true. |
| unsupported_method | Dla tej metryki w tej sytuacji nie istnieje przyjęty przedział. Zob. niżej. |
| unsupported_dependence_structure | Zestaw deklaruje klastry (group_id), a żadna przyjęta metoda nie obsługuje ich dla tej metryki. |
| approximate_method_not_permitted | Jedyny przedział jest przybliżony, a polityka nie ustawia allow_approximate_methods: true. |
| evaluator_retired | Ewaluator stojący za metryką został wycofany. |
INSUFFICIENT_EVIDENCE
| Kod | Znaczenie |
|---|---|
| no_observations | Dla tej metryki nie zaobserwowano żadnego przypadku. |
| missingness_exceeds_policy | Brakuje większej części kwalifikujących się przypadków, niż pozwala max_missing_fraction reguły. |
| missingness_unbounded | Metoda pomija brakujące przypadki zamiast je ograniczać, a reguła nie deklaruje max_missing_fraction. |
| evaluator_not_validated | Sędzia-model stojący za metryką nie został zwalidowany względem ludzkich etykiet, a require_validated_evaluators jest włączone (domyślnie). |
| evaluator_recalibration_required | Sędzia został zwalidowany na serwowanym modelu, z którego nie pochodzą werdykty tego przebiegu. |
| interval_unavailable | Metryka nie ma przedziału do odczytania. |
| insufficient_clusters | Mniej klastrów niż min_clusters polityki. |
| interval_monte_carlo_uncertain | Próg wypada w niepewności symulacji klastrowanej granicy. |
| interval_overlaps_threshold | Przedział zawiera próg. Więcej przypadków by go zwęziło. |
| interval_unbounded | Przedział nie ma granicy po stronie, którą czyta reguła. |
| missing_could_change_outcome | Reguła observed_count: brakujące przypadki mogłyby przesunąć liczbę niepowodzeń poza max_failures. |
| interval_overlaps_zero, interval_overlaps_margin, interval_overlaps_margins | Porównanie, którego przedział różnicy obejmuje zero lub margines. |
| insufficient_support | Reguła porównania wycinka, którego wycinek ma mniej przypadków niż jego min_support. |
| family_correction_withheld | Reguła we wpisie families:, przed którą zatrzymała się korekta Holma. |
PASS i FAIL
| Kod | Stan |
|---|---|
| lower_bound_meets_minimum, upper_bound_meets_maximum | PASS |
| upper_bound_below_minimum, lower_bound_above_maximum | FAIL |
| observed_failures_within_limit | PASS |
| observed_failures_exceed_limit | FAIL |
| difference_above_zero, lower_bound_above_margin, interval_within_margins | PASS (porównanie) |
| difference_below_zero, upper_bound_below_margin, interval_outside_margins | FAIL (porównanie) |
| cost_ceiling_exceeded | Podawany 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 przypadkiem | Liczy się jako | W mianowniku |
|---|---|---|
| Ewaluator zwrócił pass lub fail | zaobserwowany, sukces lub niepowodzenie | tak |
| 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 czasu | brakujący albo niepowodzenie przy on_execution_error: fail | tak |
| Ewaluator zgłosił wyjątek albo nie dało się odczytać odpowiedzi sędziego | brakujący | tak |
| Przypadek nigdy się nie uruchomił, bo przebieg przerwano | brakujący, a przebieg ma stan PARTIAL | tak |
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:
| Sytuacja | Co pokazuje reguła na niej |
|---|---|
| Metryka wyniku liczbowego (średnia) bez zadeklarowanego zakresu, na przykład własny ewaluator wyniku bez score_range | MANUAL_REVIEW, unsupported_method |
| Metryka średniej, kwantyla, rankingu lub kosztu na zestawie, który deklaruje group_id | MANUAL_REVIEW, unsupported_dependence_structure |
| Odsetek zaliczeń na zestawie klastrowanym | przedział 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 1 | MANUAL_REVIEW, unsupported_method |
| Dowolna metryka na zestawie z group_id i replikacjami jednocześnie | MANUAL_REVIEW, unsupported_dependence_structure |
| Porównanie na zestawie klastrowanym | MANUAL_REVIEW |
| Wycinek poniżej min_slice_support | brak przedziału, ale wycinki nigdy nie docierają do bramki |
| Metryki human_score, human_preference lub cost_per_accepted | odrzucane 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.
| Kod | Znaczenie |
|---|---|
| 0 | Nie 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. |
| 1 | Reguła z block_on miała wynik fail. |
| 2 | Konfiguracja lub wywołanie były błędne albo system złamał swój kontrakt; niczego nie rozstrzygnięto. |
| 3 | Reguła z block_on pokazała INSUFFICIENT_EVIDENCE. |
| 4 | Reguła z block_on pokazała MANUAL_REVIEW. |
| 5 | Przebieg 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:
| Kategoria | Co obejmuje |
|---|---|
| raw_inputs | Wejścia scenariuszy, oczekiwane wartości i metadane przypadków: wiersze zbioru danych |
| raw_outputs | Co testowany system zwrócił dla każdego przypadku |
| judge_rationales | Tekst, którym sędzia wyjaśnił werdykt, cytujący wynik |
| artifacts | Kontekst wyszukiwania, cytowania i trajektorie zapisane podczas przebiegu |
| error_detail | Komunikaty i szczegóły wyjątków, które często niosą wejście dosłownie |
| system_config | Zadeklarowana konfiguracja testowanego systemu i jego ewaluatorów |
| label_notes | Notatka, którą osoba zapisała obok etykiety, często cytująca wynik |
| span_names | Nazwy ś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.