arshad1234321's picture
Update app.py
55df5f6 verified
Raw
History Blame Contribute Delete
2.61 kB
import gradio as gr
import PyPDF2
import google.generativeai as genai
import re
import os
# Load API key safely
GEMINI_API_KEY = os.getenv("GEMINI_API_KEY") # set in environment
genai.configure(api_key=GEMINI_API_KEY)
def extract_text_from_pdf(file):
try:
reader = PyPDF2.PdfReader(file)
text = ""
for page in reader.pages:
content = page.extract_text()
if content:
text += content + "\n"
return text.strip()
except:
return ""
def extract_section(full_text, label):
pattern = rf"\*\*\- {re.escape(label)}:\*\*\s*(.*?)(?=\n\*\*|\Z)"
match = re.search(pattern, full_text, re.DOTALL)
return match.group(1).strip() if match else "❓ Not found"
def analyze_financial_data(file):
text = extract_text_from_pdf(file)
if not text:
return ("⚠️ Failed to extract text", "", "", "", "", "", "")
text = text[:6000] # LIMIT TOKENS (IMPORTANT)
prompt = f"""
Analyze Paytm transactions and return structured insights.
**Financial Insights**
**- Monthly Income & Expenses:** ...
**- Unnecessary Expense Categories:** ...
**- Estimated Savings %:** ...
**- Spending Trends:** ...
**- Category-wise Expense Breakdown (Partial):** ...
**- Cost Control Suggestions:** ...
Transaction History:
{text}
"""
try:
model = genai.GenerativeModel("gemini-1.5-flash-latest")
response = model.generate_content(prompt)
full_text = response.text.strip()
return (
"✅ Analysis Complete",
extract_section(full_text, "Monthly Income & Expenses"),
extract_section(full_text, "Unnecessary Expense Categories"),
extract_section(full_text, "Estimated Savings %"),
extract_section(full_text, "Spending Trends"),
extract_section(full_text, "Category-wise Expense Breakdown (Partial)"),
extract_section(full_text, "Cost Control Suggestions"),
)
except Exception as e:
return (f"❌ Gemini Error: {e}", "", "", "", "", "", "")
gr.Interface(
fn=analyze_financial_data,
inputs=gr.File(label="Upload Paytm PDF", file_types=[".pdf"]),
outputs=[
gr.Textbox(label="Status"),
gr.Textbox(label="Monthly Income & Expenses"),
gr.Textbox(label="Unnecessary Expense Categories"),
gr.Textbox(label="Estimated Savings %"),
gr.Textbox(label="Spending Trends"),
gr.Textbox(label="Category-wise Breakdown"),
gr.Textbox(label="Cost Control Suggestions"),
],
).launch()