@@ -732,10 +732,14 @@ def _build_kv_write_meta(self, task: KVSendTask, req_info: RecvReqInfo) -> Write
732732 # When sender uses chunking, the receiver sends all dst
733733 # blocks in a single RecvReqInfo. Slice dst to match
734734 # this task's src chunk position.
735- if chunk_offset > 0 or len (src_block_ids ) < len (full_dst_block_ids ):
736- dst_block_ids = full_dst_block_ids [
737- chunk_offset : chunk_offset + len (src_block_ids )
738- ]
735+ if chunk_offset > 0 or not task ._slice .is_last_slice :
736+ chunk_end = chunk_offset + len (src_block_ids )
737+ if chunk_end > full_dst_block_ids .size :
738+ raise ValueError (
739+ f"dst chunk range out of bounds: offset={ chunk_offset } , "
740+ f"len={ len (src_block_ids )} , dst_blocks={ full_dst_block_ids .size } "
741+ )
742+ dst_block_ids = full_dst_block_ids [chunk_offset :chunk_end ]
739743 else :
740744 dst_block_ids = full_dst_block_ids
741745
@@ -747,10 +751,10 @@ def _build_kv_write_meta(self, task: KVSendTask, req_info: RecvReqInfo) -> Write
747751 f"src={ src_block_ids .size } , dst={ dst_block_ids .size } "
748752 )
749753 dst_block_ids = dst_block_ids [:- 1 ]
750- elif block_diff > 1 :
754+ elif block_diff != 0 :
751755 raise ValueError (
752756 f"src/dst block count mismatch: { src_block_ids .size } vs "
753- f"{ dst_block_ids .size } (expected diff <= 1)"
757+ f"{ dst_block_ids .size } (expected 0 <= diff <= 1)"
754758 )
755759 tpb = extractor .page_table .tokens_per_block
756760 token_range = task ._slice .token_range
0 commit comments