Saltar al contenido

Guías

Referencia de resultados y ejecución

Lo que una ejecución envía a un sistema HTTP y espera de vuelta, cómo entra cada caso en el denominador de una métrica, los estados de decisión y los códigos de motivo que los explican, los códigos de salida, y qué datos se quedan en local o pasan a un espacio de trabajo alojado. Para las ideas que hay detrás, lea Conceptos; para los campos de la política, lea la Referencia de configuración.

El contrato del sistema HTTP

Un sistema HTTP (system.http en oloproof.yaml) se llama una vez por caso, y una vez por réplica.

AspectoComportamiento
PeticiónPOST por defecto (se aceptan GET y PUT). El cuerpo es el valor input del caso como JSON.
Cabeceras y autenticaciónNo se puede configurar ninguna. La petición lleva solo los valores por defecto del cliente HTTP. Un endpoint que necesita una clave debe estar detrás de un sistema callable de Python que la añada.
RespuestaDebe ser JSON. output_path selecciona la salida mediante una ruta con puntos, como result.answer; sin él, la salida es el cuerpo entero. Un campo output_path ausente se registra como un error de ejecución de ese caso.
ArtefactosCada entrada de http.artifacts lee una ruta con puntos de la respuesta. Un campo declarado que falta en una respuesta es un error de contrato, y la ejecución se detiene con salida 2.
Tiempo de esperahttp.timeout_s por petición, 30 segundos por defecto.
ReintentosLos tiempos de espera agotados, los fallos de conexión y las respuestas HTTP 408, 429 y 5xx se reintentan, hasta cuatro intentos en total, con un retroceso exponencial con jitter que respeta Retry-After. Las demás respuestas 4xx no se reintentan.
Tras el último intentoLa ejecución del caso se registra como un error y el caso cuenta como faltante (o como fallido, con on_execution_error: fail). La ejecución continúa.
ConcurrenciaComo máximo concurrency.system peticiones en curso, 8 por defecto.

La URL, el método, la ruta de salida y el mapeo de artefactos entran en la versión del sistema, pero lo que hace el servidor no. Cambie system.version siempre que cambie el comportamiento del servidor; consulte la Referencia de configuración para saber por qué.

Tres vocabularios distintos

Un resultado tiene tres tipos de estado, y ninguno sustituye nunca a otro.

TipoValoresResponde a
Estado de decisiónPASS, FAIL, INSUFFICIENT_EVIDENCE, MANUAL_REVIEWLo que dice la evidencia sobre una regla.
Estado de ejecuciónEstado de la ejecución RUN_ERROR o CANCELLED; completitud de la ejecución PARTIAL; ejecución del caso ERROR o TIMEOUTLo que le ocurrió a la ejecución o a la llamada de un caso. No es un resultado de calidad.
Acción de publicaciónALLOW, WARN, BLOCKLo que su política hace con cada decisión: los estados de block_on bloquean, los de warn_on avisan, los demás permiten.

Una ejecución que termina con normalidad es DECIDED, o DECIDED_EARLY cuando la terminó la parada temprana. Una ejecución interrumpida con Ctrl-C o por la cancelación de la tarea es CANCELLED; una cuyo arnés lanzó una excepción es RUN_ERROR. Cualquiera de las dos deja la ejecución en PARTIAL, conserva los casos que terminaron y permite que la siguiente ejecución reutilice sus registros en caché. Consulte Errores.

Para un umbral mínimo T y un intervalo [L, U], una regla es PASS cuando L >= T, FAIL cuando U < T, e INSUFFICIENT_EVIDENCE en otro caso. Un umbral máximo es simétrico. Antes de leer el intervalo, una regla comprueba si debe decidir siquiera: primero los motivos de MANUAL_REVIEW, después los de INSUFFICIENT_EVIDENCE. El primer nivel con un motivo decide, y enumera todos los motivos que encontró.

Códigos de motivo

Cada decisión lleva uno o más códigos de motivo.

MANUAL_REVIEW

CódigoSignificado
policy_requires_reviewLa regla fija requires_manual_review: true.
unsupported_methodNo existe ningún intervalo admitido para esta métrica en esta situación. Véase más abajo.
unsupported_dependence_structureLa suite declara clústeres (group_id) y ningún método admitido los trata para esta métrica.
approximate_method_not_permittedEl único intervalo es aproximado, y la política no fija allow_approximate_methods: true.
evaluator_retiredUn evaluador detrás de la métrica se retiró.

INSUFFICIENT_EVIDENCE

CódigoSignificado
no_observationsNo se observó ningún caso para esta métrica.
missingness_exceeds_policyFaltan más casos elegibles de los que permite el max_missing_fraction de la regla.
missingness_unboundedEl método descarta los casos faltantes en lugar de acotarlos, y la regla no declara ningún max_missing_fraction.
evaluator_not_validatedUn juez modelo detrás de la métrica no se ha validado frente a etiquetas humanas, y require_validated_evaluators está activado (por defecto).
evaluator_recalibration_requiredEl juez se validó sobre un modelo servido del que no proceden los veredictos de esta ejecución.
interval_unavailableLa métrica no tiene ningún intervalo que leer.
insufficient_clustersMenos clústeres que el min_clusters de la política.
interval_monte_carlo_uncertainEl umbral cae dentro de la incertidumbre de simulación de un límite por clústeres.
interval_overlaps_thresholdEl intervalo contiene el umbral. Más casos lo estrecharían.
interval_unboundedEl intervalo no tiene límite en el lado que lee la regla.
missing_could_change_outcomeUna regla observed_count: los casos faltantes podrían llevar los fallos por encima de max_failures.
interval_overlaps_zero, interval_overlaps_margin, interval_overlaps_marginsUna comparación cuyo intervalo de la diferencia abarca el cero o un margen.
insufficient_supportUna regla de comparación por segmento cuyo segmento tiene menos casos que su min_support.
family_correction_withheldUna regla de una entrada families: en la que la corrección de Holm se detuvo antes de llegar a ella.

PASS y FAIL

CódigoEstado
lower_bound_meets_minimum, upper_bound_meets_maximumPASS
upper_bound_below_minimum, lower_bound_above_maximumFAIL
observed_failures_within_limitPASS
observed_failures_exceed_limitFAIL
difference_above_zero, lower_bound_above_margin, interval_within_marginsPASS (comparación)
difference_below_zero, upper_bound_below_margin, interval_outside_marginsFAIL (comparación)
cost_ceiling_exceededSe indica junto al estado de una regla de coste cuyo techo declarado superó una ejecución registrada

Solo en el espacio de trabajo alojado

Un espacio de trabajo que decide él mismo una ejecución enviada puede retener una decisión con ppi_not_verified (no verificó el intervalo en el que se apoya la decisión), execution_not_verified (las salidas no proceden de un runner registrado) o workspace_cannot_decide (no tiene copia de la política, o no pudo leer la evidencia). Consulte Gates.

Cómo entra cada caso en el denominador

Cada métrica informa de cuatro conteos: n_total (casos de la suite), n_eligible, n_observed y n_missing, con n_eligible = n_observed + n_missing. Los casos fuera de n_eligible se enumeran en exclusions con un motivo.

Lo que le ocurrió al casoCuenta comoEn el denominador
El evaluador devolvió aprobado o falloobservado, éxito o fallosí
El evaluador se declaró no aplicable (por ejemplo, sin valor esperado con el que comparar)excluido, con el motivono
La llamada al sistema dio error o agotó el tiempofaltante, o fallo con on_execution_error: failsí
El evaluador lanzó una excepción, o no se pudo leer la respuesta de un juezfaltantesí
El caso nunca se ejecutó porque la ejecución se interrumpiófaltante, y la ejecución es PARTIALsí

Un caso faltante se acota, no se descarta. Para una tasa de aprobados, el límite inferior del intervalo trata cada caso faltante como un fallo y su límite superior como un éxito, así que una ejecución con muchos casos faltantes tiene un intervalo ancho que no puede superar una regla exigente; una media acotada sustituye de la misma manera los extremos de su rango declarado. Un método que no puede acotar los casos faltantes (un estadístico de ranking, por ejemplo) los descarta y registra el supuesto, y una regla sobre él indica missingness_unbounded hasta que declare max_missing_fraction.

Una regla observed_count cuenta los fallos sobre la suite ejecutada y no lee ningún intervalo. Solo aprueba cuando los fallos observados más todos los casos faltantes siguen cabiendo dentro de max_failures.

Métricas sin intervalo admitido

Una regla solo decide sobre un intervalo cuyo método ha sido admitido por auditoría. Donde no existe ninguno, la métrica se sigue calculando y mostrando, y una regla sobre ella no toma prestado un método no validado:

SituaciónLo que indica una regla sobre ella
Una métrica de puntuación (media) sin rango declarado, como un evaluador de puntuación personalizado sin score_rangeMANUAL_REVIEW, unsupported_method
Una métrica de media, cuantil, ranking o coste en una suite que declara group_idMANUAL_REVIEW, unsupported_dependence_structure
Una tasa de aprobados en una suite agrupadaun intervalo aproximado: MANUAL_REVIEW salvo con allow_approximate_methods: true, y entonces las comprobaciones de clústeres de arriba
Una métrica de cuantil o ranking con replicates por encima de 1MANUAL_REVIEW, unsupported_method
Cualquier métrica en una suite con group_id y réplicas a la vezMANUAL_REVIEW, unsupported_dependence_structure
Una comparación en una suite agrupadaMANUAL_REVIEW
Un segmento por debajo de min_slice_supportsin intervalo, pero los segmentos nunca llegan al gate
Métricas human_score, human_preference o cost_per_acceptedrechazadas al leer el archivo, salida 2

Códigos de salida

oloproof gate, oloproof run con una política, y los demás comandos que deciden usan todos los mismos códigos.

CódigoSignificado
0Nada sobre lo que la política bloquea: todas las reglas aprobaron, o las que no lo hicieron están fuera de block_on.
1Una regla de block_on falló.
2La configuración o la invocación eran incorrectas, o un sistema incumplió su contrato; no se decidió nada.
3Una regla de block_on indicó INSUFFICIENT_EVIDENCE.
4Una regla de block_on indicó MANUAL_REVIEW.
5La ejecución no se completó y block_on_partial_run está activado (por defecto).

Cuando se aplican varios, el código que se informa es el primero de 1, 5, 4, 3. Un estado que se deja fuera de block_on no puede cambiar el código de salida: con block_on: [FAIL] y warn_on: [INSUFFICIENT_EVIDENCE], una regla sin decidir avisa y el gate sale con 0. Por tanto, la salida 0 solo significa que no ocurrió nada sobre lo que su política bloquea, no que todas las reglas aprobaran. Consulte Gates.

Dónde se ejecuta el trabajo y adónde van los datos

En local, por defecto

oloproof run, oloproof gate y el SDK se ejecutan en su máquina. Cada registro (casos, salidas, artefactos, juicios, métricas y decisiones) se escribe en .oloproof/store.sqlite junto a oloproof.yaml, o bajo OLOPROOF_HOME cuando está definido. No se envía nada a Oloproof. El único tráfico de red es el que provoca su configuración: llamadas a la URL de su sistema HTTP, y llamadas que un juez modelo o un clasificador modelo hacen a su proveedor, que recibe el contenido de los casos que juzga y se lo factura a usted.

Enviar a un espacio de trabajo alojado

oloproof push envía la evidencia de una ejecución al espacio de trabajo que conectó con oloproof login. Por defecto envía métricas, intervalos, decisiones y segmentos agregados, y la identidad, el estado, los tiempos y el uso de cada registro, pero no su contenido. El contenido en bruto se redacta campo por campo antes de que nada salga de la máquina, y un registro redactado indica qué categorías se retuvieron. Una categoría solo se envía cuando egress: en oloproof.yaml la incluye:

CategoríaLo que abarca
raw_inputsEntradas de los escenarios, valores esperados y metadatos de los casos: las filas del conjunto de datos
raw_outputsLo que el sistema evaluado devolvió para cada caso
judge_rationalesEl texto que escribió un juez para explicar un veredicto, que cita la salida
artifactsEl contexto de recuperación, las citas y las trayectorias registradas durante una ejecución
error_detailMensajes y detalles de excepciones, que a menudo llevan la entrada literal
system_configLa configuración declarada del sistema evaluado y de sus evaluadores
label_notesLa nota que una persona escribió junto a una etiqueta, que a menudo cita la salida
span_namesNombres de trazas, spans, herramientas y agentes que registró una instrumentación

Los digests de los registros no se recalculan tras la redacción, así que un registro alojado sigue nombrando la evidencia original, que se queda en su máquina. La redacción no es cifrado, y una métrica sobre un segmento muy pequeño todavía puede identificar los casos que hay detrás.

Cuando los revisores etiquetan casos en la cola de revisión alojada, su navegador obtiene el contenido de los casos de oloproof collect, que se ejecuta de su lado; no pasa por el espacio de trabajo. Las claves de proveedor que usa un espacio de trabajo se guardan con oloproof credentials set, y oloproof credentials list muestra sus nombres, nunca sus valores. Un trabajo gestionado se ejecuta en un worker que opera Oloproof, que no ejecuta su código Python; oloproof job informa de su resultado y sale según su gate.

En un espacio de trabajo alojado, el motor nunca reutiliza ejecuciones, juicios ni análisis en caché, porque un push puede escribir en esas cachés; los vuelve a calcular.