Guides
Référence de configuration
Chaque champ de oloproof.yaml et de release.yaml, avec son type, sa valeur par défaut, les valeurs qu’il accepte et un exemple, tirés des modèles qui lisent les fichiers. Servez-vous-en pour retrouver un champ ; lisez les pages démarrage rapide et porte de CI pour apprendre la démarche.
Les deux fichiers sont validés avant toute exécution. Un champ inconnu, un champ mal orthographié ou une valeur du mauvais type est une erreur de configuration, et la commande sort avec le code 2 sans exécuter aucun cas. Les deux fichiers ont des schémas JSON, qu’un éditeur capable de lire JSON Schema peut utiliser pour la complétion. Le paquet installé les écrit, avec les schémas de résultats, dans schemas/v1/ sous le répertoire courant : python -m oloproof_core.models.schema_export (les deux sont project_config.schema.json et release_policy.schema.json).
Dans les tableaux ci-dessous, « obligatoire » signifie que le fichier est refusé sans le champ ; tout autre champ indique la valeur utilisée quand il est omis.
oloproof.yaml en un coup d’œil
Un petit projet complet. Il exécute une fonction Python en local, ne demande ni réseau ni clé, et a la forme que génère 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: labelChamps de premier niveau
| Champ | Type | Par défaut | Ce que c’est |
|---|---|---|---|
| version | 1 | 1 | La version du format de fichier. Seule 1 existe. |
| project | chaîne | obligatoire | Le nom du projet, affiché dans les rapports et utilisé lors d’un push. |
| dataset | chemin | obligatoire | Le fichier de la suite, en JSONL, relatif au projet. Ses lignes sont décrites dans Écrire une suite. |
| system | dictionnaire | obligatoire | Le système évalué. Voyez plus bas. |
| concurrency | dictionnaire | system: 8, judge: 4 | Combien d’appels au système et au juge s’exécutent simultanément. |
| evaluators | liste | obligatoire, au moins un | Ce qui est mesuré sur chaque cas. Chaque entrée a un type. |
| metrics | liste | vide | Des métriques supplémentaires au delà de celle que constitue déjà chaque critère d’évaluateur. |
| predictive | dictionnaire | absent | Où se trouvent l’étiquette, le score et la vérité d’un classifieur. Voyez Modèles prédictifs. |
| slices | liste de chaînes | vide | Des segments exploratoires : metadata.<key>, relevant_position ou context_truncated. Ils n’atteignent jamais la porte. Voyez Segments. |
| min_slice_support | entier, au moins 1 | 30 | En dessous de ce nombre de cas éligibles, un segment affiche son estimation mais pas d’intervalle. |
| replicates | entier, au moins 1 | 1 | Mesurer chaque cas ce nombre de fois. Le cas reste l’unité : les répliques sont agrégées en son sein avant le calcul de tout intervalle. |
| pricing | liste | vide | Ce que vous payez par million de jetons, par modèle. Sans cela, le coût est rapporté en jetons et jamais en dollars. |
| egress | liste de chaînes | vide | Quel contenu brut oloproof push peut envoyer à un espace de travail hébergé. Voyez Résultats et exécution. |
concurrency
| Champ | Type | Par défaut |
|---|---|---|
| system | entier, au moins 1 | 8 |
| judge | entier, au moins 1 | 4 |
Entrées de pricing
Oloproof ne livre aucune table de prix. Chaque entrée nomme un modèle exactement comme le nomme le model: d’un évaluateur.
| Champ | Type | Par défaut |
|---|---|---|
| model | chaîne | obligatoire |
| input_per_mtok | nombre, 0 ou plus | obligatoire |
| output_per_mtok | nombre, 0 ou plus | obligatoire |
# 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 système demande exactement un de callable, http ou rag.
| Champ | Type | Par défaut | Ce que c’est |
|---|---|---|---|
| name | chaîne | obligatoire | Le nom du système. Fait partie de l’identité de sa version. |
| version | chaîne | absent | Votre étiquette pour cette version. Obligatoire pour un système HTTP. Fait partie de son identité, si bien que la changer invalide les exécutions en cache. |
| callable | module:attribute | absent | Une fonction Python, synchrone ou asynchrone. Elle reçoit l’input du cas et renvoie la sortie. |
| http | dictionnaire | absent | Un point de terminaison appelé une fois par cas. Voyez plus bas. |
| rag | dictionnaire | absent | Une classe RAG par étapes déclarée avec @rag_system. Voyez plus bas. |
| config | dictionnaire | vide | Des réglages libres enregistrés avec la version du système. Les changer change la version. |
| code_paths | liste de motifs glob | vide | Les fichiers source dont le contenu entre dans la version d’un système appelable. Sans cela, seul le module de l’appelable est haché. |
| timeout_s | nombre supérieur à 0 | 120 | La limite de temps par appel pour un système appelable. Un système HTTP utilise http.timeout_s à la place. |
| records | liste de sortes d’artefacts | vide | Les sortes d’artefacts qu’enregistre un système appelable, comme retrieval/v1. Refusé sur un système HTTP ou RAG. |
system.http
| Champ | Type | Par défaut | Ce que c’est |
|---|---|---|---|
| url | chaîne | obligatoire | Où chaque cas est envoyé. |
| method | GET, POST ou PUT | POST | La méthode HTTP. |
| output_path | chemin pointé | absent | Quel champ de la réponse JSON est la sortie, comme result.answer. Absent signifie le corps entier. |
| artifacts | dictionnaire de sorte vers chemin pointé | vide | Des champs de la réponse enregistrés comme artefacts, comme retrieval/v1: debug.retrieval. |
| version | chaîne | absent | Utilisée comme version du système quand system.version est absent. Un système HTTP a besoin de l’un des deux. |
| timeout_s | nombre supérieur à 0 | 30 | La limite de temps par requête. |
# 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: 5Le contrat de requête et de réponse, et ce qui se passe en cas de délai dépassé et d’erreur HTTP, se trouvent dans Résultats et exécution.
system.rag
| Champ | Type | Par défaut | Ce que c’est |
|---|---|---|---|
| object | module:attribute | obligatoire | La classe déclarée avec @rag_system, ou une instance de celle-ci. |
| depth | entier, au moins 1 | celui de la classe | Combien de passages renvoie la récupération. |
| top_k | entier, au moins 1 | celui de la classe | Combien d’entre eux atteignent la génération. |
| token_budget | entier, au moins 1 | celui de la classe | Une limite de jetons sur le contexte. Demande le count_tokens(passage) de la classe. |
| index_version | chaîne | celui de la classe | Fait partie de l’identité de la récupération. Changez-le chaque fois que l’index est reconstruit. |
Les réglages donnés ici remplacent ceux que déclare la classe. Un système par étapes enregistre lui-même ses artefacts retrieval/v1, context/v1 et citations/v1, si bien que records est refusé à côté de lui. Voyez Évaluation RAG.
evaluators
Chaque entrée prend un type et ces deux champs communs :
| Champ | Type | Par défaut | Ce que c’est |
|---|---|---|---|
| criterion | chaîne | obligatoire sauf si le type a une valeur par défaut | Le nom de ce qui est mesuré. Chaque critère est une métrique, et le metric: d’une règle le nomme. |
| on_execution_error | missing ou fail | missing | Ce que compte, pour ce critère, un cas dont l’appel au système a échoué. missing le garde dans le dénominateur comme non observé ; fail le compte comme un échec. |
fail ne s’applique qu’aux évaluateurs réussite/échec ; un évaluateur de score avec ce réglage est une erreur de configuration. on_execution_error est un champ YAML ; les classes d’évaluateurs du SDK ne prennent pas un tel argument, et un cas en erreur compte comme manquant.
Types d’évaluateurs
« Lit » liste ce dont dépend le verdict de l’évaluateur, qui est aussi ce sur quoi son jugement en cache est indexé. « SDK » nomme la classe dans oloproof.evaluators.
| type YAML | Lit | SDK | Demande un réseau ou une clé |
|---|---|---|---|
| exact_match | output, expected | ExactMatch | non |
| contains | output, expected | Contains | non |
| regex | output | Regex | non |
| json_schema | output | JsonSchema | non |
| rubric_judge | input, output, expected | RubricJudge | oui, un fournisseur de modèles |
| model_classifier | output (ou le champ nommé par text), éventuellement premise | YAML seulement | oui, un serveur compatible TEI |
| probability_judge | le cas et la sortie | YAML seulement | oui, un fournisseur compatible OpenAI qui renvoie des log-probabilités |
| cascade | comme ses deux étapes | YAML seulement | oui |
| hit_rate, recall, mrr, ndcg | artifacts.retrieval, expected | HitRate, Recall, MRR, NDCG | non |
| citation_validity | artifacts.citations, artifacts.context | CitationValidity | non |
| groundedness_judge | input, output, artifacts.context | Groundedness | oui |
| citation_support_judge | input, output, artifacts.context, artifacts.citations | CitationSupport | oui |
| agent_max_steps | artifacts.agent_trajectory | AgentMaxSteps | non |
| agent_tool_called | artifacts.agent_trajectory | AgentToolCalled | non |
| agent_no_tool_loop | artifacts.agent_trajectory | AgentNoToolLoop | non |
| agent_tool_sequence | artifacts.agent_trajectory, expected | AgentToolSequence | non |
| agent_no_undeclared_tool | artifacts.agent_trajectory, expected | AgentNoUndeclaredTool | non |
| agent_constraints_satisfied | artifacts.agent_trajectory | AgentConstraintsSatisfied | non |
| agent_route | artifacts.agent_trajectory | AgentRoute | non |
| agent_tool_permissions | artifacts.agent_trajectory | AgentToolPermissions | non |
| agent_max_handoffs | artifacts.agent_trajectory | AgentMaxHandoffs | non |
| predictive_correct | le champ d’étiquette de output et de expected | PredictiveCorrect | non |
| predictive_recall | comme ci-dessus | PredictiveRecall | non |
| predictive_precision | comme ci-dessus | PredictivePrecision | non |
| predictive_absolute_error | comme ci-dessus, numérique | AbsoluteError | non |
| predictive_brier | le champ de score de output, l’étiquette de expected | Brier | non |
| predictive_log_loss | comme ci-dessus | LogLoss | non |
| predictive_ranking | comme ci-dessus | PredictiveRanking | non |
| pas de type YAML | artifacts.conversation | ConversationCompleted (SDK seulement) | non |
| pas de type YAML | expected, artifacts.conversation | ConversationJudge (SDK seulement) | oui |
| pas de type YAML | ce que vous déclarez | @evaluator et CustomEvaluator (SDK seulement) | à vous de voir |
Un juge qui appelle un modèle hébergé envoie le contenu des cas à ce fournisseur et est facturé par lui. Les clés sont lues dans la variable d’environnement nommée dans api_key_env ; Oloproof ne les stocke jamais dans ces fichiers.
Évaluateurs déterministes
| Type | Champ | Type | Par défaut |
|---|---|---|---|
| exact_match | field | chemin pointé dans la sortie | absent : la sortie entière |
| exact_match | expected_field | chemin pointé dans expected | absent : le même que field |
| exact_match | strip | booléen | true |
| exact_match | casefold | booléen | false |
| contains | field, expected_field | comme exact_match | absent |
| regex | pattern | expression régulière | obligatoire |
| regex | field | chemin pointé | absent |
| regex | pass_if | match ou no_match | match |
| json_schema | schema | un JSON Schema en ligne, ou un chemin vers un fichier JSON relatif au projet | obligatoire |
| json_schema | field | chemin pointé | absent |
Juges modèles
rubric_judge, groundedness_judge et citation_support_judge partagent ces champs. rubric_judge exige exactement un de rubric_file ou rubric_text ; les deux juges RAG en prennent au plus un et utilisent sinon une grille intégrée. Leur criterion vaut par défaut groundedness et citation_support.
| Champ | Type | Par défaut |
|---|---|---|
| provider | anthropic, openai ou openai_compatible | obligatoire |
| model | chaîne | obligatoire |
| rubric_file | chemin | absent |
| rubric_text | chaîne | absent |
| api_key_env | nom de variable d’environnement | ANTHROPIC_API_KEY ou OPENAI_API_KEY |
| base_url | URL | celle du fournisseur |
| temperature | nombre | 0 |
| max_tokens | entier, au moins 1 | 512 |
| timeout_s | nombre supérieur à 0 | 60 |
probability_judge pose une question typée et lit les probabilités du modèle :
| Champ | Type | Par défaut |
|---|---|---|
| provider | openai ou openai_compatible | obligatoire |
| model | chaîne | obligatoire |
| question | chaîne | obligatoire |
| form | yes_no, choice ou score | obligatoire |
| min_probability | nombre dans (0, 1] | obligatoire |
| options | dictionnaire de réponse vers description | pour choice |
| pass_options | liste de réponses | pour choice |
| levels | dictionnaire de niveau vers description, du plus bas au plus haut | pour score |
| pass_at_least | un niveau | pour score |
| calibration | slope (supérieur à 0), intercept, from_version | absent |
| api_key_env, base_url | comme ci-dessus | absent |
| timeout_s | nombre supérieur à 0 | 60 |
cascade exécute d’abord un juge bon marché et fait remonter les cas incertains :
| Champ | Type | Par défaut |
|---|---|---|
| first | une entrée probability_judge | obligatoire |
| then | une entrée rubric_judge ou probability_judge | obligatoire |
| escalate_between | deux probabilités | obligatoire |
Les étapes jugent le criterion propre à la cascade ; une étape qui en nomme un autre est refusée.
model_classifier note du texte avec un modèle entraîné sur un serveur compatible TEI :
| Champ | Type | Par défaut |
|---|---|---|
| model | chaîne | obligatoire |
| base_url | URL | obligatoire |
| label | l’étiquette du classifieur à lire | obligatoire |
| min_score ou max_score | nombre dans [0, 1], exactement un | obligatoire |
| text | quel champ est classé | output |
| premise | un second texte, pour les classifieurs de paires | absent |
| api_key_env | nom de variable d’environnement | absent |
| timeout_s | nombre supérieur à 0 | 30 |
Évaluateurs RAG
| Type | Champ | Type | Par défaut |
|---|---|---|---|
| hit_rate, recall, mrr, ndcg | k | entier, au moins 1 | 5 pour hit_rate et recall, 10 pour mrr et ndcg |
| hit_rate, recall, mrr, ndcg | relevance_unit | doc ou chunk | doc |
| hit_rate, recall, mrr, ndcg | criterion | chaîne | <type>_at_<k>, comme hit_rate_at_5 |
| citation_validity | require_citations | booléen | false |
| citation_validity | criterion | chaîne | citations_valid |
Évaluateurs d’agents
| Type | Champ | Type | Par défaut |
|---|---|---|---|
| agent_max_steps | max_steps | entier, au moins 1 | obligatoire |
| agent_tool_called | tool_name | chaîne | obligatoire |
| agent_tool_called | min_calls | entier, au moins 1 | 1 |
| agent_no_tool_loop | max_repeats | entier, au moins 1 | 2 |
| agent_tool_sequence | ordered | booléen | true |
| agent_constraints_satisfied | constraints | liste de noms de contraintes | vide |
| agent_tool_permissions | permissions | dictionnaire d’agent vers outils autorisés | obligatoire |
| agent_max_handoffs | max_handoffs | entier, 0 ou plus | obligatoire |
Chaque type d’agent a un criterion par défaut, si bien qu’on peut l’omettre : son propre nom de type, ou un nom construit à partir de son réglage (agent_steps_le_8, agent_tool_lookup_called, agent_handoffs_le_2). Voyez Agents et outils.
Évaluateurs prédictifs
| Type | Champ | Type | Par défaut |
|---|---|---|---|
| predictive_correct, predictive_recall, predictive_precision | positive | n’importe quelle valeur JSON | true, ou celle du bloc predictive: |
| idem | field | champ de sortie | label, ou predictive.label_field |
| idem | expected_field | champ attendu | label, ou predictive.expected_field |
| predictive_absolute_error | target_range | deux nombres | obligatoire |
| predictive_absolute_error | field, expected_field | comme ci-dessus | label |
| predictive_brier, predictive_log_loss, predictive_ranking | positive | n’importe quelle valeur JSON | true, ou celle du bloc |
| idem | field | champ de sortie | score, ou predictive.score_field |
| idem | expected_field | champ attendu | label, ou celui du bloc |
| predictive_log_loss | clip | nombre dans (0, 0.5) | obligatoire |
Un évaluateur prédictif qui n’écrit pas positive, field ou expected_field le prend dans le bloc predictive: ; une valeur qu’il écrit est conservée.
predictive
| Champ | Type | Par défaut |
|---|---|---|
| label_field | chaîne | label |
| score_field | chaîne | score |
| expected_field | chaîne | label |
| positive | n’importe quelle valeur JSON | true |
| calibration_bins | entier, au moins 1 | 10 |
| thresholds | liste de nombres | vide |
| average | macro ou micro | absent : pas d’agrégat |
metrics
Chaque critère d’évaluateur est déjà une métrique. Une entrée metrics: en ajoute une de plus, distinguée par type.
| type | Champs | Ce que c’est |
|---|---|---|
| quantile | id, source, quantile dans (0, 1) | Un quantile de latency_ms, input_tokens, output_tokens, cost_usd, agent_steps ou agent_tool_calls. |
| ranking | id, criterion, statistic : roc_auc ou average_precision | Une statistique sur l’ordre des scores d’un critère de classement. |
| human_score, human_preference | id | Refusées : aucune méthode admise ne lit encore ces étiquettes. |
| cost_per_accepted | id, criterion, cost_ceiling_usd, cost_ceiling_source | Refusée tant que son câblage n’a pas été admis par 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 politique de publication : quelles règles décident, et quelles décisions bloquent. Les réglages omis gardent leurs valeurs par défaut, si bien qu’une politique qui ne nomme que ses règles bloque quand même sur FAIL, INSUFFICIENT_EVIDENCE et MANUAL_REVIEW.
# release.yaml
version: 1
rules:
- id: label_accuracy
metric: correct_label
min: 0.8| Champ | Type | Par défaut | Ce que c’est |
|---|---|---|---|
| version | 1 | 1 | La version du format de fichier. |
| confidence_level | probabilité | 0.95 | Le niveau de chaque intervalle que lit une règle. |
| block_on | liste d’états de décision | FAIL, INSUFFICIENT_EVIDENCE, MANUAL_REVIEW | Les états qui font bloquer la porte, et fixent le code de sortie. |
| warn_on | liste d’états de décision | vide | Les états qui avertissent sans bloquer. Ne doivent pas recouper block_on. |
| block_on_partial_run | booléen | true | Si une exécution qui ne s’est pas terminée bloque, avec le code de sortie 5. |
| require_validated_evaluators | booléen | true | Si une règle sur un juge modèle retient sa décision jusqu’à ce que le juge soit validé contre des étiquettes humaines. Les évaluateurs déterministes en sont exemptés. |
| minimum_evaluator_agreement | nombre dans [0, 1] | absent | L’accord avec les étiquettes humaines qu’un juge doit atteindre, par sa borne inférieure, avant de pouvoir être validé. |
| maximum_evaluator_bias | nombre dans (0, 1] | absent | L’écart maximal entre le taux de réussite d’un juge et celui des personnes avant qu’il puisse être validé. |
| allow_approximate_methods | booléen | false | Si une règle peut décider sur un intervalle que le moteur marque comme approché (l’intervalle binaire en grappes). Sinon, elle lit MANUAL_REVIEW. |
| min_clusters | entier, au moins 10 | 20 | Avec moins de grappes que cela, une règle en grappes lit INSUFFICIENT_EVIDENCE. |
| difference_method | bounded_paired_difference@1 ou conditional_exact_paired_difference@1 | absent : la première | Quelle méthode admise borne une différence appariée de taux binaires. |
| early_stopping | booléen | false | Exécuter les cas par lots et s’arrêter dès que chaque règle est décidée. Voyez Porte de CI. |
| early_stopping_seed | entier, 0 ou plus | absent | La graine de l’ordre des cas. |
| early_stopping_batch_size | entier, au moins 1 | 25 | Les cas par lot. |
| rules | liste | obligatoire, au moins une | Les règles. Voyez plus bas. |
| families | liste | vide | Des règles dont les faux FAIL sont contrôlés ensemble. |
| review_rule | dictionnaire | absent | Refusé : le câblage n’est pas encore admis. |
rules
Une seule liste contient les deux sortes. Une règle d’exécution prend exactement un de min, max ou max_failures. Une règle de comparaison nomme son kind et décide une différence entre deux exécutions ; voyez Règles de comparaison.
| Champ | Type | Par défaut | S’applique à |
|---|---|---|---|
| id | chaîne | obligatoire | toutes |
| metric | un identifiant de métrique ou un critère | obligatoire | toutes |
| kind | interval_threshold, observed_count, superiority, non_inferiority, equivalence | déduit pour les règles d’exécution | toutes |
| min | nombre | absent | règles d’exécution : PASS quand la borne inférieure de l’intervalle vaut au moins cela |
| max | nombre | absent | règles d’exécution : PASS quand la borne supérieure de l’intervalle vaut au plus cela |
| max_failures | entier, 0 ou plus | absent | observed_count : un décompte sur la suite exécutée, sans intervalle |
| margin | nombre supérieur à 0, dans les unités de la métrique | absent | non_inferiority et equivalence ; refusé sur superiority |
| direction | min ou max | min | non_inferiority seulement : si plus haut ou plus bas est meilleur |
| max_missing_fraction | nombre dans [0, 1] | absent | règles d’intervalle et de comparaison |
| requires_manual_review | booléen | false | toutes : la règle lit toujours MANUAL_REVIEW |
| scope | global ou un segment | global | règles d’intervalle et de comparaison |
| min_support | entier, au moins 1 | absent | règles de comparaison sur un segment |
families
| Champ | Type | Par défaut |
|---|---|---|
| id | chaîne | obligatoire |
| correction | holm | holm |
| rules | liste d’identifiants de règles | obligatoire, au moins un |
# 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.02Sortes d’artefacts
Un artefact est un enregistrement typé qu’un système écrit à côté de sa sortie, comme ce qu’il a récupéré. Une sorte est un nom en minuscules avec une version facultative, qui correspond à ^[a-z][a-z0-9_]*(/v[1-9][0-9]*)?$. Les évaluateurs qui ont besoin d’un artefact le nomment, et une exécution dont le système ne déclare pas une sorte requise est refusée avant de commencer, plutôt que de compter chaque cas comme manquant.
| Sorte | Écrite par | Requise par |
|---|---|---|
| retrieval/v1 | current_case().retrieval(...), un @rag_system, ou http.artifacts | hit_rate, recall, mrr, ndcg |
| context/v1 | current_case().context(...) ou un @rag_system | citation_validity, groundedness_judge, citation_support_judge |
| citations/v1 | current_case().citations(...) ou un @rag_system | citation_validity, citation_support_judge |
| agent_trajectory/v1 | current_case().agent_trajectory(...) | chaque évaluateur agent_*, et les sources agent_steps et agent_tool_calls |
| conversation/v1 | current_case().artifact(CONVERSATION, ...) | ConversationCompleted, ConversationJudge |
| stage_timings/v1 | un @rag_system | aucun ; affichée à côté de la latence |
Un système appelable déclare les sortes qu’il enregistre dans records: (ou @system(records=...)) ; un système HTTP dans http.artifacts ; un système RAG par étapes enregistre les siennes.
Versions, clés de cache et invalidation
Oloproof réutilise le travail dont les entrées n’ont pas changé, et décide de ce que signifie « inchangé » à partir d’empreintes de contenu. Chacune est calculée par le moteur et enregistrée avec l’exécution.
| Enregistrement | Réutilisé quand ceux-ci sont identiques |
|---|---|
| Version du système | name, version, config, et une empreinte du code : le source du module d’un appelable (ou chaque fichier reconnu par code_paths), les url, method, output_path et artifacts d’un système HTTP |
| Exécution | la version du système, l’input du cas et l’indice de réplique. Seules les exécutions réussies sont réutilisées. |
| Jugement | la version de l’évaluateur (son type et chacun de ses réglages) et une empreinte de chaque champ qu’il lit, comme listé dans le tableau des évaluateurs |
| Analyse | le plan d’analyse, la métrique, le niveau de confiance, l’empreinte de la suite et chaque entrée qu’elle a comptée |
| Porte | chaque analyse, l’empreinte de la politique, si l’exécution s’est terminée, et le statut effectif de chaque évaluateur que citent les décisions |
Ce qu’Oloproof ne peut pas voir, c’est à vous de le déclarer :
- Le comportement d’un système HTTP réside sur le serveur. Changez system.version chaque fois que ce qui se trouve derrière l’URL change, sinon une ancienne sortie en cache tiendra lieu du nouveau système.
- Les modules auxiliaires d’un appelable ne sont hachés que lorsque code_paths les reconnaît. Sans cela, modifier un module auxiliaire ne change pas la version.
- Une méthode ou un objet appelable doit déclarer une version, et la version doit changer quand l’état de l’objet change.
- Un index RAG est identifié par index_version ; changez-le quand l’index est reconstruit.
- L’identité d’un juge modèle est faite de ses réglages, pas des poids du fournisseur. Un fournisseur qui met à jour le modèle derrière le même nom n’est pas détecté par le cache.
- Un @evaluator personnalisé hache le fichier de module qui le définit, et ses jugements ne sont réutilisés d’une exécution à l’autre que lorsqu’il déclare cacheable=True. Les juges à grille intégrés peuvent être mis en cache ; les évaluateurs déterministes sont recalculés, ce qui coûte peu.
Le travail en cache réside dans le magasin local du projet, .oloproof/store.sqlite à côté de oloproof.yaml (ou sous OLOPROOF_HOME). Supprimer le magasin efface chaque cache et chaque exécution. Dans un espace de travail hébergé, le moteur ne réutilise pas les exécutions, jugements ou analyses en cache, parce qu’un push peut les écrire ; il recalcule.