Skip to content

latent.context.compaction

Message history compaction utilities.

All functions return new lists and never mutate input.

Functions

anchored_summarize

anchored_summarize(messages: list[dict[str, Any]], keep_last_n: int = 5, sections: list[str] | None = None, summary_fn: Callable[[str], str] | None = None) -> list[dict[str, Any]]

Structured iterative summarization with anchored sections.

Keeps system messages and the last keep_last_n messages intact. Middle messages are summarized into a structured summary with mandatory sections:

  • Session Intent
  • Files Modified
  • Decisions Made
  • Current State
  • Next Steps

Parameters

messages: OpenAI-style message list. keep_last_n: Number of most-recent messages to preserve verbatim. sections: Override the default section headings. summary_fn: Optional summary_fn(text) -> summary_text for LLM-backed summarization. If None, a simple extractive approach is used (first and last lines of the middle block).

Returns

list[dict[str, Any]] A new list with a summary system message injected.

compact_history

compact_history(messages: list[dict[str, Any]], target_tokens: int, strategy: Literal['oldest_first', 'tool_results_first'] = 'tool_results_first') -> list[dict[str, Any]]

Reduce message history to fit within target_tokens.

Strategies

tool_results_first Mask tool outputs (oldest first) until under budget, then drop oldest user/assistant pairs if still over. oldest_first Drop oldest non-system user/assistant message pairs first.

System messages are never dropped or modified.

Parameters

messages: OpenAI-style message list. target_tokens: Maximum token budget for the returned list. strategy: Compaction strategy to use.

Returns

list[dict[str, Any]] A new list that fits within target_tokens.

mask_observations

mask_observations(messages: list[dict[str, Any]], keep_last_n: int = 3) -> list[dict[str, Any]]

Replace old tool-result messages with one-line summaries.

Keeps the last keep_last_n tool results intact. Older ones are replaced with a placeholder: '[Tool output summarized: {n} chars from {tool_name}]'

Parameters

messages: OpenAI-style message list. keep_last_n: Number of most-recent tool results to preserve verbatim.

Returns

list[dict[str, Any]] A new list with older tool results masked.