File size: 4,161 Bytes
ac3e730
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import os
import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
from groq import Groq

# --------------------------
# Set your Groq API key manually (for Colab)
# --------------------------
# You can either:
# 1️⃣ Use environment variable:
os.environ["GROQ_API_KEY"] = "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"


GROQ_API_KEY = os.getenv("GROQ_API_KEY")

# --------------------------
# Initialize Groq client
# --------------------------
if not GROQ_API_KEY:
    st.warning("⚠️ Please set your GROQ_API_KEY in Colab before running.")
client = Groq(api_key=GROQ_API_KEY)

# --------------------------
# Streamlit App Config
# --------------------------
st.set_page_config(page_title="AI Expense Analyzer", page_icon="πŸ’°", layout="wide")
st.title("πŸ’° AI Expense Analyzer")
st.markdown("Track your expenses, visualize spending patterns, and get smart AI suggestions!")

# --------------------------
# Initialize Session State
# --------------------------
if "expenses" not in st.session_state:
    st.session_state.expenses = pd.DataFrame(columns=["Date", "Category", "Amount", "Description"])

# --------------------------
# Expense Input Form
# --------------------------
with st.expander("βž• Add New Expense", expanded=True):
    with st.form("expense_form"):
        date = st.date_input("Date")
        category = st.selectbox("Category", ["Food", "Transport", "Shopping", "Entertainment", "Bills", "Other"])
        amount = st.number_input("Amount (in PKR)", min_value=0.0, step=100.0)
        description = st.text_area("Description (optional)")
        submitted = st.form_submit_button("Add Expense")

        if submitted:
            new_data = pd.DataFrame([[date, category, amount, description]],
                                    columns=["Date", "Category", "Amount", "Description"])
            st.session_state.expenses = pd.concat([st.session_state.expenses, new_data], ignore_index=True)
            st.success("βœ… Expense added successfully!")

# --------------------------
# Display Expenses
# --------------------------
if not st.session_state.expenses.empty:
    st.subheader("πŸ“Š Expense Records")
    st.dataframe(st.session_state.expenses, use_container_width=True)

    # Pie Chart
    st.subheader("🧩 Expense Distribution by Category")
    category_data = st.session_state.expenses.groupby("Category")["Amount"].sum()
    fig1, ax1 = plt.subplots()
    ax1.pie(category_data, labels=category_data.index, autopct="%1.1f%%", startangle=90)
    ax1.axis("equal")
    st.pyplot(fig1)

    # Trend Chart
    st.subheader("πŸ“ˆ Spending Trend Over Time")
    trend_data = st.session_state.expenses.groupby("Date")["Amount"].sum().reset_index()
    fig2, ax2 = plt.subplots()
    ax2.plot(trend_data["Date"], trend_data["Amount"], marker="o")
    ax2.set_xlabel("Date")
    ax2.set_ylabel("Total Spending (PKR)")
    ax2.set_title("Spending Trend")
    st.pyplot(fig2)

    # AI Analysis
    st.subheader("πŸ€– AI Expense Insights")

    user_expense_summary = st.session_state.expenses.to_string(index=False)

    if st.button("Analyze My Expenses πŸ’¬"):
        with st.spinner("Analyzing your expense patterns with Groq Llama 3.3..."):
            try:
                prompt = f"""
                You are a financial advisor. Analyze the following expense data and identify:
                1. Spending patterns
                2. Categories with overspending
                3. Suggested saving strategies
                4. A short summary of financial health.

                Expense Data:
                {user_expense_summary}
                """

                chat_completion = client.chat.completions.create(
                    messages=[{"role": "user", "content": prompt}],
                    model="llama-3.3-70b-versatile",
                )

                ai_analysis = chat_completion.choices[0].message.content
                st.success("βœ… Analysis Complete!")
                st.markdown(ai_analysis)

            except Exception as e:
                st.error(f"❌ Error: {str(e)}")
else:
    st.info("πŸ’‘ Add some expenses above to get started!")