diff --git a/services/comms/scripts/atlasbot/bot.py b/services/comms/scripts/atlasbot/bot.py index e604e65..ff9019e 100644 --- a/services/comms/scripts/atlasbot/bot.py +++ b/services/comms/scripts/atlasbot/bot.py @@ -188,7 +188,7 @@ def _load_json_file(path: str) -> Any | None: return None def load_kb(): - global KB, _HOST_INDEX, _NAME_INDEX + global KB, _HOST_INDEX, _NAME_INDEX, _METRIC_INDEX global _NODE_CLASS_INDEX, _NODE_CLASS_RPI4, _NODE_CLASS_RPI5, _NODE_CLASS_AMD64, _NODE_CLASS_JETSON global _NODE_CLASS_EXTERNAL, _NODE_CLASS_NON_RPI if not KB_DIR: @@ -414,6 +414,8 @@ def metrics_query_context(prompt: str, *, allow_tools: bool) -> tuple[str, str]: if not matches: return "", "" entry = matches[0] + dashboard = entry.get("dashboard") or "dashboard" + panel = entry.get("panel_title") or "panel" exprs = entry.get("exprs") if isinstance(entry.get("exprs"), list) else [] if not exprs: return "", "" @@ -424,9 +426,7 @@ def metrics_query_context(prompt: str, *, allow_tools: bool) -> tuple[str, str]: if rendered: rendered_parts.append(rendered) if not rendered_parts: - return "", "" - dashboard = entry.get("dashboard") or "dashboard" - panel = entry.get("panel_title") or "panel" + return "", f"{panel}: matched dashboard panel but VictoriaMetrics did not return data." summary = "\n".join(rendered_parts) context = f"Metrics (from {dashboard} / {panel}):\n{summary}" fallback = f"{panel}: {summary}" @@ -998,8 +998,9 @@ def sync_loop(token: str, room_id: str): send_msg(token, rid, names_summary) continue - # Only do live cluster/metrics introspection in DMs. + # Only do live cluster introspection in DMs; metrics can be answered when mentioned. allow_tools = is_dm + allow_metrics = is_dm or mentioned promql = "" if allow_tools: @@ -1024,7 +1025,7 @@ def sync_loop(token: str, room_id: str): rendered = vm_render_result(res, limit=15) or "(no results)" extra = "VictoriaMetrics (PromQL result):\n" + rendered context = (context + "\n\n" + extra).strip() if context else extra - metrics_context, metrics_fallback = metrics_query_context(body, allow_tools=allow_tools) + metrics_context, metrics_fallback = metrics_query_context(body, allow_tools=allow_metrics) if metrics_context: context = (context + "\n\n" + metrics_context).strip() if context else metrics_context