Agentic.Loop.ContextCompression (agentic v0.2.2)

Copy Markdown

Two-tier context compression: truncation for moderate overflow, LLM-based summarization for severe overflow.

Ported from Homunculus MemoryManager.optimize_context pattern.

Strategy

  • When context is < 2× budget: truncate older messages (keep recent ones intact)
  • When context is ≥ 2× budget: use LLM summarization via llm_chat callback
  • Falls back to truncation on LLM error

Summary

Functions

Compress messages to fit within a token budget.

Estimate token count for a list of messages.

Truncate messages to fit within a token budget, keeping system + recent messages.

Functions

compress(messages, token_budget, ctx)

@spec compress([map()], non_neg_integer(), Agentic.Loop.Context.t()) ::
  {[map()], boolean()}

Compress messages to fit within a token budget.

Returns {compressed_messages, was_summarized}.

estimate_tokens(messages)

@spec estimate_tokens([map()]) :: non_neg_integer()

Estimate token count for a list of messages.

truncate(messages, token_budget)

@spec truncate([map()], non_neg_integer()) :: [map()]

Truncate messages to fit within a token budget, keeping system + recent messages.