The rule should fit on one page and be readable by a non-engineer, because the person who writes the briefs should be able to predict the route. Adopt this and edit it.
Send a task to the small model only when all four conditions hold. The brief asks for fewer than 150 words. It contains at most two factual slots (product name and price, say). An approved reference draft exists in the same format, channel and tone. The task needs no original argument, point of view, or claim the brand has not already made.
Send everything else to the large model: any task over the word limit, any task with three or more constraints (a headline carrying a benefit, a number and a legal qualifier), any task with no approved reference, and any task that must take a position.
The "approved reference" condition does the most work. A small model has less room to infer an unstated format, so a finished example of the exact output shape replaces inference with pattern matching. Few-shot examples are a standard prompt section for exactly this reason; a worked example of ideal behavior is one of six required sections in a production prompt structure the Vapi prompting guide.
The "original argument" condition catches where small models fail most visibly. A piece that must explain why a category is changing needs several claims held in tension and a choice about which to keep. That is reasoning depth, and reasoning depth is the first thing to check before routing down.
| Check | Small model | Large model |
|---|
| Word count | Under 150 words | 150 words or more |
| Factual slots | Two or fewer | Three or more |
| Approved reference in same format | Yes | No, or only a sketch |
| Original argument needed | No | Yes |
| Legal or regulated claims | Absent | Present |
| On failure | Escalate to large model | Human review |
The last row matters. A static rule is usually the best first implementation because it is easy to understand and evaluate the PrompTessor routing guide. Give it an escape hatch anyway. If small model output fails a cheap structural check (wrong length, missing slot, banned phrase), escalate that task to the large model rather than regenerating small. That is cascade routing, and cascades cut blended cost substantially when most traffic resolves in the cheap tier the TrueFoundry routing writeup.
One caution. Learned routers that predict the best model can generalize poorly when deployment traffic differs from training data, and a simple rule-based alternative has held up better across domains in published comparisons the task-aware routing paper. For a workload with a handful of stable task types, a written rule is more transparent and more robust. Reach for a classifier only when task types are too many to enumerate or briefs arrive untagged.
def route(task):
if task.legal_review_required:
return "large"
if task.words > 150 or len(task.factual_slots) > 2:
return "large"
if not task.has_approved_reference or task.needs_original_argument:
return "large"
return "small"
Keep the route in your production trace next to the output, so a bad draft shows which path produced it. Tracking the chosen model is a standard debugging recommendation the PrompTessor routing guide.