add ModelParallelTempering abstraction