Skip to content

Commit ad350c4

Browse files
authored
[model] Add support for LLaVA-OneVision-1.5 model (#54)
1 parent 60503a2 commit ad350c4

5 files changed

Lines changed: 43 additions & 3 deletions

File tree

src/mcore_bridge/config/parser.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ def hf_to_mcore_config(hf_config: PretrainedConfig) -> Dict[str, Any]:
118118
window_size = res.pop('window_size', None)
119119
rope_scaling = res.get('rope_scaling') or {}
120120
if llm_model_type in {'qwen3', 'qwen3_moe', 'qwen3_next'} or hf_model_type in {
121-
'qwen3_omni_moe', 'qwen3_omni', 'qwen3_vl', 'qwen3_vl_moe', 'qwen3_5', 'qwen3_5_moe'
121+
'qwen3_omni_moe', 'qwen3_omni', 'qwen3_vl', 'qwen3_vl_moe', 'qwen3_5', 'qwen3_5_moe', 'llavaonevision1_5'
122122
}:
123123
res['qk_layernorm'] = True
124124
if llm_model_type in {'qwen2_moe', 'qwen3_moe', 'qwen3_next'

src/mcore_bridge/model/constant.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ class MLLMModelType:
3030

3131
kimi_k25 = 'kimi_k25'
3232

33+
llava_onevision1_5 = 'llava_onevision1_5'
34+
3335

3436
class ModelType(LLMModelType, MLLMModelType):
3537
pass
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
# Copyright (c) ModelScope Contributors. All rights reserved.
2-
from . import glm, internvl, kimi_vl, llama4, qwen, qwen3_5, qwen3_5_gdn, qwen3_omni, qwen3_vl
2+
from . import glm, internvl, kimi_vl, llama4, llava, qwen, qwen3_5, qwen3_5_gdn, qwen3_omni, qwen3_vl
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Copyright (c) ModelScope Contributors. All rights reserved.
2+
from transformers import PretrainedConfig
3+
from transformers.dynamic_module_utils import get_class_from_dynamic_module
4+
5+
from mcore_bridge.bridge import GPTBridge
6+
7+
from ..constant import ModelType
8+
from ..register import ModelMeta, register_model
9+
from .utils import HuggingFaceVit
10+
11+
12+
class LLavaOneVision1_5Vit(HuggingFaceVit):
13+
module_mapping = {'visual': 'visual'}
14+
_vision_tower = ['visual']
15+
_aligner = ['visual.merger']
16+
17+
def prepare_model(self, hf_config: PretrainedConfig):
18+
VisualModel = get_class_from_dynamic_module(
19+
'modeling_llavaonevision1_5.RiceTransformerPretrainedModel',
20+
hf_config.name_or_path)
21+
self.visual = VisualModel._from_config(hf_config.vision_config)
22+
23+
def get_inputs_embeds(self, inputs_embeds, **kwargs):
24+
return self._hf_get_inputs_embeds(inputs_embeds, kwargs, self.visual, self.hf_config)
25+
26+
27+
register_model(
28+
ModelMeta(
29+
ModelType.llava_onevision1_5,
30+
['llava_onevision1_5'],
31+
bridge_cls=GPTBridge,
32+
visual_cls=LLavaOneVision1_5Vit,
33+
))

tests/test_mllm.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,10 @@ def test_qwen3_5():
108108
# _test_model('Qwen/Qwen3.5-27B')
109109

110110

111+
def test_llava_onevision1_5():
112+
_test_model('lmms-lab/LLaVA-OneVision-1.5-4B-Instruct')
113+
114+
111115
if __name__ == '__main__':
112116
# test_qwen2_5_vl()
113117
# test_qwen2_vl()
@@ -126,4 +130,5 @@ def test_qwen3_5():
126130
# test_qwen3_vl_moe()
127131
# test_qwen3_omni()
128132
# test_llama4()
129-
test_qwen3_5()
133+
# test_qwen3_5()
134+
test_llava_onevision1_5()

0 commit comments

Comments
 (0)