import asyncio import fire from metagpt.ext.werewolf.roles import Guard, Moderator, Seer, Villager, Werewolf, Witch from metagpt.ext.werewolf.roles.human_player import prepare_human_player from metagpt.ext.werewolf.werewolf_game import WerewolfGame from metagpt.logs import logger async def start_game( investment: float = 3.0, n_round: int = 5, shuffle: bool = True, add_human: bool = False, use_reflection: bool = True, use_experience: bool = False, use_memory_selection: bool = False, new_experience_version: str = "", ): game = WerewolfGame() game_setup, players = game.env.init_game_setup( role_uniq_objs=[Villager, Werewolf, Guard, Seer, Witch], num_werewolf=2, num_villager=2, shuffle=shuffle, add_human=add_human, use_reflection=use_reflection, use_experience=use_experience, use_memory_selection=use_memory_selection, new_experience_version=new_experience_version, prepare_human_player=prepare_human_player, ) logger.info(f"{game_setup}") players = [Moderator()] + players game.hire(players) game.invest(investment) game.run_project(game_setup) await game.run(n_round=n_round) def main( investment: float = 20.0, n_round: int = 100, shuffle: bool = True, add_human: bool = False, use_reflection: bool = True, use_experience: bool = False, use_memory_selection: bool = False, new_experience_version: str = "", ): asyncio.run( start_game( investment, n_round, shuffle, add_human, use_reflection, use_experience, use_memory_selection, new_experience_version, ) ) if __name__ == "__main__": fire.Fire(main)