It works! Thanks!
Now, could you explain why?! 
Why does the eval_fn return a dictionary? (kwargs for some function?)
According to the docs:
process_function (callable): A function receiving a handle to the engine and the current batch in each iteration, and returns data to be stored in the engine’s state.
How does Loss receive the weight_map?
And finally, for other metrics that only need outputs and target, do I have to run another evaluator again to log them?