From 3f248f7ffa0f20341b257766a527b0c4181562fc Mon Sep 17 00:00:00 2001 From: Hikari Date: Fri, 20 Mar 2026 10:13:38 -0700 Subject: [PATCH] fix: document cost estimation review and update default model fallback (#228) Confirms char-based estimation is unaffected by the CLI v2.1.75 token overcounting fix. Updates default model fallback to claude-sonnet-4-6. --- src-tauri/src/wsl_bridge.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src-tauri/src/wsl_bridge.rs b/src-tauri/src/wsl_bridge.rs index 29bf73e..990a4a7 100644 --- a/src-tauri/src/wsl_bridge.rs +++ b/src-tauri/src/wsl_bridge.rs @@ -800,14 +800,17 @@ impl WslBridge { } let input_chars = stats.current_request_input.as_ref().map(|s| s.len() as u64).unwrap_or(0); - let model = stats.model.clone().unwrap_or_else(|| "claude-sonnet-4-5-20250929".to_string()); + let model = stats.model.clone().unwrap_or_else(|| "claude-sonnet-4-6".to_string()); (input_chars, stats.current_request_output_chars, stats.current_request_thinking_chars, stats.current_request_tools.clone(), model) }; tracing::info!("[COST ESTIMATION] Estimating cost for interrupted request"); - // Use conservative 3.5 chars/token for estimation (vs standard 4) + // Char-based estimation: 3.5 chars/token is intentionally conservative (standard English + // averages ~4 chars/token). CLI v2.1.75 fixed over-counting in Claude Code's compaction + // logic but does not affect this heuristic — we count characters ourselves, independently + // of Claude Code's internal token tracking. The 1.2 safety margin avoids undercharging. let estimated_input_tokens = (input_chars as f64 / 3.5).ceil() as u64; let estimated_output_tokens = ((output_chars as f64 / 3.5).ceil() as u64) + ((thinking_chars as f64 / 3.5).ceil() as u64); @@ -1585,7 +1588,7 @@ fn process_json_line( stats_guard.model.clone() }).unwrap_or_else(|| { tracing::warn!("No model info available for cost calculation, using default"); - "claude-sonnet-4-5-20250929".to_string() + "claude-sonnet-4-6".to_string() }); // Calculate cost for historical tracking (including cache tokens)