Render a stage input to prompt ids through the model's chat template, exactly
like the server and the trainer's prompt-region render:
render([system?,user], addGenerationPrompt:true) → encode (the template
already emits the BOS) → strip a duplicate leading BOS. Pure w.r.t. the GPU
(tokenizer + template only), so a parity check can call it without a model.
Render a stage input to prompt ids through the model's chat template, exactly like the server and the trainer's prompt-region render: render([system?,user], addGenerationPrompt:true) → encode (the template already emits the BOS) → strip a duplicate leading BOS. Pure w.r.t. the GPU (tokenizer + template only), so a parity check can call it without a model.