JavaScript 58.4%
Python 26.8%
CSS 7.5%
Objective-C 3%
R 2.6%
HTML 1.7%
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