Spaces:
Running
Running
File size: 5,924 Bytes
b277c46 9d1e3f2 b277c46 2b782d0 b277c46 2b782d0 b277c46 9d1e3f2 b277c46 9d1e3f2 b277c46 2b782d0 b277c46 2b782d0 b277c46 2b782d0 b277c46 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | # Politique de modules contribués
> Sprint 97 — B.6 du plan d'évolution 2026.
Ce document décrit le **cadre de qualité** applicable à tout module
qu'un utilisateur tiers veut faire évaluer dans une pipeline composée
Picarones (axe B). Picarones étant un **banc d'essai**, le code des
modules reste chez l'utilisateur — la plateforme se contente de les
charger, les exécuter, et les évaluer. La politique ci-dessous décrit
les **garanties d'interface** et les **métadonnées obligatoires** pour
qu'un module soit acceptable.
## TL;DR
Pour qu'un module soit acceptable :
1. Il **hérite** de `picarones.domain.module_protocol.BaseModule` (Sprint 33).
2. Il déclare ses `input_types` et `output_types` (parmi
`ArtifactType.{IMAGE, TEXT, ALTO, PAGE, ENTITIES, READING_ORDER}`).
3. Il fournit un `ModuleManifest` avec **5 champs obligatoires** :
`name`, `version`, `author`, `license`, `description`.
4. Il passe `audit_module(MyClass, manifest)` (cf.
`picarones.evaluation.metrics.module_policy`).
Un module qui ne passe pas l'audit n'est **pas exécutable**. Pas
exécutable = pas dans la pipeline, pas dans le rapport.
## Pourquoi cette politique
Avec l'arrivée de l'axe B (banc d'essai de pipelines composées),
Picarones évalue des modules tiers que l'institution amène : LLM
correcteurs, reconstructeurs ALTO, classifieurs d'entités, mappeurs
divers. Sans cadre, ce mode d'usage est ingérable :
- on ne sait pas qui a écrit quoi ;
- on ne sait pas sous quelle licence le module est distribué ;
- on ne peut pas reproduire un benchmark si la version a changé ;
- on ne peut pas citer le module dans un papier scientifique ;
- l'interface peut casser silencieusement et personne ne s'en aperçoit.
La politique de modules adresse ces 5 points avec un manifest
structuré et un audit automatique au chargement.
## Manifest — champs obligatoires
```python
from picarones.evaluation.metrics.module_policy import ModuleManifest
manifest = ModuleManifest(
name="my-llm-correcteur",
version="1.2.0",
author="alice@institution.fr",
license="MIT",
description="Correcteur LLM pour textes médiévaux français.",
input_types=["text"],
output_types=["text"],
citation=(
"Alice Dupont, 2025. A Domain-Adapted LLM Corrector for "
"Medieval French. arXiv:2511.12345."
),
homepage="https://github.com/alice/my-llm-correcteur",
picarones_min_version="1.2.0",
)
```
| Champ | Obligatoire | Description |
|---|---|---|
| `name` | oui | Identifiant unique (slug). |
| `version` | oui | Version sémantique (`1.2.0`). |
| `author` | oui | Auteur ou institution responsable. |
| `license` | oui | SPDX recommandé (`MIT`, `Apache-2.0`, `GPL-3.0-or-later`…), non validé techniquement. |
| `description` | oui | Description courte (≤ 1 phrase). |
| `input_types` | oui | Liste des types d'entrée acceptés. |
| `output_types` | oui | Liste des types de sortie produits. |
| `citation` | non | Citation académique (BibTeX, DOI, ou texte libre). |
| `homepage` | non | URL du dépôt ou de la page projet. |
| `picarones_min_version` | non | Version minimale de Picarones requise. |
| `extra` | non | Métadonnées libres. |
## Contrat `BaseModule`
Tout module exécutable hérite de
`picarones.domain.module_protocol.BaseModule` (Sprint 33). Le contrat minimal
est :
```python
from picarones.domain.artifacts import ArtifactType
from picarones.domain.module_protocol import BaseModule
class MyLlmCorrecteur(BaseModule):
name = "my-llm-correcteur"
input_types = (ArtifactType.TEXT,)
output_types = (ArtifactType.TEXT,)
execution_mode = "io" # "io" pour API, "cpu" pour local
def process(self, inputs):
text = inputs[ArtifactType.TEXT]
# ... votre logique ...
return {ArtifactType.TEXT: corrected_text}
```
## Audit automatique
```python
from picarones.evaluation.metrics.module_policy import audit_module
result = audit_module(MyLlmCorrecteur, manifest)
if not result.passed:
for check in result.checks:
if not check.passed:
print(f"FAIL: {check.name} | {check.detail}")
raise SystemExit("module rejeté par l'audit")
```
L'audit vérifie :
1. **Manifest valide** — 5 champs obligatoires non vides + `input_types`/`output_types` non vides.
2. **Héritage** — la classe hérite de `BaseModule`.
3. **Cohérence I/O** — `module.input_types` et `module.output_types`
correspondent (case-insensitive) à ceux du manifest.
4. **Méthode `process`** — callable sur la classe.
## Stratégie d'ouverture en deux temps
Picarones est aujourd'hui en **phase fermée** : seuls les modules
officiels (ceux dans `picarones/adapters/ocr/`, `picarones/adapters/llm/`,
`picarones/pipeline/`) sont garantis stables. Les modules contribués
externes sont acceptés via PR sur le repo principal après audit.
La **phase ouverte** sera déclenchée quand 5–6 modules officiels
stables et un guide de contribution éprouvé seront disponibles.
L'ouverture passera alors par des plugins PyPI (`picarones-module-X`)
avec mécanisme `entry_points`. **Le manifest et l'audit décrits ici
sont la fondation de cette phase ouverte** — tout plugin externe devra
les fournir.
## Vue HTML « Modules audités »
Quand une pipeline composée est exécutée, le rapport HTML expose un
bloc **« Modules audités »** (cf.
`picarones.reports.html.module_audit_render.build_module_audit_html`) qui
liste pour chaque module :
- statut d'audit (✓ vert ou ✗ rouge avec compte des checks échoués) ;
- métadonnées (version, auteur, licence) ;
- types d'entrée/sortie ;
- citation académique (si fournie) ;
- page projet (si fournie).
Le module ne juge pas la qualité scientifique du module — il **expose
les métadonnées que le contributeur a déclarées**, pour permettre la
reproductibilité et la citation correcte dans les publications
dérivées.
|