Get the small model for a provider, using priority lists.
(
&self,
provider_id: &str,
config_small_model: Option<&str>,
)
| 1571 | |
| 1572 | /// Get the small model for a provider, using priority lists. |
| 1573 | pub fn get_small_model( |
| 1574 | &self, |
| 1575 | provider_id: &str, |
| 1576 | config_small_model: Option<&str>, |
| 1577 | ) -> Option<ProviderModel> { |
| 1578 | // If config specifies a small model, use it |
| 1579 | if let Some(model_str) = config_small_model { |
| 1580 | let parsed = parse_model(model_str); |
| 1581 | return self |
| 1582 | .get_model(&parsed.provider_id, &parsed.model_id) |
| 1583 | .ok() |
| 1584 | .cloned(); |
| 1585 | } |
| 1586 | |
| 1587 | if let Some(provider) = self.providers.get(provider_id) { |
| 1588 | let mut priority: Vec<&str> = vec![ |
| 1589 | "claude-haiku-4-5", |
| 1590 | "claude-haiku-4.5", |
| 1591 | "3-5-haiku", |
| 1592 | "3.5-haiku", |
| 1593 | "gemini-3-flash", |
| 1594 | "gemini-2.5-flash", |
| 1595 | "gpt-5-nano", |
| 1596 | ]; |
| 1597 | |
| 1598 | if provider_id.starts_with("opencode") { |
| 1599 | priority = vec!["gpt-5-nano"]; |
| 1600 | } |
| 1601 | if provider_id.starts_with("github-copilot") { |
| 1602 | priority = vec!["gpt-5-mini", "claude-haiku-4.5"]; |
| 1603 | priority.extend_from_slice(&[ |
| 1604 | "claude-haiku-4-5", |
| 1605 | "3-5-haiku", |
| 1606 | "3.5-haiku", |
| 1607 | "gemini-3-flash", |
| 1608 | "gemini-2.5-flash", |
| 1609 | "gpt-5-nano", |
| 1610 | ]); |
| 1611 | } |
| 1612 | |
| 1613 | for item in &priority { |
| 1614 | if provider_id == "amazon-bedrock" { |
| 1615 | let cross_region_prefixes = ["global.", "us.", "eu."]; |
| 1616 | let candidates: Vec<&String> = provider |
| 1617 | .models |
| 1618 | .keys() |
| 1619 | .filter(|m| m.contains(item)) |
| 1620 | .collect(); |
| 1621 | |
| 1622 | // Priority: 1) global. 2) user's region prefix 3) unprefixed |
| 1623 | if let Some(global_match) = candidates.iter().find(|m| m.starts_with("global.")) |
| 1624 | { |
| 1625 | return provider.models.get(*global_match).cloned(); |
| 1626 | } |
| 1627 | |
| 1628 | let region = provider |
| 1629 | .options |
| 1630 | .get("region") |