RagApp / app.py
shah1zil's picture
Update app.py
3b5e14b verified
import os
import streamlit as st
from PyPDF2 import PdfReader
from groq import Groq
# Set up the Streamlit app
st.title("Pakistani Constitution Q&A App")
st.write("Upload the Pakistani Constitution PDF, explore sections, and ask questions.")
# Initialize the Groq API client
GROQ_API_KEY = os.getenv("GROQ_API_KEY") # Read API key from environment variables
if not GROQ_API_KEY:
st.error("Groq API key not found. Please set the 'GROQ_API_KEY' environment variable in Hugging Face Spaces settings.")
else:
client = Groq(api_key=GROQ_API_KEY)
# Upload PDF
uploaded_file = st.file_uploader("Upload PDF", type=["pdf"])
# Predefined sections of the Constitution
sections = {
"Preamble": (0, 1),
"Fundamental Rights": (2, 10),
# Add more sections with their page ranges here
}
# Helper function to extract text from PDF
def extract_text_from_pdf(pdf_file, start_page, end_page, max_chars=4000):
"""Extracts text from a specific range of pages in the PDF and limits text length."""
try:
reader = PdfReader(pdf_file)
text = ""
for page in range(start_page, end_page + 1):
text += reader.pages[page].extract_text()
return text[:max_chars].strip() # Limit text to prevent token overflow
except Exception as e:
st.error(f"Error extracting text from PDF: {e}")
return ""
# Section selection and Q&A functionality
if uploaded_file:
st.success("PDF uploaded successfully.")
selected_section = st.selectbox("Select a Section", list(sections.keys()))
if selected_section:
start_page, end_page = sections[selected_section]
section_text = extract_text_from_pdf(uploaded_file, start_page, end_page)
if section_text:
st.text_area("Selected Section Text", section_text, height=300)
# Question input
question = st.text_input("Ask a question about this section:")
if question:
try:
st.info("Querying Groq API...")
chat_completion = client.chat.completions.create(
messages=[
{
"role": "user",
"content": f"Based on this section of the Pakistani Constitution: {section_text}\n\nQuestion: {question}",
}
],
model="llama-3.3-70b-versatile",
max_tokens=500, # Limiting output tokens
temperature=0.7 # Adjust for more/less randomness
)
answer = chat_completion.choices[0].message.content
st.success(f"Answer: {answer}")
except Exception as e:
st.error(f"Error communicating with Groq API: {e}")
else:
st.warning("Please upload a PDF file to proceed.")
# import os
# import streamlit as st
# from PyPDF2 import PdfReader
# from groq import Groq
# # Set up the Streamlit app
# st.title("Pakistani Constitution Q&A App")
# st.write("Upload the Pakistani Constitution PDF, explore sections, and ask questions.")
# # Initialize the Groq API client
# GROQ_API_KEY = os.getenv("GROQ_API_KEY") # Read the API key from environment variables
# if not GROQ_API_KEY:
# st.error("Groq API key not found. Please set the 'GROQ_API_KEY' environment variable in Hugging Face Spaces settings.")
# else:
# client = Groq(api_key=GROQ_API_KEY)
# # Upload PDF
# uploaded_file = st.file_uploader("Upload PDF", type=["pdf"])
# # Predefined sections of the Constitution
# sections = {
# "Preamble": (0, 1),
# "Fundamental Rights": (2, 10),
# # Add more sections with their page ranges here
# }
# # Helper function to extract text from PDF
# def extract_text_from_pdf(pdf_file, start_page, end_page):
# try:
# reader = PdfReader(pdf_file)
# text = ""
# for page in range(start_page, end_page + 1):
# text += reader.pages[page].extract_text()
# return text.strip()
# except Exception as e:
# st.error(f"Error extracting text from PDF: {e}")
# return ""
# # Section selection and Q&A functionality
# if uploaded_file:
# st.success("PDF uploaded successfully.")
# selected_section = st.selectbox("Select a Section", list(sections.keys()))
# if selected_section:
# start_page, end_page = sections[selected_section]
# section_text = extract_text_from_pdf(uploaded_file, start_page, end_page)
# if section_text:
# st.text_area("Selected Section Text", section_text, height=300)
# # Question input
# question = st.text_input("Ask a question about this section:")
# if question:
# # Interact with the Groq API
# try:
# st.info("Querying Groq API...")
# chat_completion = client.chat.completions.create(
# messages=[
# {
# "role": "user",
# "content": f"Based on this section of the Pakistani Constitution: {section_text}\nQuestion: {question}",
# }
# ],
# model="llama-3.3-70b-versatile",
# )
# answer = chat_completion.choices[0].message.content
# st.success(f"Answer: {answer}")
# except Exception as e:
# st.error(f"Error communicating with Groq API: {e}")
# else:
# st.warning("Please upload a PDF file to proceed.")