From a045f73fec38536441a53f27f948ec5b9f1a5594 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8E=98=E6=9D=83=20=E9=A9=AC?= Date: Mon, 6 Nov 2023 23:13:58 +0800 Subject: [PATCH] feat: Support more versatile parameter formats. --- metagpt/schema.py | 6 +++++- tests/metagpt/test_role.py | 13 +++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/metagpt/schema.py b/metagpt/schema.py index fb8885614..e89ac00ea 100644 --- a/metagpt/schema.py +++ b/metagpt/schema.py @@ -138,7 +138,11 @@ class Message(BaseModel): self.set_cause_by(v) continue if k == MESSAGE_ROUTE_TO: - self.add_to(any_to_str(v)) + if isinstance(v, tuple) or isinstance(v, list) or isinstance(v, set): + for i in v: + self.add_to(any_to_str(i)) + else: + self.add_to(any_to_str(v)) continue self.meta_info[k] = v diff --git a/tests/metagpt/test_role.py b/tests/metagpt/test_role.py index 69386e28c..447de7ee5 100644 --- a/tests/metagpt/test_role.py +++ b/tests/metagpt/test_role.py @@ -18,6 +18,7 @@ from metagpt.actions import Action, ActionOutput from metagpt.environment import Environment from metagpt.roles import Role from metagpt.schema import Message +from metagpt.utils.common import get_class_name class MockAction(Action): @@ -84,5 +85,17 @@ async def test_react(): assert env.get_subscribed_tags(role) == {seed.subscription, tag} +@pytest.mark.asyncio +async def test_msg_to(): + m = Message(content="a", msg_to=["a", MockRole, Message]) + assert m.msg_to == {"a", get_class_name(MockRole), get_class_name(Message)} + + m = Message(content="a", cause_by=MockAction, msg_to={"a", MockRole, Message}) + assert m.msg_to == {"a", get_class_name(MockRole), get_class_name(Message), get_class_name(MockAction)} + + m = Message(content="a", msg_to=("a", MockRole, Message)) + assert m.msg_to == {"a", get_class_name(MockRole), get_class_name(Message)} + + if __name__ == "__main__": pytest.main([__file__, "-s"])