You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Follow-up to #3409 / #3429, splitting out the layer that no static list can own.
#3429 resolves which free models are eligible (models.dev snapshot) and anonymously served (candidates ∩ /zen/v1/models at the discovery seam). The remaining layer is per-request availability, and the evidence from that thread shows why it must be reactive, at the Runtime Host execution seam:
429 FreeUsageLimitError is per-IP and point-in-time: the same id probed 429 and completed fine within hours, and the "healthiest" default was itself failing with a transient upstream 502 at one probe. No snapshot, listing, or pre-probe can encode this — pre-probing free models even burns the very quota it tries to measure.
Proposed direction (matching the reviewer's "Runtime Host owns connection-local health and reversible fallback"):
On a rate-limit/availability failure from a connection with other enabled models, fall back to the next enabled model within the turn, with a visible notice and without persisting a silent default change (reversible once the original recovers).
Treat an empty-content 200 completion as a model failure too — the muse-spark case shows status codes alone cannot gate health.
Per CONTRIBUTING, (1) changes user-visible execution behavior and should go through maintainer decision before implementation — this issue is that request.
Analysis and drafting AI-assisted (Claude Code); probes and diagnostics are from the linked PR discussion.
Follow-up to #3409 / #3429, splitting out the layer that no static list can own.
#3429 resolves which free models are eligible (models.dev snapshot) and anonymously served (candidates ∩
/zen/v1/modelsat the discovery seam). The remaining layer is per-request availability, and the evidence from that thread shows why it must be reactive, at the Runtime Host execution seam:FreeUsageLimitErroris per-IP and point-in-time: the same id probed 429 and completed fine within hours, and the "healthiest" default was itself failing with a transient upstream 502 at one probe. No snapshot, listing, or pre-probe can encode this — pre-probing free models even burns the very quota it tries to measure.Recoverable: false) and the user must switch models by hand (see the diagnostic in fix(core): derive the OpenCode Free model set from the models.dev snapshot #3429's discussion).Proposed direction (matching the reviewer's "Runtime Host owns connection-local health and reversible fallback"):
Per CONTRIBUTING, (1) changes user-visible execution behavior and should go through maintainer decision before implementation — this issue is that request.
Analysis and drafting AI-assisted (Claude Code); probes and diagnostics are from the linked PR discussion.