feat: Support more versatile parameter formats.

This commit is contained in:
莘权 马 2023-11-06 23:13:58 +08:00
parent c496b6b5f6
commit a045f73fec
2 changed files with 18 additions and 1 deletions

View file

@ -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

View file

@ -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"])