@@ -446,6 +446,12 @@ bool common_params_handle_models(common_params & params, llama_example curr_ex)
446446 opts.download_mtp = spec_type_draft_mtp;
447447 opts.download_mmproj = !params.no_mmproj ;
448448
449+ // sub-models (draft, mmproj, vocoder) are explicitly specified by the user,
450+ // so we should not auto-discover mtp/mmproj siblings for them
451+ common_download_opts sub_opts = opts;
452+ sub_opts.download_mtp = false ;
453+ sub_opts.download_mmproj = false ;
454+
449455 try {
450456 auto res = common_params_handle_model (params.model , opts);
451457 if (params.no_mmproj ) {
@@ -457,7 +463,7 @@ bool common_params_handle_models(common_params & params, llama_example curr_ex)
457463 // only download mmproj if the current example is using it
458464 for (const auto & ex : mmproj_examples) {
459465 if (curr_ex == ex) {
460- common_params_handle_model (params.mmproj , opts );
466+ common_params_handle_model (params.mmproj , sub_opts );
461467 break ;
462468 }
463469 }
@@ -470,8 +476,8 @@ bool common_params_handle_models(common_params & params, llama_example curr_ex)
470476 params.speculative .draft .mparams .url .empty ()) {
471477 params.speculative .draft .mparams .path = res.mtp .path ;
472478 }
473- common_params_handle_model (params.speculative .draft .mparams , opts );
474- common_params_handle_model (params.vocoder .model , opts );
479+ common_params_handle_model (params.speculative .draft .mparams , sub_opts );
480+ common_params_handle_model (params.vocoder .model , sub_opts );
475481 return true ;
476482 } catch (const common_skip_download_exception &) {
477483 return false ;
0 commit comments