From e4eef725de16025f8133013a5e8a1f53c29b7c79 Mon Sep 17 00:00:00 2001 From: saahityaedams Date: Sat, 4 Jan 2025 00:19:29 +0530 Subject: [PATCH] Add support for Claude 3.5 Haiku model (#22323) Partly Closes #22185 Release Notes: - Added support for the Claude 3.5 Haiku model. Co-authored-by: Marshall Bowers --- crates/anthropic/src/anthropic.rs | 22 ++++++++++++++----- .../language_model/src/model/cloud_model.rs | 1 + 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/crates/anthropic/src/anthropic.rs b/crates/anthropic/src/anthropic.rs index 685deddd7d75c638f238536dd477734443e4d46e..29e42c03badd2eb4a9f840dbffb1df61a6a53d4c 100644 --- a/crates/anthropic/src/anthropic.rs +++ b/crates/anthropic/src/anthropic.rs @@ -30,6 +30,8 @@ pub enum Model { #[default] #[serde(rename = "claude-3-5-sonnet", alias = "claude-3-5-sonnet-latest")] Claude3_5Sonnet, + #[serde(rename = "claude-3-5-haiku", alias = "claude-3-5-haiku-latest")] + Claude3_5Haiku, #[serde(rename = "claude-3-opus", alias = "claude-3-opus-latest")] Claude3Opus, #[serde(rename = "claude-3-sonnet", alias = "claude-3-sonnet-latest")] @@ -55,6 +57,8 @@ impl Model { pub fn from_id(id: &str) -> Result { if id.starts_with("claude-3-5-sonnet") { Ok(Self::Claude3_5Sonnet) + } 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") { @@ -69,6 +73,7 @@ impl Model { pub fn id(&self) -> &str { match self { Model::Claude3_5Sonnet => "claude-3-5-sonnet-latest", + Model::Claude3_5Haiku => "claude-3-5-haiku-latest", Model::Claude3Opus => "claude-3-opus-latest", Model::Claude3Sonnet => "claude-3-sonnet-latest", Model::Claude3Haiku => "claude-3-haiku-latest", @@ -79,6 +84,7 @@ impl Model { pub fn display_name(&self) -> &str { match self { Self::Claude3_5Sonnet => "Claude 3.5 Sonnet", + Self::Claude3_5Haiku => "Claude 3.5 Haiku", Self::Claude3Opus => "Claude 3 Opus", Self::Claude3Sonnet => "Claude 3 Sonnet", Self::Claude3Haiku => "Claude 3 Haiku", @@ -90,11 +96,13 @@ impl Model { pub fn cache_configuration(&self) -> Option { match self { - Self::Claude3_5Sonnet | Self::Claude3Haiku => Some(AnthropicModelCacheConfiguration { - min_total_token: 2_048, - should_speculate: true, - max_cache_anchors: 4, - }), + Self::Claude3_5Sonnet | Self::Claude3_5Haiku | Self::Claude3Haiku => { + Some(AnthropicModelCacheConfiguration { + min_total_token: 2_048, + should_speculate: true, + max_cache_anchors: 4, + }) + } Self::Custom { cache_configuration, .. @@ -106,6 +114,7 @@ impl Model { pub fn max_token_count(&self) -> usize { match self { Self::Claude3_5Sonnet + | Self::Claude3_5Haiku | Self::Claude3Opus | Self::Claude3Sonnet | Self::Claude3Haiku => 200_000, @@ -116,7 +125,7 @@ impl Model { pub fn max_output_tokens(&self) -> u32 { match self { Self::Claude3Opus | Self::Claude3Sonnet | Self::Claude3Haiku => 4_096, - Self::Claude3_5Sonnet => 8_192, + Self::Claude3_5Sonnet | Self::Claude3_5Haiku => 8_192, Self::Custom { max_output_tokens, .. } => max_output_tokens.unwrap_or(4_096), @@ -126,6 +135,7 @@ impl Model { pub fn default_temperature(&self) -> f32 { match self { Self::Claude3_5Sonnet + | Self::Claude3_5Haiku | Self::Claude3Opus | Self::Claude3Sonnet | Self::Claude3Haiku => 1.0, diff --git a/crates/language_model/src/model/cloud_model.rs b/crates/language_model/src/model/cloud_model.rs index 9242f80e6e16c7398817bef5eef0309f65282b4e..804adb22f1d053652477faab49318a5ac17b390b 100644 --- a/crates/language_model/src/model/cloud_model.rs +++ b/crates/language_model/src/model/cloud_model.rs @@ -68,6 +68,7 @@ impl CloudModel { anthropic::Model::Claude3Opus | anthropic::Model::Claude3Sonnet | anthropic::Model::Claude3Haiku + | anthropic::Model::Claude3_5Haiku | anthropic::Model::Custom { .. } => { LanguageModelAvailability::RequiresPlan(Plan::ZedPro) }