MBG0903's picture
Update agents/brain.py
0c9726f verified
from agents.planner import detect_intent
from agents.reasoner import (
run_slotting_analysis,
run_picking_optimization,
run_demand_forecast,
run_replenishment_analysis,
run_rebalancing_analysis,
run_workforce_optimization,
run_dock_scheduling
)
import pandas as pd
class AutoWarehouseAgent:
def run(self, message, slotting_df, picking_df):
"""
Central warehouse AI engine.
Returns a structured dictionary:
{
"report": markdown text,
"route_image": image or None,
"slotting_table": dataframe or empty df
}
"""
task = detect_intent(message.lower().strip())
# Debug logs
print(f"🧠 DETECTED TASK: {task}")
print("📦 Slotting DF:", slotting_df)
print("🚚 Picking DF:", picking_df)
# ------------------------------------------------------
# 1️⃣ SLOTING OPTIMIZATION
# ------------------------------------------------------
if task == "slotting":
explanation, slot_plan = run_slotting_analysis(message, slotting_df)
return {
"report": explanation,
"route_image": None,
"slotting_table": slot_plan
}
# ------------------------------------------------------
# 2️⃣ PICKING ROUTE OPTIMIZATION
# ------------------------------------------------------
if task == "picking":
explanation, route_img = run_picking_optimization(message, picking_df)
return {
"report": explanation,
"route_image": route_img,
"slotting_table": pd.DataFrame()
}
# ------------------------------------------------------
# 3️⃣ FULL REPORT — Slotting + Picking
# ------------------------------------------------------
if task == "report":
exp1, slot_plan = run_slotting_analysis(message, slotting_df)
exp2, route_img = run_picking_optimization(message, picking_df)
combined_report = (
"### 🧾 Full Warehouse Intelligence Report\n\n"
"#### 📦 Slotting Optimization\n" + exp1 +
"\n\n---\n\n"
"#### 🚚 Picking Optimization\n" + exp2
)
return {
"report": combined_report,
"route_image": route_img,
"slotting_table": slot_plan
}
# ------------------------------------------------------
# 4️⃣ DEMAND FORECASTING
# ------------------------------------------------------
if task == "forecast":
explanation, forecast_plot, forecast_table = run_demand_forecast(message, slotting_df)
return {
"report": explanation,
"route_image": forecast_plot,
"slotting_table": forecast_table
}
# ------------------------------------------------------
# 5️⃣ REPLENISHMENT ANALYSIS
# ------------------------------------------------------
if task == "replenishment":
explanation, repl_table = run_replenishment_analysis(message, slotting_df)
return {
"report": explanation,
"route_image": None,
"slotting_table": repl_table
}
# ------------------------------------------------------
# 6️⃣ INVENTORY REBALANCING
# ------------------------------------------------------
if task == "rebalancing":
explanation, move_table = run_rebalancing_analysis(message, slotting_df)
return {
"report": explanation,
"route_image": None,
"slotting_table": move_table
}
# ------------------------------------------------------
# 7️⃣ WORKFORCE OPTIMIZATION
# ------------------------------------------------------
if task == "workforce":
explanation, workforce_table = run_workforce_optimization(message, slotting_df)
return {
"report": explanation,
"route_image": None,
"slotting_table": workforce_table
}
# ------------------------------------------------------
# 8️⃣ DOCK SCHEDULING OPTIMIZATION
# ------------------------------------------------------
if task == "dock":
explanation, dock_table = run_dock_scheduling(message, slotting_df)
return {
"report": explanation,
"route_image": None,
"slotting_table": dock_table
}
# ------------------------------------------------------
# ❌ FALLBACK HANDLER
# ------------------------------------------------------
return {
"report": (
"### ❓ Unable to Understand Your Request\n"
"Please try queries related to:\n"
"- Slotting optimization\n"
"- Picking optimization\n"
"- Forecasting\n"
"- Replenishment\n"
"- Inventory rebalancing\n"
"- Workforce planning\n"
"- Dock scheduling\n"
"- Full warehouse report\n"
),
"route_image": None,
"slotting_table": pd.DataFrame()
}