Most routing setups look at the input. They classify the prompt as simple or complex, count the characters, look for keywords like "kubernetes" or "refund," and send the request to a tier. That is a reasonable first signal, and the routing literature treats request complexity as the central question: what makes one request harder than another, and which model is the cheapest one that can still do it well (model routing and cascades). What that framing tends to miss is that difficulty and length are different axes. A hard question can have a one-paragraph answer. An easy question can ask for a 40-row table.
The reason this matters is the price shape. Take the published rates for a recent model family, read from the provider's pricing page: the small tier charges $0.10 per million input tokens against $0.50 per million output tokens, and the top tier charges $10.00 per million input tokens against $50.00 per million output tokens (OpenAI API pricing). In both cases output costs five times input. So a prompt of 2,000 input tokens that produces 50 output tokens is dominated by its input, while a prompt of 300 input tokens that produces 1,500 output tokens is dominated by its output. A router that only looks at the 300 tokens sees a tiny request. The request is not tiny.
There is a second effect that is worse than cost. Output length is also a capacity question. If a request needs 3,000 output tokens and your tier's per-call ceiling or your configured max_tokens is lower, the generation stops mid-sentence and the provider reports a finish reason of "length" rather than an error (structured output failure modes). For free text that means a truncated answer. For JSON output it means a payload that fails to parse because the closing braces never arrived, and strict schema enforcement only guarantees conformance for complete generations (structured outputs and schemas). A router that ignores output length does not just overspend. It ships broken responses that look like successes.



