Description
In some organizations, LLM limits are configured for a one-minute window rather than a long-term quota. When the provider returns HTTP 400 with a JSON detail containing rate limit exceeded, OpenCode currently treats the response as a terminal processing failure instead of retrying the request.
This stops the current session even though the request may succeed after the one-minute limit window resets.
Steps to reproduce
- Configure an organization-managed LLM provider with a one-minute request or token limit.
- Send a prompt until the provider limit is reached.
- Receive an HTTP 400 response with a JSON body containing a detail field whose value is rate limit exceeded.
- Observe that OpenCode stops processing instead of entering the existing retry flow.
Expected behavior
OpenCode should retry this provider-specific HTTP 400 rate-limit response using the existing retry flow, while keeping generic HTTP 400 client errors non-retryable.
The behavior should be opt-in per provider because HTTP 400 rate-limit responses are non-standard:
provider:
my-provider:
options:
retry400RateLimit: true
When the option is disabled or absent, the current non-retryable behavior should remain unchanged.
Environment
Description
In some organizations, LLM limits are configured for a one-minute window rather than a long-term quota. When the provider returns HTTP 400 with a JSON detail containing rate limit exceeded, OpenCode currently treats the response as a terminal processing failure instead of retrying the request.
This stops the current session even though the request may succeed after the one-minute limit window resets.
Steps to reproduce
Expected behavior
OpenCode should retry this provider-specific HTTP 400 rate-limit response using the existing retry flow, while keeping generic HTTP 400 client errors non-retryable.
The behavior should be opt-in per provider because HTTP 400 rate-limit responses are non-standard:
When the option is disabled or absent, the current non-retryable behavior should remain unchanged.
Environment