Class: Mneme::CompressedViewport
- Inherits:
-
Object
- Object
- Mneme::CompressedViewport
- Defined in:
- lib/mneme/compressed_viewport.rb
Overview
Builds a compressed viewport for Mneme’s LLM context. Mneme sees conversation (user/agent messages and think events) but not mechanical execution (tool calls and responses). Tool calls are compressed to aggregate counters like ‘[4 tools called]`.
The viewport is split into three zones separated by delimiters:
-
**Eviction zone** — messages about to leave the viewport (upper third)
-
**Middle zone** — messages in the middle of the viewport
-
**Recent zone** — the most recent messages (lower third)
Zone boundaries are calculated WITH tool call tokens (they affect position), then tool calls are removed and replaced with counters.
Constant Summary collapse
- ZONE_DELIMITERS =
{ eviction: "── EVICTION ZONE (upper third) ──", middle: "── MIDDLE ZONE ──", recent: "── RECENT ZONE (lower third) ──" }.freeze
Instance Method Summary collapse
-
#initialize(session, token_budget:, from_message_id: nil) ⇒ CompressedViewport
constructor
A new instance of CompressedViewport.
-
#messages ⇒ Array<Message>
The raw messages selected for this viewport.
-
#render ⇒ String
Renders the compressed viewport as a string ready for Mneme’s LLM context.
Constructor Details
#initialize(session, token_budget:, from_message_id: nil) ⇒ CompressedViewport
Returns a new instance of CompressedViewport.
31 32 33 34 35 |
# File 'lib/mneme/compressed_viewport.rb', line 31 def initialize(session, token_budget:, from_message_id: nil) @session = session @token_budget = token_budget @from_message_id = end |
Instance Method Details
#messages ⇒ Array<Message>
Returns the raw messages selected for this viewport.
48 49 50 |
# File 'lib/mneme/compressed_viewport.rb', line 48 def @messages ||= end |
#render ⇒ String
Renders the compressed viewport as a string ready for Mneme’s LLM context.
40 41 42 43 44 45 |
# File 'lib/mneme/compressed_viewport.rb', line 40 def render return "" if .empty? zones = split_into_zones() render_zones(zones) end |