testsAndMisc/python_pkg/token_audit/tests/test_recommend.py
Krzysztof kuhy Rudnicki 1ba202c567
Some checks are pending
dependency freshness / dependencies on newest stable (push) Waiting to run
md-naming / markdown naming convention (push) Waiting to run
Pre-commit checks / pre-commit (${{ matrix.group }}) (mypy, mypy) (push) Waiting to run
Pre-commit checks / pre-commit (${{ matrix.group }}) (pylint, pylint) (push) Waiting to run
Pre-commit checks / pre-commit (${{ matrix.group }}) (rest, ) (push) Waiting to run
Pre-commit checks / pre-commit (${{ matrix.group }}) (shellcheck, shellcheck) (push) Waiting to run
Python tests / test (push) Waiting to run
repo-contract / repo contract (push) Waiting to run
Shell tests / shell-tests (push) Waiting to run
Shell tests / lib-tests (push) Waiting to run
Shell tests / arch-tests (push) Waiting to run
token_dashboard: ingester core + detail tables (calls, marks, turn_detail, ab_rows) for the control-panel dashboard
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JThjboXTeZ3yJPBzxMx5wS
2026-10-18 14:45:06 +02:00

109 lines
3.7 KiB
Python

from __future__ import annotations
from typing import Any
from python_pkg.token_audit import recommend
def _fire_all() -> dict[str, Any]:
return {
"usd_total": 70.0,
"usd_per_day": 10.0,
"subagent_usd_share": 0.4,
"subagent_opus_usd_share": 0.9,
"subagent_sonnet_saving_usd": 14.0,
"over_budget_usd_share": 0.5,
"home_cwd_usd_share": 0.4,
"batching_calls_per_msg": 1.05,
"bash_big_result_share": 0.4,
"bash_tokens_per_day": 900_000,
"standing_tokens_est": 120,
"image_usd_share": 0.1,
}
def test_num_treats_missing_and_non_numeric_as_zero() -> None:
assert recommend._num({"a": 3}, "a") == 3.0
assert recommend._num({"a": "x"}, "a") == 0.0
assert recommend._num({}, "a") == 0.0
def test_nothing_fires_on_quiet_metrics() -> None:
assert recommend.candidates({}, None, [], []) == []
assert recommend.render([]) == ["_No rule fired._"]
def test_subagent_rule_needs_both_thresholds() -> None:
low_share = {"subagent_usd_share": 0.01, "subagent_opus_usd_share": 0.9}
low_opus = {"subagent_usd_share": 0.5, "subagent_opus_usd_share": 0.1}
assert recommend._subagents(low_share) == []
assert recommend._subagents(low_opus) == []
def test_subagent_lever_sizes_saving_per_day() -> None:
(lever,) = recommend._subagents(_fire_all())
assert lever.category == "cheaper agents"
# 70 / 10 = 7 days; 14 saved over 7 days = 2 per day.
assert lever.est_usd_per_day == 2.0
def test_every_rule_fires_and_sized_levers_sort_first() -> None:
previous = {"standing_tokens_est": 100}
levers = recommend.candidates(_fire_all(), previous, ["mcp1"], ["skill1"])
titles = [lv.title for lv in levers]
assert titles[0] == "Calls over the context budget"
assert set(titles) == {
"Opus runs most subagent work",
"Calls over the context budget",
"Sessions started in ~",
"Independent tool calls not batched",
"Large Bash results",
"Always-loaded context grew",
"Images held in context",
"Unused MCP servers / skills",
}
sized = [lv.est_usd_per_day for lv in levers if lv.est_usd_per_day]
assert sized == sorted(sized, reverse=True)
def test_prefix_rule_silent_without_growth_or_baseline() -> None:
flat = {"standing_tokens_est": 100}
assert recommend._mechanics(flat, {"standing_tokens_est": 100}) == []
assert recommend._mechanics(flat, {"standing_tokens_est": 0}) == []
assert recommend._mechanics(flat, None) == []
def test_dead_lists_render_dash_for_empty_side() -> None:
assert recommend._dead([], []) == []
(only_mcp,) = recommend._dead(["m"], [])
assert "MCP: m; skills: -" in only_mcp.evidence
(only_skill,) = recommend._dead([], ["s"])
assert "MCP: -; skills: s" in only_skill.evidence
def test_render_table_formats_estimates() -> None:
sized = recommend.Lever("c", "t", "e", "a", 1.5)
unsized = recommend.Lever("c", "t2", "e", "a")
lines = recommend.render([sized, unsized])
assert lines[0].startswith("| category")
assert "| $1.50 |" in lines[2]
assert "| - |" in lines[3]
def test_every_rule_title_maps_to_a_snapshot_metric() -> None:
metrics = {
"subagent_usd_share": 0.9,
"subagent_opus_usd_share": 0.9,
"over_budget_usd_share": 0.9,
"home_cwd_usd_share": 0.9,
"batching_calls_per_msg": 1.0,
"bash_big_result_share": 0.9,
"image_usd_share": 0.9,
"standing_tokens_est": 200,
"usd_total": 10,
"usd_per_day": 1,
}
found = recommend.candidates(metrics, {"standing_tokens_est": 100}, ["m"], [])
assert len(found) == len(recommend.TITLE_METRIC)
assert all(lv.metric == recommend.TITLE_METRIC[lv.title] for lv in found)