The shape of a pizza order
Say "large half pepperoni half mushroom, extra cheese on the pepperoni half, thin crust" out loud. A single sentence encoded seven decisions:
- Size (large).
- One item, quantity 1.
- Two topping placements (left / right).
- Two toppings, one per side (pepperoni, mushroom).
- A modifier on one side only (extra cheese, left).
- A crust choice (thin).
- Implicit whole-pie choices (default sauce, default cheese level).
A voice agent that captures that as a free-text note lets the kitchen recreate the confusion. A structured pizza ticket writes each decision as a typed field.
The structural rules the ticket must enforce
- Placement values: whole / left / right — a topping must live on one of them.
- Required groups: sauce, crust, size — no pizza leaves without them.
- Optional groups: extra cheese, well-done, cut style — with caps like "max 3".
- Quantities and doubles: "extra pepperoni" is a modifier quantity, not a second topping.
- Sold-out and 86'd items: enforced during the call, not after.
- Coupon eligibility: some coupons only apply to specific sizes or crusts.
Why the LLM must not price the pizza
Language models are useful for turning speech into a structured intent. They are the wrong place to compute money. The moment the model "knows" the price, the ticket and the register can drift. Fire It never lets the voice model be the authority on price. The server prices the ticket against the live menu, and the confirmation the caller hears reflects that price.
Half-and-half is the acid test
If a voice ordering demo can't cleanly capture "half pepperoni, half mushroom, extra cheese on the pepperoni half," you don't have a pizza system. You have a phone system that guesses at pizza. Ask any vendor to demo it. Then ask to see the ticket the kitchen would receive.
