2 Commits

Author SHA1 Message Date
9ebc1f3666 update GGUF download batch to 370 models 2026-10-01 18:05:49 +08:00
78f8b5ad82 requeue downloads rejected for platform concurrency instead of discarding them
v2.3.0 burned through all 498 models in minutes with download_failed=498: the
platform already had 8 downloads running, every create returned "用户最多同时运行
8 个下载任务", and the worker treated a create failure as terminal (CREATE_FAILED)
and moved on.

Now a concurrency rejection puts the model back at the head of the queue and
waits for the next poll, so only genuine per-model failures (uniqueness check,
etc.) are recorded as failed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 16:01:42 +08:00

285
main.py
View File

@@ -115,6 +115,9 @@ TASK_PAGE_ENDPOINT = "/api/adapt/task/page"
QUOTA_FULL_MSG = "当前等待中或运行中的异步模型验证任务数量已达上限"
_hygon_quota_full = False # zhoukaile 额度是否已打满
_bi150_quota_full = False # bi150 兜底账号额度是否已打满
# 平台下载并发上限提示(错误码 60005);命中时把模型放回队列重试而不是丢弃
DOWNLOAD_BUSY_MSG = "个下载任务"
_download_busy = False
GPU_TYPE_HYGON = "hygon_k100-ai"
GPU_TYPE_BI150 = "Iluvatar_bi-150"
@@ -846,136 +849,140 @@ ALL_MODEL_IDS = [
# "mradermacher/YamshadowInex12_YamT3qm7x-GGUF",
# "mradermacher/T3Q-Mistral-UB-DPO-v1.0-GGUF",
#### 上面的已下载已提交 "hygon_k100-ai" 和 "Iluvatar_bi-150" ########################################################################
#### 然后上面的 交到 Ascend_910-b4 上面了,应该还能交 b3、mthread,都是 f16 的,已经交了 #####################################################
"mradermacher/selfbiorag-7b-dpo-full-sft-wo-kqa_silver_wogold-GGUF",
"mradermacher/NeuralKukedlc-7B-Labonned-GGUF",
"mradermacher/Calme-7B-Instruct-v0.9-GGUF",
"mradermacher/saul-mistral-instruct-v0.1-7b-ties-GGUF",
"mradermacher/FuseChat-7B-TA-GGUF",
"mradermacher/M7Yamshadowexperiment28_Experiment26Experiment28-GGUF",
"mradermacher/Percival_01Experiment26-7B-GGUF",
"mradermacher/Llama-3-8B-Instruct-ortho-baukit-GGUF",
"mradermacher/llama2-diagnoseme-all-GGUF",
"mradermacher/StrangeMerges_37-7B-dare_ties-GGUF",
"mradermacher/YamshadowInex12_Percival_01Shadow-GGUF",
"mradermacher/M7Yamshadowexperiment28_AlloyingotneoyExperiment26-GGUF",
"mradermacher/Barcenas-8b-Juridico-Mexicano-GGUF",
"mradermacher/dolphin-star-GGUF",
"mradermacher/Mistral-7B-v0.1-Llama-3.1-8B-mix-GGUF",
"mradermacher/Meta-Llama-3-8B-Instruct_fictional_French_v1-GGUF",
"mradermacher/YamshadowStrangemerges_32_T3qm7xpT3q-GGUF",
"mradermacher/Experiment28T3q_AlloyingotneoyYam-GGUF",
"mradermacher/WestBeagle-7B-GGUF",
"mradermacher/T3qInex12-7B-GGUF",
"mradermacher/YamshadowInex12_Experiment31Experiment29-GGUF",
"mradermacher/NeuralsirkrishnaShadow_ShadowExperiment24-GGUF",
"mradermacher/kunoichi-squared-model_stock-7B-GGUF",
"mradermacher/EXAONESumm-3.0-7.8B-Instruct-GGUF",
"mradermacher/Infinite-Laymons-7B-GGUF",
"mradermacher/Experiment28M7_Experiment26Inex12-GGUF",
"mradermacher/IsenHumour-GGUF",
"mradermacher/english2nepalitranslate-GGUF",
"mradermacher/M7T3qm7xp_Experiment26T3qm7xp-GGUF",
"mradermacher/Saul-Base-Clown-7B-Instruct-slerp-GGUF",
"mradermacher/NeuralsirkrishnaShadow_AlloyingotneoyInex12-GGUF",
"mradermacher/Experiment28M7_Experiment24Shadow-GGUF",
"mradermacher/MeliodasPercival_01_Experiment28Meliodas-GGUF",
"mradermacher/Thespis-Krangled-7b-v2-GGUF",
"mradermacher/OGSQL-Mistral-7B-GGUF",
"mradermacher/Experiment28T3q_Ognoexperiment27Multi_verse_model-GGUF",
"mradermacher/FinetunedOnAya-GGUF",
"mradermacher/YamT3qm7xp_Inex12Strangemerges_30-GGUF",
"mradermacher/Padma-v7.0-GGUF",
"mradermacher/Experiment26Neuralsirkrishna_Ognoexperiment27M7-GGUF",
"mradermacher/DPA-v1-Mistral-7B-GGUF",
"mradermacher/MeliodasPercival_01_Experiment24Inex12-GGUF",
"mradermacher/Yamshadowexperiment28M70.8-0.49-0.98-0.33-0.09-0.16-7B-GGUF",
"mradermacher/Llama-3-SLERP-8B-GGUF",
"mradermacher/DialoGPT-medium-Sarah-GGUF",
"mradermacher/mistral-7b-instruct-v0.1-review-toxicity-GGUF",
"mradermacher/Obelix-Phi2-v0-GGUF",
"mradermacher/T3qm7xExperiment28-7B-GGUF",
"mradermacher/ShortCircuit-GGUF",
"mradermacher/Experiment28M7_ShadowNeuralsirkrishna-GGUF",
"mradermacher/MeliodasPercival_01_NeuralsirkrishnaExperiment28-GGUF",
"mradermacher/Experiment28T3q_ShadowOgno-GGUF",
"mradermacher/NeuralsirkrishnaShadow_Strangemerges_32Experiment28-GGUF",
"mradermacher/iq-code-evmind-v1-llama3-code-8b-instruct-GGUF",
"mradermacher/LimaRP-daybreak-7B-GGUF",
"mradermacher/llama3-8B-simOrca-lgalclause-inverted-persuasion-slerp-fp16-GGUF",
"mradermacher/research_paper_extractor-GGUF",
"mradermacher/L3.1-8B-Niitama-v1.1-GGUF",
"mradermacher/Experiment28M7_Neuralsirkrishnaexperiment26Experiment24-GGUF",
"mradermacher/orpo-phi2-GGUF",
"mradermacher/haryra-7b-mistral-id-GGUF",
"mradermacher/African-ultrachat-alpaca-GGUF",
"mradermacher/Cyber_assist3.2-GGUF",
"mradermacher/Strangemerges_32T3qm7xp-7B-GGUF",
"mradermacher/Nous-Hermes-2-DPO_into_Nous_Hermes-2-Pro-GGUF",
"mradermacher/YamshadowInex12_Experiment27Experiment29-GGUF",
"mradermacher/Not-WizardLM-2-7B-GGUF",
"mradermacher/T3qm7xPercival_01-7B-GGUF",
"mradermacher/JSL-Med-Sft-Llama-3-8B-GGUF",
"mradermacher/I-Heart_sft_1.0-GGUF",
"mradermacher/MeliodasPercival_01_ShadowYamshadow-GGUF",
"mradermacher/YamshadowInex12_Experiment26Neuralsirkrishna-GGUF",
"mradermacher/Prometheus-v0.2-GGUF",
"mradermacher/gemma-it-Kannada-Translation-GGUF",
"mradermacher/YamshadowStrangemerges_32_T3qM7-GGUF",
"mradermacher/CosMoEAlpacaLisa-4x1b-GGUF",
"mradermacher/Nous-Hermes-2-Pro_into_Nous_Hermes-2-DPO-GGUF",
"mradermacher/YamshadowInex12_Experiment24Alloyingotneoy-GGUF",
"mradermacher/MeliodasPercival_01_Experiment24Experiment26-GGUF",
"mradermacher/llama-3-slerp-dolphin-sauce-8B-GGUF",
"mradermacher/MeliodasPercival_01_Experiment27Shadow-GGUF",
"mradermacher/karasu-livejupiter-v0.1-GGUF",
"mradermacher/gemma-2b-telugu-base-GGUF",
"mradermacher/NeuralsirkrishnaShadow_Experiment26Strangemerges_30-GGUF",
"mradermacher/physiogemma-2b-GGUF",
"mradermacher/M7Yamshadowexperiment28_Experiment24Yam-GGUF",
"mradermacher/YamshadowStrangemerges_32_Experiment28Yam-GGUF",
"mradermacher/Nous-Hermes-2-Mixtral-8x7B-DPO-2-GGUF",
"mradermacher/Experiment28M7_Strangemerges_32Shadow-GGUF",
"mradermacher/Meta-Llama-3-8B-Instruct_fictional_arc_Italian_v2-GGUF",
"mradermacher/WeniGPT-Agents-Mistral-1.0.6-SFT-1.0.3-DPO-merged-GGUF",
"mradermacher/NeuralsirkrishnaShadow_ShadowCalme-GGUF",
"mradermacher/YamshadowInex12_ShadowNeuralsirkrishna-GGUF",
"mradermacher/Antler-RP-ja-westlake-chatvector-GGUF",
"mradermacher/YamshadowInex12_Experiment26Inex12-GGUF",
"mradermacher/M7Yamshadowexperiment28_Experiment28Experiment24-GGUF",
"mradermacher/NeuralsirkrishnaShadow_Experiment28Experiment29-GGUF",
"mradermacher/Mistralchat-7B-slerp-GGUF",
"mradermacher/MistralMerge-7B-stock-GGUF",
"mradermacher/Llama-3-MopeyMule-Blackroot-8B-GGUF",
"mradermacher/Delexa-Instruct-V0.1-7b-GGUF",
"mradermacher/cendol-llama2-7b-inst-GGUF",
"mradermacher/llama-3-8b-Instruct-OpenHermes-2.5-QLoRA-GGUF",
"mradermacher/Llama-3-8B-Instruct-v0.7-GGUF",
"mradermacher/Swallow-MS-7b-v0.1-ChatSkill-LAB-Evo-v0.1-GGUF",
"mradermacher/Ognoexperiment27multi_verse_modelCalmexperiment-7B-GGUF",
"mradermacher/Ognoexperiment27multi_verse_modelExperiment27pastiche-7B-GGUF",
"mradermacher/M7Yamshadowexperiment28_AlloyingotneoyExperiment24-GGUF",
"mradermacher/Experiment28T3q_Experiment26Pastiche-GGUF",
"mradermacher/DeepCode-7B-Aurora-v13-GGUF",
"mradermacher/Medical_QandA-GGUF",
"mradermacher/NeuralKrishna-7B-v3-GGUF",
"mradermacher/T3qm7xNeuralsirkrishna_OgnoExperiment27-GGUF",
"mradermacher/YamshadowInex12_Experiment26Experiment28-GGUF",
"mradermacher/Experiment28M7_YamT3qm7x-GGUF",
"mradermacher/OpenCerebrum-1.5-Mistral-7B-v0.2-beta-GGUF",
"mradermacher/Experiment28M7_Inex12Neural-GGUF",
"mradermacher/Experiment28T3q_Experiment29Pastiche-GGUF",
"mradermacher/BilingualChildEmoEC-GGUF",
"mradermacher/Neural-4-QA-7b-v0.2-GGUF",
"mradermacher/Aurora_faustus-8B-LINEAR-GGUF",
"mradermacher/Experiment26Neuralsirkrishna_Experiment27Experiment28-GGUF",
"mradermacher/NM-ELV-4000-VAL-QL-241224-GGUF",
"mradermacher/blossom-v2-3b-GGUF",
"mradermacher/Phi-3-mini-4k-instruct-dansk-GGUF",
"mradermacher/ahinsa0.6-llama3.2-3B-GGUF",
"mradermacher/Meta-Llama-3-8B-Instruct_fictional_arc_Chinese_v1-GGUF",
"mradermacher/Mistral-7B-v0.3-sft-SPIN-human-dataset-GGUF",
# "mradermacher/selfbiorag-7b-dpo-full-sft-wo-kqa_silver_wogold-GGUF",
# "mradermacher/NeuralKukedlc-7B-Labonned-GGUF",
# "mradermacher/Calme-7B-Instruct-v0.9-GGUF",
# "mradermacher/saul-mistral-instruct-v0.1-7b-ties-GGUF",
# "mradermacher/FuseChat-7B-TA-GGUF",
# "mradermacher/M7Yamshadowexperiment28_Experiment26Experiment28-GGUF",
# "mradermacher/Percival_01Experiment26-7B-GGUF",
# "mradermacher/Llama-3-8B-Instruct-ortho-baukit-GGUF",
# "mradermacher/llama2-diagnoseme-all-GGUF",
# "mradermacher/StrangeMerges_37-7B-dare_ties-GGUF",
# "mradermacher/YamshadowInex12_Percival_01Shadow-GGUF",
# "mradermacher/M7Yamshadowexperiment28_AlloyingotneoyExperiment26-GGUF",
# "mradermacher/Barcenas-8b-Juridico-Mexicano-GGUF",
# "mradermacher/dolphin-star-GGUF",
# "mradermacher/Mistral-7B-v0.1-Llama-3.1-8B-mix-GGUF",
# "mradermacher/Meta-Llama-3-8B-Instruct_fictional_French_v1-GGUF",
# "mradermacher/YamshadowStrangemerges_32_T3qm7xpT3q-GGUF",
# "mradermacher/Experiment28T3q_AlloyingotneoyYam-GGUF",
# "mradermacher/WestBeagle-7B-GGUF",
# "mradermacher/T3qInex12-7B-GGUF",
# "mradermacher/YamshadowInex12_Experiment31Experiment29-GGUF",
# "mradermacher/NeuralsirkrishnaShadow_ShadowExperiment24-GGUF",
# "mradermacher/kunoichi-squared-model_stock-7B-GGUF",
# "mradermacher/EXAONESumm-3.0-7.8B-Instruct-GGUF",
# "mradermacher/Infinite-Laymons-7B-GGUF",
# "mradermacher/Experiment28M7_Experiment26Inex12-GGUF",
# "mradermacher/IsenHumour-GGUF",
# "mradermacher/english2nepalitranslate-GGUF",
# "mradermacher/M7T3qm7xp_Experiment26T3qm7xp-GGUF",
# "mradermacher/Saul-Base-Clown-7B-Instruct-slerp-GGUF",
# "mradermacher/NeuralsirkrishnaShadow_AlloyingotneoyInex12-GGUF",
# "mradermacher/Experiment28M7_Experiment24Shadow-GGUF",
# "mradermacher/MeliodasPercival_01_Experiment28Meliodas-GGUF",
# "mradermacher/Thespis-Krangled-7b-v2-GGUF",
# "mradermacher/OGSQL-Mistral-7B-GGUF",
# "mradermacher/Experiment28T3q_Ognoexperiment27Multi_verse_model-GGUF",
# "mradermacher/FinetunedOnAya-GGUF",
# "mradermacher/YamT3qm7xp_Inex12Strangemerges_30-GGUF",
# "mradermacher/Padma-v7.0-GGUF",
# "mradermacher/Experiment26Neuralsirkrishna_Ognoexperiment27M7-GGUF",
# "mradermacher/DPA-v1-Mistral-7B-GGUF",
# "mradermacher/MeliodasPercival_01_Experiment24Inex12-GGUF",
# "mradermacher/Yamshadowexperiment28M70.8-0.49-0.98-0.33-0.09-0.16-7B-GGUF",
# "mradermacher/Llama-3-SLERP-8B-GGUF",
# "mradermacher/DialoGPT-medium-Sarah-GGUF",
# "mradermacher/mistral-7b-instruct-v0.1-review-toxicity-GGUF",
# "mradermacher/Obelix-Phi2-v0-GGUF",
# "mradermacher/T3qm7xExperiment28-7B-GGUF",
# "mradermacher/ShortCircuit-GGUF",
# "mradermacher/Experiment28M7_ShadowNeuralsirkrishna-GGUF",
# "mradermacher/MeliodasPercival_01_NeuralsirkrishnaExperiment28-GGUF",
# "mradermacher/Experiment28T3q_ShadowOgno-GGUF",
# "mradermacher/NeuralsirkrishnaShadow_Strangemerges_32Experiment28-GGUF",
# "mradermacher/iq-code-evmind-v1-llama3-code-8b-instruct-GGUF",
# "mradermacher/LimaRP-daybreak-7B-GGUF",
# "mradermacher/llama3-8B-simOrca-lgalclause-inverted-persuasion-slerp-fp16-GGUF",
# "mradermacher/research_paper_extractor-GGUF",
# "mradermacher/L3.1-8B-Niitama-v1.1-GGUF",
# "mradermacher/Experiment28M7_Neuralsirkrishnaexperiment26Experiment24-GGUF",
# "mradermacher/orpo-phi2-GGUF",
# "mradermacher/haryra-7b-mistral-id-GGUF",
# "mradermacher/African-ultrachat-alpaca-GGUF",
# "mradermacher/Cyber_assist3.2-GGUF",
# "mradermacher/Strangemerges_32T3qm7xp-7B-GGUF",
# "mradermacher/Nous-Hermes-2-DPO_into_Nous_Hermes-2-Pro-GGUF",
# "mradermacher/YamshadowInex12_Experiment27Experiment29-GGUF",
# "mradermacher/Not-WizardLM-2-7B-GGUF",
# "mradermacher/T3qm7xPercival_01-7B-GGUF",
# "mradermacher/JSL-Med-Sft-Llama-3-8B-GGUF",
# "mradermacher/I-Heart_sft_1.0-GGUF",
# "mradermacher/MeliodasPercival_01_ShadowYamshadow-GGUF",
# "mradermacher/YamshadowInex12_Experiment26Neuralsirkrishna-GGUF",
# "mradermacher/Prometheus-v0.2-GGUF",
# "mradermacher/gemma-it-Kannada-Translation-GGUF",
# "mradermacher/YamshadowStrangemerges_32_T3qM7-GGUF",
# "mradermacher/CosMoEAlpacaLisa-4x1b-GGUF",
# "mradermacher/Nous-Hermes-2-Pro_into_Nous_Hermes-2-DPO-GGUF",
# "mradermacher/YamshadowInex12_Experiment24Alloyingotneoy-GGUF",
# "mradermacher/MeliodasPercival_01_Experiment24Experiment26-GGUF",
# "mradermacher/llama-3-slerp-dolphin-sauce-8B-GGUF",
# "mradermacher/MeliodasPercival_01_Experiment27Shadow-GGUF",
# "mradermacher/karasu-livejupiter-v0.1-GGUF",
# "mradermacher/gemma-2b-telugu-base-GGUF",
# "mradermacher/NeuralsirkrishnaShadow_Experiment26Strangemerges_30-GGUF",
# "mradermacher/physiogemma-2b-GGUF",
# "mradermacher/M7Yamshadowexperiment28_Experiment24Yam-GGUF",
# "mradermacher/YamshadowStrangemerges_32_Experiment28Yam-GGUF",
# "mradermacher/Nous-Hermes-2-Mixtral-8x7B-DPO-2-GGUF",
# "mradermacher/Experiment28M7_Strangemerges_32Shadow-GGUF",
# "mradermacher/Meta-Llama-3-8B-Instruct_fictional_arc_Italian_v2-GGUF",
# "mradermacher/WeniGPT-Agents-Mistral-1.0.6-SFT-1.0.3-DPO-merged-GGUF",
# "mradermacher/NeuralsirkrishnaShadow_ShadowCalme-GGUF",
# "mradermacher/YamshadowInex12_ShadowNeuralsirkrishna-GGUF",
# "mradermacher/Antler-RP-ja-westlake-chatvector-GGUF",
# "mradermacher/YamshadowInex12_Experiment26Inex12-GGUF",
# "mradermacher/M7Yamshadowexperiment28_Experiment28Experiment24-GGUF",
# "mradermacher/NeuralsirkrishnaShadow_Experiment28Experiment29-GGUF",
# "mradermacher/Mistralchat-7B-slerp-GGUF",
# "mradermacher/MistralMerge-7B-stock-GGUF",
# "mradermacher/Llama-3-MopeyMule-Blackroot-8B-GGUF",
# "mradermacher/Delexa-Instruct-V0.1-7b-GGUF",
# "mradermacher/cendol-llama2-7b-inst-GGUF",
# "mradermacher/llama-3-8b-Instruct-OpenHermes-2.5-QLoRA-GGUF",
# "mradermacher/Llama-3-8B-Instruct-v0.7-GGUF",
# "mradermacher/Swallow-MS-7b-v0.1-ChatSkill-LAB-Evo-v0.1-GGUF",
# "mradermacher/Ognoexperiment27multi_verse_modelCalmexperiment-7B-GGUF",
# "mradermacher/Ognoexperiment27multi_verse_modelExperiment27pastiche-7B-GGUF",
# "mradermacher/M7Yamshadowexperiment28_AlloyingotneoyExperiment24-GGUF",
# "mradermacher/Experiment28T3q_Experiment26Pastiche-GGUF",
# "mradermacher/DeepCode-7B-Aurora-v13-GGUF",
# "mradermacher/Medical_QandA-GGUF",
# "mradermacher/NeuralKrishna-7B-v3-GGUF",
# "mradermacher/T3qm7xNeuralsirkrishna_OgnoExperiment27-GGUF",
# "mradermacher/YamshadowInex12_Experiment26Experiment28-GGUF",
# "mradermacher/Experiment28M7_YamT3qm7x-GGUF",
# "mradermacher/OpenCerebrum-1.5-Mistral-7B-v0.2-beta-GGUF",
# "mradermacher/Experiment28M7_Inex12Neural-GGUF",
# "mradermacher/Experiment28T3q_Experiment29Pastiche-GGUF",
# "mradermacher/BilingualChildEmoEC-GGUF",
# "mradermacher/Neural-4-QA-7b-v0.2-GGUF",
# "mradermacher/Aurora_faustus-8B-LINEAR-GGUF",
# "mradermacher/Experiment26Neuralsirkrishna_Experiment27Experiment28-GGUF",
# "mradermacher/NM-ELV-4000-VAL-QL-241224-GGUF",
# "mradermacher/blossom-v2-3b-GGUF",
# "mradermacher/Phi-3-mini-4k-instruct-dansk-GGUF",
# "mradermacher/ahinsa0.6-llama3.2-3B-GGUF",
# "mradermacher/Meta-Llama-3-8B-Instruct_fictional_arc_Chinese_v1-GGUF",
# "mradermacher/Mistral-7B-v0.3-sft-SPIN-human-dataset-GGUF",
"mradermacher/Fortitude-GGUF",
"mradermacher/rewrite-3B-tesla-GGUF",
"mradermacher/QvQ-1B-Preview-GGUF",
@@ -1347,10 +1354,12 @@ ALL_MODEL_IDS = [
"mradermacher/MT4-Gen5-MUMM-gemma-2-9B-GGUF",
"mradermacher/Therapod-Model-GGUF",
"mradermacher/Yamshadowexperiment28M70.15-0.01-0.79-0.31-0.16-0.95-7B-GGUF",
#### 这一段有提前占位提交 zhoukaile, zhangyuanxi, 然后等待 zhoushasha 的账号去下载,但是应该都是提交的 bi150 以及 hygon
#### 提前占位依然可以交 b3\b4\mthread,已经交了
### 下面的 model 先注释掉,没有提前占位提交 ##############################################################################################
### 下面的 model 先注释掉,没有提前占位提交, 也没有提交下载 ##############################################################################################
# "mradermacher/PESTO-llama-base-GGUF",
# "mradermacher/JaskierMistral-7B-slerp-GGUF",
# "mradermacher/TSN-Kosmos-EVAA-v2-8B-GGUF",
@@ -2645,7 +2654,14 @@ def create_download_task(token: str, model_id: str) -> bool:
print(f"✅ 下载任务已提交: {model_id}", flush=True)
return True
else:
print(f"⚠️ 下载任务业务失败 ({model_id}): {data.get('message')}", flush=True)
msg = str(data.get("message") or "")
if DOWNLOAD_BUSY_MSG in msg:
# 平台侧下载并发已满,不是这个模型的问题,稍后重试
global _download_busy
_download_busy = True
print(f"⏸️ 下载并发已满,稍后重试 ({model_id})", flush=True)
else:
print(f"⚠️ 下载任务业务失败 ({model_id}): {msg}", flush=True)
return False
else:
print(f"❌ HTTP 错误 ({model_id}): {resp.status_code} - {resp.text}", flush=True)
@@ -2929,13 +2945,20 @@ def _download_phase(token, pending_models, active_models, completed_results) ->
_state["download_failed"] += 1
# 2. 补充新任务(最多补到 MAX_CONCURRENT_DOWNLOADS 个)
global _download_busy
_download_busy = False
while len(active_models) < MAX_CONCURRENT_DOWNLOADS and pending_models and not _shutdown.is_set():
next_model = pending_models.pop(0)
if create_download_task(token, next_model):
active_models.add(next_model)
print(f"▶️ 启动下载: {next_model} (当前活跃: {len(active_models)})", flush=True)
elif _download_busy:
# 平台下载并发已满:放回队首等下一轮重试,不能当成失败丢弃,
# 否则整个列表会在几分钟内被空转消耗光(v2.3.0 曾因此 498 个全部“失败”)
pending_models.insert(0, next_model)
break
else:
# 创建失败也视为完成(避免卡住)
# 模型本身的问题(如唯一性检查不通过),视为完成,避免卡住
completed_results[next_model] = "CREATE_FAILED"
_state["download_failed"] += 1
print(f"❌ 创建失败: {next_model}", flush=True)