Provider-String Routing
Select the model and provider for a request through a single namespaced string (`provider/model`) backed by env-var credentials, so the caller spec...
Intent & Description
π― Intent
Select the model and provider for a request through a single namespaced string (provider/model) backed by env-var credentials, so the caller specifies what to run with one parameter rather than a typed provider object.
π Context
A team is building an application that needs to talk to several language-model providers and many model variants β OpenAI, Anthropic, Google, xAI, OpenRouter, and others β possibly choosing between them on a per-request basis for cost lanes, experiments, or tenant-specific routing. The application is otherwise model-agnostic; it does not need to depend on the typed object hierarchy of any one provider’s software development kit. The team controls the call sites where each model invocation happens.
π‘ Solution
Define a unified language-model interface and a registry of providers keyed by short prefix (openai/, anthropic/, google/, xai/, openrouter/...). Each provider implementation knows how to read its credentials from environment variables. The call site takes a single string ('anthropic/claude-sonnet-4-6') and the runtime resolves provider, credentials, and capability flags. Pair with provider-fallback (chain strings for resilience), multi-model-routing (pick a string by quality/cost), and vendor-lock-in (this is its mirror β the un-locked version).
Real-world Use Case
- The application targets multiple providers and may change the mix over time.
- Per-call routing (experiments, A/B, cost lanes) shares a single call site.
- Credentials are managed by environment, not by application code.
- A central capability registry is acceptable to track which providers support which features.
Source
Advantages
- Switching provider is a string change.
- Per-call experiments and A/B routing share a single call site.
- Configuration moves out of code into environment.
- Composable with provider-fallback and multi-model-routing without further abstraction.
Disadvantages
- String typing loses compile-time checking of valid provider/model combinations.
- Per-provider capability gaps must be discoverable at runtime, not at type-check time.
- Misspelled identifiers fail at runtime rather than at edit time.
- Credential rotation depends on the env-var convention being consistent across providers.