from sentence_transformers import SentenceTransformer from typing import List import numpy as np from backend.app.config import settings class EmbeddingService: def __init__(self): self.model = SentenceTransformer(settings.EMBEDDING_MODEL) self.dimension = 384 def embed_text(self, text: str) -> List[float]: embedding = self.model.encode(text, convert_to_numpy=True) return embedding.tolist() def embed_batch(self, texts: List[str]) -> List[List[float]]: embeddings = self.model.encode(texts, convert_to_numpy=True, batch_size=32) return embeddings.tolist() def calculate_similarity( self, embedding1: List[float], embedding2: List[float] ) -> float: vec1 = np.array(embedding1) vec2 = np.array(embedding2) dot_product = np.dot(vec1, vec2) norm1 = np.linalg.norm(vec1) norm2 = np.linalg.norm(vec2) return float(dot_product / (norm1 * norm2)) embedding_service = EmbeddingService()