Aller au contenu principal

Plugins

Whoosh-NG utilise une architecture à plugins pour garder le core léger tout en permettant des fonctionnalités avancées. Les plugins sont chargés via des entry points et gérés par le PluginManager.

Architecture des plugins​

PluginManager
├── load_plugins() # Auto-découvrir depuis entry points
├── register(name, plugin) # Enregistrement manuel
├── enable(name) # Activer un plugin
├── disable(name) # Désactiver un plugin
├── get(name) # Récupérer un plugin
└── list_plugins() # Lister tous les plugins

Plugins intégrés​

PluginDescription
whoosh-ng-vectorRecherche vectorielle (NumPy, HNSW, Faiss)
whoosh-ng-autocompleteAutocomplétion par edge n-gram
whoosh-ng-fastapiFactory d'app FastAPI
whoosh-ng-observabilityMétriques Prometheus
whoosh-ng-adminInterface d'administration

Créer un plugin​

Tout plugin hérite de BasePlugin :

from whoosh.plugins.base import BasePlugin

class MonPlugin(BasePlugin):
name = "mon_plugin"
version = "1.0.0"
dependencies = []

def setup(self, registry):
"""Appelé quand le plugin est activé."""
registry.register("mon_provider", MonProvider())

def teardown(self, registry):
"""Appelé quand le plugin est désactivé."""
registry.unregister("mon_provider")

def middleware(self):
"""Middleware à injecter dans le pipeline."""
return [MonMiddleware()]

def on_startup(self):
"""Appelé une fois au démarrage."""
pass

def on_shutdown(self):
"""Appelé une fois à l'arrêt."""
pass

Enregistrement de plugin​

Via entry_points (pyproject.toml)​

[project.entry-points."whoosh_ng.plugins"]
mon_plugin = "mon_package.plugin:MonPlugin"

Programmatique​

from whoosh.plugins.manager import PluginManager

plugin = MonPlugin()
PluginManager.register("mon_plugin", plugin)
PluginManager.enable("mon_plugin")

Cycle de vie d'un plugin​

register() -> setup() -> enable() -> hooks middleware -> teardown() -> disable()

Dépendances entre plugins​

class VectorPlugin(BasePlugin):
name = "vector"
dependencies = ["metrics"] # Requiert le plugin metrics

Le PluginManager résout l'ordre de chargement et détecte les conflits.

Bonnes pratiques​

  1. Un plugin, une responsabilité: Gardez les plugins petits et focalisés
  2. Déclarez les dépendances: Aidez PluginManager à résoudre l'ordre
  3. Nettoyez bien: Implémentez teardown() pour supprimer les registres

Système de Plugins Moderne (Whoosh-NG 2.0)​

Whoosh-NG 2.0 introduit un PluginManager amélioré avec support de registres pour les sources de données, les fournisseurs de vecteurs, les embeddings et le middleware. Pour plus de détails sur l'architecture moderne des plugins, les groupes d'entry points et le déploiement, consultez le Guide Système de Plugins.