diff --git a/atlasbot/engine/answerer.py b/atlasbot/engine/answerer.py index 9820dfe..18386ea 100644 --- a/atlasbot/engine/answerer.py +++ b/atlasbot/engine/answerer.py @@ -1431,6 +1431,8 @@ async def _select_metric_chunks( selected = _parse_key_list(raw, available_keys, max_keys) if candidate_keys: selected = _merge_metric_keys(selected, candidate_keys, max_keys) + if selected and candidate_keys and not _metric_key_overlap(selected, token_set): + selected = candidate_keys[:max_keys] if not selected and candidate_keys: selected = candidate_keys[:max_keys] if available_keys: @@ -1582,6 +1584,17 @@ def _filter_metric_keys(keys: list[str], tokens: set[str]) -> list[str]: return [item[1] for item in ranked] +def _metric_key_overlap(keys: list[str], tokens: set[str]) -> bool: + if not keys or not tokens: + return False + lowered_tokens = {token.lower() for token in tokens if token and len(token) >= TOKEN_MIN_LEN} + for key in keys: + parts = [part for part in re.split(r"[_\\W]+", key.lower()) if part] + if set(parts) & lowered_tokens: + return True + return False + + def _lines_for_metric_keys(lines: list[str], keys: list[str], max_lines: int = 0) -> list[str]: if not lines or not keys: return []