smart_city / app.py
rathil123's picture
Update app.py
6a69b65 verified
import gradio as gr
from transformers import pipeline
import PyPDF2
# ---------------- Load Hugging Face Pipelines ----------------
# Lightweight summarizer
summarizer = pipeline("summarization", model="sshleifer/distilbart-xsum-12-6")
# Instruction-tuned generator for eco tips
generator = pipeline("text2text-generation", model="google/flan-t5-small")
# ---------------- Core Functions ----------------
def extract_text_from_pdf(pdf_file):
"""Extract text from uploaded PDF file."""
if pdf_file is None:
return ""
try:
pdf_reader = PyPDF2.PdfReader(pdf_file)
text = ""
for page in pdf_reader.pages:
if page.extract_text():
text += page.extract_text() + "\n"
return text
except Exception as e:
return f"Error reading PDF: {str(e)}"
def eco_tips_generator(problem_keywords):
"""Generate eco-friendly tips based on keywords."""
if not problem_keywords.strip():
return "Please enter some keywords (e.g., plastic, solar, energy saving)."
prompt = (
f"Give practical eco-friendly tips for sustainable living related to: {problem_keywords}. "
f"Provide specific, clear, and actionable solutions."
)
result = generator(prompt, max_length=150)
return result[0]["generated_text"]
def policy_summarization(pdf_file, policy_text):
"""Summarize either uploaded PDF or pasted text."""
if pdf_file is not None:
content = extract_text_from_pdf(pdf_file)
text_to_summarize = content if content.strip() else policy_text
else:
text_to_summarize = policy_text
if not text_to_summarize.strip():
return "Please upload a PDF or paste policy text."
try:
summary = summarizer(
text_to_summarize,
max_length=120,
min_length=30,
do_sample=False
)
return summary[0]['summary_text']
except Exception as e:
return f"Error during summarization: {str(e)}"
# ---------------- Gradio Interface ----------------
with gr.Blocks() as app:
gr.Markdown("# 🌍 Eco Assistant & Policy Analyzer")
with gr.Tabs():
# Eco Tips Generator
with gr.TabItem("♻️ Eco Tips Generator"):
with gr.Row():
with gr.Column():
keywords_input = gr.Textbox(
label="Environmental Problem/Keywords",
placeholder="e.g., plastic, solar, water waste, energy saving...",
lines=3
)
generate_tips_btn = gr.Button("Generate Eco Tips")
with gr.Column():
tips_output = gr.Textbox(label="Sustainable Living Tips", lines=15)
generate_tips_btn.click(eco_tips_generator, inputs=keywords_input, outputs=tips_output)
# Policy Summarization
with gr.TabItem("📑 Policy Summarization"):
with gr.Row():
with gr.Column():
pdf_upload = gr.File(label="Upload Policy PDF", file_types=[".pdf"])
policy_text_input = gr.Textbox(
label="Or paste policy text here",
placeholder="Paste policy document text...",
lines=5
)
summarize_btn = gr.Button("Summarize Policy")
with gr.Column():
summary_output = gr.Textbox(label="Policy Summary & Key Points", lines=20)
summarize_btn.click(policy_summarization, inputs=[pdf_upload, policy_text_input], outputs=summary_output)
# ---------------- Run App ----------------
if __name__ == "__main__":
app.launch(server_name="0.0.0.0", server_port=7860)