Schedule one prefill iteration over requests in their existing order. Visit each request at most once. For every unfinished request, assign min(its remaining tokens, max_chunk, remaining iteration budget), skipping zero assignments.
Return {"chunks": [request_index,token_count] pairs, "remaining": updated per-request counts, "unused": unspent token budget}. Do not revisit the first request after a later one finishes; a per-request chunk cap may leave budget unused.