diff --git a/crates/acp_thread/src/acp_thread.rs b/crates/acp_thread/src/acp_thread.rs index f33732f1e0f3623df5ce6833356f3547c5781adb..0fc4e9ef2a297a07e5cf30d5e609a1cdbb1d0f02 100644 --- a/crates/acp_thread/src/acp_thread.rs +++ b/crates/acp_thread/src/acp_thread.rs @@ -2240,7 +2240,24 @@ impl AcpThread { this.had_error = true; cx.emit(AcpThreadEvent::Error); log::error!("Max tokens reached. Usage: {:?}", this.token_usage); - return Err(anyhow!("Max tokens reached")); + + let exceeded_max_output_tokens = + this.token_usage.as_ref().is_some_and(|u| { + u.max_output_tokens + .is_some_and(|max| u.output_tokens >= max) + }); + + let message = if exceeded_max_output_tokens { + log::error!( + "Max output tokens reached. Usage: {:?}", + this.token_usage + ); + "Maximum output tokens reached" + } else { + log::error!("Max tokens reached. Usage: {:?}", this.token_usage); + "Maximum tokens reached" + }; + return Err(anyhow!(message)); } let canceled = matches!(r.stop_reason, acp::StopReason::Cancelled); diff --git a/crates/agent_ui/src/conversation_view.rs b/crates/agent_ui/src/conversation_view.rs index 14d85807d33f4d92ea8012c4e981df170294927c..b29b02db7341378b58935d2184d4dc90c7a51098 100644 --- a/crates/agent_ui/src/conversation_view.rs +++ b/crates/agent_ui/src/conversation_view.rs @@ -6213,13 +6213,13 @@ pub(crate) mod tests { match error { Some(ThreadError::Other { message, .. }) => { assert!( - message.contains("Max tokens reached"), - "Expected 'Max tokens reached' error, got: {}", + message.contains("Maximum tokens reached"), + "Expected 'Maximum tokens reached' error, got: {}", message ); } other => panic!( - "Expected ThreadError::Other with 'Max tokens reached', got: {:?}", + "Expected ThreadError::Other with 'Maximum tokens reached', got: {:?}", other.is_some() ), }