From 5110817709c3e0eda8d5a372df7d55631e00584a Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 2 Dec 2025 10:36:43 +0000 Subject: [PATCH] fix: ensure tool usage counter is incremented for add_image tool MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Address Bugbot feedback: when skipping _format_result() for add_image tool, the task.used_tools counter was not being incremented. Now we increment the counter before the conditional check and pass skip_counter=True to _format_result() to avoid double-counting. Co-Authored-By: João --- lib/crewai/src/crewai/tools/tool_usage.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/lib/crewai/src/crewai/tools/tool_usage.py b/lib/crewai/src/crewai/tools/tool_usage.py index df53f61a9..fa95a621c 100644 --- a/lib/crewai/src/crewai/tools/tool_usage.py +++ b/lib/crewai/src/crewai/tools/tool_usage.py @@ -314,6 +314,10 @@ class ToolUsage: attempts=self._run_attempts, ) + # Always increment tool usage counter (this is normally done in _format_result) + if self.task: + self.task.used_tools += 1 + # For add_image tool, preserve the raw dict result for multimodal handling # The result is a dict like {"role": "user", "content": [...]} that should # not be stringified @@ -323,8 +327,19 @@ class ToolUsage: and tool.name.casefold().strip() == add_image_tool.get("name", "").casefold().strip() ) - if not is_add_image_tool: - result = self._format_result(result=result) + if is_add_image_tool: + # For add_image, only apply format reminder if needed (skip stringification) + if self._should_remember_format(): + # Append format reminder to the text content if present + format_reminder = self._i18n.slice("tools").format( + tools=self.tools_description, tool_names=self.tools_names + ) + if isinstance(result, dict) and "content" in result: + # Add format reminder as a text item in the content list + if isinstance(result["content"], list): + result["content"].append({"type": "text", "text": format_reminder}) + else: + result = self._format_result(result=result, skip_counter=True) data = { "result": result, @@ -363,8 +378,8 @@ class ToolUsage: return result - def _format_result(self, result: Any) -> str: - if self.task: + def _format_result(self, result: Any, skip_counter: bool = False) -> str: + if self.task and not skip_counter: self.task.used_tools += 1 if self._should_remember_format(): result = self._remember_format(result=result)