From b69230973ab246d0f69120462e3977f5d5656ab5 Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Tue, 3 Feb 2026 11:03:58 -0300 Subject: [PATCH] atlasbot: merge signal and keyword tokens --- atlasbot/engine/answerer.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/atlasbot/engine/answerer.py b/atlasbot/engine/answerer.py index 4580b63..7f5d84c 100644 --- a/atlasbot/engine/answerer.py +++ b/atlasbot/engine/answerer.py @@ -327,6 +327,7 @@ class AnswerEngine: ) if isinstance(signals, list): signal_tokens = [str(item) for item in signals if item] + all_tokens = _merge_tokens(signal_tokens, keyword_tokens) if observer: observer("retrieve", "scanning chunks") candidate_lines: list[str] = [] @@ -362,11 +363,7 @@ class AnswerEngine: if not metric_facts: if observer: observer("retrieve", "fallback metric selection") - fallback_candidates = _filter_lines_by_keywords( - summary_lines, - signal_tokens or keyword_tokens, - max_lines=200, - ) + fallback_candidates = _filter_lines_by_keywords(summary_lines, all_tokens, max_lines=200) if fallback_candidates: metric_facts = await _select_fact_lines( call_llm, @@ -380,7 +377,7 @@ class AnswerEngine: if metric_facts: metric_facts = _ensure_token_coverage( metric_facts, - signal_tokens or keyword_tokens, + all_tokens, summary_lines, max_add=plan.max_subquestions, ) @@ -393,7 +390,7 @@ class AnswerEngine: if key_facts: key_facts = _ensure_token_coverage( key_facts, - signal_tokens or keyword_tokens, + all_tokens, summary_lines, max_add=plan.max_subquestions, ) @@ -1499,6 +1496,16 @@ def _has_keyword_overlap(lines: list[str], keywords: list[str]) -> bool: return False +def _merge_tokens(primary: list[str], secondary: list[str]) -> list[str]: + merged: list[str] = [] + for token in primary + secondary: + if not token: + continue + if token not in merged: + merged.append(token) + return merged + + def _ensure_token_coverage( lines: list[str], tokens: list[str],