bedrock: Add Claude 3.7 Sonnet (#25583)

Shardul Vaidya created

Release Notes:

- N/A

Change summary

crates/bedrock/src/models.rs | 18 +++++++++++++-----
1 file changed, 13 insertions(+), 5 deletions(-)

Detailed changes

crates/bedrock/src/models.rs 🔗

@@ -7,8 +7,10 @@ use strum::EnumIter;
 pub enum Model {
     // Anthropic models (already included)
     #[default]
-    #[serde(rename = "claude-3-5-sonnet", alias = "claude-3-5-sonnet-latest")]
+    #[serde(rename = "claude-3-5-sonnet-v2", alias = "claude-3-5-sonnet-latest")]
     Claude3_5Sonnet,
+    #[serde(rename = "claude-3-7-sonnet", alias = "claude-3-7-sonnet-latest")]
+    Claude3_7Sonnet,
     #[serde(rename = "claude-3-opus", alias = "claude-3-opus-latest")]
     Claude3Opus,
     #[serde(rename = "claude-3-sonnet", alias = "claude-3-sonnet-latest")]
@@ -64,7 +66,7 @@ pub enum Model {
 
 impl Model {
     pub fn from_id(id: &str) -> anyhow::Result<Self> {
-        if id.starts_with("claude-3-5-sonnet") {
+        if id.starts_with("claude-3-5-sonnet-v2") {
             Ok(Self::Claude3_5Sonnet)
         } else if id.starts_with("claude-3-opus") {
             Ok(Self::Claude3Opus)
@@ -72,6 +74,8 @@ impl Model {
             Ok(Self::Claude3Sonnet)
         } else if id.starts_with("claude-3-5-haiku") {
             Ok(Self::Claude3_5Haiku)
+        } else if id.starts_with("claude-3-7-sonnet") {
+            Ok(Self::Claude3_7Sonnet)
         } else {
             Err(anyhow!("invalid model id"))
         }
@@ -83,6 +87,7 @@ impl Model {
             Model::Claude3Opus => "us.anthropic.claude-3-opus-20240229-v1:0",
             Model::Claude3Sonnet => "us.anthropic.claude-3-sonnet-20240229-v1:0",
             Model::Claude3_5Haiku => "us.anthropic.claude-3-5-haiku-20241022-v1:0",
+            Model::Claude3_7Sonnet => "us.anthropic.claude-3-7-sonnet-20250219-v1:0",
             Model::AmazonNovaLite => "us.amazon.nova-lite-v1:0",
             Model::AmazonNovaMicro => "us.amazon.nova-micro-v1:0",
             Model::AmazonNovaPro => "us.amazon.nova-pro-v1:0",
@@ -120,10 +125,11 @@ impl Model {
 
     pub fn display_name(&self) -> &str {
         match self {
-            Self::Claude3_5Sonnet => "Claude 3.5 Sonnet",
+            Self::Claude3_5Sonnet => "Claude 3.5 Sonnet v2",
             Self::Claude3Opus => "Claude 3 Opus",
             Self::Claude3Sonnet => "Claude 3 Sonnet",
             Self::Claude3_5Haiku => "Claude 3.5 Haiku",
+            Self::Claude3_7Sonnet => "Claude 3.7 Sonnet",
             Self::AmazonNovaLite => "Amazon Nova Lite",
             Self::AmazonNovaMicro => "Amazon Nova Micro",
             Self::AmazonNovaPro => "Amazon Nova Pro",
@@ -166,7 +172,8 @@ impl Model {
             Self::Claude3_5Sonnet
             | Self::Claude3Opus
             | Self::Claude3Sonnet
-            | Self::Claude3_5Haiku => 200_000,
+            | Self::Claude3_5Haiku
+            | Self::Claude3_7Sonnet => 200_000,
             Self::Custom { max_tokens, .. } => *max_tokens,
             _ => 200_000,
         }
@@ -188,7 +195,8 @@ impl Model {
             Self::Claude3_5Sonnet
             | Self::Claude3Opus
             | Self::Claude3Sonnet
-            | Self::Claude3_5Haiku => 1.0,
+            | Self::Claude3_5Haiku
+            | Self::Claude3_7Sonnet => 1.0,
             Self::Custom {
                 default_temperature,
                 ..