Przejdź do treści

Przewodniki

Obrazy, dźwięk i wideo

Oloproof ewaluuje systemy, które przyjmują lub wytwarzają obrazy, dźwięk i wideo, a pliki nigdy nie opuszczają miejsca, w którym przechowuje je Twój system. Przebieg zapisuje każdy plik przez odwołanie; sprawdzenia deterministyczne mierzą bajty; sędzia może widzieć obrazy, klatki wideo i dźwięk; workbench pokazuje je obok każdego werdyktu. Samouczek przeprowadza przez obrazy na przykładzie do uruchomienia.

Zapisywanie multimediów

Twój system zapisuje pliki, które przypadek otrzymał lub wytworzył, przez current_case().media(...), jako jeden artefakt media/v1 na wywołanie:

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)}

W oloproof.yaml system z funkcją wywoływalną deklaruje records: [media/v1]. Każdy element zawiera:

PoleZnaczenie
kindimage, audio lub video, na podstawie typu MIME
mime_typeimage/png, audio/wav, video/mp4 i tak dalej
urigdzie jest plik: ścieżka file://, URL https:// albo ścieżka względem projektu
digestsha256 bajtów, sha256:...
size_bytesrozmiar w bajtach
roleinput, output (domyślnie) lub context
namejak nazywa go prompt lub strona; media_file używa nazwy pliku
width, height, duration_sopcjonalne, tak jak deklaruje je Twój system

media_file(path) wypełnia je na podstawie pliku lokalnego. Nic nie jest kopiowane do magazynu Oloproof. Wszystko, co później czyta plik, sprawdzenie, sędzia czy workbench, czyta go przez read_media, które odrzuca bajty, których rozmiar lub sha256 różni się od zapisu: zmieniona treść zatrzymuje przebieg, a plik, którego już nie ma, sprawia, że przypadek jest brakujący. Przechowuj pliki przebiegu, bez zmian, tak długo, jak przechowujesz przebieg; zapisuj wyniki każdej wersji w osobnym miejscu. W Twoim własnym @evaluator read_media(item) zwraca sprawdzone bajty.

Sprawdzenia bez modelu

media_check mierzy każdy zapisany element danej roli i zalicza, gdy każdy z nich spełnia każdy zadeklarowany warunek:

  - type: media_check
    criterion: thumbnail_fits
    kind: image
    formats: [png, jpeg, webp]
    max_width: 256
    max_height: 256
    max_bytes: 50000

Format jest odczytywany z początkowych bajtów pliku, więc JPEG zapisany jako .png nie zalicza; rozmiary obrazów i czasy trwania WAV są odczytywane z ich nagłówków; rozmiar wideo lub długość MP3 jest mierzona przez ffprobe. Ograniczenia czasu trwania dotyczą dźwięku i wideo, ograniczenia wymiarów obrazów i wideo.

image_matches_reference zalicza, gdy każdy obraz wygląda jak wzorzec: ich 64-bitowe hasze percepcyjne różnią się co najwyżej max_distance bitami (domyślnie 8). Kopia przeskalowana lub ponownie skompresowana mieści się w kilku bitach; pusty obraz, uszkodzony plik lub inna scena nie. Wzorcem jest jeden reference_file dla każdego przypadku albo ścieżka, którą expected każdego przypadku wskazuje przez reference_field. Hasz odczytuje układ i światło, a nie kolor, więc nie odróżni dwóch produktów sfotografowanych w ten sam sposób, a płaskie grafiki z dużymi pustymi obszarami poruszają go bardziej niż fotografie. Wymaga Pillow: pip install 'oloproof[media]'.

Każde pole jest w dokumentacji konfiguracji. Oba sprawdzenia rozstrzygają od pierwszego przebiegu, ponieważ nie wywołują żadnego modelu.

Sędziowie, którzy widzą multimedia

rubric_judge z media widzi zapisane multimedia przypadku o tej roli (input, output lub all), każde nazwane w jego prompcie, aby sędzia mógł odróżnić wejście od wyniku:

  - 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
  • Obrazy są dołączane w oryginalnej postaci, do 5 MB każdy i 20 na ocenę.
  • Wideo jest dołączane jako nieruchome klatki, pobrane przez ffmpeg na maszynie, która uruchamia sędziego: video_frames: 4 bierze środek każdego z czterech równych odcinków, [0.5, 2.0] bierze te chwile.
  • Dźwięk jest transkrybowany przez transcriber (punkt końcowy /audio/transcriptions zgodny z OpenAI, punkt OpenAI, gdy pominięto base_url), a transkrypcja trafia do promptu; albo, przy audio: native, jest dołączany jako dźwięk dla modelu, który słyszy (wav i mp3; nie dla modeli Anthropic).

Skróty multimediów są częścią tego, na czym opiera się klucz oceny, więc zmienione multimedia są oceniane ponownie, a niezmienione pochodzą z cache. Transkrybent i czasy klatek są częścią wersji sędziego, a każda ocena zachowuje swoje transkrypcje i wersję ffmpeg. Sędzia zadeklarowany dla dźwięku bez transkrybenta albo dla wideo na maszynie bez ffmpeg zatrzymuje przebieg, zamiast zostawiać te przypadki jako brakujące. Hostowany model rozlicza każdy obraz, tak jak każde słowo.

Walidacja sędziego multimediów

Sędzia, który widzi multimedia, nie rozstrzyga niczego, dopóki etykiety nadane przez ludzi nie pokażą, że się z nimi zgadza, dokładnie tak jak sędzia czytający tekst: oetykietuj losową próbę, a potem oloproof evaluators validate (Sędziowie). W hostowanym obszarze roboczym kolejka przeglądu pokazuje osobie przeglądającej multimedia każdego przypadku. Zmiana modelu, rubryki, media, klatek lub transkrybenta tworzy nowego sędziego, który potrzebuje własnej walidacji.

Multimedia w workbenchu

Multimedia przypadku pojawiają się obok jego wyniku i werdyktów, na stronie przypadku i w kolejce przeglądu, z typem, rozmiarem i skrótem każdego pliku.

  • Lokalny workbench czyta każdy plik z miejsca, w którym zapisał go przebieg, na Twojej maszynie, i pokazuje go tylko dopóty, dopóki jego sha256 nadal się zgadza.
  • Hostowany obszar roboczy nigdy nie otrzymuje multimediów. Przeglądarka oglądającego pobiera każdy plik z oloproof collect w Twojej sieci, z tym samym krótkotrwałym biletem, którego kolejka przeglądu używa dla treści przypadków (Sędziowie), i sprawdza jego sha256 przed pokazaniem. Bez kolektora strona wymienia fakty o każdym pliku i mówi, dlaczego nie jest pokazany.

Wypchnięty przebieg niesie rekordy media/v1, z miejscem przechowywania każdego pliku, w kategorii egress artifacts; polityka, która wstrzymuje artifacts, zatrzymuje te lokalizacje również po Twojej stronie.

Czego nie obsługujemy

  • Generowania multimediów: Twój system tworzy swoje pliki, a Oloproof je ewaluuje.
  • Przesyłania multimediów do Oloproof: nie ma przesyłania, ani hostowanego, ani lokalnego.
  • Modelu oglądającego całe wideo lub słyszącego dźwięk przez API Anthropic: tam wideo jest oceniane na podstawie klatek, a dźwięk przez transkrypcję.
  • Deterministycznych sprawdzeń tego, co zawiera dźwięk lub wideo (współczynnik błędów słów, wykrywanie scen): napisz takie z @evaluator i read_media.
  • Haszowania percepcyjnego dźwięku lub wideo: image_matches_reference czyta tylko obrazy.