Skip to main content

CircuitBreakerMiddleware

Struct CircuitBreakerMiddleware 

Source
pub struct CircuitBreakerMiddleware { /* private fields */ }
Expand description

Middleware that implements the circuit breaker pattern for tool calls.

Tracks failures per tool name and opens the circuit when failures exceed the configured threshold. After the recovery timeout, a single probe request is allowed through (half-open). If it succeeds, the circuit closes; if it fails, the circuit reopens.

Implementations§

Source§

impl CircuitBreakerMiddleware

Source

pub fn new(config: CircuitBreakerConfig) -> Self

Source

pub async fn state_for(&self, tool_name: &str) -> CircuitState

Get the current state for a given tool name.

Trait Implementations§

Source§

impl AgentMiddleware for CircuitBreakerMiddleware

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.
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 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 before_file_op<'life0, 'life1, 'async_trait>( &'life0 self, _op: &'life1 FileOp, ) -> Pin<Box<dyn Future<Output = Result<FileOpDecision, SynapticError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Called before a file operation. Return Deny to block it.
Source§

fn after_file_op<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, _op: &'life1 FileOp, _result: &'life2 FileOpResult, ) -> 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 a file operation completes.
Source§

fn before_command<'life0, 'life1, 'async_trait>( &'life0 self, _cmd: &'life1 CommandOp, ) -> Pin<Box<dyn Future<Output = Result<CommandDecision, SynapticError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Called before a shell command. Return Deny to block it.
Source§

fn after_command<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, _cmd: &'life1 CommandOp, _result: &'life2 CommandResult, ) -> 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 a shell command completes.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.