Spaces:
Running
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 :
- Il hérite de
picarones.domain.module_protocol.BaseModule(Sprint 33). - Il déclare ses
input_typesetoutput_types(parmiArtifactType.{IMAGE, TEXT, ALTO, PAGE, ENTITIES, READING_ORDER}). - Il fournit un
ModuleManifestavec 5 champs obligatoires :name,version,author,license,description. - 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
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 :
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
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 :
- Manifest valide — 5 champs obligatoires non vides +
input_types/output_typesnon vides. - Héritage — la classe hérite de
BaseModule. - Cohérence I/O —
module.input_typesetmodule.output_typescorrespondent (case-insensitive) à ceux du manifest. - 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.