atlasbot: improve workload matching and fallbacks

This commit is contained in:
Brad Stein 2026-01-27 15:42:31 -03:00
parent 631bd09778
commit 3f159c6c83
2 changed files with 21 additions and 1 deletions

View File

@ -16,7 +16,7 @@ spec:
labels: labels:
app: atlasbot app: atlasbot
annotations: annotations:
checksum/atlasbot-configmap: manual-atlasbot-49 checksum/atlasbot-configmap: manual-atlasbot-50
vault.hashicorp.com/agent-inject: "true" vault.hashicorp.com/agent-inject: "true"
vault.hashicorp.com/role: "comms" vault.hashicorp.com/role: "comms"
vault.hashicorp.com/agent-inject-secret-turn-secret: "kv/data/atlas/comms/turn-shared-secret" vault.hashicorp.com/agent-inject-secret-turn-secret: "kv/data/atlas/comms/turn-shared-secret"

View File

@ -1031,6 +1031,12 @@ def _workload_tokens(entry: dict[str, Any]) -> set[str]:
return tokens 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: def _select_workload(prompt: str, workloads: list[dict[str, Any]]) -> dict[str, Any] | None:
q_tokens = set(_tokens(prompt)) q_tokens = set(_tokens(prompt))
if not q_tokens: if not q_tokens:
@ -1041,6 +1047,12 @@ def _select_workload(prompt: str, workloads: list[dict[str, Any]]) -> dict[str,
continue continue
tokens = _workload_tokens(entry) tokens = _workload_tokens(entry)
score = len(tokens & q_tokens) 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: if score:
scored.append((score, entry)) scored.append((score, entry))
if not scored: if not scored:
@ -1574,6 +1586,14 @@ def cluster_answer(
if structured: if structured:
return 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) overview = cluster_overview_answer(prompt, inventory=inventory, snapshot=snapshot)
if overview: if overview:
kb_titles = kb_retrieve_titles(prompt, limit=4) if _knowledge_intent(prompt) else "" kb_titles = kb_retrieve_titles(prompt, limit=4) if _knowledge_intent(prompt) else ""