1 Commits

175
main.py
View File

@@ -15,7 +15,7 @@ import signal
import threading import threading
from datetime import datetime from datetime import datetime
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
from typing import Set from typing import List, Set, Tuple
import requests import requests
@@ -36,11 +36,61 @@ USER_PASSWORD = "ganshenme0"
# 通过 curl -X POST https://modelhub.org.cn/adminApi/user/login 获取后填入(登录失败时的回退) # 通过 curl -X POST https://modelhub.org.cn/adminApi/user/login 获取后填入(登录失败时的回退)
AUTH_TOKEN = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyQWNjb3VudCI6Inpob3VzaGFzaGEiLCJpZCI6MTQsInVzZXJSb2xlIjoibGVhZGVyYm9hcmQiLCJleHAiOjE3ODg3NTE1NzYsImlhdCI6MTc4ODE0Njc3Nn0._tPW9hFKBcpiYP-G7B8fhtTiJO369HPI7_r62AvGAvA" AUTH_TOKEN = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyQWNjb3VudCI6Inpob3VzaGFzaGEiLCJpZCI6MTQsInVzZXJSb2xlIjoibGVhZGVyYm9hcmQiLCJleHAiOjE3ODg3NTE1NzYsImlhdCI6MTc4ODE0Njc3Nn0._tPW9hFKBcpiYP-G7B8fhtTiJO369HPI7_r62AvGAvA"
# hygon_k100-ai 验证任务走机制Bxc-Token提交账号 = 账号A不再用 zhoushasha 提交 # hygon_k100-ai 验证任务走机制Bxc-Token固定用 l11223344 提交
# TODO: 填入账号A的真实 xc-Token 后再部署
HYGON_SUBMIT_ACCOUNT = "l11223344" HYGON_SUBMIT_ACCOUNT = "l11223344"
HYGON_XC_TOKEN = "e1c0db2959e5411f9342c8550b03f6e9" HYGON_XC_TOKEN = "e1c0db2959e5411f9342c8550b03f6e9"
# ── bi150Iluvatar_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" CONTEST_API_TOKEN = "ef1ef82f3c9efee413d602345fbe224d"
HF_TOKEN = "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" HF_TOKEN = "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"
CONTRIBUTORS = "zhoushasha" CONTRIBUTORS = "zhoushasha"
@@ -387,41 +437,42 @@ ALL_MODEL_IDS = [
# "mradermacher/InfiniteBuRP_7B-GGUF", # "mradermacher/InfiniteBuRP_7B-GGUF",
# "mradermacher/OpenChat-3.5-7B-Solar-GGUF", # "mradermacher/OpenChat-3.5-7B-Solar-GGUF",
"mradermacher/Qra-1b-GGUF", # "mradermacher/Qra-1b-GGUF",
"mradermacher/Qra-7b-GGUF", # "mradermacher/Qra-7b-GGUF",
"mradermacher/Nusantara-4b-Indo-Chat-GGUF", # "mradermacher/Nusantara-4b-Indo-Chat-GGUF",
"mradermacher/Thespis-Balanced-7b-v1-GGUF", # "mradermacher/Thespis-Balanced-7b-v1-GGUF",
"mradermacher/Experiment28Experiment26-7B-GGUF", # "mradermacher/Experiment28Experiment26-7B-GGUF",
"mradermacher/CalmeInex12-7B-GGUF", # "mradermacher/CalmeInex12-7B-GGUF",
"mradermacher/Lelanta-lake-7b-GGUF", # "mradermacher/Lelanta-lake-7b-GGUF",
"mradermacher/Inex12Yamshadow-7B-GGUF", # "mradermacher/Inex12Yamshadow-7B-GGUF",
"mradermacher/mistral-7b-zephyr-sft-GGUF", # "mradermacher/mistral-7b-zephyr-sft-GGUF",
"mradermacher/flammen9-mistral-7B-GGUF", # "mradermacher/flammen9-mistral-7B-GGUF",
"mradermacher/NeuralExperiment26-7B-GGUF", # "mradermacher/NeuralExperiment26-7B-GGUF",
"mradermacher/flammen9X-mistral-7B-GGUF", # "mradermacher/flammen9X-mistral-7B-GGUF",
"mradermacher/Cloudversia-Thor-7B-GGUF", # "mradermacher/Cloudversia-Thor-7B-GGUF",
"mradermacher/supermario_v4-GGUF", # "mradermacher/supermario_v4-GGUF",
"mradermacher/XuanYuan-6B-GGUF", # "mradermacher/XuanYuan-6B-GGUF",
"mradermacher/NeuralsirkrishnaInex12-7B-GGUF", # "mradermacher/NeuralsirkrishnaInex12-7B-GGUF",
"mradermacher/Swahili-Mistral-Instruct-v2-GGUF", # "mradermacher/Swahili-Mistral-Instruct-v2-GGUF",
"mradermacher/Prima-LelantaclesV7-experimentalv2-7b-GGUF", # "mradermacher/Prima-LelantaclesV7-experimentalv2-7b-GGUF",
"mradermacher/HarmBench-Mistral-7b-val-cls-GGUF", # "mradermacher/HarmBench-Mistral-7b-val-cls-GGUF",
"mradermacher/merlin1.4-GGUF", # "mradermacher/merlin1.4-GGUF",
"mradermacher/merlin1.5-GGUF", # "mradermacher/merlin1.5-GGUF",
"mradermacher/Franken-Mistral-Merlinite-Maid-GGUF", # "mradermacher/Franken-Mistral-Merlinite-Maid-GGUF",
"mradermacher/mergekit-della_linear-sxmadrj-GGUF", # "mradermacher/mergekit-della_linear-sxmadrj-GGUF",
"mradermacher/FuseChat-Qwen-2.5-7B-Instruct-GGUF", # "mradermacher/FuseChat-Qwen-2.5-7B-Instruct-GGUF",
"mradermacher/NeuralsirkrishnaExperiment28-7B-GGUF", # "mradermacher/NeuralsirkrishnaExperiment28-7B-GGUF",
"mradermacher/Paradigm_DPO-GGUF", # "mradermacher/Paradigm_DPO-GGUF",
"mradermacher/Strangemerges_32Alloyingotneoy-7B-GGUF", # "mradermacher/Strangemerges_32Alloyingotneoy-7B-GGUF",
"mradermacher/FuseQwQen-7B-GGUF", # "mradermacher/FuseQwQen-7B-GGUF",
"mradermacher/Falcon3-7B-Instruct-abliterated-GGUF", # "mradermacher/Falcon3-7B-Instruct-abliterated-GGUF",
"mradermacher/Article-Llama-3.2-1B-GGUF", # "mradermacher/Article-Llama-3.2-1B-GGUF",
"mradermacher/Falcon3-10B-Instruct-abliterated-GGUF", # "mradermacher/Falcon3-10B-Instruct-abliterated-GGUF",
"mradermacher/AshishGPT-GGUF", # "mradermacher/AshishGPT-GGUF",
"mradermacher/FnFLlama-3.1-8B1-GGUF", # "mradermacher/FnFLlama-3.1-8B1-GGUF",
"mradermacher/Meta-Llama-3.1-8B-Instruct-TIES-GGUF", # "mradermacher/Meta-Llama-3.1-8B-Instruct-TIES-GGUF",
"mradermacher/Llama-2-7b-sft-SPIN-gpt4o-GGUF", # "mradermacher/Llama-2-7b-sft-SPIN-gpt4o-GGUF",
"mradermacher/Mistral-7B-v0.1-sft-SPIN-Mistral-8x7B-Instruct-v0.1-GGUF", "mradermacher/Mistral-7B-v0.1-sft-SPIN-Mistral-8x7B-Instruct-v0.1-GGUF",
"mradermacher/TaxoLumimaid-v0.2-8B-GGUF", "mradermacher/TaxoLumimaid-v0.2-8B-GGUF",
"mradermacher/Mistral-7B-v0.1-sft-SPIN-gpt4o-GGUF", "mradermacher/Mistral-7B-v0.1-sft-SPIN-gpt4o-GGUF",
@@ -2568,8 +2619,8 @@ ref_config:
# ══════════════════════════════════════════════════════════ # ══════════════════════════════════════════════════════════
# 提交单个模型的测试任务 bi150 # 提交单个模型的测试任务 bi150
# ══════════════════════════════════════════════════════════ # ══════════════════════════════════════════════════════════
def submit_test_task_bi150(token: str, model_id: str) -> bool: def submit_test_task_bi150(model_id: str) -> bool:
auth_headers = {**HEADERS, "Authorization": f"Bearer {token}"} # auth_headers = {**HEADERS, "Authorization": f"Bearer {token}"}
model_filename = get_model_filename(model_id) model_filename = get_model_filename(model_id)
gpu_type = "Iluvatar_bi-150" gpu_type = "Iluvatar_bi-150"
config_content = f"""docker_image: git.modelhub.org.cn:9443/enginex-iluvatar/iluvatar-llama.cpp:b7516-bi150 config_content = f"""docker_image: git.modelhub.org.cn:9443/enginex-iluvatar/iluvatar-llama.cpp:b7516-bi150
@@ -2589,36 +2640,32 @@ ref_config:
values: 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'] 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 = { account, xc_token = _next_bi150_account()
"contestApiToken": CONTEST_API_TOKEN, headers = {"Content-Type": "application/json", "xc-Token": xc_token}
"contributors": CONTRIBUTORS, payload = {
"gpuTypes": [gpu_type], "configParams": config_content,
"framework": "llamacpp",
"modelAddress": f"https://huggingface.co/{model_id}",
"targetGpu": gpu_type,
"taskType": TASK_TYPE, "taskType": TASK_TYPE,
"modelId": model_id, "strategyId": STRATEGY_ID, # 平台要求;若接口不支持该字段会被忽略
"strategyId": STRATEGY_ID, # 平台要求
"submissionConfig": [{
"config": config_content,
"gpuType": gpu_type,
"taskType": TASK_TYPE
}]
} }
print(f"📤 提交测试任务 (bi150): {model_id}", flush=True) print(f"📤 提交测试任务 (bi150, 机制B, 账号={account}): {model_id}", flush=True)
try: 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: if resp.status_code == 200:
result = resp.json() result = resp.json()
if result.get("code") == 0: if result.get("code") == 0:
task_id = result.get("data", {}).get("taskId") print(f"✅ 测试任务提交成功! {model_id} (账号={account})", flush=True)
print(f"✅ 测试任务提交成功! Task ID: {task_id}", flush=True)
return True return True
else: else:
print(f"❌ 测试任务业务错误: {result.get('message')}", flush=True) print(f"❌ 测试任务业务错误 (账号={account}): {result.get('message')}", flush=True)
return False return False
else: else:
print(f"❌ 测试任务 HTTP 错误: {resp.status_code} - {resp.text}", flush=True) print(f"❌ 测试任务 HTTP 错误 (账号={account}): {resp.status_code} - {resp.text}", flush=True)
return False return False
except Exception as e: except Exception as e:
print(f"💥 提交测试任务异常 ({model_id}): {e}", flush=True) print(f"💥 提交测试任务异常 ({model_id}, 账号={account}): {e}", flush=True)
return False return False
# ══════════════════════════════════════════════════════════ # ══════════════════════════════════════════════════════════
@@ -2661,12 +2708,12 @@ def _run_worker():
_state["submit_failed"] += 1 _state["submit_failed"] += 1
print(f"⚠️ {model_id} hygon 验证任务提交失败", flush=True) print(f"⚠️ {model_id} hygon 验证任务提交失败", flush=True)
# if submit_test_task_bi150(token, model_id): if submit_test_task_bi150(model_id):
# _state["submitted"] += 1 _state["submitted"] += 1
# print(f"🧪 已为 {model_id} 提交 bi150 验证任务", flush=True) print(f"🧪 已为 {model_id} 提交 bi150 验证任务", flush=True)
# else: else:
# _state["submit_failed"] += 1 _state["submit_failed"] += 1
# print(f"⚠️ {model_id} bi150 验证任务提交失败", flush=True) print(f"⚠️ {model_id} bi150 验证任务提交失败", flush=True)
else: else:
_state["download_failed"] += 1 _state["download_failed"] += 1