eps = 0.3. The loss definition and its knobs are in Algorithms § IPO Loss.
Table of Contents
Masking by Probability, Not Ratio
In async RL, the trainer and the inference engine never agree exactly on a token’s probability. The usual fix keeps importance sampling but drops the tokens where the two disagree too much. IcePop measures disagreement as a ratio and masks a token when falls outside a fixed band . IPO masks a token when its absolute probability moved too much:- A rare token going from 0.01 to 0.06 has a ratio of 6×, so IcePop masks it, although it moved only 0.05 of probability mass.
- A likely token going from 0.90 to 0.20 has a ratio of 0.22, so IcePop keeps it, although it moved 0.70 of probability mass.
Ablation: IPO vs IcePop
GLM-4.5-Air on agentic SWE RL, with every arm on the same recipe and only[trainer.loss] changing:

Choosing eps
The first IPO default was eps = 0.1. On the run above it masked about 2% of tokens, and by step 1k its entropy had collapsed. To pick a new value without a sweep of full runs, we replayed the trainer and inference probabilities of 1.8M sampled tokens and measured what each eps would have masked:

The IPO band has the same width in probability everywhere. The IcePop cone is very narrow near zero, where it masks rare tokens that barely moved, and very wide near one, where it keeps likely tokens that lost most of their mass.
eps = 0.3 masks only the tail and targets the tokens IcePop lets through. Both 0.2 and 0.3 were stable in full runs; 0.3 kept the highest entropy with the lowest mismatch KL, so it is the default.
Reproducing
The configs are inexamples/advanced/glm-4.5-air/ipo-ablation/: a shared base.toml and one overlay per loss. See the GLM-4.5-Air README for cluster setup.
mismatch_kl/all/mean and the training solve rate across arms.