feat: add verbose logging and complete observability (#251)
This commit is contained in:
parent
6d56a040ce
commit
50f508766f
8 changed files with 316 additions and 5 deletions
|
|
@ -16,6 +16,35 @@ impl Observer for LogObserver {
|
|||
ObserverEvent::AgentStart { provider, model } => {
|
||||
info!(provider = %provider, model = %model, "agent.start");
|
||||
}
|
||||
ObserverEvent::LlmRequest {
|
||||
provider,
|
||||
model,
|
||||
messages_count,
|
||||
} => {
|
||||
info!(
|
||||
provider = %provider,
|
||||
model = %model,
|
||||
messages_count = messages_count,
|
||||
"llm.request"
|
||||
);
|
||||
}
|
||||
ObserverEvent::LlmResponse {
|
||||
provider,
|
||||
model,
|
||||
duration,
|
||||
success,
|
||||
error_message,
|
||||
} => {
|
||||
let ms = u64::try_from(duration.as_millis()).unwrap_or(u64::MAX);
|
||||
info!(
|
||||
provider = %provider,
|
||||
model = %model,
|
||||
duration_ms = ms,
|
||||
success = success,
|
||||
error = ?error_message,
|
||||
"llm.response"
|
||||
);
|
||||
}
|
||||
ObserverEvent::AgentEnd {
|
||||
duration,
|
||||
tokens_used,
|
||||
|
|
@ -23,6 +52,9 @@ impl Observer for LogObserver {
|
|||
let ms = u64::try_from(duration.as_millis()).unwrap_or(u64::MAX);
|
||||
info!(duration_ms = ms, tokens = ?tokens_used, "agent.end");
|
||||
}
|
||||
ObserverEvent::ToolCallStart { tool } => {
|
||||
info!(tool = %tool, "tool.start");
|
||||
}
|
||||
ObserverEvent::ToolCall {
|
||||
tool,
|
||||
duration,
|
||||
|
|
@ -31,6 +63,9 @@ impl Observer for LogObserver {
|
|||
let ms = u64::try_from(duration.as_millis()).unwrap_or(u64::MAX);
|
||||
info!(tool = %tool, duration_ms = ms, success = success, "tool.call");
|
||||
}
|
||||
ObserverEvent::TurnComplete => {
|
||||
info!("turn.complete");
|
||||
}
|
||||
ObserverEvent::ChannelMessage { channel, direction } => {
|
||||
info!(channel = %channel, direction = %direction, "channel.message");
|
||||
}
|
||||
|
|
@ -83,6 +118,18 @@ mod tests {
|
|||
provider: "openrouter".into(),
|
||||
model: "claude-sonnet".into(),
|
||||
});
|
||||
obs.record_event(&ObserverEvent::LlmRequest {
|
||||
provider: "openrouter".into(),
|
||||
model: "claude-sonnet".into(),
|
||||
messages_count: 2,
|
||||
});
|
||||
obs.record_event(&ObserverEvent::LlmResponse {
|
||||
provider: "openrouter".into(),
|
||||
model: "claude-sonnet".into(),
|
||||
duration: Duration::from_millis(250),
|
||||
success: true,
|
||||
error_message: None,
|
||||
});
|
||||
obs.record_event(&ObserverEvent::AgentEnd {
|
||||
duration: Duration::from_millis(500),
|
||||
tokens_used: Some(100),
|
||||
|
|
@ -91,11 +138,15 @@ mod tests {
|
|||
duration: Duration::ZERO,
|
||||
tokens_used: None,
|
||||
});
|
||||
obs.record_event(&ObserverEvent::ToolCallStart {
|
||||
tool: "shell".into(),
|
||||
});
|
||||
obs.record_event(&ObserverEvent::ToolCall {
|
||||
tool: "shell".into(),
|
||||
duration: Duration::from_millis(10),
|
||||
success: false,
|
||||
});
|
||||
obs.record_event(&ObserverEvent::TurnComplete);
|
||||
obs.record_event(&ObserverEvent::ChannelMessage {
|
||||
channel: "telegram".into(),
|
||||
direction: "outbound".into(),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue