Saltar al contenido

Guías

Imágenes, audio y vídeo

Oloproof evalúa sistemas que reciben o producen imágenes, audio y vídeo, y los archivos nunca salen del lugar donde su sistema los guarda. Una ejecución registra cada archivo por referencia; las comprobaciones deterministas miden los bytes; un juez puede ver imágenes, fotogramas de vídeo y audio; el workbench los muestra junto a cada veredicto. El tutorial recorre las imágenes con un ejemplo ejecutable.

Registrar archivos multimedia

Su sistema registra los archivos que un caso recibió o produjo con current_case().media(...), como un artefacto media/v1 por llamada:

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

En oloproof.yaml, un sistema callable declara records: [media/v1]. Cada elemento contiene:

CampoSignificado
kindimage, audio o video, a partir del tipo MIME
mime_typeimage/png, audio/wav, video/mp4, etcétera
uridónde está el archivo: una ruta file://, una URL https:// o una ruta relativa al proyecto
digestel sha256 de los bytes, sha256:...
size_bytesel tamaño en bytes
roleinput, output (el valor por defecto) o context
namecómo lo llama un prompt o una página; media_file usa el nombre del archivo
width, height, duration_sopcionales, tal como los declare su sistema

media_file(path) los rellena a partir de un archivo local. No se copia nada en el almacén de Oloproof. Todo lo que lee el archivo más tarde, una comprobación, un juez o el workbench, lo lee a través de read_media, que rechaza los bytes cuyo tamaño o sha256 difiere del registro: un contenido que ha cambiado detiene la ejecución, y un archivo que ha desaparecido deja el caso como faltante. Conserve los archivos de una ejecución, sin cambios, mientras conserve la ejecución; escriba las salidas de cada versión en su propio lugar. En su propio @evaluator, read_media(item) devuelve los bytes comprobados.

Comprobaciones sin modelo

media_check mide cada elemento registrado de un rol y aprueba cuando cada uno cumple cada condición declarada:

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

El formato se lee de los primeros bytes del archivo, así que un JPEG guardado como .png falla; los tamaños de las imágenes y las duraciones WAV se leen de sus cabeceras; el tamaño de un vídeo o la duración de un MP3 se miden con ffprobe. Los límites de duración se aplican a audio y vídeo, los de dimensiones a imágenes y vídeo.

image_matches_reference aprueba cuando cada imagen se parece a una referencia: sus hashes perceptuales de 64 bits difieren en como mucho max_distance bits (8 por defecto). Una copia redimensionada o recomprimida se queda a pocos bits; una imagen en blanco, un archivo dañado o una escena distinta no. La referencia es un único reference_file para todos los casos, o una ruta que nombra el expected de cada caso con reference_field. El hash lee la composición y la luz, no el color, así que no puede distinguir dos productos fotografiados de la misma manera, y los gráficos planos con grandes zonas en blanco lo mueven más que las fotografías. Necesita Pillow: pip install 'oloproof[media]'.

Cada campo está en la referencia de configuración. Las dos comprobaciones deciden desde la primera ejecución, ya que no llaman a ningún modelo.

Jueces que ven archivos multimedia

A un rubric_judge con media se le muestran los archivos multimedia registrados del caso con ese rol (input, output o all), cada uno nombrado en su prompt para que el juez pueda distinguir una entrada de una salida:

  - 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
  • Las imágenes se adjuntan tal cual, hasta 5 MB cada una y 20 por juicio.
  • El vídeo se adjunta como fotogramas fijos, extraídos con ffmpeg en la máquina que ejecuta el juez: video_frames: 4 toma el centro de cuatro tramos iguales, [0.5, 2.0] toma esos instantes.
  • El audio lo transcribe el transcriber (un endpoint /audio/transcriptions compatible con OpenAI, el de OpenAI cuando se omite base_url) y la transcripción va en el prompt; o, con audio: native, se adjunta como sonido para un modelo que oye (wav y mp3; no los de Anthropic).

Los digests de los archivos multimedia forman parte de la clave de un juicio, así que un archivo multimedia que cambia se juzga de nuevo y uno sin cambios sale de la caché. El transcriptor y los instantes de los fotogramas forman parte de la versión del juez, y cada juicio conserva sus transcripciones y la versión de ffmpeg. Un juez declarado para audio sin transcriptor, o para vídeo en una máquina sin ffmpeg, detiene la ejecución en lugar de dejar esos casos como faltantes. Un modelo alojado factura cada imagen además de cada palabra.

Validar un juez multimedia

Un juez que ve archivos multimedia no decide nada hasta que las etiquetas de personas muestran que coincide con ellas, exactamente igual que uno que lee texto: etiquete una muestra aleatoria y después ejecute oloproof evaluators validate (Jueces). En un espacio de trabajo alojado, la cola de revisión muestra al revisor los archivos multimedia de cada caso. Cambiar el modelo, la rúbrica, media, los fotogramas o el transcriptor crea un juez nuevo, que necesita su propia validación.

Archivos multimedia en el workbench

Los archivos multimedia de un caso aparecen junto a su salida y sus veredictos, en la página del caso y en la cola de revisión, con el tipo, el tamaño y el digest de cada archivo.

  • Un workbench local lee cada archivo desde donde lo registró la ejecución, en su máquina, y solo lo muestra mientras su sha256 siga coincidiendo.
  • Un espacio de trabajo alojado nunca recibe archivos multimedia. El navegador de quien mira obtiene cada archivo de oloproof collect en su red, con el mismo tique de corta duración que usa la cola de revisión para el contenido de los casos (Jueces), y comprueba su sha256 antes de mostrarlo. Sin un colector, la página enumera los datos de cada archivo y dice por qué no se muestra.

Una ejecución enviada lleva los registros media/v1, con el lugar donde se guarda cada archivo, en la categoría de salida artifacts; una política que retiene artifacts mantiene también esas ubicaciones de su lado.

No soportado

  • Generar archivos multimedia: su sistema crea sus archivos, y Oloproof los evalúa.
  • Subir archivos multimedia a Oloproof: no hay subida, ni alojada ni local.
  • Un modelo que vea un vídeo completo u oiga audio a través de la API de Anthropic: allí el vídeo se juzga a partir de fotogramas, y el audio a través de una transcripción.
  • Comprobaciones deterministas de lo que contiene el audio o el vídeo (tasa de error de palabras, detección de escenas): escriba una con @evaluator y read_media.
  • Hash perceptual de audio o vídeo: image_matches_reference solo lee imágenes.