@@ -41,7 +41,12 @@ def mock_text_config():
4141 text_config .max_position_embeddings = 32768
4242 text_config .rope_theta = 1000000.0
4343 text_config .attention_bias = False
44- text_config .rope_scaling = {"mrope_section" : [24 , 20 , 20 ]}
44+ text_config .rope_scaling = {
45+ "rope_type" : "default" ,
46+ "interleaved" : True ,
47+ "mrope_interleaved" : True ,
48+ "mrope_section" : [24 , 20 , 20 ],
49+ }
4550 return text_config
4651
4752
@@ -104,6 +109,7 @@ def test_provider_bridge_basic_config(self, mock_hf_pretrained):
104109 assert provider .moe_router_topk == 8
105110 assert provider .share_embeddings_and_output_weights is False
106111 assert provider .mrope_section == [24 , 20 , 20 ]
112+ assert provider .rotary_interleaved is False
107113 assert provider .language_max_sequence_length == 32768
108114 assert provider .patch_size == 32
109115 assert provider .temporal_patch_size == 4
@@ -145,6 +151,56 @@ def test_mapping_registry(self):
145151 )
146152 assert any ("thinker.language_model.decoder.layers.*.mlp.router.weight" in name for name in mapping_names )
147153
154+ def test_mapping_registry_resolves_parallel_parameter_names (self ):
155+ bridge = Qwen3OmniBridge ()
156+ registry = bridge .mapping_registry ()
157+
158+ expected = {
159+ "thinker.language_model.decoder.layers.0.self_attention.linear_qkv.weight" : {
160+ "q" : "thinker.model.layers.0.self_attn.q_proj.weight" ,
161+ "k" : "thinker.model.layers.0.self_attn.k_proj.weight" ,
162+ "v" : "thinker.model.layers.0.self_attn.v_proj.weight" ,
163+ },
164+ "thinker.language_model.decoder.layers.0.self_attention.linear_qkv.layer_norm_weight" : (
165+ "thinker.model.layers.0.input_layernorm.weight"
166+ ),
167+ "thinker.language_model.decoder.layers.0.input_layernorm.weight" : (
168+ "thinker.model.layers.0.input_layernorm.weight"
169+ ),
170+ "thinker.language_model.decoder.layers.0.pre_mlp_layernorm.weight" : (
171+ "thinker.model.layers.0.post_attention_layernorm.weight"
172+ ),
173+ "thinker.language_model.decoder.layers.0.self_attention.q_layernorm.weight" : (
174+ "thinker.model.layers.0.self_attn.q_norm.weight"
175+ ),
176+ "thinker.language_model.decoder.layers.0.self_attention.k_layernorm.weight" : (
177+ "thinker.model.layers.0.self_attn.k_norm.weight"
178+ ),
179+ "thinker.language_model.decoder.layers.0.self_attention.linear_proj.weight" : (
180+ "thinker.model.layers.0.self_attn.o_proj.weight"
181+ ),
182+ "thinker.language_model.decoder.layers.0.mlp.router.weight" : "thinker.model.layers.0.mlp.gate.weight" ,
183+ "thinker.language_model.decoder.layers.0.mlp.experts.linear_fc1.weight7" : {
184+ "gate" : "thinker.model.layers.0.mlp.experts.7.gate_proj.weight" ,
185+ "up" : "thinker.model.layers.0.mlp.experts.7.up_proj.weight" ,
186+ },
187+ "thinker.language_model.decoder.layers.0.mlp.experts.linear_fc2.weight7" : (
188+ "thinker.model.layers.0.mlp.experts.7.down_proj.weight"
189+ ),
190+ "thinker.language_model.decoder.layers.0.mlp.experts.local_experts.7.linear_fc1.weight" : {
191+ "gate" : "thinker.model.layers.0.mlp.experts.7.gate_proj.weight" ,
192+ "up" : "thinker.model.layers.0.mlp.experts.7.up_proj.weight" ,
193+ },
194+ "thinker.language_model.decoder.layers.0.mlp.experts.local_experts.7.linear_fc2.weight" : (
195+ "thinker.model.layers.0.mlp.experts.7.down_proj.weight"
196+ ),
197+ }
198+
199+ for megatron_param , hf_param in expected .items ():
200+ mapping = registry .megatron_to_hf_lookup (megatron_param )
201+ assert mapping is not None , megatron_param
202+ assert mapping .hf_param == hf_param
203+
148204 def test_provider_bridge_warns_for_audio_output_stack (self , mock_hf_pretrained , caplog ):
149205 mock_hf_pretrained .config .enable_audio_output = True
150206 caplog .set_level ("WARNING" )
0 commit comments