Skip to main content

synaptic_condenser/
middleware.rs

1use std::sync::Arc;
2
3use async_trait::async_trait;
4use synaptic_core::SynapticError;
5use synaptic_middleware::{AgentMiddleware, ModelRequest};
6
7use crate::Condenser;
8
9/// Middleware that applies a condenser to messages before each model call.
10pub struct CondenserMiddleware {
11    condenser: Arc<dyn Condenser>,
12}
13
14impl CondenserMiddleware {
15    pub fn new(condenser: Arc<dyn Condenser>) -> Self {
16        Self { condenser }
17    }
18}
19
20#[async_trait]
21impl AgentMiddleware for CondenserMiddleware {
22    async fn before_model(&self, request: &mut ModelRequest) -> Result<(), SynapticError> {
23        request.messages = self.condenser.condense(request.messages.clone()).await?;
24        Ok(())
25    }
26}