preppal_sathvikk / src /streamlit_app.py
sathvikk's picture
Update src/streamlit_app.py
bdae30c verified
import os
import tempfile
os.environ["TRANSFORMERS_CACHE"] = "/cache"
import streamlit as st
import fitz # PyMuPDF
from transformers import pipeline
# App setup
st.set_page_config(
page_title="PrepPal",
page_icon="πŸ“˜",
layout="wide"
)
@st.cache_resource
def load_model():
return pipeline(
"summarization",
model="Falconsai/text_summarization",
device=-1 # CPU only
)
def get_pdf_text(uploaded_file):
with tempfile.NamedTemporaryFile(suffix=".pdf") as tmp:
tmp.write(uploaded_file.getbuffer())
with fitz.open(tmp.name) as doc:
return " ".join([page.get_text() for page in doc])
def create_summary(text, model):
chunks = [text[i:i+800] for i in range(0, len(text), 800)]
return " ".join([
model(chunk, max_length=120, min_length=30)[0]['summary_text']
for chunk in chunks
])
def main():
st.title("πŸ“˜ PrepPal - Study Assistant")
# All three tabs
tab1, tab2, tab3 = st.tabs(["πŸ“„ Summarize", "❓ Ask a Doubt", "πŸ’¬ Feedback"])
with tab1:
st.header("PDF Summarizer")
uploaded_file = st.file_uploader(
"Upload PDF (max 5MB)",
type=["pdf"]
)
if uploaded_file and uploaded_file.size <= 5_000_000:
if st.button("Generate Summary"):
with st.spinner("Extracting text..."):
text = get_pdf_text(uploaded_file)
if text: # Only proceed if text extraction succeeded
with st.spinner("Loading AI model..."):
model = load_model()
with st.spinner("Generating summary..."):
summary = create_summary(text, model)
st.subheader("Summary")
st.write(summary)
else:
st.info("Could not extract text from PDF")
with tab2:
st.header("Ask a Question")
st.write("Feature coming soon!")
with tab3:
st.header("Share Feedback")
feedback = st.text_area("Your thoughts about PrepPal")
if st.button("Submit Feedback"):
st.success("Thank you for your feedback!")
if __name__ == "__main__":
main()