|
|
import streamlit as st |
|
|
import pdfplumber |
|
|
import openai |
|
|
from dotenv import load_dotenv |
|
|
import os |
|
|
|
|
|
load_dotenv() |
|
|
|
|
|
|
|
|
openai.api_key = os.getenv("OPENAI_API_KEY") |
|
|
|
|
|
|
|
|
st.title("Advanced PDF-Based Application") |
|
|
st.markdown("Select the functionality you want to use from the sidebar.") |
|
|
|
|
|
|
|
|
with st.sidebar: |
|
|
mode = st.radio("Choose a mode:", ["PDF Summarizer", "Question Answering"]) |
|
|
uploaded_files = st.file_uploader("Upload PDF files", accept_multiple_files=True, type=['pdf'], on_change=lambda: st.experimental_rerun()) |
|
|
|
|
|
|
|
|
documents = [] |
|
|
|
|
|
|
|
|
if uploaded_files: |
|
|
with st.spinner('Processing PDF files...'): |
|
|
progress_bar = st.progress(0) |
|
|
total_files = len(uploaded_files) |
|
|
for i, uploaded_file in enumerate(uploaded_files): |
|
|
with pdfplumber.open(uploaded_file) as pdf: |
|
|
full_text = "" |
|
|
for page in pdf.pages[:50]: |
|
|
full_text += page.extract_text() or "" |
|
|
documents.append(full_text) |
|
|
progress_bar.progress((i + 1) / total_files) |
|
|
st.success("PDFs processed successfully. Proceed based on the selected mode.") |
|
|
progress_bar.empty() |
|
|
|
|
|
|
|
|
tab1, tab2 = st.tabs(["Question Answering", "PDF Summarizer"]) |
|
|
|
|
|
with tab1: |
|
|
if mode == "Question Answering": |
|
|
question = st.text_input("Enter your question here:") |
|
|
if question and documents: |
|
|
combined_text = "\n".join(documents[:3]) |
|
|
messages = [ |
|
|
{"role": "system", "content": "You are a helpful assistant."}, |
|
|
{"role": "user", "content": question}, |
|
|
{"role": "system", "content": combined_text} |
|
|
] |
|
|
response = openai.ChatCompletion.create( |
|
|
model="gpt-4", |
|
|
messages=messages, |
|
|
max_tokens=500 |
|
|
) |
|
|
st.write("Answer:", response.choices[0].message['content']) |
|
|
|
|
|
with tab2: |
|
|
if mode == "PDF Summarizer" and documents: |
|
|
summaries = [] |
|
|
for doc in documents[:3]: |
|
|
messages = [ |
|
|
{"role": "system", "content": "You are a helpful assistant tasked to summarize documents."}, |
|
|
{"role": "user", "content": "Summarize the following text brifly:\n" + doc} |
|
|
] |
|
|
response = openai.ChatCompletion.create( |
|
|
model="gpt-4", |
|
|
messages=messages, |
|
|
max_tokens=1024 |
|
|
) |
|
|
summaries.append(response.choices[0].message['content'].strip()) |
|
|
|
|
|
for idx, summary in enumerate(summaries): |
|
|
st.write(f"Summary {idx+1}:", summary) |
|
|
|