Most teams that adopt routing start with a single question: should a person or a model handle this? That framing leaves money on the table, because "a model" is not one price. A small model and a large model differ widely in cost per token, and a large share of traffic does not need the large one. The fix is to treat the choice as a three-way decision on a single difficulty score, with two cutoffs rather than one.
Define a difficulty score d in the range 0 to 1, where higher means harder. Pick two thresholds, t1 and t2, with t1 < t2. Then:
d < t1: send to a person.t1 <= d < t2: send to the small model.d >= t2: send to the large model.
The logic is the same one used in human-in-the-loop systems, where confidence thresholds and risk scoring route only a subset of decisions to human review, which is what makes the approach scalable in practice according to Databricks. You are not doing anything exotic. You are adding a second gate on the same axis.
The reason to keep one axis rather than two scores is calibration. A single labeled sample of requests, each scored for difficulty and labeled with which option actually succeeded, is enough to fit both cutoffs. Two separate scores would need two separate samples, two calibration curves, and two things to keep in sync. One sample, two cutoffs.
The routing literature treats difficulty-aware routing as one of several paradigms, alongside uncertainty-based routing and cascading, and notes that practical systems are usually compositional, mixing paradigms under operational constraints per this survey of dynamic model routing. The two-cutoff design is a small composition: a difficulty estimate plus a confidence adjustment.



