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(&self, _request: &CompletionRequest, _latency: Duration) -> Result<()> {
29        Ok(())
30    }
31
32    /// Called when a response is served from cache.
33    async fn on_cache_hit(
34        &self,
35        _request: &CompletionRequest,
36        _response: &CompletionResponse,
37    ) -> Result<()> {
38        Ok(())
39    }
40
41    /// Called when a request fails.
42    async fn on_error(
43        &self,
44        _request: &CompletionRequest,
45        _error: &SimpleAgentsError,
46        _latency: Duration,
47    ) -> Result<()> {
48        Ok(())
49    }
50
51    /// Middleware name for diagnostics.
52    fn name(&self) -> &str {
53        "middleware"
54    }
55}