Quillwright / quillwright /backends /embedding.py
Aarya2004
Deploy: sync hosted Space to local app (chat, document capture, Modal backends, pages, mobile/QR)
47b2a99
Raw
History Blame Contribute Delete
1.17 kB
"""EmbeddingModel: local text embeddings for semantic Recall (ADR-0003).
Wraps `nvidia/llama-nemotron-embed-1b-v2` via sentence-transformers — the model
card's recommended local path (NOT Ollama; it has no embeddings API). Runs fully
offline → preserves 🔌 Off the Grid and adds NVIDIA breadth.
sentence-transformers + torch are heavy (~2GB), so the import is LAZY: importing
this module costs nothing; the model loads on first `.encode()`. Per ADR-0003 the
hot path only embeds the QUERY (run vectors are cached at record time), so torch
stays out of recall-time latency.
"""
DEFAULT_MODEL = "nvidia/llama-nemotron-embed-1b-v2"
class EmbeddingModel:
def __init__(self, model: str = DEFAULT_MODEL):
self.name = model
self._st = None # lazily-loaded SentenceTransformer
def _model(self):
if self._st is None:
from sentence_transformers import SentenceTransformer
self._st = SentenceTransformer(self.name, trust_remote_code=True)
return self._st
def encode(self, text: str) -> list[float]:
vec = self._model().encode(text, normalize_embeddings=True)
return vec.tolist()