Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -5,27 +5,27 @@ from agents.analytics_pipeline import analytics_coordinator
|
|
5 |
from db_connector import fetch_data_from_db, list_tables, SUPPORTED_ENGINES
|
6 |
|
7 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
8 |
-
#
|
9 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
10 |
st.set_page_config(page_title="BizIntel AI Ultra", layout="wide")
|
11 |
st.title("π BizIntel AI UltraΒ β Business Intelligence Agent")
|
12 |
|
13 |
-
#
|
14 |
TEMP_DIR = tempfile.gettempdir()
|
15 |
|
16 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
17 |
-
#
|
18 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
19 |
input_source = st.radio("Select data source", ["Upload CSV", "Connect to SQL Database"])
|
20 |
csv_path: str | None = None
|
21 |
|
22 |
if input_source == "Upload CSV":
|
23 |
-
|
24 |
-
if
|
25 |
-
csv_path = os.path.join(TEMP_DIR,
|
26 |
with open(csv_path, "wb") as f:
|
27 |
-
f.write(
|
28 |
-
st.success("CSV
|
29 |
|
30 |
elif input_source == "Connect to SQL Database":
|
31 |
engine = st.selectbox("Database engine", SUPPORTED_ENGINES)
|
@@ -39,7 +39,7 @@ elif input_source == "Connect to SQL Database":
|
|
39 |
st.success(f"Fetched **{table_name}** as CSV β
")
|
40 |
|
41 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
42 |
-
#
|
43 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
44 |
st.markdown("---")
|
45 |
st.subheader("π· Optional: Upload an Image for Preview / Future Analysis")
|
@@ -53,21 +53,22 @@ if img_file:
|
|
53 |
with open(img_path, "wb") as f:
|
54 |
f.write(img_file.read())
|
55 |
st.image(img_path, caption="Uploaded Image", use_column_width=True)
|
56 |
-
# π
|
57 |
|
58 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
59 |
-
#
|
60 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
61 |
if csv_path:
|
62 |
st.markdown("---")
|
63 |
st.info("Running analytics pipelineβ¦ β³")
|
64 |
|
65 |
-
|
|
|
66 |
|
67 |
st.subheader("π Analysis & Strategy Report")
|
68 |
st.text(report)
|
69 |
|
70 |
-
#
|
71 |
for plot_name, caption in [
|
72 |
("sales_plot.png", "Sales Trend"),
|
73 |
("forecast_plot.png", "Forecast Chart"),
|
|
|
5 |
from db_connector import fetch_data_from_db, list_tables, SUPPORTED_ENGINES
|
6 |
|
7 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
8 |
+
# PAGE CONFIG
|
9 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
10 |
st.set_page_config(page_title="BizIntel AI Ultra", layout="wide")
|
11 |
st.title("π BizIntel AI UltraΒ β Business Intelligence Agent")
|
12 |
|
13 |
+
# Writable directory inside HuggingΒ Face container
|
14 |
TEMP_DIR = tempfile.gettempdir()
|
15 |
|
16 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
17 |
+
# 1. DATA SOURCE SELECTION (CSV or DB)
|
18 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
19 |
input_source = st.radio("Select data source", ["Upload CSV", "Connect to SQL Database"])
|
20 |
csv_path: str | None = None
|
21 |
|
22 |
if input_source == "Upload CSV":
|
23 |
+
uploaded_csv = st.file_uploader("Upload CSV", type="csv")
|
24 |
+
if uploaded_csv:
|
25 |
+
csv_path = os.path.join(TEMP_DIR, uploaded_csv.name)
|
26 |
with open(csv_path, "wb") as f:
|
27 |
+
f.write(uploaded_csv.read())
|
28 |
+
st.success("CSV saved to temporary storage β
")
|
29 |
|
30 |
elif input_source == "Connect to SQL Database":
|
31 |
engine = st.selectbox("Database engine", SUPPORTED_ENGINES)
|
|
|
39 |
st.success(f"Fetched **{table_name}** as CSV β
")
|
40 |
|
41 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
42 |
+
# 2. OPTIONAL IMAGE UPLOAD & PREVIEW
|
43 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
44 |
st.markdown("---")
|
45 |
st.subheader("π· Optional: Upload an Image for Preview / Future Analysis")
|
|
|
53 |
with open(img_path, "wb") as f:
|
54 |
f.write(img_file.read())
|
55 |
st.image(img_path, caption="Uploaded Image", use_column_width=True)
|
56 |
+
# πΒ To analyse with a vision agent later, call it here with `img_path`.
|
57 |
|
58 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
59 |
+
# 3. RUN ANALYTICS PIPELINE
|
60 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
61 |
if csv_path:
|
62 |
st.markdown("---")
|
63 |
st.info("Running analytics pipelineβ¦ β³")
|
64 |
|
65 |
+
# Google ADK agents now use .invoke() (sync) instead of .run()
|
66 |
+
report = analytics_coordinator.invoke(input=csv_path)
|
67 |
|
68 |
st.subheader("π Analysis & Strategy Report")
|
69 |
st.text(report)
|
70 |
|
71 |
+
# Display charts saved by tool functions (if any)
|
72 |
for plot_name, caption in [
|
73 |
("sales_plot.png", "Sales Trend"),
|
74 |
("forecast_plot.png", "Forecast Chart"),
|