pub struct WindowDrop;Expand description
Default trim strategy: drops the earliest complete rounds until the remaining sequence fits the budget.
Uses projection semantics (replace: false): lossless — raising the budget
restores the trimmed history, and each recomputation is cheap. Guarantees:
- at least the most recent round is kept (kept even when a single round exceeds the budget; nothing more can be trimmed);
- a tool message and its Assistant message share a round and are kept as a pair;
- recorded System messages are treated like any other message and may be trimmed (the system prompt is managed by the Agent layer; Memory does not manage System).
§Comparison
When a heavy strategy such as summarization or LLM compaction is needed,
inject a custom TrimStrategy that declares materialization
(replace: true), trading the materialized zero-recompute for a longer
context; light and lossless round-wise dropping is this implementation.
Trait Implementations§
Source§impl Clone for WindowDrop
impl Clone for WindowDrop
Source§fn clone(&self) -> WindowDrop
fn clone(&self) -> WindowDrop
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreimpl Copy for WindowDrop
Source§impl Debug for WindowDrop
impl Debug for WindowDrop
Source§impl Default for WindowDrop
impl Default for WindowDrop
Source§fn default() -> WindowDrop
fn default() -> WindowDrop
Returns the “default value” for a type. Read more
impl Eq for WindowDrop
Source§impl PartialEq for WindowDrop
impl PartialEq for WindowDrop
impl StructuralPartialEq for WindowDrop
Source§impl TrimStrategy for WindowDrop
impl TrimStrategy for WindowDrop
Source§fn trim<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
messages: &'life1 [Message],
budget: &'life2 Budget,
counter: &'life3 dyn TokenCounter,
) -> Pin<Box<dyn Future<Output = Result<TrimResult, MemoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn trim<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
messages: &'life1 [Message],
budget: &'life2 Budget,
counter: &'life3 dyn TokenCounter,
) -> Pin<Box<dyn Future<Output = Result<TrimResult, MemoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Trims a message sequence against a budget and counter, returning the
trim result (semantics in
TrimResult). Read moreSource§fn trim_with_counts<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
messages: &'life1 [Message],
counts: &'life2 [usize],
budget: &'life3 Budget,
_counter: &'life4 dyn TokenCounter,
) -> Pin<Box<dyn Future<Output = Result<TrimResult, MemoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
fn trim_with_counts<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
messages: &'life1 [Message],
counts: &'life2 [usize],
budget: &'life3 Budget,
_counter: &'life4 dyn TokenCounter,
) -> Pin<Box<dyn Future<Output = Result<TrimResult, MemoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
Trims with per-message token counts; the default implementation
delegates to
trim, so custom strategies need not
know about it. WindowDrop overrides it to amortized O(1) — counts are
cached by Memory, avoiding per-message recounts inside the strategy (and
saving IO with remote counters).Auto Trait Implementations§
impl Freeze for WindowDrop
impl RefUnwindSafe for WindowDrop
impl Send for WindowDrop
impl Sync for WindowDrop
impl Unpin for WindowDrop
impl UnsafeUnpin for WindowDrop
impl UnwindSafe for WindowDrop
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key and return true if they are equal.