main
py 99 lines 3.21 KB
Raw
1 # SPDX-License-Identifier: Apache-2.0
2 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3 from __future__ import annotations
4
5 from transformers import Qwen3Config
6 from transformers.models.siglip2.configuration_siglip2 import Siglip2VisionConfig
7
8
9 class PixelShuffleSiglip2VisionConfig(Siglip2VisionConfig):
10 """Vision configuration for Isaac with Pixel Shuffle support.
11
12 Extends Siglip2VisionConfig with additional fields for pixel shuffle.
13 """
14
15 model_type = "pixel_shuffle_siglip2"
16 base_config_key = "vision_config"
17
18 def __init__(
19 self,
20 pixel_shuffle_scale_factor: int = 1,
21 num_patches: int = 256,
22 **kwargs,
23 ):
24 super().__init__(**kwargs)
25
26 # Add our custom fields
27 self.pixel_shuffle_scale_factor = pixel_shuffle_scale_factor
28 self.num_patches = num_patches
29
30
31 class IsaacConfig(Qwen3Config):
32 """Configuration class for Isaac multimodal model."""
33
34 model_type = "isaac"
35 sub_configs = {
36 "vision_config": PixelShuffleSiglip2VisionConfig,
37 "text_config": Qwen3Config,
38 }
39
40 def __init__(
41 self,
42 text_config=None,
43 vision_config=None,
44 vision_patch_size: int = 16,
45 vision_max_num_patches: int = 256,
46 vision_min_num_patches: int | None = None,
47 pixel_shuffle_scale: int = 1,
48 max_sequence_length: int = 16384,
49 vision_token: str = "<image>",
50 vision_attn_implementation: str | None = None,
51 **kwargs,
52 ):
53 if isinstance(text_config, dict):
54 # from HF config
55 self.text_config = self.sub_configs["text_config"](**text_config)
56 elif text_config is None:
57 # For BC use all kwargs to init text config.
58 self.text_config = self.sub_configs["text_config"](**kwargs)
59 else:
60 # from Qwen3Config
61 self.text_config = text_config
62
63 # EventStreamProcessor parameters (for backward compatibility)
64 self.video_patch_size = vision_patch_size
65 self.vision_max_num_patches = vision_max_num_patches
66 self.vision_min_num_patches = vision_min_num_patches
67 self.pixel_shuffle_scale = pixel_shuffle_scale
68
69 # Processing parameters
70 self.max_sequence_length = max_sequence_length
71 self.vision_token = vision_token
72
73 # Handle vision config - PixelShuffleSiglip2VisionConfig instance
74 if isinstance(vision_config, dict):
75 self.vision_config = PixelShuffleSiglip2VisionConfig(**vision_config)
76 elif vision_config is None:
77 self.vision_config = PixelShuffleSiglip2VisionConfig()
78 else:
79 self.vision_config = vision_config
80
81 # Ensure compatibility with pretrained checkpoints
82 self.vision_config.pixel_shuffle_scale_factor = getattr(
83 self.vision_config,
84 "pixel_shuffle_scale_factor",
85 pixel_shuffle_scale,
86 )
87 self.vision_config.num_patches = getattr(
88 self.vision_config,
89 "num_patches",
90 vision_max_num_patches,
91 )
92 self.vision_attn_implementation = vision_attn_implementation
93 super().__init__(**kwargs)
94
95
96 __all__ = [
97 "IsaacConfig",
98 "PixelShuffleSiglip2VisionConfig",
99 ]