diff --git a/src/crewai/agent.py b/src/crewai/agent.py index 9ee73e98b..8f9d93942 100644 --- a/src/crewai/agent.py +++ b/src/crewai/agent.py @@ -102,6 +102,10 @@ class Agent(BaseAgent): default=True, description="Keep messages under the context window size by summarizing content.", ) + max_iter: int = Field( + default=15, + description="Maximum number of iterations for an agent to execute a task before giving it's best answer", + ) max_retry_limit: int = Field( default=2, description="Maximum number of retries for an agent to execute a task when an error occurs.", diff --git a/src/crewai/agents/crew_agent_executor.py b/src/crewai/agents/crew_agent_executor.py index ccd82174d..d2a9fbbfe 100644 --- a/src/crewai/agents/crew_agent_executor.py +++ b/src/crewai/agents/crew_agent_executor.py @@ -226,11 +226,17 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): ): training_data = CrewTrainingHandler(TRAINING_DATA_FILE).load() if training_data.get(agent_id): - # type: ignore[union-attr] - training_data[agent_id][self.crew._train_iteration][ - "improved_output" - ] = result.output - CrewTrainingHandler(TRAINING_DATA_FILE).save(training_data) + if self.crew is not None and hasattr(self.crew, "_train_iteration"): + training_data[agent_id][self.crew._train_iteration][ + "improved_output" + ] = result.output + CrewTrainingHandler(TRAINING_DATA_FILE).save(training_data) + else: + self._logger.log( + "error", + "Invalid crew or missing _train_iteration attribute.", + color="red", + ) if self.ask_for_human_input and human_feedback is not None: training_data = { @@ -239,15 +245,22 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): "agent": agent_id, "agent_role": self.agent.role, } - # type: ignore[union-attr] - if isinstance(self.crew._train_iteration, int): - CrewTrainingHandler(TRAINING_DATA_FILE).append( - self.crew._train_iteration, agent_id, training_data - ) + if self.crew is not None and hasattr(self.crew, "_train_iteration"): + train_iteration = self.crew._train_iteration + if isinstance(train_iteration, int): + CrewTrainingHandler(TRAINING_DATA_FILE).append( + train_iteration, agent_id, training_data + ) + else: + self._logger.log( + "error", + "Invalid train iteration type. Expected int.", + color="red", + ) else: self._logger.log( "error", - "Invalid train iteration type. Expected int.", + "Crew is None or does not have _train_iteration attribute.", color="red", )