Source code for agent_inspect.metrics.observed.tool_call_count
import logging
from typing import Optional, Dict, Any, List
from agent_inspect.metrics.observed.observed_metric import ObservedMetric
from agent_inspect.models.metrics.agent_trace import TurnTrace
from agent_inspect.models.metrics.metric_score import NumericalScore
logger = logging.getLogger(__name__)
[docs]
class ToolCallCount(ObservedMetric):
"""
ToolCallCountMetric to measure the total number of tools called by the agent per evaluation sample.
:param config: Configuration for ToolCallCountMetric initialization.
"""
def __init__(self, config: Optional[Dict[str, Any]] = None):
super().__init__(config)
[docs]
def evaluate(self, agent_turn_traces: List[TurnTrace]) -> NumericalScore:
"""
Calculate the total number of tools called by the agent.
:param agent_turn_traces: a :obj:`~typing.List` [:obj:`~agent_inspect.models.metrics.agent_trace.TurnTrace`] object constructed with the agent trajectory information from the first turn up to the current turn.
:return: a :obj:`~agent_inspect.models.metrics.metric_score.NumericalScore` object containing the total number of tool calls.
"""
tool_call_count = 0
for turn_trace in agent_turn_traces:
if not turn_trace.steps:
logger.warning(f"Turn: {turn_trace.id} has no steps.")
continue
for step in turn_trace.steps:
if step.tool and step.tool.strip():
tool_call_count += 1
return NumericalScore(score=tool_call_count)