What does the vars argument actually do in the Metropolis sampler

That’s for specifying the variable you want the sampler to sample. After you initialize a model, you can do model.free_vars which gives you a list of free parameters in your model. And then you can specify different sampler to sample different vars. For example see: https://docs.pymc.io/notebooks/sampling_compound_step.html