atlasbot: improve workload matching and fallbacks
This commit is contained in:
parent
631bd09778
commit
3f159c6c83
@ -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"
|
||||
|
||||
@ -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 ""
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user