From 3f159c6c83ed33bfad49a415fe92904a48144350 Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Tue, 27 Jan 2026 15:42:31 -0300 Subject: [PATCH] atlasbot: improve workload matching and fallbacks --- services/comms/atlasbot-deployment.yaml | 2 +- services/comms/scripts/atlasbot/bot.py | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/services/comms/atlasbot-deployment.yaml b/services/comms/atlasbot-deployment.yaml index 0685626..bccf752 100644 --- a/services/comms/atlasbot-deployment.yaml +++ b/services/comms/atlasbot-deployment.yaml @@ -16,7 +16,7 @@ spec: labels: app: atlasbot annotations: - checksum/atlasbot-configmap: manual-atlasbot-49 + checksum/atlasbot-configmap: manual-atlasbot-50 vault.hashicorp.com/agent-inject: "true" vault.hashicorp.com/role: "comms" vault.hashicorp.com/agent-inject-secret-turn-secret: "kv/data/atlas/comms/turn-shared-secret" diff --git a/services/comms/scripts/atlasbot/bot.py b/services/comms/scripts/atlasbot/bot.py index e936b95..34e27cf 100644 --- a/services/comms/scripts/atlasbot/bot.py +++ b/services/comms/scripts/atlasbot/bot.py @@ -1031,6 +1031,12 @@ def _workload_tokens(entry: dict[str, Any]) -> set[str]: return tokens +def _workload_query_target(prompt: str) -> str: + tokens = set(_tokens(prompt)) + matches = sorted(tokens & _NAME_INDEX) if _NAME_INDEX else [] + return matches[0] if matches else "" + + def _select_workload(prompt: str, workloads: list[dict[str, Any]]) -> dict[str, Any] | None: q_tokens = set(_tokens(prompt)) if not q_tokens: @@ -1041,6 +1047,12 @@ def _select_workload(prompt: str, workloads: list[dict[str, Any]]) -> dict[str, continue tokens = _workload_tokens(entry) score = len(tokens & q_tokens) + name = (entry.get("workload") or "").lower() + namespace = (entry.get("namespace") or "").lower() + if name and name in q_tokens: + score += 5 + if namespace and namespace in q_tokens: + score += 3 if score: scored.append((score, entry)) if not scored: @@ -1574,6 +1586,14 @@ def cluster_answer( if structured: return structured + q = normalize_query(prompt) + workload_target = _workload_query_target(prompt) + if workload_target and any(word in q for word in ("where", "run", "running", "host", "node")): + return _format_confidence( + f"I don't have workload placement data for {workload_target} in the current snapshot.", + "low", + ) + overview = cluster_overview_answer(prompt, inventory=inventory, snapshot=snapshot) if overview: kb_titles = kb_retrieve_titles(prompt, limit=4) if _knowledge_intent(prompt) else ""