AI Model Latency Budgets: A Cheatsheet for Product Teams
For: A product manager or engineering lead at a 30–150-person B2B SaaS company who is about to sign off on a latency SLA for a new AI feature and has no principled basis for the number they are about to pick
Set your AI latency budget from the surface, not the model. The same LLM call can be fine at 4-second p99 inside a background workflow and unusable at 400ms inside an autocomplete dropdown. Pick the target by asking what the user is doing at the moment the result appears — typing, waiting, or walking away — then work backwards to the model, prompt, and infrastructure choices that fit. Everything below is a cheatsheet for doing that in one sitting.
The one rule that matters
Latency budgets are budgets for perceived responsiveness, not for model inference. The user does not care what your GPU is doing. They care whether the interface feels alive. So the target is set by the surface, and the surface dictates the model, not the other way around.
Latency targets by surface
Use this as a starting point. Adjust based on whether the user is idle or actively typing.
| Surface | p50 target | p99 target | User expectation |
|---|---|---|---|
| Inline autocomplete (ghost text) | < 150ms | < 400ms | Feels typed, not fetched |
| Search-as-you-type / semantic search | < 200ms | < 600ms | Snappy after each keystroke debounce |
| Click-to-answer (button pressed) | < 1s | < 2.5s | Immediate acknowledgment expected |
| Streaming chat / copilot | TTFT < 800ms | TTFT < 2s | First token is the SLA, not the full response |
| Document generation (multi-paragraph) | < 5s | < 15s | Loading state acceptable if visible progress |
| Background enrichment (async) | < 30s | < 2min | User has moved on; notify on completion |
| Batch / overnight (scoring, classification) | Throughput matters | N/A | Measured in records/hour, not ms |
TTFT = time to first token. For any streamed output, this is the number you SLA on. Total completion time is a secondary metric.
Which p to pick
- p50: what your average user experiences. Marketing-friendly, engineering-useless in isolation.
- p95: reasonable SLA target for most B2B features. 1 in 20 requests will be slower — acceptable for non-critical paths.
- p99: the number that actually determines whether users complain. Set your budget here for anything user-facing and synchronous.
- p99.9: only worth tracking if you're doing millions of requests/day. Below that, your sample is too small to be meaningful.
Latency budget by model class
Rough starting points for a single call, no network overhead, cold cache excluded. Real numbers depend heavily on prompt length, output length, provider, and region.
| Model class | Typical p50 | Typical p99 | Best fit surface |
|---|---|---|---|
| Small embedding model (e.g. bge-small, ada-002) | 20–80ms | 150–300ms | Search, retrieval, autocomplete |
| Small classifier / fine-tuned BERT-class | 30–100ms | 200–400ms | Routing, intent detection, moderation |
| Small LLM (7B–13B, hosted) | 300ms–1s TTFT | 2–4s TTFT | Simple rewrites, extraction |
| Frontier LLM (GPT-4-class, Claude Sonnet/Opus) | 600ms–2s TTFT | 3–8s TTFT | Reasoning, agents, complex generation |
| Vision / multimodal | 1–3s | 5–15s | OCR, image analysis (rarely synchronous) |
| Speech-to-text (streaming) | < 300ms partial | < 800ms partial | Live transcription, voice UI |
The decision flow
- Name the surface. Where does the output appear? What is the user doing at that exact moment?
- Pick the p99 target from the surface table above.
- Subtract fixed overhead: ~50–150ms for TLS, load balancer, auth, DB lookups, logging. Assume more if you have a service mesh.
- Subtract network to model provider: 30–100ms for same-region hosted APIs; 200ms+ cross-region.
- What remains is your model budget. If it's under 500ms, you cannot use a frontier LLM synchronously. Either switch surface (make it async or streaming), switch model (smaller/fine-tuned), or precompute.
When the budget doesn't fit: escape hatches
- Stream instead of wait. Converts a 6s total latency into an 800ms perceived latency. Costs nothing except UI work.
- Precompute at write time. If the input is stable (a document, a customer record), run inference on write and cache. Read path becomes a DB lookup.
- Speculative UI. Show a skeleton or a plausible default immediately; replace when the real result lands.
- Two-tier inference. Small model returns in 200ms with a "good enough" answer; frontier model refines in the background if the user lingers.
- Cache aggressively. Semantic caches on embeddings can serve 20–40% of repeat queries in single-digit ms.
- Move it async. If the user doesn't need the answer now, don't pretend they do. Email, notification, or in-app badge.
What each strategy is bad at
| Strategy | Weakness |
|---|---|
| Streaming | Doesn't help if the first useful token requires reasoning over the whole output (JSON, structured data) |
| Precompute | Stale results when inputs change; storage cost grows with cardinality |
| Small model fallback | Quality gap can be visible; requires evals to tune the routing threshold |
| Semantic cache | False hits on near-duplicate queries with different intent; hard to invalidate |
| Async | Users forget they asked; re-engagement becomes a separate product problem |
What to measure in production
- TTFT for anything streamed. Per model, per region, per prompt template.
- End-to-end p99 from the user's browser, not from your server logs. Real user monitoring (RUM) beats synthetic.
- Token throughput (tokens/sec after first token) — this is what determines whether long outputs feel fast.
- Timeout rate. If > 0.5% of requests hit your timeout, your p99 target is a lie.
- Cache hit rate. If you're relying on caching to hit your SLA, this is a first-class metric.
- Model provider failover latency. When OpenAI degrades, how long until you're on Anthropic? Measure it.
Common mistakes when setting the SLA
- Copying a competitor's marketing number. Their surface isn't your surface.
- Setting a single latency SLA for the whole product. Each surface needs its own budget.
- Measuring from the server. Users experience network + render, not your API response.
- Ignoring the long tail. A p50 of 400ms with a p99 of 12s is a broken feature, not a fast one.
- Treating cold starts as edge cases. For sporadic B2B usage, cold starts are the p99.
- Setting the target before running an eval. If quality drops when you switch to the faster model, the latency win is fake.
For teams building AI features into existing SaaS products, the latency budget conversation should happen at the design review, not after the first user complaint. We wrote more about how we approach this in AI Studio engagements and in the broader digital transformation work where legacy systems constrain what's achievable end-to-end.
Frequently Asked Questions
What is an acceptable p99 latency for an AI feature in production?
It depends entirely on the surface. For inline autocomplete, under 400ms. For a click-to-answer button, 2–3 seconds is acceptable. For streamed chat, the p99 that matters is time-to-first-token, which should stay under 2 seconds. There is no single "acceptable" number across features.
Should I use p95 or p99 for my AI latency SLA?
Use p99 for anything user-facing and synchronous. p95 hides the tail latency that actually generates support tickets — one bad request in twenty is noticeable to a daily-active user. p95 is fine for internal or async workloads where occasional slowness has no user impact.
How do I reduce LLM latency without sacrificing quality?
In order of effort: stream the response, cache repeat queries semantically, precompute at write time for stable inputs, route simple requests to a smaller fine-tuned model, and colocate inference in the same region as your API. Switching to a smaller frontier model is often the last resort because it requires eval work to prove the quality is acceptable.
Does model choice or infrastructure matter more for latency?
Model choice dominates for anything above ~500ms of budget. Infrastructure (region, network, load balancer overhead) dominates when you're trying to hit sub-300ms p99. Most teams over-invest in infrastructure tuning before they've evaluated whether a smaller model would meet quality bars.
How should latency targets change when we add an agent or multi-step workflow?
Move the surface. Multi-step agents rarely fit inside a synchronous request. Either stream intermediate steps to the UI so the user sees progress, or make the whole workflow async with a completion notification. Trying to hold a 3-second SLA over a 5-call agent chain leads to timeouts and cascading failures.
Found this useful? CodeNicely publishes engineering and product playbooks weekly. Browse the archive or tell us what you're building.
_1751731246795-BygAaJJK.png)