diff --git a/metagpt/roles/role.py b/metagpt/roles/role.py index e0f8a7ea6..7fbf98e73 100644 --- a/metagpt/roles/role.py +++ b/metagpt/roles/role.py @@ -170,7 +170,8 @@ class Role(SerializationMixin, ContextMixin, BaseModel): self._check_actions() self.llm.system_prompt = self._get_prefix() self.llm.cost_manager = self.context.cost_manager - self._watch(kwargs.pop("watch", [UserRequirement])) + if not self.rc.watch: + self._watch(kwargs.pop("watch", [UserRequirement])) if self.latest_observed_msg: self.recovered = True diff --git a/tests/metagpt/serialize_deserialize/test_environment.py b/tests/metagpt/serialize_deserialize/test_environment.py index 4e6ea93b5..3138346d6 100644 --- a/tests/metagpt/serialize_deserialize/test_environment.py +++ b/tests/metagpt/serialize_deserialize/test_environment.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- # @Desc : - +import pytest from metagpt.actions.action_node import ActionNode from metagpt.actions.add_requirement import UserRequirement @@ -55,6 +55,7 @@ def test_environment_serdeser(context): assert isinstance(list(environment.roles.values())[0].actions[0], ActionOK) assert type(list(new_env.roles.values())[0].actions[0]) == ActionOK assert type(list(new_env.roles.values())[0].actions[1]) == ActionRaise + assert list(new_env.roles.values())[0].rc.watch == role_c.rc.watch def test_environment_serdeser_v2(context): @@ -69,6 +70,7 @@ def test_environment_serdeser_v2(context): assert isinstance(role, ProjectManager) assert isinstance(role.actions[0], WriteTasks) assert isinstance(list(new_env.roles.values())[0].actions[0], WriteTasks) + assert list(new_env.roles.values())[0].rc.watch == pm.rc.watch def test_environment_serdeser_save(context): @@ -85,3 +87,8 @@ def test_environment_serdeser_save(context): new_env: Environment = Environment(**env_dict, context=context) assert len(new_env.roles) == 1 assert type(list(new_env.roles.values())[0].actions[0]) == ActionOK + assert list(new_env.roles.values())[0].rc.watch == role_c.rc.watch + + +if __name__ == "__main__": + pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/serialize_deserialize/test_serdeser_base.py b/tests/metagpt/serialize_deserialize/test_serdeser_base.py index 62ab26d72..ccc582f65 100644 --- a/tests/metagpt/serialize_deserialize/test_serdeser_base.py +++ b/tests/metagpt/serialize_deserialize/test_serdeser_base.py @@ -10,7 +10,7 @@ from pydantic import BaseModel, Field from metagpt.actions import Action, ActionOutput from metagpt.actions.action_node import ActionNode -from metagpt.actions.add_requirement import UserRequirement +from metagpt.actions.fix_bug import FixBug from metagpt.roles.role import Role, RoleReactMode serdeser_path = Path(__file__).absolute().parent.joinpath("..", "..", "data", "serdeser_storage") @@ -68,7 +68,7 @@ class RoleA(Role): def __init__(self, **kwargs): super(RoleA, self).__init__(**kwargs) self.set_actions([ActionPass]) - self._watch([UserRequirement]) + self._watch([FixBug]) class RoleB(Role): @@ -93,7 +93,7 @@ class RoleC(Role): def __init__(self, **kwargs): super(RoleC, self).__init__(**kwargs) self.set_actions([ActionOK, ActionRaise]) - self._watch([UserRequirement]) + self._watch([FixBug]) self.rc.react_mode = RoleReactMode.BY_ORDER self.rc.memory.ignore_id = True