1 Commits

Author SHA1 Message Date
fb5e1079a8 Refresh GGUF download batch and fail closed on expired token 2026-10-08 19:13:45 +08:00
2 changed files with 158 additions and 150 deletions

View File

@@ -1,13 +1,12 @@
# xc_validation_strategy_gguf
GGUF 模型下载 + 验证任务提交流水线策略服务:批量创建 GGUF 模型下载任务(最大并发 8),
每个模型下载成功后立即提交 hygon / bi150 两个验证任务,之后保持 HTTP 服务存活供平台探活。
本版本为纯下载策略:使用 `zhoushasha` 账号批量创建 `main.py` 中未注释的 GGUF 模型下载任务(最大并发 8),不提交验证任务;之后保持 HTTP 服务存活供平台探活。
## 功能
- 自动登录 ModelHub 获取 Token(失败时回退到预设 Token)
- 启动时登录 ModelHub 获取新 Token,并检查账号身份及有效期;登录失败时停止,不回退到过期 Token
- 按流水线批量创建 GGUF 模型下载任务(HuggingFace 源,最大并发 8)
- 每个模型下载成功后,立即提交 hygon_k100-ai 与 Iluvatar_bi-150 两个验证任务(llamacpp 框架)
- 当前 `DOWNLOAD_ONLY=True`,不调用验证任务提交接口;验证任务由其他策略负责
- 下载成功的模型 ID 写入 `downloaded_success_models.txt`
- 暴露 `/health` 和 `/status` 接口满足平台运行时契约
@@ -15,7 +14,7 @@ GGUF 模型下载 + 验证任务提交流水线策略服务:批量创建 GGUF
```
.
├── main.py # 主入口:HTTP 服务 + 下载/提交流水线
├── main.py # 主入口:HTTP 服务 + 纯下载流程
├── Dockerfile # 平台镜像构建配置
├── requirements.txt # Python 依赖
└── downloaded_success_models.txt # 运行后自动生成,记录下载成功的模型

299
main.py
View File

@@ -8,11 +8,13 @@ GGUF 模型下载 + 验证任务提交流水线(部署框架与 xc_validation_
同时暴露 /health(K8s 探活)和 /status(运行状态)。
"""
import base64
import json
import os
import re
import signal
import threading
import time
from datetime import datetime
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
from typing import List, Set, Tuple
@@ -29,13 +31,10 @@ SUBMIT_TEST_TASK_ENDPOINT = "/adminApi/async/task/create-contest-task"
ADD_TASK_ENDPOINT = "/api/adapt/task/add" # 机制B(xc-Token 认证),hygon 验证任务改走这个
# 登录账号(下载任务仍用这个账号,不受下面 hygon 提交账号切换的影响):
# 启动时优先用账号密码换取新 token(流水线运行时间长,预设 token 可能过期)
# 每次启动都登录获取新 Token;登录失败时停止,不使用过期凭据。
USER_ACCOUNT = "zhoushasha@4paradigm.com"
USER_PASSWORD = "ganshenme0"
# 通过 curl -X POST https://modelhub.org.cn/adminApi/user/login 获取后填入(登录失败时的回退)
AUTH_TOKEN = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyQWNjb3VudCI6Inpob3VzaGFzaGEiLCJpZCI6MTQsInVzZXJSb2xlIjoibGVhZGVyYm9hcmQiLCJleHAiOjE3OTAxNDU2NDYsImlhdCI6MTc4OTU0MDg0Nn0.PY0e46UY9YDvl_PNvn9Zv-WyvkaTbYngScbwyw-cWMg"
# hygon_k100-ai 验证任务走机制B(xc-Token),固定用 l11223344 提交
HYGON_SUBMIT_ACCOUNT = "zhoukaile"
HYGON_XC_TOKEN = "bd7c52f3b9604ef48a14dd6174513935"
@@ -983,136 +982,142 @@ ALL_MODEL_IDS = [
# "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",
"mradermacher/Phi-3-mini-128k-instruct-ft-v2-GGUF",
"mradermacher/martinLLM-phi-4b-128k-GGUF",
"mradermacher/llama-3-2-3B-wame-curi-chat2-GGUF",
"mradermacher/Nemotron-Picaro-fp16-GGUF",
"mradermacher/ZEUS-8B-V10-GGUF",
"mradermacher/Human-gemma-2b-GGUF",
"mradermacher/KAErisepBeagleNuBuRPInfinWestLakev2-ENDLESSIreneRP-Neural-7B-slerp-GGUF",
"mradermacher/Mistral-7B-v0.1-chat-ORPO-GGUF",
"mradermacher/herbalism_v2-GGUF",
"mradermacher/CriticalThinker-llama-3.1-8B-GGUF",
"mradermacher/BilingualChildrenEmo-GGUF",
"mradermacher/Mistral-7B-v0.3-sft-SPIN-self-human-dataset-GGUF",
"mradermacher/FineLlama-3.2-3B-Instruct-ead-GGUF",
"mradermacher/OrpoLlama-3.2-3B-GGUF",
"mradermacher/maximusLLM-phi-4b-128k-GGUF",
"mradermacher/Wisenut-3.1-8B-IC-SFT-GGUF",
"mradermacher/Espresso-AI-GGUF",
"mradermacher/Llama-3.1-8B-sft-SPIN-self-human-dataset-GGUF",
"mradermacher/rewrite-7B-tesla-GGUF",
"mradermacher/Tulu-MathLingo-8B-GGUF",
"mradermacher/tongyi-model-v1.5-1b-enth-GGUF",
"mradermacher/occiglot-7b-fr-en-instruct-hf-GGUF",
"mradermacher/Gemma-2-9B-sft-SPIN-human-dataset-GGUF",
"mradermacher/L3.1-Magnusv2-10B-GGUF",
"mradermacher/Gemma-2-9B-sft-SPIN-self-GGUF",
"mradermacher/opencsg-starcoder2-3b-v0.1-GGUF",
"mradermacher/M7Yamshadowexperiment28_Experiment26Strangemerges_32-GGUF",
"mradermacher/J.O.S.I.E.3-Beta4-slerp-GGUF",
"mradermacher/MT1-Gen5-GP-gemma-2-S4S2-9B-GGUF",
"mradermacher/lora-phi2-alpaca-GGUF",
"mradermacher/MT1-Gen5-MU-gemma-2-S2Qv1-9B-GGUF",
"mradermacher/zephyr-7b-beta-sr-system-do-GGUF",
"mradermacher/LynxMed-GGUF",
"mradermacher/Fortitude-1.0-342M-GGUF",
"mradermacher/GPT-2-Cu_FT-V1-GGUF",
"mradermacher/stackexchange_blender-GGUF",
"mradermacher/stackexchange_chess-GGUF",
"mradermacher/stackexchange_cstheory-GGUF",
"mradermacher/LynxMed2.0-GGUF",
"mradermacher/Llama-3.2-3b-Me-GGUF",
"mradermacher/stackexchange_cseducators-GGUF",
"mradermacher/Llama-3.1-8B-sft-SPIN-Llama-3.1-70B-Instruct-GGUF",
"mradermacher/Llama-3.1-8B-sft-SPIN-gpt4o-GGUF",
"mradermacher/stackexchange_bioinformatics-GGUF",
"mradermacher/stackexchange_astronomy-GGUF",
"mradermacher/stackexchange_chemistry-GGUF",
"mradermacher/stackexchange_cooking-GGUF",
"mradermacher/II-Tulu-8B-DPO-v3-GGUF",
"mradermacher/Text-Scrutiny-LLM-GGUF",
"mradermacher/awelitoLLM-phi-4b-128k-GGUF",
"mradermacher/tongyi-model-v2.0-1b-th-GGUF",
"mradermacher/waka-0.5b-simpo-GGUF",
"mradermacher/KRONOS-8B-V7-GGUF",
"mradermacher/stackexchange_biology-GGUF",
"mradermacher/stackexchange_cogsci-GGUF",
"mradermacher/AetherGemma-GGUF",
"mradermacher/Gemma-2-9B-sft-SPIN-gpt4o-GGUF",
"mradermacher/Gemma-2-9B-sft-SPIN-Gemma-2-27B-GGUF",
"mradermacher/Gemma-The-Writer-Mighty-Sword-9B-GGUF",
"mradermacher/Gemma-2-9B-sft-SPIN-self-human-dataset-GGUF",
"mradermacher/MT1-Gen5-BMMIMU-gemma-2-9B-GGUF",
"mradermacher/MT1-Gen5-IF-gemma-2-S2DMv1-9B-GGUF",
"mradermacher/K2S3-Mistral-7b-v1.2-GGUF",
"mradermacher/Nexus-IKM-Mistral-7B-MLX-GGUF",
"mradermacher/YamshadowStrangemerges_32_Inex12Neural-GGUF",
"mradermacher/DialoGPT-medium-janeOrthros-GGUF",
"mradermacher/T3qm7xNeuralsirkrishna-7B-GGUF",
"mradermacher/L2-7b-Base-Guanaco-Uncensored-GGUF",
"mradermacher/MT1-Gen5-BB-gemma-2-S4Av4d-9B-GGUF",
# "mradermacher/Fortitude-GGUF",
# "mradermacher/rewrite-3B-tesla-GGUF",
# "mradermacher/QvQ-1B-Preview-GGUF",
# "mradermacher/Phi-3-mini-128k-instruct-ft-v2-GGUF",
# "mradermacher/martinLLM-phi-4b-128k-GGUF",
# "mradermacher/llama-3-2-3B-wame-curi-chat2-GGUF",
# "mradermacher/Nemotron-Picaro-fp16-GGUF",
# "mradermacher/ZEUS-8B-V10-GGUF",
# "mradermacher/Human-gemma-2b-GGUF",
# "mradermacher/KAErisepBeagleNuBuRPInfinWestLakev2-ENDLESSIreneRP-Neural-7B-slerp-GGUF",
# "mradermacher/Mistral-7B-v0.1-chat-ORPO-GGUF",
# "mradermacher/herbalism_v2-GGUF",
# "mradermacher/CriticalThinker-llama-3.1-8B-GGUF",
# "mradermacher/BilingualChildrenEmo-GGUF",
# "mradermacher/Mistral-7B-v0.3-sft-SPIN-self-human-dataset-GGUF",
# "mradermacher/FineLlama-3.2-3B-Instruct-ead-GGUF",
# "mradermacher/OrpoLlama-3.2-3B-GGUF",
# "mradermacher/maximusLLM-phi-4b-128k-GGUF",
# "mradermacher/Wisenut-3.1-8B-IC-SFT-GGUF",
# "mradermacher/Espresso-AI-GGUF",
# "mradermacher/Llama-3.1-8B-sft-SPIN-self-human-dataset-GGUF",
# "mradermacher/rewrite-7B-tesla-GGUF",
# "mradermacher/Tulu-MathLingo-8B-GGUF",
# "mradermacher/tongyi-model-v1.5-1b-enth-GGUF",
# "mradermacher/occiglot-7b-fr-en-instruct-hf-GGUF",
# "mradermacher/Gemma-2-9B-sft-SPIN-human-dataset-GGUF",
# "mradermacher/L3.1-Magnusv2-10B-GGUF",
# "mradermacher/Gemma-2-9B-sft-SPIN-self-GGUF",
# "mradermacher/opencsg-starcoder2-3b-v0.1-GGUF",
# "mradermacher/M7Yamshadowexperiment28_Experiment26Strangemerges_32-GGUF",
# "mradermacher/J.O.S.I.E.3-Beta4-slerp-GGUF",
# "mradermacher/MT1-Gen5-GP-gemma-2-S4S2-9B-GGUF",
# "mradermacher/lora-phi2-alpaca-GGUF",
# "mradermacher/MT1-Gen5-MU-gemma-2-S2Qv1-9B-GGUF",
# "mradermacher/zephyr-7b-beta-sr-system-do-GGUF",
# "mradermacher/LynxMed-GGUF",
# "mradermacher/Fortitude-1.0-342M-GGUF",
# "mradermacher/GPT-2-Cu_FT-V1-GGUF",
# "mradermacher/stackexchange_blender-GGUF",
# "mradermacher/stackexchange_chess-GGUF",
# "mradermacher/stackexchange_cstheory-GGUF",
# "mradermacher/LynxMed2.0-GGUF",
# "mradermacher/Llama-3.2-3b-Me-GGUF",
# "mradermacher/stackexchange_cseducators-GGUF",
# "mradermacher/Llama-3.1-8B-sft-SPIN-Llama-3.1-70B-Instruct-GGUF",
# "mradermacher/Llama-3.1-8B-sft-SPIN-gpt4o-GGUF",
# "mradermacher/stackexchange_bioinformatics-GGUF",
# "mradermacher/stackexchange_astronomy-GGUF",
# "mradermacher/stackexchange_chemistry-GGUF",
# "mradermacher/stackexchange_cooking-GGUF",
# "mradermacher/II-Tulu-8B-DPO-v3-GGUF",
# "mradermacher/Text-Scrutiny-LLM-GGUF",
# "mradermacher/awelitoLLM-phi-4b-128k-GGUF",
# "mradermacher/tongyi-model-v2.0-1b-th-GGUF",
# "mradermacher/waka-0.5b-simpo-GGUF",
# "mradermacher/KRONOS-8B-V7-GGUF",
# "mradermacher/stackexchange_biology-GGUF",
# "mradermacher/stackexchange_cogsci-GGUF",
# "mradermacher/AetherGemma-GGUF",
# "mradermacher/Gemma-2-9B-sft-SPIN-gpt4o-GGUF",
# "mradermacher/Gemma-2-9B-sft-SPIN-Gemma-2-27B-GGUF",
# "mradermacher/Gemma-The-Writer-Mighty-Sword-9B-GGUF",
# "mradermacher/Gemma-2-9B-sft-SPIN-self-human-dataset-GGUF",
# "mradermacher/MT1-Gen5-BMMIMU-gemma-2-9B-GGUF",
# "mradermacher/MT1-Gen5-IF-gemma-2-S2DMv1-9B-GGUF",
# "mradermacher/K2S3-Mistral-7b-v1.2-GGUF",
# "mradermacher/Nexus-IKM-Mistral-7B-MLX-GGUF",
# "mradermacher/YamshadowStrangemerges_32_Inex12Neural-GGUF",
# "mradermacher/DialoGPT-medium-janeOrthros-GGUF",
# "mradermacher/T3qm7xNeuralsirkrishna-7B-GGUF",
# "mradermacher/L2-7b-Base-Guanaco-Uncensored-GGUF",
# "mradermacher/MT1-Gen5-BB-gemma-2-S4Av4d-9B-GGUF",
# "mradermacher/MT1-Gen5-IMU-gemma-2-9B-GGUF",
# "mradermacher/MT1-Gen5-MAG-gemma-2-9B-GGUF",
# "mradermacher/MiniLLM-1.1B-WithWudao-GGUF",
# "mradermacher/saul-zephyr-7b-ties-GGUF",
# "mradermacher/social-llama-7b-alpha-v2-GGUF",
# "mradermacher/MT1-Gen5-gemma-2-9B-GGUF",
# "mradermacher/YamshadowStrangemerges_32_Experiment27Experiment28-GGUF",
# "mradermacher/OpenArabic_v0.3-GGUF",
# "mradermacher/T3qT3qm7-7B-GGUF",
# "mradermacher/Skywork-o1-Open-Llama-3.1-8B-GGUF",
# "mradermacher/T3qm7xpExperiment26-7B-GGUF",
# "mradermacher/MT1-Gen5-MM-gemma-2-Av4dS4-9B-GGUF",
# "mradermacher/saiga-7b-GGUF",
# "mradermacher/Experiment26Yamshadow_Experiment28Inex12-GGUF",
# "mradermacher/MasherAI-7B-v5-GGUF",
# "mradermacher/LadybirdPercival-7B-slerp-GGUF",
# "mradermacher/Neural-Dark-Waifu-GGUF",
# "mradermacher/M7Yamshadowexperiment28_Experiment28T3q-GGUF",
# "mradermacher/Mistral-7B-Instruct-v0.2-MultiTask-v7-GGUF",
# "mradermacher/saul-mistral-v0.1-7b-slerp-GGUF",
# "mradermacher/Alma-medical-GGUF",
# "mradermacher/ShadowYamshadow_Strangemerges_30Pastiche-GGUF",
# "mradermacher/WeniGPT-Agents-Mistral-1.0.7-SFT-merged-GGUF",
# "mradermacher/YamshadowInex12_YamExperiment28-GGUF",
# "mradermacher/YamshadowInex12_Experiment28Experiment26-GGUF",
# "mradermacher/Llama-3-8B-Instruct-Physics-5k-Scar-GGUF",
# "mradermacher/NeuralsirkrishnaShadow_Strangemerges_32Ogno-GGUF",
# "mradermacher/NeuralsirkrishnaShadow_Inex12Yam-GGUF",
# "mradermacher/llama-2-7b-allyarc-v2.3-GGUF",
# "mradermacher/T3qm7xNeuralsirkrishna_Experiment24Shadow-GGUF",
# "mradermacher/MetaMathOctopus-MAPO-DPO-7B-GGUF",
# "mradermacher/tinyllama-assamese-v0.1-GGUF",
# "mradermacher/Satoshi-7B-GGUF",
# "mradermacher/Mistral-7-from-Mixtral-8x7B-v0.1-GGUF",
# "mradermacher/ErisepBeagleNuBuRPInfinWestLakev2-ENDLESSIreneRP-Neural-7B-slerp-GGUF",
# "mradermacher/ko-gemma-1.1-7b-GGUF",
# "mradermacher/TinySolar-248m-4k-code-instruct-GGUF",
# "mradermacher/karasu-1.1B-slerp_reverse-GGUF",
# "mradermacher/Swallow-MS-7b-v0.1-ChatSkill-LAB-Evo-v0.12-GGUF",
# "mradermacher/TowerInstruct-7B-v0.2-sr-system-do-GGUF",
# "mradermacher/BioMistral-MedicalQA-FT-GGUF",
# "mradermacher/SonyaKAErisepBeagleNuBuRPInfinWestLakev2-ENDLESSIreneRP-Neural-7B-slerp-GGUF",
# "mradermacher/VerwaltungsAnthologie_Disco_simbad_7B-GGUF",
# "mradermacher/Eris_PrimeV4.1-Remix-7B-GGUF",
# "mradermacher/JSL-MedMNX-7B-v2.0-GGUF",
# "mradermacher/YuisekinAI-mistral-0.3B-GGUF",
# "mradermacher/selfbiorag-7b-dpo-full-wo-kqa_silver_wogold-ep3-GGUF",
# "mradermacher/Experiment26Yamshadow_PasticheNeuralsirkrishna-GGUF",
# "mradermacher/Yamshadowexperiment28M70.81-0.36-0.63-1.0-0.79-0.74-7B-GGUF",
# "mradermacher/KUJIRA_Stock_1-GGUF",
# "mradermacher/llama3-tamil-finetuned-base-v1-GGUF",
# "mradermacher/occiglot-7b-de-es-fr-it-en-instruct-dareties-GGUF",
# "mradermacher/DAML4_TLDR_Generator-GGUF",
# "mradermacher/InfinityFlammenNoodleRP-7b-GGUF",
# "mradermacher/Jason1903_SLERP-GGUF",
# "mradermacher/JP-EN-Translator-2K-steps-7B-GGUF",
# "mradermacher/YamshadowStrangemerges_32_AlloyingotneoyExperiment28-GGUF",
"mradermacher/MT1-Gen5-IMU-gemma-2-9B-GGUF",
"mradermacher/MT1-Gen5-MAG-gemma-2-9B-GGUF",
"mradermacher/MiniLLM-1.1B-WithWudao-GGUF",
"mradermacher/saul-zephyr-7b-ties-GGUF",
"mradermacher/social-llama-7b-alpha-v2-GGUF",
"mradermacher/MT1-Gen5-gemma-2-9B-GGUF",
"mradermacher/YamshadowStrangemerges_32_Experiment27Experiment28-GGUF",
"mradermacher/OpenArabic_v0.3-GGUF",
"mradermacher/T3qT3qm7-7B-GGUF",
"mradermacher/Skywork-o1-Open-Llama-3.1-8B-GGUF",
"mradermacher/T3qm7xpExperiment26-7B-GGUF",
"mradermacher/MT1-Gen5-MM-gemma-2-Av4dS4-9B-GGUF",
"mradermacher/saiga-7b-GGUF",
"mradermacher/Experiment26Yamshadow_Experiment28Inex12-GGUF",
"mradermacher/MasherAI-7B-v5-GGUF",
"mradermacher/LadybirdPercival-7B-slerp-GGUF",
"mradermacher/Neural-Dark-Waifu-GGUF",
"mradermacher/M7Yamshadowexperiment28_Experiment28T3q-GGUF",
"mradermacher/Mistral-7B-Instruct-v0.2-MultiTask-v7-GGUF",
"mradermacher/saul-mistral-v0.1-7b-slerp-GGUF",
"mradermacher/Alma-medical-GGUF",
"mradermacher/ShadowYamshadow_Strangemerges_30Pastiche-GGUF",
"mradermacher/WeniGPT-Agents-Mistral-1.0.7-SFT-merged-GGUF",
"mradermacher/YamshadowInex12_YamExperiment28-GGUF",
"mradermacher/YamshadowInex12_Experiment28Experiment26-GGUF",
"mradermacher/Llama-3-8B-Instruct-Physics-5k-Scar-GGUF",
"mradermacher/NeuralsirkrishnaShadow_Strangemerges_32Ogno-GGUF",
"mradermacher/NeuralsirkrishnaShadow_Inex12Yam-GGUF",
"mradermacher/llama-2-7b-allyarc-v2.3-GGUF",
"mradermacher/T3qm7xNeuralsirkrishna_Experiment24Shadow-GGUF",
"mradermacher/MetaMathOctopus-MAPO-DPO-7B-GGUF",
"mradermacher/tinyllama-assamese-v0.1-GGUF",
"mradermacher/Satoshi-7B-GGUF",
"mradermacher/Mistral-7-from-Mixtral-8x7B-v0.1-GGUF",
"mradermacher/ErisepBeagleNuBuRPInfinWestLakev2-ENDLESSIreneRP-Neural-7B-slerp-GGUF",
"mradermacher/ko-gemma-1.1-7b-GGUF",
"mradermacher/TinySolar-248m-4k-code-instruct-GGUF",
"mradermacher/karasu-1.1B-slerp_reverse-GGUF",
"mradermacher/Swallow-MS-7b-v0.1-ChatSkill-LAB-Evo-v0.12-GGUF",
"mradermacher/TowerInstruct-7B-v0.2-sr-system-do-GGUF",
"mradermacher/BioMistral-MedicalQA-FT-GGUF",
"mradermacher/SonyaKAErisepBeagleNuBuRPInfinWestLakev2-ENDLESSIreneRP-Neural-7B-slerp-GGUF",
"mradermacher/VerwaltungsAnthologie_Disco_simbad_7B-GGUF",
"mradermacher/Eris_PrimeV4.1-Remix-7B-GGUF",
"mradermacher/JSL-MedMNX-7B-v2.0-GGUF",
"mradermacher/YuisekinAI-mistral-0.3B-GGUF",
"mradermacher/selfbiorag-7b-dpo-full-wo-kqa_silver_wogold-ep3-GGUF",
"mradermacher/Experiment26Yamshadow_PasticheNeuralsirkrishna-GGUF",
"mradermacher/Yamshadowexperiment28M70.81-0.36-0.63-1.0-0.79-0.74-7B-GGUF",
"mradermacher/KUJIRA_Stock_1-GGUF",
"mradermacher/llama3-tamil-finetuned-base-v1-GGUF",
"mradermacher/occiglot-7b-de-es-fr-it-en-instruct-dareties-GGUF",
"mradermacher/DAML4_TLDR_Generator-GGUF",
"mradermacher/InfinityFlammenNoodleRP-7b-GGUF",
"mradermacher/Jason1903_SLERP-GGUF",
"mradermacher/JP-EN-Translator-2K-steps-7B-GGUF",
"mradermacher/YamshadowStrangemerges_32_AlloyingotneoyExperiment28-GGUF",
"mradermacher/llama-2-7b-ft-guanaco-v2-GGUF",
"mradermacher/Experiment26Yam_PasticheAlloyingotneoy-GGUF",
"mradermacher/Experiment26Neuralsirkrishna_Experiment28Inex12-GGUF",
@@ -1355,7 +1360,7 @@ ALL_MODEL_IDS = [
"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,已经交了
#### 提前占位依然可以交 b3\b4\mthread,已经交了占位提交
@@ -2616,21 +2621,25 @@ def get_model_filename(model_id: str) -> str:
return base_name
# ══════════════════════════════════════════════════════════
# 登录获取 token(失败时回退到预设 AUTH_TOKEN)
# 登录获取有效的 zhoushasha Token
# ══════════════════════════════════════════════════════════
def login() -> str:
payload = {"userAccount": USER_ACCOUNT, "userPassword": USER_PASSWORD}
print("[login] 正在登录...", flush=True)
try:
resp = requests.post(BASE_URL + LOGIN_ENDPOINT, headers=HEADERS, json=payload, timeout=15)
data = resp.json()
if resp.status_code == 200 and data.get("code") == 0:
print("[login] 登录成功", flush=True)
return data["data"]["token"]
print(f"[login] 登录失败: {data.get('message')},回退使用预设 Token", flush=True)
except Exception as e:
print(f"[login] 登录异常: {e},回退使用预设 Token", flush=True)
return AUTH_TOKEN
resp = requests.post(BASE_URL + LOGIN_ENDPOINT, headers=HEADERS, json=payload, timeout=15)
resp.raise_for_status()
data = resp.json()
token = (data.get("data") or {}).get("token")
if data.get("code") != 0 or not token:
raise RuntimeError(f"zhoushasha 登录失败: {data.get('message')}")
encoded_claims = token.split(".")[1]
claims = json.loads(base64.urlsafe_b64decode(encoded_claims + "=" * (-len(encoded_claims) % 4)))
if claims.get("userAccount") != "zhoushasha":
raise RuntimeError("登录返回的 Token 不属于 zhoushasha,停止下载提交")
if int(claims.get("exp") or 0) <= time.time():
raise RuntimeError("登录返回的 Token 已过期,停止下载提交")
print("[login] zhoushasha 登录成功,Token 有效", flush=True)
return token
# ══════════════════════════════════════════════════════════
# 创建单个模型的下载任务