From 78763d0c931da4f3db0ab927d11746dde6e80873 Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Tue, 3 Feb 2026 21:33:46 -0300 Subject: [PATCH] atlasbot: reduce metric chunk complexity --- atlasbot/engine/answerer.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/atlasbot/engine/answerer.py b/atlasbot/engine/answerer.py index a5c62f0..ad42928 100644 --- a/atlasbot/engine/answerer.py +++ b/atlasbot/engine/answerer.py @@ -1286,19 +1286,13 @@ async def _select_metric_chunks( chunks: list[dict[str, Any]], plan: ModePlan, ) -> tuple[list[str], list[str]]: - summary_lines = ctx.get("summary_lines") if isinstance(ctx, dict) else None - if not isinstance(summary_lines, list): + summary_lines, question, sub_questions, keywords, token_set = _metric_ctx_values(ctx) + if not summary_lines or not chunks: return [], [] keys = _extract_metric_keys(summary_lines) - if not keys or not chunks: + if not keys: return [], [] max_keys = max(4, plan.max_subquestions * 2) - question = ctx.get("question") if isinstance(ctx, dict) else "" - sub_questions = ctx.get("sub_questions") if isinstance(ctx, dict) else [] - keywords = ctx.get("keywords") if isinstance(ctx, dict) else [] - keyword_tokens = ctx.get("keyword_tokens") if isinstance(ctx, dict) else [] - token_set = set([str(token) for token in keyword_tokens if token]) - token_set |= set(_extract_keywords(str(question), str(question), sub_questions=sub_questions, keywords=keywords)) candidate_keys = _filter_metric_keys(keys, token_set) available_keys = candidate_keys or keys prompt = prompts.METRIC_KEYS_PROMPT.format(available="\n".join(available_keys), max_keys=max_keys) @@ -1318,6 +1312,19 @@ async def _select_metric_chunks( return selected, ids +def _metric_ctx_values(ctx: dict[str, Any]) -> tuple[list[str], str, list[str], list[str], set[str]]: + summary_lines = ctx.get("summary_lines") if isinstance(ctx, dict) else None + if not isinstance(summary_lines, list): + return [], "", [], [], set() + question = ctx.get("question") if isinstance(ctx, dict) else "" + sub_questions = ctx.get("sub_questions") if isinstance(ctx, dict) else [] + keywords = ctx.get("keywords") if isinstance(ctx, dict) else [] + keyword_tokens = ctx.get("keyword_tokens") if isinstance(ctx, dict) else [] + token_set = set([str(token) for token in keyword_tokens if token]) + token_set |= set(_extract_keywords(str(question), str(question), sub_questions=sub_questions, keywords=keywords)) + return summary_lines, str(question), sub_questions, keywords, token_set + + def _extract_metric_keys(lines: list[str]) -> list[str]: keys: list[str] = [] for line in lines: