Spaces:
Running
Running
| """ | |
| Local pplx-embed embedding provider. | |
| Uses: | |
| - perplexity-ai/pplx-embed-v1-0.6b for queries | |
| - perplexity-ai/pplx-embed-context-v1-0.6b for documents | |
| Two patches applied at import time: | |
| 1. transformers 4.57 crashes on models without additional_chat_templates folder β catch 404 | |
| 2. pplx-embed's st_quantize.py imports sentence_transformers.models.Module (removed in 3.x) β add it back | |
| """ | |
| # ββ Patch 1: transformers 4.57 list_repo_templates 404 crash β | |
| from transformers.utils import hub as _hub | |
| import transformers.tokenization_utils_base as _tub | |
| _orig_lrt = _hub.list_repo_templates | |
| def _safe_lrt(*a, **kw): | |
| try: | |
| return _orig_lrt(*a, **kw) | |
| except Exception: | |
| return [] | |
| _hub.list_repo_templates = _safe_lrt | |
| _tub.list_repo_templates = _safe_lrt | |
| # ββ Patch 2: sentence_transformers.models.Module missing βββββ | |
| import torch.nn as _nn | |
| import sentence_transformers.models as _st_models | |
| if not hasattr(_st_models, "Module"): | |
| _st_models.Module = _nn.Module | |
| from sentence_transformers import SentenceTransformer | |
| import numpy as np | |
| from openmark.embeddings.base import EmbeddingProvider | |
| from openmark import config | |
| class LocalEmbedder(EmbeddingProvider): | |
| def __init__(self): | |
| print("Loading pplx-embed query model...") | |
| self._query_model = SentenceTransformer(config.PPLX_QUERY_MODEL, trust_remote_code=True) | |
| print("Loading pplx-embed document model...") | |
| self._doc_model = SentenceTransformer(config.PPLX_DOC_MODEL, trust_remote_code=True) | |
| print("Local embedder ready.") | |
| def embed_documents(self, texts: list[str]) -> list[list[float]]: | |
| embeddings = self._doc_model.encode(texts, batch_size=32, show_progress_bar=True) | |
| return embeddings.astype(float).tolist() | |
| def embed_query(self, text: str) -> list[float]: | |
| embedding = self._query_model.encode([text]) | |
| return embedding[0].astype(float).tolist() | |
| def dimension(self) -> int: | |
| return 1024 | |