pub struct AgentMetrics {Show 17 fields
pub iterations: usize,
pub tool_calls: usize,
pub input_tokens: u32,
pub output_tokens: u32,
pub cache_read_tokens: u32,
pub cache_creation_tokens: u32,
pub execution_time_ms: u64,
pub errors: usize,
pub compactions: usize,
pub api_calls: usize,
pub total_cost_usd: f64,
pub tool_stats: HashMap<String, ToolStats>,
pub tool_call_records: Vec<ToolCallRecord>,
pub model_usage: HashMap<String, ModelUsage>,
pub server_tool_use: ServerToolUse,
pub permission_denials: Vec<PermissionDenial>,
pub api_time_ms: u64,
}Fields§
§iterations: usize§tool_calls: usize§input_tokens: u32§output_tokens: u32§cache_read_tokens: u32§cache_creation_tokens: u32§execution_time_ms: u64§errors: usize§compactions: usize§api_calls: usize§total_cost_usd: f64§tool_stats: HashMap<String, ToolStats>§tool_call_records: Vec<ToolCallRecord>§model_usage: HashMap<String, ModelUsage>§server_tool_use: ServerToolUse§permission_denials: Vec<PermissionDenial>§api_time_ms: u64Implementations§
Source§impl AgentMetrics
impl AgentMetrics
pub fn total_tokens(&self) -> u32
pub fn add_usage(&mut self, input: u32, output: u32)
pub fn add_usage_with_cache(&mut self, usage: &Usage)
Sourcepub fn cache_hit_rate(&self) -> f64
pub fn cache_hit_rate(&self) -> f64
Calculate cache hit rate as a proportion of input tokens.
Returns the ratio of cache_read_tokens to input_tokens. A higher value means more tokens were served from cache.
Sourcepub fn cache_efficiency(&self) -> f64
pub fn cache_efficiency(&self) -> f64
Calculate cache efficiency (reads vs total cache operations).
Returns 1.0 for perfect cache reuse (all reads, no writes), and 0.0 when there’s no cache activity.
Per Anthropic pricing:
- Cache reads cost 10% of input tokens
- Cache writes cost 125% of input tokens
Higher efficiency = better cost savings.
Sourcepub fn cache_tokens_saved(&self) -> u32
pub fn cache_tokens_saved(&self) -> u32
Estimate tokens saved through caching.
Cache reads are billed at 10%, so 90% of read tokens are “saved”.
Sourcepub fn cache_cost_savings(&self, input_price_per_mtok: f64) -> f64
pub fn cache_cost_savings(&self, input_price_per_mtok: f64) -> f64
Calculate estimated cost savings from caching in USD.
Per Anthropic pricing:
- Normal input: full price
- Cache read: 10% of normal price (90% savings)
- Cache write: 125% of normal price (25% overhead)
Net savings = (cache_read * 0.9 * price) - (cache_write * 0.25 * price)
pub fn add_cost(&mut self, cost: f64)
pub fn record_tool( &mut self, tool_use_id: &str, name: &str, duration_ms: u64, is_error: bool, )
pub fn record_api_call(&mut self)
pub fn record_compaction(&mut self)
pub fn avg_tool_time_ms(&self) -> f64
Sourcepub fn record_model_usage(&mut self, model: &str, usage: &Usage)
pub fn record_model_usage(&mut self, model: &str, usage: &Usage)
Record usage for a specific model.
This enables per-model cost tracking like CLI’s modelUsage field.
Sourcepub fn record_api_call_with_timing(&mut self, duration_ms: u64)
pub fn record_api_call_with_timing(&mut self, duration_ms: u64)
Record an API call with timing information.
Sourcepub fn update_server_tool_use(&mut self, server_tool_use: &ServerToolUse)
pub fn update_server_tool_use(&mut self, server_tool_use: &ServerToolUse)
Update server_tool_use from API response.
This is for server-side tools executed by the API (e.g., Anthropic’s server-side RAG). Not to be confused with local tool usage.
Sourcepub fn update_server_tool_use_from_api(&mut self, usage: &ServerToolUseUsage)
pub fn update_server_tool_use_from_api(&mut self, usage: &ServerToolUseUsage)
Update server_tool_use from API response’s usage.server_tool_use field.
This parses the server tool usage directly from the API response.
Sourcepub fn record_permission_denial(&mut self, denial: PermissionDenial)
pub fn record_permission_denial(&mut self, denial: PermissionDenial)
Record a permission denial.
Sourcepub fn total_model_cost(&self) -> f64
pub fn total_model_cost(&self) -> f64
Get the total cost across all models.
Trait Implementations§
Source§impl Clone for AgentMetrics
impl Clone for AgentMetrics
Source§fn clone(&self) -> AgentMetrics
fn clone(&self) -> AgentMetrics
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for AgentMetrics
impl Debug for AgentMetrics
Source§impl Default for AgentMetrics
impl Default for AgentMetrics
Source§fn default() -> AgentMetrics
fn default() -> AgentMetrics
Auto Trait Implementations§
impl Freeze for AgentMetrics
impl RefUnwindSafe for AgentMetrics
impl Send for AgentMetrics
impl Sync for AgentMetrics
impl Unpin for AgentMetrics
impl UnwindSafe for AgentMetrics
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more