From 1bdcf318a6e687532572209962d7ba375d9a91e1 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Wed, 16 Apr 2025 14:13:00 -0400 Subject: [PATCH] proto: Add `ZedProTrial` to `Plan` (#28885) This PR adds the `ZedProTrial` member to the `Plan` enum. Release Notes: - N/A --- crates/agent/src/assistant_panel.rs | 8 ++++++-- crates/collab/src/rpc.rs | 6 ++++-- crates/language_model/src/model/cloud_model.rs | 3 +++ .../src/language_model_selector.rs | 7 ++----- crates/proto/proto/app.proto | 1 + crates/title_bar/src/title_bar.rs | 1 + 6 files changed, 17 insertions(+), 9 deletions(-) diff --git a/crates/agent/src/assistant_panel.rs b/crates/agent/src/assistant_panel.rs index 6968f1b7796ad250cbd143d231cf709afe64f3d2..002f3ebcbe6f3e4aa84c3f41986b92c596c4e89d 100644 --- a/crates/agent/src/assistant_panel.rs +++ b/crates/agent/src/assistant_panel.rs @@ -1670,14 +1670,18 @@ impl AssistantPanel { cx: &mut Context, ) -> AnyElement { let error_message = match plan { - Plan::Free => "Model request limit reached. Upgrade to Zed Pro for more requests.", Plan::ZedPro => { "Model request limit reached. Upgrade to usage-based billing for more requests." } + Plan::ZedProTrial => { + "Model request limit reached. Upgrade to Zed Pro for more requests." + } + Plan::Free => "Model request limit reached. Upgrade to Zed Pro for more requests.", }; let call_to_action = match plan { - Plan::Free => "Upgrade to Zed Pro", Plan::ZedPro => "Upgrade to usage-based billing", + Plan::ZedProTrial => "Upgrade to Zed Pro", + Plan::Free => "Upgrade to Zed Pro", }; v_flex() diff --git a/crates/collab/src/rpc.rs b/crates/collab/src/rpc.rs index 87f69fbfa380f6e49f28bb0a581f8bf93ae27aee..2c8bba8b6b88004bb148c9018370f661b6200142 100644 --- a/crates/collab/src/rpc.rs +++ b/crates/collab/src/rpc.rs @@ -3707,7 +3707,9 @@ async fn count_language_model_tokens( let rate_limit: Box = match session.current_plan(&session.db().await).await? { proto::Plan::ZedPro => Box::new(ZedProCountLanguageModelTokensRateLimit), - proto::Plan::Free => Box::new(FreeCountLanguageModelTokensRateLimit), + proto::Plan::Free | proto::Plan::ZedProTrial => { + Box::new(FreeCountLanguageModelTokensRateLimit) + } }; session @@ -3827,7 +3829,7 @@ async fn compute_embeddings( let rate_limit: Box = match session.current_plan(&session.db().await).await? { proto::Plan::ZedPro => Box::new(ZedProComputeEmbeddingsRateLimit), - proto::Plan::Free => Box::new(FreeComputeEmbeddingsRateLimit), + proto::Plan::Free | proto::Plan::ZedProTrial => Box::new(FreeComputeEmbeddingsRateLimit), }; session diff --git a/crates/language_model/src/model/cloud_model.rs b/crates/language_model/src/model/cloud_model.rs index f5e6133bf5265f5812a818ebbd9810510450b66c..a6e93898160b556f0a79f5cc243998fd93be75ff 100644 --- a/crates/language_model/src/model/cloud_model.rs +++ b/crates/language_model/src/model/cloud_model.rs @@ -156,6 +156,9 @@ impl fmt::Display for ModelRequestLimitReachedError { Plan::ZedPro => { "Model request limit reached. Upgrade to usage-based billing for more requests." } + Plan::ZedProTrial => { + "Model request limit reached. Upgrade to Zed Pro for more requests." + } }; write!(f, "{message}") diff --git a/crates/language_model_selector/src/language_model_selector.rs b/crates/language_model_selector/src/language_model_selector.rs index c7b5d9cd48d56a976227093c032c565dca366e31..e8b10e3e6dbf87dc2f70b2890ee8b7cb85a9008e 100644 --- a/crates/language_model_selector/src/language_model_selector.rs +++ b/crates/language_model_selector/src/language_model_selector.rs @@ -546,7 +546,6 @@ impl PickerDelegate for LanguageModelPickerDelegate { use feature_flags::FeatureFlagAppExt; let plan = proto::Plan::ZedPro; - let is_trial = false; Some( h_flex() @@ -558,7 +557,6 @@ impl PickerDelegate for LanguageModelPickerDelegate { .justify_between() .when(cx.has_flag::(), |this| { this.child(match plan { - // Already a Zed Pro subscriber Plan::ZedPro => Button::new("zed-pro", "Zed Pro") .icon(IconName::ZedAssistant) .icon_size(IconSize::Small) @@ -568,10 +566,9 @@ impl PickerDelegate for LanguageModelPickerDelegate { window .dispatch_action(Box::new(zed_actions::OpenAccountSettings), cx) }), - // Free user - Plan::Free => Button::new( + Plan::Free | Plan::ZedProTrial => Button::new( "try-pro", - if is_trial { + if plan == Plan::ZedProTrial { "Upgrade to Pro" } else { "Try Pro" diff --git a/crates/proto/proto/app.proto b/crates/proto/proto/app.proto index 8fee40507073364db34fbb5c071649c6c49d13f6..bb1d8357c0a0181ede289f592ff634aff8a53037 100644 --- a/crates/proto/proto/app.proto +++ b/crates/proto/proto/app.proto @@ -18,6 +18,7 @@ message GetPrivateUserInfoResponse { enum Plan { Free = 0; ZedPro = 1; + ZedProTrial = 2; } message UpdateUserPlan { diff --git a/crates/title_bar/src/title_bar.rs b/crates/title_bar/src/title_bar.rs index ed929cb1f3d2c1d42d89dbc73f23b464dc668453..754f9f04bec5ed186cefe4f79bf36d188f285aa1 100644 --- a/crates/title_bar/src/title_bar.rs +++ b/crates/title_bar/src/title_bar.rs @@ -655,6 +655,7 @@ impl TitleBar { None => "", Some(proto::Plan::Free) => "Free", Some(proto::Plan::ZedPro) => "Pro", + Some(proto::Plan::ZedProTrial) => "Pro (Trial)", } ), zed_actions::OpenAccountSettings.boxed_clone(),