What is Introduce Model Cascade?
Introduce Model Cascade is an AI refactoring for LLM systems, in the Operations group. Try a cheap model first and escalate only when confidence is low.
Introduzir Cascata de Modelos
Introduce Model Cascade is an AI refactoring for LLM systems, in the Operations group. Try a cheap model first and escalate only when confidence is low.
Every request uses the most expensive model, easy ones included, and there is no spending cap. This is the No Cost Budget smell, in its high-volume form.
Try a cheaper model first and move up to a larger one only when a verifiable criterion shows the cheap answer will not do. Before building the cascade, also measure the simplest alternative: the same capable model with lower reasoning effort.
-def triage(ticket):
- return llm_parse(TRIAGE_PROMPT, ticket, schema=Triage, model="large")
+TIERS = [("small", 0.85), ("large", 0.60)] # thresholds calibrated in the eval
+
+def triage(ticket):
+ for model, min_conf in TIERS:
+ t = llm_parse(TRIAGE_PROMPT, ticket, schema=Triage, model=model)
+ trace.set("cascade.tier", model)
+ if valid(t) and t.confidence >= min_conf: # validation in code + confidence
+ return t
+ return human_queue(ticket)
Before: the large model on everything.
flowchart LR
IN(["1. Ticket"]):::io --> L(["2. Large model"]):::llm
L --> OUT(["3. Classification"]):::io
After: the cheap one first, the large one when needed.
flowchart LR
IN(["1. Ticket"]):::io --> S(["2. Small model"]):::llm
S --> C{"3. Valid and confident?"}
C -->|yes| OUT(["5. Classification"]):::io
C -->|no| L(["4. Large model"]):::llm
L --> OUT
Imagine support for a Brazilian marketplace. Thousands of tickets arrive each day: “where is my order”, returns, invoices, Pix payment disputes. Pix is Brazil’s instant payment system. Triage needs a queue, a priority, and a product.
In the eval, the large model scores 94% overall. The small one scores 89%. The gap looks small until you split by type:
| Type (example) | Volume | Small is right | Large is right |
|---|---|---|---|
| Tracking and delivery time | high | 97% | 98% |
| Returns and exchanges | medium | 88% | 93% |
| Pix and chargeback | low | 71% | 92% |
Almost all volume sits in the first two rows. Paying the large model on tracking buys 1 percentage point. On Pix and chargeback, the same money buys 21 points.
The cascade in this example looks like this. The small model tries. Code validates the schema (known queue, priority in the list, existing product). If validation passes and calibrated confidence clears the threshold, triage is done. The rest moves up. A long chargeback ticket can have a cheap rule that sends it straight to the large model, skipping the first call.
Suppose 10,000 tickets a day and that the large model costs about 10 times the small one per call. If 80% stay on the small model, daily cost falls to about 28% of “large on everything”, and you still pay the large model on the hard 20%. These numbers are illustrative: run the arithmetic with your provider’s price and your volume.
The FrugalGPT paper (Chen, Zaharia, and Zou, 2023) documents the same idea by chaining models from different APIs: try the cheap one and move up only when the answer misses a quality threshold. The lesson that matters here is the same. The gain comes from the share that does not move up, not from the extra model.
In high-volume workloads, most inputs tend to be easy, and any competent model gets them right. Paying for the larger model on those inputs is cost with no gain. The cascade reserves the expensive model for the hard fraction.
The criterion is what makes the cascade work or fail. Validation in code (schema, business rule) is the most reliable. The model’s stated confidence is only useful once calibrated in the eval: if the small model says 90% and is right 70% of the time, the threshold must rise. The target pattern is Model Cascade.
Before the cascade, run the same capable model at lower reasoning effort. Several providers expose this as “effort”, “thinking”, or a reasoning flag. If that version ties the cascade on quality and cost, keep one model.
One model is easier to maintain. The prompt cache does not split. The trace has one tier, not two. The cascade only pays off when the eval shows that two models, with an escalation criterion, beat that alternative.
Split the cheap-tier dataset into bands: confidence below 0.6, 0.6 to 0.8, above 0.8. In each band, measure real accuracy.
The useful threshold is the point where the band starts being accurate enough for the product. If the “above 0.8” band scores 96% and “0.6 to 0.8” scores 74%, a cut near 0.8 makes sense. If every band scores about the same, confidence carries no information. Then the criterion has to be something else: text length, presence of a tax ID, a business rule that failed.
Never pick 0.7 because it “feels reasonable”. That number only exists after the eval.
A team puts the small model in front, escalates on any doubt, and 95% of requests go to the large one. On the trace, “cascade” shows up on every span. On the bill, cost got worse: an extra call on almost everything, plus the large model.
That is not a cascade. It is the large model with a toll booth in front. The metric that gives it away: share that moves up. If it clears, say, two thirds of your volume, go back to the eval and loosen the criterion, or drop the cascade.
The eval shows: the small model gets 96% of short tickets and 71% of tickets over 300 words right. The large one gets 97% and 93%. How would you design the cascade?
Put a cheap routing rule before the cascade: tickets over 300 words go straight to the large model, because the small one fails too often on them. Short tickets go to the small model, with validation in code and calibrated confidence to move doubtful cases up. Check in the eval the final accuracy per length band and the total cost against the “large on everything” version.
Introduce Model Cascade is an AI refactoring for LLM systems, in the Operations group. Try a cheap model first and escalate only when confidence is low.
It treats No Cost Budget.
The Model Cascade design pattern.