""" Router — maps a validated intent dict to the correct tool function. Pure dict lookup, zero overhead. Each tool function has the signature: tool(session_id: str, intent: dict) -> dict and returns {"message": str, "diff": dict}. """ from __future__ import annotations from typing import Callable, Optional # Import all tools — they register themselves via TOOL_REGISTRY below from core.a_to_z.student.update import execute_increase, execute_decrease from core.a_to_z.student.filter_tool import execute_filter from core.a_to_z.student.sort_tool import execute_sort from core.a_to_z.student.aggregate import execute_sum, execute_average, execute_count, execute_min, execute_max from core.a_to_z.student.column_ops import execute_delete_column, execute_rename_column, execute_add_column, execute_cast_type from core.a_to_z.business.find_replace import execute_find_replace from core.a_to_z.business.dedup import execute_remove_duplicates TOOL_MAP: dict[str, Callable[[str, dict], dict]] = { # Update "increase": execute_increase, "decrease": execute_decrease, # Filter & Sort "filter": execute_filter, "sort_asc": execute_sort, "sort_desc": execute_sort, # Aggregate "sum": execute_sum, "average": execute_average, "count": execute_count, "min": execute_min, "max": execute_max, # Column operations "delete_column": execute_delete_column, "rename_column": execute_rename_column, "add_column": execute_add_column, "cast_type": execute_cast_type, # Data cleaning "find_replace": execute_find_replace, "remove_duplicates": execute_remove_duplicates, } def dispatch(session_id: str, intent: dict) -> dict: """Route intent to the matching tool. Returns tool's result dict.""" op = intent["operation"] tool_fn = TOOL_MAP.get(op) if tool_fn is None: return { "message": f"'{op}' operation supported nahi hai", "diff": {}, } return tool_fn(session_id, intent)