from __future__ import annotations from typing import List from functools import lru_cache from .config import get_settings # Lazy import so startup stays fast @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() # Normalize to list of str texts = [t if isinstance(t, str) else str(t) for t in texts] vecs = model.encode(texts, normalize_embeddings=True, convert_to_numpy=False) # Ensure pure-python list of floats return [list(map(float, v)) for v in vecs]