Anleitungen
Bilder, Audio und Video
Oloproof evaluiert Systeme, die Bilder, Audio und Video empfangen oder erzeugen, und die Dateien verlassen nie den Ort, an dem Ihr System sie aufbewahrt. Ein Lauf zeichnet jede Datei per Referenz auf; deterministische Prüfungen messen die Bytes; ein Judge kann Bilder, Video-Frames und Audio sehen; die Workbench zeigt sie neben jedem Urteil. Das Tutorial führt Bilder an einem ausführbaren Beispiel vor.
Medien aufzeichnen
Ihr System zeichnet die Dateien, die ein Fall empfangen oder erzeugt hat, mit current_case().media(...) auf, als ein media/v1-Artefakt pro Aufruf:
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)}In oloproof.yaml deklariert ein Callable-System records: [media/v1]. Jedes Element enthält:
| Feld | Bedeutung |
|---|---|
| kind | image, audio oder video, aus dem MIME-Typ |
| mime_type | image/png, audio/wav, video/mp4 und so weiter |
| uri | wo die Datei liegt: ein file://-Pfad, eine https://-URL oder ein Pfad relativ zum Projekt |
| digest | der sha256 der Bytes, sha256:... |
| size_bytes | die Größe in Bytes |
| role | input, output (der Standard) oder context |
| name | wie ein Prompt oder eine Seite sie nennt; media_file verwendet den Dateinamen |
| width, height, duration_s | optional, so wie Ihr System sie deklariert |
media_file(path) füllt diese Felder aus einer lokalen Datei. Nichts wird in den Speicher von Oloproof kopiert. Alles, was die Datei später liest, eine Prüfung, ein Judge oder die Workbench, liest sie über read_media, das Bytes ablehnt, deren Größe oder sha256 vom Datensatz abweicht: Geänderter Inhalt stoppt den Lauf, und eine verschwundene Datei lässt den Fall fehlen. Bewahren Sie die Dateien eines Laufs unverändert auf, solange Sie den Lauf aufbewahren; schreiben Sie die Ausgaben jeder Version an einen eigenen Ort. In Ihrem eigenen @evaluator gibt read_media(item) die geprüften Bytes zurück.
Prüfungen ohne Modell
media_check misst jedes aufgezeichnete Element einer Rolle und besteht, wenn jedes davon jede deklarierte Bedingung erfüllt:
- type: media_check
criterion: thumbnail_fits
kind: image
formats: [png, jpeg, webp]
max_width: 256
max_height: 256
max_bytes: 50000Das Format wird aus den ersten Bytes der Datei gelesen, sodass ein als .png gespeichertes JPEG fehlschlägt; Bildgrößen und WAV-Dauern werden aus ihren Headern gelesen; die Größe eines Videos oder die Länge einer MP3 wird mit ffprobe gemessen. Grenzen für die Dauer gelten für Audio und Video, Grenzen für Abmessungen für Bilder und Video.
image_matches_reference besteht, wenn jedes Bild wie eine Referenz aussieht: Ihre 64-Bit-Wahrnehmungs-Hashes unterscheiden sich in höchstens max_distance Bits (standardmäßig 8). Eine verkleinerte oder neu komprimierte Kopie bleibt innerhalb weniger Bits; ein leeres Bild, eine defekte Datei oder eine andere Szene nicht. Die Referenz ist eine einzige reference_file für jeden Fall oder, mit reference_field, ein Pfad, den das expected jedes Falls nennt. Der Hash liest Aufbau und Licht, nicht Farbe, daher kann er zwei auf dieselbe Weise fotografierte Produkte nicht unterscheiden, und flache Grafiken mit großen leeren Flächen verschieben ihn stärker als Fotos. Er braucht Pillow: pip install 'oloproof[media]'.
Jedes Feld steht in der Konfigurationsreferenz. Beide Prüfungen entscheiden ab dem ersten Lauf, da sie kein Modell aufrufen.
Judges, die Medien sehen
Einem rubric_judge mit media werden die aufgezeichneten Medien des Falls mit dieser Rolle gezeigt (input, output oder all), jedes in seinem Prompt benannt, damit der Judge eine Eingabe von einer Ausgabe unterscheiden kann:
- 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- Bilder werden unverändert angehängt, bis zu 5 MB pro Bild und 20 pro Urteil.
- Video wird als Standbilder angehängt, aufgenommen mit ffmpeg auf dem Rechner, der den Judge ausführt: video_frames: 4 nimmt die Mitte von vier gleichen Abschnitten, [0.5, 2.0] nimmt diese Zeitpunkte.
- Audio wird vom transcriber transkribiert (einem OpenAI-kompatiblen /audio/transcriptions-Endpunkt, dem von OpenAI, wenn base_url weggelassen wird), und das Transkript kommt in den Prompt; oder es wird mit audio: native als Ton für ein Modell angehängt, das hört (wav und mp3; nicht die von Anthropic).
Die Digests der Medien sind Teil des Schlüssels, unter dem ein Urteil gespeichert wird, sodass geänderte Medien erneut beurteilt werden und unveränderte Medien aus dem Cache kommen. Der Transcriber und die Frame-Zeitpunkte sind Teil der Version des Judges, und jedes Urteil bewahrt seine Transkripte und die ffmpeg-Version auf. Ein Judge, der für Audio ohne Transcriber oder für Video auf einem Rechner ohne ffmpeg deklariert ist, stoppt den Lauf, statt diese Fälle fehlen zu lassen. Ein gehostetes Modell berechnet jedes Bild ebenso wie jedes Wort.
Einen Medien-Judge validieren
Ein Judge, der Medien sieht, entscheidet nichts, bis die Labels von Menschen zeigen, dass er mit ihnen übereinstimmt, genau wie einer, der Text liest: Labeln Sie eine Zufallsstichprobe, dann oloproof evaluators validate (Judges). In einem gehosteten Workspace zeigt die Review-Warteschlange der prüfenden Person die Medien jedes Falls. Wer das Modell, die Rubrik, media, die Frames oder den Transcriber ändert, erzeugt einen neuen Judge, der eine eigene Validierung braucht.
Medien in der Workbench
Die Medien eines Falls erscheinen neben seiner Ausgabe und seinen Urteilen, auf der Seite des Falls und in der Review-Warteschlange, mit Typ, Größe und Digest jeder Datei.
- Eine lokale Workbench liest jede Datei dort, wo der Lauf sie aufgezeichnet hat, auf Ihrem Rechner, und zeigt sie nur, solange ihr sha256 noch übereinstimmt.
- Ein gehosteter Workspace erhält nie Medien. Der Browser der betrachtenden Person ruft jede Datei von oloproof collect in Ihrem Netzwerk ab, mit demselben kurzlebigen Ticket, das die Review-Warteschlange für Fallinhalte verwendet (Judges), und prüft ihren sha256, bevor er sie zeigt. Ohne Collector listet die Seite die Eckdaten jeder Datei auf und sagt, warum sie nicht gezeigt wird.
Ein gepushter Lauf trägt die media/v1-Datensätze, mit dem Ort, an dem jede Datei aufbewahrt wird, unter der Egress-Kategorie artifacts; eine Policy, die artifacts zurückhält, behält auch diese Orte auf Ihrer Seite.
Nicht unterstützt
- Medien erzeugen: Ihr System erstellt seine Dateien, und Oloproof evaluiert sie.
- Medien zu Oloproof hochladen: Es gibt keinen Upload, weder gehostet noch lokal.
- Ein Modell, das über die API von Anthropic ein ganzes Video ansieht oder Audio hört: Dort wird Video anhand von Frames beurteilt und Audio anhand eines Transkripts.
- Deterministische Prüfungen dessen, was Audio oder Video enthält (Wortfehlerrate, Szenenerkennung): Schreiben Sie eine mit @evaluator und read_media.
- Wahrnehmungs-Hashing von Audio oder Video: image_matches_reference liest nur Bilder.