@@ -28,10 +28,13 @@ impl ModelProcessorSpec for Qwen3VLVisionSpec {
2828
2929 fn matches ( & self , metadata : & ModelMetadata ) -> bool {
3030 let id = metadata. model_id . to_ascii_lowercase ( ) ;
31- id. contains ( "qwen3" ) && id. contains ( "vl" )
32- || metadata
33- . config_model_type ( )
34- . is_some_and ( |mt| mt == "qwen3_vl" )
31+ let model_type = metadata. config_model_type ( ) ;
32+ let is_qwen3_vl = id. contains ( "qwen3" ) && id. contains ( "vl" )
33+ || model_type. is_some_and ( |mt| mt == "qwen3_vl" ) ;
34+ let is_qwen3_5 = id. contains ( "qwen3.5" )
35+ || id. contains ( "qwen3.6" )
36+ || model_type. is_some_and ( |mt| mt == "qwen3_5" || mt == "qwen3_5_moe" ) ;
37+ is_qwen3_vl || is_qwen3_5
3538 }
3639
3740 fn placeholder_token ( & self , metadata : & ModelMetadata ) -> RegistryResult < String > {
@@ -178,4 +181,23 @@ mod tests {
178181 . expect ( "should match qwen3 alias" ) ;
179182 assert_eq ! ( spec. name( ) , "qwen3_vl" ) ;
180183 }
184+
185+ #[ test]
186+ fn qwen3_5_matches_alias_via_model_type ( ) {
187+ let tokenizer = TestTokenizer :: new ( & [ ( "<|image_pad|>" , 151655 ) ] ) ;
188+ let config = json ! ( {
189+ "model_type" : "qwen3_5_moe" ,
190+ "image_token_id" : 151655 ,
191+ } ) ;
192+ let metadata = ModelMetadata {
193+ model_id : "custom-model" ,
194+ tokenizer : & tokenizer,
195+ config : & config,
196+ } ;
197+ let registry = ModelRegistry :: new ( ) ;
198+ let spec = registry
199+ . lookup ( & metadata)
200+ . expect ( "should match qwen3.5 alias" ) ;
201+ assert_eq ! ( spec. name( ) , "qwen3_vl" ) ;
202+ }
181203}
0 commit comments