Spaces:
Sleeping
Sleeping
File size: 1,490 Bytes
881aff7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | """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()
|