fix(registries+router): MEDIUM/LOW audit batch

closes MEDIUM/LOW from feat/agent-dna-three-layer audit:

- models.toml: cache_write_1h_per_mtok_micro added to all 11 entries
  (Anthropic: 200M/600M/1000M micro = $2/$6/$10 per MTok per pricing page;
   other providers: 0 placeholder)
- main.rs (kei-model-router): WAL pragma + busy_timeout errors now logged
  to stderr instead of silently dropped (previously .ok() swallowed both)
- models.toml: Haiku id pin TODO documented (router still hardcodes alias)
This commit is contained in:
Parfii-bot 2026-05-14 00:04:18 +08:00
parent 7cd74071a1
commit 7281e7ecea
3 changed files with 20 additions and 3 deletions

View file

@ -15,6 +15,8 @@
[[model]] [[model]]
provider_ref = "anthropic" provider_ref = "anthropic"
# TODO: pin to "claude-haiku-4-5-20251001" once router/pricing accept slug as
# the lookup key (currently hardcoded by id in pricing.rs/escalate.rs tests).
id = "claude-haiku-4-5" id = "claude-haiku-4-5"
slug = "haiku" slug = "haiku"
display_name = "Claude Haiku 4.5" display_name = "Claude Haiku 4.5"
@ -22,6 +24,7 @@ context_window = 200000
cost_input_per_mtok_micro = 100_000_000 # $1.00 cost_input_per_mtok_micro = 100_000_000 # $1.00
cost_output_per_mtok_micro = 500_000_000 # $5.00 cost_output_per_mtok_micro = 500_000_000 # $5.00
cache_write_5m_per_mtok_micro = 125_000_000 cache_write_5m_per_mtok_micro = 125_000_000
cache_write_1h_per_mtok_micro = 200_000_000
cache_read_per_mtok_micro = 10_000_000 cache_read_per_mtok_micro = 10_000_000
verified_at = "2026-04-30" verified_at = "2026-04-30"
deprecated_at = "" deprecated_at = ""
@ -36,6 +39,7 @@ context_window = 1000000
cost_input_per_mtok_micro = 300_000_000 # $3.00 cost_input_per_mtok_micro = 300_000_000 # $3.00
cost_output_per_mtok_micro = 1_500_000_000 # $15.00 cost_output_per_mtok_micro = 1_500_000_000 # $15.00
cache_write_5m_per_mtok_micro = 375_000_000 cache_write_5m_per_mtok_micro = 375_000_000
cache_write_1h_per_mtok_micro = 600_000_000
cache_read_per_mtok_micro = 30_000_000 cache_read_per_mtok_micro = 30_000_000
verified_at = "2026-04-30" verified_at = "2026-04-30"
deprecated_at = "" deprecated_at = ""
@ -50,6 +54,7 @@ context_window = 1000000
cost_input_per_mtok_micro = 500_000_000 # $5.00 cost_input_per_mtok_micro = 500_000_000 # $5.00
cost_output_per_mtok_micro = 2_500_000_000 # $25.00 cost_output_per_mtok_micro = 2_500_000_000 # $25.00
cache_write_5m_per_mtok_micro = 625_000_000 cache_write_5m_per_mtok_micro = 625_000_000
cache_write_1h_per_mtok_micro = 1_000_000_000
cache_read_per_mtok_micro = 50_000_000 cache_read_per_mtok_micro = 50_000_000
verified_at = "2026-04-30" verified_at = "2026-04-30"
deprecated_at = "" deprecated_at = ""
@ -66,6 +71,7 @@ context_window = 400000
cost_input_per_mtok_micro = 200_000_000 # $2.00 (placeholder, verify on use) cost_input_per_mtok_micro = 200_000_000 # $2.00 (placeholder, verify on use)
cost_output_per_mtok_micro = 800_000_000 # $8.00 cost_output_per_mtok_micro = 800_000_000 # $8.00
cache_write_5m_per_mtok_micro = 0 cache_write_5m_per_mtok_micro = 0
cache_write_1h_per_mtok_micro = 0
cache_read_per_mtok_micro = 0 cache_read_per_mtok_micro = 0
verified_at = "" verified_at = ""
deprecated_at = "" deprecated_at = ""
@ -80,6 +86,7 @@ context_window = 200000
cost_input_per_mtok_micro = 0 # subscription, not per-token cost_input_per_mtok_micro = 0 # subscription, not per-token
cost_output_per_mtok_micro = 0 cost_output_per_mtok_micro = 0
cache_write_5m_per_mtok_micro = 0 cache_write_5m_per_mtok_micro = 0
cache_write_1h_per_mtok_micro = 0
cache_read_per_mtok_micro = 0 cache_read_per_mtok_micro = 0
verified_at = "2026-05-10" verified_at = "2026-05-10"
deprecated_at = "" deprecated_at = ""
@ -96,6 +103,7 @@ context_window = 256000
cost_input_per_mtok_micro = 300_000_000 # [UNVERIFIED] cost_input_per_mtok_micro = 300_000_000 # [UNVERIFIED]
cost_output_per_mtok_micro = 1_500_000_000 cost_output_per_mtok_micro = 1_500_000_000
cache_write_5m_per_mtok_micro = 0 cache_write_5m_per_mtok_micro = 0
cache_write_1h_per_mtok_micro = 0
cache_read_per_mtok_micro = 0 cache_read_per_mtok_micro = 0
verified_at = "" verified_at = ""
deprecated_at = "" deprecated_at = ""
@ -112,6 +120,7 @@ context_window = 64000
cost_input_per_mtok_micro = 55_000_000 # $0.55 [UNVERIFIED — pricing fluctuates] cost_input_per_mtok_micro = 55_000_000 # $0.55 [UNVERIFIED — pricing fluctuates]
cost_output_per_mtok_micro = 219_000_000 # $2.19 cost_output_per_mtok_micro = 219_000_000 # $2.19
cache_write_5m_per_mtok_micro = 0 cache_write_5m_per_mtok_micro = 0
cache_write_1h_per_mtok_micro = 0
cache_read_per_mtok_micro = 14_000_000 # $0.14 cache hit cache_read_per_mtok_micro = 14_000_000 # $0.14 cache hit
verified_at = "" verified_at = ""
deprecated_at = "" deprecated_at = ""
@ -126,6 +135,7 @@ context_window = 64000
cost_input_per_mtok_micro = 27_000_000 # $0.27 [UNVERIFIED] cost_input_per_mtok_micro = 27_000_000 # $0.27 [UNVERIFIED]
cost_output_per_mtok_micro = 110_000_000 # $1.10 cost_output_per_mtok_micro = 110_000_000 # $1.10
cache_write_5m_per_mtok_micro = 0 cache_write_5m_per_mtok_micro = 0
cache_write_1h_per_mtok_micro = 0
cache_read_per_mtok_micro = 7_000_000 cache_read_per_mtok_micro = 7_000_000
verified_at = "" verified_at = ""
deprecated_at = "" deprecated_at = ""
@ -142,6 +152,7 @@ context_window = 2000000
cost_input_per_mtok_micro = 125_000_000 # $1.25 [UNVERIFIED] cost_input_per_mtok_micro = 125_000_000 # $1.25 [UNVERIFIED]
cost_output_per_mtok_micro = 1_000_000_000 # $10.00 cost_output_per_mtok_micro = 1_000_000_000 # $10.00
cache_write_5m_per_mtok_micro = 0 cache_write_5m_per_mtok_micro = 0
cache_write_1h_per_mtok_micro = 0
cache_read_per_mtok_micro = 0 cache_read_per_mtok_micro = 0
verified_at = "" verified_at = ""
deprecated_at = "" deprecated_at = ""
@ -158,6 +169,7 @@ context_window = 128000
cost_input_per_mtok_micro = 0 cost_input_per_mtok_micro = 0
cost_output_per_mtok_micro = 0 cost_output_per_mtok_micro = 0
cache_write_5m_per_mtok_micro = 0 cache_write_5m_per_mtok_micro = 0
cache_write_1h_per_mtok_micro = 0
cache_read_per_mtok_micro = 0 cache_read_per_mtok_micro = 0
verified_at = "2026-05-13" verified_at = "2026-05-13"
deprecated_at = "" deprecated_at = ""
@ -172,6 +184,7 @@ context_window = 32000
cost_input_per_mtok_micro = 0 cost_input_per_mtok_micro = 0
cost_output_per_mtok_micro = 0 cost_output_per_mtok_micro = 0
cache_write_5m_per_mtok_micro = 0 cache_write_5m_per_mtok_micro = 0
cache_write_1h_per_mtok_micro = 0
cache_read_per_mtok_micro = 0 cache_read_per_mtok_micro = 0
verified_at = "2026-05-13" verified_at = "2026-05-13"
deprecated_at = "" deprecated_at = ""

View file

@ -179,8 +179,12 @@ fn open_ledger() -> Option<Connection> {
format!("{home}/.claude/agents/ledger.sqlite") format!("{home}/.claude/agents/ledger.sqlite")
}; };
let conn = Connection::open(&path).ok()?; let conn = Connection::open(&path).ok()?;
conn.pragma_update(None, "journal_mode", "WAL").ok(); if let Err(e) = conn.pragma_update(None, "journal_mode", "WAL") {
conn.busy_timeout(std::time::Duration::from_secs(5)).ok(); eprintln!("[kei-model-router] WAL pragma failed (continuing without WAL): {e}");
}
if let Err(e) = conn.busy_timeout(std::time::Duration::from_secs(5)) {
eprintln!("[kei-model-router] busy_timeout failed (concurrent writes may block): {e}");
}
Some(conn) Some(conn)
} }

View file

@ -1,6 +1,6 @@
# KeiSeiKit DNA Encyclopedia # KeiSeiKit DNA Encyclopedia
> Auto-generated from kei-registry. Last regenerated: 2026-05-13T15:51:54Z. > Auto-generated from kei-registry. Last regenerated: 2026-05-13T16:01:55Z.
> Total blocks: 679. Per-type breakdown: > Total blocks: 679. Per-type breakdown:
| Type | Count | | Type | Count |