os.path.join() ignores eval_dir if the checkpoints are stored in a directory with absolute path.
just use the provided eval_dir and everything works out.
print() uses stdout by default, which has two problems:
- it is not flushed until later (so messages don't show, or don't show
up in order with other loggers)
- it conflicts with stdin/stdout usage by `decanlp server --stdin`