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: labelCampos de nível superior
| Campo | Tipo | Padrão | O que é |
|---|---|---|---|
| version | 1 | 1 | Versão do formato do arquivo. Só existe 1. |
| project | string | obrigatório | O nome do projeto, mostrado nos relatórios e usado no push. |
| dataset | caminho | obrigatório | O arquivo da suíte, JSONL, relativo ao projeto. As suas linhas são descritas em Suítes. |
| system | mapeamento | obrigatório | O sistema em teste. Veja abaixo. |
| concurrency | mapeamento | system: 8, judge: 4 | Quantas chamadas ao sistema e quantas a juízes rodam ao mesmo tempo. |
| evaluators | lista | obrigatório, pelo menos um | O que é medido em cada caso. Cada entrada tem um type. |
| metrics | lista | vazia | Métricas extras além daquela que cada critério de avaliador já é. |
| predictive | mapeamento | ausente | Onde ficam o rótulo, a pontuação e a verdade de um classificador. Veja Modelos preditivos. |
| slices | lista de strings | vazia | Segmentos exploratórios: metadata.<key>, relevant_position ou context_truncated. Nunca chegam ao gate. Veja Segmentos. |
| min_slice_support | inteiro, pelo menos 1 | 30 | Abaixo deste número de casos elegíveis um segmento mostra a estimativa mas nenhum intervalo. |
| replicates | inteiro, pelo menos 1 | 1 | Mede 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. |
| pricing | lista | vazia | Quanto você paga por milhão de tokens, por modelo. Sem isso o custo é informado em tokens e nunca em dólares. |
| egress | lista de strings | vazia | Qual conteúdo bruto o oloproof push pode enviar a um espaço de trabalho hospedado. Veja Resultados e execução. |
concurrency
| Campo | Tipo | Padrão |
|---|---|---|
| system | inteiro, pelo menos 1 | 8 |
| judge | inteiro, pelo menos 1 | 4 |
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.
| Campo | Tipo | Padrão |
|---|---|---|
| model | string | obrigatório |
| input_per_mtok | número, 0 ou mais | obrigatório |
| output_per_mtok | número, 0 ou mais | obrigató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.
| Campo | Tipo | Padrão | O que é |
|---|---|---|---|
| name | string | obrigatório | O nome do sistema. Parte da identidade da sua versão. |
| version | string | ausente | O 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. |
| callable | module:attribute | ausente | Uma função Python, síncrona ou assíncrona. Recebe o input do caso e retorna a saída. |
| http | mapeamento | ausente | Um endpoint chamado uma vez por caso. Veja abaixo. |
| rag | mapeamento | ausente | Uma classe RAG em estágios declarada com @rag_system. Veja abaixo. |
| config | mapeamento | vazio | Configurações livres registradas com a versão do sistema. Mudá-las muda a versão. |
| code_paths | lista de padrões glob | vazia | Arquivos-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_s | número acima de 0 | 120 | Limite de tempo por chamada para um sistema callable. Um sistema HTTP usa http.timeout_s no lugar. |
| records | lista de tipos de artefato | vazia | Tipos de artefato que um sistema callable registra, como retrieval/v1. Recusado em um sistema HTTP ou RAG. |
system.http
| Campo | Tipo | Padrão | O que é |
|---|---|---|---|
| url | string | obrigatório | Para onde cada caso é enviado. |
| method | GET, POST ou PUT | POST | O método HTTP. |
| output_path | caminho com pontos | ausente | Qual campo da resposta JSON é a saída, como result.answer. Ausente significa o corpo inteiro. |
| artifacts | mapeamento de tipo para caminho com pontos | vazio | Campos da resposta registrados como artefatos, como retrieval/v1: debug.retrieval. |
| version | string | ausente | Usada como versão do sistema quando system.version está ausente. Um sistema HTTP precisa de uma das duas. |
| timeout_s | número acima de 0 | 30 | Limite 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: 5O contrato de requisição e resposta, e o que acontece com timeouts e erros HTTP, estão em Resultados e execução.
system.rag
| Campo | Tipo | Padrão | O que é |
|---|---|---|---|
| object | module:attribute | obrigatório | A classe declarada com @rag_system, ou uma instância dela. |
| depth | inteiro, pelo menos 1 | o da classe | Quantas passagens a recuperação retorna. |
| top_k | inteiro, pelo menos 1 | o da classe | Quantas delas chegam à geração. |
| token_budget | inteiro, pelo menos 1 | o da classe | Um limite de tokens no contexto. Precisa do count_tokens(passage) da classe. |
| index_version | string | o da classe | Parte 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:
| Campo | Tipo | Padrão | O que é |
|---|---|---|---|
| criterion | string | obrigatório, a menos que o tipo tenha um padrão | O nome do que é medido. Cada critério é uma métrica, e o metric: de uma regra o nomeia. |
| on_execution_error | missing ou fail | missing | Como 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 YAML | Lê | SDK | Precisa de rede ou de uma chave |
|---|---|---|---|
| exact_match | output, expected | ExactMatch | não |
| contains | output, expected | Contains | não |
| regex | output | Regex | não |
| json_schema | output | JsonSchema | não |
| rubric_judge | input, output, expected | RubricJudge | sim, um provedor de modelos |
| model_classifier | output (ou o campo nomeado por text), opcionalmente premise | só YAML | sim, um servidor compatível com TEI |
| probability_judge | o caso e a saída | só YAML | sim, um provedor compatível com OpenAI que retorne log-probabilidades |
| cascade | como os seus dois estágios | só YAML | sim |
| hit_rate, recall, mrr, ndcg | artifacts.retrieval, expected | HitRate, Recall, MRR, NDCG | não |
| citation_validity | artifacts.citations, artifacts.context | CitationValidity | não |
| groundedness_judge | input, output, artifacts.context | Groundedness | sim |
| citation_support_judge | input, output, artifacts.context, artifacts.citations | CitationSupport | sim |
| agent_max_steps | artifacts.agent_trajectory | AgentMaxSteps | não |
| agent_tool_called | artifacts.agent_trajectory | AgentToolCalled | não |
| agent_no_tool_loop | artifacts.agent_trajectory | AgentNoToolLoop | não |
| agent_tool_sequence | artifacts.agent_trajectory, expected | AgentToolSequence | não |
| agent_no_undeclared_tool | artifacts.agent_trajectory, expected | AgentNoUndeclaredTool | não |
| agent_constraints_satisfied | artifacts.agent_trajectory | AgentConstraintsSatisfied | não |
| agent_route | artifacts.agent_trajectory | AgentRoute | não |
| agent_tool_permissions | artifacts.agent_trajectory | AgentToolPermissions | não |
| agent_max_handoffs | artifacts.agent_trajectory | AgentMaxHandoffs | não |
| predictive_correct | o campo de rótulo de output e expected | PredictiveCorrect | não |
| predictive_recall | como acima | PredictiveRecall | não |
| predictive_precision | como acima | PredictivePrecision | não |
| predictive_absolute_error | como acima, numérico | AbsoluteError | não |
| predictive_brier | o campo de pontuação de output, o rótulo de expected | Brier | não |
| predictive_log_loss | como acima | LogLoss | não |
| predictive_ranking | como acima | PredictiveRanking | não |
| nenhum tipo YAML | artifacts.conversation | ConversationCompleted (só SDK) | não |
| nenhum tipo YAML | expected, artifacts.conversation | ConversationJudge (só SDK) | sim |
| nenhum tipo YAML | o 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
| Tipo | Campo | Tipo | Padrão |
|---|---|---|---|
| exact_match | field | caminho com pontos na saída | ausente: a saída inteira |
| exact_match | expected_field | caminho com pontos em expected | ausente: igual a field |
| exact_match | strip | booleano | true |
| exact_match | casefold | booleano | false |
| contains | field, expected_field | como em exact_match | ausente |
| regex | pattern | expressão regular | obrigatório |
| regex | field | caminho com pontos | ausente |
| regex | pass_if | match ou no_match | match |
| json_schema | schema | um JSON Schema inline, ou um caminho para um arquivo JSON relativo ao projeto | obrigatório |
| json_schema | field | caminho com pontos | ausente |
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.
| Campo | Tipo | Padrão |
|---|---|---|
| provider | anthropic, openai ou openai_compatible | obrigatório |
| model | string | obrigatório |
| rubric_file | caminho | ausente |
| rubric_text | string | ausente |
| api_key_env | nome de variável de ambiente | ANTHROPIC_API_KEY ou OPENAI_API_KEY |
| base_url | URL | a do provedor |
| temperature | número | 0 |
| max_tokens | inteiro, pelo menos 1 | 512 |
| timeout_s | número acima de 0 | 60 |
probability_judge faz uma pergunta tipada e lê as probabilidades do modelo:
| Campo | Tipo | Padrão |
|---|---|---|
| provider | openai ou openai_compatible | obrigatório |
| model | string | obrigatório |
| question | string | obrigatório |
| form | yes_no, choice ou score | obrigatório |
| min_probability | número em (0, 1] | obrigatório |
| options | mapeamento de resposta para descrição | para choice |
| pass_options | lista de respostas | para choice |
| levels | mapeamento de nível para descrição, do mais baixo | para score |
| pass_at_least | um nível | para score |
| calibration | slope (acima de 0), intercept, from_version | ausente |
| api_key_env, base_url | como acima | ausente |
| timeout_s | número acima de 0 | 60 |
cascade roda primeiro um juiz barato e escala os casos incertos:
| Campo | Tipo | Padrão |
|---|---|---|
| first | uma entrada probability_judge | obrigatório |
| then | uma entrada rubric_judge ou probability_judge | obrigatório |
| escalate_between | duas probabilidades | obrigató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:
| Campo | Tipo | Padrão |
|---|---|---|
| model | string | obrigatório |
| base_url | URL | obrigatório |
| label | o rótulo do classificador a ler | obrigatório |
| min_score ou max_score | número em [0, 1], exatamente um | obrigatório |
| text | qual campo é classificado | output |
| premise | um segundo texto, para classificadores de pares | ausente |
| api_key_env | nome de variável de ambiente | ausente |
| timeout_s | número acima de 0 | 30 |
Avaliadores de RAG
| Tipo | Campo | Tipo | Padrão |
|---|---|---|---|
| hit_rate, recall, mrr, ndcg | k | inteiro, pelo menos 1 | 5 para hit_rate e recall, 10 para mrr e ndcg |
| hit_rate, recall, mrr, ndcg | relevance_unit | doc ou chunk | doc |
| hit_rate, recall, mrr, ndcg | criterion | string | <type>_at_<k>, como hit_rate_at_5 |
| citation_validity | require_citations | booleano | false |
| citation_validity | criterion | string | citations_valid |
Avaliadores de agentes
| Tipo | Campo | Tipo | Padrão |
|---|---|---|---|
| agent_max_steps | max_steps | inteiro, pelo menos 1 | obrigatório |
| agent_tool_called | tool_name | string | obrigatório |
| agent_tool_called | min_calls | inteiro, pelo menos 1 | 1 |
| agent_no_tool_loop | max_repeats | inteiro, pelo menos 1 | 2 |
| agent_tool_sequence | ordered | booleano | true |
| agent_constraints_satisfied | constraints | lista de nomes de restrições | vazia |
| agent_tool_permissions | permissions | mapeamento de agente para ferramentas permitidas | obrigatório |
| agent_max_handoffs | max_handoffs | inteiro, 0 ou mais | obrigató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
| Tipo | Campo | Tipo | Padrão |
|---|---|---|---|
| predictive_correct, predictive_recall, predictive_precision | positive | qualquer valor JSON | true, ou o do bloco predictive: |
| idem | field | campo da saída | label, ou predictive.label_field |
| idem | expected_field | campo esperado | label, ou predictive.expected_field |
| predictive_absolute_error | target_range | dois números | obrigatório |
| predictive_absolute_error | field, expected_field | como acima | label |
| predictive_brier, predictive_log_loss, predictive_ranking | positive | qualquer valor JSON | true, ou o do bloco |
| idem | field | campo da saída | score, ou predictive.score_field |
| idem | expected_field | campo esperado | label, ou o do bloco |
| predictive_log_loss | clip | nú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
| Campo | Tipo | Padrão |
|---|---|---|
| label_field | string | label |
| score_field | string | score |
| expected_field | string | label |
| positive | qualquer valor JSON | true |
| calibration_bins | inteiro, pelo menos 1 | 10 |
| thresholds | lista de números | vazia |
| average | macro ou micro | ausente: nenhum agregado |
metrics
Cada critério de avaliador já é uma métrica. Uma entrada de metrics: acrescenta mais uma, distinguida por type.
| type | Campos | O que é |
|---|---|---|
| quantile | id, source, quantile em (0, 1) | Um quantil de latency_ms, input_tokens, output_tokens, cost_usd, agent_steps ou agent_tool_calls. |
| ranking | id, criterion, statistic: roc_auc ou average_precision | Uma estatística sobre a ordem das pontuações de um critério de ranking. |
| human_score, human_preference | id | Recusadas: nenhum método admitido lê esses rótulos ainda. |
| cost_per_accepted | id, criterion, cost_ceiling_usd, cost_ceiling_source | Recusada 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.95release.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| Campo | Tipo | Padrão | O que é |
|---|---|---|---|
| version | 1 | 1 | Versão do formato do arquivo. |
| confidence_level | probabilidade | 0.95 | O nível de todo intervalo que uma regra lê. |
| block_on | lista de estados de decisão | FAIL, INSUFFICIENT_EVIDENCE, MANUAL_REVIEW | Estados que fazem o gate bloquear e definem o código de saída. |
| warn_on | lista de estados de decisão | vazia | Estados que alertam sem bloquear. Não podem se sobrepor a block_on. |
| block_on_partial_run | booleano | true | Se uma execução que não terminou bloqueia, com saída 5. |
| require_validated_evaluators | booleano | true | Se 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_agreement | número em [0, 1] | ausente | A concordância com rótulos humanos que um juiz precisa atingir, pelo seu limite inferior, antes de poder ser validado. |
| maximum_evaluator_bias | número em (0, 1] | ausente | O quanto a taxa de aprovação de um juiz pode se afastar da das pessoas antes de ele poder ser validado. |
| allow_approximate_methods | booleano | false | Se 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_clusters | inteiro, pelo menos 10 | 20 | Com menos clusters do que isso, uma regra com clusters mostra INSUFFICIENT_EVIDENCE. |
| difference_method | bounded_paired_difference@1 ou conditional_exact_paired_difference@1 | ausente: o primeiro | Qual método admitido limita uma diferença pareada de taxas binárias. |
| early_stopping | booleano | false | Executa os casos em lotes e para assim que todas as regras estiverem decididas. Veja Gate. |
| early_stopping_seed | inteiro, 0 ou mais | ausente | A seed da ordem dos casos. |
| early_stopping_batch_size | inteiro, pelo menos 1 | 25 | Casos por lote. |
| rules | lista | obrigatório, pelo menos uma | As regras. Veja abaixo. |
| families | lista | vazia | Regras cujos FAILs falsos são controlados em conjunto. |
| review_rule | mapeamento | ausente | Recusado: 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.
| Campo | Tipo | Padrão | Aplica-se a |
|---|---|---|---|
| id | string | obrigatório | todas |
| metric | um id de métrica ou um critério | obrigatório | todas |
| kind | interval_threshold, observed_count, superiority, non_inferiority, equivalence | inferido para regras de execução | todas |
| min | número | ausente | regras de execução: PASS quando o limite inferior do intervalo é pelo menos isso |
| max | número | ausente | regras de execução: PASS quando o limite superior do intervalo é no máximo isso |
| max_failures | inteiro, 0 ou mais | ausente | observed_count: uma contagem sobre a suíte executada, sem intervalo |
| margin | número acima de 0, nas unidades da métrica | ausente | non_inferiority e equivalence; recusado em superiority |
| direction | min ou max | min | só non_inferiority: se maior ou menor é melhor |
| max_missing_fraction | número em [0, 1] | ausente | regras de intervalo e de comparação |
| requires_manual_review | booleano | false | todas: a regra sempre mostra MANUAL_REVIEW |
| scope | global ou um segmento | global | regras de intervalo e de comparação |
| min_support | inteiro, pelo menos 1 | ausente | regras de comparação em um segmento |
families
| Campo | Tipo | Padrão |
|---|---|---|
| id | string | obrigatório |
| correction | holm | holm |
| rules | lista de ids de regras | obrigató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.02Tipos 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.
| Tipo | Gravado por | Exigido por |
|---|---|---|
| retrieval/v1 | current_case().retrieval(...), um @rag_system, ou http.artifacts | hit_rate, recall, mrr, ndcg |
| context/v1 | current_case().context(...) ou um @rag_system | citation_validity, groundedness_judge, citation_support_judge |
| citations/v1 | current_case().citations(...) ou um @rag_system | citation_validity, citation_support_judge |
| agent_trajectory/v1 | current_case().agent_trajectory(...) | todo avaliador agent_*, e as fontes agent_steps e agent_tool_calls |
| conversation/v1 | current_case().artifact(CONVERSATION, ...) | ConversationCompleted, ConversationJudge |
| stage_timings/v1 | um @rag_system | nenhum; 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.
| Registro | Reaproveitado quando estes são idênticos |
|---|---|
| Versão do sistema | name, 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ção | a versão do sistema, o input do caso e o índice da réplica. Só execuções bem-sucedidas são reaproveitadas. |
| Julgamento | a 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álise | o plano de análise, a métrica, o nível de confiança, o digest da suíte e toda entrada contada |
| Gate | toda 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.