starfriend's picture
Upload 40 files
881aff7 verified
Raw History Blame Contribute Delete
1.49 kB
"""Sentence-transformer embeddings for metadata vector search."""
from __future__ import annotations
from functools import lru_cache
from metadata_search.config import EMBEDDING_MODEL
@lru_cache(maxsize=1)
def _load_model(model_name: str):
try:
from sentence_transformers import SentenceTransformer
except ImportError as exc:
raise SystemExit(
"Missing dependency: sentence-transformers. Install with `pip install -r requirements.txt`."
) from exc
try:
return SentenceTransformer(model_name, local_files_only=True)
except Exception:
return SentenceTransformer(model_name)
class MetadataEmbedder:
def __init__(self, model_name: str = EMBEDDING_MODEL, *, batch_size: int = 64):
self.model_name = model_name
self.batch_size = batch_size
self.model = _load_model(model_name)
def embed_documents(self, texts: list[str]) -> list[list[float]]:
if not texts:
return []
vectors = self.model.encode(
texts,
batch_size=self.batch_size,
normalize_embeddings=True,
show_progress_bar=len(texts) > 128,
)
return vectors.tolist()
def embed_query(self, query: str) -> list[float]:
vector = self.model.encode(
query,
normalize_embeddings=True,
show_progress_bar=False,
)
return vector.tolist()