File size: 2,931 Bytes
a5c06b5
 
 
 
 
 
 
 
 
 
 
7a4d019
 
 
 
a5c06b5
7a4d019
270176f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7a4d019
 
 
 
 
a5c06b5
270176f
 
 
 
 
a5c06b5
 
270176f
a5c06b5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2a624da
a5c06b5
 
 
 
270176f
a5c06b5
 
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
108
109
import gradio as gr
import pandas as pd
from agents.brain import AutoWarehouseAgent

agent = AutoWarehouseAgent()


def df_from_input(df):
    return pd.DataFrame(df) if df else pd.DataFrame()


def run_agent(message, slotting_df, picking_df):
    print("πŸ“₯ INPUT MESSAGE:", message)
    print("πŸ“„ SLOT DATA:", slotting_df)
    print("🚚 PICKING DATA:", picking_df)

    try:
        raw = agent.run(message, slotting_df, picking_df)
        print("βœ… RAW RESULT FROM AGENT:", raw)

        # -----------------------------------------------------
        # πŸ“Œ STANDARDIZE OUTPUT FORMAT
        # -----------------------------------------------------
        if isinstance(raw, str):
            # Agent returned text only β†’ convert to dictionary
            result = {
                "report": raw,
                "route_image": None,
                "slotting_table": pd.DataFrame(),
            }

        elif isinstance(raw, dict):
            # Fill missing pieces
            result = {
                "report": raw.get("report", "No report generated."),
                "route_image": raw.get("route_image", None),
                "slotting_table": raw.get("slotting_table", pd.DataFrame()),
            }

        else:
            # Unexpected return type
            result = {
                "report": "⚠️ Invalid agent output format.",
                "route_image": None,
                "slotting_table": pd.DataFrame(),
            }

        # Return EXACTLY 3 items to match UI outputs
        return (
            result["report"],
            result["route_image"],
            result["slotting_table"],
        )

    except Exception as e:
        import traceback
        print("❌ ERROR OCCURRED:")
        traceback.print_exc()

        return (
            f"### ❌ Error\n{str(e)}",
            None,
            pd.DataFrame(),
        )


def build_ui():
    with gr.Blocks() as demo:

        gr.Markdown(
            "<h1 style='color:#FF6A00;'>Procelevate Autonomous Warehouse Operator</h1>"
        )

        query = gr.Textbox(label="Enter your request")

        gr.Markdown("### Slotting Data")
        slot_df = gr.Dataframe(
            headers=["SKU", "Velocity", "Frequency"],
            value=[
                ["A123", "Fast", 120],
                ["B555", "Medium", 60],
                ["C888", "Slow", 8],
            ],
        )

        gr.Markdown("### Picking Data")
        pick_df = gr.Dataframe(
            headers=["Aisle", "Rack"],
            value=[[5, 14], [3, 10], [12, 7]],
        )

        btn = gr.Button("Run Agent", variant="primary")

        out_report = gr.Markdown()
        out_route = gr.Image()
        out_slot = gr.Dataframe()

        btn.click(
            run_agent,
            inputs=[query, slot_df, pick_df],
            outputs=[out_report, out_route, out_slot],
        )

    return demo


demo = build_ui()
demo.launch()