File size: 5,575 Bytes
8ed7829
5f0b7f9
 
 
 
 
8ed7829
c0a4e63
8ed7829
5f0b7f9
055c98e
 
 
 
 
 
5f0b7f9
055c98e
 
5f0b7f9
055c98e
5f0b7f9
 
 
 
 
055c98e
8ed7829
5f0b7f9
8ed7829
5f0b7f9
 
8ed7829
5f0b7f9
 
 
 
 
 
 
 
 
 
 
6086ed3
 
 
5f0b7f9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
df5a49e
 
 
5f0b7f9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6086ed3
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
# run_agentic_pipeline.py
"""
This module is responsible for loading and displaying pre-computed AI analysis
results (reports and OKRs) that have been fetched from Bubble.io. It does not
perform any new analysis.
"""
import logging
import gradio as gr

# UI formatting and data reconstruction functions are still needed
try:
    from ui.insights_ui_generator import (
        format_report_to_markdown,
        extract_key_results_for_selection,
        format_single_okr_for_display
    )
    from services.report_data_handler import fetch_and_reconstruct_data_from_bubble
    AGENTIC_MODULES_LOADED = True
except ImportError as e:
    logging.error(f"Could not import agentic pipeline display modules: {e}. Tabs 3 and 4 will be disabled.")
    AGENTIC_MODULES_LOADED = False
    # Define placeholder functions if imports fail
    def format_report_to_markdown(report_string): return "Agentic modules not loaded. Report unavailable."
    def extract_key_results_for_selection(okrs_dict): return []
    def format_single_okr_for_display(okr_data, **kwargs): return "Agentic modules not loaded. OKR display unavailable."
    def fetch_and_reconstruct_data_from_bubble(df): return None


def load_and_display_agentic_results(current_token_state, orchestration_raw_results_st, selected_key_result_ids_st, key_results_for_selection_st):
    """
    Loads pre-computed agentic analysis and OKR data from the application state
    (which was fetched from Bubble) and formats it for display in the Gradio UI.
    """
    logging.info("Loading and displaying pre-computed agentic results from state.")

    # A tuple of Gradio updates to return in case of errors or no data
    initial_yield_updates = (
        gr.update(value="Nessun dato di analisi trovato..."),             # agentic_report_display_md
        gr.update(choices=[], value=[], interactive=False),          # key_results_cbg
        gr.update(value="Nessun OKR trovato..."),                      # okr_detail_display_md
        None,                                                         # orchestration_raw_results_st
        [],                                                           # selected_key_result_ids_st
        [],                                                           # key_results_for_selection_st
        "Stato: In attesa di dati"                                    # agentic_pipeline_status_md
    )

    if not AGENTIC_MODULES_LOADED:
        logging.warning("Agentic display modules not loaded. Cannot display results.")
        error_updates = list(initial_yield_updates)
        error_updates[-1] = "Errore: Moduli AI non caricati."
        return tuple(error_updates)

    # The raw DataFrame fetched from Bubble's agentic analysis table
    agentic_data_df = current_token_state.get('bubble_agentic_analysis_data')

    if agentic_data_df is None or agentic_data_df.empty:
        logging.warning("No agentic analysis data found in the application state.")
        return initial_yield_updates

    # Use the handler to reconstruct the report and OKRs from the DataFrame
    reconstructed_data = fetch_and_reconstruct_data_from_bubble(agentic_data_df)

    if not reconstructed_data:
        logging.warning("Could not reconstruct agentic data from the fetched DataFrame.")
        error_updates = list(initial_yield_updates)
        error_updates[0] = gr.update(value="I dati di analisi esistenti non sono nel formato corretto.")
        error_updates[2] = gr.update(value="Impossibile visualizzare gli OKR.")
        error_updates[-1] = "Stato: Errore formato dati"
        return tuple(error_updates)

    # --- Prepare UI updates with the reconstructed data ---
    report_str = reconstructed_data.get('report_str', "Nessun report di analisi trovato nei dati.")
    actionable_okrs = reconstructed_data.get('actionable_okrs') # This is the dict with 'okrs' list

    # 1. Update Report Tab
    agentic_report_md_update = gr.update(value=format_report_to_markdown(report_str))

    # 2. Update OKR Tab components
    if actionable_okrs and isinstance(actionable_okrs.get("okrs"), list):
        krs_for_ui_selection_list = extract_key_results_for_selection(actionable_okrs)
        kr_choices_for_cbg = [(kr['kr_description'], kr['unique_kr_id']) for kr in krs_for_ui_selection_list]
        key_results_cbg_update = gr.update(choices=kr_choices_for_cbg, value=[], interactive=True)
        krs_for_selection_state_update = krs_for_ui_selection_list

        all_okrs_md_parts = [
            format_single_okr_for_display(okr_item, accepted_kr_indices=None, okr_main_index=okr_idx)
            for okr_idx, okr_item in enumerate(actionable_okrs["okrs"])
        ]
        okr_detail_display_md_update = gr.update(value="\n\n---\n\n".join(all_okrs_md_parts))
    else:
        # Handle case where there are no OKRs in the data
        krs_for_selection_state_update = []
        key_results_cbg_update = gr.update(choices=[], value=[], interactive=False)
        okr_detail_display_md_update = gr.update(value="Nessun OKR trovato nei dati di analisi caricati.")

    # Return all the final updates for the Gradio interface
    return (
        agentic_report_md_update,
        key_results_cbg_update,
        okr_detail_display_md_update,
        reconstructed_data,          # Store the full reconstructed data dict in the state
        [],                          # Reset the selected KR IDs state
        krs_for_selection_state_update, # Update the state with all available KRs
        "Stato: Dati di analisi caricati correttamente da Bubble" # Final status message
    )