pub struct SessionManager { /* private fields */ }Expand description
Orchestrates session operations using an Arc<dyn SessionStore>.
Analogous to Python’s SessionManager. Loads conversation history as
Vec<Message> for LLM multi-turn conversations, and saves Q&A entries
after each search completion.
Implementations§
Source§impl SessionManager
impl SessionManager
pub fn new(store: Arc<dyn SessionStore>) -> SessionManager
pub fn with_llm(self, llm: Arc<dyn Llm>) -> SessionManager
pub fn with_default_session_id(self, id: impl Into<String>) -> SessionManager
pub fn with_history_limit(self, limit: usize) -> SessionManager
Sourcepub async fn load_history_messages(
&self,
session_id: Option<&str>,
user_id: Option<&str>,
) -> Result<Vec<Message>, SessionError>
pub async fn load_history_messages( &self, session_id: Option<&str>, user_id: Option<&str>, ) -> Result<Vec<Message>, SessionError>
Load conversation history as alternating User/Assistant messages.
Returns the last history_limit Q&A pairs as:
[User(q1), Assistant(a1), User(q2), Assistant(a2), ...]
Sourcepub async fn load_history_both(
&self,
session_id: Option<&str>,
user_id: Option<&str>,
) -> Result<(Vec<Message>, String), SessionError>
pub async fn load_history_both( &self, session_id: Option<&str>, user_id: Option<&str>, ) -> Result<(Vec<Message>, String), SessionError>
Load history as structured messages AND a formatted string, with a single store round-trip.
Sourcepub async fn save_qa(
&self,
session_id: Option<&str>,
user_id: Option<&str>,
question: &str,
answer: &str,
context: Option<&str>,
used_graph_element_ids: Option<UsedGraphElementIds>,
) -> Result<String, SessionError>
pub async fn save_qa( &self, session_id: Option<&str>, user_id: Option<&str>, question: &str, answer: &str, context: Option<&str>, used_graph_element_ids: Option<UsedGraphElementIds>, ) -> Result<String, SessionError>
Save a Q&A exchange to the session. Returns the generated qa_id.
used_graph_element_ids carries the node/edge IDs that were consulted
during retrieval so the memify pipeline can trace which graph elements
produced the answer (mirrors Python session_manager.py:492-525,
add_qa(..., used_graph_element_ids=used_graph_element_ids)).
Sourcepub async fn delete_session(
&self,
session_id: Option<&str>,
user_id: Option<&str>,
) -> Result<bool, SessionError>
pub async fn delete_session( &self, session_id: Option<&str>, user_id: Option<&str>, ) -> Result<bool, SessionError>
Delete all Q&A entries for a session.
Sourcepub fn format_entries(entries: &[SessionQAEntry]) -> String
pub fn format_entries(entries: &[SessionQAEntry]) -> String
Format Q&A entries as a human-readable string (for debugging / compatibility
with Python’s SessionManager.format_entries).
When include_context is true, the context field is included between
QUESTION and ANSWER (matching the Python include_context parameter).
Sourcepub fn format_entries_with_context(
entries: &[SessionQAEntry],
include_context: bool,
) -> String
pub fn format_entries_with_context( entries: &[SessionQAEntry], include_context: bool, ) -> String
Format Q&A entries, optionally including context.
Sourcepub async fn update_qa(
&self,
session_id: Option<&str>,
user_id: Option<&str>,
qa_id: &str,
updates: SessionQAUpdate,
) -> Result<bool, SessionError>
pub async fn update_qa( &self, session_id: Option<&str>, user_id: Option<&str>, qa_id: &str, updates: SessionQAUpdate, ) -> Result<bool, SessionError>
Update arbitrary fields on a QA entry.
Sourcepub async fn add_feedback(
&self,
session_id: Option<&str>,
user_id: Option<&str>,
qa_id: &str,
feedback_text: Option<&str>,
feedback_score: Option<i32>,
) -> Result<bool, SessionError>
pub async fn add_feedback( &self, session_id: Option<&str>, user_id: Option<&str>, qa_id: &str, feedback_text: Option<&str>, feedback_score: Option<i32>, ) -> Result<bool, SessionError>
Add or update feedback on a QA entry (convenience over update_qa).
Resets memify_metadata.feedback_weights_applied to false so that the
memify pipeline will re-apply weights on the next run.
Sourcepub async fn delete_feedback(
&self,
session_id: Option<&str>,
user_id: Option<&str>,
qa_id: &str,
) -> Result<bool, SessionError>
pub async fn delete_feedback( &self, session_id: Option<&str>, user_id: Option<&str>, qa_id: &str, ) -> Result<bool, SessionError>
Clear feedback from a QA entry.
Sourcepub async fn latest_qa_id(
&self,
session_id: Option<&str>,
user_id: Option<&str>,
) -> Result<Option<String>, SessionError>
pub async fn latest_qa_id( &self, session_id: Option<&str>, user_id: Option<&str>, ) -> Result<Option<String>, SessionError>
Return the qa_id of the most-recent Q&A entry in the session.
Returns None when the session has no entries yet. Used to route
conversationally-detected feedback to the prior QA entry before saving the
new turn (mirrors Python session_manager.py:462-469).
Sourcepub async fn get_graph_context(
&self,
session_id: Option<&str>,
user_id: Option<&str>,
) -> Result<Option<String>, SessionError>
pub async fn get_graph_context( &self, session_id: Option<&str>, user_id: Option<&str>, ) -> Result<Option<String>, SessionError>
Retrieve graph knowledge snapshot for a session.
Sourcepub async fn set_graph_context(
&self,
session_id: Option<&str>,
user_id: Option<&str>,
context: &str,
) -> Result<(), SessionError>
pub async fn set_graph_context( &self, session_id: Option<&str>, user_id: Option<&str>, context: &str, ) -> Result<(), SessionError>
Store graph knowledge snapshot for a session.
Sourcepub async fn add_agent_trace_step(
&self,
user_id: &str,
session_id: Option<&str>,
origin_function: &str,
status: &str,
memory_query: &str,
memory_context: &str,
method_params: Value,
method_return_value: Option<Value>,
error_message: &str,
generate_feedback: bool,
) -> Result<String, SessionError>
pub async fn add_agent_trace_step( &self, user_id: &str, session_id: Option<&str>, origin_function: &str, status: &str, memory_query: &str, memory_context: &str, method_params: Value, method_return_value: Option<Value>, error_message: &str, generate_feedback: bool, ) -> Result<String, SessionError>
Append one agent-trace step to the session and return the generated
trace_id (UUID4).
Mirrors Python’s SessionManager.add_agent_trace_step.
When generate_feedback is true, this method attempts to use the
configured LLM (with_llm) to summarize method_return_value; if no
LLM is wired or generation fails, it falls back to deterministic
feedback (<origin> succeeded/failed).
Sourcepub async fn get_agent_trace_session(
&self,
user_id: &str,
session_id: Option<&str>,
last_n: Option<usize>,
) -> Result<Vec<SessionTraceStep>, SessionError>
pub async fn get_agent_trace_session( &self, user_id: &str, session_id: Option<&str>, last_n: Option<usize>, ) -> Result<Vec<SessionTraceStep>, SessionError>
Retrieve agent-trace steps for a session, oldest-first.
If last_n is Some(n), the trailing n entries are returned
(mirrors Python’s entries[-last_n:]).
Trait Implementations§
Source§impl Clone for SessionManager
impl Clone for SessionManager
Source§fn clone(&self) -> SessionManager
fn clone(&self) -> SessionManager
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl !RefUnwindSafe for SessionManager
impl !UnwindSafe for SessionManager
impl Freeze for SessionManager
impl Send for SessionManager
impl Sync for SessionManager
impl Unpin for SessionManager
impl UnsafeUnpin for SessionManager
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<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<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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>
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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T, U, C> IntoWithContext<U, C> for Twhere
U: FromWithContext<T, C>,
impl<T, U, C> IntoWithContext<U, C> for Twhere
U: FromWithContext<T, C>,
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.