Skip to main content

AgentMiddleware

Trait AgentMiddleware 

Source
pub trait AgentMiddleware: Send + Sync {
    // Provided methods
    fn before_agent<'life0, 'life1, 'async_trait>(
        &'life0 self,
        _messages: &'life1 mut Vec<Message>,
    ) -> Pin<Box<dyn Future<Output = Result<(), SynapticError>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait { ... }
    fn after_agent<'life0, 'life1, 'async_trait>(
        &'life0 self,
        _messages: &'life1 mut Vec<Message>,
    ) -> Pin<Box<dyn Future<Output = Result<(), SynapticError>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait { ... }
    fn before_model<'life0, 'life1, 'async_trait>(
        &'life0 self,
        _request: &'life1 mut ModelRequest,
    ) -> Pin<Box<dyn Future<Output = Result<(), SynapticError>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait { ... }
    fn after_model<'life0, 'life1, 'life2, 'async_trait>(
        &'life0 self,
        _request: &'life1 ModelRequest,
        _response: &'life2 mut ModelResponse,
    ) -> Pin<Box<dyn Future<Output = Result<(), SynapticError>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait,
             'life2: 'async_trait { ... }
    fn wrap_model_call<'life0, 'life1, 'async_trait>(
        &'life0 self,
        request: ModelRequest,
        next: &'life1 dyn ModelCaller,
    ) -> Pin<Box<dyn Future<Output = Result<ModelResponse, SynapticError>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait { ... }
    fn wrap_tool_call<'life0, 'life1, 'async_trait>(
        &'life0 self,
        request: ToolCallRequest,
        next: &'life1 dyn ToolCaller,
    ) -> Pin<Box<dyn Future<Output = Result<Value, SynapticError>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait { ... }
}
Expand description

Middleware that can intercept and modify agent lifecycle events.

All methods have default no-op implementations, so middleware only needs to override the hooks it cares about.

§Lifecycle order

before_agent
  loop {
    before_model  ->  wrap_model_call  ->  after_model
    for each tool_call { wrap_tool_call }
  }
after_agent

Provided Methods§

Source

fn before_agent<'life0, 'life1, 'async_trait>( &'life0 self, _messages: &'life1 mut Vec<Message>, ) -> Pin<Box<dyn Future<Output = Result<(), SynapticError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Called once when the agent starts executing.

Source

fn after_agent<'life0, 'life1, 'async_trait>( &'life0 self, _messages: &'life1 mut Vec<Message>, ) -> Pin<Box<dyn Future<Output = Result<(), SynapticError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Called once when the agent finishes executing.

Source

fn before_model<'life0, 'life1, 'async_trait>( &'life0 self, _request: &'life1 mut ModelRequest, ) -> Pin<Box<dyn Future<Output = Result<(), SynapticError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Called before each model invocation. Can modify the request.

Source

fn after_model<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, _request: &'life1 ModelRequest, _response: &'life2 mut ModelResponse, ) -> Pin<Box<dyn Future<Output = Result<(), SynapticError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Called after each model invocation. Can modify the response.

Source

fn wrap_model_call<'life0, 'life1, 'async_trait>( &'life0 self, request: ModelRequest, next: &'life1 dyn ModelCaller, ) -> Pin<Box<dyn Future<Output = Result<ModelResponse, SynapticError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Wraps the model call. Override to intercept or replace the model invocation.

Source

fn wrap_tool_call<'life0, 'life1, 'async_trait>( &'life0 self, request: ToolCallRequest, next: &'life1 dyn ToolCaller, ) -> Pin<Box<dyn Future<Output = Result<Value, SynapticError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Wraps a tool call. Override to intercept or replace tool execution.

Implementors§