Zubair67 commited on
Commit
3a84497
·
verified ·
1 Parent(s): 9ad6462

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +57 -0
app.py ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import streamlit as st
3
+ from groq import Groq
4
+ from langchain.vectorstores import FAISS
5
+ from langchain.text_splitter import CharacterTextSplitter
6
+ from langchain.embeddings import OpenAIEmbeddings
7
+ from langchain.chains import RetrievalQA
8
+ from langchain.prompts import PromptTemplate
9
+
10
+ # Initialize Groq client
11
+ client = Groq(api_key="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")
12
+
13
+ # Title of the application
14
+ st.title("Public Procurement Rules Assistant")
15
+
16
+ # Upload PDF
17
+ uploaded_file = st.file_uploader("Upload the PPRA Rules 2004 PDF", type=["pdf"])
18
+
19
+ if uploaded_file:
20
+ from PyPDF2 import PdfReader
21
+
22
+ # Read and extract text from PDF
23
+ pdf_reader = PdfReader(uploaded_file)
24
+ text = ""
25
+ for page in pdf_reader.pages:
26
+ text += page.extract_text()
27
+
28
+ # Split text into chunks for embedding
29
+ text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=100)
30
+ chunks = text_splitter.split_text(text)
31
+
32
+ # Create embeddings and FAISS index
33
+ embeddings = OpenAIEmbeddings()
34
+ vectorstore = FAISS.from_texts(chunks, embeddings)
35
+
36
+ # Set up retrieval-based QA
37
+ retriever = vectorstore.as_retriever()
38
+ qa_chain = RetrievalQA.from_chain_type(
39
+ llm=lambda query: client.chat.completions.create(
40
+ messages=[{"role": "user", "content": query}],
41
+ model="llama-3.3-70b-versatile",
42
+ ).choices[0].message.content,
43
+ retriever=retriever,
44
+ return_source_documents=True,
45
+ )
46
+
47
+ # Input for user query
48
+ user_query = st.text_input("Ask a question about PPRA Rules 2004:")
49
+ if user_query:
50
+ response = qa_chain.run(user_query)
51
+ st.subheader("Answer:")
52
+ st.write(response)
53
+
54
+ # Optional: Display relevant source documents
55
+ st.subheader("Relevant Sources:")
56
+ for doc in response["source_documents"]:
57
+ st.write(doc.page_content)