atlasbot: fix bottom ops and pod queries

This commit is contained in:
Brad Stein 2026-01-27 23:24:12 -03:00
parent c5a7eece35
commit f43acaa554

View File

@ -163,6 +163,8 @@ CLUSTER_HINT_WORDS = {
"documentation",
"docs",
"playbook",
"utilization",
"usage",
"grafana",
"victoria",
"prometheus",
@ -561,8 +563,10 @@ def _has_any(text: str, phrases: tuple[str, ...]) -> bool:
def _detect_operation(q: str) -> str | None:
if _has_any(q, OPERATION_HINTS["top"]):
return "top"
if _has_any(q, OPERATION_HINTS["bottom"]):
return "bottom"
for op, phrases in OPERATION_HINTS.items():
if op == "top":
if op in ("top", "bottom"):
continue
if _has_any(q, phrases):
return op
@ -1353,6 +1357,11 @@ def snapshot_metric_answer(
failed = metrics.get("pods_failed")
succeeded = metrics.get("pods_succeeded")
status_terms = ("running", "pending", "failed", "succeeded", "completed")
if ("most pods" in q or ("most" in q and "pod" in q and "node" in q)) and not nodes_in_query:
return _format_confidence(
"I don't have per-node pod counts in the snapshot.",
"medium",
)
if "total" in q or "sum" in q:
values = [v for v in (running, pending, failed, succeeded) if isinstance(v, (int, float))]
if values:
@ -1363,13 +1372,13 @@ def snapshot_metric_answer(
return _format_confidence(f"Pods not running: {sum(parts):.0f}.", "high")
if sum(1 for term in status_terms if term in q) > 1:
parts = []
if running is not None:
if "running" in q and running is not None:
parts.append(f"running {running:.0f}")
if pending is not None:
if "pending" in q and pending is not None:
parts.append(f"pending {pending:.0f}")
if failed is not None:
if "failed" in q and failed is not None:
parts.append(f"failed {failed:.0f}")
if succeeded is not None:
if ("succeeded" in q or "completed" in q) and succeeded is not None:
parts.append(f"succeeded {succeeded:.0f}")
if parts:
return _format_confidence(f"Pods: {', '.join(parts)}.", "high")
@ -1461,7 +1470,12 @@ def structured_answer(
if hw_line:
return _format_confidence(hw_line, "high")
if entity == "node" and op == "status" and metric is None:
if (
entity == "node"
and op == "status"
and metric is None
and not (include_hw or exclude_hw or nodes_in_query or only_workers or role_filters)
):
summary = _nodes_summary_line(inventory, snapshot)
if summary:
return _format_confidence(summary, "high")