fix(gui): fail-close si CamemBERT-bio indisponible (P0-1, anti-fuite PII)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -41,6 +41,14 @@ class ManagerState(str, Enum):
|
||||
UNAVAILABLE = "unavailable"
|
||||
|
||||
|
||||
class EngineUnavailableError(RuntimeError):
|
||||
"""Levée quand un moteur de détection OBLIGATOIRE n'a pas pu être chargé.
|
||||
|
||||
Garantit le fail-close : on refuse de produire une sortie plutôt que de
|
||||
livrer un document potentiellement non anonymisé (aligné sur le code 3 du CLI).
|
||||
"""
|
||||
|
||||
|
||||
@dataclass
|
||||
class EngineSettings:
|
||||
"""Réglages d'appel moteur exposés par l'onglet Configuration."""
|
||||
@@ -216,12 +224,21 @@ def make_process_fn(
|
||||
|
||||
``engine`` est injectable pour les tests ; par défaut, import paresseux de
|
||||
``process_document`` (aucun chargement du moteur à l'import de ce module).
|
||||
|
||||
Raises:
|
||||
EngineUnavailableError: si le NER obligatoire (CamemBERT-bio) est
|
||||
indisponible alors que ``use_local_ner`` est actif (fail-close).
|
||||
"""
|
||||
managers = managers if managers is not None else NerManagers(settings)
|
||||
|
||||
def process_fn(doc_path: Path, out_dir: Path) -> dict:
|
||||
if settings.use_local_ner:
|
||||
managers.ensure_loaded()
|
||||
state = managers.ensure_loaded()
|
||||
if state == ManagerState.UNAVAILABLE:
|
||||
raise EngineUnavailableError(
|
||||
"Modèle de détection obligatoire (CamemBERT-bio) indisponible — "
|
||||
"traitement refusé pour éviter une anonymisation incomplète."
|
||||
)
|
||||
kwargs = build_engine_kwargs(settings, managers)
|
||||
run = engine
|
||||
if run is None:
|
||||
|
||||
Reference in New Issue
Block a user