Team Metrics
Demonstrates retrieving team, session, and member-level execution metrics.
"""
Team Metrics
=============================
Demonstrates retrieving team, session, and member-level execution metrics.
"""
from agno.agent import Agent
from agno.db.postgres import PostgresDb
from agno.models.openai import OpenAIResponses
from agno.team import Team
from agno.tools.yfinance import YFinanceTools
from agno.utils.pprint import pprint_run_response
from rich.pretty import pprint
# ---------------------------------------------------------------------------
# Setup
# ---------------------------------------------------------------------------
db_url = "postgresql+psycopg://ai:ai@localhost:5532/ai"
db = PostgresDb(db_url=db_url, session_table="team_metrics_sessions")
# ---------------------------------------------------------------------------
# Create Members
# ---------------------------------------------------------------------------
stock_searcher = Agent(
name="Stock Searcher",
model=OpenAIResponses(id="gpt-5-mini"),
role="Searches the web for information on a stock.",
tools=[YFinanceTools()],
)
# ---------------------------------------------------------------------------
# Create Team
# ---------------------------------------------------------------------------
team = Team(
name="Stock Research Team",
model=OpenAIResponses(id="gpt-5-mini"),
members=[stock_searcher],
db=db,
session_id="team_metrics_demo",
markdown=True,
show_members_responses=True,
store_member_responses=True,
)
# ---------------------------------------------------------------------------
# Run Team
# ---------------------------------------------------------------------------
if __name__ == "__main__":
run_output = team.run("What is the stock price of NVDA")
pprint_run_response(run_output, markdown=True)
print("=" * 50)
print("TEAM LEADER MESSAGE METRICS")
print("=" * 50)
if run_output.messages:
for message in run_output.messages:
if message.role == "assistant":
if message.content:
print(f" Message: {message.content[:100]}...")
elif message.tool_calls:
print(f"Tool calls: {message.tool_calls}")
print("-" * 30, "Metrics", "-" * 30)
pprint(message.metrics)
print("-" * 70)
print("=" * 50)
print("TEAM LEADER RUN METRICS")
print("=" * 50)
pprint(run_output.metrics)
print("=" * 50)
print("SESSION METRICS")
print("=" * 50)
pprint(team.get_session_metrics(session_id="team_metrics_demo"))
print("=" * 50)
print("TEAM MEMBER MESSAGE METRICS")
print("=" * 50)
if run_output.member_responses:
for member_response in run_output.member_responses:
if member_response.messages:
for message in member_response.messages:
if message.role == "assistant":
if message.content:
print(f" Member Message: {message.content[:100]}...")
elif message.tool_calls:
print(f"Member Tool calls: {message.tool_calls}")
print("-" * 20, "Member Metrics", "-" * 20)
pprint(message.metrics)
print("-" * 60)Example behavior
Leader run metrics exclude member usage; the session metrics accumulate leader and member calls. The fixed session ID means rerunning the script can add to earlier totals. The stock member uses Yahoo Finance through YFinanceTools, and only called tools contribute tool timing.
Run the Example
Set up your virtual environment
uv venv --python 3.12
source .venv/bin/activateInstall dependencies
uv pip install -U agno "psycopg[binary]" openai sqlalchemy yfinanceExport your OpenAI API key
export OPENAI_API_KEY="your_openai_api_key_here"Run PgVector
docker run -d \
-e POSTGRES_DB=ai \
-e POSTGRES_USER=ai \
-e POSTGRES_PASSWORD=ai \
-e PGDATA=/var/lib/postgresql \
-v pgvolume:/var/lib/postgresql \
-p 5532:5432 \
--name pgvector \
agnohq/pgvector:18Run the example
Save the code above as team_metrics.py, then run:
python team_metrics.pyFull source: cookbook/03_teams/22_metrics/01_team_metrics.py