Saltar al contenido

Guías

Referencia de configuración

Cada campo de oloproof.yaml y de release.yaml, con su tipo, su valor por defecto, los valores que acepta y un ejemplo, tomados de los modelos que leen los archivos. Úsela para consultar un campo; lea las páginas de la guía rápida y de gates para aprender el flujo de trabajo.

Ambos archivos se validan antes de que se ejecute nada. Un campo desconocido, un campo mal escrito o un valor del tipo equivocado es un error de configuración, y el comando sale con 2 sin ejecutar ningún caso. Ambos archivos tienen JSON Schemas, que un editor capaz de leer JSON Schema puede usar para el autocompletado. El paquete instalado los escribe, junto con los esquemas de resultados, en schemas/v1/ bajo el directorio actual: python -m oloproof_core.models.schema_export (los dos son project_config.schema.json y release_policy.schema.json).

En las tablas de abajo, "obligatorio" significa que el archivo se rechaza sin el campo; cualquier otro campo muestra el valor que se usa cuando se omite.

oloproof.yaml de un vistazo

Un proyecto pequeño y completo. Ejecuta una función de Python en local, no necesita red ni claves, y es la forma que genera oloproof init.

# oloproof.yaml
version: 1
project: support-bot
dataset: datasets/support.jsonl
system:
  name: support-bot
  callable: app.bot:answer
evaluators:
  - type: exact_match
    criterion: correct_label
    field: label

Campos de nivel superior

CampoTipoPor defectoQué es
version11Versión del formato de archivo. Solo existe 1.
projectcadenaobligatorioEl nombre del proyecto, que se muestra en los informes y se usa al hacer push.
datasetrutaobligatorioEl archivo de la suite, JSONL, relativo al proyecto. Sus filas se describen en Suites.
systemmapeoobligatorioEl sistema evaluado. Véase más abajo.
concurrencymapeosystem: 8, judge: 4Cuántas llamadas al sistema y al juez se ejecutan a la vez.
evaluatorslistaobligatorio, al menos unoLo que se mide en cada caso. Cada entrada tiene un type.
metricslistavacíaMétricas adicionales, más allá de la que ya es cada criterio de evaluador.
predictivemapeoausenteDónde están la etiqueta, la puntuación y la verdad de un clasificador. Consulte Modelos predictivos.
sliceslista de cadenasvacíaSegmentos exploratorios: metadata.<key>, relevant_position o context_truncated. Nunca llegan al gate. Consulte Segmentos.
min_slice_supportentero, al menos 130Por debajo de este número de casos elegibles, un segmento muestra su estimación pero ningún intervalo.
replicatesentero, al menos 11Medir cada caso este número de veces. El caso sigue siendo la unidad: las réplicas se agregan dentro de él antes de calcular ningún intervalo.
pricinglistavacíaLo que usted paga por millón de tokens, por modelo. Sin ella, el coste se informa en tokens y nunca en dólares.
egresslista de cadenasvacíaQué contenido en bruto puede enviar oloproof push a un espacio de trabajo alojado. Consulte Resultados y ejecución.

concurrency

CampoTipoPor defecto
systementero, al menos 18
judgeentero, al menos 14

entradas de pricing

Oloproof no incluye ninguna tabla de precios. Cada entrada nombra un modelo exactamente como lo nombra el model: de un evaluador.

CampoTipoPor defecto
modelcadenaobligatorio
input_per_mtoknúmero, 0 o másobligatorio
output_per_mtoknúmero, 0 o másobligatorio
# oloproof.yaml
version: 1
project: support-bot
dataset: datasets/support.jsonl
system:
  name: support-bot
  callable: app.bot:answer
evaluators:
  - type: exact_match
    criterion: correct_label
    field: label
pricing:
  - model: my-judge-model
    input_per_mtok: 0.15
    output_per_mtok: 0.6
egress: [raw_outputs]

system

Un sistema necesita exactamente uno de callable, http o rag.

CampoTipoPor defectoQué es
namecadenaobligatorioEl nombre del sistema. Parte de la identidad de su versión.
versioncadenaausenteSu etiqueta para esta versión. Obligatoria para un sistema HTTP. Parte de su identidad, así que cambiarla invalida las ejecuciones en caché.
callablemodule:attributeausenteUna función de Python, síncrona o asíncrona. Recibe el input del caso y devuelve la salida.
httpmapeoausenteUn endpoint al que se llama una vez por caso. Véase más abajo.
ragmapeoausenteUna clase RAG por etapas declarada con @rag_system. Véase más abajo.
configmapeovacíoAjustes libres registrados con la versión del sistema. Cambiarlos cambia la versión.
code_pathslista de patrones globvacíaArchivos fuente cuyo contenido entra en la versión de un sistema callable. Sin ella, solo se calcula el hash del propio módulo del callable.
timeout_snúmero mayor que 0120Límite de tiempo por llamada para un sistema callable. Un sistema HTTP usa en su lugar http.timeout_s.
recordslista de tipos de artefactovacíaTipos de artefacto que registra un sistema callable, como retrieval/v1. Se rechaza en un sistema HTTP o RAG.

system.http

CampoTipoPor defectoQué es
urlcadenaobligatorioAdónde se envía cada caso.
methodGET, POST o PUTPOSTEl método HTTP.
output_pathruta con puntosausenteQué campo de la respuesta JSON es la salida, como result.answer. Ausente significa el cuerpo entero.
artifactsmapeo de tipo a ruta con puntosvacíoCampos de la respuesta registrados como artefactos, como retrieval/v1: debug.retrieval.
versioncadenaausenteSe usa como versión del sistema cuando system.version está ausente. Un sistema HTTP necesita una de las dos.
timeout_snúmero mayor que 030Límite de tiempo por petición.
# oloproof.yaml
version: 1
project: support-api
dataset: datasets/support.jsonl
system:
  name: support-api
  version: "2026-10-08"
  http:
    url: http://localhost:8000/answer
    output_path: answer
    artifacts:
      retrieval/v1: debug.retrieval
evaluators:
  - type: hit_rate
    k: 5

El contrato de petición y respuesta, y lo que ocurre con los tiempos de espera agotados y los errores HTTP, están en Resultados y ejecución.

system.rag

CampoTipoPor defectoQué es
objectmodule:attributeobligatorioLa clase declarada con @rag_system, o una instancia de ella.
depthentero, al menos 1el de la claseCuántos pasajes devuelve la recuperación.
top_kentero, al menos 1el de la claseCuántos de ellos llegan a la generación.
token_budgetentero, al menos 1el de la claseUn límite de tokens para el contexto. Necesita el count_tokens(passage) de la clase.
index_versioncadenael de la claseParte de la identidad de la recuperación. Cámbiela cada vez que se reconstruya el índice.

Los ajustes indicados aquí sustituyen a los que declara la clase. Un sistema por etapas registra sus propios artefactos retrieval/v1, context/v1 y citations/v1, así que records se rechaza junto a él. Consulte RAG.

evaluators

Cada entrada toma un type y estos dos campos comunes:

CampoTipoPor defectoQué es
criterioncadenaobligatorio salvo que el tipo tenga uno por defectoEl nombre de lo que se mide. Cada criterio es una métrica, y el metric: de una regla lo nombra.
on_execution_errormissing o failmissingLo que cuenta, para este criterio, un caso cuya llamada al sistema falló. missing lo mantiene en el denominador como no observado; fail lo cuenta como un fallo.

fail solo se aplica a evaluadores de aprobado/fallo; un evaluador de puntuación con él es un error de configuración. on_execution_error es un campo de YAML; las clases de evaluador del SDK no toman ese argumento, y un caso con error cuenta como faltante.

Tipos de evaluador

"Lee" enumera aquello de lo que depende el veredicto del evaluador, que es también aquello por lo que se indexa su juicio en caché. "SDK" nombra la clase en oloproof.evaluators.

type de YAMLLeeSDKNecesita red o una clave
exact_matchoutput, expectedExactMatchno
containsoutput, expectedContainsno
regexoutputRegexno
json_schemaoutputJsonSchemano
rubric_judgeinput, output, expectedRubricJudgesí, un proveedor de modelos
model_classifieroutput (o el campo que nombra text), opcionalmente premisesolo YAMLsí, un servidor compatible con TEI
probability_judgeel caso y la salidasolo YAMLsí, un proveedor compatible con OpenAI que devuelva probabilidades logarítmicas
cascadecomo sus dos etapassolo YAMLsí
hit_rate, recall, mrr, ndcgartifacts.retrieval, expectedHitRate, Recall, MRR, NDCGno
citation_validityartifacts.citations, artifacts.contextCitationValidityno
groundedness_judgeinput, output, artifacts.contextGroundednesssí
citation_support_judgeinput, output, artifacts.context, artifacts.citationsCitationSupportsí
agent_max_stepsartifacts.agent_trajectoryAgentMaxStepsno
agent_tool_calledartifacts.agent_trajectoryAgentToolCalledno
agent_no_tool_loopartifacts.agent_trajectoryAgentNoToolLoopno
agent_tool_sequenceartifacts.agent_trajectory, expectedAgentToolSequenceno
agent_no_undeclared_toolartifacts.agent_trajectory, expectedAgentNoUndeclaredToolno
agent_constraints_satisfiedartifacts.agent_trajectoryAgentConstraintsSatisfiedno
agent_routeartifacts.agent_trajectoryAgentRouteno
agent_tool_permissionsartifacts.agent_trajectoryAgentToolPermissionsno
agent_max_handoffsartifacts.agent_trajectoryAgentMaxHandoffsno
predictive_correctel campo de etiqueta de output y de expectedPredictiveCorrectno
predictive_recallcomo arribaPredictiveRecallno
predictive_precisioncomo arribaPredictivePrecisionno
predictive_absolute_errorcomo arriba, numéricoAbsoluteErrorno
predictive_brierel campo de puntuación de output, la etiqueta de expectedBrierno
predictive_log_losscomo arribaLogLossno
predictive_rankingcomo arribaPredictiveRankingno
sin tipo YAMLartifacts.conversationConversationCompleted (solo SDK)no
sin tipo YAMLexpected, artifacts.conversationConversationJudge (solo SDK)sí
sin tipo YAMLlo que usted declare@evaluator y CustomEvaluator (solo SDK)lo que use usted

Un juez que llama a un modelo alojado envía el contenido de los casos a ese proveedor, que se lo factura. Las claves se leen de la variable de entorno nombrada en api_key_env; Oloproof nunca las guarda en estos archivos.

Evaluadores deterministas

TipoCampoTipoPor defecto
exact_matchfieldruta con puntos en la salidaausente: la salida entera
exact_matchexpected_fieldruta con puntos en expectedausente: igual que field
exact_matchstripbooleanotrue
exact_matchcasefoldbooleanofalse
containsfield, expected_fieldcomo exact_matchausente
regexpatternexpresión regularobligatorio
regexfieldruta con puntosausente
regexpass_ifmatch o no_matchmatch
json_schemaschemaun JSON Schema en línea, o la ruta a un archivo JSON relativa al proyectoobligatorio
json_schemafieldruta con puntosausente

Jueces modelo

rubric_judge, groundedness_judge y citation_support_judge comparten estos campos. rubric_judge exige exactamente uno de rubric_file o rubric_text; los dos jueces RAG toman como mucho uno y, si no, usan una rúbrica integrada. Su criterion vale por defecto groundedness y citation_support.

CampoTipoPor defecto
provideranthropic, openai o openai_compatibleobligatorio
modelcadenaobligatorio
rubric_filerutaausente
rubric_textcadenaausente
api_key_envnombre de variable de entornoANTHROPIC_API_KEY u OPENAI_API_KEY
base_urlURLla del proveedor
temperaturenúmero0
max_tokensentero, al menos 1512
timeout_snúmero mayor que 060

probability_judge plantea una pregunta tipada y lee las probabilidades del modelo:

CampoTipoPor defecto
provideropenai o openai_compatibleobligatorio
modelcadenaobligatorio
questioncadenaobligatorio
formyes_no, choice o scoreobligatorio
min_probabilitynúmero en (0, 1]obligatorio
optionsmapeo de respuesta a descripciónpara choice
pass_optionslista de respuestaspara choice
levelsmapeo de nivel a descripción, el más bajo primeropara score
pass_at_leastun nivelpara score
calibrationslope (mayor que 0), intercept, from_versionausente
api_key_env, base_urlcomo arribaausente
timeout_snúmero mayor que 060

cascade ejecuta primero un juez barato y escala los casos inciertos:

CampoTipoPor defecto
firstuna entrada probability_judgeobligatorio
thenuna entrada rubric_judge o probability_judgeobligatorio
escalate_betweendos probabilidadesobligatorio

Las etapas juzgan el propio criterion de la cascada; una etapa que nombra otro se rechaza.

model_classifier puntúa texto con un modelo entrenado en un servidor compatible con TEI:

CampoTipoPor defecto
modelcadenaobligatorio
base_urlURLobligatorio
labella etiqueta del clasificador que se leeobligatorio
min_score o max_scorenúmero en [0, 1], exactamente unoobligatorio
textqué campo se clasificaoutput
premiseun segundo texto, para clasificadores de paresausente
api_key_envnombre de variable de entornoausente
timeout_snúmero mayor que 030

Evaluadores RAG

TipoCampoTipoPor defecto
hit_rate, recall, mrr, ndcgkentero, al menos 15 para hit_rate y recall, 10 para mrr y ndcg
hit_rate, recall, mrr, ndcgrelevance_unitdoc o chunkdoc
hit_rate, recall, mrr, ndcgcriterioncadena<type>_at_<k>, como hit_rate_at_5
citation_validityrequire_citationsbooleanofalse
citation_validitycriterioncadenacitations_valid

Evaluadores de agentes

TipoCampoTipoPor defecto
agent_max_stepsmax_stepsentero, al menos 1obligatorio
agent_tool_calledtool_namecadenaobligatorio
agent_tool_calledmin_callsentero, al menos 11
agent_no_tool_loopmax_repeatsentero, al menos 12
agent_tool_sequenceorderedbooleanotrue
agent_constraints_satisfiedconstraintslista de nombres de restriccionesvacía
agent_tool_permissionspermissionsmapeo de agente a herramientas permitidasobligatorio
agent_max_handoffsmax_handoffsentero, 0 o másobligatorio

Cada tipo de agente tiene un criterion por defecto, así que puede omitirse: el nombre de su propio tipo, o uno construido a partir de su ajuste (agent_steps_le_8, agent_tool_lookup_called, agent_handoffs_le_2). Consulte Agentes.

Evaluadores predictivos

TipoCampoTipoPor defecto
predictive_correct, predictive_recall, predictive_precisionpositivecualquier valor JSONtrue, o el del bloque predictive:
ídemfieldcampo de salidalabel, o predictive.label_field
ídemexpected_fieldcampo esperadolabel, o predictive.expected_field
predictive_absolute_errortarget_rangedos númerosobligatorio
predictive_absolute_errorfield, expected_fieldcomo arribalabel
predictive_brier, predictive_log_loss, predictive_rankingpositivecualquier valor JSONtrue, o el del bloque
ídemfieldcampo de salidascore, o predictive.score_field
ídemexpected_fieldcampo esperadolabel, o el del bloque
predictive_log_lossclipnúmero en (0, 0.5)obligatorio

Un evaluador predictivo que no escribe positive, field o expected_field lo toma del bloque predictive:; un valor que sí escribe se conserva.

predictive

CampoTipoPor defecto
label_fieldcadenalabel
score_fieldcadenascore
expected_fieldcadenalabel
positivecualquier valor JSONtrue
calibration_binsentero, al menos 110
thresholdslista de númerosvacía
averagemacro o microausente: sin agregado

metrics

Cada criterio de evaluador ya es una métrica. Una entrada de metrics: añade una más, distinguida por type.

typeCamposQué es
quantileid, source, quantile en (0, 1)Un cuantil de latency_ms, input_tokens, output_tokens, cost_usd, agent_steps o agent_tool_calls.
rankingid, criterion, statistic: roc_auc o average_precisionUn estadístico sobre el orden de las puntuaciones de un criterio de ranking.
human_score, human_preferenceidRechazadas: ningún método admitido lee todavía estas etiquetas.
cost_per_acceptedid, criterion, cost_ceiling_usd, cost_ceiling_sourceRechazada hasta que una auditoría admita su integración.
# oloproof.yaml
version: 1
project: support-bot
dataset: datasets/support.jsonl
system:
  name: support-bot
  callable: app.bot:answer
evaluators:
  - type: exact_match
    criterion: correct_label
    field: label
metrics:
  - id: latency_p95
    type: quantile
    source: latency_ms
    quantile: 0.95

release.yaml

La política de publicación: qué reglas deciden, y qué decisiones bloquean. Los ajustes omitidos conservan sus valores por defecto, así que una política que solo nombra sus reglas sigue bloqueando con FAIL, INSUFFICIENT_EVIDENCE y MANUAL_REVIEW.

# release.yaml
version: 1
rules:
  - id: label_accuracy
    metric: correct_label
    min: 0.8
CampoTipoPor defectoQué es
version11Versión del formato de archivo.
confidence_levelprobabilidad0.95El nivel de cada intervalo que lee una regla.
block_onlista de estados de decisiónFAIL, INSUFFICIENT_EVIDENCE, MANUAL_REVIEWEstados que hacen que el gate bloquee, y que fijan el código de salida.
warn_onlista de estados de decisiónvacíaEstados que avisan sin bloquear. No debe solaparse con block_on.
block_on_partial_runbooleanotrueSi una ejecución que no se completó bloquea, con salida 5.
require_validated_evaluatorsbooleanotrueSi una regla sobre un juez modelo retiene su decisión hasta que el juez se valide frente a etiquetas humanas. Los evaluadores deterministas están exentos.
minimum_evaluator_agreementnúmero en [0, 1]ausenteEl acuerdo con las etiquetas humanas que un juez debe alcanzar, según su límite inferior, antes de poder validarse.
maximum_evaluator_biasnúmero en (0, 1]ausenteCuánto puede alejarse la tasa de aprobados de un juez de la de las personas antes de poder validarse.
allow_approximate_methodsbooleanofalseSi una regla puede decidir sobre un intervalo que el motor marca como aproximado (el intervalo binario por clústeres). Si no, indica MANUAL_REVIEW.
min_clustersentero, al menos 1020Con menos clústeres que este número, una regla por clústeres indica INSUFFICIENT_EVIDENCE.
difference_methodbounded_paired_difference@1 o conditional_exact_paired_difference@1ausente: el primeroQué método admitido acota una diferencia emparejada de tasas binarias.
early_stoppingbooleanofalseEjecutar los casos por lotes y detenerse en cuanto todas las reglas estén decididas. Consulte Gates.
early_stopping_seedentero, 0 o másausenteLa semilla del orden de los casos.
early_stopping_batch_sizeentero, al menos 125Casos por lote.
ruleslistaobligatorio, al menos unaLas reglas. Véase más abajo.
familieslistavacíaReglas cuyos FAIL falsos se controlan conjuntamente.
review_rulemapeoausenteRechazado: la integración todavía no está admitida.

rules

Una sola lista contiene ambos tipos. Una regla de ejecución toma exactamente uno de min, max o max_failures. Una regla de comparación nombra su kind y decide una diferencia entre dos ejecuciones; consulte Reglas de comparación.

CampoTipoPor defectoSe aplica a
idcadenaobligatoriotodas
metricun id de métrica o un criterioobligatoriotodas
kindinterval_threshold, observed_count, superiority, non_inferiority, equivalencededucido para las reglas de ejecucióntodas
minnúmeroausentereglas de ejecución: PASS cuando el límite inferior del intervalo es al menos este valor
maxnúmeroausentereglas de ejecución: PASS cuando el límite superior del intervalo es como mucho este valor
max_failuresentero, 0 o másausenteobserved_count: un conteo sobre la suite ejecutada, sin intervalo
marginnúmero mayor que 0, en las unidades de la métricaausentenon_inferiority y equivalence; se rechaza en superiority
directionmin o maxminsolo non_inferiority: si lo mejor es más alto o más bajo
max_missing_fractionnúmero en [0, 1]ausentereglas de intervalo y de comparación
requires_manual_reviewbooleanofalsetodas: la regla siempre indica MANUAL_REVIEW
scopeglobal o un segmentoglobalreglas de intervalo y de comparación
min_supportentero, al menos 1ausentereglas de comparación sobre un segmento

families

CampoTipoPor defecto
idcadenaobligatorio
correctionholmholm
ruleslista de ids de reglaobligatorio, al menos uno
# release.yaml
version: 1
warn_on: [INSUFFICIENT_EVIDENCE]
block_on: [FAIL, MANUAL_REVIEW]
rules:
  - id: label_accuracy
    metric: correct_label
    min: 0.8
    max_missing_fraction: 0.05
  - id: no_regression
    metric: correct_label
    kind: non_inferiority
    margin: 0.02

Tipos de artefacto

Un artefacto es un registro tipado que un sistema escribe junto a su salida, como lo que recuperó. Un tipo es un nombre en minúsculas con una versión opcional, que coincide con ^[a-z][a-z0-9_]*(/v[1-9][0-9]*)?$. Los evaluadores que necesitan un artefacto lo nombran, y una ejecución cuyo sistema no declara un tipo requerido se rechaza antes de empezar, en lugar de contar todos los casos como faltantes.

TipoEscrito porRequerido por
retrieval/v1current_case().retrieval(...), un @rag_system, o http.artifactshit_rate, recall, mrr, ndcg
context/v1current_case().context(...) o un @rag_systemcitation_validity, groundedness_judge, citation_support_judge
citations/v1current_case().citations(...) o un @rag_systemcitation_validity, citation_support_judge
agent_trajectory/v1current_case().agent_trajectory(...)todos los evaluadores agent_*, y las fuentes agent_steps y agent_tool_calls
conversation/v1current_case().artifact(CONVERSATION, ...)ConversationCompleted, ConversationJudge
stage_timings/v1un @rag_systemninguno; se muestra junto a la latencia

Un sistema callable declara los tipos que registra en records: (o @system(records=...)); un sistema HTTP, en http.artifacts; un sistema RAG por etapas registra los suyos propios.

Versiones, claves de caché e invalidación

Oloproof reutiliza el trabajo cuyas entradas no han cambiado, y decide qué significa "sin cambios" a partir de digests de contenido. Cada uno lo calcula el motor y se registra con la ejecución.

RegistroSe reutiliza cuando estos son idénticos
Versión del sistemaname, version, config, y un digest del código: el código fuente del módulo de un callable (o cada archivo que coincide con code_paths), el url, method, output_path y artifacts de un sistema HTTP
Ejecuciónla versión del sistema, el input del caso y el índice de réplica. Solo se reutilizan las ejecuciones correctas.
Juiciola versión del evaluador (su tipo y cada ajuste) y un digest de cada campo que lee, como se enumera en la tabla de evaluadores
Análisisel plan de análisis, la métrica, el nivel de confianza, el digest de la suite y cada entrada que contó
Gatecada análisis, el digest de la política, si la ejecución se completó, y el estado efectivo de cada evaluador que citan las decisiones

Lo que Oloproof no puede ver le corresponde a usted declararlo:

  • El comportamiento de un sistema HTTP está en el servidor. Cambie system.version cada vez que cambie lo que hay detrás de la URL, o una salida antigua en caché representará al sistema nuevo.
  • Los módulos auxiliares de un callable solo entran en el hash cuando code_paths coincide con ellos. Sin él, editar un auxiliar no cambia la versión.
  • Un método o un objeto callable debe declarar una versión, y la versión debe cambiar cuando cambia el estado del objeto.
  • Un índice RAG se identifica por index_version; cámbiela cuando se reconstruya el índice.
  • La identidad de un juez modelo son sus ajustes, no los pesos del proveedor. La caché no detecta que un proveedor actualice el modelo detrás del mismo nombre.
  • Un @evaluator personalizado calcula el hash del archivo de módulo que lo define, y sus juicios solo se reutilizan entre ejecuciones cuando declara cacheable=True. Los jueces de rúbrica integrados se pueden almacenar en caché; los evaluadores deterministas se recalculan, lo cual es barato.

El trabajo en caché vive en el almacén local del proyecto, .oloproof/store.sqlite junto a oloproof.yaml (o bajo OLOPROOF_HOME). Borrar el almacén descarta todas las cachés y todas las ejecuciones. En un espacio de trabajo alojado, el motor no reutiliza ejecuciones, juicios ni análisis en caché, porque un push puede escribirlos; los vuelve a calcular.