Seven model families do the same work here. Making that swap mean anything is the actual engineering, because the vendors agree on almost nothing that matters.
Where they refuse to be the same
The vendors' CLIs are incompatible in every detail that matters, so the shared interface is kept deliberately tiny. They disagree on how they authenticate, on the instruction filename, on whether they can see an image, on what a reasoning-effort knob is called, and on what a model is even named. The port covers only the three things they genuinely share, and every difference stays inside its own adapter, because widening it to cover the rest is how you get an abstraction that lies.
A model id is not portable, so tiers are the currency
Model names do not cross vendors, so the system picks a tier and resolves a concrete id only for whichever family ends up running. A task asks for high, not for a name, so if the run moves to another vendor it still asks for high and that vendor's own model answers. The exception is a model someone pinned by hand: it cannot survive the move, so it is dropped and the ticket says what ran instead.
Health is measured, not configured
A configured key proves nothing, so every backend gets a real cheap call and the verdict, classified as quota, auth, a failed turn, an upstream error or unreachable, is what drives the fallback. The ping names no model on purpose, testing the key against the CLI's own default rather than a pinned id that may itself have been retired and would condemn a healthy backend. When something is down another mode of the same vendor is tried first, because staying with the vendor keeps the model, and the reason follows the run into the metrics and onto the ticket.
Capabilities are negotiated, not assumed
Each adapter declares what it can do, and when it cannot the system degrades in one place instead of failing. Reasoning effort is normalized once and mapped to each vendor's own knob; an adapter that cannot see images has them stripped and runs text-only rather than erroring. Writing that rule once means a new adapter inherits it for free, provided it answers honestly, and the dangerous one is the adapter that claims vision it does not have.