haseebamin061 commited on
Commit
e3eed75
·
verified ·
1 Parent(s): 77648d0

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +83 -0
app.py ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from groq import Groq
3
+ from langchain_community.embeddings import HuggingFaceEmbeddings
4
+ from langchain_community.vectorstores import FAISS
5
+ from langchain.text_splitter import RecursiveCharacterTextSplitter
6
+ from PyPDF2 import PdfReader
7
+ import streamlit as st
8
+ from tempfile import NamedTemporaryFile
9
+
10
+ # Initialize Groq client
11
+ client = Groq(api_key="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")
12
+
13
+ # Function to extract text from a PDF
14
+ def extract_text_from_pdf(pdf_file_path):
15
+ pdf_reader = PdfReader(pdf_file_path)
16
+ text = ""
17
+ for page in pdf_reader.pages:
18
+ text += page.extract_text()
19
+ return text
20
+
21
+ # Function to split text into chunks
22
+ def chunk_text(text, chunk_size=500, chunk_overlap=50):
23
+ text_splitter = RecursiveCharacterTextSplitter(
24
+ chunk_size=chunk_size, chunk_overlap=chunk_overlap
25
+ )
26
+ return text_splitter.split_text(text)
27
+
28
+ # Function to create embeddings and store them in FAISS
29
+ def create_embeddings_and_store(chunks, vector_db=None):
30
+ embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
31
+ if vector_db is None:
32
+ vector_db = FAISS.from_texts(chunks, embedding=embeddings)
33
+ else:
34
+ vector_db.add_texts(chunks)
35
+ return vector_db
36
+
37
+ # Function to query the vector database and interact with Groq
38
+ def query_vector_db(query, vector_db):
39
+ # Retrieve relevant documents
40
+ docs = vector_db.similarity_search(query, k=3)
41
+ context = "\n".join([doc.page_content for doc in docs])
42
+
43
+ # Interact with Groq API
44
+ chat_completion = client.chat.completions.create(
45
+ messages=[
46
+ {"role": "system", "content": f"Use the following context:\n{context}"},
47
+ {"role": "user", "content": query},
48
+ ],
49
+ model="llama3-8b-8192",
50
+ )
51
+ return chat_completion.choices[0].message.content
52
+
53
+ # Streamlit app
54
+ st.title("RAG-Based Application QA")
55
+
56
+ # Upload PDFs
57
+ uploaded_files = st.file_uploader("Upload PDF documents", type=["pdf"], accept_multiple_files=True)
58
+
59
+ if uploaded_files:
60
+ vector_db = None # Initialize an empty vector DB
61
+ for uploaded_file in uploaded_files:
62
+ with NamedTemporaryFile(delete=False, suffix=".pdf") as temp_file:
63
+ temp_file.write(uploaded_file.read())
64
+ pdf_path = temp_file.name
65
+
66
+ # Extract text
67
+ text = extract_text_from_pdf(pdf_path)
68
+ st.write(f"Text extracted from: {uploaded_file.name}")
69
+
70
+ # Chunk text
71
+ chunks = chunk_text(text)
72
+ st.write(f"Text chunked from: {uploaded_file.name}")
73
+
74
+ # Generate embeddings and store in FAISS
75
+ vector_db = create_embeddings_and_store(chunks, vector_db=vector_db)
76
+ st.write(f"Embeddings generated and stored for: {uploaded_file.name}")
77
+
78
+ # User query input
79
+ user_query = st.text_input("Enter your query:")
80
+ if user_query:
81
+ response = query_vector_db(user_query, vector_db)
82
+ st.write("Response from LLM:")
83
+ st.write(response)