main
py 63 lines 2.51 KB
Raw
1 # SPDX-License-Identifier: Apache-2.0
2 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3 """Configuration for ColModernVBERT visual document retrieval model.
4
5 ColModernVBERT combines SigLIP vision encoder + ModernBERT text encoder
6 with a pixel shuffle connector and ColBERT-style 128-dim per-token embeddings.
7
8 Reference: https://huggingface.co/ModernVBERT/colmodernvbert-merged
9 """
10
11 from transformers import ModernBertConfig, PreTrainedConfig, SiglipVisionConfig
12
13
14 class ColModernVBertConfig(PreTrainedConfig):
15 model_type = "colmodernvbert"
16
17 def __init__(
18 self,
19 embedding_dim: int = 128,
20 image_token_id: int = 50407,
21 pixel_shuffle_factor: int = 4,
22 text_config: dict | None = None,
23 vision_config: dict | None = None,
24 **kwargs,
25 ):
26 self.embedding_dim = embedding_dim
27 self.image_token_id = image_token_id
28 self.pixel_shuffle_factor = pixel_shuffle_factor
29
30 text_config = text_config or {}
31 self.hidden_size = text_config.get("hidden_size", 768)
32
33 self.text_config = ModernBertConfig(
34 vocab_size=text_config.get("vocab_size", 50408),
35 hidden_size=text_config.get("hidden_size", 768),
36 intermediate_size=text_config.get("intermediate_size", 1152),
37 num_hidden_layers=text_config.get("num_hidden_layers", 22),
38 num_attention_heads=text_config.get("num_attention_heads", 12),
39 mlp_bias=text_config.get("mlp_bias", False),
40 max_position_embeddings=text_config.get("max_position_embeddings", 8192),
41 )
42
43 vision_config = vision_config or {}
44 self.vision_config = SiglipVisionConfig(
45 hidden_size=vision_config.get("hidden_size", 768),
46 image_size=vision_config.get("image_size", 512),
47 patch_size=vision_config.get("patch_size", 16),
48 num_hidden_layers=vision_config.get("num_hidden_layers", 12),
49 intermediate_size=vision_config.get("intermediate_size", 3072),
50 num_attention_heads=vision_config.get("num_attention_heads", 12),
51 )
52
53 # Ensure architectures is set so vLLM routes to our model class
54 kwargs.setdefault("architectures", ["ColModernVBertForRetrieval"])
55 super().__init__(**kwargs)
56
57 @property
58 def image_seq_len(self) -> int:
59 ps = self.vision_config.image_size // self.vision_config.patch_size
60 return (ps * ps) // (self.pixel_shuffle_factor**2)
61
62 def get_text_config(self, **kwargs):
63 return self.text_config