atlasbot: reduce metric chunk complexity

This commit is contained in:
Brad Stein 2026-02-03 21:33:46 -03:00
parent 0b6ffc9521
commit 78763d0c93

View File

@ -1286,19 +1286,13 @@ async def _select_metric_chunks(
chunks: list[dict[str, Any]], chunks: list[dict[str, Any]],
plan: ModePlan, plan: ModePlan,
) -> tuple[list[str], list[str]]: ) -> tuple[list[str], list[str]]:
summary_lines = ctx.get("summary_lines") if isinstance(ctx, dict) else None summary_lines, question, sub_questions, keywords, token_set = _metric_ctx_values(ctx)
if not isinstance(summary_lines, list): if not summary_lines or not chunks:
return [], [] return [], []
keys = _extract_metric_keys(summary_lines) keys = _extract_metric_keys(summary_lines)
if not keys or not chunks: if not keys:
return [], [] return [], []
max_keys = max(4, plan.max_subquestions * 2) 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) candidate_keys = _filter_metric_keys(keys, token_set)
available_keys = candidate_keys or keys available_keys = candidate_keys or keys
prompt = prompts.METRIC_KEYS_PROMPT.format(available="\n".join(available_keys), max_keys=max_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 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]: def _extract_metric_keys(lines: list[str]) -> list[str]:
keys: list[str] = [] keys: list[str] = []
for line in lines: for line in lines: