rk22012000/Agentic_QA_System
0
1# vector_store.py
2
3
4import faiss
5import numpy as np
6from sentence_transformers import SentenceTransformer
7from pypdf import PdfReader
8
9model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
10
11documents = []
12index = None
13
14def chunk_text(text, chunk_size=500):
15 return [text[i:i+chunk_size] for i in range(0, len(text), chunk_size)]
16
17def build_index(text_chunks):
18 global documents, index
19
20 documents = text_chunks
21 embeddings = model.encode(text_chunks)
22
23 dim = embeddings.shape[1]
24 index = faiss.IndexFlatL2(dim)
25 index.add(np.array(embeddings))
26
27def load_text_file():
28 try:
29 with open("knowledge.txt", "r", encoding="utf-8") as f:
30 text = f.read()
31
32 chunks = chunk_text(text)
33 build_index(chunks)
34 except:
35 pass
36
37def load_pdf(file_path):
38 reader = PdfReader(file_path)
39 text = ""
40
41 for page in reader.pages:
42 if page.extract_text():
43 text += page.extract_text()
44
45 chunks = chunk_text(text)
46 build_index(chunks)
47
48def retrieve(query, k=3):
49 if index is None:
50 return ["No documents loaded"]
51
52 query_embedding = model.encode([query])
53 distances, indices = index.search(np.array(query_embedding), k)
54
55 return [documents[i] for i in indices[0]]
56 