From 9cb591e469acc2de57a6cf715876eb9e826a463f Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Wed, 4 Feb 2026 13:36:20 -0300 Subject: [PATCH] atlasbot: merge global metric facts into selection --- atlasbot/engine/answerer.py | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/atlasbot/engine/answerer.py b/atlasbot/engine/answerer.py index 835981d..498c79d 100644 --- a/atlasbot/engine/answerer.py +++ b/atlasbot/engine/answerer.py @@ -361,6 +361,17 @@ class AnswerEngine: ) metric_facts: list[str] = [] if classify.get("question_type") in {"metric", "diagnostic"} or force_metric: + global_metric_facts: list[str] = [] + if global_facts: + global_metric_facts = await _select_fact_lines( + call_llm, + normalized, + global_facts, + plan, + max_lines=min(2, max(1, plan.max_subquestions)), + ) + if global_metric_facts: + key_facts = _merge_fact_lines(global_metric_facts, key_facts) all_tokens = _merge_tokens(signal_tokens, keyword_tokens, question_tokens) if plan.use_deep_retrieval: if observer: @@ -439,12 +450,14 @@ class AnswerEngine: summary_lines, max_add=plan.max_subquestions, ) - if metric_facts and not _has_keyword_overlap(metric_facts, keyword_tokens): - best_line = _best_keyword_line(summary_lines, keyword_tokens) - if best_line: - metric_facts = _merge_fact_lines([best_line], metric_facts) + if metric_facts and not _has_keyword_overlap(metric_facts, keyword_tokens): + best_line = _best_keyword_line(summary_lines, keyword_tokens) + if best_line: + metric_facts = _merge_fact_lines([best_line], metric_facts) if metric_facts: key_facts = _merge_fact_lines(metric_facts, key_facts) + if global_metric_facts: + metric_facts = _merge_fact_lines(global_metric_facts, metric_facts) if (classify.get("question_type") in {"metric", "diagnostic"} or force_metric) and not metric_facts and key_facts: metric_facts = key_facts if key_facts: