pub struct TokenBufferMemory { /* private fields */ }Expand description
Conversation memory that keeps the most recent messages that fit in max_tokens.
When a new message pushes the buffer over the limit, the oldest messages are dropped
until it fits again. A tool result left at the front without the AI message that
requested it is dropped as well, so the history stays valid for chat APIs.
A single message bigger than max_tokens is not kept.
Tokens are counted with tiktoken (cl100k_base by default) over each message’s
content plus its tool calls, which is an approximation for non-OpenAI models.
ⓘ
let memory = TokenBufferMemory::new(2000).with_model("gpt-4o")?;Implementations§
Source§impl TokenBufferMemory
impl TokenBufferMemory
pub fn new(max_tokens: usize) -> Self
Sourcepub fn with_model(self, model: &str) -> Result<Self, MemoryError>
pub fn with_model(self, model: &str) -> Result<Self, MemoryError>
Count tokens with the tokenizer tiktoken uses for model (e.g. gpt-4o).
Sourcepub fn with_token_counter<F>(self, counter: F) -> Self
pub fn with_token_counter<F>(self, counter: F) -> Self
Use a custom token counter, e.g. one matching a non-OpenAI model’s tokenizer.
Sourcepub fn total_tokens(&self) -> usize
pub fn total_tokens(&self) -> usize
Tokens currently held in the buffer.
Trait Implementations§
Source§impl BaseMemory for TokenBufferMemory
impl BaseMemory for TokenBufferMemory
fn messages<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<Message>, MemoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn add_message<'life0, 'async_trait>(
&'life0 mut self,
message: Message,
) -> Pin<Box<dyn Future<Output = Result<(), MemoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn clear<'life0, 'async_trait>(
&'life0 mut self,
) -> Pin<Box<dyn Future<Output = Result<(), MemoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn add_user_message<'life0, 'life1, 'async_trait>(
&'life0 mut self,
message: &'life1 (dyn Display + Sync),
) -> Pin<Box<dyn Future<Output = Result<(), MemoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn add_ai_message<'life0, 'life1, 'async_trait>(
&'life0 mut self,
message: &'life1 (dyn Display + Sync),
) -> Pin<Box<dyn Future<Output = Result<(), MemoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn to_string<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<String, MemoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§impl From<TokenBufferMemory> for Arc<dyn BaseMemory>
impl From<TokenBufferMemory> for Arc<dyn BaseMemory>
Source§fn from(memory: TokenBufferMemory) -> Self
fn from(memory: TokenBufferMemory) -> Self
Converts to this type from the input type.
Source§impl From<TokenBufferMemory> for Arc<Mutex<dyn BaseMemory>>
impl From<TokenBufferMemory> for Arc<Mutex<dyn BaseMemory>>
Source§fn from(memory: TokenBufferMemory) -> Self
fn from(memory: TokenBufferMemory) -> Self
Converts to this type from the input type.
Auto Trait Implementations§
impl !RefUnwindSafe for TokenBufferMemory
impl !UnwindSafe for TokenBufferMemory
impl Freeze for TokenBufferMemory
impl Send for TokenBufferMemory
impl Sync for TokenBufferMemory
impl Unpin for TokenBufferMemory
impl UnsafeUnpin for TokenBufferMemory
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
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more