kuldeep0204 commited on
Commit
66c1ee1
·
verified ·
1 Parent(s): 84552b2

Create vector_store.py

Browse files
Files changed (1) hide show
  1. vector_store.py +39 -0
vector_store.py ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # vector_store.py
2
+ import faiss
3
+ import numpy as np
4
+ import pickle
5
+ from typing import List
6
+
7
+ class SimpleVectorStore:
8
+ def __init__(self, dim, index_path=None):
9
+ self.dim = dim
10
+ self.index = faiss.IndexFlatIP(dim) # cosine if vectors normalized
11
+ self.metadata = []
12
+ self.index_path = index_path
13
+
14
+ def add(self, vec: np.ndarray, meta: dict):
15
+ if vec.ndim == 1:
16
+ vec = vec.reshape(1, -1)
17
+ self.index.add(vec.astype("float32"))
18
+ self.metadata.append(meta)
19
+
20
+ def search(self, query_vec: np.ndarray, k=5):
21
+ if query_vec.ndim == 1:
22
+ query_vec = query_vec.reshape(1, -1)
23
+ D, I = self.index.search(query_vec.astype("float32"), k)
24
+ results = []
25
+ for dist, idx in zip(D[0], I[0]):
26
+ if idx == -1 or idx >= len(self.metadata):
27
+ continue
28
+ results.append((float(dist), self.metadata[idx]))
29
+ return results
30
+
31
+ def save(self, path_prefix):
32
+ faiss.write_index(self.index, f"{path_prefix}.index")
33
+ with open(f"{path_prefix}.meta", "wb") as f:
34
+ pickle.dump(self.metadata, f)
35
+
36
+ def load(self, path_prefix):
37
+ self.index = faiss.read_index(f"{path_prefix}.index")
38
+ with open(f"{path_prefix}.meta", "rb") as f:
39
+ self.metadata = pickle.load(f)