Add DeepSeek-OCR-2 data collator
src/collate_deepseek.py:
- Letterbox-pads images to 768×768 (gray fill, mean=0.5), normalizes
- Inserts 145 image tokens (12²+1) at sequence start
- Masks image+prompt prefix with -100; trains on response+EOS only
- Builds images_seq_mask and images_spatial_crop for forward()
- crop_mode=False: single global view, same tensor for both tuple slots
(TODO: validate images tuple format against model source)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>