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: labelCampi di primo livello
| Campo | Tipo | Predefinito | Che cos'è |
|---|---|---|---|
| version | 1 | 1 | Versione del formato del file. Esiste solo 1. |
| project | stringa | obbligatorio | Il nome del progetto, mostrato nei report e usato nel push. |
| dataset | percorso | obbligatorio | Il file della suite, JSONL, relativo al progetto. Le sue righe sono descritte in Suite. |
| system | mappatura | obbligatorio | Il sistema sotto test. Vedi sotto. |
| concurrency | mappatura | system: 8, judge: 4 | Quante chiamate al sistema e quante ai giudici girano contemporaneamente. |
| evaluators | lista | obbligatorio, almeno uno | Che cosa viene misurato su ogni caso. Ogni voce ha un type. |
| metrics | lista | vuota | Metriche aggiuntive oltre a quella che ogni criterio di valutatore già costituisce. |
| predictive | mappatura | assente | Dove si trovano l'etichetta, il punteggio e la verità di un classificatore. Vedi Modelli predittivi. |
| slices | lista di stringhe | vuota | Slice esplorative: metadata.<key>, relevant_position o context_truncated. Non arrivano mai al gate. Vedi Slice. |
| min_slice_support | intero, almeno 1 | 30 | Sotto questo numero di casi idonei una slice mostra la stima ma nessun intervallo. |
| replicates | intero, almeno 1 | 1 | Misura ogni caso questo numero di volte. Il caso resta l'unità: le repliche vengono aggregate al suo interno prima di calcolare qualsiasi intervallo. |
| pricing | lista | vuota | Quanto paghi per milione di token, per modello. Senza di esso il costo è riportato in token e mai in dollari. |
| egress | lista di stringhe | vuota | Quale contenuto grezzo oloproof push può inviare a uno spazio di lavoro ospitato. Vedi Risultati ed esecuzione. |
concurrency
| Campo | Tipo | Predefinito |
|---|---|---|
| system | intero, almeno 1 | 8 |
| judge | intero, almeno 1 | 4 |
Voci di pricing
Oloproof non include alcuna tabella dei prezzi. Ogni voce nomina un modello esattamente come lo nomina il model: di un valutatore.
| Campo | Tipo | Predefinito |
|---|---|---|
| model | stringa | obbligatorio |
| input_per_mtok | numero, 0 o più | obbligatorio |
| output_per_mtok | numero, 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.
| Campo | Tipo | Predefinito | Che cos'è |
|---|---|---|---|
| name | stringa | obbligatorio | Il nome del sistema. Parte dell'identità della sua versione. |
| version | stringa | assente | La tua etichetta per questa versione. Obbligatoria per un sistema HTTP. Parte della sua identità, quindi cambiarla invalida le esecuzioni in cache. |
| callable | module:attribute | assente | Una funzione Python, sincrona o asincrona. Riceve l'input del caso e restituisce l'output. |
| http | mappatura | assente | Un endpoint chiamato una volta per caso. Vedi sotto. |
| rag | mappatura | assente | Una classe RAG a stadi dichiarata con @rag_system. Vedi sotto. |
| config | mappatura | vuota | Impostazioni libere registrate con la versione del sistema. Cambiarle cambia la versione. |
| code_paths | lista di pattern glob | vuota | File sorgente il cui contenuto entra nella versione di un sistema callable. Senza di esso viene calcolato l'hash solo del modulo del callable. |
| timeout_s | numero sopra 0 | 120 | Limite di tempo per chiamata per un sistema callable. Un sistema HTTP usa invece http.timeout_s. |
| records | lista di tipi di artefatto | vuota | Tipi di artefatto che un sistema callable registra, come retrieval/v1. Rifiutato su un sistema HTTP o RAG. |
system.http
| Campo | Tipo | Predefinito | Che cos'è |
|---|---|---|---|
| url | stringa | obbligatorio | Dove viene inviato ogni caso. |
| method | GET, POST o PUT | POST | Il metodo HTTP. |
| output_path | percorso puntato | assente | Quale campo della risposta JSON è l'output, come result.answer. Assente significa l'intero corpo. |
| artifacts | mappatura da tipo a percorso puntato | vuota | Campi della risposta registrati come artefatti, come retrieval/v1: debug.retrieval. |
| version | stringa | assente | Usata come versione del sistema quando system.version è assente. Un sistema HTTP ne richiede una delle due. |
| timeout_s | numero sopra 0 | 30 | Limite 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: 5Il contratto di richiesta e risposta, e che cosa accade con timeout ed errori HTTP, sono in Risultati ed esecuzione.
system.rag
| Campo | Tipo | Predefinito | Che cos'è |
|---|---|---|---|
| object | module:attribute | obbligatorio | La classe dichiarata con @rag_system, o una sua istanza. |
| depth | intero, almeno 1 | quello della classe | Quanti passaggi restituisce il recupero. |
| top_k | intero, almeno 1 | quello della classe | Quanti di essi arrivano alla generazione. |
| token_budget | intero, almeno 1 | quello della classe | Un limite di token sul contesto. Richiede il count_tokens(passage) della classe. |
| index_version | stringa | quello della classe | Parte 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:
| Campo | Tipo | Predefinito | Che cos'è |
|---|---|---|---|
| criterion | stringa | obbligatorio a meno che il tipo non abbia un valore predefinito | Il nome di ciò che viene misurato. Ogni criterio è una metrica, e il metric: di una regola lo nomina. |
| on_execution_error | missing o fail | missing | Come 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 YAML | Legge | SDK | Richiede rete o una chiave |
|---|---|---|---|
| exact_match | output, expected | ExactMatch | no |
| contains | output, expected | Contains | no |
| regex | output | Regex | no |
| json_schema | output | JsonSchema | no |
| rubric_judge | input, output, expected | RubricJudge | sì, un provider di modelli |
| model_classifier | output (o il campo indicato da text), facoltativamente premise | solo YAML | sì, un server compatibile con TEI |
| probability_judge | il caso e l'output | solo YAML | sì, un provider compatibile con OpenAI che restituisce log-probabilità |
| cascade | come i suoi due stadi | solo YAML | sì |
| hit_rate, recall, mrr, ndcg | artifacts.retrieval, expected | HitRate, Recall, MRR, NDCG | no |
| citation_validity | artifacts.citations, artifacts.context | CitationValidity | no |
| groundedness_judge | input, output, artifacts.context | Groundedness | sì |
| citation_support_judge | input, output, artifacts.context, artifacts.citations | CitationSupport | sì |
| agent_max_steps | artifacts.agent_trajectory | AgentMaxSteps | no |
| agent_tool_called | artifacts.agent_trajectory | AgentToolCalled | no |
| agent_no_tool_loop | artifacts.agent_trajectory | AgentNoToolLoop | no |
| agent_tool_sequence | artifacts.agent_trajectory, expected | AgentToolSequence | no |
| agent_no_undeclared_tool | artifacts.agent_trajectory, expected | AgentNoUndeclaredTool | no |
| agent_constraints_satisfied | artifacts.agent_trajectory | AgentConstraintsSatisfied | no |
| agent_route | artifacts.agent_trajectory | AgentRoute | no |
| agent_tool_permissions | artifacts.agent_trajectory | AgentToolPermissions | no |
| agent_max_handoffs | artifacts.agent_trajectory | AgentMaxHandoffs | no |
| predictive_correct | il campo etichetta di output ed expected | PredictiveCorrect | no |
| predictive_recall | come sopra | PredictiveRecall | no |
| predictive_precision | come sopra | PredictivePrecision | no |
| predictive_absolute_error | come sopra, numerico | AbsoluteError | no |
| predictive_brier | il campo punteggio di output, l'etichetta di expected | Brier | no |
| predictive_log_loss | come sopra | LogLoss | no |
| predictive_ranking | come sopra | PredictiveRanking | no |
| nessun tipo YAML | artifacts.conversation | ConversationCompleted (solo SDK) | no |
| nessun tipo YAML | expected, artifacts.conversation | ConversationJudge (solo SDK) | sì |
| nessun tipo YAML | ciò 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
| Tipo | Campo | Tipo | Predefinito |
|---|---|---|---|
| exact_match | field | percorso puntato nell'output | assente: l'intero output |
| exact_match | expected_field | percorso puntato in expected | assente: uguale a field |
| exact_match | strip | booleano | true |
| exact_match | casefold | booleano | false |
| contains | field, expected_field | come exact_match | assente |
| regex | pattern | espressione regolare | obbligatorio |
| regex | field | percorso puntato | assente |
| regex | pass_if | match o no_match | match |
| json_schema | schema | un JSON Schema inline, o un percorso a un file JSON relativo al progetto | obbligatorio |
| json_schema | field | percorso puntato | assente |
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.
| Campo | Tipo | Predefinito |
|---|---|---|
| provider | anthropic, openai o openai_compatible | obbligatorio |
| model | stringa | obbligatorio |
| rubric_file | percorso | assente |
| rubric_text | stringa | assente |
| api_key_env | nome di variabile d'ambiente | ANTHROPIC_API_KEY o OPENAI_API_KEY |
| base_url | URL | quello del provider |
| temperature | numero | 0 |
| max_tokens | intero, almeno 1 | 512 |
| timeout_s | numero sopra 0 | 60 |
probability_judge pone una domanda tipizzata e legge le probabilità del modello:
| Campo | Tipo | Predefinito |
|---|---|---|
| provider | openai o openai_compatible | obbligatorio |
| model | stringa | obbligatorio |
| question | stringa | obbligatorio |
| form | yes_no, choice o score | obbligatorio |
| min_probability | numero in (0, 1] | obbligatorio |
| options | mappatura da risposta a descrizione | per choice |
| pass_options | lista di risposte | per choice |
| levels | mappatura da livello a descrizione, dal più basso | per score |
| pass_at_least | un livello | per score |
| calibration | slope (sopra 0), intercept, from_version | assente |
| api_key_env, base_url | come sopra | assente |
| timeout_s | numero sopra 0 | 60 |
cascade esegue prima un giudice economico e passa oltre i casi incerti:
| Campo | Tipo | Predefinito |
|---|---|---|
| first | una voce probability_judge | obbligatorio |
| then | una voce rubric_judge o probability_judge | obbligatorio |
| escalate_between | due 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:
| Campo | Tipo | Predefinito |
|---|---|---|
| model | stringa | obbligatorio |
| base_url | URL | obbligatorio |
| label | l'etichetta del classificatore da leggere | obbligatorio |
| min_score o max_score | numero in [0, 1], esattamente uno | obbligatorio |
| text | quale campo viene classificato | output |
| premise | un secondo testo, per classificatori di coppie | assente |
| api_key_env | nome di variabile d'ambiente | assente |
| timeout_s | numero sopra 0 | 30 |
Valutatori RAG
| Tipo | Campo | Tipo | Predefinito |
|---|---|---|---|
| hit_rate, recall, mrr, ndcg | k | intero, almeno 1 | 5 per hit_rate e recall, 10 per mrr e ndcg |
| hit_rate, recall, mrr, ndcg | relevance_unit | doc o chunk | doc |
| hit_rate, recall, mrr, ndcg | criterion | stringa | <type>_at_<k>, come hit_rate_at_5 |
| citation_validity | require_citations | booleano | false |
| citation_validity | criterion | stringa | citations_valid |
Valutatori di agenti
| Tipo | Campo | Tipo | Predefinito |
|---|---|---|---|
| agent_max_steps | max_steps | intero, almeno 1 | obbligatorio |
| agent_tool_called | tool_name | stringa | obbligatorio |
| agent_tool_called | min_calls | intero, almeno 1 | 1 |
| agent_no_tool_loop | max_repeats | intero, almeno 1 | 2 |
| agent_tool_sequence | ordered | booleano | true |
| agent_constraints_satisfied | constraints | lista di nomi di vincoli | vuota |
| agent_tool_permissions | permissions | mappatura da agente a strumenti consentiti | obbligatorio |
| agent_max_handoffs | max_handoffs | intero, 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
| Tipo | Campo | Tipo | Predefinito |
|---|---|---|---|
| predictive_correct, predictive_recall, predictive_precision | positive | qualsiasi valore JSON | true, o quello del blocco predictive: |
| idem | field | campo dell'output | label, o predictive.label_field |
| idem | expected_field | campo atteso | label, o predictive.expected_field |
| predictive_absolute_error | target_range | due numeri | obbligatorio |
| predictive_absolute_error | field, expected_field | come sopra | label |
| predictive_brier, predictive_log_loss, predictive_ranking | positive | qualsiasi valore JSON | true, o quello del blocco |
| idem | field | campo dell'output | score, o predictive.score_field |
| idem | expected_field | campo atteso | label, o quello del blocco |
| predictive_log_loss | clip | numero 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
| Campo | Tipo | Predefinito |
|---|---|---|
| label_field | stringa | label |
| score_field | stringa | score |
| expected_field | stringa | label |
| positive | qualsiasi valore JSON | true |
| calibration_bins | intero, almeno 1 | 10 |
| thresholds | lista di numeri | vuota |
| average | macro o micro | assente: nessun aggregato |
metrics
Ogni criterio di valutatore è già una metrica. Una voce metrics: ne aggiunge un'altra, distinta da type.
| type | Campi | Che cos'è |
|---|---|---|
| quantile | id, source, quantile in (0, 1) | Un quantile di latency_ms, input_tokens, output_tokens, cost_usd, agent_steps o agent_tool_calls. |
| ranking | id, criterion, statistic: roc_auc o average_precision | Una statistica sull'ordine dei punteggi di un criterio di ranking. |
| human_score, human_preference | id | Rifiutate: nessun metodo ammesso legge ancora queste etichette. |
| cost_per_accepted | id, criterion, cost_ceiling_usd, cost_ceiling_source | Rifiutata 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.95release.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| Campo | Tipo | Predefinito | Che cos'è |
|---|---|---|---|
| version | 1 | 1 | Versione del formato del file. |
| confidence_level | probabilità | 0.95 | Il livello di ogni intervallo che una regola legge. |
| block_on | lista di stati di decisione | FAIL, INSUFFICIENT_EVIDENCE, MANUAL_REVIEW | Gli stati che fanno bloccare il gate e impostano il codice di uscita. |
| warn_on | lista di stati di decisione | vuota | Stati che avvisano senza bloccare. Non devono sovrapporsi a block_on. |
| block_on_partial_run | booleano | true | Se un'esecuzione non completata blocca, con uscita 5. |
| require_validated_evaluators | booleano | true | Se 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_agreement | numero in [0, 1] | assente | L'accordo con le etichette umane che un giudice deve raggiungere, secondo il suo limite inferiore, prima di poter essere validato. |
| maximum_evaluator_bias | numero in (0, 1] | assente | Quanto il tasso di successo di un giudice può discostarsi da quello delle persone prima di poter essere validato. |
| allow_approximate_methods | booleano | false | Se una regola può decidere su un intervallo che il motore segna come approssimato (l'intervallo binario per cluster). Altrimenti riporta MANUAL_REVIEW. |
| min_clusters | intero, almeno 10 | 20 | Con meno cluster di questi una regola con cluster riporta INSUFFICIENT_EVIDENCE. |
| difference_method | bounded_paired_difference@1 o conditional_exact_paired_difference@1 | assente: il primo | Quale metodo ammesso delimita una differenza appaiata tra tassi binari. |
| early_stopping | booleano | false | Esegue i casi a lotti e si ferma non appena ogni regola è decisa. Vedi Gating. |
| early_stopping_seed | intero, 0 o più | assente | Il seed dell'ordine dei casi. |
| early_stopping_batch_size | intero, almeno 1 | 25 | Casi per lotto. |
| rules | lista | obbligatorio, almeno una | Le regole. Vedi sotto. |
| families | lista | vuota | Regole i cui falsi FAIL vengono controllati insieme. |
| review_rule | mappatura | assente | Rifiutato: 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.
| Campo | Tipo | Predefinito | Si applica a |
|---|---|---|---|
| id | stringa | obbligatorio | tutte |
| metric | un id di metrica o un criterio | obbligatorio | tutte |
| kind | interval_threshold, observed_count, superiority, non_inferiority, equivalence | dedotto per le regole di esecuzione | tutte |
| min | numero | assente | regole di esecuzione: PASS quando il limite inferiore dell'intervallo è almeno questo |
| max | numero | assente | regole di esecuzione: PASS quando il limite superiore dell'intervallo è al massimo questo |
| max_failures | intero, 0 o più | assente | observed_count: un conteggio sulla suite eseguita, nessun intervallo |
| margin | numero sopra 0, nelle unità della metrica | assente | non_inferiority ed equivalence; rifiutato su superiority |
| direction | min o max | min | solo non_inferiority: se è meglio più alto o più basso |
| max_missing_fraction | numero in [0, 1] | assente | regole su intervallo e di confronto |
| requires_manual_review | booleano | false | tutte: la regola riporta sempre MANUAL_REVIEW |
| scope | global o una slice | global | regole su intervallo e di confronto |
| min_support | intero, almeno 1 | assente | regole di confronto su una slice |
families
| Campo | Tipo | Predefinito |
|---|---|---|
| id | stringa | obbligatorio |
| correction | holm | holm |
| rules | lista di id di regole | obbligatorio, 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.02Tipi 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.
| Tipo | Scritto da | Richiesto da |
|---|---|---|
| retrieval/v1 | current_case().retrieval(...), un @rag_system, o http.artifacts | hit_rate, recall, mrr, ndcg |
| context/v1 | current_case().context(...) o un @rag_system | citation_validity, groundedness_judge, citation_support_judge |
| citations/v1 | current_case().citations(...) o un @rag_system | citation_validity, citation_support_judge |
| agent_trajectory/v1 | current_case().agent_trajectory(...) | ogni valutatore agent_*, e le sorgenti agent_steps e agent_tool_calls |
| conversation/v1 | current_case().artifact(CONVERSATION, ...) | ConversationCompleted, ConversationJudge |
| stage_timings/v1 | un @rag_system | nessuno; 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.
| Record | Riutilizzato quando questi sono identici |
|---|---|
| Versione del sistema | name, 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 |
| Esecuzione | la versione del sistema, l'input del caso e l'indice della replica. Vengono riutilizzate solo le esecuzioni riuscite. |
| Giudizio | la versione del valutatore (il suo tipo e ogni impostazione) e un digest di ogni campo che legge, come elencato nella tabella dei valutatori |
| Analisi | il piano di analisi, la metrica, il livello di confidenza, il digest della suite e ogni input conteggiato |
| Gate | ogni 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.