Team Metrics
Access RunMetrics, MessageMetrics, and SessionMetrics from team runs.
The TeamRunOutput from a team run includes detailed metrics about token usage, cost, timing, and per-model breakdowns for the team leader. Member metrics are stored separately on each member's RunOutput.
1from kern.agent import Agent2from kern.db.sqlite import SqliteDb3from kern.models.openai import OpenAIResponses4from kern.team import Team5from kern.tools.yfinance import YFinanceTools6from rich.pretty import pprint78stock_agent = Agent(9 name="Stock Agent",10 model=OpenAIResponses(id="gpt-5.2"),11 role="Get stock prices and financial data.",12 tools=[YFinanceTools()],13)1415team = Team(16 name="Finance Team",17 model=OpenAIResponses(id="gpt-5.2"),18 members=[stock_agent],19 db=SqliteDb(db_file="tmp/teams.db"),20 markdown=True,21 store_member_responses=True,22)2324run_response = team.run("What is the stock price of NVDA?")2526# Team leader message metrics (MessageMetrics)27for message in run_response.messages:28 if message.role == "assistant":29 pprint(message.metrics.to_dict())3031# Team leader run metrics (RunMetrics)32pprint(run_response.metrics.to_dict())3334# Per-model breakdown (leader only)35if run_response.metrics.details:36 for model_type, model_metrics_list in run_response.metrics.details.items():37 for m in model_metrics_list:38 print(f"{model_type}: {m.provider}/{m.id} - {m.total_tokens} tokens")3940# Member run metrics (RunMetrics per member)41if run_response.member_responses:42 for member_response in run_response.member_responses:43 print(f"Member: {member_response.agent_name}")44 pprint(member_response.metrics.to_dict())4546# Session metrics (SessionMetrics) - aggregates leader + all members47pprint(team.get_session_metrics().to_dict())Metrics are available at multiple levels:
- Per message: Each assistant message has
MessageMetricswith per-API-call token counts and timing. - Per member run: Each team member run has its own
RunMetrics. Setstore_member_responses=Trueto access them. - Team leader run:
TeamRunOutput.metricshasRunMetricsfor the team leader's model calls only. - Per session:
team.get_session_metrics()returnsSessionMetricsaggregated across leader and all members.
| Level | Type | Access |
|---|---|---|
| Per message | MessageMetrics | message.metrics |
| Per member run | RunMetrics | member_response.metrics (requires store_member_responses=True) |
| Team leader run | RunMetrics | run_response.metrics |
| Per session | SessionMetrics | team.get_session_metrics() |
Run fields (RunMetrics)
| Field | Description |
|---|---|
input_tokens | Tokens sent to the model. |
output_tokens | Tokens generated by the model. |
total_tokens | Sum of input_tokens and output_tokens. |
audio_input_tokens | Audio tokens in the input. |
audio_output_tokens | Audio tokens in the output. |
audio_total_tokens | Total audio tokens. |
cache_read_tokens | Tokens served from cache. |
cache_write_tokens | Tokens written to cache. |
reasoning_tokens | Tokens used for reasoning. |
cost | Cost of the run. |
duration | Run duration in seconds. |
time_to_first_token | Time from run start to first token (seconds). |
details | Per-model breakdown by model type. See Metrics reference. |
additional_metrics | Extra metrics (e.g., eval_duration). |
Message fields (MessageMetrics)
| Field | Description |
|---|---|
input_tokens | Tokens sent to the model. |
output_tokens | Tokens generated by the model. |
total_tokens | Sum of input_tokens and output_tokens. |
audio_input_tokens | Audio tokens in the input. |
audio_output_tokens | Audio tokens in the output. |
audio_total_tokens | Total audio tokens. |
cache_read_tokens | Tokens served from cache. |
cache_write_tokens | Tokens written to cache. |
reasoning_tokens | Tokens used for reasoning. |
cost | Cost of this API call. |
duration | Duration of this API call (seconds). |
time_to_first_token | Time to first token for this API call (seconds). |
provider_metrics | Provider-specific metrics (e.g., Ollama timing, Groq timing, Cerebras timing). |