Why AI gets slower the longer you talk to it
- A chat model has no memory between turns, so to answer your latest message it re-reads the entire conversation from the beginning. That re-reading step is called prefill.
- The conversation grows every turn, so the prefill grows every turn, so the wait before the answer starts grows every turn.
- The standard fix is a prefix cache, which reuses the work from the previous turn. It only works when the old prompt is a byte-identical prefix of the new one, so it breaks easily and silently.
You open a chat in the morning and it's quick. Forty messages later every reply takes a beat too long, then two beats, and you wonder whether the model got worse or your Mac is tired. Neither. It's doing more work per answer than it was this morning, for a reason that's easy to explain and hard to fix.
The model re-reads the whole conversation, every single time
Here's the part that surprises people: a chat model doesn't remember your conversation. Nothing persists between turns. When you send message twenty, the software hands it everything — your first message, its first answer, all eighteen turns in between — as one block of text, and it reads that block from the top.
That reading pass is called prefill, and it's why nothing appears on screen for a moment after you hit enter. The model has to ingest the whole prompt before it can produce the first token.
The arithmetic is unforgiving. Turn 2 means re-reading two turns; turn 20 means re-reading twenty. The prefill grows with the conversation, and the pause before the first word gets longer. That's not degradation. That's the design.
The fix is a prefix cache, and it's all-or-nothing
Nobody accepts that cost, so every serious runtime has a mitigation: the prefix cache, sometimes called KV cache reuse. Turn 20's prompt starts with exactly the same text as turn 19's — same conversation, more stuck on the end. If the runtime kept the work it did for turn 19, it can reuse that and only process the new part. When it works, latency stops depending on conversation length.
The catch is the word exactly. Reuse requires the earlier prompt to be a byte-identical prefix of the later one. Not similar. Identical. And the top of a prompt is where software likes to inject things — a timestamp, a memory block, a system instruction rebuilt slightly differently. Any drift up there throws away the entire cache. Prefix caching has its own explainer if you want more depth.
Which is why the symptom is confusing from outside. A working cache and a broken one look identical until you time them. You just notice it was snappy this morning and it's crawling.
Three bugs, one symptom: what I found in July 2026
I'll use my own app as the worked example, because I have the numbers. Over one debugging session across Outlier v659 to v662 I found three separate causes of the same symptom. Each time I fixed one I thought I was done, and another was hiding behind it.
| Version | What was actually wrong | Measured effect of the fix |
|---|---|---|
| v659 | The lookup ranked a whole-prompt entry as the "longest match," leaving an empty remainder. The caller called that useless and re-prefilled everything. | Wait before the first token: about 18.5s to 1.4–4.7s, once ranking preferred a strictly shorter prefix. |
| v660 | The chat template appended an empty thinking block to the prompt it generated from, then stripped it when rendering that turn into history. Turn N differed from turn N+1 in its last four tokens. 5,919 of 5,923 tokens matched and reuse was still zero. | Step 6 of a 6-step agent loop went from 66.4s to 16.0s, and the per-step slope went flat. |
| v662 | A memory feature chose what to recall from the most recent user message. In an agent loop every tool result becomes the most recent message, so the recalled facts — and the top of the prompt — changed every step. | Recalling against the first message fixed it. Steps 3–5 held flat at 24.3 / 25.9 / 25.5 seconds while the prompt grew from about 7,000 to 9,200 tokens. |
That last row is the whole article in one line: the prompt got roughly 30% longer and the time barely moved. A flat line instead of a ramp.
99.9% matching is worth exactly the same as 0% matching
The v660 bug is the one I'd print on a poster. 5,919 tokens out of 5,923 matched — 99.9% — and reuse was zero. Not reduced — zero.
Prefix reuse doesn't degrade gracefully — there's no partial credit for being close. The runtime walks forward from token one, and the instant it finds a mismatch everything after it is unusable, because every later token's state depends on the ones before it. Four bad tokens at the tail of a 6,000-token prompt cost the same as a completely different prompt.
That's also why these bugs survive normal debugging. Every check I had was passing — keys matched, hashes matched, the cache had entries. It was perfectly healthy and simply never used.
What you can do about it, on any AI you use
You can't patch someone else's cache, but you can shorten the prompt. That works everywhere:
- Start a fresh conversation for a new task. The most effective move by far. A new thread is a short prompt, and a short prompt is a short prefill.
- Don't edit early messages mid-thread. Rewriting message three changes the top of the prompt and invalidates every cached token after it. You've paid for the whole conversation again.
- Don't paste bulk text you don't need. That 4,000-line log you dropped in at turn two isn't a one-time cost — it's in the prompt for every remaining turn.
- Notice the shape of the slowdown. If the wait grows with thread length and resets when you start over, it's prompt length. If it's random, something else is wrong.
Cloud services have the same problem — you just can't see it
None of this is specific to running models on your own machine. The structural fact is the same everywhere, and a hosted service has the same fragility at the top of the prompt.
The difference is what you can do about it. Their cache runs on their servers: you can't see whether it's hitting, and you can't fix it when it isn't. I could dump every cache entry and every hit-or-miss decision until the ranking bug fell out. That's a narrow advantage of local software — it doesn't make the model smarter, it just puts the person who can fix the plumbing in the same room as the problem.
So my claim is deliberately narrow, because it's the one I measured: after v659 through v662, latency in Outlier no longer grows with conversation length. Closely related: why AI forgets your conversations — same root fact, different consequence.
Frequently asked questions
Why does an AI chat get slower the longer it goes?
Because the model has no memory between turns. To answer your latest message it re-reads the whole conversation from the top, and that step, called prefill, gets longer as the conversation gets longer. A prefix cache can reuse the previous turn's work, but only if the earlier prompt is a byte-identical prefix of the new one.
Does starting a new chat actually make it faster?
Yes, on every vendor. A new conversation means a short prompt, and a short prompt means a short prefill. If the wait grows as a thread gets longer and resets when you start fresh, prompt length is the cause, not your hardware or your connection.
Does this happen with cloud AI too?
Yes. Cloud services run the same kind of model and hit the same structural problem: no memory between turns, so the whole conversation is re-read every turn. The difference is visibility. Their cache is on their servers, so you can't see whether it's hitting and you can't fix it when it isn't.
Is Outlier faster than other AI apps because of this?
That's not the claim. The narrow, true version: after the v659 through v662 fixes, latency in Outlier no longer grows with conversation length. Whether that's faster than any particular competitor depends on the model, the machine, and the prompt, and I haven't measured that comparison.
Try Outlier free
Free Nano + Lite — local, private, no account. Pro $20/mo or $149/yr adds everything (all 7 model tiers incl. Plus 397B). Lifetime Pro from $99 (Founding 200, first 200 seats) or $200 (Founders 500). Apple Silicon only.
Download for Mac