Text-Summarizer / app.py
usernameiskheejay
Fix pdf print out error
ee608d5
Raw
History Blame Contribute Delete
3.07 kB
import streamlit as st
import os
import google.generativeai as genai
from PyPDF2 import PdfReader
from fpdf import FPDF
genai.configure(api_key="AIzaSyCHtsaOe5k-MXYO0RDnytc6iX7FpSKCPmE")
#genai.configure(api_key=os.environ.get("GEMINI_API_KEY"))
generation_config = {
"temperature": 2,
"top_p": 0.95,
"top_k": 64,
"max_output_tokens": 65536,
"response_mime_type": "text/plain",
}
model = genai.GenerativeModel(
model_name="gemini-2.0-flash-thinking-exp-01-21",
generation_config=generation_config,
)
def extract_text_from_pdf(file):
"""Extract text from an uploaded PDF file."""
reader = PdfReader(file)
text = ""
for page in reader.pages:
text += page.extract_text() + "\n"
return text
def stream_response(prompt):
"""Stream response from the generative model."""
chat_session = model.start_chat(
history=[{"role": "user", "parts": [prompt]}]
)
for response_chunk in chat_session.send_message("Processing input...", stream=True):
if response_chunk.text:
yield response_chunk.text
def create_pdf(content):
"""Create a well-formatted PDF file from the given content."""
pdf = FPDF()
pdf.add_page()
pdf.set_font("Arial", size=12)
lines = content.split("\n")
for line in lines:
formatted_line = line.replace("**", "") # Remove markdown-style bolding
pdf.multi_cell(0, 10, formatted_line)
return pdf
# Streamlit UI
st.title("Text Summarization and Insight Extraction")
# Session state to persist generated text
if "generated_text" not in st.session_state:
st.session_state.generated_text = ""
uploaded_file = st.file_uploader("Upload a document (PDF) or paste text below:", type=["pdf"])
input_text = st.text_area("Or paste your article here:", placeholder="Paste your article or text here...")
if st.button("Generate Summary and Insights"):
if uploaded_file:
input_text = extract_text_from_pdf(uploaded_file)
if input_text.strip():
st.markdown("### Generating Results...")
response_container = st.empty()
st.session_state.generated_text = "" # Clear previous text
for chunk in stream_response(f"Summarize the following text and extract key insights:\n{input_text}"):
st.session_state.generated_text += chunk
response_container.markdown(st.session_state.generated_text)
else:
st.warning("Please upload a file or enter text to process.")
if st.session_state.generated_text:
st.markdown("### Summary and Insights")
st.text_area("Results:", st.session_state.generated_text, height=300)
# PDF Download
pdf = create_pdf(st.session_state.generated_text)
pdf_file = "summary_insights.pdf"
pdf.output(pdf_file)
with open(pdf_file, "rb") as f:
st.download_button(
label="Download PDF",
data=f,
file_name="summary_insights.pdf",
mime="application/pdf"
)