From baf03e355be7fd70a8809fdb29ed6ddb3fdee6fd Mon Sep 17 00:00:00 2001 From: isomo <166665970+jiahaoxiang2000@users.noreply.github.com> Date: Tue, 25 Mar 2025 17:56:27 +0800 Subject: [PATCH] copilot: Add Claude 3.7-Sonnet-Thought model to Copilot Chat (#27409) - Follow-up to: #25529 Release Notes: - Added Claude Sonnet 3.7 Thought to GitHub Copilot Chat --- crates/copilot/src/copilot_chat.rs | 12 +++++++++++- crates/language_models/src/provider/copilot_chat.rs | 2 ++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/crates/copilot/src/copilot_chat.rs b/crates/copilot/src/copilot_chat.rs index 3c3c193e78..15a4cddf20 100644 --- a/crates/copilot/src/copilot_chat.rs +++ b/crates/copilot/src/copilot_chat.rs @@ -43,6 +43,11 @@ pub enum Model { Claude3_5Sonnet, #[serde(alias = "claude-3-7-sonnet", rename = "claude-3.7-sonnet")] Claude3_7Sonnet, + #[serde( + alias = "claude-3.7-sonnet-thought", + rename = "claude-3.7-sonnet-thought" + )] + Claude3_7SonnetThinking, #[serde(alias = "gemini-2.0-flash", rename = "gemini-2.0-flash-001")] Gemini20Flash, } @@ -54,7 +59,8 @@ impl Model { | Self::Gpt4 | Self::Gpt3_5Turbo | Self::Claude3_5Sonnet - | Self::Claude3_7Sonnet => true, + | Self::Claude3_7Sonnet + | Self::Claude3_7SonnetThinking => true, Self::O3Mini | Self::O1 | Self::Gemini20Flash => false, } } @@ -68,6 +74,7 @@ impl Model { "o3-mini" => Ok(Self::O3Mini), "claude-3-5-sonnet" => Ok(Self::Claude3_5Sonnet), "claude-3-7-sonnet" => Ok(Self::Claude3_7Sonnet), + "claude-3.7-sonnet-thought" => Ok(Self::Claude3_7SonnetThinking), "gemini-2.0-flash-001" => Ok(Self::Gemini20Flash), _ => Err(anyhow!("Invalid model id: {}", id)), } @@ -82,6 +89,7 @@ impl Model { Self::O1 => "o1", Self::Claude3_5Sonnet => "claude-3-5-sonnet", Self::Claude3_7Sonnet => "claude-3-7-sonnet", + Self::Claude3_7SonnetThinking => "claude-3.7-sonnet-thought", Self::Gemini20Flash => "gemini-2.0-flash-001", } } @@ -95,6 +103,7 @@ impl Model { Self::O1 => "o1", Self::Claude3_5Sonnet => "Claude 3.5 Sonnet", Self::Claude3_7Sonnet => "Claude 3.7 Sonnet", + Self::Claude3_7SonnetThinking => "Claude 3.7 Sonnet Thinking", Self::Gemini20Flash => "Gemini 2.0 Flash", } } @@ -108,6 +117,7 @@ impl Model { Self::O1 => 20_000, Self::Claude3_5Sonnet => 200_000, Self::Claude3_7Sonnet => 90_000, + Self::Claude3_7SonnetThinking => 90_000, Model::Gemini20Flash => 128_000, } } diff --git a/crates/language_models/src/provider/copilot_chat.rs b/crates/language_models/src/provider/copilot_chat.rs index 3d41144fc6..f5cea2666e 100644 --- a/crates/language_models/src/provider/copilot_chat.rs +++ b/crates/language_models/src/provider/copilot_chat.rs @@ -186,6 +186,7 @@ impl LanguageModel for CopilotChatLanguageModel { match self.model { CopilotChatModel::Claude3_5Sonnet => count_anthropic_tokens(request, cx), CopilotChatModel::Claude3_7Sonnet => count_anthropic_tokens(request, cx), + CopilotChatModel::Claude3_7SonnetThinking => count_anthropic_tokens(request, cx), CopilotChatModel::Gemini20Flash => count_google_tokens(request, cx), _ => { let model = match self.model { @@ -195,6 +196,7 @@ impl LanguageModel for CopilotChatLanguageModel { CopilotChatModel::O1 | CopilotChatModel::O3Mini => open_ai::Model::Four, CopilotChatModel::Claude3_5Sonnet | CopilotChatModel::Claude3_7Sonnet + | CopilotChatModel::Claude3_7SonnetThinking | CopilotChatModel::Gemini20Flash => { unreachable!() }