diff --git a/atlasbot/engine/answerer.py b/atlasbot/engine/answerer.py index ad42928..0272908 100644 --- a/atlasbot/engine/answerer.py +++ b/atlasbot/engine/answerer.py @@ -1304,6 +1304,8 @@ async def _select_metric_chunks( tag="metric_keys", ) selected = _parse_key_list(raw, available_keys, max_keys) + if candidate_keys: + selected = _merge_metric_keys(selected, candidate_keys, max_keys) if not selected and candidate_keys: selected = candidate_keys[:max_keys] if not selected: @@ -1408,6 +1410,22 @@ def _lines_for_metric_keys(lines: list[str], keys: list[str], max_lines: int = 0 return selected +def _merge_metric_keys(current: list[str], candidates: list[str], max_keys: int) -> list[str]: + merged: list[str] = [] + seen = set() + for key in current: + if key and key not in seen: + merged.append(key) + seen.add(key) + for key in candidates: + if key and key not in seen: + merged.append(key) + seen.add(key) + if len(merged) >= max_keys: + break + return merged[:max_keys] + + def _merge_fact_lines(primary: list[str], fallback: list[str]) -> list[str]: seen = set() merged: list[str] = []