ガイド
画像、音声、動画
Oloproof は、画像、音声、動画を受け取る、または生成するシステムを評価し、ファイルはシステムが保管している場所から決して出ません。実行は各ファイルを参照で記録し、決定的なチェックがバイトを測定し、ジャッジは画像、動画のフレーム、音声を見ることができ、ワークベンチは各判定の横にそれらを表示します。チュートリアルでは、実行可能な例で画像を順に扱います。
メディアを記録する
あなたのシステムは、ケースが受け取ったファイルや生成したファイルを current_case().media(...) で記録します。呼び出し 1 回につき 1 つの media/v1 アーティファクトです。
from oloproof import current_case, media_file, system
@system(name="captioner", version="v2", records=("media/v1",))
def caption(case):
image = render(case["prompt"]) # your system writes its own file
current_case().media([
media_file(case["photo"], role="input"),
media_file(image), # role="output" by default
])
return {"caption": describe(image)}oloproof.yaml では、呼び出し可能システムは records: [media/v1] を宣言します。各項目は次を保持します。
| フィールド | 意味 |
|---|---|
| kind | image、audio、video のいずれか。MIME タイプから決まる |
| mime_type | image/png、audio/wav、video/mp4 など |
| uri | ファイルの場所。file:// のパス、https:// の URL、またはプロジェクトからの相対パス |
| digest | バイトの sha256、sha256:... |
| size_bytes | バイト単位のサイズ |
| role | input、output(デフォルト)、context のいずれか |
| name | プロンプトやページでの呼び名。media_file はファイル名を使う |
| width、height、duration_s | 任意。システムが宣言したとおり |
media_file(path) はローカルファイルからこれらを埋めます。Oloproof のストアには何もコピーされません。後でファイルを読むもの(チェック、ジャッジ、ワークベンチ)はすべて read_media を通して読み、read_media はサイズや sha256 が記録と異なるバイトを拒否します。変更されたコンテンツは実行を停止させ、なくなったファイルはそのケースを欠測にします。実行を保管する間は、その実行のファイルを変更せずに保管してください。各バージョンの出力はそれぞれ専用の場所に書き込みます。独自の @evaluator では、read_media(item) が確認済みのバイトを返します。
モデルを使わないチェック
media_check は、ある役割の記録された各項目を測定し、そのすべてが宣言したすべての条件を満たすときに合格します。
- type: media_check
criterion: thumbnail_fits
kind: image
formats: [png, jpeg, webp]
max_width: 256
max_height: 256
max_bytes: 50000形式はファイルの先頭のバイトから読み取られるので、.png として保存された JPEG は不合格になります。画像のサイズと WAV の再生時間はヘッダーから読み取られ、動画のサイズや MP3 の長さは ffprobe で測定されます。再生時間の範囲は音声と動画に、寸法の範囲は画像と動画に適用されます。
image_matches_reference は、各画像が参照に似ているときに合格します。つまり、それらの 64 ビットの知覚ハッシュの違いが max_distance ビット(デフォルトは 8)以内であることです。リサイズや再圧縮をしたコピーは数ビット以内に収まりますが、真っ白な画像、壊れたファイル、別の場面は収まりません。参照は、すべてのケースに対する 1 つの reference_file、または reference_field で各ケースの expected が示すパスです。このハッシュは色ではなく構図と明暗を読むので、同じように撮影された 2 つの製品を区別できません。また、大きな空白のある平坦なグラフィックは、写真よりもハッシュを大きく動かします。Pillow が必要です: pip install 'oloproof[media]'。
すべてのフィールドは設定リファレンスにあります。どちらのチェックもモデルを呼び出さないので、最初の実行から判断します。
メディアを見るジャッジ
media を指定した rubric_judge には、ケースに記録されたその役割(input、output、all)のメディアが示されます。ジャッジが入力と出力を区別できるよう、プロンプトの中でそれぞれに名前が付けられます。
- type: rubric_judge
criterion: caption_matches
provider: openai_compatible
base_url: http://localhost:11434/v1
model: qwen2.5vl
rubric_text: Pass only if the caption truthfully describes the attached image.
media: output
video_frames: 4
transcriber:
model: whisper-1- 画像はそのまま添付されます。1 つあたり 5 MB まで、1 回の判定あたり 20 個までです。
- 動画は、ジャッジを実行するマシン上で ffmpeg によって取り出した静止フレームとして添付されます。video_frames: 4 は 4 つの等しい区間それぞれの中央を取り、[0.5, 2.0] はその時点を取ります。
- 音声は transcriber(OpenAI 互換の /audio/transcriptions エンドポイント。base_url を省略すると OpenAI のもの)によって書き起こされ、書き起こしがプロンプトに入ります。あるいは audio: native を指定すると、聞き取れるモデル向けに音として添付されます(wav と mp3。Anthropic のモデルは対象外)。
メディアのダイジェストは判定のキーの一部なので、変更されたメディアは再び判定され、変更されていないメディアはキャッシュから取られます。書き起こし器とフレームの時刻はジャッジのバージョンの一部であり、各判定はその書き起こしと ffmpeg のバージョンを保持します。書き起こし器なしで音声向けに宣言したジャッジや、ffmpeg のないマシンで動画向けに宣言したジャッジは、それらのケースを欠測のままにするのではなく、実行を停止させます。ホスト型モデルは、各単語だけでなく各画像についても請求します。
メディアのジャッジを検証する
メディアを見るジャッジも、テキストを読むジャッジとまったく同じように、人のラベルがジャッジとの一致を示すまでは何も判断しません。無作為なサンプルにラベルを付け、それから oloproof evaluators validate を実行します(ジャッジ)。ホストされたワークスペースでは、レビューキューが各ケースのメディアをレビュー担当者に表示します。モデル、ルーブリック、media、フレーム、書き起こし器のいずれかを変更すると新しいジャッジになり、それ自身の検証が必要です。
ワークベンチのメディア
ケースのメディアは、ケースのページとレビューキューで、その出力と判定の横に、各ファイルのタイプ、サイズ、ダイジェストとともに表示されます。
- ローカルのワークベンチは、実行が記録した場所(あなたのマシン上)から各ファイルを読み、その sha256 が一致している間だけ表示します。
- ホストされたワークスペースはメディアを決して受け取りません。閲覧者のブラウザーが、レビューキューがケースの内容に使うのと同じ短期間有効なチケットを使って、あなたのネットワーク上の oloproof collect から各ファイルを取得し(ジャッジ)、表示する前にその sha256 を確認します。コレクターがない場合、ページは各ファイルの事実を一覧にし、表示しない理由を示します。
プッシュされた実行は、各ファイルが保管されている場所とともに、media/v1 のレコードを egress カテゴリー artifacts の下で運びます。artifacts を送らないポリシーでは、それらの場所もあなたの側に留まります。
未対応のもの
- メディアの生成。ファイルはあなたのシステムが作り、Oloproof はそれを評価します。
- Oloproof へのメディアのアップロード。ホスト型でもローカルでも、アップロードはありません。
- Anthropic の API を通じて、モデルが動画全体を見ること、または音声を聞くこと。そこでは、動画はフレームから、音声は書き起こしを通じて判定されます。
- 音声や動画が何を含むかの決定的なチェック(単語誤り率、シーン検出)。@evaluator と read_media で書いてください。
- 音声や動画の知覚ハッシュ。image_matches_reference が読むのは画像だけです。