pub trait ContextStrategy: WasmCompatSend + WasmCompatSync {
// Required methods
fn should_compact(&self, messages: &[Message], token_count: usize) -> bool;
fn compact(
&self,
messages: Vec<Message>,
) -> impl Future<Output = Result<Vec<Message>, ContextError>> + WasmCompatSend;
fn token_estimate(&self, messages: &[Message]) -> usize;
}Expand description
Strategy for compacting conversation context when it exceeds token limits.
Implementations decide when to compact and how to reduce the message list.
§Example
use std::future::Future;
use neuron_types::*;
struct KeepLastN { n: usize }
impl ContextStrategy for KeepLastN {
fn should_compact(&self, _messages: &[Message], token_count: usize) -> bool {
token_count > 100_000
}
fn compact(&self, messages: Vec<Message>)
-> impl Future<Output = Result<Vec<Message>, ContextError>> + Send
{
async move { Ok(messages.into_iter().rev().take(self.n).collect()) }
}
fn token_estimate(&self, messages: &[Message]) -> usize { messages.len() * 100 }
}Required Methods§
Sourcefn should_compact(&self, messages: &[Message], token_count: usize) -> bool
fn should_compact(&self, messages: &[Message], token_count: usize) -> bool
Whether compaction should be triggered given the current messages and token count.
Sourcefn compact(
&self,
messages: Vec<Message>,
) -> impl Future<Output = Result<Vec<Message>, ContextError>> + WasmCompatSend
fn compact( &self, messages: Vec<Message>, ) -> impl Future<Output = Result<Vec<Message>, ContextError>> + WasmCompatSend
Compact the message list to reduce token usage.
Sourcefn token_estimate(&self, messages: &[Message]) -> usize
fn token_estimate(&self, messages: &[Message]) -> usize
Estimate the token count for a list of messages.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.