Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -1,4 +1,3 @@
|
|
| 1 |
-
# app.py
|
| 2 |
import gradio as gr
|
| 3 |
import pandas as pd
|
| 4 |
import os
|
|
@@ -36,7 +35,8 @@ from features.chatbot.chatbot_handler import generate_llm_response
|
|
| 36 |
try:
|
| 37 |
# UPDATED: Using the new display function to show pre-computed results
|
| 38 |
from run_agentic_pipeline import load_and_display_agentic_results
|
| 39 |
-
|
|
|
|
| 40 |
AGENTIC_MODULES_LOADED = True
|
| 41 |
except ImportError as e:
|
| 42 |
logging.error(f"Could not import agentic pipeline display modules: {e}. Tabs 3 and 4 will be disabled.")
|
|
@@ -44,9 +44,11 @@ except ImportError as e:
|
|
| 44 |
# Placeholder for the new function name if imports fail
|
| 45 |
def load_and_display_agentic_results(*args, **kwargs):
|
| 46 |
# This tuple matches the expected number of outputs for the event handler
|
| 47 |
-
return "Modules not loaded.", "Modules not loaded.", "Modules not loaded.", None, [], [], "Error"
|
| 48 |
def format_single_okr_for_display(okr_data, **kwargs):
|
| 49 |
return "Agentic modules not loaded. OKR display unavailable."
|
|
|
|
|
|
|
| 50 |
|
| 51 |
# --- ANALYTICS TAB MODULE IMPORT ---
|
| 52 |
from services.analytics_tab_module import AnalyticsTab
|
|
@@ -122,6 +124,30 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue", secondary_hue="sky"),
|
|
| 122 |
fn_get_initial_insight=get_initial_insight_prompt_and_suggestions,
|
| 123 |
fn_generate_llm_response=generate_llm_response
|
| 124 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 125 |
|
| 126 |
with gr.Tabs() as tabs:
|
| 127 |
with gr.TabItem("1️⃣ Dashboard", id="tab_dashboard"):
|
|
@@ -132,12 +158,24 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue", secondary_hue="sky"),
|
|
| 132 |
# Use the AnalyticsTab module to create Tab 2
|
| 133 |
analytics_tab_instance.create_tab_ui()
|
| 134 |
|
| 135 |
-
# Tab 3: Agentic Analysis Report
|
| 136 |
with gr.TabItem("3️⃣ Agentic Analysis Report", id="tab_agentic_report", visible=AGENTIC_MODULES_LOADED):
|
| 137 |
gr.Markdown("## 🤖 Comprehensive Analysis Report (from Bubble.io)")
|
| 138 |
agentic_pipeline_status_md = gr.Markdown("Status: Loading report data...", visible=True)
|
| 139 |
-
gr.Markdown("Questo report è stato pre-generato da un agente AI e caricato da Bubble.io.")
|
| 140 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 141 |
if not AGENTIC_MODULES_LOADED:
|
| 142 |
gr.Markdown("🔴 **Error:** Agentic pipeline display modules could not be loaded. This tab is disabled.")
|
| 143 |
|
|
@@ -192,11 +230,22 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue", secondary_hue="sky"),
|
|
| 192 |
inputs=[key_results_cbg, orchestration_raw_results_st, key_results_for_selection_st],
|
| 193 |
outputs=[okr_detail_display_md]
|
| 194 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 195 |
|
| 196 |
# --- EVENT HANDLING (SIMPLIFIED) ---
|
| 197 |
-
# Define the output list for loading agentic results
|
| 198 |
agentic_display_outputs = [
|
| 199 |
agentic_report_display_md,
|
|
|
|
| 200 |
key_results_cbg,
|
| 201 |
okr_detail_display_md,
|
| 202 |
orchestration_raw_results_st,
|
|
@@ -227,9 +276,9 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue", secondary_hue="sky"),
|
|
| 227 |
show_progress="full"
|
| 228 |
# Then, load and display the pre-computed agentic results
|
| 229 |
).then(
|
| 230 |
-
fn=load_and_display_agentic_results, #
|
| 231 |
inputs=[token_state, orchestration_raw_results_st, selected_key_result_ids_st, key_results_for_selection_st],
|
| 232 |
-
outputs=agentic_display_outputs,
|
| 233 |
show_progress="minimal"
|
| 234 |
)
|
| 235 |
|
|
|
|
|
|
|
| 1 |
import gradio as gr
|
| 2 |
import pandas as pd
|
| 3 |
import os
|
|
|
|
| 35 |
try:
|
| 36 |
# UPDATED: Using the new display function to show pre-computed results
|
| 37 |
from run_agentic_pipeline import load_and_display_agentic_results
|
| 38 |
+
# ADDED: Import the new report formatter
|
| 39 |
+
from ui.insights_ui_generator import format_single_okr_for_display, format_report_for_display
|
| 40 |
AGENTIC_MODULES_LOADED = True
|
| 41 |
except ImportError as e:
|
| 42 |
logging.error(f"Could not import agentic pipeline display modules: {e}. Tabs 3 and 4 will be disabled.")
|
|
|
|
| 44 |
# Placeholder for the new function name if imports fail
|
| 45 |
def load_and_display_agentic_results(*args, **kwargs):
|
| 46 |
# This tuple matches the expected number of outputs for the event handler
|
| 47 |
+
return "Modules not loaded.", gr.update(), "Modules not loaded.", "Modules not loaded.", None, [], [], "Error"
|
| 48 |
def format_single_okr_for_display(okr_data, **kwargs):
|
| 49 |
return "Agentic modules not loaded. OKR display unavailable."
|
| 50 |
+
def format_report_for_display(report_data):
|
| 51 |
+
return "Agentic modules not loaded. Report display unavailable."
|
| 52 |
|
| 53 |
# --- ANALYTICS TAB MODULE IMPORT ---
|
| 54 |
from services.analytics_tab_module import AnalyticsTab
|
|
|
|
| 124 |
fn_get_initial_insight=get_initial_insight_prompt_and_suggestions,
|
| 125 |
fn_generate_llm_response=generate_llm_response
|
| 126 |
)
|
| 127 |
+
|
| 128 |
+
# --- NEW: Handler function for report selection ---
|
| 129 |
+
def display_selected_report(selected_report_id: str, current_token_state: dict):
|
| 130 |
+
"""
|
| 131 |
+
Finds the selected report in the state and formats it for display.
|
| 132 |
+
"""
|
| 133 |
+
if not selected_report_id:
|
| 134 |
+
return gr.update(value="*Please select a report from the library.*")
|
| 135 |
+
|
| 136 |
+
agentic_df = current_token_state.get("bubble_agentic_analysis_data")
|
| 137 |
+
if agentic_df is None or agentic_df.empty:
|
| 138 |
+
return gr.update(value="*Report data not loaded. Cannot display report.*")
|
| 139 |
+
|
| 140 |
+
# The dropdown value is the unique ID of the report (e.g., Bubble _id)
|
| 141 |
+
selected_report_series_df = agentic_df[agentic_df['_id'] == selected_report_id]
|
| 142 |
+
|
| 143 |
+
if selected_report_series_df.empty:
|
| 144 |
+
return gr.update(value=f"*Error: Could not find report with ID {selected_report_id}.*")
|
| 145 |
+
|
| 146 |
+
selected_report_series = selected_report_series_df.iloc[0]
|
| 147 |
+
report_markdown = format_report_for_display(selected_report_series)
|
| 148 |
+
|
| 149 |
+
return gr.update(value=report_markdown)
|
| 150 |
+
|
| 151 |
|
| 152 |
with gr.Tabs() as tabs:
|
| 153 |
with gr.TabItem("1️⃣ Dashboard", id="tab_dashboard"):
|
|
|
|
| 158 |
# Use the AnalyticsTab module to create Tab 2
|
| 159 |
analytics_tab_instance.create_tab_ui()
|
| 160 |
|
| 161 |
+
# Tab 3: Agentic Analysis Report - MODIFIED
|
| 162 |
with gr.TabItem("3️⃣ Agentic Analysis Report", id="tab_agentic_report", visible=AGENTIC_MODULES_LOADED):
|
| 163 |
gr.Markdown("## 🤖 Comprehensive Analysis Report (from Bubble.io)")
|
| 164 |
agentic_pipeline_status_md = gr.Markdown("Status: Loading report data...", visible=True)
|
| 165 |
+
gr.Markdown("Questo report è stato pre-generato da un agente AI e caricato da Bubble.io. Seleziona un report dalla libreria per visualizzarlo.")
|
| 166 |
+
|
| 167 |
+
# NEW: Report library dropdown
|
| 168 |
+
with gr.Row():
|
| 169 |
+
report_selector_dd = gr.Dropdown(
|
| 170 |
+
label="Report Library",
|
| 171 |
+
choices=[],
|
| 172 |
+
interactive=True,
|
| 173 |
+
info="Select a previously generated report to view its details."
|
| 174 |
+
)
|
| 175 |
+
|
| 176 |
+
# This Markdown component will now display the selected report
|
| 177 |
+
agentic_report_display_md = gr.Markdown("Please select a report from the library to view it.")
|
| 178 |
+
|
| 179 |
if not AGENTIC_MODULES_LOADED:
|
| 180 |
gr.Markdown("🔴 **Error:** Agentic pipeline display modules could not be loaded. This tab is disabled.")
|
| 181 |
|
|
|
|
| 230 |
inputs=[key_results_cbg, orchestration_raw_results_st, key_results_for_selection_st],
|
| 231 |
outputs=[okr_detail_display_md]
|
| 232 |
)
|
| 233 |
+
|
| 234 |
+
# --- NEW: Event binding for the report selector dropdown ---
|
| 235 |
+
if AGENTIC_MODULES_LOADED:
|
| 236 |
+
report_selector_dd.change(
|
| 237 |
+
fn=display_selected_report,
|
| 238 |
+
inputs=[report_selector_dd, token_state],
|
| 239 |
+
outputs=[agentic_report_display_md],
|
| 240 |
+
show_progress="minimal"
|
| 241 |
+
)
|
| 242 |
+
|
| 243 |
|
| 244 |
# --- EVENT HANDLING (SIMPLIFIED) ---
|
| 245 |
+
# MODIFIED: Define the output list for loading agentic results
|
| 246 |
agentic_display_outputs = [
|
| 247 |
agentic_report_display_md,
|
| 248 |
+
report_selector_dd, # ADDED: The new dropdown
|
| 249 |
key_results_cbg,
|
| 250 |
okr_detail_display_md,
|
| 251 |
orchestration_raw_results_st,
|
|
|
|
| 276 |
show_progress="full"
|
| 277 |
# Then, load and display the pre-computed agentic results
|
| 278 |
).then(
|
| 279 |
+
fn=load_and_display_agentic_results, # This function's implementation needs to be updated
|
| 280 |
inputs=[token_state, orchestration_raw_results_st, selected_key_result_ids_st, key_results_for_selection_st],
|
| 281 |
+
outputs=agentic_display_outputs, # The output list is now updated
|
| 282 |
show_progress="minimal"
|
| 283 |
)
|
| 284 |
|