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.