feat: add Qwen3.5 image-to-text support#152
Conversation
There was a problem hiding this comment.
Code Review
This pull request introduces comprehensive support for multimodal models, specifically Qwen3.5-VL, across the training, serving, and rollout pipelines, including new helper utilities for image encoding, token expansion, and MRoPE position alignment. It also adds a complete Tic-Tac-Toe image training example. The review feedback identifies two critical bugs in areno/engine/runtime/train_step.py and areno/models/qwen3_5/model.py where indexing image_token_mask with row_idx instead of 0 will cause an IndexError for batches containing multiple sequences.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
Summary
This pull request adds Qwen3.5 image-to-text support across AReno's model, serving, training, and example paths. It enables Qwen3.5 checkpoints with vision components to accept image inputs, project visual features through the vision tower, and feed the resulting image embeddings into the language model with aligned image-token masks and multimodal position information.
Scope
The implementation covers the following areas:
Compatibility
The change is intended to preserve existing text-only Qwen3.5 behavior while adding the multimodal path for checkpoints that include vision configuration and image token metadata. Existing text-only serving and training paths should continue to use their previous data flow.
Notes
The Qwen3.5-MoE-VL path reuses the same vision tower and multimodal feature injection flow as dense Qwen3.5-VL, while selecting the MoE language backbone from the checkpoint configuration. The vision merger shape follows the checkpoint layout where the merged visual hidden size is
hidden_size * spatial_merge_size^2.Closes #133
Closes #134
Closes #135
Closes #136