Spaces:
Running
Running
fix: cached retriever model weights
Browse files
retrieval/models/sentence_bert.py
CHANGED
|
@@ -9,14 +9,20 @@ from sentence_transformers import SentenceTransformer
|
|
| 9 |
|
| 10 |
from ..base import BaseRetriever
|
| 11 |
|
|
|
|
|
|
|
| 12 |
|
| 13 |
class DenseRetriever(BaseRetriever):
|
| 14 |
"""Dense retrieval using sentence transformers."""
|
| 15 |
-
|
| 16 |
def __init__(self, model_name: str, db_path: str, index_config: Literal["naive", "v1"]):
|
| 17 |
super().__init__(db_path, index_config)
|
| 18 |
self.model_name = model_name
|
| 19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 20 |
self.corpus_embeddings = None
|
| 21 |
self.embeddings_path = self._default_embeddings_path()
|
| 22 |
self.load_index() if self._embeddings_exist() else self.build_index()
|
|
|
|
| 9 |
|
| 10 |
from ..base import BaseRetriever
|
| 11 |
|
| 12 |
+
_model_cache: Dict[str, SentenceTransformer] = {}
|
| 13 |
+
|
| 14 |
|
| 15 |
class DenseRetriever(BaseRetriever):
|
| 16 |
"""Dense retrieval using sentence transformers."""
|
| 17 |
+
|
| 18 |
def __init__(self, model_name: str, db_path: str, index_config: Literal["naive", "v1"]):
|
| 19 |
super().__init__(db_path, index_config)
|
| 20 |
self.model_name = model_name
|
| 21 |
+
if model_name not in _model_cache:
|
| 22 |
+
model = SentenceTransformer(model_name)
|
| 23 |
+
model.half() # fp16: halves model memory footprint
|
| 24 |
+
_model_cache[model_name] = model
|
| 25 |
+
self.model = _model_cache[model_name]
|
| 26 |
self.corpus_embeddings = None
|
| 27 |
self.embeddings_path = self._default_embeddings_path()
|
| 28 |
self.load_index() if self._embeddings_exist() else self.build_index()
|