Scheduled Drift Detection: Catching Silent Model Regressions Before Your Users Do
By Promptster Team · 2026-05-15
The model ID you pinned is a lie. gpt-4o-mini in October 2025 is not the same set of weights as gpt-4o-mini in April 2026. Providers ship minor updates, safety fine-tunes, and quantization changes under the same model name. Sometimes quality improves. Sometimes it drops 10-20% on your specific prompt pattern — and you find out when a user complains.
Scheduled drift detection is the fix. Run your eval suite against production prompts on a recurring schedule; alert when quality drops. Five minutes to set up; catches the next outage before it happens.
Why This Is Specifically an LLM Problem
Traditional software regressions come from your own code changes. You can detect them with unit tests on CI because the trigger is in your commit history.
LLM regressions come from someone else's changes — the provider silently updating the model, a safety classifier becoming more aggressive, a tokenizer version shift. Your code is identical. Your prompt is identical. The output is different.
There's no commit to blame. There's no notification. The only way to catch it is to continuously re-run a reference eval and compare.
The Detection Loop
┌────────────────────┐
│ Reference dataset │ (20-50 curated inputs with expected outputs)
└─────────┬──────────┘
│
▼ (weekly or daily)
┌────────────────────┐
│ Schedule runs │ ← cron job or scheduler
│ eval against │
│ production prompt │
└─────────┬──────────┘
│
▼
┌────────────────────┐
│ Compare score │
│ vs 7-day baseline │
└─────────┬──────────┘
│
▼
┌─────┴─────┐
│ Alert if │
│ delta │
│ > 5 pts │
└───────────┘
Three parameters matter:
- Cadence: weekly is the minimum; daily if your app is mission-critical.
- Baseline window: 7 days is usually enough to filter noise without being too slow to detect drift.
- Alert threshold: 5% absolute score drop is a good starting point. Tune based on your false-alarm rate.
Setting It Up With Promptster
Promptster's Scheduled Tests feature does the loop end-to-end. Walkthrough:
Step 1 — Save your reference prompt as a test
In the Promptster app, run your production prompt with a representative input set. Save the result as a test. This becomes your baseline.
Step 2 — Create a schedule
Open /schedules and create a new schedule pointing at the saved test. Cron expression: 0 9 * * MON for weekly Monday 09:00 UTC, or 0 9 * * * for daily.
Step 3 — Configure SLA alerts
Set a quality-score threshold (e.g., "alert if consensus agreement drops below 0.85"). Promptster supports webhook + email notifications.
Step 4 — Let it run
Every scheduled run stores its score. The trend line is your drift signal. When an alert fires, inspect the specific prompt output — usually you can diff the new output against the baseline and see the change class (format shift, hedge word increase, refusal rate spike).
What the Signal Looks Like in Practice
We've seen three common drift patterns:
1. The slow leak. Quality drops 1-2% per week for a month, then plateaus 8% below baseline. Usually caused by a silent model minor-version rollout. Fix: either accept the new baseline, or switch to a pinned model version if the provider offers one.
2. The sharp cliff. Quality drops 15-30% overnight on a specific date. Usually a safety-filter update or a major model refresh. Fix: investigate immediately; often you need to rewrite the prompt to work around a new refusal pattern.
3. The format shift. Overall quality scores look fine, but downstream parsers start failing — the model started wrapping JSON in ```json fences when it previously returned raw JSON. Fix: update the parser to be lenient, or update the prompt to re-enforce the output contract.
Each of these patterns has bitten teams we know personally. Each would have been caught on day 1 with scheduled drift detection.
What to Eval, Specifically
Don't run drift detection on every prompt your app has — you'll drown in alerts. Focus on:
- High-volume prompts (anything called >1000 times per day).
- High-stakes prompts (financial calculations, medical summaries, legal text, user-facing generation).
- Prompts that feed downstream systems (anything whose output is parsed by another service).
Skip:
- Internal debugging prompts.
- Low-volume admin tooling.
- Anything where a human reviews every output anyway.
Start with 3-5 prompts. Scale up as the habit stabilizes.
Cross-Provider Drift Detection
The same pattern works across multiple providers. Run your reference eval against each model in your routing table weekly. A drift on GPT-4o-mini while Claude stays stable is diagnostic: the cause is OpenAI-specific. A drift on all three providers at once suggests your reference data has gone stale.
For a primer on cross-provider routing, see our LLM router in an afternoon tutorial.
The Minimal Budget
A 20-input reference set run weekly across 3 providers is 60 calls/week. At budget-tier pricing (~$0.0002/call average), that's $0.012/week — twelve cents per month for a continuous quality canary.
If you're telling yourself drift detection is "out of scope," check what an outage costs in engineering time + customer trust. The math doesn't favor skipping it.
The Big Habit Change
Prompt-dependent features have the failure mode of hosted APIs you don't control. Treat them like one: monitor the quality you get back, not just the uptime. The provider tells you when the service is up. You have to tell yourself when the service is still good.
For the regression-testing side, see evals are the new unit tests. For the versioning side, see our upcoming shipping prompts like code.