@@ -90,46 +90,66 @@ impl Model {
}
pub fn from_id(id: &str) -> Result<Self> {
+ if id.starts_with("claude-opus-4-thinking") {
+ return Ok(Self::ClaudeOpus4Thinking);
+ }
+
+ if id.starts_with("claude-opus-4") {
+ return Ok(Self::ClaudeOpus4);
+ }
+
+ if id.starts_with("claude-sonnet-4-thinking") {
+ return Ok(Self::ClaudeSonnet4Thinking);
+ }
+
+ if id.starts_with("claude-sonnet-4") {
+ return Ok(Self::ClaudeSonnet4);
+ }
+
+ if id.starts_with("claude-3-7-sonnet-thinking") {
+ return Ok(Self::Claude3_7SonnetThinking);
+ }
+
+ if id.starts_with("claude-3-7-sonnet") {
+ return Ok(Self::Claude3_7Sonnet);
+ }
+
if id.starts_with("claude-3-5-sonnet") {
- Ok(Self::Claude3_5Sonnet)
- } else if id.starts_with("claude-3-7-sonnet-thinking") {
- Ok(Self::Claude3_7SonnetThinking)
- } else if id.starts_with("claude-3-7-sonnet") {
- Ok(Self::Claude3_7Sonnet)
- } else if id.starts_with("claude-3-5-haiku") {
- Ok(Self::Claude3_5Haiku)
- } else if id.starts_with("claude-3-opus") {
- Ok(Self::Claude3Opus)
- } else if id.starts_with("claude-3-sonnet") {
- Ok(Self::Claude3Sonnet)
- } else if id.starts_with("claude-3-haiku") {
- Ok(Self::Claude3Haiku)
- } else if id.starts_with("claude-opus-4-thinking") {
- Ok(Self::ClaudeOpus4Thinking)
- } else if id.starts_with("claude-opus-4") {
- Ok(Self::ClaudeOpus4)
- } else if id.starts_with("claude-sonnet-4-thinking") {
- Ok(Self::ClaudeSonnet4Thinking)
- } else if id.starts_with("claude-sonnet-4") {
- Ok(Self::ClaudeSonnet4)
- } else {
- anyhow::bail!("invalid model id {id}");
+ return Ok(Self::Claude3_5Sonnet);
+ }
+
+ if id.starts_with("claude-3-5-haiku") {
+ return Ok(Self::Claude3_5Haiku);
+ }
+
+ if id.starts_with("claude-3-opus") {
+ return Ok(Self::Claude3Opus);
}
+
+ if id.starts_with("claude-3-sonnet") {
+ return Ok(Self::Claude3Sonnet);
+ }
+
+ if id.starts_with("claude-3-haiku") {
+ return Ok(Self::Claude3Haiku);
+ }
+
+ Err(anyhow!("invalid model ID: {id}"))
}
pub fn id(&self) -> &str {
match self {
- Model::ClaudeOpus4 => "claude-opus-4-latest",
- Model::ClaudeOpus4Thinking => "claude-opus-4-thinking-latest",
- Model::ClaudeSonnet4 => "claude-sonnet-4-latest",
- Model::ClaudeSonnet4Thinking => "claude-sonnet-4-thinking-latest",
- Model::Claude3_5Sonnet => "claude-3-5-sonnet-latest",
- Model::Claude3_7Sonnet => "claude-3-7-sonnet-latest",
- Model::Claude3_7SonnetThinking => "claude-3-7-sonnet-thinking-latest",
- Model::Claude3_5Haiku => "claude-3-5-haiku-latest",
- Model::Claude3Opus => "claude-3-opus-latest",
- Model::Claude3Sonnet => "claude-3-sonnet-20240229",
- Model::Claude3Haiku => "claude-3-haiku-20240307",
+ Self::ClaudeOpus4 => "claude-opus-4-latest",
+ Self::ClaudeOpus4Thinking => "claude-opus-4-thinking-latest",
+ Self::ClaudeSonnet4 => "claude-sonnet-4-latest",
+ Self::ClaudeSonnet4Thinking => "claude-sonnet-4-thinking-latest",
+ Self::Claude3_5Sonnet => "claude-3-5-sonnet-latest",
+ Self::Claude3_7Sonnet => "claude-3-7-sonnet-latest",
+ Self::Claude3_7SonnetThinking => "claude-3-7-sonnet-thinking-latest",
+ Self::Claude3_5Haiku => "claude-3-5-haiku-latest",
+ Self::Claude3Opus => "claude-3-opus-latest",
+ Self::Claude3Sonnet => "claude-3-sonnet-20240229",
+ Self::Claude3Haiku => "claude-3-haiku-20240307",
Self::Custom { name, .. } => name,
}
}
@@ -137,24 +157,24 @@ impl Model {
/// The id of the model that should be used for making API requests
pub fn request_id(&self) -> &str {
match self {
- Model::ClaudeOpus4 | Model::ClaudeOpus4Thinking => "claude-opus-4-20250514",
- Model::ClaudeSonnet4 | Model::ClaudeSonnet4Thinking => "claude-sonnet-4-20250514",
- Model::Claude3_5Sonnet => "claude-3-5-sonnet-latest",
- Model::Claude3_7Sonnet | Model::Claude3_7SonnetThinking => "claude-3-7-sonnet-latest",
- Model::Claude3_5Haiku => "claude-3-5-haiku-latest",
- Model::Claude3Opus => "claude-3-opus-latest",
- Model::Claude3Sonnet => "claude-3-sonnet-20240229",
- Model::Claude3Haiku => "claude-3-haiku-20240307",
+ Self::ClaudeOpus4 | Self::ClaudeOpus4Thinking => "claude-opus-4-20250514",
+ Self::ClaudeSonnet4 | Self::ClaudeSonnet4Thinking => "claude-sonnet-4-20250514",
+ Self::Claude3_5Sonnet => "claude-3-5-sonnet-latest",
+ Self::Claude3_7Sonnet | Self::Claude3_7SonnetThinking => "claude-3-7-sonnet-latest",
+ Self::Claude3_5Haiku => "claude-3-5-haiku-latest",
+ Self::Claude3Opus => "claude-3-opus-latest",
+ Self::Claude3Sonnet => "claude-3-sonnet-20240229",
+ Self::Claude3Haiku => "claude-3-haiku-20240307",
Self::Custom { name, .. } => name,
}
}
pub fn display_name(&self) -> &str {
match self {
- Model::ClaudeOpus4 => "Claude Opus 4",
- Model::ClaudeOpus4Thinking => "Claude Opus 4 Thinking",
- Model::ClaudeSonnet4 => "Claude Sonnet 4",
- Model::ClaudeSonnet4Thinking => "Claude Sonnet 4 Thinking",
+ Self::ClaudeOpus4 => "Claude Opus 4",
+ Self::ClaudeOpus4Thinking => "Claude Opus 4 Thinking",
+ Self::ClaudeSonnet4 => "Claude Sonnet 4",
+ Self::ClaudeSonnet4Thinking => "Claude Sonnet 4 Thinking",
Self::Claude3_7Sonnet => "Claude 3.7 Sonnet",
Self::Claude3_5Sonnet => "Claude 3.5 Sonnet",
Self::Claude3_7SonnetThinking => "Claude 3.7 Sonnet Thinking",