feat(cli): charger les moteurs optionnels depuis les modeles embarques
This commit is contained in:
@@ -9,6 +9,7 @@ Mapping des 13 labels EDS-Pseudo vers les clés PLACEHOLDERS du core d'anonymisa
|
||||
Dépendance : pip install 'edsnlp[ml]>=0.12.0'
|
||||
"""
|
||||
from __future__ import annotations
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from typing import Any, Dict, List, Optional
|
||||
|
||||
@@ -41,6 +42,26 @@ EDS_MODELS_CATALOG: Dict[str, str] = {
|
||||
"EDS-Pseudo AP-HP (edsnlp)": "AP-HP/eds-pseudo-public",
|
||||
}
|
||||
|
||||
DEFAULT_MODEL = "AP-HP/eds-pseudo-public"
|
||||
BUNDLED_MODEL_DIR = "eds-pseudo-public"
|
||||
|
||||
|
||||
def _app_dir() -> Path:
|
||||
if getattr(sys, "frozen", False):
|
||||
return Path(getattr(sys, "_MEIPASS", Path(sys.executable).parent))
|
||||
return Path(__file__).resolve().parent
|
||||
|
||||
|
||||
def _bundled_model_path(cache_dir: Optional[Path] = None) -> Optional[Path]:
|
||||
candidates = []
|
||||
if cache_dir is not None:
|
||||
candidates.append(Path(cache_dir) / BUNDLED_MODEL_DIR)
|
||||
candidates.append(_app_dir() / "models" / BUNDLED_MODEL_DIR)
|
||||
for candidate in candidates:
|
||||
if candidate.is_dir():
|
||||
return candidate
|
||||
return None
|
||||
|
||||
|
||||
class EdsPseudoManager:
|
||||
"""Gestionnaire pour le modèle EDS-Pseudo (edsnlp). Même interface que NerModelManager."""
|
||||
@@ -54,16 +75,21 @@ class EdsPseudoManager:
|
||||
def is_loaded(self) -> bool:
|
||||
return self._loaded and self._nlp is not None
|
||||
|
||||
def load(self, model_id_or_path: str = "AP-HP/eds-pseudo-public") -> None:
|
||||
def load(self, model_id_or_path: str = DEFAULT_MODEL) -> None:
|
||||
if not _EDSNLP_AVAILABLE:
|
||||
raise RuntimeError("edsnlp non disponible. Installez : pip install 'edsnlp[ml]>=0.12.0'")
|
||||
self.unload()
|
||||
self.model_id = model_id_or_path
|
||||
path = Path(model_id_or_path)
|
||||
source = model_id_or_path
|
||||
if model_id_or_path == DEFAULT_MODEL:
|
||||
bundled = _bundled_model_path(self.cache_dir)
|
||||
if bundled is not None:
|
||||
source = str(bundled)
|
||||
self.model_id = source
|
||||
path = Path(source)
|
||||
if path.is_dir():
|
||||
self._nlp = edsnlp.load(path)
|
||||
else:
|
||||
self._nlp = edsnlp.load(model_id_or_path)
|
||||
self._nlp = edsnlp.load(source)
|
||||
# Activer les scores de confiance NER (edsnlp >= 0.16)
|
||||
try:
|
||||
ner_pipe = self._nlp.get_pipe('ner')
|
||||
|
||||
Reference in New Issue
Block a user