From d2334c2bb7c582939953e4a4bfc02732bd7a495b Mon Sep 17 00:00:00 2001 From: wishhyt <24300810017@m.fudan.edu.cn> Date: Wed, 18 Mar 2026 10:18:26 +0800 Subject: [PATCH] fix(crew): deduplicate manager agent token usage accounting `calculate_usage_metrics` counted the manager agent's token usage twice: once via `_token_process.get_summary()` and again via `llm.get_token_usage_summary()`, because the two checks were independent if-blocks instead of mutually exclusive branches. Restructure to use the same if/else pattern as regular agents: prefer `BaseLLM.get_token_usage_summary()` when available, otherwise fall back to `_token_process`. Made-with: Cursor --- lib/crewai/src/crewai/crew.py | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/lib/crewai/src/crewai/crew.py b/lib/crewai/src/crewai/crew.py index cdd371cbc4..61d071221a 100644 --- a/lib/crewai/src/crewai/crew.py +++ b/lib/crewai/src/crewai/crew.py @@ -1755,21 +1755,13 @@ def calculate_usage_metrics(self) -> UsageMetrics: token_sum = agent._token_process.get_summary() total_usage_metrics.add_usage_metrics(token_sum) - if self.manager_agent and hasattr(self.manager_agent, "_token_process"): - token_sum = self.manager_agent._token_process.get_summary() - total_usage_metrics.add_usage_metrics(token_sum) - - if ( - self.manager_agent - and hasattr(self.manager_agent, "llm") - and hasattr(self.manager_agent.llm, "get_token_usage_summary") - ): + if self.manager_agent: if isinstance(self.manager_agent.llm, BaseLLM): llm_usage = self.manager_agent.llm.get_token_usage_summary() - else: - llm_usage = self.manager_agent.llm._token_process.get_summary() - - total_usage_metrics.add_usage_metrics(llm_usage) + total_usage_metrics.add_usage_metrics(llm_usage) + elif hasattr(self.manager_agent, "_token_process"): + token_sum = self.manager_agent._token_process.get_summary() + total_usage_metrics.add_usage_metrics(token_sum) self.usage_metrics = total_usage_metrics return total_usage_metrics