File size: 4,337 Bytes
309eec4
 
2c362d2
309eec4
10c7dea
3acbc9c
309eec4
10c7dea
 
3acbc9c
 
 
 
 
 
10c7dea
3acbc9c
10c7dea
2c362d2
b3a1f0c
 
 
 
318e286
b3a1f0c
2c362d2
67e3963
3acbc9c
2c362d2
3acbc9c
67e3963
72a73ff
 
3acbc9c
523228c
 
d826a13
309eec4
 
2c362d2
309eec4
2c362d2
3acbc9c
10c7dea
3acbc9c
2c362d2
 
3acbc9c
10c7dea
3acbc9c
 
2c362d2
10c7dea
3acbc9c
 
 
10c7dea
3acbc9c
 
 
 
 
 
67e3963
3acbc9c
523228c
 
3acbc9c
 
 
523228c
 
b3a1f0c
 
523228c
 
 
3acbc9c
 
523228c
d826a13
523228c
3acbc9c
 
 
 
 
523228c
3acbc9c
 
 
523228c
3acbc9c
 
 
 
 
d826a13
3acbc9c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
112
113
114
115
import os
import tempfile
import pandas as pd
import streamlit as st
import google.generativeai as genai
import plotly.graph_objects as go

from tools.csv_parser import parse_csv_tool
from tools.plot_generator import plot_sales_tool
from tools.forecaster import forecast_tool
from tools.visuals import (
    histogram_tool,
    scatter_matrix_tool,
    corr_heatmap_tool,
)

# ── Gemini 1.5‑Pro configuration ─────────────────────────────
genai.configure(api_key=os.getenv("GEMINI_APIKEY"))
gemini = genai.GenerativeModel(
    "gemini-1.5-pro-latest",
    generation_config={
        "temperature": 0.7,
        "top_p": 0.9,
        "response_mime_type": "text/plain",
    },
)

# ── Streamlit page setup ─────────────────────────────────────
st.set_page_config(page_title="BizIntel AI Ultra – GeminiΒ 1.5Β Pro", layout="wide")
st.title("πŸ“Š BizIntelΒ AIΒ Ultra – Advanced Analytics")

TEMP_DIR = tempfile.gettempdir()

# ── CSV upload ───────────────────────────────────────────────
csv_file = st.file_uploader("Upload CSV (≀ 200β€―MB)", type=["csv"])
if csv_file is None:
    st.info("⬆️ Upload a CSV to begin.")
    st.stop()

csv_path = os.path.join(TEMP_DIR, csv_file.name)
with open(csv_path, "wb") as f:
    f.write(csv_file.read())
st.success("CSV saved βœ…")

# Preview + date column selection
df_preview = pd.read_csv(csv_path, nrows=5)
st.dataframe(df_preview)
date_col = st.selectbox("Select date/time column for forecasting", df_preview.columns)

# ── Local tools: summary, sales trend, forecast ──────────────
with st.spinner("Parsing CSV…"):
    summary_text = parse_csv_tool(csv_path)

with st.spinner("Generating sales trend chart…"):
    sales_fig = plot_sales_tool(csv_path, date_col=date_col)
    st.plotly_chart(sales_fig, use_container_width=True)

with st.spinner("Forecasting future metrics…"):
    forecast_text = forecast_tool(csv_path, date_col=date_col)
    if os.path.exists("forecast_plot.png"):
        forecast_img = "forecast_plot.png"
    else:
        forecast_img = None

# ── Gemini strategy insights ─────────────────────────────────
prompt = (
    f"You are **BizIntel Strategist AI**.\n\n"
    f"### CSV Summary\n```\n{summary_text}\n```\n\n"
    f"### Forecast Output\n```\n{forecast_text}\n```\n\n"
    "Return Markdown with:\n"
    "1. **Five key insights** (bullet list)\n"
    "2. **Three actionable strategies** (with expected impact)\n"
    "3. **Risk factors or anomalies**\n"
    "4. **Suggested additional visuals**\n"
)

st.subheader("πŸš€ Strategy Recommendations (GeminiΒ 1.5Β Pro)")
with st.spinner("GeminiΒ 1.5Β Pro is generating insights…"):
    strategy_md = gemini.generate_content(prompt).text

st.markdown(strategy_md)

# Display forecast image if exists
if forecast_img:
    st.image(forecast_img, caption="Sales Forecast", use_column_width=True)

# ── Optional exploratory visuals ─────────────────────────────
st.markdown("---")
st.subheader("πŸ” Optional Exploratory Visuals")

num_cols = df_preview.select_dtypes("number").columns

# Histogram
if st.checkbox("Show histogram"):
    hist_col = st.selectbox("Histogram variable", num_cols, key="hist")
    fig_hist = histogram_tool(csv_path, hist_col)
    st.plotly_chart(fig_hist, use_container_width=True)

# Scatter‑matrix
if st.checkbox("Show scatter‑matrix"):
    multi_cols = st.multiselect("Choose up to 5 columns", num_cols, default=num_cols[:3])
    if multi_cols:
        fig_scatter = scatter_matrix_tool(csv_path, multi_cols)
        st.plotly_chart(fig_scatter, use_container_width=True)

# Correlation heat‑map
if st.checkbox("Show correlation heat‑map"):
    fig_corr = corr_heatmap_tool(csv_path)
    st.plotly_chart(fig_corr, use_container_width=True)

# ── CSV summary text at bottom ───────────────────────────────
st.markdown("---")
st.subheader("πŸ“‘ CSV Summary (full Stats)")
st.text(summary_text)