@FruitVinegar I think the problem is related to output transform definition with lambdas. Lambdas can not store experiment_name internally, so all output_transform fetch the last experiment_name.
For example, take a look:
ot_list = []

for n in ["a", "b", "c", "d"]:
    ot_list.append(lambda _: print(n))

for o in ot_list:
    o(None)
> d
> d
> d
> d

In order to do what you would like I’d use functools.partial
from functools import partial

ot_list = []

def ot_func(output, exp_name):
    print(output, exp_name)


for n in ["a", "b", "c", "d"]:
    ot_list.append(partial(ot_func, exp_name=n))

for o in ot_list:
    o(1)

> 1 a
> 1 b
> 1 c
> 1 d