Spaces:
Running
Running
File size: 2,341 Bytes
9eecab5 | 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 | from utils.logger import logger
class QueryRouter:
"""
Rule-based fallback router.
Order matters: transformer action words are checked first so that queries
like 'drop column X' or 'impute missing' don't get swallowed by the
metadata keyword list.
"""
# Transformer keywords take top priority β they are explicit action verbs.
TRANSFORMER_KEYWORDS = [
"normalize",
"standardize",
"zscore",
"z-score",
"scale",
"encode",
"onehot",
"one-hot",
"one hot",
"dummies",
"drop",
"fill",
"impute",
"rename",
"strip",
"duplicate",
"constant",
"whitespace",
"dropna",
]
# Metadata keywords β structural / schema queries.
METADATA_KEYWORDS = [
"column",
"numeric",
"categorical",
"missing",
"schema",
"fields",
"field",
]
# DataFrame / statistics keywords.
DATAFRAME_KEYWORDS = [
"average",
"mean",
"median",
"max",
"min",
"top",
"count",
"rows",
"sum",
"highest",
"lowest",
]
# Visualisation keywords.
VISUAL_KEYWORDS = [
"plot",
"graph",
"scatter",
"hist",
"bar",
"chart",
"histogram",
"distribution",
]
def route(self, query):
q = query.lower()
if any(word in q for word in self.TRANSFORMER_KEYWORDS):
logger.info("Routing β transformer_agent")
return "transformer_agent"
if any(word in q for word in self.METADATA_KEYWORDS):
logger.info("Routing β metadata_agent")
return "metadata_agent"
if any(word in q for word in self.DATAFRAME_KEYWORDS):
logger.info("Routing β dataframe_agent")
return "dataframe_agent"
if any(word in q for word in self.VISUAL_KEYWORDS):
logger.info("Routing β visualization_agent")
return "visualization_agent"
if "analyze" in query or "analysis" in query or "analyse" in query:
return "analysis_agent"
logger.warning(f"No route matched for query: {query}")
return "unknown command"
|