towerops/test
Graham McIntire 01d64a446e refactor(llm): split token tracking into a dedicated llm_usage table
Token-usage doesn't belong on the per-insight row — every consumer of
Towerops.LLM (insight enrichment today; billing-anomaly summaries,
monitoring narratives, fleet weekly reports tomorrow) needs to record
into one queryable place. Per-insight columns also made it impossible
to track LLM calls that aren't tied to an insight.

Schema: `llm_usage` keyed (organization_id, day, model, purpose) with a
unique index. organization_id is nullable for system-level analyses.
Each row carries running totals plus a request_count — callers UPSERT
and increment atomically.

API: `Towerops.LLM.Usage.record/1` for write, `summarize/2` for
read-side rollups. The worker now calls `Usage.record(%{... purpose:
"insight_enrichment"})` after each successful enrichment.

Removed: `llm_prompt_tokens` / `llm_completion_tokens` from
preseem_insights — same migration drops the columns and creates
llm_usage in one go. `apply_llm_enrichment` reverts to /3 (no usage
arg).
2026-05-10 13:13:52 -05:00
..
assets fix/traffic-graph-rendering-and-polarity (#130) 2026-03-23 15:24:44 -05:00
integration routeros fixes and latency rounding 2026-02-09 17:30:06 -06:00
mix/tasks test: lift coverage from 85.84% → 86.28% 2026-05-08 17:44:18 -05:00
snmpkit fix(ci): enable Debian non-free repo for snmp-mibs-downloader; loosen flaky timing assertion to 500ms 2026-04-17 17:24:15 -05:00
support feat: end-to-end /coverage compute pipeline + antenna catalog + cnHeat-style form 2026-05-06 14:32:38 -05:00
towerops refactor(llm): split token tracking into a dedicated llm_usage table 2026-05-10 13:13:52 -05:00
towerops_web fix(llm): drop model name from footer, harden JSON parser 2026-05-10 13:03:25 -05:00
test_helper.exs test: in-process Redis fake instead of skipping Redis-backed tests 2026-05-10 11:32:50 -05:00
towerops_native_test.exs fix: resolve typing violation and ETS cache race in tests 2026-02-14 12:32:43 -06:00