chatbot-rag / src /query_router.py
scythe327's picture
Upload folder using huggingface_hub
55ed2b1 verified
Raw
History Blame Contribute Delete
1.68 kB
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"