from __future__ import annotations from typing import List from functools import lru_cache from .config import get_settings @lru_cache def _load_model(): from sentence_transformers import SentenceTransformer settings = get_settings() model = SentenceTransformer(settings.MODEL_NAME, device="cpu") return model def embed_texts(texts: List[str]) -> list[list[float]]: model = _load_model() texts = [t if isinstance(t, str) else str(t) for t in texts] vecs = model.encode(texts, normalize_embeddings=True, convert_to_numpy=False) return [list(map(float, v)) for v in vecs]