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