I’m building an app that calls an LLM for several different tasks: short rewrites, longer explanations, and questions that need current information. It’s tempting to send every request to the same model, but some requests seem like a better fit for OpenAI or Claude, while others might benefit from Perplexity or a lower-cost option such as DeepSeek. Grok is another provider I’m considering.
That leads to a bigger question: is request-level model routing actually worth adding, or does it create more operational trouble than it saves?
What would the router need to know?
The obvious approach is to classify each incoming request and pick a provider based on its task. A small routing classifier might distinguish between “needs recent sources,” “simple transformation,” and “complex reasoning.” But that classifier adds another step, another possible failure, and potentially more latency or API cost. If it mislabels a request, the app may send it to a model that is fast or cheap but poorly suited to the job.
Rules based on the endpoint or a user-selected mode might be more predictable. The tradeoff is that users don’t always describe their intent in a neat category, and a single feature can contain several kinds of requests.
The part I’m unsure about
Comparing models on a handful of sample prompts doesn’t tell me how the routing system will behave in production. Providers can have different response times, tool support, and provider-specific behavior. Even if a route is sensible most of the time, it may perform badly for a particular language, output format, or edge case.
There’s also the user experience to consider. If a request is routed to a slower model because the app thinks it needs deeper reasoning, that choice should still fit the product’s latency budget. And if the chosen provider is unavailable, I’d need a clear fallback path that doesn’t quietly change the quality or format of the answer in a surprising way.
How are you deciding whether routing helps?
I’m interested in what teams measure before putting this into a live product. Do you compare the router against a single-model baseline using real task categories? Do you keep routing rules simple and explicit, or let another model make the choice? I’d also like to know what you put in routing decision logs so you can diagnose a bad answer without retaining more user content than necessary.
For anyone running multiple LLM providers, what does a practical model routing policy look like? I’m especially curious about whether the improvement in cost or answer quality was large enough to justify maintaining the extra logic.