pub struct LlmTextAgent { /* private fields */ }Expand description
Core text agent — calls BaseLlm::generate(), dispatches tools, loops
until the model produces a final text response.
Middleware hooks fire at each lifecycle point:
before_model/after_model— wraps eachBaseLlm::generate()call;before_modelmay return a cached response to skip the LLM entirely.before_tool/after_tool/on_tool_error— wraps each tool dispatch.on_error— called whenrun()is about to return an error.
Note: before_agent/after_agent are Live-session hooks that require an
InvocationContext (a Live WebSocket concept) and are therefore not invoked
by LlmTextAgent. Use before_model or wrap in a custom TextAgent if you
need entry/exit hooks for the text path.
Implementations§
Source§impl LlmTextAgent
impl LlmTextAgent
Sourcepub fn instruction(self, inst: impl Into<String>) -> LlmTextAgent
pub fn instruction(self, inst: impl Into<String>) -> LlmTextAgent
Set the system instruction.
Sourcepub fn instruction_provider(
self,
provider: impl InstructionProvider + 'static,
) -> LlmTextAgent
pub fn instruction_provider( self, provider: impl InstructionProvider + 'static, ) -> LlmTextAgent
Set a dynamic instruction source — an
InstructionProvider
(any Fn(&State) -> String closure, or a TemplateInstruction
under the templates feature) resolved against session state at
the start of every run. Wins over instruction.
Sourcepub fn llm_provider<F>(self, provider: F) -> LlmTextAgent
pub fn llm_provider<F>(self, provider: F) -> LlmTextAgent
Set a dynamic model source, resolved against session state at the start of every run — risk-based escalation to a stronger model, cost routing to a cheaper one, per-tenant model selection — without rebuilding the agent. Wins over the constructor’s model when set.
Sourcepub fn tools(self, dispatcher: Arc<ToolDispatcher>) -> LlmTextAgent
pub fn tools(self, dispatcher: Arc<ToolDispatcher>) -> LlmTextAgent
Set the tool dispatcher.
Sourcepub fn model(self, model: impl Into<String>) -> LlmTextAgent
pub fn model(self, model: impl Into<String>) -> LlmTextAgent
Call model instead of the provider’s default model, e.g.
"gemini-2.5-pro".
Sourcepub fn temperature(self, t: f32) -> LlmTextAgent
pub fn temperature(self, t: f32) -> LlmTextAgent
Set temperature.
Sourcepub fn max_output_tokens(self, n: u32) -> LlmTextAgent
pub fn max_output_tokens(self, n: u32) -> LlmTextAgent
Set max output tokens.
Sourcepub fn top_p(self, p: f32) -> LlmTextAgent
pub fn top_p(self, p: f32) -> LlmTextAgent
Set the nucleus sampling threshold.
Sourcepub fn top_k(self, k: u32) -> LlmTextAgent
pub fn top_k(self, k: u32) -> LlmTextAgent
Sample from the k most likely tokens.
Sourcepub fn stop_sequences(
self,
sequences: impl IntoIterator<Item = impl Into<String>>,
) -> LlmTextAgent
pub fn stop_sequences( self, sequences: impl IntoIterator<Item = impl Into<String>>, ) -> LlmTextAgent
End generation when the model produces any of sequences.
Sourcepub fn thinking_budget(self, tokens: u32) -> LlmTextAgent
pub fn thinking_budget(self, tokens: u32) -> LlmTextAgent
Give the model a thinking budget, in tokens.
Sourcepub fn built_in_tool(self, tool: Tool) -> LlmTextAgent
pub fn built_in_tool(self, tool: Tool) -> LlmTextAgent
Add a built-in tool (Google Search, code execution, URL context), sent alongside the dispatcher’s function declarations.
Sourcepub fn response_schema(self, schema: Value) -> LlmTextAgent
pub fn response_schema(self, schema: Value) -> LlmTextAgent
Constrain the reply to JSON matching schema.
Sourcepub fn output_key(self, key: impl Into<String>) -> LlmTextAgent
pub fn output_key(self, key: impl Into<String>) -> LlmTextAgent
Also write the final text to state under key (it is always written
to "output").
Sourcepub fn add_middleware(self, mw: Arc<dyn Middleware>) -> LlmTextAgent
pub fn add_middleware(self, mw: Arc<dyn Middleware>) -> LlmTextAgent
Append a middleware layer to the chain.
Layers are run in insertion order for before_* / on_error hooks
and in reverse insertion order for after_* hooks (outermost last).
Sourcepub fn with_middleware_chain(self, chain: MiddlewareChain) -> LlmTextAgent
pub fn with_middleware_chain(self, chain: MiddlewareChain) -> LlmTextAgent
Replace the entire middleware chain (advanced — prefer add_middleware).
Trait Implementations§
Source§impl TextAgent for LlmTextAgent
impl TextAgent for LlmTextAgent
Source§fn run<'life0, 'life1, 'async_trait>(
&'life0 self,
state: &'life1 State,
) -> Pin<Box<dyn Future<Output = Result<String, AgentError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
LlmTextAgent: 'async_trait,
fn run<'life0, 'life1, 'async_trait>(
&'life0 self,
state: &'life1 State,
) -> Pin<Box<dyn Future<Output = Result<String, AgentError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
LlmTextAgent: 'async_trait,
state. Returns the final text output. Read moreSource§fn run_with<'life0, 'life1, 'async_trait>(
&'life0 self,
request: RunRequest,
state: &'life1 State,
) -> Pin<Box<dyn Future<Output = Result<RunResult, AgentError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
LlmTextAgent: 'async_trait,
fn run_with<'life0, 'life1, 'async_trait>(
&'life0 self,
request: RunRequest,
state: &'life1 State,
) -> Pin<Box<dyn Future<Output = Result<RunResult, AgentError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
LlmTextAgent: 'async_trait,
Source§fn run_stream<'a>(
&'a self,
request: RunRequest,
state: State,
) -> Pin<Box<dyn Stream<Item = Result<RunEvent, AgentError>> + Send + 'a>>
fn run_stream<'a>( &'a self, request: RunRequest, state: State, ) -> Pin<Box<dyn Stream<Item = Result<RunEvent, AgentError>> + Send + 'a>>
RunEvents: text as the model writes
it, each tool call and result, then RunEvent::Finished. Read moreSource§fn stream(
&self,
prompt: impl Into<String>,
) -> Pin<Box<dyn Stream<Item = Result<RunEvent, AgentError>> + Send + '_>>where
Self: Sized,
fn stream(
&self,
prompt: impl Into<String>,
) -> Pin<Box<dyn Stream<Item = Result<RunEvent, AgentError>> + Send + '_>>where
Self: Sized,
Source§fn ask<'life0, 'async_trait>(
&'life0 self,
prompt: impl Into<String> + Send + 'async_trait,
) -> Pin<Box<dyn Future<Output = Result<String, AgentError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: Sized + 'async_trait,
fn ask<'life0, 'async_trait>(
&'life0 self,
prompt: impl Into<String> + Send + 'async_trait,
) -> Pin<Box<dyn Future<Output = Result<String, AgentError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: Sized + 'async_trait,
Source§fn ask_as<'life0, 'async_trait, T>(
&'life0 self,
prompt: impl Into<String> + Send + 'async_trait,
) -> Pin<Box<dyn Future<Output = Result<T, AgentError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: Sized + 'async_trait,
T: DeserializeOwned + JsonSchema + Send + 'async_trait,
fn ask_as<'life0, 'async_trait, T>(
&'life0 self,
prompt: impl Into<String> + Send + 'async_trait,
) -> Pin<Box<dyn Future<Output = Result<T, AgentError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: Sized + 'async_trait,
T: DeserializeOwned + JsonSchema + Send + 'async_trait,
T. Read moreAuto Trait Implementations§
impl Freeze for LlmTextAgent
impl !RefUnwindSafe for LlmTextAgent
impl Send for LlmTextAgent
impl Sync for LlmTextAgent
impl Unpin for LlmTextAgent
impl !UnwindSafe for LlmTextAgent
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<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> 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].