diff --git a/assets/settings/default.json b/assets/settings/default.json index ba12c360527301e5a96e08ae9a8db6a5f9ab4755..26df4527bc816d5fac4fd3610b5fea3aca15c2f4 100644 --- a/assets/settings/default.json +++ b/assets/settings/default.json @@ -714,7 +714,7 @@ "version": "2", // Whether the agent is enabled. "enabled": true, - /// What completion mode to start new threads in, if available. Can be 'normal' or 'max'. + /// What completion mode to start new threads in, if available. Can be 'normal' or 'burn'. "preferred_completion_mode": "normal", // Whether to show the agent panel button in the status bar. "button": true, diff --git a/crates/agent/src/agent_panel.rs b/crates/agent/src/agent_panel.rs index 9f9ddb5577ff11c71f3d70da426ccbcafb0dac14..4da779480e737f35981f43cd07d90ec1ce7f0cce 100644 --- a/crates/agent/src/agent_panel.rs +++ b/crates/agent/src/agent_panel.rs @@ -1315,8 +1315,8 @@ impl AgentPanel { let current_mode = thread.completion_mode(); thread.set_completion_mode(match current_mode { - CompletionMode::Max => CompletionMode::Normal, - CompletionMode::Normal => CompletionMode::Max, + CompletionMode::Burn => CompletionMode::Normal, + CompletionMode::Normal => CompletionMode::Burn, }); }); }); @@ -2681,7 +2681,7 @@ impl AgentPanel { .on_click(cx.listener(|this, _, window, cx| { this.thread.update(cx, |active_thread, cx| { active_thread.thread().update(cx, |thread, _cx| { - thread.set_completion_mode(CompletionMode::Max); + thread.set_completion_mode(CompletionMode::Burn); }); }); this.continue_conversation(window, cx); @@ -3078,7 +3078,7 @@ impl Render for AgentPanel { .on_action(cx.listener(|this, _: &ContinueWithBurnMode, window, cx| { this.thread.update(cx, |active_thread, cx| { active_thread.thread().update(cx, |thread, _cx| { - thread.set_completion_mode(CompletionMode::Max); + thread.set_completion_mode(CompletionMode::Burn); }); }); this.continue_conversation(window, cx); diff --git a/crates/agent/src/message_editor.rs b/crates/agent/src/message_editor.rs index d5508ae8d4524687a8fc41e186dfca34bf70f0b6..704425e2122d17687feb3156a5b37098871731de 100644 --- a/crates/agent/src/message_editor.rs +++ b/crates/agent/src/message_editor.rs @@ -481,8 +481,8 @@ impl MessageEditor { let active_completion_mode = thread.completion_mode(); thread.set_completion_mode(match active_completion_mode { - CompletionMode::Max => CompletionMode::Normal, - CompletionMode::Normal => CompletionMode::Max, + CompletionMode::Burn => CompletionMode::Normal, + CompletionMode::Normal => CompletionMode::Burn, }); }); } @@ -495,8 +495,8 @@ impl MessageEditor { } let active_completion_mode = thread.completion_mode(); - let max_mode_enabled = active_completion_mode == CompletionMode::Max; - let icon = if max_mode_enabled { + let burn_mode_enabled = active_completion_mode == CompletionMode::Burn; + let icon = if burn_mode_enabled { IconName::ZedBurnModeOn } else { IconName::ZedBurnMode @@ -506,13 +506,13 @@ impl MessageEditor { IconButton::new("burn-mode", icon) .icon_size(IconSize::Small) .icon_color(Color::Muted) - .toggle_state(max_mode_enabled) + .toggle_state(burn_mode_enabled) .selected_icon_color(Color::Error) .on_click(cx.listener(|this, _event, window, cx| { this.toggle_burn_mode(&ToggleBurnMode, window, cx); })) .tooltip(move |_window, cx| { - cx.new(|_| MaxModeTooltip::new().selected(max_mode_enabled)) + cx.new(|_| MaxModeTooltip::new().selected(burn_mode_enabled)) .into() }) .into_any_element(), diff --git a/crates/agent_settings/src/agent_settings.rs b/crates/agent_settings/src/agent_settings.rs index c4d6d19dd18f26ec431ef433b61d3ed53c4193ae..72a1f6865cc9e5ca0930b2e110b883d0690a4e92 100644 --- a/crates/agent_settings/src/agent_settings.rs +++ b/crates/agent_settings/src/agent_settings.rs @@ -689,14 +689,14 @@ pub struct AgentSettingsContentV2 { pub enum CompletionMode { #[default] Normal, - Max, + Burn, } impl From for zed_llm_client::CompletionMode { fn from(value: CompletionMode) -> Self { match value { CompletionMode::Normal => zed_llm_client::CompletionMode::Normal, - CompletionMode::Max => zed_llm_client::CompletionMode::Max, + CompletionMode::Burn => zed_llm_client::CompletionMode::Max, } } } diff --git a/crates/assistant_context_editor/src/context_editor.rs b/crates/assistant_context_editor/src/context_editor.rs index 13c09394dce10b905db1535093bf3073bafa9bcb..238f1a153dbe4305aa0e825c43364a2fc5baedae 100644 --- a/crates/assistant_context_editor/src/context_editor.rs +++ b/crates/assistant_context_editor/src/context_editor.rs @@ -2071,8 +2071,8 @@ impl ContextEditor { } let active_completion_mode = context.completion_mode(); - let max_mode_enabled = active_completion_mode == CompletionMode::Max; - let icon = if max_mode_enabled { + let burn_mode_enabled = active_completion_mode == CompletionMode::Burn; + let icon = if burn_mode_enabled { IconName::ZedBurnModeOn } else { IconName::ZedBurnMode @@ -2082,18 +2082,18 @@ impl ContextEditor { IconButton::new("burn-mode", icon) .icon_size(IconSize::Small) .icon_color(Color::Muted) - .toggle_state(max_mode_enabled) + .toggle_state(burn_mode_enabled) .selected_icon_color(Color::Error) .on_click(cx.listener(move |this, _event, _window, cx| { this.context().update(cx, |context, _cx| { context.set_completion_mode(match active_completion_mode { - CompletionMode::Max => CompletionMode::Normal, - CompletionMode::Normal => CompletionMode::Max, + CompletionMode::Burn => CompletionMode::Normal, + CompletionMode::Normal => CompletionMode::Burn, }); }); })) .tooltip(move |_window, cx| { - cx.new(|_| MaxModeTooltip::new().selected(max_mode_enabled)) + cx.new(|_| MaxModeTooltip::new().selected(burn_mode_enabled)) .into() }) .into_any_element(), diff --git a/crates/language_model/src/language_model.rs b/crates/language_model/src/language_model.rs index 45c3d0ba5b770115b8a4aeb05d662262ea3f0faf..d7c6696b8aeaff60e8cff9b32d83ea2f3cdbe8ab 100644 --- a/crates/language_model/src/language_model.rs +++ b/crates/language_model/src/language_model.rs @@ -242,7 +242,7 @@ pub trait LanguageModel: Send + Sync { /// Whether this model supports choosing which tool to use. fn supports_tool_choice(&self, choice: LanguageModelToolChoice) -> bool; - /// Returns whether this model supports "max mode"; + /// Returns whether this model supports "burn mode"; fn supports_max_mode(&self) -> bool { false } diff --git a/docs/src/ai/models.md b/docs/src/ai/models.md index 3bbb88a133248826039985637b94bb4d88826eaa..d2fe38a684555bc0507d8f28c8a480b92e6b44dd 100644 --- a/docs/src/ai/models.md +++ b/docs/src/ai/models.md @@ -3,41 +3,44 @@ Zed’s plans offer hosted versions of major LLM’s, generally with higher rate limits than individual API keys. We’re working hard to expand the models supported by Zed’s subscription offerings, so please check back often. -| Model | Provider | Max Mode | Context Window | Price per Prompt | Price per Request | -| ----------------- | --------- | -------- | -------------- | ---------------- | ----------------- | -| Claude 3.5 Sonnet | Anthropic | ❌ | 60k | $0.04 | N/A | -| Claude 3.7 Sonnet | Anthropic | ❌ | 120k | $0.04 | N/A | -| Claude 3.7 Sonnet | Anthropic | ✅ | 200k | N/A | $0.05 | -| Claude Sonnet 4 | Anthropic | ❌ | 120k | $0.04 | N/A | -| Claude Sonnet 4 | Anthropic | ✅ | 200k | N/A | $0.05 | +| Model | Provider | Burn Mode | Context Window | Price per Prompt | Price per Request | +| ----------------- | --------- | --------- | -------------- | ---------------- | ----------------- | +| Claude 3.5 Sonnet | Anthropic | ❌ | 60k | $0.04 | N/A | +| Claude 3.7 Sonnet | Anthropic | ❌ | 120k | $0.04 | N/A | +| Claude 3.7 Sonnet | Anthropic | ✅ | 200k | N/A | $0.05 | +| Claude Sonnet 4 | Anthropic | ❌ | 120k | $0.04 | N/A | +| Claude Sonnet 4 | Anthropic | ✅ | 200k | N/A | $0.05 | ## Usage {#usage} -The models above can be used with the prompts included in your plan. For models not marked with [“Max Mode”](#max-mode), each prompt is counted against the monthly limit of your plan. +The models above can be used with the prompts included in your plan. For models not marked with [“Burn Mode”](#burn-mode), each prompt is counted against the monthly limit of your plan. If you’ve exceeded your limit for the month, and are on a paid plan, you can enable usage-based pricing to continue using models for the rest of the month. See [Plans and Usage](./plans-and-usage.md) for more information. -Non-Max Mode usage will use up to 25 tool calls per one prompt. If your prompt extends beyond 25 tool calls, Zed will ask if you’d like to continue, which will consume a second prompt. +Non-Burn Mode usage will use up to 25 tool calls per one prompt. If your prompt extends beyond 25 tool calls, Zed will ask if you’d like to continue, which will consume a second prompt. -## Max Mode {#max-mode} +## Burn Mode {#burn-mode} -In Max Mode, we enable models to use [large context windows](#context-windows), unlimited tool calls, and other capabilities for expanded reasoning, to allow an unfettered agentic experience. +> Note: "Burn Mode" is the new name for what was previously called "Max Mode". +> Currently, the new terminology is only available in Preview and will follow to Stable in the next version. -Because of the increased cost to Zed, each subsequent request beyond the initial user prompt in Max Mode models is counted as a prompt for metering. +In Burn Mode, we enable models to use [large context windows](#context-windows), unlimited tool calls, and other capabilities for expanded reasoning, to allow an unfettered agentic experience. -In addition, usage-based pricing per request is slightly more expensive for Max Mode models than usage-based pricing per prompt for regular models. +Because of the increased cost to Zed, each subsequent request beyond the initial user prompt in Burn Mode models is counted as a prompt for metering. -> Note that the Agent Panel using a Max Mode model may consume a good bit of your monthly prompt capacity, if many tool calls are used. +In addition, usage-based pricing per request is slightly more expensive for Burn Mode models than usage-based pricing per prompt for regular models. + +> Note that the Agent Panel using a Burn Mode model may consume a good bit of your monthly prompt capacity, if many tool calls are used. > We encourage you to think through what model is best for your needs before leaving the Agent Panel to work. By default, all threads and [text threads](./text-threads.md) start in normal mode. -However, you can use the `agent.preferred_completion_mode` setting to have Max Mode activated by default. +However, you can use the `agent.preferred_completion_mode` setting to have Burn Mode activated by default. ## Context Windows {#context-windows} A context window is the maximum span of text and code an LLM can consider at once, including both the input prompt and output generated by the model. -In [Max Mode](#max-mode), we increase context window size to allow models to have enhanced reasoning capabilities. +In [Burn Mode](#burn-mode), we increase context window size to allow models to have enhanced reasoning capabilities. Each Agent thread and text thread in Zed maintains its own context window. The more prompts, attached files, and responses included in a session, the larger the context window grows. @@ -47,5 +50,7 @@ For best results, it’s recommended you take a purpose-based approach to Agent ## Tool Calls {#tool-calls} Models can use [tools](./tools.md) to interface with your code, search the web, and perform other useful functions. -In [Max Mode](#max-mode), models can use an unlimited number of tools per prompt, with each tool call counting as a prompt for metering purposes. -For non-Max Mode models, you'll need to interact with the model every 25 tool calls to continue, at which point a new prompt will be counted against your plan limit. + +In [Burn Mode](#burn-mode), models can use an unlimited number of tools per prompt, with each tool call counting as a prompt for metering purposes. + +For non-Burn Mode models, you'll need to interact with the model every 25 tool calls to continue, at which point a new prompt will be counted against your plan limit. diff --git a/docs/src/ai/plans-and-usage.md b/docs/src/ai/plans-and-usage.md index 397e9ad76373115399e50cdb9f8ad2a0717b445f..a1da17f50de5057740e8f0d52d87f94afe3c13e9 100644 --- a/docs/src/ai/plans-and-usage.md +++ b/docs/src/ai/plans-and-usage.md @@ -15,7 +15,7 @@ Please note that if you’re interested in just using Zed as the world’s faste - A `request` in Zed is a response to a `prompt`, plus any tool calls that are initiated as part of that response. There may be one `request` per `prompt`, or many. Most models offered by Zed are metered per-prompt. -Some models that use large context windows and unlimited tool calls ([“Max Mode”](./models.md#max-mode)) count each individual request within a prompt against your prompt limit, since the agentic work spawned by the prompt is expensive to support. +Some models that use large context windows and unlimited tool calls ([“Burn Mode”](./models.md#burn-mode)) count each individual request within a prompt against your prompt limit, since the agentic work spawned by the prompt is expensive to support. See [the Models page](./models.md) for a list of which subset of models are metered by request.