test2 / app /services /embeddings.py
joedown11's picture
Upload 47 files
3910b9e verified
Raw
History Blame Contribute Delete
1.08 kB
from typing import List
from functools import lru_cache
import numpy as np
from sentence_transformers import SentenceTransformer
class EmbeddingService:
def __init__(self, model_name: str) -> None:
self.model = SentenceTransformer(model_name)
def encode(self, texts: List[str]) -> np.ndarray:
vectors = self.model.encode(
texts,
normalize_embeddings=True,
show_progress_bar=False,
convert_to_numpy=True,
)
return np.asarray(vectors, dtype=np.float32)
@lru_cache(maxsize=2048)
def encode_query_cached(self, text: str) -> bytes:
vec = self.model.encode(
[text],
normalize_embeddings=True,
show_progress_bar=False,
convert_to_numpy=True,
)
arr = np.asarray(vec, dtype=np.float32)
return arr.tobytes()
def encode_query(self, text: str) -> np.ndarray:
buf = self.encode_query_cached(text)
return np.frombuffer(buf, dtype=np.float32).reshape(1, -1)