The shared chart — one window holds it all.
The window holds far more than your request — and it all has to fit at once.
Last page, the window held bars of music and the oldest bar dropped out once it filled. A real session runs the same way — except the window has to juggle far more than your latest request.
Every turn, four things crowd into that one window: the brief you set at the start (the model's system prompt — key, style, tempo), the whole take so far, your new request, and the space reserved for the reply. All four share the same fixed room.
And the window never grows. Once a long session fills it, the earliest turns are dropped to make room — the same overflow you saw on the last page. Note the twist: the model re-reads this entire window from scratch on every turn. It isn't remembering the conversation so much as being handed it again, in full, each time.
Add a few turns and watch the four parts share one fixed window. Keep going, and you'll see the earliest turn get pushed out.
It's all one list — and it all costs tokens.
Every turn, you send the model the same kind of list: the brief, the take so far, and your new request. The whole thing must fit the window, with room kept for the reply.
messages = [
{"role": "system", "content": brief}, # set once, sent every turn
*history, # every past turn — this keeps growing
{"role": "user", "content": new_request}, # your latest ask
]
# the whole list must fit the window; trim the oldest take if it won't
reply = model.play(messages, max_output_tokens=420) # reply space, reserved up front
One window, shared by everything.
Four things, one window: the brief, the take so far, your request, and reserved reply space. The window never grows — so a long session is limited not by what the model knows, but by what still fits at once.
So a big part of playing with an LLM is choosing what to keep in the window — and what to drop, shorten, or look up only when you need it. Next: does it remember you at all once the session ends?