The old min_new_tokens penalizer updated logits through boolean-mask indexing. That indexing is data-dependent and can force synchronization on the decode hot path.
Use an elementwise torch.where followed by inplace add so the operation stays tensorized and avoids the mask-index update path.
Constraint: Keep the numeric behavior for active rows equivalent without multiplying by zero, which would turn -inf penalties into NaN.
Rejected: Expanding the mask and assigning through logits[mask] | this is the synchronization pattern being removed.
Confidence: high
Scope-risk: narrow
Directive: Do not reintroduce boolean-mask writes in decode-step penalty paths without profiling the synchronization behavior.
Tested: RED/GREEN local pytest test/registered/unit/sampling/test_min_new_tokens_penalizer.py
Tested: RED/GREEN remote pytest in cjy-glm5-new for min_new_tokens penalizer together with related regression tests
Tested: git diff --check; py_compile for min_new_tokens.py
Not-tested: Full decode throughput benchmark