You need to assign the value variable to self.vars and not the RV. So self.vars = [model.rvs_to_values[var]]`. During sampling it’s the value variable that matters not the RV.
Also to get the name of self.conc.prior, you can do model.rvs_to_values[concentration].name during the initialization.
Finally sum_to_1.forward won’t work. The signature is different and it would return a symbolic TensorVariable. You should implement the constraint with a NumPy function.