agent: Remove unused max monthly spend reached error (#30615)

This PR removes the code for showing the max monthly spend limit reached
error, as it is no longer used.

Release Notes:

- N/A
This commit is contained in:
Marshall Bowers 2025-05-13 11:43:13 +02:00 committed by GitHub
parent 29da105dd5
commit 7cad943fde
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 9 additions and 143 deletions

View file

@ -2439,9 +2439,6 @@ impl AgentPanel {
.occlude() .occlude()
.child(match last_error { .child(match last_error {
ThreadError::PaymentRequired => self.render_payment_required_error(cx), ThreadError::PaymentRequired => self.render_payment_required_error(cx),
ThreadError::MaxMonthlySpendReached => {
self.render_max_monthly_spend_reached_error(cx)
}
ThreadError::ModelRequestLimitReached { plan } => { ThreadError::ModelRequestLimitReached { plan } => {
self.render_model_request_limit_reached_error(plan, cx) self.render_model_request_limit_reached_error(plan, cx)
} }
@ -2501,56 +2498,6 @@ impl AgentPanel {
.into_any() .into_any()
} }
fn render_max_monthly_spend_reached_error(&self, cx: &mut Context<Self>) -> AnyElement {
const ERROR_MESSAGE: &str = "You have reached your maximum monthly spend. Increase your spend limit to continue using Zed LLMs.";
v_flex()
.gap_0p5()
.child(
h_flex()
.gap_1p5()
.items_center()
.child(Icon::new(IconName::XCircle).color(Color::Error))
.child(Label::new("Max Monthly Spend Reached").weight(FontWeight::MEDIUM)),
)
.child(
div()
.id("error-message")
.max_h_24()
.overflow_y_scroll()
.child(Label::new(ERROR_MESSAGE)),
)
.child(
h_flex()
.justify_end()
.mt_1()
.gap_1()
.child(self.create_copy_button(ERROR_MESSAGE))
.child(
Button::new("subscribe", "Update Monthly Spend Limit").on_click(
cx.listener(|this, _, _, cx| {
this.thread.update(cx, |this, _cx| {
this.clear_last_error();
});
cx.open_url(&zed_urls::account_url(cx));
cx.notify();
}),
),
)
.child(Button::new("dismiss", "Dismiss").on_click(cx.listener(
|this, _, _, cx| {
this.thread.update(cx, |this, _cx| {
this.clear_last_error();
});
cx.notify();
},
))),
)
.into_any()
}
fn render_model_request_limit_reached_error( fn render_model_request_limit_reached_error(
&self, &self,
plan: Plan, plan: Plan,

View file

@ -22,9 +22,9 @@ use language_model::{
ConfiguredModel, LanguageModel, LanguageModelCompletionError, LanguageModelCompletionEvent, ConfiguredModel, LanguageModel, LanguageModelCompletionError, LanguageModelCompletionEvent,
LanguageModelId, LanguageModelKnownError, LanguageModelRegistry, LanguageModelRequest, LanguageModelId, LanguageModelKnownError, LanguageModelRegistry, LanguageModelRequest,
LanguageModelRequestMessage, LanguageModelRequestTool, LanguageModelToolResult, LanguageModelRequestMessage, LanguageModelRequestTool, LanguageModelToolResult,
LanguageModelToolResultContent, LanguageModelToolUseId, MaxMonthlySpendReachedError, LanguageModelToolResultContent, LanguageModelToolUseId, MessageContent,
MessageContent, ModelRequestLimitReachedError, PaymentRequiredError, RequestUsage, Role, ModelRequestLimitReachedError, PaymentRequiredError, RequestUsage, Role, SelectedModel,
SelectedModel, StopReason, TokenUsage, StopReason, TokenUsage,
}; };
use postage::stream::Stream as _; use postage::stream::Stream as _;
use project::Project; use project::Project;
@ -1688,10 +1688,6 @@ impl Thread {
if error.is::<PaymentRequiredError>() { if error.is::<PaymentRequiredError>() {
cx.emit(ThreadEvent::ShowError(ThreadError::PaymentRequired)); cx.emit(ThreadEvent::ShowError(ThreadError::PaymentRequired));
} else if error.is::<MaxMonthlySpendReachedError>() {
cx.emit(ThreadEvent::ShowError(
ThreadError::MaxMonthlySpendReached,
));
} else if let Some(error) = } else if let Some(error) =
error.downcast_ref::<ModelRequestLimitReachedError>() error.downcast_ref::<ModelRequestLimitReachedError>()
{ {
@ -2706,8 +2702,6 @@ impl Thread {
pub enum ThreadError { pub enum ThreadError {
#[error("Payment required")] #[error("Payment required")]
PaymentRequired, PaymentRequired,
#[error("Max monthly spend reached")]
MaxMonthlySpendReached,
#[error("Model request limit reached")] #[error("Model request limit reached")]
ModelRequestLimitReached { plan: Plan }, ModelRequestLimitReached { plan: Plan },
#[error("Message {header}: {message}")] #[error("Message {header}: {message}")]

View file

@ -21,8 +21,8 @@ use language::{AnchorRangeExt, Bias, Buffer, LanguageRegistry, OffsetRangeExt, P
use language_model::{ use language_model::{
LanguageModel, LanguageModelCacheConfiguration, LanguageModelCompletionEvent, LanguageModel, LanguageModelCacheConfiguration, LanguageModelCompletionEvent,
LanguageModelImage, LanguageModelRegistry, LanguageModelRequest, LanguageModelRequestMessage, LanguageModelImage, LanguageModelRegistry, LanguageModelRequest, LanguageModelRequestMessage,
LanguageModelToolUseId, MaxMonthlySpendReachedError, MessageContent, PaymentRequiredError, LanguageModelToolUseId, MessageContent, PaymentRequiredError, Role, StopReason,
Role, StopReason, report_assistant_event, report_assistant_event,
}; };
use open_ai::Model as OpenAiModel; use open_ai::Model as OpenAiModel;
use paths::contexts_dir; use paths::contexts_dir;
@ -447,7 +447,6 @@ impl ContextOperation {
pub enum ContextEvent { pub enum ContextEvent {
ShowAssistError(SharedString), ShowAssistError(SharedString),
ShowPaymentRequiredError, ShowPaymentRequiredError,
ShowMaxMonthlySpendReachedError,
MessagesEdited, MessagesEdited,
SummaryChanged, SummaryChanged,
SummaryGenerated, SummaryGenerated,
@ -2155,12 +2154,6 @@ impl AssistantContext {
metadata.status = MessageStatus::Canceled; metadata.status = MessageStatus::Canceled;
}); });
Some(error.to_string()) Some(error.to_string())
} else if error.is::<MaxMonthlySpendReachedError>() {
cx.emit(ContextEvent::ShowMaxMonthlySpendReachedError);
this.update_metadata(assistant_message_id, cx, |metadata| {
metadata.status = MessageStatus::Canceled;
});
Some(error.to_string())
} else { } else {
let error_message = error let error_message = error
.chain() .chain()

View file

@ -114,7 +114,6 @@ type MessageHeader = MessageMetadata;
#[derive(Clone)] #[derive(Clone)]
enum AssistError { enum AssistError {
PaymentRequired, PaymentRequired,
MaxMonthlySpendReached,
Message(SharedString), Message(SharedString),
} }
@ -732,9 +731,6 @@ impl ContextEditor {
ContextEvent::ShowPaymentRequiredError => { ContextEvent::ShowPaymentRequiredError => {
self.last_error = Some(AssistError::PaymentRequired); self.last_error = Some(AssistError::PaymentRequired);
} }
ContextEvent::ShowMaxMonthlySpendReachedError => {
self.last_error = Some(AssistError::MaxMonthlySpendReached);
}
} }
} }
@ -2107,9 +2103,6 @@ impl ContextEditor {
.occlude() .occlude()
.child(match last_error { .child(match last_error {
AssistError::PaymentRequired => self.render_payment_required_error(cx), AssistError::PaymentRequired => self.render_payment_required_error(cx),
AssistError::MaxMonthlySpendReached => {
self.render_max_monthly_spend_reached_error(cx)
}
AssistError::Message(error_message) => { AssistError::Message(error_message) => {
self.render_assist_error(error_message, cx) self.render_assist_error(error_message, cx)
} }
@ -2158,48 +2151,6 @@ impl ContextEditor {
.into_any() .into_any()
} }
fn render_max_monthly_spend_reached_error(&self, cx: &mut Context<Self>) -> AnyElement {
const ERROR_MESSAGE: &str = "You have reached your maximum monthly spend. Increase your spend limit to continue using Zed LLMs.";
v_flex()
.gap_0p5()
.child(
h_flex()
.gap_1p5()
.items_center()
.child(Icon::new(IconName::XCircle).color(Color::Error))
.child(Label::new("Max Monthly Spend Reached").weight(FontWeight::MEDIUM)),
)
.child(
div()
.id("error-message")
.max_h_24()
.overflow_y_scroll()
.child(Label::new(ERROR_MESSAGE)),
)
.child(
h_flex()
.justify_end()
.mt_1()
.child(
Button::new("subscribe", "Update Monthly Spend Limit").on_click(
cx.listener(|this, _, _window, cx| {
this.last_error = None;
cx.open_url(&zed_urls::account_url(cx));
cx.notify();
}),
),
)
.child(Button::new("dismiss", "Dismiss").on_click(cx.listener(
|this, _, _window, cx| {
this.last_error = None;
cx.notify();
},
))),
)
.into_any()
}
fn render_assist_error( fn render_assist_error(
&self, &self,
error_message: &SharedString, error_message: &SharedString,

View file

@ -133,18 +133,6 @@ impl fmt::Display for PaymentRequiredError {
} }
} }
#[derive(Error, Debug)]
pub struct MaxMonthlySpendReachedError;
impl fmt::Display for MaxMonthlySpendReachedError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(
f,
"Maximum spending limit reached for this month. For more usage, increase your spending limit."
)
}
}
#[derive(Error, Debug)] #[derive(Error, Debug)]
pub struct ModelRequestLimitReachedError { pub struct ModelRequestLimitReachedError {
pub plan: Plan, pub plan: Plan,

View file

@ -20,7 +20,7 @@ use language_model::{
}; };
use language_model::{ use language_model::{
LanguageModelAvailability, LanguageModelCompletionEvent, LanguageModelProvider, LlmApiToken, LanguageModelAvailability, LanguageModelCompletionEvent, LanguageModelProvider, LlmApiToken,
MaxMonthlySpendReachedError, PaymentRequiredError, RefreshLlmTokenListener, PaymentRequiredError, RefreshLlmTokenListener,
}; };
use proto::Plan; use proto::Plan;
use release_channel::AppVersion; use release_channel::AppVersion;
@ -41,9 +41,9 @@ use ui::{TintColor, prelude::*};
use zed_llm_client::{ use zed_llm_client::{
CLIENT_SUPPORTS_STATUS_MESSAGES_HEADER_NAME, CURRENT_PLAN_HEADER_NAME, CompletionBody, CLIENT_SUPPORTS_STATUS_MESSAGES_HEADER_NAME, CURRENT_PLAN_HEADER_NAME, CompletionBody,
CompletionRequestStatus, CountTokensBody, CountTokensResponse, EXPIRED_LLM_TOKEN_HEADER_NAME, CompletionRequestStatus, CountTokensBody, CountTokensResponse, EXPIRED_LLM_TOKEN_HEADER_NAME,
MAX_LLM_MONTHLY_SPEND_REACHED_HEADER_NAME, MODEL_REQUESTS_RESOURCE_HEADER_VALUE, MODEL_REQUESTS_RESOURCE_HEADER_VALUE, SERVER_SUPPORTS_STATUS_MESSAGES_HEADER_NAME,
SERVER_SUPPORTS_STATUS_MESSAGES_HEADER_NAME, SUBSCRIPTION_LIMIT_RESOURCE_HEADER_NAME, SUBSCRIPTION_LIMIT_RESOURCE_HEADER_NAME, TOOL_USE_LIMIT_REACHED_HEADER_NAME,
TOOL_USE_LIMIT_REACHED_HEADER_NAME, ZED_VERSION_HEADER_NAME, ZED_VERSION_HEADER_NAME,
}; };
use crate::AllLanguageModelSettings; use crate::AllLanguageModelSettings;
@ -589,13 +589,6 @@ impl CloudLanguageModel {
{ {
retries_remaining -= 1; retries_remaining -= 1;
token = llm_api_token.refresh(&client).await?; token = llm_api_token.refresh(&client).await?;
} else if status == StatusCode::FORBIDDEN
&& response
.headers()
.get(MAX_LLM_MONTHLY_SPEND_REACHED_HEADER_NAME)
.is_some()
{
return Err(anyhow!(MaxMonthlySpendReachedError));
} else if status == StatusCode::FORBIDDEN } else if status == StatusCode::FORBIDDEN
&& response && response
.headers() .headers()