pub(super) fn choose_provider_for_tier<'a>(
providers: &'a [&'a str],
model_tier: Option<&str>,
) -> &'a str {
provider_preferences_for_tier(model_tier)
.iter()
.find_map(|preferred| {
providers
.iter()
.copied()
.find(|provider| provider == preferred)
})
.or_else(|| {
providers
.iter()
.copied()
.find(|provider| *provider == "zai")
})
.unwrap_or_else(|| {
assert!(!providers.is_empty(), "provider list must not be empty");
providers[0]
})
}
fn provider_preferences_for_tier(model_tier: Option<&str>) -> &'static [&'static str] {
match model_tier.unwrap_or("balanced") {
"fast" | "quick" => &[
"zai",
"minimax-credits",
"minimax",
"moonshotai",
"openrouter",
"anthropic",
"google",
"openai",
"github-copilot",
"novita",
],
"heavy" | "deep" => &[
"zai",
"minimax",
"moonshotai",
"openrouter",
"anthropic",
"google",
"openai",
"github-copilot",
"novita",
],
_ => &[
"zai",
"minimax",
"minimax-credits",
"moonshotai",
"openrouter",
"anthropic",
"google",
"openai",
"github-copilot",
"novita",
],
}
}