File size: 1,016 Bytes
2db8ee1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from sentence_transformers import SentenceTransformer
import faiss
import numpy as np

class TextVectorStore:
    def __init__(self):
        self.model = SentenceTransformer('all-MiniLM-L6-v2')
        self.index = faiss.IndexFlatIP(384)  # 384 is the dimension of the embeddings from the model
        self.metadata = []

    def add_texts(self, texts, metadatas=None):
        embeddings = self.model.encode(texts)
        embeddings = np.array(embeddings).astype("float32")
        faiss.normalize_L2(embeddings)
        self.index.add(embeddings)

        for text, meta in zip(texts, metadatas):
            enriched_meta = meta.copy()
            enriched_meta["content"] = text
            self.metadata.append(enriched_meta)

    def search(self, query, k=5):
        q_emb = self.model.encode([query])
        q_emb = np.array(q_emb).astype("float32")
        faiss.normalize_L2(q_emb)
        _, idxs = self.index.search(q_emb.astype("float32"), k)
        return [self.metadata[i] for i in idxs[0]]