[train][TBench][MiniSwe] Fix custom generator loss masking #710
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Before this PR, in
TerminalBenchGeneratorandMiniSweAgentGenerator, we naively generate loss mask for a chat history by doing, all zeros for user messages, and all ones for assistant messages.However, this is incorrect. For instance, the generation prompt of assistant should be masked with zero, and the token
\nthat comes after the EOS for Qwen models should be masked with zero.This PR fixes this by implementing
get_response_ids_and_loss_mask_from_messages(), which uses the fixed-base helperencode_messages_subset(), to convert a chat history (excluding the initial prompt, which may differ by models) into response IDs, loss mask, and optionally rollout logprobs.Besides, TerminalBenchGenerator had a bug of
which is incorrect because the messages below will add the generation prompt.
We also add extensive unit tests. The unit tests are implemented by Opus 4.5, which are reviewed and iterated by me.