diff --git a/src/crewai/agent.py b/src/crewai/agent.py index 999d1d800..ee5d39cd9 100644 --- a/src/crewai/agent.py +++ b/src/crewai/agent.py @@ -123,6 +123,18 @@ class Agent(BaseAgent): default="safe", description="Mode for code execution: 'safe' (using Docker) or 'unsafe' (direct execution).", ) + allow_feedback: bool = Field( + default=False, + description="Enable agent to receive and process feedback during execution.", + ) + allow_conflict: bool = Field( + default=False, + description="Enable agent to handle conflicts with other agents during execution.", + ) + allow_iteration: bool = Field( + default=False, + description="Enable agent to iterate on its solutions based on feedback and validation.", + ) embedder_config: Optional[Dict[str, Any]] = Field( default=None, description="Embedder configuration for the agent.", @@ -400,6 +412,9 @@ class Agent(BaseAgent): step_callback=self.step_callback, function_calling_llm=self.function_calling_llm, respect_context_window=self.respect_context_window, + allow_feedback=self.allow_feedback, + allow_conflict=self.allow_conflict, + allow_iteration=self.allow_iteration, request_within_rpm_limit=( self._rpm_controller.check_or_wait if self._rpm_controller else None ), diff --git a/src/crewai/agents/crew_agent_executor.py b/src/crewai/agents/crew_agent_executor.py index 813ac8a08..c4b35fafc 100644 --- a/src/crewai/agents/crew_agent_executor.py +++ b/src/crewai/agents/crew_agent_executor.py @@ -52,6 +52,9 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): respect_context_window: bool = False, request_within_rpm_limit: Any = None, callbacks: List[Any] = [], + allow_feedback: bool = False, + allow_conflict: bool = False, + allow_iteration: bool = False, ): self._i18n: I18N = I18N() self.llm = llm @@ -73,6 +76,9 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): self.function_calling_llm = function_calling_llm self.respect_context_window = respect_context_window self.request_within_rpm_limit = request_within_rpm_limit + self.allow_feedback = allow_feedback + self.allow_conflict = allow_conflict + self.allow_iteration = allow_iteration self.ask_for_human_input = False self.messages: List[Dict[str, str]] = [] self.iterations = 0 diff --git a/tests/agent_test.py b/tests/agent_test.py index 6879a4519..3da490fa5 100644 --- a/tests/agent_test.py +++ b/tests/agent_test.py @@ -1625,3 +1625,30 @@ def test_agent_with_knowledge_sources(): # Assert that the agent provides the correct information assert "red" in result.raw.lower() + + +def test_agent_with_feedback_conflict_iteration_params(): + """Test that the agent correctly handles the allow_feedback, allow_conflict, and allow_iteration parameters.""" + agent = Agent( + role="test role", + goal="test goal", + backstory="test backstory", + allow_feedback=True, + allow_conflict=True, + allow_iteration=True, + ) + + assert agent.allow_feedback is True + assert agent.allow_conflict is True + assert agent.allow_iteration is True + + # Create another agent with default values + default_agent = Agent( + role="test role", + goal="test goal", + backstory="test backstory", + ) + + assert default_agent.allow_feedback is False + assert default_agent.allow_conflict is False + assert default_agent.allow_iteration is False