SPB Git forge

spb/pdb-api

Public
1commits 1branches 0releases
436.0 KBsize
maindefault branch
2 h agolast push
JavaScript 58.4% Python 26.8% CSS 7.5% Objective-C 3% R 2.6% HTML 1.7%
1.3 KB · 56 lines python
Raw Blame History
1"""Encodage des requêtes en texte libre avec all-MiniLM-L6-v2 (optionnel, chargé paresseusement)."""2from __future__ import annotations34import os5import threading67MODEL_NAME = os.environ.get("EMBED_MODEL", "all-MiniLM-L6-v2")8_model = None9_state = "idle"10_lock = threading.Lock()111213class Unavailable(Exception):14    pass151617def state() -> str:18    return _state192021def _load():22    global _model, _state23    with _lock:24        if _model is not None:25            return _model26        try:27            _state = "loading"28            from sentence_transformers import SentenceTransformer  # type: ignore29            _model = SentenceTransformer(MODEL_NAME)30            _state = "ready"31        except Exception as e:  # noqa: BLE00132            _state = f"unavailable: {type(e).__name__}"33            raise Unavailable("Recherche sémantique indisponible sur ce serveur (paquet sentence-transformers absent ou modèle non téléchargé). "34                              "Utilisez /projects?q= ou /projects/{id}/similar.") from e35        return _model363738def encode(text: str):39    m = _load()40    return m.encode([text], normalize_embeddings=True)[0]414243def preload():44    threading.Thread(target=lambda: _safe(_load), daemon=True).start()454647def _safe(f):48    try:49        f()50    except Exception:51        pass525354if os.environ.get("SEMANTIC_PRELOAD", "1") == "1":55    preload()56