diff --git a/src/crewai/agents/agent_builder/base_agent_executor_mixin.py b/src/crewai/agents/agent_builder/base_agent_executor_mixin.py index c453d30b3..a79f6ecf0 100644 --- a/src/crewai/agents/agent_builder/base_agent_executor_mixin.py +++ b/src/crewai/agents/agent_builder/base_agent_executor_mixin.py @@ -25,8 +25,12 @@ class CrewAgentExecutorMixin: _printer: Printer = Printer() def _should_force_answer(self) -> bool: - """Determine if a forced answer is required based on iteration count.""" - return self.iterations >= self.max_iter + """Determine if a forced answer is required based on iteration count. + Also tracks when a forced answer has been triggered.""" + if self.iterations >= self.max_iter: + self.have_forced_answer = True + return True + return False def _create_short_term_memory(self, output) -> None: """Create and save a short-term memory item if conditions are met.""" diff --git a/src/crewai/agents/crew_agent_executor.py b/src/crewai/agents/crew_agent_executor.py index 813ac8a08..ca02ca8c5 100644 --- a/src/crewai/agents/crew_agent_executor.py +++ b/src/crewai/agents/crew_agent_executor.py @@ -170,6 +170,7 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): self.step_callback(formatted_answer) if self._should_force_answer(): + # have_forced_answer is now set in _should_force_answer if self.have_forced_answer: return AgentFinish( thought="", @@ -178,11 +179,9 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): ).format(formatted_answer.text), text=formatted_answer.text, ) - else: - formatted_answer.text += ( - f'\n{self._i18n.errors("force_final_answer")}' - ) - self.have_forced_answer = True + formatted_answer.text += ( + f'\n{self._i18n.errors("force_final_answer")}' + ) self.messages.append( self._format_msg(formatted_answer.text, role="assistant") )