diff --git a/crates/anthropic/src/anthropic.rs b/crates/anthropic/src/anthropic.rs index 7927b88000..99a5cd06f8 100644 --- a/crates/anthropic/src/anthropic.rs +++ b/crates/anthropic/src/anthropic.rs @@ -11,6 +11,8 @@ pub const ANTHROPIC_API_URL: &'static str = "https://api.anthropic.com"; #[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[derive(Clone, Debug, Default, Serialize, Deserialize, PartialEq, EnumIter)] pub enum Model { + #[serde(alias = "claude-3-5-sonnet", rename = "claude-3-5-sonnet-20240620")] + Claude3_5Sonnet, #[default] #[serde(alias = "claude-3-opus", rename = "claude-3-opus-20240229")] Claude3Opus, @@ -22,7 +24,9 @@ pub enum Model { impl Model { pub fn from_id(id: &str) -> Result { - if id.starts_with("claude-3-opus") { + if id.starts_with("claude-3-5-sonnet") { + Ok(Self::Claude3_5Sonnet) + } else if id.starts_with("claude-3-opus") { Ok(Self::Claude3Opus) } else if id.starts_with("claude-3-sonnet") { Ok(Self::Claude3Sonnet) @@ -35,6 +39,7 @@ impl Model { pub fn id(&self) -> &'static str { match self { + Model::Claude3_5Sonnet => "claude-3-5-sonnet-20240620", Model::Claude3Opus => "claude-3-opus-20240229", Model::Claude3Sonnet => "claude-3-sonnet-20240229", Model::Claude3Haiku => "claude-3-opus-20240307", @@ -43,6 +48,7 @@ impl Model { pub fn display_name(&self) -> &'static str { match self { + Self::Claude3_5Sonnet => "Claude 3.5 Sonnet", Self::Claude3Opus => "Claude 3 Opus", Self::Claude3Sonnet => "Claude 3 Sonnet", Self::Claude3Haiku => "Claude 3 Haiku", diff --git a/crates/assistant/src/assistant_settings.rs b/crates/assistant/src/assistant_settings.rs index efc726fe22..07d87961ec 100644 --- a/crates/assistant/src/assistant_settings.rs +++ b/crates/assistant/src/assistant_settings.rs @@ -24,6 +24,7 @@ pub enum CloudModel { Gpt4Turbo, #[default] Gpt4Omni, + Claude3_5Sonnet, Claude3Opus, Claude3Sonnet, Claude3Haiku, @@ -105,6 +106,7 @@ impl CloudModel { Self::Gpt4 => "gpt-4", Self::Gpt4Turbo => "gpt-4-turbo-preview", Self::Gpt4Omni => "gpt-4o", + Self::Claude3_5Sonnet => "claude-3-5-sonnet", Self::Claude3Opus => "claude-3-opus", Self::Claude3Sonnet => "claude-3-sonnet", Self::Claude3Haiku => "claude-3-haiku", @@ -118,6 +120,7 @@ impl CloudModel { Self::Gpt4 => "GPT 4", Self::Gpt4Turbo => "GPT 4 Turbo", Self::Gpt4Omni => "GPT 4 Omni", + Self::Claude3_5Sonnet => "Claude 3.5 Sonnet", Self::Claude3Opus => "Claude 3 Opus", Self::Claude3Sonnet => "Claude 3 Sonnet", Self::Claude3Haiku => "Claude 3 Haiku", @@ -130,7 +133,10 @@ impl CloudModel { Self::Gpt3Point5Turbo => 2048, Self::Gpt4 => 4096, Self::Gpt4Turbo | Self::Gpt4Omni => 128000, - Self::Claude3Opus | Self::Claude3Sonnet | Self::Claude3Haiku => 200000, + Self::Claude3_5Sonnet + | Self::Claude3Opus + | Self::Claude3Sonnet + | Self::Claude3Haiku => 200000, Self::Custom(_) => 4096, // TODO: Make this configurable } } diff --git a/crates/assistant/src/completion_provider/cloud.rs b/crates/assistant/src/completion_provider/cloud.rs index e2c157353c..1112def519 100644 --- a/crates/assistant/src/completion_provider/cloud.rs +++ b/crates/assistant/src/completion_provider/cloud.rs @@ -101,7 +101,10 @@ impl CloudCompletionProvider { count_open_ai_tokens(request, cx.background_executor()) } LanguageModel::Cloud( - CloudModel::Claude3Opus | CloudModel::Claude3Sonnet | CloudModel::Claude3Haiku, + CloudModel::Claude3_5Sonnet + | CloudModel::Claude3Opus + | CloudModel::Claude3Sonnet + | CloudModel::Claude3Haiku, ) => { // Can't find a tokenizer for Claude 3, so for now just use the same as OpenAI's as an approximation. count_open_ai_tokens(request, cx.background_executor()) diff --git a/crates/assistant/src/completion_provider/open_ai.rs b/crates/assistant/src/completion_provider/open_ai.rs index 57a718683f..5571d050c5 100644 --- a/crates/assistant/src/completion_provider/open_ai.rs +++ b/crates/assistant/src/completion_provider/open_ai.rs @@ -210,6 +210,7 @@ pub fn count_open_ai_tokens( match request.model { LanguageModel::Anthropic(_) + | LanguageModel::Cloud(CloudModel::Claude3_5Sonnet) | LanguageModel::Cloud(CloudModel::Claude3Opus) | LanguageModel::Cloud(CloudModel::Claude3Sonnet) | LanguageModel::Cloud(CloudModel::Claude3Haiku) => {