pub struct SemanticRecall { /* private fields */ }Expand description
Semantic ranking is an effect because an index and embedding implementation can change independently of durable memory truth.
§The journaled selection is the screened one
The index is derived, so it keeps naming versions after they stop being current truth: a superseded version after a correction, an expired one after its window, an erased one after a retention sweep. Each is routine — a derived index is stale by construction between rebuilds — and none may decide what a model is shown or whether the query answers at all. So live dispatch screens every hit against the authoritative store at the query’s journaled cutoff and records only the survivors; a hit whose version is no longer the one a fresh recall would see simply leaves the selection.
What screening deliberately does not absorb: a present version whose
content or security metadata moved under its digest, and a hit outside the
query’s scope. Those are integrity findings about the store and the
retriever respectively, they stay refusals, and they are checked where
replay also runs — in StepCtx::semantic_recall.
Trait Implementations§
Source§impl Clone for SemanticRecall
impl Clone for SemanticRecall
Source§impl Debug for SemanticRecall
impl Debug for SemanticRecall
Source§impl Effect for SemanticRecall
impl Effect for SemanticRecall
Source§type Output = Vec<SemanticHit>
type Output = Vec<SemanticHit>
Source§fn descriptor(&self) -> EffectDescriptor
fn descriptor(&self) -> EffectDescriptor
Source§fn recovery(&self) -> Recovery
fn recovery(&self) -> Recovery
InDoubt failure. The two are the
same situation reached from different directions.Source§fn max_sensitivity(&self) -> Sensitivity
fn max_sensitivity(&self) -> Sensitivity
Source§fn sink_arguments(&self) -> Option<&Value>
fn sink_arguments(&self) -> Option<&Value>
Source§fn perform<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Self::Output, EffectError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn perform<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Self::Output, EffectError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn attach(&mut self, _provenance: &Provenance)
fn attach(&mut self, _provenance: &Provenance)
Source§fn gen_ai_operation(&self) -> Option<&'static str>
fn gen_ai_operation(&self) -> Option<&'static str>
Source§fn gen_ai_request(&self) -> Option<GenAiRequest>
fn gen_ai_request(&self) -> Option<GenAiRequest>
GenAI
span attributes. Read moreSource§fn gen_ai_response(&self, output: &Self::Output) -> Option<GenAiResponse>
fn gen_ai_response(&self, output: &Self::Output) -> Option<GenAiResponse>
Source§fn retry(&self) -> RetryPolicy
fn retry(&self) -> RetryPolicy
Source§fn retries_landed(&self) -> bool
fn retries_landed(&self) -> bool
Source§fn rebind(&mut self, _arguments: Value) -> bool
fn rebind(&mut self, _arguments: Value) -> bool
arguments in place of the ones this effect was built over,
where it can — what a declared redaction at a sink needs. Read moreSource§fn outbound_bytes(&self) -> u64
fn outbound_bytes(&self) -> u64
Source§fn credential_binding(&self) -> Option<CredentialBinding>
fn credential_binding(&self) -> Option<CredentialBinding>
Source§fn protected_fields(&self) -> &[ProtectedField]
fn protected_fields(&self) -> &[ProtectedField]
Source§fn delegation_depth(&self) -> Option<usize>
fn delegation_depth(&self) -> Option<usize>
Source§fn source(&self) -> SourceId
fn source(&self) -> SourceId
Source§fn output_sensitivity(&self) -> Sensitivity
fn output_sensitivity(&self) -> Sensitivity
Auto Trait Implementations§
impl !RefUnwindSafe for SemanticRecall
impl !UnwindSafe for SemanticRecall
impl Freeze for SemanticRecall
impl Send for SemanticRecall
impl Sync for SemanticRecall
impl Unpin for SemanticRecall
impl UnsafeUnpin for SemanticRecall
Blanket Implementations§
Source§impl<E> AnyEffect for Ewhere
E: Effect,
impl<E> AnyEffect for Ewhere
E: Effect,
Source§fn spend_erased(&self, output: &Value) -> Spend
fn spend_erased(&self, output: &Value) -> Spend
Round-trips the output to ask the typed effect what it cost.
A type that cannot be deserialized from its own serialization is already
broken for replay — Effect::Output requires the round-trip, and the
journal reconstructs every output that way. Charging zero here is the
same answer replay would reach, and the defect surfaces where it belongs.
Source§fn gen_ai_response_erased(&self, output: &Value) -> Option<GenAiResponse>
fn gen_ai_response_erased(&self, output: &Value) -> Option<GenAiResponse>
Round-trips the output, for the reason
spend_erased does.
fn descriptor(&self) -> EffectDescriptor
fn attach_erased(&mut self, provenance: &Provenance)
fn gen_ai_operation(&self) -> Option<&'static str>
fn mutates(&self) -> bool
fn recovery(&self) -> Recovery
fn retry(&self) -> RetryPolicy
fn retries_landed(&self) -> bool
fn max_sensitivity(&self) -> Sensitivity
fn sink_arguments(&self) -> Option<&Value>
fn rebind_erased(&mut self, arguments: Value) -> bool
fn outbound_bytes(&self) -> u64
fn credential_binding(&self) -> Option<CredentialBinding>
fn protected_fields(&self) -> &[ProtectedField]
fn delegation_depth(&self) -> Option<usize>
fn source(&self) -> SourceId
fn trust(&self) -> Trust
fn output_sensitivity(&self) -> Sensitivity
fn gen_ai_request(&self) -> Option<GenAiRequest>
fn perform_erased<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Value, EffectError>> + Send + 'async_trait>>where
'life0: 'async_trait,
E: 'async_trait,
fn reconcile_erased<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Reconciliation<Value>, EffectError>> + Send + 'async_trait>>where
'life0: 'async_trait,
E: 'async_trait,
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
Source§impl<E> BuildsEffect<E> for Ewhere
E: Effect,
impl<E> BuildsEffect<E> for Ewhere
E: Effect,
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> 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 more