The main ML component is to guess how much weight you should lift for an exercise you've never logged before. To accomplish this, I periodically ingest all the exercise data offline, and for all possible pairs of exercises, see which ones are most strongly correlated. The client app downloads the latest data before every workout, and uses it to calibrate exercises if the user hasn't performed them before. If the user has logged the exercise before, guessing the optimal weight is pretty trivial, but if it's been a while, which can happen because every workout is somewhat randomized, it will override and make a prediction based on more recent exercises.
There's also some learning of progress rates, it'll slow down or speed up the rate of increasing weights based on the user's performance.