File size: 2,421 Bytes
72a73ff
 
67e3963
 
 
 
5cc8a1b
67e3963
b411743
67e3963
72a73ff
 
5cc8a1b
67e3963
72a73ff
67e3963
 
5cc8a1b
 
 
72a73ff
5cc8a1b
 
67e3963
 
5cc8a1b
 
 
 
67e3963
5cc8a1b
 
 
 
b411743
5cc8a1b
b411743
5cc8a1b
b411743
5cc8a1b
 
 
72a73ff
5cc8a1b
72a73ff
b411743
5cc8a1b
72a73ff
b411743
 
72a73ff
5cc8a1b
 
 
 
 
 
 
b411743
 
72a73ff
67e3963
5cc8a1b
 
 
 
 
 
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
import os
import tempfile
import streamlit as st
from agents.analytics_pipeline import analytics_coordinator
from db_connector import fetch_data_from_db, list_tables, SUPPORTED_ENGINES

# Page setup
st.set_page_config(page_title="BizIntel AI Ultra", layout="wide")
st.title("📊 BizIntel AI Ultra – Business Intelligence Agent")

TEMP_DIR = tempfile.gettempdir()

# 1.  Data source
input_source = st.radio("Select data source", ["Upload CSV", "Connect to SQL Database"])
csv_path: str | None = None

if input_source == "Upload CSV":
    up_csv = st.file_uploader("Upload CSV", type="csv")
    if up_csv:
        csv_path = os.path.join(TEMP_DIR, up_csv.name)
        with open(csv_path, "wb") as f:
            f.write(up_csv.read())
        st.success("CSV saved ✅")

elif input_source == "Connect to SQL Database":
    engine = st.selectbox("DB engine", SUPPORTED_ENGINES)
    conn = st.text_input("SQLAlchemy connection string")
    if conn:
        tables = list_tables(conn)
        if tables:
            table = st.selectbox("Table", tables)
            if table:
                csv_path = fetch_data_from_db(conn, table)
                st.success(f"Fetched **{table}** as CSV ✅")

# 2.  Optional image preview
st.markdown("---")
st.subheader("📷 Optional image upload")

img = st.file_uploader("PNG/JPG", type=["png", "jpg", "jpeg"], key="img")
if img:
    img_path = os.path.join(TEMP_DIR, img.name)
    with open(img_path, "wb") as f:
        f.write(img.read())
    st.image(img_path, caption="Uploaded Image", use_column_width=True)

# 3.  Run analytics pipeline
if csv_path:
    st.markdown("---")
    st.info("Running analytics pipeline… ⏳")

    # Robust call: try invoke() → run() → __call__()
    if hasattr(analytics_coordinator, "invoke"):
        report = analytics_coordinator.invoke(input=csv_path)
    elif hasattr(analytics_coordinator, "run"):
        report = analytics_coordinator.run(input=csv_path)
    else:                         # fallback to callable
        report = analytics_coordinator(csv_path)

    st.subheader("📝 Analysis & Strategy Report")
    st.text(report)

    # Show charts if present
    for name, caption in [("sales_plot.png", "Sales Trend"),
                          ("forecast_plot.png", "Forecast Chart")]:
        p = os.path.join(TEMP_DIR, name)
        if os.path.exists(p):
            st.image(p, caption=caption, use_column_width=True)