Skip to main content

CompactionService

Struct CompactionService 

Source
pub struct CompactionService { /* private fields */ }
Expand description

Service for LLM-driven conversational context compaction.

When conversation history approaches a model’s context window, this service summarises older messages via a smaller/cheaper “compaction” LLM call. The resulting anchored summary preserves semantic continuity while freeing tokens for the main provider.

Supports both proactive compaction (before each turn) and reactive compaction (after a provider context-overflow error). A circuit breaker gates repeated failures to avoid cascading costs.

Implementations§

Source§

impl CompactionService

Source

pub fn new(providers: ProviderRegistry, config: CompactionConfig) -> Self

Creates a new compaction service.

Source

pub fn config(&self) -> &CompactionConfig

Returns the compaction configuration.

Source

pub async fn compact_if_needed( &self, messages: &[MessageRecord], model_context: u32, max_output: u32, store: &dyn SessionStore, session_id: Uuid, ) -> RuntimeResult<Option<CompactionResult>>

Proactive compaction: called before each provider turn to check whether the conversation will overflow the context window.

Returns Ok(None) when compaction is not needed. Returns Ok(Some(result)) when compaction was performed successfully.

§Errors

Returns RuntimeError when the compaction LLM call or storage fails.

Source

pub async fn compact_after_overflow( &self, messages: &[MessageRecord], model_context: u32, max_output: u32, store: &dyn SessionStore, session_id: Uuid, ) -> RuntimeResult<CompactionResult>

Reactive compaction: called after the provider returns a context overflow error. This always performs compaction (does not check is_overflow first).

Uses model_context to compute a safe crate::policy::CompactionConfig::keep_tokens override so the compaction prompt itself does not exceed the compaction model’s context window.

§Errors

Returns RuntimeError when the compaction LLM call or storage fails.

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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, 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<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