synaptic-callbacks 0.4.0

Callback handlers: RecordingCallback, TracingCallback, CompositeCallback
Documentation
mod composite;
mod cost_tracking;
mod metrics;
mod stdout;
mod tracing_cb;

pub use composite::CompositeCallback;
pub use cost_tracking::{
    default_pricing, CostTrackingCallback, ModelPricing, ModelUsage, UsageSnapshot,
};
pub use metrics::{MetricsCallback, MetricsSnapshot, ToolMetrics};
pub use stdout::StdOutCallbackHandler;
pub use tracing_cb::TracingCallback;

use std::sync::Arc;

use async_trait::async_trait;
use synaptic_core::{CallbackHandler, RunEvent, SynapticError};
use tokio::sync::RwLock;

/// A callback handler that records all received events for later inspection, useful for testing.
#[derive(Default, Clone)]
pub struct RecordingCallback {
    events: Arc<RwLock<Vec<RunEvent>>>,
}

impl RecordingCallback {
    pub fn new() -> Self {
        Self::default()
    }

    pub async fn events(&self) -> Vec<RunEvent> {
        self.events.read().await.clone()
    }
}

#[async_trait]
impl CallbackHandler for RecordingCallback {
    async fn on_event(&self, event: RunEvent) -> Result<(), SynapticError> {
        self.events.write().await.push(event);
        Ok(())
    }
}

#[cfg(feature = "otel")]
mod opentelemetry_cb;
#[cfg(feature = "otel")]
pub use opentelemetry_cb::OpenTelemetryCallback;