def test_html_viewer(): # Integration test for visualization service num_nodes = 3 num_items = 10 g_rng.set_seed(1234) grammar_flags = {"theme": "house", "include_adj": True} game = textworld.generator.make_game(world_size=num_nodes, nb_objects=num_items, quest_length=3, grammar_flags=grammar_flags) game_name = "test_html_viewer_wrapper" with make_temp_directory(prefix=game_name) as tmpdir: game_file = compile_game(game, game_name, games_folder=tmpdir) env = textworld.start(game_file) env = HtmlViewer(env, open_automatically=False, port=8080) env.reset() # Cause rendering to occur. # options.binary_location = "/bin/chromium" driver = get_webdriver() driver.get("http://127.0.0.1:8080") nodes = driver.find_elements_by_class_name("node") assert len(nodes) == num_nodes items = driver.find_elements_by_class_name("item") objects = [obj for obj in game.world.objects if obj.type != "I"] assert len(items) == len(objects) env.close() driver.close()
def test_html_viewer(): # Integration test for visualization service num_nodes = 3 num_items = 10 options = textworld.GameOptions() options.seeds = 1234 options.nb_rooms = num_nodes options.nb_objects = num_items options.quest_length = 3 options.grammar.theme = "house" options.grammar.include_adj = True game = textworld.generator.make_game(options) game_name = "test_html_viewer_wrapper" with make_temp_directory(prefix=game_name) as tmpdir: game_file = compile_game(game, path=tmpdir) env = textworld.start(game_file) env = HtmlViewer(env, open_automatically=False, port=8080) env.reset() # Cause rendering to occur. # options.binary_location = "/bin/chromium" driver = get_webdriver() driver.get("http://127.0.0.1:8080") nodes = driver.find_elements_by_class_name("node") assert len(nodes) == num_nodes items = driver.find_elements_by_class_name("item") objects = [obj for obj in game.world.objects if obj.type != "I"] assert len(items) == len(objects) env.close() driver.close()
def test_html_viewer(): # Integration test for visualization service # requires geckodriver to be in PATH for selenium to work. num_nodes = 3 num_items = 10 g_rng.set_seed(1234) grammar_flags = {"theme": "house", "include_adj": True} game = textworld.generator.make_game(world_size=num_nodes, nb_objects=num_items, quest_length=3, grammar_flags=grammar_flags) game_name = "test_html_viewer_wrapper" with make_temp_directory(prefix=game_name) as tmpdir: game_file = compile_game(game, game_name, games_folder=tmpdir) env = textworld.start(game_file) env = HtmlViewer(env, open_automatically=False, port=8080) env.reset() # Cause rendering to occur. options = Options() options.add_argument('headless') options.add_argument('ignore-certificate-errors') options.add_argument("test-type") options.add_argument("no-sandbox") options.add_argument("disable-gpu") # options.binary_location = "/bin/chromium" driver = webdriver.Chrome(chrome_options=options) driver.get("http://127.0.0.1:8080") nodes = driver.find_elements_by_class_name("node") assert len(nodes) == num_nodes items = driver.find_elements_by_class_name("item") # add one for P assert len(items) == num_items + 1 env.close() driver.close()
def main(): args = parse_args() if args.very_verbose: args.verbose = args.very_verbose warnings.simplefilter("default", textworld.TextworldGenerationWarning) if args.seed is None: args.seed = np.random.randint(65635) print("Random seed: {}".format(args.seed)) rng = np.random.RandomState(args.seed) options = textworld.GameOptions() options.grammar.theme = args.theme options.grammar.include_adj = args.include_adj options.grammar.only_last_action = args.only_last_action options.grammar.blend_instructions = args.blend_instructions options.grammar.blend_descriptions = args.blend_descriptions options.grammar.ambiguous_instructions = args.ambiguous_instructions options.nb_rooms = args.world_size options.nb_objects = args.nb_objects options.quest_length = args.quest_length options.quest_breadth = args.quest_breadth agent = make_agent(args) reward_history = [] for i in range(args.nb_games) if args.nb_games > 0 else itertools.count(): options = options.copy() options.seeds = rng.randint(65635) game_file, game = textworld.make(options, args.output) print("Starting game {}".format(game_file)) env = textworld.start(game_file) agent.reset(env) if args.vizu >= 0: from textworld.envs.wrappers import HtmlViewer env = HtmlViewer(env, port=args.vizu) game_state = env.reset() if args.mode == "human" or args.verbose: env.render() reward = 0 done = False for t in range( args.max_steps) if args.max_steps > 0 else itertools.count(): command = agent.act(game_state, reward, done) game_state, reward, done = env.step(command) if args.mode == "human" or args.verbose: env.render() if done: break env.close() print("Done after {} steps. Score {}/{}.".format( game_state.nb_moves, game_state.score, game_state.max_score)) reward_history.append(reward) if args.nb_games == 0: # Interactive mode. input("Press enter to generate a new game.")
def main(): args = parse_args() if args.very_verbose: args.verbose = args.very_verbose warnings.simplefilter("default", textworld.TextworldGenerationWarning) if args.seed is None: args.seed = np.random.randint(65635) grammar_flags = { "theme": args.theme, "include_adj": args.include_adj, "only_last_action": args.only_last_action, "blend_instructions": args.blend_instructions, "blend_descriptions": args.blend_descriptions, "ambiguous_instructions": args.ambiguous_instructions } print("Random seed: {}".format(args.seed)) rng = np.random.RandomState(args.seed) agent = make_agent(args) reward_history = [] for i in range(args.nb_games) if args.nb_games > 0 else itertools.count(): # Get a game seed to make everything reproducible. game_seed = rng.randint(65635) game_file, game = textworld.make(args.world_size, args.nb_objects, args.quest_length, grammar_flags, seed=game_seed, games_dir=args.output) print("Starting game {}".format(game_file)) env = textworld.start(game_file, backend=args.backend) agent.reset(env) if args.vizu >= 0: from textworld.envs.wrappers import HtmlViewer env = HtmlViewer(env, port=args.vizu) game_state = env.reset() if args.mode == "human" or args.verbose: env.render() reward = 0 done = False for t in range( args.max_steps) if args.max_steps > 0 else itertools.count(): command = agent.act(game_state, reward, done) game_state, reward, done = env.step(command) if args.mode == "human" or args.verbose: env.render() if done: break env.close() print("Done after {} steps. Score {}/{}.".format( game_state.nb_moves, game_state.score, game_state.max_score)) reward_history.append(reward) if args.nb_games == 0: # Interactive mode. input("Press enter to generate a new game.")
def main(): args = build_parser().parse_args() if args.very_verbose: args.verbose = args.very_verbose if args.state_fn: state_wf = logging.StreamHandler(open(args.state_fn, "w")) state_wf.setLevel(logging.INFO) state_logger = logging.getLogger("states") state_logger.setLevel(logging.INFO) state_logger.addHandler(state_wf) # open(args.state_fn, 'w') if args.utts_fn: # bc = logging.basicConfig(filename=args.utts_fn) utts_wf = logging.StreamHandler(open(args.utts_fn, "w")) # utts_wf = open(args.utts_fn, 'w') else: # bc = logging.basicConfig() utts_wf = logging.StreamHandler(sys.stdout) utts_wf.terminator = '' utts_wf.setLevel(logging.INFO) utts_logger = logging.getLogger("utterances") utts_logger.setLevel(logging.INFO) utts_logger.addHandler(utts_wf) request_infos = textworld.EnvInfos(inventory=True, description=True, facts=True) env = textworld.start(args.game, infos=request_infos) if args.mode == "random": agent = textworld.agents.NaiveAgent(seed=args.seed) elif args.mode == "random-cmd": # TODO get rid of redundancy agent = textworld.agents.RandomCommandAgent(seed=args.seed) elif args.mode == "human": agent = textworld.agents.HumanAgent() elif args.mode == 'walkthrough': agent = textworld.agents.WalkthroughAgent() agent.reset(env) if args.viewer is not None: from textworld.envs.wrappers import HtmlViewer env = HtmlViewer(env, port=args.viewer) if args.mode == "human" or args.very_verbose: utts_logger.info("Using {}.\n".format(env.__class__.__name__)) game_state = env.reset() if args.mode == "human" or args.verbose: contents = env.render(mode="text") contents = '\n'.join( contents.split('\n')[22:]) # remove `TEXTWORLD` heading contents = contents.replace('\n\n', '\n') utts_logger.info(contents) if args.state_fn: state_logger.info( json.dumps({ 'facts': [Proposition.serialize(prop) for prop in env.state.facts], 'inventory': env.state.inventory.replace('\n\n', '\n'), 'description': env.state.description.replace('\n\n', '\n'), })) reward = 0 done = False for _ in range( args.max_steps) if args.max_steps > 0 else itertools.count(): # tw_inform7.py command = agent.act(game_state, reward, done) # env.state.game.world.facts game_state, reward, done = env.step(command) if args.mode == "human" or args.verbose: contents = env.render(mode="text") contents = contents.replace('\n\n', '\n').replace('\n\n', '\n') utts_logger.info(contents) if args.state_fn: state_logger.info( json.dumps({ 'facts': [ Proposition.serialize(prop) for prop in env.state.facts ], 'inventory': env.state.inventory.replace('\n\n', '\n'), 'description': env.state.description.replace('\n\n', '\n'), })) if done: break env.close() utts_logger.info("Done after {} steps. Score {}/{}.".format( game_state.moves, game_state.score, game_state.max_score))