use async_trait::async_trait;
use simple_agent_type::prelude::{
CompletionRequest, CompletionResponse, Result, SimpleAgentsError,
};
use std::time::Duration;
#[async_trait]
pub trait Middleware: Send + Sync {
async fn before_request(&self, _request: &CompletionRequest) -> Result<()> {
Ok(())
}
async fn after_response(
&self,
_request: &CompletionRequest,
_response: &CompletionResponse,
_latency: Duration,
) -> Result<()> {
Ok(())
}
async fn after_stream(&self, _request: &CompletionRequest, _latency: Duration) -> Result<()> {
Ok(())
}
async fn on_cache_hit(
&self,
_request: &CompletionRequest,
_response: &CompletionResponse,
) -> Result<()> {
Ok(())
}
async fn on_error(
&self,
_request: &CompletionRequest,
_error: &SimpleAgentsError,
_latency: Duration,
) -> Result<()> {
Ok(())
}
fn name(&self) -> &str {
"middleware"
}
}