services/loop/compression

Context compression — preemptive and reactive summarization of middle messages. Moved from core/loop/compression.gleam (Stage 3). Uses service bundles instead of the monolithic LoopContext.

Values

pub fn do_compress(
  compression: types.CompressionService,
  chat_fn: fn(
    client.Client,
    List(message.Message),
    List(tool_def.ToolDefinition),
  ) -> Result(response.ChatResponse, client.ClientError),
  client: client.Client,
  logger: types.LoggerBundle,
  messages: List(message.Message),
  cooldown_state: hooks.CooldownState,
  protect_head: Int,
  protect_tail: Int,
) -> #(List(message.Message), hooks.CooldownState)

Attempt to compress middle messages. Checks cooldown first; if cooling down, returns messages unchanged. On success, records success and returns compressed messages. On failure, records failure and returns original messages.

Search Document