The most common way embedding migrations fail is scope. A team decides to try a new provider, changes the model name in a shared config, and every product on the platform starts writing vectors from a different model into indexes built for the old one. The failure mode is rarely a clean error. More often the index keeps accepting writes until a dimension mismatch throws at insert time, which is exactly the pattern reported when a RAG stack moved from a 1024-dimension model to a 2048-dimension one in this LightRAG issue. When dimensions do line up, the damage is quieter: retrieval quality drops because two models define different geometries over the same text as described here.
A gateway route is the natural unit of blast radius. Gateways exist to give applications one integration point in front of multiple providers, translating provider-specific request and response shapes into a consistent schema per this gateway overview. That normalization is what makes a provider swap a routing decision rather than a code change. Commercial gateways make the same pitch: a governed endpoint that holds provider credentials, enforces allow-lists per key, and logs every routing decision so it can be traced as Chalk describes its model gateway.
The decision rule: if you cannot name the exact route that will change and the exact routes that will not, you are not ready to swap. One route, one product, one environment at a time.



