ガイド
結果と実行のリファレンス
実行が HTTP システムに送るものと期待する応答、各ケースがメトリクスの分母にどう入るか、判断状態とそれを説明する理由コード、終了コード、そしてどのデータがローカルに残り、どのデータがホスト型ワークスペースに移るか。背景となる考え方は基本概念を、ポリシーのフィールドは設定リファレンスを読んでください。
HTTP システムの契約
HTTP システム(oloproof.yaml の system.http)は、ケースごとに 1 回、反復ごとに 1 回呼び出されます。
| 項目 | 挙動 |
|---|---|
| リクエスト | デフォルトは POST(GET と PUT も受け付けます)。本文はケースの input 値を JSON にしたものです。 |
| ヘッダーと認証 | 設定できません。リクエストには HTTP クライアントのデフォルトだけが付きます。キーが必要なエンドポイントは、それを付加する Python の呼び出し可能システムの背後に置いてください。 |
| レスポンス | JSON でなければなりません。output_path は result.answer のようなドット区切りのパスで出力を選びます。指定しなければ本文全体が出力です。output_path のフィールドが欠けていると、そのケースの実行エラーとして記録されます。 |
| アーティファクト | 各 http.artifacts エントリは、レスポンスからドット区切りのパスを読みます。宣言したフィールドがレスポンスにないと契約エラーとなり、実行は終了コード 2 で止まります。 |
| タイムアウト | リクエストごとに http.timeout_s、デフォルトは 30 秒です。 |
| リトライ | タイムアウト、接続失敗、HTTP 408、429、5xx は、合計最大 4 回まで、Retry-After を尊重するジッター付き指数バックオフでリトライされます。それ以外の 4xx レスポンスはリトライされません。 |
| 最後の試行の後 | ケースの実行はエラーとして記録され、そのケースは欠測として(on_execution_error: fail の下では失敗として)数えられます。実行は続きます。 |
| 並行性 | 同時に処理中のリクエストは最大 concurrency.system 件、デフォルトは 8 です。 |
URL、メソッド、出力パス、アーティファクトの対応はシステムのバージョンに含まれますが、サーバーが何をするかは含まれません。サーバーの挙動が変わったら必ず system.version を変えてください。理由は設定リファレンスを参照してください。
3 つの異なる語彙
結果には 3 種類の状態があり、互いに代わりになることはありません。
| 種類 | 値 | 答える問い |
|---|---|---|
| 判断状態 | PASS、FAIL、INSUFFICIENT_EVIDENCE、MANUAL_REVIEW | 1 つのルールについてエビデンスが何を示すか。 |
| 実行状態 | 実行ステータス RUN_ERROR または CANCELLED、実行の完全性 PARTIAL、ケースの実行 ERROR または TIMEOUT | 実行や 1 つのケースの呼び出しに何が起きたか。品質の結果ではありません。 |
| リリースアクション | ALLOW、WARN、BLOCK | ポリシーが各判断をどう扱うか。block_on の状態はブロックし、warn_on の状態は警告し、それ以外は許可します。 |
正常に終わった実行は DECIDED、早期停止で終わった場合は DECIDED_EARLY です。Ctrl-C やタスクのキャンセルで中断された実行は CANCELLED、ハーネスが例外を出した実行は RUN_ERROR です。どちらも実行を PARTIAL のままにし、完了したケースを保持し、次の実行がそのキャッシュ済みレコードを再利用できるようにします。エラーを参照してください。
最小しきい値 T と区間 [L, U] について、ルールは L >= T のとき PASS、U < T のとき FAIL、それ以外は INSUFFICIENT_EVIDENCE です。最大しきい値は対称です。区間を読む前に、ルールはそもそも判断すべきかを確認します。まず MANUAL_REVIEW の理由、次に INSUFFICIENT_EVIDENCE の理由です。理由を持つ最初の段階が判断し、見つけたすべての理由を列挙します。
理由コード
すべての判断は 1 つ以上の理由コードを持ちます。
MANUAL_REVIEW
| コード | 意味 |
|---|---|
| policy_requires_review | ルールが requires_manual_review: true を設定しています。 |
| unsupported_method | この状況のこのメトリクスに、認められた区間がありません。下記を参照してください。 |
| unsupported_dependence_structure | スイートがクラスター(group_id)を宣言しており、このメトリクスについてそれを扱える認められた手法がありません。 |
| approximate_method_not_permitted | 唯一の区間が近似であり、ポリシーが allow_approximate_methods: true を設定していません。 |
| evaluator_retired | メトリクスの背後にある評価器が退役しました。 |
INSUFFICIENT_EVIDENCE
| コード | 意味 |
|---|---|
| no_observations | このメトリクスについて観測されたケースがありません。 |
| missingness_exceeds_policy | 対象ケースのうち欠測の割合が、ルールの max_missing_fraction の許容を超えています。 |
| missingness_unbounded | 手法が欠測ケースを境界づけずに除外しており、ルールが max_missing_fraction を宣言していません。 |
| evaluator_not_validated | メトリクスの背後にあるモデルジャッジが人間のラベルに対して検証されておらず、require_validated_evaluators が有効です(デフォルト)。 |
| evaluator_recalibration_required | ジャッジは、この実行の判定が由来したものではない提供モデルで検証されました。 |
| interval_unavailable | メトリクスに読むべき区間がありません。 |
| insufficient_clusters | クラスター数がポリシーの min_clusters より少ないです。 |
| interval_monte_carlo_uncertain | しきい値が、クラスター化された境界のシミュレーション不確かさの内側にあります。 |
| interval_overlaps_threshold | 区間がしきい値を含んでいます。ケースを増やせば狭まります。 |
| interval_unbounded | ルールが読む側に区間の境界がありません。 |
| missing_could_change_outcome | observed_count ルールで、欠測ケースによって失敗数が max_failures を超える可能性があります。 |
| interval_overlaps_zero、interval_overlaps_margin、interval_overlaps_margins | 差の区間がゼロまたはマージンをまたぐ比較です。 |
| insufficient_support | スライス比較ルールで、スライスのケース数が min_support より少ないです。 |
| family_correction_withheld | families: エントリ内のルールで、Holm 補正がそこに達する前に止まりました。 |
PASS と FAIL
| コード | 状態 |
|---|---|
| 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(比較) |
| difference_below_zero、upper_bound_below_margin、interval_outside_margins | FAIL(比較) |
| cost_ceiling_exceeded | 記録された実行が宣言された上限を超えたコストルールの状態の横に示されます |
ホスト型ワークスペースのみ
プッシュされた実行を自ら判断するワークスペースは、ppi_not_verified(判断の基になる区間を検証していない)、execution_not_verified(出力が登録済みランナーから来ていない)、workspace_cannot_decide(ポリシーのコピーを持たない、またはエビデンスを読めなかった)によって判断を保留できます。ゲーティングを参照してください。
各ケースが分母にどう入るか
すべてのメトリクスは 4 つの件数を報告します。n_total(スイート内のケース)、n_eligible、n_observed、n_missing で、n_eligible = n_observed + n_missing です。n_eligible に含まれないケースは、理由とともに exclusions に列挙されます。
| ケースに起きたこと | 数え方 | 分母に入るか |
|---|---|---|
| 評価器が合格または不合格を返した | 観測、成功または失敗 | はい |
| 評価器が自らを適用対象外と宣言した(たとえば比較する期待値がない) | 理由付きで除外 | いいえ |
| システム呼び出しがエラーまたはタイムアウトになった | 欠測、または on_execution_error: fail の下では失敗 | はい |
| 評価器が例外を出した、またはジャッジの応答を読めなかった | 欠測 | はい |
| 実行が中断されたためケースが実行されなかった | 欠測、そして実行は PARTIAL | はい |
欠測ケースは除外されるのではなく、境界づけられます。合格率では、区間の下限はすべての欠測ケースを失敗として、上限は成功として扱います。そのため欠測ケースの多い実行は区間が広く、厳しいルールには合格できません。有界平均も同じように、宣言された範囲の両端で置き換えます。欠測ケースを境界づけられない手法(たとえばランキング統計量)はそれらを除外して仮定を記録し、その上のルールは max_missing_fraction を宣言するまで missingness_unbounded となります。
observed_count ルールは実行されたスイート全体の失敗を数え、区間を読みません。観測された失敗にすべての欠測ケースを足しても max_failures に収まるときにだけ合格します。
認められた区間を持たないメトリクス
ルールは、監査によって認められた手法の区間に基づいてのみ判断します。それがない場合でもメトリクスは計算・表示されますが、その上のルールは検証されていない手法を借りません。
| 状況 | その上のルールの結果 |
|---|---|
| 範囲が宣言されていないスコア(平均)メトリクス、たとえば score_range のないカスタムスコア評価器 | MANUAL_REVIEW、unsupported_method |
| group_id を宣言したスイート上の平均、分位点、ランキング、コストのメトリクス | MANUAL_REVIEW、unsupported_dependence_structure |
| クラスター化されたスイート上の合格率 | 近似区間。allow_approximate_methods: true でなければ MANUAL_REVIEW、そうであれば上記のクラスターの確認 |
| replicates が 1 を超える分位点またはランキングのメトリクス | MANUAL_REVIEW、unsupported_method |
| group_id と反復の両方を持つスイート上の任意のメトリクス | MANUAL_REVIEW、unsupported_dependence_structure |
| クラスター化されたスイート上の比較 | MANUAL_REVIEW |
| min_slice_support を下回るスライス | 区間なし。ただしスライスがゲートに届くことはありません |
| human_score、human_preference、cost_per_accepted のメトリクス | ファイルの読み込み時に拒否され、終了コード 2 |
終了コード
oloproof gate、ポリシー付きの oloproof run、その他の判断を行うコマンドは、すべて同じコードを使います。
| コード | 意味 |
|---|---|
| 0 | ポリシーがブロックするものは何もありません。すべてのルールが合格したか、合格しなかったものは block_on の外にあります。 |
| 1 | block_on のルールが不合格になりました。 |
| 2 | 設定または呼び出しが誤っていたか、システムが契約を破りました。何も判断されていません。 |
| 3 | block_on のルールが INSUFFICIENT_EVIDENCE になりました。 |
| 4 | block_on のルールが MANUAL_REVIEW になりました。 |
| 5 | 実行が完了せず、block_on_partial_run が有効です(デフォルト)。 |
複数が当てはまるとき、報告されるコードは 1、5、4、3 のうち最初のものです。block_on から外した状態は終了コードを変えられません。block_on: [FAIL] と warn_on: [INSUFFICIENT_EVIDENCE] では、判断のつかないルールは警告し、ゲートは 0 で終了します。したがって終了コード 0 は、すべてのルールが合格したことではなく、ポリシーがブロックするものが何も起きなかったことだけを意味します。ゲーティングを参照してください。
作業がどこで実行され、データがどこへ行くか
ローカル(デフォルト)
oloproof run、oloproof gate、SDK はあなたのマシン上で実行されます。すべてのレコード(ケース、出力、アーティファクト、判定、メトリクス、判断)は oloproof.yaml の横の .oloproof/store.sqlite に、または設定されていれば OLOPROOF_HOME の下に書き込まれます。Oloproof には何も送られません。ネットワーク通信は設定が引き起こすものだけです。HTTP システムの URL への呼び出しと、モデルジャッジやモデル分類器がプロバイダーに行う呼び出しで、プロバイダーは判定するケースの内容を受け取り、その分をあなたに請求します。
ホスト型ワークスペースへのプッシュ
oloproof push は、実行のエビデンスを oloproof login で接続したワークスペースに送ります。デフォルトでは、メトリクス、区間、判断、集計スライス、そしてすべてのレコードの識別子、ステータス、所要時間、使用量を送りますが、その内容は送りません。生の内容は、何かがマシンを出る前にフィールドごとに編集除去され、除去されたレコードはどのカテゴリが保留されたかを示します。カテゴリは、oloproof.yaml の egress: に列挙されたときにだけ送られます。
| カテゴリ | 対象 |
|---|---|
| raw_inputs | シナリオの入力、期待値、ケースのメタデータ。つまりデータセットの行 |
| raw_outputs | テスト対象システムが各ケースに返したもの |
| judge_rationales | ジャッジが判定を説明して書いたテキスト。出力を引用します |
| artifacts | 実行中に記録された検索コンテキスト、引用、軌跡 |
| error_detail | 例外メッセージと詳細。しばしば入力をそのまま含みます |
| system_config | テスト対象システムとその評価器の宣言された設定 |
| label_notes | ラベルの横に人が書いたメモ。しばしば出力を引用します |
| span_names | 計装が記録したトレース、スパン、ツール、エージェントの名前 |
レコードのダイジェストは編集除去の後に再計算されないため、ホスト上のレコードは元のエビデンスを指し示し、それはあなたのマシンに残ります。編集除去は暗号化ではなく、非常に小さなスライスのメトリクスは背後のケースを特定できることがあります。
レビュアーがホスト型レビューキューでケースにラベルを付けるとき、レビュアーのブラウザはあなたの側で動く oloproof collect からケースの内容を取得します。内容はワークスペースを通りません。ワークスペースが使うプロバイダーキーは oloproof credentials set で保存され、oloproof credentials list はその名前を示し、値は決して示しません。マネージドジョブは Oloproof が運用するワーカー上で実行され、そこではあなたの Python コードは実行されません。oloproof job は結果を報告し、そのゲートに従って終了します。
ホスト型ワークスペースでは、プッシュがキャッシュに書き込めるため、エンジンはキャッシュ済みの実行、判定、分析を決して再利用せず、再計算します。