diff --git a/main.py b/main.py index 7b0dfce..aa47312 100644 --- a/main.py +++ b/main.py @@ -15,7 +15,7 @@ import signal import threading from datetime import datetime from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer -from typing import Set +from typing import List, Set, Tuple import requests @@ -36,11 +36,61 @@ USER_PASSWORD = "ganshenme0" # 通过 curl -X POST https://modelhub.org.cn/adminApi/user/login 获取后填入(登录失败时的回退) AUTH_TOKEN = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyQWNjb3VudCI6Inpob3VzaGFzaGEiLCJpZCI6MTQsInVzZXJSb2xlIjoibGVhZGVyYm9hcmQiLCJleHAiOjE3ODg3NTE1NzYsImlhdCI6MTc4ODE0Njc3Nn0._tPW9hFKBcpiYP-G7B8fhtTiJO369HPI7_r62AvGAvA" -# hygon_k100-ai 验证任务改走机制B(xc-Token),提交账号 = 账号A,不再用 zhoushasha 提交 -# TODO: 填入账号A的真实 xc-Token 后再部署 +# hygon_k100-ai 验证任务走机制B(xc-Token),固定用 l11223344 提交 HYGON_SUBMIT_ACCOUNT = "l11223344" HYGON_XC_TOKEN = "e1c0db2959e5411f9342c8550b03f6e9" +# ── bi150(Iluvatar_bi-150)验证任务也走机制B ────────────────── +# 规则:下面这批账号每个只提交 1 个模型(按顺序,一人一个); +# 这批用完之后,剩下所有模型统一回退到 HYGON_SUBMIT_ACCOUNT(l11223344) 提交。 +BI150_ACCOUNTS: List[Tuple[str, str]] = [ + ("finndal", "ba1e2a3b12ca4bb6b18089fcdb862959"), + ("glenvin", "1feb350de5204246bacc008e54112608"), + ("noel777", "27ddbc8b7335459c8842092b5e98ae36"), + ("jane789", "7f8ad263b3a040dca63e24c1548a8b4b"), + ("clarknin", "6733f07156144de097990a6466c45d99"), + ("jake99", "a6bbb222caaa409aad6dddf3f34361b2"), + ("grant789", "9c3c737960cb47e9b46760f87b47828a"), + ("peteval", "d2c23ffa845e4212a68aef2e0eb15499"), + ("dij11", "93d8e172368147358e73c46b63d2d39e"), + ("vera66", "ba1e60d8914b4900be129e22150d58e4"), + ("sofiayoung", "ae732d8eacd94ab6aeb9482607f2b33a"), + ("emily709", "a379474951ab459e824890d37bf4afd3"), + ("scarlett432", "239b9b91a074481e8519815ba8f505b8"), + ("amelia_jackson", "46ca824f90c741ddb1c7bb1b2f356fe1"), + ("isabella_perez", "79f0510ad86a4cb898e01dae820bc7eb"), + ("ny22", "3b65c17808514d6ba831758ab5fc22b6"), + ("phil888", "b716d73b5aed49f9ab6d4fb8763bfa69"), + ("stan123", "e615d010ab304719a1046e9e30a84f9b"), + ("willzac", "bdcc3394d49d41e799845957e27fac7c"), + ("yq888", "106c8dc9c2bd4458a172ce98acb12e7f"), + ("neilgle", "e4b2d90652e64aba8a071b0cca187091"), + ("sara520", "6a9dfdd2b30b45d9ab8010076d4b7025"), + ("kateott", "01f5d973fe954e09b65628a6a7b16d14"), + ("elc77", "a4648cde05e5417a81e3b63972549480"), + + + +] + +# 已经用掉的 bi150 账号数量(游标)。每成功「尝试」一个账号就 +1,用完即回退 l11223344。 +_bi150_used = 0 +_bi150_lock = threading.Lock() + + +def _next_bi150_account() -> Tuple[str, str]: + """ + 取下一个 bi150 提交账号。 + 列表里每个账号只用一次;用完之后一律返回 l11223344。 + """ + global _bi150_used + with _bi150_lock: + if _bi150_used < len(BI150_ACCOUNTS): + acct = BI150_ACCOUNTS[_bi150_used] + _bi150_used += 1 + return acct + return (HYGON_SUBMIT_ACCOUNT, HYGON_XC_TOKEN) + CONTEST_API_TOKEN = "ef1ef82f3c9efee413d602345fbe224d" HF_TOKEN = "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" CONTRIBUTORS = "zhoushasha" @@ -387,41 +437,42 @@ ALL_MODEL_IDS = [ # "mradermacher/InfiniteBuRP_7B-GGUF", # "mradermacher/OpenChat-3.5-7B-Solar-GGUF", - "mradermacher/Qra-1b-GGUF", - "mradermacher/Qra-7b-GGUF", - "mradermacher/Nusantara-4b-Indo-Chat-GGUF", - "mradermacher/Thespis-Balanced-7b-v1-GGUF", - "mradermacher/Experiment28Experiment26-7B-GGUF", - "mradermacher/CalmeInex12-7B-GGUF", - "mradermacher/Lelanta-lake-7b-GGUF", - "mradermacher/Inex12Yamshadow-7B-GGUF", - "mradermacher/mistral-7b-zephyr-sft-GGUF", - "mradermacher/flammen9-mistral-7B-GGUF", - "mradermacher/NeuralExperiment26-7B-GGUF", - "mradermacher/flammen9X-mistral-7B-GGUF", - "mradermacher/Cloudversia-Thor-7B-GGUF", - "mradermacher/supermario_v4-GGUF", - "mradermacher/XuanYuan-6B-GGUF", - "mradermacher/NeuralsirkrishnaInex12-7B-GGUF", - "mradermacher/Swahili-Mistral-Instruct-v2-GGUF", - "mradermacher/Prima-LelantaclesV7-experimentalv2-7b-GGUF", - "mradermacher/HarmBench-Mistral-7b-val-cls-GGUF", - "mradermacher/merlin1.4-GGUF", - "mradermacher/merlin1.5-GGUF", - "mradermacher/Franken-Mistral-Merlinite-Maid-GGUF", - "mradermacher/mergekit-della_linear-sxmadrj-GGUF", - "mradermacher/FuseChat-Qwen-2.5-7B-Instruct-GGUF", - "mradermacher/NeuralsirkrishnaExperiment28-7B-GGUF", - "mradermacher/Paradigm_DPO-GGUF", - "mradermacher/Strangemerges_32Alloyingotneoy-7B-GGUF", - "mradermacher/FuseQwQen-7B-GGUF", - "mradermacher/Falcon3-7B-Instruct-abliterated-GGUF", - "mradermacher/Article-Llama-3.2-1B-GGUF", - "mradermacher/Falcon3-10B-Instruct-abliterated-GGUF", - "mradermacher/AshishGPT-GGUF", - "mradermacher/FnFLlama-3.1-8B1-GGUF", - "mradermacher/Meta-Llama-3.1-8B-Instruct-TIES-GGUF", - "mradermacher/Llama-2-7b-sft-SPIN-gpt4o-GGUF", + # "mradermacher/Qra-1b-GGUF", + # "mradermacher/Qra-7b-GGUF", + # "mradermacher/Nusantara-4b-Indo-Chat-GGUF", + # "mradermacher/Thespis-Balanced-7b-v1-GGUF", + # "mradermacher/Experiment28Experiment26-7B-GGUF", + # "mradermacher/CalmeInex12-7B-GGUF", + # "mradermacher/Lelanta-lake-7b-GGUF", + # "mradermacher/Inex12Yamshadow-7B-GGUF", + # "mradermacher/mistral-7b-zephyr-sft-GGUF", + # "mradermacher/flammen9-mistral-7B-GGUF", + # "mradermacher/NeuralExperiment26-7B-GGUF", + # "mradermacher/flammen9X-mistral-7B-GGUF", + # "mradermacher/Cloudversia-Thor-7B-GGUF", + # "mradermacher/supermario_v4-GGUF", + # "mradermacher/XuanYuan-6B-GGUF", + # "mradermacher/NeuralsirkrishnaInex12-7B-GGUF", + # "mradermacher/Swahili-Mistral-Instruct-v2-GGUF", + # "mradermacher/Prima-LelantaclesV7-experimentalv2-7b-GGUF", + # "mradermacher/HarmBench-Mistral-7b-val-cls-GGUF", + # "mradermacher/merlin1.4-GGUF", + # "mradermacher/merlin1.5-GGUF", + # "mradermacher/Franken-Mistral-Merlinite-Maid-GGUF", + # "mradermacher/mergekit-della_linear-sxmadrj-GGUF", + # "mradermacher/FuseChat-Qwen-2.5-7B-Instruct-GGUF", + # "mradermacher/NeuralsirkrishnaExperiment28-7B-GGUF", + # "mradermacher/Paradigm_DPO-GGUF", + # "mradermacher/Strangemerges_32Alloyingotneoy-7B-GGUF", + # "mradermacher/FuseQwQen-7B-GGUF", + # "mradermacher/Falcon3-7B-Instruct-abliterated-GGUF", + # "mradermacher/Article-Llama-3.2-1B-GGUF", + # "mradermacher/Falcon3-10B-Instruct-abliterated-GGUF", + # "mradermacher/AshishGPT-GGUF", + # "mradermacher/FnFLlama-3.1-8B1-GGUF", + # "mradermacher/Meta-Llama-3.1-8B-Instruct-TIES-GGUF", + # "mradermacher/Llama-2-7b-sft-SPIN-gpt4o-GGUF", + "mradermacher/Mistral-7B-v0.1-sft-SPIN-Mistral-8x7B-Instruct-v0.1-GGUF", "mradermacher/TaxoLumimaid-v0.2-8B-GGUF", "mradermacher/Mistral-7B-v0.1-sft-SPIN-gpt4o-GGUF", @@ -2568,8 +2619,8 @@ ref_config: # ══════════════════════════════════════════════════════════ # 提交单个模型的测试任务 bi150 # ══════════════════════════════════════════════════════════ -def submit_test_task_bi150(token: str, model_id: str) -> bool: - auth_headers = {**HEADERS, "Authorization": f"Bearer {token}"} +def submit_test_task_bi150(model_id: str) -> bool: + # auth_headers = {**HEADERS, "Authorization": f"Bearer {token}"} model_filename = get_model_filename(model_id) gpu_type = "Iluvatar_bi-150" config_content = f"""docker_image: git.modelhub.org.cn:9443/enginex-iluvatar/iluvatar-llama.cpp:b7516-bi150 @@ -2589,36 +2640,32 @@ ref_config: values: command: ['/workspace/llama.cpp/build/bin/llama-server','--model', '/model/{model_filename}', '--alias', 'llm', '--threads', '20','--n-gpu-layers','128', '--ctx-size', '4096', '--host', '0.0.0.0', '--port', '8000', '--jinja', '--flash-attn', 'off'] """ - task_data = { - "contestApiToken": CONTEST_API_TOKEN, - "contributors": CONTRIBUTORS, - "gpuTypes": [gpu_type], + account, xc_token = _next_bi150_account() + headers = {"Content-Type": "application/json", "xc-Token": xc_token} + payload = { + "configParams": config_content, + "framework": "llamacpp", + "modelAddress": f"https://huggingface.co/{model_id}", + "targetGpu": gpu_type, "taskType": TASK_TYPE, - "modelId": model_id, - "strategyId": STRATEGY_ID, # 平台要求 - "submissionConfig": [{ - "config": config_content, - "gpuType": gpu_type, - "taskType": TASK_TYPE - }] + "strategyId": STRATEGY_ID, # 平台要求;若接口不支持该字段会被忽略 } - print(f"📤 提交测试任务 (bi150): {model_id}", flush=True) + print(f"📤 提交测试任务 (bi150, 机制B, 账号={account}): {model_id}", flush=True) try: - resp = requests.post(BASE_URL + SUBMIT_TEST_TASK_ENDPOINT, json=task_data, headers=auth_headers, timeout=15) + resp = requests.post(BASE_URL + ADD_TASK_ENDPOINT, headers=headers, json=payload, timeout=30) if resp.status_code == 200: result = resp.json() if result.get("code") == 0: - task_id = result.get("data", {}).get("taskId") - print(f"✅ 测试任务提交成功! Task ID: {task_id}", flush=True) + print(f"✅ 测试任务提交成功! {model_id} (账号={account})", flush=True) return True else: - print(f"❌ 测试任务业务错误: {result.get('message')}", flush=True) + print(f"❌ 测试任务业务错误 (账号={account}): {result.get('message')}", flush=True) return False else: - print(f"❌ 测试任务 HTTP 错误: {resp.status_code} - {resp.text}", flush=True) + print(f"❌ 测试任务 HTTP 错误 (账号={account}): {resp.status_code} - {resp.text}", flush=True) return False except Exception as e: - print(f"💥 提交测试任务异常 ({model_id}): {e}", flush=True) + print(f"💥 提交测试任务异常 ({model_id}, 账号={account}): {e}", flush=True) return False # ══════════════════════════════════════════════════════════ @@ -2661,12 +2708,12 @@ def _run_worker(): _state["submit_failed"] += 1 print(f"⚠️ {model_id} hygon 验证任务提交失败", flush=True) - # if submit_test_task_bi150(token, model_id): - # _state["submitted"] += 1 - # print(f"🧪 已为 {model_id} 提交 bi150 验证任务", flush=True) - # else: - # _state["submit_failed"] += 1 - # print(f"⚠️ {model_id} bi150 验证任务提交失败", flush=True) + if submit_test_task_bi150(model_id): + _state["submitted"] += 1 + print(f"🧪 已为 {model_id} 提交 bi150 验证任务", flush=True) + else: + _state["submit_failed"] += 1 + print(f"⚠️ {model_id} bi150 验证任务提交失败", flush=True) else: _state["download_failed"] += 1