pub struct HumanInTheLoopMiddleware { /* private fields */ }Expand description
Pauses tool execution to request human approval.
When a tool call targets one of the configured tool names (or all
tools if the set is empty), the middleware invokes the
ApprovalCallback. If the callback returns false, the tool call
is replaced with an error message fed back to the model.
Implementations§
Source§impl HumanInTheLoopMiddleware
impl HumanInTheLoopMiddleware
Sourcepub fn new(callback: Arc<dyn ApprovalCallback>) -> Self
pub fn new(callback: Arc<dyn ApprovalCallback>) -> Self
Create middleware that requires approval for all tool calls.
Trait Implementations§
Source§impl AgentMiddleware for HumanInTheLoopMiddleware
impl AgentMiddleware for HumanInTheLoopMiddleware
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,
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.
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,
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,
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,
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,
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,
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.
Auto Trait Implementations§
impl Freeze for HumanInTheLoopMiddleware
impl !RefUnwindSafe for HumanInTheLoopMiddleware
impl Send for HumanInTheLoopMiddleware
impl Sync for HumanInTheLoopMiddleware
impl Unpin for HumanInTheLoopMiddleware
impl UnsafeUnpin for HumanInTheLoopMiddleware
impl !UnwindSafe for HumanInTheLoopMiddleware
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