pub struct ObserverHost { /* private fields */ }Expand description
Holds registered observers and dispatches notifications to each.
Observers run in registration order. All observers are always notified — there is no short-circuiting (use the hook system for flow control).
An empty host (no observers registered) is effectively zero-cost:
each notification call iterates an empty Vec.
Implementations§
Source§impl ObserverHost
impl ObserverHost
Sourcepub fn new() -> Self
pub fn new() -> Self
Create an empty observer host.
Equivalent to ObserverHost::default but more explicit.
Sourcepub fn register(&mut self, observer: Arc<dyn LoopObserver>)
pub fn register(&mut self, observer: Arc<dyn LoopObserver>)
Register an observer.
Observers are called in registration order at each lifecycle point. Registering the same observer twice will result in duplicate notifications.
Sourcepub fn reset_all(&self)
pub fn reset_all(&self)
Reset all observers for a new session.
Calls LoopObserver::reset on every registered observer,
allowing them to clear per-session accumulators.
Sourcepub fn on_session_start(&self, ctx: &SessionStartContext)
pub fn on_session_start(&self, ctx: &SessionStartContext)
Dispatch LoopObserver::on_session_start to all observers.
Iterates registered observers in registration order.
Sourcepub fn on_session_end(&self, ctx: &SessionEndContext)
pub fn on_session_end(&self, ctx: &SessionEndContext)
Dispatch LoopObserver::on_session_end to all observers.
Iterates registered observers in registration order.
Sourcepub fn on_turn_start(&self, ctx: &TurnStartContext)
pub fn on_turn_start(&self, ctx: &TurnStartContext)
Dispatch LoopObserver::on_turn_start to all observers.
Iterates registered observers in registration order.
Sourcepub fn on_turn_end(&self, ctx: &TurnEndContext)
pub fn on_turn_end(&self, ctx: &TurnEndContext)
Dispatch LoopObserver::on_turn_end to all observers.
Iterates registered observers in registration order.
Sourcepub fn on_stream_success(&self, ctx: &StreamContext)
pub fn on_stream_success(&self, ctx: &StreamContext)
Dispatch LoopObserver::on_stream_success to all observers.
Iterates registered observers in registration order.
Sourcepub fn on_stream_failure(&self, ctx: &StreamFailureContext)
pub fn on_stream_failure(&self, ctx: &StreamFailureContext)
Dispatch LoopObserver::on_stream_failure to all observers.
Iterates registered observers in registration order.
Sourcepub fn on_response(&self, ctx: &ResponseContext)
pub fn on_response(&self, ctx: &ResponseContext)
Dispatch LoopObserver::on_response to all observers.
Iterates registered observers in registration order.
Sourcepub fn on_tool_pre(&self, ctx: &ToolPreContext)
pub fn on_tool_pre(&self, ctx: &ToolPreContext)
Dispatch LoopObserver::on_tool_pre to all observers.
Iterates registered observers in registration order.
Sourcepub fn on_tool_post(&self, ctx: &ToolPostContext)
pub fn on_tool_post(&self, ctx: &ToolPostContext)
Dispatch LoopObserver::on_tool_post to all observers.
Iterates registered observers in registration order.
Sourcepub fn on_compaction(&self, ctx: &CompactedContext)
pub fn on_compaction(&self, ctx: &CompactedContext)
Dispatch LoopObserver::on_compaction to all observers.
Iterates registered observers in registration order.
Sourcepub fn on_fallback(&self, ctx: &FallbackContext)
pub fn on_fallback(&self, ctx: &FallbackContext)
Dispatch LoopObserver::on_fallback to all observers.
Iterates registered observers in registration order.
Sourcepub fn on_model_switched(&self, ctx: &ModelSwitchedContext)
pub fn on_model_switched(&self, ctx: &ModelSwitchedContext)
Dispatch LoopObserver::on_model_switched to all observers.
Iterates registered observers in registration order.
Sourcepub fn on_loop_detected(&self, ctx: &LoopDetectedContext)
pub fn on_loop_detected(&self, ctx: &LoopDetectedContext)
Dispatch LoopObserver::on_loop_detected to all observers.
Iterates registered observers in registration order.
Sourcepub fn on_convergence_detected(&self, ctx: &ConvergenceDetectedContext)
pub fn on_convergence_detected(&self, ctx: &ConvergenceDetectedContext)
Dispatch LoopObserver::on_convergence_detected to all observers.
Iterates registered observers in registration order.