From cb9beb86bf9065afff35aee29612ab32ddcbe839 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Fri, 13 Jun 2025 09:34:23 -0400 Subject: [PATCH] anthropic: Refactor a bit (#32685) This PR applies some refactorings made in our other repos to this version of the `anthropic` crate. Release Notes: - N/A --- crates/anthropic/src/anthropic.rs | 112 ++++++++++++++++++------------ 1 file changed, 66 insertions(+), 46 deletions(-) diff --git a/crates/anthropic/src/anthropic.rs b/crates/anthropic/src/anthropic.rs index 58369ea2529f634d0dc610af3f05b10ce45bbf6a..2b1d7be47465708f191fac000b44e345ff67338f 100644 --- a/crates/anthropic/src/anthropic.rs +++ b/crates/anthropic/src/anthropic.rs @@ -90,46 +90,66 @@ impl Model { } pub fn from_id(id: &str) -> Result { + 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",