Pular para o conteúdo

Guias

Referência de configuração

Todo campo de oloproof.yaml e release.yaml, com o seu tipo, o seu padrão, os valores que aceita e um exemplo, extraídos dos modelos que leem os arquivos. Use-a para consultar um campo; leia as páginas do início rápido e de gate para aprender o fluxo de trabalho.

Os dois arquivos são validados antes que qualquer coisa rode. Um campo desconhecido, um campo com erro de grafia ou um valor do tipo errado é um erro de configuração, e o comando sai com 2 sem executar nenhum caso. Os dois arquivos têm JSON Schemas, que um editor capaz de ler JSON Schema pode usar para autocompletar. O pacote instalado os grava, junto com os schemas de resultado, em schemas/v1/ sob o diretório atual: python -m oloproof_core.models.schema_export (os dois são project_config.schema.json e release_policy.schema.json).

Nas tabelas abaixo, "obrigatório" significa que o arquivo é recusado sem o campo; qualquer outro campo mostra o valor usado quando é omitido.

oloproof.yaml em resumo

Um projeto pequeno e completo. Ele roda uma função Python localmente, não precisa de rede nem de chaves, e é a forma que o oloproof init gera.

# 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 nível superior

CampoTipoPadrãoO que é
version11Versão do formato do arquivo. Só existe 1.
projectstringobrigatórioO nome do projeto, mostrado nos relatórios e usado no push.
datasetcaminhoobrigatórioO arquivo da suíte, JSONL, relativo ao projeto. As suas linhas são descritas em Suítes.
systemmapeamentoobrigatórioO sistema em teste. Veja abaixo.
concurrencymapeamentosystem: 8, judge: 4Quantas chamadas ao sistema e quantas a juízes rodam ao mesmo tempo.
evaluatorslistaobrigatório, pelo menos umO que é medido em cada caso. Cada entrada tem um type.
metricslistavaziaMétricas extras além daquela que cada critério de avaliador já é.
predictivemapeamentoausenteOnde ficam o rótulo, a pontuação e a verdade de um classificador. Veja Modelos preditivos.
sliceslista de stringsvaziaSegmentos exploratórios: metadata.<key>, relevant_position ou context_truncated. Nunca chegam ao gate. Veja Segmentos.
min_slice_supportinteiro, pelo menos 130Abaixo deste número de casos elegíveis um segmento mostra a estimativa mas nenhum intervalo.
replicatesinteiro, pelo menos 11Mede cada caso este número de vezes. O caso continua sendo a unidade: as réplicas são agregadas dentro dele antes de qualquer intervalo ser calculado.
pricinglistavaziaQuanto você paga por milhão de tokens, por modelo. Sem isso o custo é informado em tokens e nunca em dólares.
egresslista de stringsvaziaQual conteúdo bruto o oloproof push pode enviar a um espaço de trabalho hospedado. Veja Resultados e execução.

concurrency

CampoTipoPadrão
systeminteiro, pelo menos 18
judgeinteiro, pelo menos 14

Entradas de pricing

O Oloproof não traz nenhuma tabela de preços. Cada entrada nomeia um modelo exatamente como o model: de um avaliador o nomeia.

CampoTipoPadrão
modelstringobrigatório
input_per_mtoknúmero, 0 ou maisobrigatório
output_per_mtoknúmero, 0 ou maisobrigatório
# 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

Um sistema precisa de exatamente um entre callable, http ou rag.

CampoTipoPadrãoO que é
namestringobrigatórioO nome do sistema. Parte da identidade da sua versão.
versionstringausenteO seu rótulo para esta versão. Obrigatório para um sistema HTTP. Parte da sua identidade, então mudá-lo invalida as execuções em cache.
callablemodule:attributeausenteUma função Python, síncrona ou assíncrona. Recebe o input do caso e retorna a saída.
httpmapeamentoausenteUm endpoint chamado uma vez por caso. Veja abaixo.
ragmapeamentoausenteUma classe RAG em estágios declarada com @rag_system. Veja abaixo.
configmapeamentovazioConfigurações livres registradas com a versão do sistema. Mudá-las muda a versão.
code_pathslista de padrões globvaziaArquivos-fonte cujo conteúdo entra na versão de um sistema callable. Sem isso só o módulo do próprio callable entra no hash.
timeout_snúmero acima de 0120Limite de tempo por chamada para um sistema callable. Um sistema HTTP usa http.timeout_s no lugar.
recordslista de tipos de artefatovaziaTipos de artefato que um sistema callable registra, como retrieval/v1. Recusado em um sistema HTTP ou RAG.

system.http

CampoTipoPadrãoO que é
urlstringobrigatórioPara onde cada caso é enviado.
methodGET, POST ou PUTPOSTO método HTTP.
output_pathcaminho com pontosausenteQual campo da resposta JSON é a saída, como result.answer. Ausente significa o corpo inteiro.
artifactsmapeamento de tipo para caminho com pontosvazioCampos da resposta registrados como artefatos, como retrieval/v1: debug.retrieval.
versionstringausenteUsada como versão do sistema quando system.version está ausente. Um sistema HTTP precisa de uma das duas.
timeout_snúmero acima de 030Limite de tempo por requisição.
# 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

O contrato de requisição e resposta, e o que acontece com timeouts e erros HTTP, estão em Resultados e execução.

system.rag

CampoTipoPadrãoO que é
objectmodule:attributeobrigatórioA classe declarada com @rag_system, ou uma instância dela.
depthinteiro, pelo menos 1o da classeQuantas passagens a recuperação retorna.
top_kinteiro, pelo menos 1o da classeQuantas delas chegam à geração.
token_budgetinteiro, pelo menos 1o da classeUm limite de tokens no contexto. Precisa do count_tokens(passage) da classe.
index_versionstringo da classeParte da identidade da recuperação. Mude-o sempre que o índice for reconstruído.

As configurações dadas aqui substituem as que a classe declara. Um sistema em estágios registra os seus próprios artefatos retrieval/v1, context/v1 e citations/v1, então records é recusado ao lado dele. Veja RAG.

evaluators

Toda entrada recebe um type e estes dois campos comuns:

CampoTipoPadrãoO que é
criterionstringobrigatório, a menos que o tipo tenha um padrãoO nome do que é medido. Cada critério é uma métrica, e o metric: de uma regra o nomeia.
on_execution_errormissing ou failmissingComo conta, para este critério, um caso cuja chamada ao sistema falhou. missing o mantém no denominador como não observado; fail o conta como falha.

fail só se aplica a avaliadores de aprovação ou reprovação; um avaliador de pontuação com ele é um erro de configuração. on_execution_error é um campo YAML; as classes de avaliadores do SDK não recebem esse argumento, e um caso com erro conta como faltante.

Tipos de avaliador

"Lê" lista aquilo de que o veredicto do avaliador depende, que também é a chave do seu julgamento em cache. "SDK" nomeia a classe em oloproof.evaluators.

type YAMLLêSDKPrecisa de rede ou de uma chave
exact_matchoutput, expectedExactMatchnão
containsoutput, expectedContainsnão
regexoutputRegexnão
json_schemaoutputJsonSchemanão
rubric_judgeinput, output, expectedRubricJudgesim, um provedor de modelos
model_classifieroutput (ou o campo nomeado por text), opcionalmente premisesó YAMLsim, um servidor compatível com TEI
probability_judgeo caso e a saídasó YAMLsim, um provedor compatível com OpenAI que retorne log-probabilidades
cascadecomo os seus dois estágiossó YAMLsim
hit_rate, recall, mrr, ndcgartifacts.retrieval, expectedHitRate, Recall, MRR, NDCGnão
citation_validityartifacts.citations, artifacts.contextCitationValiditynão
groundedness_judgeinput, output, artifacts.contextGroundednesssim
citation_support_judgeinput, output, artifacts.context, artifacts.citationsCitationSupportsim
agent_max_stepsartifacts.agent_trajectoryAgentMaxStepsnão
agent_tool_calledartifacts.agent_trajectoryAgentToolCallednão
agent_no_tool_loopartifacts.agent_trajectoryAgentNoToolLoopnão
agent_tool_sequenceartifacts.agent_trajectory, expectedAgentToolSequencenão
agent_no_undeclared_toolartifacts.agent_trajectory, expectedAgentNoUndeclaredToolnão
agent_constraints_satisfiedartifacts.agent_trajectoryAgentConstraintsSatisfiednão
agent_routeartifacts.agent_trajectoryAgentRoutenão
agent_tool_permissionsartifacts.agent_trajectoryAgentToolPermissionsnão
agent_max_handoffsartifacts.agent_trajectoryAgentMaxHandoffsnão
predictive_correcto campo de rótulo de output e expectedPredictiveCorrectnão
predictive_recallcomo acimaPredictiveRecallnão
predictive_precisioncomo acimaPredictivePrecisionnão
predictive_absolute_errorcomo acima, numéricoAbsoluteErrornão
predictive_briero campo de pontuação de output, o rótulo de expectedBriernão
predictive_log_losscomo acimaLogLossnão
predictive_rankingcomo acimaPredictiveRankingnão
nenhum tipo YAMLartifacts.conversationConversationCompleted (só SDK)não
nenhum tipo YAMLexpected, artifacts.conversationConversationJudge (só SDK)sim
nenhum tipo YAMLo que você declarar@evaluator e CustomEvaluator (só SDK)depende de você

Um juiz que chama um modelo hospedado envia o conteúdo dos casos a esse provedor e é cobrado por ele. As chaves são lidas da variável de ambiente nomeada em api_key_env; o Oloproof nunca as armazena nesses arquivos.

Avaliadores determinísticos

TipoCampoTipoPadrão
exact_matchfieldcaminho com pontos na saídaausente: a saída inteira
exact_matchexpected_fieldcaminho com pontos em expectedausente: igual a field
exact_matchstripbooleanotrue
exact_matchcasefoldbooleanofalse
containsfield, expected_fieldcomo em exact_matchausente
regexpatternexpressão regularobrigatório
regexfieldcaminho com pontosausente
regexpass_ifmatch ou no_matchmatch
json_schemaschemaum JSON Schema inline, ou um caminho para um arquivo JSON relativo ao projetoobrigatório
json_schemafieldcaminho com pontosausente

Juízes baseados em modelo

rubric_judge, groundedness_judge e citation_support_judge compartilham estes campos. rubric_judge exige exatamente um entre rubric_file e rubric_text; os dois juízes de RAG aceitam no máximo um e, caso contrário, usam uma rubrica embutida. O criterion deles tem como padrão groundedness e citation_support.

CampoTipoPadrão
provideranthropic, openai ou openai_compatibleobrigatório
modelstringobrigatório
rubric_filecaminhoausente
rubric_textstringausente
api_key_envnome de variável de ambienteANTHROPIC_API_KEY ou OPENAI_API_KEY
base_urlURLa do provedor
temperaturenúmero0
max_tokensinteiro, pelo menos 1512
timeout_snúmero acima de 060

probability_judge faz uma pergunta tipada e lê as probabilidades do modelo:

CampoTipoPadrão
provideropenai ou openai_compatibleobrigatório
modelstringobrigatório
questionstringobrigatório
formyes_no, choice ou scoreobrigatório
min_probabilitynúmero em (0, 1]obrigatório
optionsmapeamento de resposta para descriçãopara choice
pass_optionslista de respostaspara choice
levelsmapeamento de nível para descrição, do mais baixopara score
pass_at_leastum nívelpara score
calibrationslope (acima de 0), intercept, from_versionausente
api_key_env, base_urlcomo acimaausente
timeout_snúmero acima de 060

cascade roda primeiro um juiz barato e escala os casos incertos:

CampoTipoPadrão
firstuma entrada probability_judgeobrigatório
thenuma entrada rubric_judge ou probability_judgeobrigatório
escalate_betweenduas probabilidadesobrigatório

Os estágios julgam o próprio criterion da cascata; um estágio que nomeia um diferente é recusado.

model_classifier pontua um texto com um modelo treinado em um servidor compatível com TEI:

CampoTipoPadrão
modelstringobrigatório
base_urlURLobrigatório
labelo rótulo do classificador a lerobrigatório
min_score ou max_scorenúmero em [0, 1], exatamente umobrigatório
textqual campo é classificadooutput
premiseum segundo texto, para classificadores de paresausente
api_key_envnome de variável de ambienteausente
timeout_snúmero acima de 030

Avaliadores de RAG

TipoCampoTipoPadrão
hit_rate, recall, mrr, ndcgkinteiro, pelo menos 15 para hit_rate e recall, 10 para mrr e ndcg
hit_rate, recall, mrr, ndcgrelevance_unitdoc ou chunkdoc
hit_rate, recall, mrr, ndcgcriterionstring<type>_at_<k>, como hit_rate_at_5
citation_validityrequire_citationsbooleanofalse
citation_validitycriterionstringcitations_valid

Avaliadores de agentes

TipoCampoTipoPadrão
agent_max_stepsmax_stepsinteiro, pelo menos 1obrigatório
agent_tool_calledtool_namestringobrigatório
agent_tool_calledmin_callsinteiro, pelo menos 11
agent_no_tool_loopmax_repeatsinteiro, pelo menos 12
agent_tool_sequenceorderedbooleanotrue
agent_constraints_satisfiedconstraintslista de nomes de restriçõesvazia
agent_tool_permissionspermissionsmapeamento de agente para ferramentas permitidasobrigatório
agent_max_handoffsmax_handoffsinteiro, 0 ou maisobrigatório

Cada tipo de agente tem um criterion padrão, então ele pode ser omitido: o próprio nome do tipo, ou um montado a partir da sua configuração (agent_steps_le_8, agent_tool_lookup_called, agent_handoffs_le_2). Veja Agentes.

Avaliadores preditivos

TipoCampoTipoPadrão
predictive_correct, predictive_recall, predictive_precisionpositivequalquer valor JSONtrue, ou o do bloco predictive:
idemfieldcampo da saídalabel, ou predictive.label_field
idemexpected_fieldcampo esperadolabel, ou predictive.expected_field
predictive_absolute_errortarget_rangedois númerosobrigatório
predictive_absolute_errorfield, expected_fieldcomo acimalabel
predictive_brier, predictive_log_loss, predictive_rankingpositivequalquer valor JSONtrue, ou o do bloco
idemfieldcampo da saídascore, ou predictive.score_field
idemexpected_fieldcampo esperadolabel, ou o do bloco
predictive_log_lossclipnúmero em (0, 0.5)obrigatório

Um avaliador preditivo que não escreve positive, field ou expected_field o recebe do bloco predictive:; um valor que ele escreve é mantido.

predictive

CampoTipoPadrão
label_fieldstringlabel
score_fieldstringscore
expected_fieldstringlabel
positivequalquer valor JSONtrue
calibration_binsinteiro, pelo menos 110
thresholdslista de númerosvazia
averagemacro ou microausente: nenhum agregado

metrics

Cada critério de avaliador já é uma métrica. Uma entrada de metrics: acrescenta mais uma, distinguida por type.

typeCamposO que é
quantileid, source, quantile em (0, 1)Um quantil de latency_ms, input_tokens, output_tokens, cost_usd, agent_steps ou agent_tool_calls.
rankingid, criterion, statistic: roc_auc ou average_precisionUma estatística sobre a ordem das pontuações de um critério de ranking.
human_score, human_preferenceidRecusadas: nenhum método admitido lê esses rótulos ainda.
cost_per_acceptedid, criterion, cost_ceiling_usd, cost_ceiling_sourceRecusada até que a sua ligação seja admitida por auditoria.
# 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

A política de lançamento: quais regras decidem e quais decisões bloqueiam. As configurações omitidas mantêm os seus padrões, então uma política que nomeia apenas as suas regras ainda bloqueia em FAIL, INSUFFICIENT_EVIDENCE e MANUAL_REVIEW.

# release.yaml
version: 1
rules:
  - id: label_accuracy
    metric: correct_label
    min: 0.8
CampoTipoPadrãoO que é
version11Versão do formato do arquivo.
confidence_levelprobabilidade0.95O nível de todo intervalo que uma regra lê.
block_onlista de estados de decisãoFAIL, INSUFFICIENT_EVIDENCE, MANUAL_REVIEWEstados que fazem o gate bloquear e definem o código de saída.
warn_onlista de estados de decisãovaziaEstados que alertam sem bloquear. Não podem se sobrepor a block_on.
block_on_partial_runbooleanotrueSe uma execução que não terminou bloqueia, com saída 5.
require_validated_evaluatorsbooleanotrueSe uma regra sobre um juiz baseado em modelo retém a sua decisão até que o juiz seja validado contra rótulos humanos. Avaliadores determinísticos são isentos.
minimum_evaluator_agreementnúmero em [0, 1]ausenteA concordância com rótulos humanos que um juiz precisa atingir, pelo seu limite inferior, antes de poder ser validado.
maximum_evaluator_biasnúmero em (0, 1]ausenteO quanto a taxa de aprovação de um juiz pode se afastar da das pessoas antes de ele poder ser validado.
allow_approximate_methodsbooleanofalseSe uma regra pode decidir sobre um intervalo que o engine marca como aproximado (o intervalo binário com clusters). Caso contrário, ela mostra MANUAL_REVIEW.
min_clustersinteiro, pelo menos 1020Com menos clusters do que isso, uma regra com clusters mostra INSUFFICIENT_EVIDENCE.
difference_methodbounded_paired_difference@1 ou conditional_exact_paired_difference@1ausente: o primeiroQual método admitido limita uma diferença pareada de taxas binárias.
early_stoppingbooleanofalseExecuta os casos em lotes e para assim que todas as regras estiverem decididas. Veja Gate.
early_stopping_seedinteiro, 0 ou maisausenteA seed da ordem dos casos.
early_stopping_batch_sizeinteiro, pelo menos 125Casos por lote.
ruleslistaobrigatório, pelo menos umaAs regras. Veja abaixo.
familieslistavaziaRegras cujos FAILs falsos são controlados em conjunto.
review_rulemapeamentoausenteRecusado: a ligação ainda não foi admitida.

rules

Uma única lista contém os dois tipos. Uma regra de execução recebe exatamente um entre min, max ou max_failures. Uma regra de comparação nomeia o seu kind e decide uma diferença entre duas execuções; veja Regras de comparação.

CampoTipoPadrãoAplica-se a
idstringobrigatóriotodas
metricum id de métrica ou um critérioobrigatóriotodas
kindinterval_threshold, observed_count, superiority, non_inferiority, equivalenceinferido para regras de execuçãotodas
minnúmeroausenteregras de execução: PASS quando o limite inferior do intervalo é pelo menos isso
maxnúmeroausenteregras de execução: PASS quando o limite superior do intervalo é no máximo isso
max_failuresinteiro, 0 ou maisausenteobserved_count: uma contagem sobre a suíte executada, sem intervalo
marginnúmero acima de 0, nas unidades da métricaausentenon_inferiority e equivalence; recusado em superiority
directionmin ou maxminsó non_inferiority: se maior ou menor é melhor
max_missing_fractionnúmero em [0, 1]ausenteregras de intervalo e de comparação
requires_manual_reviewbooleanofalsetodas: a regra sempre mostra MANUAL_REVIEW
scopeglobal ou um segmentoglobalregras de intervalo e de comparação
min_supportinteiro, pelo menos 1ausenteregras de comparação em um segmento

families

CampoTipoPadrão
idstringobrigatório
correctionholmholm
ruleslista de ids de regrasobrigatório, pelo menos um
# 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 artefato

Um artefato é um registro tipado que um sistema grava ao lado da sua saída, como o que ele recuperou. Um tipo é um nome em minúsculas com uma versão opcional, que corresponde a ^[a-z][a-z0-9_]*(/v[1-9][0-9]*)?$. Os avaliadores que precisam de um artefato o nomeiam, e uma execução cujo sistema não declara um tipo exigido é recusada antes de começar, em vez de contar todos os casos como faltantes.

TipoGravado porExigido por
retrieval/v1current_case().retrieval(...), um @rag_system, ou http.artifactshit_rate, recall, mrr, ndcg
context/v1current_case().context(...) ou um @rag_systemcitation_validity, groundedness_judge, citation_support_judge
citations/v1current_case().citations(...) ou um @rag_systemcitation_validity, citation_support_judge
agent_trajectory/v1current_case().agent_trajectory(...)todo avaliador agent_*, e as fontes agent_steps e agent_tool_calls
conversation/v1current_case().artifact(CONVERSATION, ...)ConversationCompleted, ConversationJudge
stage_timings/v1um @rag_systemnenhum; mostrado ao lado da latência

Um sistema callable declara os tipos que registra em records: (ou @system(records=...)); um sistema HTTP em http.artifacts; um sistema RAG em estágios registra os seus próprios.

Versões, chaves de cache e invalidação

O Oloproof reaproveita o trabalho cujas entradas não mudaram, e decide o que "inalterado" significa a partir de digests do conteúdo. Cada um é calculado pelo engine e registrado com a execução.

RegistroReaproveitado quando estes são idênticos
Versão do sistemaname, version, config, e um digest do código: o código-fonte do módulo de um callable (ou todo arquivo encontrado por code_paths), e para um sistema HTTP url, method, output_path e artifacts
Execuçãoa versão do sistema, o input do caso e o índice da réplica. Só execuções bem-sucedidas são reaproveitadas.
Julgamentoa versão do avaliador (o seu tipo e todas as configurações) e um digest de cada campo que ele lê, como listado na tabela de avaliadores
Análiseo plano de análise, a métrica, o nível de confiança, o digest da suíte e toda entrada contada
Gatetoda análise, o digest da política, se a execução terminou, e o status efetivo de cada avaliador citado pelas decisões

O que o Oloproof não consegue ver cabe a você declarar:

  • O comportamento de um sistema HTTP fica no servidor. Mude system.version sempre que o que está por trás da URL mudar, senão uma saída antiga em cache vai valer pelo novo sistema.
  • Os módulos auxiliares de um callable só entram no hash quando code_paths os inclui. Sem isso, editar um módulo auxiliar não muda a versão.
  • Um método ou um objeto callable precisa declarar uma versão, e a versão precisa mudar quando o estado do objeto muda.
  • Um índice RAG é identificado por index_version; mude-o quando o índice for reconstruído.
  • A identidade de um juiz baseado em modelo são as suas configurações, não os pesos do provedor. Um provedor que atualiza o modelo por trás do mesmo nome não é detectado pelo cache.
  • Um @evaluator personalizado faz o hash do arquivo do módulo que o define, e os seus julgamentos só são reaproveitados entre execuções quando ele declara cacheable=True. Os juízes de rubrica embutidos são cacheáveis; os avaliadores determinísticos são recalculados, o que é barato.

O trabalho em cache fica no store local do projeto, .oloproof/store.sqlite ao lado de oloproof.yaml (ou em OLOPROOF_HOME). Apagar o store descarta todo cache e toda execução. Em um espaço de trabalho hospedado o engine não reaproveita execuções, julgamentos ou análises em cache, porque um push pode gravá-los; ele recalcula.