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)}")