Skip to main content

simple_agents_core/
middleware.rs

1//! Middleware hooks for SimpleAgents core.
2
3use async_trait::async_trait;
4use simple_agent_type::prelude::{
5    CompletionRequest, CompletionResponse, Result, SimpleAgentsError,
6};
7use std::time::Duration;
8
9/// Middleware hooks for request lifecycle events.
10#[async_trait]
11pub trait Middleware: Send + Sync {
12    /// Called before a request is executed.
13    async fn before_request(&self, _request: &CompletionRequest) -> Result<()> {
14        Ok(())
15    }
16
17    /// Called after a response is received.
18    async fn after_response(
19        &self,
20        _request: &CompletionRequest,
21        _response: &CompletionResponse,
22        _latency: Duration,
23    ) -> Result<()> {
24        Ok(())
25    }
26
27    /// Called when a streaming request completes successfully.
28    async fn after_stream(
29        &self,
30        _request: &CompletionRequest,
31        _latency: Duration,
32    ) -> Result<()> {
33        Ok(())
34    }
35
36    /// Called when a response is served from cache.
37    async fn on_cache_hit(
38        &self,
39        _request: &CompletionRequest,
40        _response: &CompletionResponse,
41    ) -> Result<()> {
42        Ok(())
43    }
44
45    /// Called when a request fails.
46    async fn on_error(
47        &self,
48        _request: &CompletionRequest,
49        _error: &SimpleAgentsError,
50        _latency: Duration,
51    ) -> Result<()> {
52        Ok(())
53    }
54
55    /// Middleware name for diagnostics.
56    fn name(&self) -> &str {
57        "middleware"
58    }
59}