pub struct VertexAiRagMemoryService { /* private fields */ }Expand description
Memory service backed by Vertex AI RAG.
Stores memory as RAG files in a corpus (via ragFiles:upload) and uses
semantic search (:retrieveContexts) for retrieval.
§Quick start
let svc = VertexAiRagMemoryService::new(
VertexAiRagMemoryConfig::from_corpus(
"projects/my-proj/locations/us-central1/ragCorpora/my-corpus",
),
)
.with_token("ya29.my-access-token");
let hits = svc.search("session-1", "what did the user order?").await?;Implementations§
Source§impl VertexAiRagMemoryService
impl VertexAiRagMemoryService
Sourcepub fn new(config: VertexAiRagMemoryConfig) -> Self
pub fn new(config: VertexAiRagMemoryConfig) -> Self
Create a new Vertex AI RAG memory service.
No auth token is configured yet — call with_token
or with_token_refresher before issuing
requests.
Sourcepub fn with_token(self, token: impl Into<String>) -> Self
pub fn with_token(self, token: impl Into<String>) -> Self
Set a static bearer token for all requests.
Sourcepub fn with_token_refresher(
self,
f: impl Fn() -> String + Send + Sync + 'static,
) -> Self
pub fn with_token_refresher( self, f: impl Fn() -> String + Send + Sync + 'static, ) -> Self
Set a dynamic token refresher closure (invoked before every request).
Sourcepub async fn add_session_to_memory(
&self,
app_name: &str,
user_id: &str,
session_id: &str,
entries: &[MemoryEntry],
) -> Result<(), MemoryError>
pub async fn add_session_to_memory( &self, app_name: &str, user_id: &str, session_id: &str, entries: &[MemoryEntry], ) -> Result<(), MemoryError>
Ingest a batch of memory entries for a session, mirroring ADK’s
add_session_to_memory. Each entry is serialised as one JSON line and
the whole batch is uploaded as a single RAG file tagged with an encoded
display name.
app_name / user_id / session_id are encoded into the file display
name so that search can later filter by scope.
Sourcepub async fn search_memory(
&self,
app_name: &str,
user_id: &str,
query: &str,
) -> Result<Vec<MemoryEntry>, MemoryError>
pub async fn search_memory( &self, app_name: &str, user_id: &str, query: &str, ) -> Result<Vec<MemoryEntry>, MemoryError>
Search memory scoped to a specific app_name / user_id, mirroring
ADK’s search_memory. Filters retrieved contexts by the encoded display
name and parses the per-event JSON lines back into MemoryEntrys.
Trait Implementations§
Source§impl MemoryService for VertexAiRagMemoryService
impl MemoryService for VertexAiRagMemoryService
Source§fn store<'life0, 'life1, 'async_trait>(
&'life0 self,
session_id: &'life1 str,
entry: MemoryEntry,
) -> Pin<Box<dyn Future<Output = Result<(), MemoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn store<'life0, 'life1, 'async_trait>(
&'life0 self,
session_id: &'life1 str,
entry: MemoryEntry,
) -> Pin<Box<dyn Future<Output = Result<(), MemoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Ingest a single entry into the corpus. The session_id scopes the
uploaded file’s display name (app/user default to the entry key /
session id when not separately tracked).
Source§fn get<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_session_id: &'life1 str,
_key: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Option<MemoryEntry>, MemoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn get<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_session_id: &'life1 str,
_key: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Option<MemoryEntry>, MemoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Vertex AI RAG doesn’t support direct key-based retrieval — use
search instead.
Source§fn list<'life0, 'life1, 'async_trait>(
&'life0 self,
_session_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<MemoryEntry>, MemoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list<'life0, 'life1, 'async_trait>(
&'life0 self,
_session_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<MemoryEntry>, MemoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Listing is not supported by the RAG retrieval API (semantic only).
Source§fn search<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_session_id: &'life1 str,
query: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<MemoryEntry>, MemoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn search<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_session_id: &'life1 str,
query: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<MemoryEntry>, MemoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Semantic search against the corpus via :retrieveContexts. Results are
not scope-filtered here (use search_memory for
app/user scoping).
Source§fn delete<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_session_id: &'life1 str,
_key: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), MemoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn delete<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_session_id: &'life1 str,
_key: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), MemoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Deleting an individual RAG file by key is not supported by the retrieval
API — returns MemoryError::Unsupported rather than silently
succeeding (which would mask data that was never removed).
Source§fn clear<'life0, 'life1, 'async_trait>(
&'life0 self,
_session_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), MemoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn clear<'life0, 'life1, 'async_trait>(
&'life0 self,
_session_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), MemoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Clearing a corpus is a destructive admin operation performed out of band —
returns MemoryError::Unsupported rather than silently succeeding.
Auto Trait Implementations§
impl Freeze for VertexAiRagMemoryService
impl !RefUnwindSafe for VertexAiRagMemoryService
impl Send for VertexAiRagMemoryService
impl Sync for VertexAiRagMemoryService
impl Unpin for VertexAiRagMemoryService
impl !UnwindSafe for VertexAiRagMemoryService
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
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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>
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>
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§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].