The gap between a good demo and real work usually comes down to the test set. Demos use clean inputs, real work has the messy ones.
One thing that helped me: build the eval set from cases that actually failed or got escalated, rather than from examples someone invented.
Do you run evals offline before launch, or in shadow mode on live traffic first?