The working memory — the context window.
An LLM holds only so much on screen at once — whatever spills over is gone.
Upstairs, the third umpire studies a dismissal frame by frame — but the monitor holds only so many frames at a time. Feed in one more and the earliest scrolls off the top, gone as if it had never been shown.
An LLM works the same way. Whatever it can keep on screen while it answers is its context window, measured in tokens — the chunks of text from the last lesson. Anything inside the window it can use; anything past the edge might as well not exist.
How big is the screen? It depends on the model — from a few thousand tokens (a handful of pages) to over a million (a small library). But whatever the size, it is a fixed ceiling: there is always a last frame that fits, and a first one that falls off.
Add footage and watch the window fill, then overflow — then ask the umpire to decide, and see what it can still remember.
A fixed window. Oldest falls out.
Every frame is added to memory. When the window is full, the oldest frame falls out to make room — the umpire reasons only over what's left.
WINDOW = 5 # the context window — fixed size memory = [] def remember(frame): memory.append(frame) if len(memory) > WINDOW: memory.pop(0) # oldest frame falls out of context def decide(): # the umpire can only reason over what's still in memory return "NOT OUT" if "front-foot" in memory else "OUT"
Inside the window, or gone.
You fed in more frames than the window could hold. Each new frame pushed the oldest one out. When the no-ball check dropped off, the umpire couldn't recall it — and called it wrong from what was left.
Every LLM works inside a fixed context window. Tokens inside it can be reasoned over; tokens pushed past the edge are gone. That's why long chats forget the start, and why what you keep in the window decides the answer.