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;
#[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;