duongtruongbinh's picture
Init project
16fa4e7
"""Local embeddings via Sentence-Transformers (no inference provider)."""
from __future__ import annotations
from functools import lru_cache
from langchain_core.embeddings import Embeddings
from sentence_transformers import SentenceTransformer
from src.config import settings
@lru_cache(maxsize=1)
def _model() -> SentenceTransformer:
return SentenceTransformer(settings.embedding_model)
class LocalSentenceTransformerEmbeddings(Embeddings):
def embed_documents(self, texts: list[str]) -> list[list[float]]: # type: ignore[override]
vecs = _model().encode(texts, normalize_embeddings=True)
tolist = getattr(vecs, "tolist", None)
return tolist() if callable(tolist) else [list(map(float, v)) for v in vecs]
def embed_query(self, text: str) -> list[float]: # type: ignore[override]
vec = _model().encode([text], normalize_embeddings=True)[0]
tolist = getattr(vec, "tolist", None)
return tolist() if callable(tolist) else [float(x) for x in vec]
def get_embeddings() -> Embeddings:
return LocalSentenceTransformerEmbeddings()