def decode()

in simuleval/cli.py [0:0]


def decode(args, client, result_queue, instance_ids):
    # Find agent and load related arguments
    agent_name, agent_cls = find_agent_cls(args)
    logger.info(
        f"Evaluating {agent_name} (process id {os.getpid()}) "
        f"on instances from {instance_ids[0]} to {instance_ids[-1]}"
    )

    parser = options.general_parser()
    options.add_agent_args(parser, agent_cls)
    args, _ = parser.parse_known_args()

    # Data type check
    info = client.corpus_info()
    data_type = info['data_type']
    if data_type != agent_cls.data_type:
        logger.error(
            f"Data type mismatch 'server.data_type {data_type}', '{args.agent_cls}.data_type: {args.agent_cls.data_type}'")
        sys.exit(1)

    # build agents
    agent = agent_cls(args)

    # Decode
    for instance_id in instance_ids:
        states = agent.build_states(args, client, instance_id)
        while not states.finish_hypo():
            action = agent.policy(states)
            if action == READ_ACTION:
                states.update_source()
            elif action == WRITE_ACTION:
                prediction = agent.predict(states)
                states.update_target(prediction)
            else:
                raise SystemExit(f"Undefined action name {action}")
        sent_info = client.get_scores(instance_id)
        result_queue.put(sent_info)
        logger.debug(f"Instance {instance_id} finished, results:\n{json.dumps(sent_info, indent=4)}")