pub fn estimate_context_window(model_id: &str) -> usize {
crate::provider::limits::context_window_for_model(model_id)
}
pub fn estimate_max_output(model_id: &str) -> usize {
let id = model_id.to_lowercase();
if id.contains("claude-opus-4-7") {
128_000
} else if id.contains("claude-opus-4-6")
|| id.contains("claude-opus-4-5")
|| id.contains("claude-opus-4-1")
|| id.contains("claude-opus-4")
{
32_000
} else if id.contains("claude-sonnet-4-6") {
128_000
} else if id.contains("claude-sonnet-4-5")
|| id.contains("claude-sonnet-4")
|| id.contains("claude-3-7")
{
64_000
} else if id.contains("claude-haiku-4-5") {
16_384
} else if id.contains("claude") {
8_192
} else if id.contains("nova") {
5_000
} else if id.contains("deepseek") || id.contains("llama4") || id.contains("mistral-large-3") {
16_384
} else if id.contains("llama") {
4_096
} else if id.contains("mistral")
|| id.contains("mixtral")
|| id.contains("qwen")
|| id.contains("kimi")
|| id.contains("glm")
|| id.contains("minimax")
|| id.contains("gemma")
|| id.contains("cohere")
|| id.contains("amazon")
{
8_192
} else {
4_096
}
}