pub struct RedisContextProvider { /* private fields */ }Expand description
Redis-backed ContextProvider: recency-based memory storage/retrieval
scoped by application/agent/user/thread id, upgraded to a real
FT.SEARCH BM25 full-text index when the connected server supports
RediSearch (Redis Stack). See the module docs for the RediSearch-vs-SCAN
behavior and the remaining vector-search divergence from Python’s
RedisProvider.
use agent_framework_redis::RedisContextProvider;
use agent_framework_core::memory::{ContextProvider, SessionContext};
use agent_framework_core::types::Message;
let provider = RedisContextProvider::new("redis://127.0.0.1:6379")?
.with_user_id("user-42")
.with_limit(5);
let request = vec![Message::user("I love hiking in the Cascades")];
provider.after_run(&request, &[], None).await?;
let mut ctx = SessionContext::new(vec![Message::user("Any outdoor hobbies?")]);
provider.before_run(&mut ctx).await?;Implementations§
Source§impl RedisContextProvider
impl RedisContextProvider
Sourcepub fn new(redis_url: impl Into<String>) -> Result<Self>
pub fn new(redis_url: impl Into<String>) -> Result<Self>
Create a provider for redis_url with no scope configured yet (at
least one of application/agent/user/thread id must be set via the
builder methods before before_run/after_run are called).
Sourcepub fn with_key_prefix(self, key_prefix: impl Into<String>) -> Self
pub fn with_key_prefix(self, key_prefix: impl Into<String>) -> Self
Namespace Redis keys under key_prefix (builder style). Defaults to
"context".
Sourcepub fn with_application_id(self, application_id: impl Into<String>) -> Self
pub fn with_application_id(self, application_id: impl Into<String>) -> Self
Scope memories to an application id (builder style).
Sourcepub fn with_agent_id(self, agent_id: impl Into<String>) -> Self
pub fn with_agent_id(self, agent_id: impl Into<String>) -> Self
Scope memories to an agent id (builder style).
Sourcepub fn with_user_id(self, user_id: impl Into<String>) -> Self
pub fn with_user_id(self, user_id: impl Into<String>) -> Self
Scope memories to a user id (builder style).
Sourcepub fn with_thread_id(self, thread_id: impl Into<String>) -> Self
pub fn with_thread_id(self, thread_id: impl Into<String>) -> Self
Scope memories to a thread id (builder style).
Sourcepub fn with_scope_to_per_operation_thread_id(self, value: bool) -> Self
pub fn with_scope_to_per_operation_thread_id(self, value: bool) -> Self
When true, the thread id used for scoping is captured from the
session_id of the first SessionContext seen by
ContextProvider::before_run instead of the static thread_id
above, and a conflicting session_id on a later call is an error
(builder style).
Sourcepub fn with_context_prompt(self, context_prompt: impl Into<String>) -> Self
pub fn with_context_prompt(self, context_prompt: impl Into<String>) -> Self
Override the header prepended to injected memories (builder style).
Defaults to DEFAULT_CONTEXT_PROMPT.
Sourcepub fn with_limit(self, limit: usize) -> Self
pub fn with_limit(self, limit: usize) -> Self
Maximum memories returned per before_run() call (builder style).
Defaults to DEFAULT_LIMIT.
Sourcepub fn with_force_scan_fallback(self, force: bool) -> Self
pub fn with_force_scan_fallback(self, force: bool) -> Self
Force the plain-SCAN retrieval path even when the connected server
supports RediSearch (builder style). false by default: RediSearch
is detected and used automatically. Useful for tests, for pinning
behavior during a Redis Stack rollout, or for working around an
operational RediSearch problem without a code change. See the
module docs for why entries written under one path are not visible
via the other.
Trait Implementations§
Source§impl ContextProvider for RedisContextProvider
impl ContextProvider for RedisContextProvider
Source§fn before_run<'life0, 'life1, 'async_trait>(
&'life0 self,
ctx: &'life1 mut SessionContext,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn before_run<'life0, 'life1, 'async_trait>(
&'life0 self,
ctx: &'life1 mut SessionContext,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn after_run<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
request_messages: &'life1 [Message],
response_messages: &'life2 [Message],
_error: Option<&'life3 Error>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn after_run<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
request_messages: &'life1 [Message],
response_messages: &'life2 [Message],
_error: Option<&'life3 Error>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Source§fn is_history_provider(&self) -> bool
fn is_history_provider(&self) -> bool
HistoryProvider). Agent
and WorkflowAgent use this to
detect an already-attached history provider among a session’s
context_providers and avoid auto-attaching a redundant
InMemoryHistoryProvider.
Defaults to false; history providers override it to true.