Spaces:
Running
Running
| import re | |
| class QueryRouter: | |
| NUMERIC_KEYWORDS = [ | |
| "price", "cost", "fee", "rate", "charge", "discount", | |
| "how much", "how many", "total", "amount", "per", | |
| "each", "minimum", "maximum", "limit", | |
| ] | |
| COMPARISON_KEYWORDS = [ | |
| "compare", "vs", "versus", "better", "worse", "cheaper", | |
| "expensive", "difference", "cheapest", "best", | |
| ] | |
| RANGE_KEYWORDS = [ | |
| "range", "between", "from.*to", "up to", "over", | |
| "at least", "at most", "minimum", "maximum", | |
| ] | |
| CALCULATION_KEYWORDS = [ | |
| "calculate", "compute", "what is the total", | |
| "sum", "multiply", "divide", "add", "subtract", | |
| ] | |
| POLICY_KEYWORDS = [ | |
| "policy", "rule", "regulation", "terms", "condition", | |
| "eligibility", "requirement", "allowed", | |
| ] | |
| SUMMARY_KEYWORDS = [ | |
| "summarize", "summary", "overview", "tell me about", | |
| "what is", "describe", | |
| ] | |
| def route(self, query: str) -> str: | |
| query_lower = query.lower().strip() | |
| if any(kw in query_lower for kw in self.CALCULATION_KEYWORDS): | |
| return "calculation" | |
| if any(kw in query_lower for kw in self.COMPARISON_KEYWORDS): | |
| return "comparison" | |
| if any(kw in query_lower for kw in self.RANGE_KEYWORDS): | |
| return "range" | |
| if any(re.search(r"\d+", query_lower) for _ in [1]) and any(kw in query_lower for kw in self.NUMERIC_KEYWORDS): | |
| return "numeric" | |
| if any(kw in query_lower for kw in self.POLICY_KEYWORDS): | |
| return "policy" | |
| if any(kw in query_lower for kw in self.SUMMARY_KEYWORDS): | |
| return "summary" | |
| return "general" | |