GodsDevProject commited on
Commit
dd28010
·
verified ·
1 Parent(s): 8ea6477

Create search/semantic.py

Browse files
Files changed (1) hide show
  1. search/semantic.py +23 -0
search/semantic.py ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import List, Dict
2
+ import faiss
3
+ import numpy as np
4
+ from sentence_transformers import SentenceTransformer
5
+
6
+ MODEL_NAME = "sentence-transformers/all-MiniLM-L6-v2"
7
+
8
+ class SemanticIndex:
9
+ def __init__(self, documents: List[Dict]):
10
+ self.model = SentenceTransformer(MODEL_NAME)
11
+ self.texts = [d["text"] for d in documents]
12
+ self.meta = documents
13
+
14
+ embeddings = self.model.encode(self.texts, show_progress_bar=False)
15
+ self.embeddings = np.array(embeddings).astype("float32")
16
+
17
+ self.index = faiss.IndexFlatL2(self.embeddings.shape[1])
18
+ self.index.add(self.embeddings)
19
+
20
+ def search(self, query: str, k: int = 5) -> List[Dict]:
21
+ q = self.model.encode([query]).astype("float32")
22
+ _, indices = self.index.search(q, k)
23
+ return [self.meta[i] for i in indices[0]]