Spaces:
Sleeping
Sleeping
# Install dependencies | |
# pip install streamlit PyPDF2 groq | |
import streamlit as st | |
from PyPDF2 import PdfReader | |
import os | |
from groq import Groq | |
# Set the API key | |
os.environ["GROQ_API_KEY"] = "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" | |
# Initialize Groq client | |
client = Groq(api_key=os.environ.get("GROQ_API_KEY")) | |
# Streamlit App | |
st.title("Pakistani Constitution Q&A App") | |
st.write("Upload the PDF of the Pakistani Constitution and ask questions about it.") | |
# Upload PDF | |
uploaded_file = st.file_uploader("Upload PDF", type="pdf") | |
if uploaded_file: | |
# Extract text from the PDF | |
pdf_reader = PdfReader(uploaded_file) | |
constitution_text = "" | |
for page in pdf_reader.pages: | |
constitution_text += page.extract_text() | |
st.success("PDF Uploaded and Processed Successfully!") | |
# Predefined sections or chapters of the Constitution | |
# Assuming the Constitution is structured, you can define sections like this: | |
sections = { | |
"Preamble": (0, 1000), # You may need to adjust the range manually based on text positions | |
"Fundamental Rights": (1000, 5000), | |
"Directive Principles of State Policy": (5000, 8000), | |
"Structure of Government": (8000, 12000), | |
"Emergency Provisions": (12000, 15000), | |
"Amendment Procedure": (15000, 18000) | |
} | |
# Allow user to select a specific section | |
section_choice = st.selectbox("Select a section of the Constitution:", list(sections.keys())) | |
section_start, section_end = sections[section_choice] | |
# Extract selected section text | |
selected_section_text = constitution_text[section_start:section_end] | |
# Show the extracted section text to the user | |
st.write(f"### Selected Section: {section_choice}") | |
st.text_area("Text from selected section", selected_section_text, height=200) | |
# Ask a question about the selected section | |
user_question = st.text_input(f"Ask a question about the '{section_choice}' section:") | |
if user_question: | |
st.write("Processing your question...") | |
# Send the selected section text and question to Groq API | |
try: | |
chat_completion = client.chat.completions.create( | |
messages=[ | |
{"role": "user", "content": f"Context: {selected_section_text}\nQuestion: {user_question}"} | |
], | |
model="llama3-8b-8192", | |
) | |
# Display the answer | |
answer = chat_completion.choices[0].message.content | |
st.write("### Answer:") | |
st.write(answer) | |
except Exception as e: | |
st.error(f"An error occurred: {e}") | |