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.
This commit is contained in:
2026-03-20 10:13:38 -07:00
committed by Naomi Carrigan
parent 457cca55eb
commit 3f248f7ffa
+6 -3
View File
@@ -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)