Spaces:
Sleeping
Sleeping
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)
|