Session Memory¶
Conversation history with compaction strategies. See the memory pattern for usage.
techrevati.runtime.memory ¶
Session memory — conversation history with compaction.
ConversationMemory is a small protocol for accumulating a turn-by-turn message
history that a caller feeds back into the model. Long sessions outgrow the model's
context window, so memory applies a compaction strategy after each append:
- :class:
NoCompaction— keep everything (default). - :class:
WindowCompaction— keep the last N messages (optionally always retainingsystemmessages). - :class:
TokenBudgetCompaction— drop oldest messages until an estimated token budget is met (system messages retained first).
The runtime does not own the model call, so memory is caller-driven: append what
you send and receive, then read messages() to build the next prompt.
memory = InMemoryConversationMemory(
compaction=TokenBudgetCompaction(max_tokens=8000)
)
memory.add(MemoryMessage("system", "You are a loan assistant."))
memory.add(MemoryMessage("user", question))
reply, _ = session.run_turn(lambda: call_model(memory.messages()))
memory.add(MemoryMessage("assistant", reply))
CompactionStrategy ¶
Bases: Protocol
Reduce a message list to fit a budget. Pure; returns a new list.
ConversationMemory ¶
Bases: Protocol
Accumulates conversation messages with compaction.
WindowCompaction
dataclass
¶
WindowCompaction(max_messages, keep_system=True)
Keep the most recent max_messages (system messages retained first).
TokenBudgetCompaction
dataclass
¶
TokenBudgetCompaction(
max_tokens,
estimator=_default_estimator,
keep_system=True,
)
Drop oldest messages until the estimated token budget is met.
System messages are retained first; if they alone exceed the budget they are all kept (correctness over budget — never silently drop instructions).
InMemoryConversationMemory ¶
InMemoryConversationMemory(*, compaction=None, initial=())
Process-local conversation memory; compacts after each append.