Why do language models forget everything?

Short answer: Because a language model has no memory of its own. Once a response is generated, that conversation is gone unless something outside the model stores it.

Statelessness is how these models run: each call starts without yesterday’s chat. Making the model bigger does not create persistence. Durable recall needs a separate memory layer that stores and retrieves what matters across sessions.

Ask a language model a question, and it answers as if it has been thinking about the conversation the whole time. Ask it the same kind of question tomorrow, in a new session, and there is no trace that yesterday ever happened. This isn’t a bug that a future model update will quietly fix. It’s a direct consequence of how these models are built and run: a language model has no memory of its own, no place where a conversation lives once the response has been generated, and no mechanism for carrying anything forward unless something outside the model does that work for it. Understanding why this happens, and why simply making the model bigger or giving it a longer context window doesn’t solve it, is the starting point for understanding why persistent memory exists as a separate piece of infrastructure at all.

Why Does a Language Model Forget Everything the Moment It Answers?

A language model is, at its core, a function. It takes a sequence of tokens as input and produces a probability distribution over what token should come next, repeating that process until it has generated a full response. Once that response is returned, the computation that produced it is finished. There is no server-side thread quietly holding the conversation open, no persistent variable somewhere storing what was just discussed. The next time the model is called, it starts that same function again, from the same frozen set of weights, with no built-in awareness that a previous call ever took place.

This is what people mean when they say a model is stateless. State, in computing terms, is information that persists between separate operations. A stateless system, by definition, doesn’t carry it. The model’s weights encode everything it learned during training, but training happens long before any particular conversation exists, so those weights can’t contain specifics about a specific user’s specific session. Whatever the model appears to “know” about the current conversation has to be handed to it fresh, every single time, as part of the input.

This isn’t a design flaw so much as a consequence of how these models are served. Running a model is expensive, and the same underlying model typically answers huge numbers of unrelated requests concurrently, across different users and applications. There is no reasonable way for the model itself to keep a private notebook per conversation. Any continuity a user experiences has to be manufactured by the system built around the model, not by the model itself.

How Do Chatbots Seem to Remember Anything at All?

If the model forgets everything after each call, the obvious next question is why a chatbot seems perfectly capable of referring back to something said a few messages ago in the same conversation. The answer is simpler, and a little less impressive, than it looks. The application isn’t relying on the model to remember anything. Instead, every time a new message is sent, the application resends the entire conversation so far, from the very first message, as part of the input. The model isn’t recalling the earlier exchange; it’s reading it again, fresh, because it was placed directly in front of it.

This works because of the context window: the fixed amount of text a model can consider at once. Every instruction, past message, tool output, and the model’s own previous replies all have to fit inside that same space, measured in tokens. As a conversation grows, the application keeps appending to this block of text and sending the whole thing back, turn after turn. From the outside, this creates a convincing illusion of memory. Underneath, it’s closer to handing someone a full transcript of everything said so far and asking them to continue as if they’d been there the whole time.

The illusion only holds within a single, continuous session, and only for as long as the conversation stays short enough to keep resending in full. The moment a session ends, that transcript is gone unless the application saved it somewhere on its own. Nothing about the model changed; the appearance of continuity was entirely a property of what got repeated back to it, and that repetition has real limits.

Why Doesn’t a Bigger Context Window Just Fix This?

Modern models advertise context windows large enough to hold hundreds of thousands of tokens, which naturally raises the question of why this remains a problem at all. If the window is big enough to hold an entire book, surely it’s big enough to hold a full conversation history indefinitely. In practice, a larger window addresses the wrong part of the problem, and introduces new costs of its own.

The first issue is straightforward economics. Every token sent to the model, including the ones it already saw in a previous turn, gets processed and billed again. A conversation that has grown to ten thousand tokens doesn’t just cost more to continue than a fresh one; it costs that much more on every single turn from that point forward, because the whole history rides along each time. Latency scales with it too, since the model has more input to read before it can start producing a response. A longer window doesn’t reduce this cost, it just raises the ceiling before it becomes unbearable.

The second issue is more subtle, and more damaging: models don’t use their available context evenly. Research on long-context performance has repeatedly found that models are much better at using information near the beginning or end of their input than information buried in the middle, a pattern often described as being “lost in the middle.” Effective context length, the portion of the window a model actually reasons over reliably, tends to fall well short of the advertised maximum. Cramming more history in doesn’t just fail to help past a certain point; it can degrade the response, because the detail that mattered most may be sitting exactly where the model pays the least attention. A bigger window changes the size of the container. It does nothing to change the fact that everything inside it still has to be resent from scratch, still costs money to reprocess, and still competes for the model’s limited attention.

What Happens When It’s Not a Human but an Agent on the Other End?

Everything so far describes a human being mildly inconvenienced by having to restate context, or paying a slowly rising cost as a conversation drags on. When the party on the other end of the model is an autonomous agent rather than a person typing messages, the same underlying limitation stops being an inconvenience and starts being a structural failure. Agents don’t pause to think between turns the way people do. They operate continuously, issue calls to the model in rapid succession, and are often expected to complete long, multi-step tasks without a human in the loop to notice when something has gone wrong.

Without continuity beyond a single context window, an agent on a long-running task keeps re-deriving conclusions it already reached earlier in that same task, because nothing forces it to remember reaching them. Once a task spans separate sessions, or gets handed between cooperating agents, whatever the first agent figured out simply isn’t available to the next one unless it’s still sitting in the shared context. A coding agent might settle on a particular library version early in a project, only to suggest something contradictory months later because that decision was never anywhere it could be retrieved from. What looks like forgetfulness at human scale becomes duplicated work and wasted computation at machine scale, and it happens far faster, because agents produce and consume information much faster than any person could.

What Actually Solves the Statelessness Problem?

None of this is solved by waiting for a smarter model, because it isn’t a reasoning problem. A model can be arbitrarily capable at the moment it generates a response and still have nothing to work with if the relevant information was never placed in front of it. The fix has to happen at the level of the system surrounding the model, not the model itself: something has to extract what’s worth keeping from a conversation, store it somewhere outside the context window, and bring back only the relevant pieces the next time they’re needed, instead of resending everything that has ever happened.

This is the role persistent memory infrastructure plays. Rather than treating a conversation’s history as one long, ever-growing block of text that has to be repeated in full, a memory system pulls out the facts, preferences, and decisions that matter, stores them in a form that can be searched later, and retrieves only what’s relevant to the current request. Weaviate Engram is a concrete example of this approach: it takes raw conversation data, extracts individual facts from it, reconciles them against what’s already stored so the same fact doesn’t pile up as duplicates, and commits the result to a vector-native store built on Weaviate. When a new request comes in, instead of resending the entire history, the application searches that store for what’s actually relevant and hands the model a small, targeted set of facts, rather than a growing transcript.

What changes here isn’t the model’s underlying nature. It is, and remains, stateless in exactly the sense described earlier: it still has no memory of its own, and it still starts fresh with every call. What changes is where continuity lives. Instead of being trapped inside the model or bolted on by resending an ever-larger transcript, it moves into infrastructure designed specifically to hold onto what matters and hand it back at the right moment. A model that forgets everything by default and a system that reliably remembers on its behalf can, from the outside, look almost the same as a model that simply never forgot in the first place. Everything a stateless model can see at any given moment, whether real memory is involved or not, still has to pass through one single place: the context window. Our next chapter, Is the context window the same as memory?, looks closely at that space, and at why it behaves nothing like real memory no matter how large it grows.