Detailed changes
@@ -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<Self> {
- 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",
@@ -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
}
}
@@ -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())
@@ -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) => {