synaptic-callbacks 0.4.0

Callback handlers: RecordingCallback, TracingCallback, CompositeCallback
Documentation
use async_trait::async_trait;
use synaptic_core::{CallbackHandler, RunEvent, SynapticError};

pub struct TracingCallback;

impl TracingCallback {
    pub fn new() -> Self {
        Self
    }
}

impl Default for TracingCallback {
    fn default() -> Self {
        Self::new()
    }
}

#[async_trait]
impl CallbackHandler for TracingCallback {
    async fn on_event(&self, event: RunEvent) -> Result<(), SynapticError> {
        match event {
            RunEvent::RunStarted { run_id, session_id } => {
                tracing::info!(run_id = %run_id, session_id = %session_id, "run started");
            }
            RunEvent::RunStep { run_id, step } => {
                tracing::info!(run_id = %run_id, step = step, "run step");
            }
            RunEvent::LlmCalled {
                run_id,
                message_count,
            } => {
                tracing::info!(run_id = %run_id, message_count = message_count, "LLM called");
            }
            RunEvent::ToolCalled { run_id, tool_name } => {
                tracing::info!(run_id = %run_id, tool_name = %tool_name, "tool called");
            }
            RunEvent::RunFinished { run_id, output } => {
                tracing::info!(run_id = %run_id, output_len = output.len(), "run finished");
            }
            RunEvent::RunFailed { run_id, error } => {
                tracing::error!(run_id = %run_id, error = %error, "run failed");
            }
            RunEvent::BeforeToolCall {
                run_id,
                tool_name,
                arguments,
            } => {
                tracing::info!(run_id = %run_id, tool_name = %tool_name, args_len = arguments.len(), "before tool call");
            }
            RunEvent::AfterToolCall {
                run_id,
                tool_name,
                result,
            } => {
                tracing::info!(run_id = %run_id, tool_name = %tool_name, result_len = result.len(), "after tool call");
            }
            RunEvent::BeforeMessage {
                run_id,
                message_count,
            } => {
                tracing::info!(run_id = %run_id, message_count = message_count, "before message");
            }
            RunEvent::AfterMessage {
                run_id,
                response_length,
            } => {
                tracing::info!(run_id = %run_id, response_length = response_length, "after message");
            }
        }
        Ok(())
    }
}