import numpy as np from sentence_transformers import SentenceTransformer from src.models.claim import Claim _MODEL_CACHE = {} class ClaimEmbedder: def __init__(self, model_name: str = "all-MiniLM-L6-v2"): if model_name not in _MODEL_CACHE: _MODEL_CACHE[model_name] = SentenceTransformer(model_name) self.model = _MODEL_CACHE[model_name] def embed_claims(self, claims: list[Claim]) -> np.ndarray: """Batch encode claim texts. Returns (n_claims, 384) array.""" texts = [c.text for c in claims] # Ensure we return a numpy array embeddings = self.model.encode(texts, normalize_embeddings=True) return np.asarray(embeddings, dtype=np.float32) def embed_single(self, text: str) -> np.ndarray: """Embed a single text string.""" embedding = self.model.encode(text, normalize_embeddings=True) return np.asarray(embedding, dtype=np.float32)