pub struct ContextScope { /* private fields */ }Expand description
One conversation’s working context: append to it, read it back bounded, or
render the prompt-ready block. Build it with Laser::context.
Implementations§
Source§impl ContextScope
impl ContextScope
Sourcepub async fn append(
&self,
topic: AgentTopic<'_>,
payload: impl Into<Vec<u8>>,
) -> Result<(), LaserError>
pub async fn append( &self, topic: AgentTopic<'_>, payload: impl Into<Vec<u8>>, ) -> Result<(), LaserError>
Append payload to topic within this conversation. The provenance is
pinned to the conversation, so a later fetch reads it
back in order.
Sourcepub async fn fetch(
&self,
topics: Vec<AgentTopic<'static>>,
n: usize,
token_budget: Option<usize>,
) -> Result<Vec<ContextMessage>, LaserError>
pub async fn fetch( &self, topics: Vec<AgentTopic<'static>>, n: usize, token_budget: Option<usize>, ) -> Result<Vec<ContextMessage>, LaserError>
Read this conversation’s history from topics, bounded to the last
n messages. token_budget trims the selected messages to an
estimated token count after n, so the read is bounded by turns and by
prompt size at once. The bound is required: an unbounded read of a
long-lived conversation is a replay nobody asked for, so the full walk
has its own deliberate spelling (fetch_with).
Sourcepub async fn fetch_with(
&self,
topics: Vec<AgentTopic<'static>>,
policy: Box<dyn ContextPolicy>,
) -> Result<Vec<ContextMessage>, LaserError>
pub async fn fetch_with( &self, topics: Vec<AgentTopic<'static>>, policy: Box<dyn ContextPolicy>, ) -> Result<Vec<ContextMessage>, LaserError>
Read this conversation’s history from topics under an explicit
ContextPolicy, the deep form behind fetch.
Sourcepub async fn block(
&self,
topics: Vec<AgentTopic<'static>>,
n: usize,
token_budget: Option<usize>,
) -> Result<String, LaserError>
pub async fn block( &self, topics: Vec<AgentTopic<'static>>, n: usize, token_budget: Option<usize>, ) -> Result<String, LaserError>
The last n messages rendered as one newline-joined text block, the
prompt-ready form (each payload as UTF-8, lossy). token_budget trims
the selected messages to an estimated token count after n, so the
block is bounded by turns and by prompt size at once.
Sourcepub async fn state<S, F>(
&self,
topics: Vec<AgentTopic<'static>>,
bound: ReplayBound,
init: S,
fold: F,
) -> Result<S, LaserError>where
F: FnMut(S, &ContextMessage) -> S,
pub async fn state<S, F>(
&self,
topics: Vec<AgentTopic<'static>>,
bound: ReplayBound,
init: S,
fold: F,
) -> Result<S, LaserError>where
F: FnMut(S, &ContextMessage) -> S,
Rebuild in-memory state by folding this conversation’s log under the
explicit bound (the ReplayBound vocabulary: offsets, last-n, or
the deliberately spelled full walk).
Sourcepub async fn state_with<Store, S, F>(
&self,
store: &Store,
topics: Vec<AgentTopic<'static>>,
init: S,
fold: F,
) -> Result<S, LaserError>
pub async fn state_with<Store, S, F>( &self, store: &Store, topics: Vec<AgentTopic<'static>>, init: S, fold: F, ) -> Result<S, LaserError>
Like state but seeded through a SnapshotStore:
the newest snapshot’s state (JSON-decoded into S) plus a replay of
only the tail past it.
Sourcepub fn memory(&self, namespace: impl Into<String>) -> ScopedMemory
pub fn memory(&self, namespace: impl Into<String>) -> ScopedMemory
This conversation’s memory in namespace, pre-scoped so recall and
remember never repeat the conversation id: the same session the
messages belong to, seen as memory. Durable facts and the knowledge
graph stay deliberately cross-conversation (a fact learned in one
session is worth recalling in the next), so they are reached through
Laser::memory/Laser::graph and not narrowed here.
Sourcepub fn memory_with(
&self,
namespace: impl Into<String>,
backend: MemoryBackend,
) -> ScopedMemory
pub fn memory_with( &self, namespace: impl Into<String>, backend: MemoryBackend, ) -> ScopedMemory
memory on an explicit MemoryBackend.
Sourcepub fn graph(&self, name: impl Into<String>) -> GraphHandle<'_>
pub fn graph(&self, name: impl Into<String>) -> GraphHandle<'_>
The knowledge graph name, reached from this scope for the common flow
where a task streams messages, keeps session memory, and resolves the
dependencies between them. The graph is returned unnarrowed on purpose:
a dependency or knowledge graph is shared across conversations (a
service-to-component edge holds no matter which task asked), so scoping
it to one conversation would hide the very relationships the caller
wants. Identical to Laser::graph, offered here so one scope reaches
every primitive. Feature graph.
Sourcepub async fn checkpoint(
&self,
topics: &[AgentTopic<'static>],
) -> Result<Checkpoint, LaserError>
pub async fn checkpoint( &self, topics: &[AgentTopic<'static>], ) -> Result<Checkpoint, LaserError>
The current tail of topics as a Checkpoint: fold up to it with
ReplayBound::At or resume after it with
ReplayBound::FromCheckpoint. Offsets are per topic partition, not
per conversation.
Sourcepub fn conversation(&self) -> ConversationId
pub fn conversation(&self) -> ConversationId
This context’s conversation id.
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for ContextScope
impl !UnwindSafe for ContextScope
impl Freeze for ContextScope
impl Send for ContextScope
impl Sync for ContextScope
impl Unpin for ContextScope
impl UnsafeUnpin for ContextScope
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.impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
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> 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> 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.