Skip to content

Commit 22b69b6

Browse files
author
Xuan-Son Nguyen
authored
arg: prevent duplicate spec model downloads (ggml-org#25527)
1 parent 3e706dd commit 22b69b6

1 file changed

Lines changed: 17 additions & 11 deletions

File tree

common/arg.cpp

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -488,12 +488,15 @@ void common_models_handler_apply(common_models_handler & handler, common_params
488488
task.opts = opts;
489489
tasks.push_back(task);
490490
}
491+
492+
bool had_spec_url = false;
491493
if (!params.speculative.draft.mparams.url.empty()) {
492494
common_download_task task;
493495
task.url = params.speculative.draft.mparams.url;
494496
task.local_path = params.speculative.draft.mparams.path;
495497
task.opts = opts;
496498
tasks.push_back(task);
499+
had_spec_url = true;
497500
}
498501

499502
// handle hf_plan tasks
@@ -513,6 +516,18 @@ void common_models_handler_apply(common_models_handler & handler, common_params
513516
});
514517
}
515518
};
519+
520+
// handle plan_spec (e.g. --spec-draft-hf)
521+
if (!plan_spec.model_files.empty() && !had_spec_url) {
522+
add_tasks(plan_spec.model_files, plan_spec.primary, params.speculative.draft.mparams);
523+
had_spec_url = true;
524+
}
525+
526+
// handle vocoder plan (e.g. --hf-repo-v)
527+
if (!plan_voc.model_files.empty()) {
528+
add_tasks(plan_voc.model_files, plan_voc.primary, params.vocoder.model);
529+
}
530+
516531
if (!plan.model_files.empty()) {
517532
add_tasks(plan.model_files, plan.primary, params.model);
518533
}
@@ -521,7 +536,7 @@ void common_models_handler_apply(common_models_handler & handler, common_params
521536
params.mmproj.path = hf_cache::finalize_file(plan.mmproj);
522537
});
523538
}
524-
if (!plan.mtp.local_path.empty()) {
539+
if (!plan.mtp.local_path.empty() && !had_spec_url) {
525540
tasks.emplace_back(plan.mtp, opts, [&]() {
526541
// only fall back to the discovered MTP head when no draft was explicitly provided
527542
if (params.speculative.draft.mparams.empty()) {
@@ -540,16 +555,6 @@ void common_models_handler_apply(common_models_handler & handler, common_params
540555
});
541556
}
542557

543-
// handle plan_spec (e.g. --spec-draft-hf)
544-
if (!plan_spec.model_files.empty()) {
545-
add_tasks(plan_spec.model_files, plan_spec.primary, params.speculative.draft.mparams);
546-
}
547-
548-
// handle vocoder plan (e.g. --hf-repo-v)
549-
if (!plan_voc.model_files.empty()) {
550-
add_tasks(plan_voc.model_files, plan_voc.primary, params.vocoder.model);
551-
}
552-
553558
// run all tasks in parallel
554559
if (!params.offline) {
555560
// if duplicated files are found, only download once (but still call on_done for each task)
@@ -562,6 +567,7 @@ void common_models_handler_apply(common_models_handler & handler, common_params
562567
}
563568
std::vector<common_download_task> unique_tasks_vec;
564569
for (auto & pair : unique_tasks) {
570+
LOG_DBG("download task: %s -> %s\n", pair.second->url.c_str(), pair.second->local_path.c_str());
565571
unique_tasks_vec.push_back(*pair.second);
566572
}
567573
common_download_run_tasks(unique_tasks_vec);

0 commit comments

Comments
 (0)