Fallback: keep a model serving when it fails
A fallback keeps requests answered when a model fails. Nine scenarios cover the ones people set most often, worked against one company so the examples build.
Available in Release 1. This page describes the shipped fallback-policy behavior for Enterprise deployments.
The public contract calls this a Fallback Policy. The generated API still contains the compatibility names FallbackChainPolicy and chain; new configuration uses grouped entries, with one protected model and its ordered fallback_models per entry. See the fallback policy implementation and the scope and upsert contract.
Release 1 contract
- A policy entry protects one
(model, provider)pair. Itsfallback_modelsare tried in order only after the protected model fails with a configured retryable category. - New policy resolution is API key > project > organization/customer. The winning scope supplies the complete entry; entries are not merged with a broader scope.
- An empty
fallback_modelslist explicitly disables inherited fallback for that protected model. - Tags are not a new fallback-policy authoring scope. Existing tag-targeted rows remain a legacy compatibility path and may still appear in effective-policy results.
- A complete-set upsert is safe to replay. It replaces the managed set, so an entry omitted from the next desired set is removed rather than left behind.
- Fallback targets are not resolved recursively. The configured entry is the complete attempt sequence.
What a fallback is
A fallback belongs to a model. You pick the model you want protected, then list what to use instead when it fails.
| Model | the one you are protecting. This is what the fallback is for |
| Fallback model | what to use instead. List more than one and they are tried in order |
| Fall back on | which failures move to the next model: a timeout, a rate limit, a server error |
One model, one fallback. Ten models that need protecting means ten fallbacks, each named by its own model.
Where it applies is separate. Set a fallback for the whole organization and every project gets it, including projects created later. Set one on a single project when only that project needs it, or on a single API key when one caller must behave differently. The most specific canonical scope wins, and it is the whole answer. Narrowing changes who it reaches; it does not change what the fallback is.
The order is the point. Requests use the primary until it fails. A fallback model never takes traffic while the model is healthy. This is not a traffic split, which sends a set share of requests elsewhere all the time.
Fallback is not failover. Fallback moves a request to a different model. Failover moves traffic between data planes in a group, and is set up with your DNS. They are different mechanisms and neither replaces the other.
The company
Acme reaches the same models two ways:
| Provider | Models |
|---|---|
openai | gpt-5.6-sol and the rest, direct |
openai-azure | the same models, through Azure |
Every model has an entry on both, and normal traffic goes to openai. Acme's catalog also carries gpt-5.6-luna, which costs a fraction of gpt-5.6-sol.
Why there are two is up to you: a second vendor for the same model, the same vendor bought through a cloud, the same model in another region, or a cheaper model standing in for a better one. Nothing below depends on which, and the two do not have to be in different places.