pub struct LlmExtractor { /* private fields */ }Expand description
LLM-backed turn extractor that sends transcript windows to an OOB LLM with a structured extraction prompt.
Implementations§
Source§impl LlmExtractor
impl LlmExtractor
Sourcepub fn new(
name: impl Into<String>,
llm: Arc<dyn BaseLlm>,
prompt: impl Into<String>,
window_size: usize,
) -> LlmExtractor
pub fn new( name: impl Into<String>, llm: Arc<dyn BaseLlm>, prompt: impl Into<String>, window_size: usize, ) -> LlmExtractor
Create a new LLM-backed extractor.
name: key for storing results in Statellm: the out-of-band LLM to use for extractionprompt: system instruction describing what to extractwindow_size: how many recent turns to include
Sourcepub fn with_min_words(self, n: usize) -> LlmExtractor
pub fn with_min_words(self, n: usize) -> LlmExtractor
Set the minimum word count in the last user utterance to trigger extraction.
Turns where the user said fewer than n words will skip the LLM call.
Useful for filtering out “uh huh”, “ok”, “yes” style responses.
Sourcepub fn with_schema(self, schema: Value) -> LlmExtractor
pub fn with_schema(self, schema: Value) -> LlmExtractor
Set a JSON Schema for structured output.
When set, the schema is included in the prompt to guide the LLM toward producing valid JSON matching the schema.
Sourcepub fn with_trigger(self, trigger: ExtractionTrigger) -> LlmExtractor
pub fn with_trigger(self, trigger: ExtractionTrigger) -> LlmExtractor
Set the trigger mode for this extractor.
Sourcepub fn with_promotions(self, rules: Vec<FieldPromotion>) -> LlmExtractor
pub fn with_promotions(self, rules: Vec<FieldPromotion>) -> LlmExtractor
Set explicit field promotion rules.
Once promotion rules are present, top-level fields are no longer automatically flattened into state; only accepted rules promote.
Trait Implementations§
Source§impl TurnExtractor for LlmExtractor
impl TurnExtractor for LlmExtractor
Source§fn window_size(&self) -> usize
fn window_size(&self) -> usize
How many recent turns this extractor needs.
Source§fn should_extract(&self, window: &[TranscriptTurn]) -> bool
fn should_extract(&self, window: &[TranscriptTurn]) -> bool
Whether this extractor should run for the current turn. Read more
Source§fn trigger(&self) -> ExtractionTrigger
fn trigger(&self) -> ExtractionTrigger
The trigger mode for this extractor. Read more
Source§fn promotion_rules(&self) -> &[FieldPromotion]
fn promotion_rules(&self) -> &[FieldPromotion]
Field promotion rules for this extractor. Read more
Source§fn extract<'life0, 'life1, 'async_trait>(
&'life0 self,
window: &'life1 [TranscriptTurn],
) -> Pin<Box<dyn Future<Output = Result<Value, LlmError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
LlmExtractor: 'async_trait,
fn extract<'life0, 'life1, 'async_trait>(
&'life0 self,
window: &'life1 [TranscriptTurn],
) -> Pin<Box<dyn Future<Output = Result<Value, LlmError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
LlmExtractor: 'async_trait,
Extract structured data from the transcript window.
Source§fn extract_with_state<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
window: &'life1 [TranscriptTurn],
state: &'life2 State,
) -> Pin<Box<dyn Future<Output = Result<Value, LlmError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
fn extract_with_state<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
window: &'life1 [TranscriptTurn],
state: &'life2 State,
) -> Pin<Box<dyn Future<Output = Result<Value, LlmError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
Extract with access to session
State — for extractors whose sources
bind arguments from State (e.g. async fetch/agent resolvers). Read moreSource§fn on_complete(&self) -> Option<OnComplete>
fn on_complete(&self) -> Option<OnComplete>
An optional agent to run when this extractor’s results land in state —
the
on_complete(dispatch(agent)) effect. Fired by the pipeline after
promotion, only when the extractor produced a non-empty object.Auto Trait Implementations§
impl Freeze for LlmExtractor
impl !RefUnwindSafe for LlmExtractor
impl Send for LlmExtractor
impl Sync for LlmExtractor
impl Unpin for LlmExtractor
impl !UnwindSafe for LlmExtractor
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
Mutably borrows from an owned value. Read more
§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
§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>
Converts
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>
Converts
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>
Wrap the input message
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>,
Applies the layer to a service and wraps it in [
Layered].