Exemplo n.º 1
0
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()
Exemplo n.º 2
0
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()
Exemplo n.º 3
0
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.")
Exemplo n.º 5
0
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.")
Exemplo n.º 6
0
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))