"""Selection du backend LLM par nom (pluggable). Calque de `tts/factory.py` : cache par (nom, reference de modele). Une sauvegarde des reglages (settings.save_settings) appelle `reset_llm_cache()` pour que les changements de backend/modele prennent effet sans redemarrage. """ from __future__ import annotations from functools import lru_cache from .base import LLMBackend BACKENDS = ("mlx", "lmstudio") @lru_cache(maxsize=4) def get_llm_backend(backend: str = "mlx", model_ref: str = "") -> LLMBackend: backend = backend.lower() if backend == "mlx": from .mlx_backend import MLXBackend return MLXBackend(model_ref) if backend == "lmstudio": from .lmstudio_backend import LMStudioBackend return LMStudioBackend(model_ref) raise ValueError( f"Backend LLM inconnu: {backend!r} (dispo: {', '.join(BACKENDS)})") def reset_llm_cache() -> None: """Vide les instances de backend et le cache de chargement mlx.""" get_llm_backend.cache_clear() try: from .mlx_backend import _load _load.cache_clear() except Exception: # noqa: BLE001 pass