Vai al contenuto

Guide

Riferimento della configurazione

Ogni campo di oloproof.yaml e release.yaml, con il suo tipo, il suo valore predefinito, i valori che accetta e un esempio, ricavati dai modelli che leggono i file. Usalo per consultare un campo; leggi le pagine della guida rapida e del gating per imparare il flusso di lavoro.

Entrambi i file vengono validati prima che qualsiasi cosa venga eseguita. Un campo sconosciuto, un campo scritto male o un valore del tipo sbagliato è un errore di configurazione e il comando esce con 2 senza eseguire alcun caso. Entrambi i file hanno JSON Schema, che un editor in grado di leggere JSON Schema può usare per il completamento. Il pacchetto installato li scrive, insieme agli schemi dei risultati, in schemas/v1/ sotto la directory corrente: python -m oloproof_core.models.schema_export (i due sono project_config.schema.json e release_policy.schema.json).

Nelle tabelle qui sotto, "obbligatorio" significa che il file viene rifiutato senza il campo; ogni altro campo mostra il valore usato quando è omesso.

oloproof.yaml in sintesi

Un progetto piccolo e completo. Esegue una funzione Python in locale, non richiede rete né chiavi, ed è la forma che 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

Campi di primo livello

CampoTipoPredefinitoChe cos'è
version11Versione del formato del file. Esiste solo 1.
projectstringaobbligatorioIl nome del progetto, mostrato nei report e usato nel push.
datasetpercorsoobbligatorioIl file della suite, JSONL, relativo al progetto. Le sue righe sono descritte in Suite.
systemmappaturaobbligatorioIl sistema sotto test. Vedi sotto.
concurrencymappaturasystem: 8, judge: 4Quante chiamate al sistema e quante ai giudici girano contemporaneamente.
evaluatorslistaobbligatorio, almeno unoChe cosa viene misurato su ogni caso. Ogni voce ha un type.
metricslistavuotaMetriche aggiuntive oltre a quella che ogni criterio di valutatore già costituisce.
predictivemappaturaassenteDove si trovano l'etichetta, il punteggio e la verità di un classificatore. Vedi Modelli predittivi.
sliceslista di stringhevuotaSlice esplorative: metadata.<key>, relevant_position o context_truncated. Non arrivano mai al gate. Vedi Slice.
min_slice_supportintero, almeno 130Sotto questo numero di casi idonei una slice mostra la stima ma nessun intervallo.
replicatesintero, almeno 11Misura ogni caso questo numero di volte. Il caso resta l'unità: le repliche vengono aggregate al suo interno prima di calcolare qualsiasi intervallo.
pricinglistavuotaQuanto paghi per milione di token, per modello. Senza di esso il costo è riportato in token e mai in dollari.
egresslista di stringhevuotaQuale contenuto grezzo oloproof push può inviare a uno spazio di lavoro ospitato. Vedi Risultati ed esecuzione.

concurrency

CampoTipoPredefinito
systemintero, almeno 18
judgeintero, almeno 14

Voci di pricing

Oloproof non include alcuna tabella dei prezzi. Ogni voce nomina un modello esattamente come lo nomina il model: di un valutatore.

CampoTipoPredefinito
modelstringaobbligatorio
input_per_mtoknumero, 0 o piùobbligatorio
output_per_mtoknumero, 0 o piùobbligatorio
# 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 richiede esattamente uno tra callable, http o rag.

CampoTipoPredefinitoChe cos'è
namestringaobbligatorioIl nome del sistema. Parte dell'identità della sua versione.
versionstringaassenteLa tua etichetta per questa versione. Obbligatoria per un sistema HTTP. Parte della sua identità, quindi cambiarla invalida le esecuzioni in cache.
callablemodule:attributeassenteUna funzione Python, sincrona o asincrona. Riceve l'input del caso e restituisce l'output.
httpmappaturaassenteUn endpoint chiamato una volta per caso. Vedi sotto.
ragmappaturaassenteUna classe RAG a stadi dichiarata con @rag_system. Vedi sotto.
configmappaturavuotaImpostazioni libere registrate con la versione del sistema. Cambiarle cambia la versione.
code_pathslista di pattern globvuotaFile sorgente il cui contenuto entra nella versione di un sistema callable. Senza di esso viene calcolato l'hash solo del modulo del callable.
timeout_snumero sopra 0120Limite di tempo per chiamata per un sistema callable. Un sistema HTTP usa invece http.timeout_s.
recordslista di tipi di artefattovuotaTipi di artefatto che un sistema callable registra, come retrieval/v1. Rifiutato su un sistema HTTP o RAG.

system.http

CampoTipoPredefinitoChe cos'è
urlstringaobbligatorioDove viene inviato ogni caso.
methodGET, POST o PUTPOSTIl metodo HTTP.
output_pathpercorso puntatoassenteQuale campo della risposta JSON è l'output, come result.answer. Assente significa l'intero corpo.
artifactsmappatura da tipo a percorso puntatovuotaCampi della risposta registrati come artefatti, come retrieval/v1: debug.retrieval.
versionstringaassenteUsata come versione del sistema quando system.version è assente. Un sistema HTTP ne richiede una delle due.
timeout_snumero sopra 030Limite di tempo per richiesta.
# 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

Il contratto di richiesta e risposta, e che cosa accade con timeout ed errori HTTP, sono in Risultati ed esecuzione.

system.rag

CampoTipoPredefinitoChe cos'è
objectmodule:attributeobbligatorioLa classe dichiarata con @rag_system, o una sua istanza.
depthintero, almeno 1quello della classeQuanti passaggi restituisce il recupero.
top_kintero, almeno 1quello della classeQuanti di essi arrivano alla generazione.
token_budgetintero, almeno 1quello della classeUn limite di token sul contesto. Richiede il count_tokens(passage) della classe.
index_versionstringaquello della classeParte dell'identità del recupero. Cambiala ogni volta che l'indice viene ricostruito.

Le impostazioni date qui sostituiscono quelle dichiarate dalla classe. Un sistema a stadi registra da sé i propri artefatti retrieval/v1, context/v1 e citations/v1, quindi records viene rifiutato accanto a esso. Vedi RAG.

evaluators

Ogni voce accetta un type e questi due campi comuni:

CampoTipoPredefinitoChe cos'è
criterionstringaobbligatorio a meno che il tipo non abbia un valore predefinitoIl nome di ciò che viene misurato. Ogni criterio è una metrica, e il metric: di una regola lo nomina.
on_execution_errormissing o failmissingCome conta, per questo criterio, un caso la cui chiamata al sistema è fallita. missing lo mantiene nel denominatore come non osservato; fail lo conta come fallimento.

fail si applica solo ai valutatori a esito positivo o negativo; un valutatore di punteggio con esso è un errore di configurazione. on_execution_error è un campo YAML; le classi di valutatori dell'SDK non accettano un argomento del genere, e un caso andato in errore conta come mancante.

Tipi di valutatore

"Legge" elenca ciò da cui dipende il verdetto del valutatore, che è anche la chiave del suo giudizio in cache. "SDK" nomina la classe in oloproof.evaluators.

type YAMLLeggeSDKRichiede rete o una chiave
exact_matchoutput, expectedExactMatchno
containsoutput, expectedContainsno
regexoutputRegexno
json_schemaoutputJsonSchemano
rubric_judgeinput, output, expectedRubricJudgesì, un provider di modelli
model_classifieroutput (o il campo indicato da text), facoltativamente premisesolo YAMLsì, un server compatibile con TEI
probability_judgeil caso e l'outputsolo YAMLsì, un provider compatibile con OpenAI che restituisce log-probabilità
cascadecome i suoi due stadisolo 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_correctil campo etichetta di output ed expectedPredictiveCorrectno
predictive_recallcome sopraPredictiveRecallno
predictive_precisioncome sopraPredictivePrecisionno
predictive_absolute_errorcome sopra, numericoAbsoluteErrorno
predictive_brieril campo punteggio di output, l'etichetta di expectedBrierno
predictive_log_losscome sopraLogLossno
predictive_rankingcome sopraPredictiveRankingno
nessun tipo YAMLartifacts.conversationConversationCompleted (solo SDK)no
nessun tipo YAMLexpected, artifacts.conversationConversationJudge (solo SDK)sì
nessun tipo YAMLciò che dichiari@evaluator e CustomEvaluator (solo SDK)dipende da te

Un giudice che chiama un modello ospitato invia il contenuto dei casi a quel provider e viene fatturato da esso. Le chiavi vengono lette dalla variabile d'ambiente indicata in api_key_env; Oloproof non le memorizza mai in questi file.

Valutatori deterministici

TipoCampoTipoPredefinito
exact_matchfieldpercorso puntato nell'outputassente: l'intero output
exact_matchexpected_fieldpercorso puntato in expectedassente: uguale a field
exact_matchstripbooleanotrue
exact_matchcasefoldbooleanofalse
containsfield, expected_fieldcome exact_matchassente
regexpatternespressione regolareobbligatorio
regexfieldpercorso puntatoassente
regexpass_ifmatch o no_matchmatch
json_schemaschemaun JSON Schema inline, o un percorso a un file JSON relativo al progettoobbligatorio
json_schemafieldpercorso puntatoassente

Giudici basati su modello

rubric_judge, groundedness_judge e citation_support_judge condividono questi campi. rubric_judge richiede esattamente uno tra rubric_file e rubric_text; i due giudici RAG ne accettano al massimo uno e altrimenti usano una rubrica integrata. Il loro criterion vale per impostazione predefinita groundedness e citation_support.

CampoTipoPredefinito
provideranthropic, openai o openai_compatibleobbligatorio
modelstringaobbligatorio
rubric_filepercorsoassente
rubric_textstringaassente
api_key_envnome di variabile d'ambienteANTHROPIC_API_KEY o OPENAI_API_KEY
base_urlURLquello del provider
temperaturenumero0
max_tokensintero, almeno 1512
timeout_snumero sopra 060

probability_judge pone una domanda tipizzata e legge le probabilità del modello:

CampoTipoPredefinito
provideropenai o openai_compatibleobbligatorio
modelstringaobbligatorio
questionstringaobbligatorio
formyes_no, choice o scoreobbligatorio
min_probabilitynumero in (0, 1]obbligatorio
optionsmappatura da risposta a descrizioneper choice
pass_optionslista di risposteper choice
levelsmappatura da livello a descrizione, dal più bassoper score
pass_at_leastun livelloper score
calibrationslope (sopra 0), intercept, from_versionassente
api_key_env, base_urlcome sopraassente
timeout_snumero sopra 060

cascade esegue prima un giudice economico e passa oltre i casi incerti:

CampoTipoPredefinito
firstuna voce probability_judgeobbligatorio
thenuna voce rubric_judge o probability_judgeobbligatorio
escalate_betweendue probabilitàobbligatorio

Gli stadi giudicano il criterion della cascata stessa; uno stadio che ne nomina uno diverso viene rifiutato.

model_classifier assegna un punteggio a un testo con un modello addestrato su un server compatibile con TEI:

CampoTipoPredefinito
modelstringaobbligatorio
base_urlURLobbligatorio
labell'etichetta del classificatore da leggereobbligatorio
min_score o max_scorenumero in [0, 1], esattamente unoobbligatorio
textquale campo viene classificatooutput
premiseun secondo testo, per classificatori di coppieassente
api_key_envnome di variabile d'ambienteassente
timeout_snumero sopra 030

Valutatori RAG

TipoCampoTipoPredefinito
hit_rate, recall, mrr, ndcgkintero, almeno 15 per hit_rate e recall, 10 per mrr e ndcg
hit_rate, recall, mrr, ndcgrelevance_unitdoc o chunkdoc
hit_rate, recall, mrr, ndcgcriterionstringa<type>_at_<k>, come hit_rate_at_5
citation_validityrequire_citationsbooleanofalse
citation_validitycriterionstringacitations_valid

Valutatori di agenti

TipoCampoTipoPredefinito
agent_max_stepsmax_stepsintero, almeno 1obbligatorio
agent_tool_calledtool_namestringaobbligatorio
agent_tool_calledmin_callsintero, almeno 11
agent_no_tool_loopmax_repeatsintero, almeno 12
agent_tool_sequenceorderedbooleanotrue
agent_constraints_satisfiedconstraintslista di nomi di vincolivuota
agent_tool_permissionspermissionsmappatura da agente a strumenti consentitiobbligatorio
agent_max_handoffsmax_handoffsintero, 0 o piùobbligatorio

Ogni tipo di agente ha un criterion predefinito, quindi può essere omesso: il nome stesso del tipo, o uno costruito dalla sua impostazione (agent_steps_le_8, agent_tool_lookup_called, agent_handoffs_le_2). Vedi Agenti.

Valutatori predittivi

TipoCampoTipoPredefinito
predictive_correct, predictive_recall, predictive_precisionpositivequalsiasi valore JSONtrue, o quello del blocco predictive:
idemfieldcampo dell'outputlabel, o predictive.label_field
idemexpected_fieldcampo attesolabel, o predictive.expected_field
predictive_absolute_errortarget_rangedue numeriobbligatorio
predictive_absolute_errorfield, expected_fieldcome sopralabel
predictive_brier, predictive_log_loss, predictive_rankingpositivequalsiasi valore JSONtrue, o quello del blocco
idemfieldcampo dell'outputscore, o predictive.score_field
idemexpected_fieldcampo attesolabel, o quello del blocco
predictive_log_lossclipnumero in (0, 0.5)obbligatorio

Un valutatore predittivo che non scrive positive, field o expected_field lo prende dal blocco predictive:; un valore che scrive viene mantenuto.

predictive

CampoTipoPredefinito
label_fieldstringalabel
score_fieldstringascore
expected_fieldstringalabel
positivequalsiasi valore JSONtrue
calibration_binsintero, almeno 110
thresholdslista di numerivuota
averagemacro o microassente: nessun aggregato

metrics

Ogni criterio di valutatore è già una metrica. Una voce metrics: ne aggiunge un'altra, distinta da type.

typeCampiChe cos'è
quantileid, source, quantile in (0, 1)Un quantile di latency_ms, input_tokens, output_tokens, cost_usd, agent_steps o agent_tool_calls.
rankingid, criterion, statistic: roc_auc o average_precisionUna statistica sull'ordine dei punteggi di un criterio di ranking.
human_score, human_preferenceidRifiutate: nessun metodo ammesso legge ancora queste etichette.
cost_per_acceptedid, criterion, cost_ceiling_usd, cost_ceiling_sourceRifiutata finché il suo collegamento non viene ammesso tramite audit.
# 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 policy di rilascio: quali regole decidono e quali decisioni bloccano. Le impostazioni omesse mantengono i loro valori predefiniti, quindi una policy che nomina solo le sue regole blocca comunque su FAIL, INSUFFICIENT_EVIDENCE e MANUAL_REVIEW.

# release.yaml
version: 1
rules:
  - id: label_accuracy
    metric: correct_label
    min: 0.8
CampoTipoPredefinitoChe cos'è
version11Versione del formato del file.
confidence_levelprobabilità0.95Il livello di ogni intervallo che una regola legge.
block_onlista di stati di decisioneFAIL, INSUFFICIENT_EVIDENCE, MANUAL_REVIEWGli stati che fanno bloccare il gate e impostano il codice di uscita.
warn_onlista di stati di decisionevuotaStati che avvisano senza bloccare. Non devono sovrapporsi a block_on.
block_on_partial_runbooleanotrueSe un'esecuzione non completata blocca, con uscita 5.
require_validated_evaluatorsbooleanotrueSe una regola su un giudice basato su modello trattiene la decisione finché il giudice non è validato rispetto a etichette umane. I valutatori deterministici ne sono esenti.
minimum_evaluator_agreementnumero in [0, 1]assenteL'accordo con le etichette umane che un giudice deve raggiungere, secondo il suo limite inferiore, prima di poter essere validato.
maximum_evaluator_biasnumero in (0, 1]assenteQuanto il tasso di successo di un giudice può discostarsi da quello delle persone prima di poter essere validato.
allow_approximate_methodsbooleanofalseSe una regola può decidere su un intervallo che il motore segna come approssimato (l'intervallo binario per cluster). Altrimenti riporta MANUAL_REVIEW.
min_clustersintero, almeno 1020Con meno cluster di questi una regola con cluster riporta INSUFFICIENT_EVIDENCE.
difference_methodbounded_paired_difference@1 o conditional_exact_paired_difference@1assente: il primoQuale metodo ammesso delimita una differenza appaiata tra tassi binari.
early_stoppingbooleanofalseEsegue i casi a lotti e si ferma non appena ogni regola è decisa. Vedi Gating.
early_stopping_seedintero, 0 o piùassenteIl seed dell'ordine dei casi.
early_stopping_batch_sizeintero, almeno 125Casi per lotto.
ruleslistaobbligatorio, almeno unaLe regole. Vedi sotto.
familieslistavuotaRegole i cui falsi FAIL vengono controllati insieme.
review_rulemappaturaassenteRifiutato: il collegamento non è ancora ammesso.

rules

Una sola lista contiene entrambi i tipi. Una regola di esecuzione accetta esattamente uno tra min, max o max_failures. Una regola di confronto nomina il suo kind e decide una differenza tra due esecuzioni; vedi Regole di confronto.

CampoTipoPredefinitoSi applica a
idstringaobbligatoriotutte
metricun id di metrica o un criterioobbligatoriotutte
kindinterval_threshold, observed_count, superiority, non_inferiority, equivalencededotto per le regole di esecuzionetutte
minnumeroassenteregole di esecuzione: PASS quando il limite inferiore dell'intervallo è almeno questo
maxnumeroassenteregole di esecuzione: PASS quando il limite superiore dell'intervallo è al massimo questo
max_failuresintero, 0 o piùassenteobserved_count: un conteggio sulla suite eseguita, nessun intervallo
marginnumero sopra 0, nelle unità della metricaassentenon_inferiority ed equivalence; rifiutato su superiority
directionmin o maxminsolo non_inferiority: se è meglio più alto o più basso
max_missing_fractionnumero in [0, 1]assenteregole su intervallo e di confronto
requires_manual_reviewbooleanofalsetutte: la regola riporta sempre MANUAL_REVIEW
scopeglobal o una sliceglobalregole su intervallo e di confronto
min_supportintero, almeno 1assenteregole di confronto su una slice

families

CampoTipoPredefinito
idstringaobbligatorio
correctionholmholm
ruleslista di id di regoleobbligatorio, almeno 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

Tipi di artefatto

Un artefatto è un record tipizzato che un sistema scrive accanto al suo output, come ciò che ha recuperato. Un tipo è un nome in minuscolo con una versione facoltativa, conforme a ^[a-z][a-z0-9_]*(/v[1-9][0-9]*)?$. I valutatori che richiedono un artefatto lo nominano, e un'esecuzione il cui sistema non dichiara un tipo richiesto viene rifiutata prima di iniziare, anziché contare ogni caso come mancante.

TipoScritto daRichiesto da
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(...)ogni valutatore agent_*, e le sorgenti agent_steps e agent_tool_calls
conversation/v1current_case().artifact(CONVERSATION, ...)ConversationCompleted, ConversationJudge
stage_timings/v1un @rag_systemnessuno; mostrato accanto alla latenza

Un sistema callable dichiara i tipi che registra in records: (o @system(records=...)); un sistema HTTP in http.artifacts; un sistema RAG a stadi registra i propri.

Versioni, chiavi di cache e invalidazione

Oloproof riutilizza il lavoro i cui input non sono cambiati, e decide che cosa significa "invariato" a partire dai digest del contenuto. Ciascuno viene calcolato dal motore e registrato con l'esecuzione.

RecordRiutilizzato quando questi sono identici
Versione del sistemaname, version, config, e un digest del codice: il sorgente del modulo di un callable (o ogni file trovato da code_paths), e per un sistema HTTP url, method, output_path e artifacts
Esecuzionela versione del sistema, l'input del caso e l'indice della replica. Vengono riutilizzate solo le esecuzioni riuscite.
Giudiziola versione del valutatore (il suo tipo e ogni impostazione) e un digest di ogni campo che legge, come elencato nella tabella dei valutatori
Analisiil piano di analisi, la metrica, il livello di confidenza, il digest della suite e ogni input conteggiato
Gateogni analisi, il digest della policy, se l'esecuzione è stata completata, e lo stato effettivo di ogni valutatore citato dalle decisioni

Ciò che Oloproof non può vedere spetta a te dichiararlo:

  • Il comportamento di un sistema HTTP risiede sul server. Cambia system.version ogni volta che cambia ciò che sta dietro l'URL, altrimenti un vecchio output in cache varrà per il nuovo sistema.
  • L'hash dei moduli di supporto di un callable viene calcolato solo quando code_paths li include. Senza di esso, modificare un modulo di supporto non cambia la versione.
  • Un metodo o un oggetto callable deve dichiarare una versione, e la versione deve cambiare quando cambia lo stato dell'oggetto.
  • Un indice RAG è identificato da index_version; cambialo quando l'indice viene ricostruito.
  • L'identità di un giudice basato su modello sono le sue impostazioni, non i pesi del provider. Un provider che aggiorna il modello dietro lo stesso nome non viene rilevato dalla cache.
  • Un @evaluator personalizzato calcola l'hash del file del modulo che lo definisce, e i suoi giudizi vengono riutilizzati tra le esecuzioni solo quando dichiara cacheable=True. I giudici a rubrica integrati sono memorizzabili in cache; i valutatori deterministici vengono ricalcolati, il che costa poco.

Il lavoro in cache vive nello store locale del progetto, .oloproof/store.sqlite accanto a oloproof.yaml (o sotto OLOPROOF_HOME). Eliminare lo store scarta ogni cache e ogni esecuzione. In uno spazio di lavoro ospitato il motore non riutilizza esecuzioni, giudizi o analisi in cache, perché un push può scriverli; li ricalcola.