Skip to main content

CompactionConfig

Struct CompactionConfig 

Source
pub struct CompactionConfig {
    pub threshold_tokens: usize,
    pub retain_recent: usize,
    pub min_messages_for_compaction: usize,
    pub auto_compact: bool,
    pub max_retained_tail_tokens: usize,
    pub summary_max_tokens: usize,
}
Expand description

Configuration for context compaction.

Controls when and how context compaction occurs.

§Example

use agent_sdk::context::CompactionConfig;

let config = CompactionConfig::default()
    .with_threshold_tokens(100_000)
    .with_retain_recent(20);

Fields§

§threshold_tokens: usize

Token threshold to trigger compaction. When estimated tokens exceed this, compaction is triggered. Default: 80,000 (conservative for 128K context models)

§retain_recent: usize

Number of recent messages to keep intact (not summarized). These messages remain in full to preserve immediate context.

The retained tail is additionally bounded by max_retained_tail_tokens: if keeping retain_recent messages would exceed that token budget, the oldest of those messages are summarized instead so the tail stays within the cap. Default: 10

§min_messages_for_compaction: usize

Minimum messages before compaction is considered. Prevents compaction when conversation is still short. Default: 20

§auto_compact: bool

Whether to automatically compact when threshold is reached. If false, compaction only occurs on explicit request. Default: true

§max_retained_tail_tokens: usize

Soft cap on the estimated tokens kept in the retained tail.

Bounds retain_recent: the most recent messages are kept only until this token budget is reached, after which older messages are folded into the summary instead. The cap is soft because an indivisible tool_use/tool_result pair may push the tail slightly over. Raise it on large-context models, or lower it for more aggressive compaction. Default: 20,000

§summary_max_tokens: usize

max_tokens budget for the LLM summarization call.

If the summarizer hits this ceiling (a MaxTokens stop reason), the compactor logs a warning and retries once with a larger budget before marking the summary as truncated. Default: 4,096

Implementations§

Source§

impl CompactionConfig

Source

pub fn new() -> Self

Create a new configuration with default values.

Source

pub const fn with_threshold_tokens(self, threshold: usize) -> Self

Set the token threshold for compaction.

Source

pub const fn with_retain_recent(self, count: usize) -> Self

Set the number of recent messages to retain.

Source

pub const fn with_min_messages(self, count: usize) -> Self

Set the minimum messages for compaction.

Source

pub const fn with_auto_compact(self, auto: bool) -> Self

Set whether to auto-compact.

Source

pub const fn with_max_retained_tail_tokens(self, tokens: usize) -> Self

Set the soft cap on tokens kept in the retained tail.

Bounds retain_recent. See the field docs for the precise semantics.

Source

pub const fn with_summary_max_tokens(self, tokens: usize) -> Self

Set the max_tokens budget for the summarization call.

Trait Implementations§

Source§

impl Clone for CompactionConfig

Source§

fn clone(&self) -> CompactionConfig

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CompactionConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for CompactionConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for CompactionConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for CompactionConfig

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FutureExt for T

Source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
Source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more