use serde_json::Value;
#[derive(Debug, Clone)]
pub struct LlmCallRecord {
pub step_index: i32,
pub provider: String,
pub model: String,
pub prompt_tokens: i64,
pub completion_tokens: i64,
pub latency_ms: i64,
pub status: String,
}
#[derive(Debug, Clone)]
pub struct ToolCallRecord {
pub step_index: i32,
pub tool_name: String,
pub tool_type: String,
pub arguments: Value,
pub result: Option<Value>,
pub latency_ms: i64,
pub status: String,
}
#[async_trait::async_trait]
pub trait ObservabilitySink: Send + Sync {
async fn log_llm_call(&self, record: LlmCallRecord);
async fn log_tool_call(&self, record: ToolCallRecord);
}