import numpy as np from typing import List, Optional from sentence_transformers import SentenceTransformer class Embedder: def __init__(self, model_name: str = "BAAI/bge-small-en-v1.5", device: str = "cpu"): self.model = SentenceTransformer(model_name, device=device) try: self.dim = self.model.get_embedding_dimension() except AttributeError: self.dim = self.model.get_sentence_embedding_dimension() def embed(self, texts: List[str], batch_size: int = 32) -> np.ndarray: if not texts: return np.empty((0, self.dim), dtype=np.float32) embeddings = self.model.encode( texts, normalize_embeddings=True, show_progress_bar=False, batch_size=batch_size, ) return np.asarray(embeddings, dtype=np.float32) def embed_query(self, query: str) -> np.ndarray: emb = self.embed([query]) return emb[0] @property def dimension(self) -> int: return self.dim