import os import numpy as np from sentence_transformers import SentenceTransformer _model = None def _get_model(): global _model if _model is None: name = os.getenv("EMBED_MODEL_NAME", "sentence-transformers/all-MiniLM-L6-v2") _model = SentenceTransformer(name) return _model def embed_texts(texts): """Return L2-normalized embeddings as (N, D) float32 array.""" if not texts: return np.zeros((0, 0), dtype="float32") model = _get_model() embs = model.encode(texts, show_progress_bar=False, convert_to_numpy=True) embs = embs.astype("float32") norms = np.linalg.norm(embs, axis=1, keepdims=True) + 1e-8 embs = embs / norms return embs