""" xc_validation_strategy — 主入口 启动后执行一次模型验证任务批量提交,之后保持 HTTP 服务存活。 同时暴露 /health(K8s 探活)和 /status(运行状态)。 """ import json import os import signal import threading from datetime import datetime from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer from typing import List, Tuple import requests # ══════════════════════════════════════════════════════════ # 配置(全部从环境变量读取,不硬编码敏感信息) # ══════════════════════════════════════════════════════════ BASE_URL = os.environ.get("BASE_URL", "https://modelhub.org.cn") SUBMIT_ENDPOINT = "/adminApi/async/task/create-contest-task" # 通过 curl -X POST https://modelhub.org.cn/adminApi/user/login 获取后填入 AUTH_TOKEN = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyQWNjb3VudCI6Inpob3VzaGFzaGEiLCJpZCI6MTQsInVzZXJSb2xlIjoibGVhZGVyYm9hcmQiLCJleHAiOjE3ODQ1NDc1NDYsImlhdCI6MTc4Mzk0Mjc0Nn0.ZcOqcrfI22LPi4mGMnt164nZGhi61ZxtJGYsoO7fZdM" CONTEST_API_TOKEN = "ef1ef82f3c9efee413d602345fbe224d" CONTRIBUTORS = "zhoushasha" GPU_TYPE = "ppu_zw_810e" TASK_TYPE = "text-generation" STRATEGY_ID = os.environ.get("STRATEGY_ID", "") # 平台自动注入,无需修改 HTTP_HOST = "0.0.0.0" HTTP_PORT = 8080 # ══════════════════════════════════════════════════════════ # 模型列表 # ══════════════════════════════════════════════════════════ ALL_MODEL_IDS = [ "Hyeji0101/qwen2_5_1_5b_demo", "GenueAI/geode-onyx", "GM77/qwen3-4b-verilog-grpo", "ChuGyouk/F_R13_T2", "ChuGyouk/R17", "Ingingdo/bit-0.5b-final-logic", "beomi/Llama-3-Open-Ko-8B", "Fiscus/trinitite_safe_rl_base_model", "ChuGyouk/F_R12_T3", "ChuGyouk/F_R12_T2", "xw1234gan/cnk12_Main_fixed_SFTanchor_3B_step_9", "xw1234gan/cnk12_Main_fixed_SFTanchor_3B_step_10", "xw1234gan/cnk12_Main_fixed_BaseAnchor_3B_step_1", "kmseong/llama3_2_3b-instruct-math-safedelta-scale0.99", "opencompass/anah-v2", "ChuGyouk/R14", "trishajean/qwen-math-cebuano-1.5b-merged", "GyanAISystems/Gyan-AI-G1-Official", "Divij/Qwen2.5-3B-Instruct-sft-without-thoughts", "Divij/Qwen2.5-3B-Instruct-sft-with-thoughts", "ChuGyouk/R5_1", "ChuGyouk/R18_1", "ChuGyouk/R19_1", "ChuGyouk/R12", "ChuGyouk/F_R11_T4", "ChuGyouk/F_R12", "ChuGyouk/F_R11_T2", "ChuGyouk/F_R11_T3", "ChuGyouk/F_R13_1_T1", "ChuGyouk/F_R12_T4", "automerger/T3qm7xNeuralsirkrishna-7B", "Ford91/clifford-ai-v2", "ChuGyouk/R16_1", "ChuGyouk/R15_1", "nkatara/gita-text-generation-gpt2", "HINT-lab/Qwen2.5-7B-Instruct-Self-Calibration", "thirdeyeai/Qwen2.5-1.5B-Instruct-uncensored", "karaselerm/qwen2.5-1.5b-instruct-ru-abliterated-hw6", "xw1234gan/cnk12_Main_fixed_BaseAnchor_3B_step_2", "ontocord/wide_3b_sft_stage1.1-ss1-with_intr_math.no_issue", "mncai/Foundation_Law_epoch4", "gauri0508/med-record-audit-qwen2.5-3b-grpo", "unsloth/Phi-4-mini-instruct", "E-motionAssistant/qwen-2.5-3b-tamil-therapy-merged", "EscapeJeju/qwen2_5_1_5b_demo", "AgPerry/Qwen3-8B-fim-v2v3pt-swe-lego-posttrain", "ChuGyouk/F_R11", "ChuGyouk/F_R11_1_T1", "LorenaYannnnn/general_reward-Qwen3-0.6B-OURS_self-seed_1", "Vortex5/Crimson-Constellation-12B", "cloudyu/mistral_11B_instruct_v0.1", "pkupie/Qwen2.5-3B-ug-cpt", "iproskurina/qwen-hf-fewshot-iter-np-iter3", "ontocord/wide_3b_sft_stage1.2-ss1-expert_wiki", "kmseong/llama3_2_3b-instruct-math-safedelta-scale2", "Thrillcrazyer/Qwen-2.5-1.5B_TAC_Teacher_Qwen32B", "nyu-dice-lab/VeriThoughts-Reasoning-7B", "ontocord/wide_3b", "silvercoder67/Mistral-7b-instruct-v0.2-summ-sft-e2m", "lihaoxin2020/qwen3-4b-sft-gpt54-ep2-instance-rubric-gpt54-step200", "lihaoxin2020/qwen3-4b-sft-gpt54-ep2-instance-rubric-gpt54-step150", "lihaoxin2020/qwen3-4b-sft-gpt54-ep2-evolving-rubric-gem3-flash-step150", "Guilherme34/Firefly-V3", "EphAsad/Mnemosyne-3B", "Sangsang/ci_feedback_both_feedback_jsd_b0p8", "ChuGyouk/F_R12_1", "AgPerry/SWE-Lego-Qwen3-4B-posttrain", "5CH5/Qwen2.5-7B-abliterated", "55mvresearch/Qwen2.5-7B-Instruct-SFT-FT1-Merged", "dadaguai6677/TourismReview-Qwen2.5-7B", "Ramikan-BR/Qwen2-0.5B-v25", "Anonymous-2004/asgn2-sft_resta", "Anonymous-2004/asgn2-model_sft_resta", "xw1234gan/cnk12_Main_fixed_BaseAnchor_3B_step_5", "juzharii/qwen3-1.7b-absa-tech", "nyannto/dpo-qwen-cot-merged", "open-r1/OpenR1-Qwen-7B", "neuralmagic/starcoder2-3b-quantized.w8a8", "Anonymous-2004/asgn2-harmful-full", "AgnivaSaha/model_sft_dare", "Anonymous-2004/asgn2-dare_resta", "Agent-Omkar/qwen-mini-opus-merged", "AIPlans/Qwen3-0.6B-PPO", "3tic/Orion-Qwen3-1.7B-CPT-v2603", "yunjae-won/mpq3_llama8b_sft_dpo_beta1e-1_step9728", "ParetoQaft/1B-base", "AtaaJL/MediBot_Final", "yunjae-won/mpq3_llama8b_sft_dpo_beta1e-1_step8704", "yunjae-won/mpq3_llama8b_sft_dpo_beta1e-1_step8192", "yunjae-won/mpq3_llama8b_sft_dpo_beta1e-1_step7680", "AtaaJL/HealthyMLmreged", "tally0818/GRPO_Branch_16_eps20_3b_lr_bsz", "Anonymous-2004/asgn2-model_sft_dare_resta", "Anonymous-2004/asgn2-model_sft_dare", "jackf857/llama-3-8b-base-robust-dpo-ultrafeedback-8xh200", "smirki/UIGEN-T1.1-Qwen-7B", "j05hr3d/Llama-3.2-3B-Instruct-C_M_T_CT_CE_CM-2EP", "kmseong/llama3_2_3b-instruct-math-safedelta-scale3", "jaygala24/Qwen3-1.7B-RLOO-math-reasoning", "Anonymous-2004/asgn2-merged_full", "sikkaBolega/printfarm-sft-merged", "FoolBird/Qwen-2.5-1.5b-instruct-JZFH", "neuralmagic/Llama-2-7b-ultrachat200k-pruned_50", "rhaymison/Mistral-portuguese-luana-7b", "ontocord/wide_3b_sft_stag1.2-lyrical_law_news_software_howto_formattedtext_math_wiki-merge", "shuoxing/llama3-8b-full-pretrain-wash-c4-3-9m-bs4", "wangzhang/Llama-3-8B-Instruct-DeepRefusal-Broken", "shuoxing/llama3-8b-full-pretrain-wash-c4-2-4m-sft-bs64", "shuoxing/llama3-8b-full-pretrain-wash-c4-2-1m-sft-bs64", "yunjae-won/mpq3_llama8b_sft_dpo_beta1e-1_step7168", "shuoxing/llama3-8b-full-pretrain-wash-c4-1-5m-sft-bs64", "yunjae-won/mpq3_llama8b_sft_dpo_beta1e-1_step6656", "wangzhang/Mistral-7B-Instruct-RR-Abliterated", "electroglyph/Qwen3-4B-Instruct-2507-uncensored", "shuoxing/llama3-8b-full-pretrain-wash-c4-1-8m-bs4", "jingyeom/freeze_KoSoLAR-10.7B-v0.2_1.4_dedup", "Supreeth/verirl-sft-qwen3-4b-tooluse-merged", "maheshrawat18/Qwen3-4B-2507-sft2", "Aaryan369/civicflow-sft-qwen2.5-3b", "castorini/rank_vicuna_7b_v1_fp16", "shuoxing/llama3-8b-full-pretrain-wash-c4-2-4m-bs4", "shuoxing/llama3-8b-full-pretrain-wash-c4-2-1m-bs4", "shuoxing/llama3-8b-full-pretrain-wash-c4-0-6m-bs4", "shuoxing/llama3-8b-full-pretrain-wash-c4-1-2m-sft-bs64", "shuoxing/llama3-8b-full-pretrain-wash-c4-0-9m-sft-bs64", "shuoxing/llama3-8b-full-pretrain-wash-c4-1-8m-sft-bs64", "CorticalStack/shadow-clown-7B-slerp", "ypwang61/One-Shot-RLVR-Qwen2.5-Math-1.5B-1.2k-dsr-sub", "MTSAIR/multi_verse_model", "shuoxing/llama3-8b-full-pretrain-wash-c4-1-5m-bs4", "shuoxing/llama3-8b-full-pretrain-wash-c4-1-2m-bs4", "Vedika35/Vedika_coder", "the-harsh-vardhan/dispatchr-grpo-qwen3-4b-merged", "nanbeige/Nanbeige4-3B-Thinking-2511", "Changgil/K2S3-Mistral-7b-v1.4", "leveldevai/TurdusBeagle-7B", "general-preference/SPPO-Llama-3-8B-Instruct-GPM-2B", "shuoxing/llama3-8b-full-pretrain-wash-c4-3-6m-bs4", "shuoxing/llama3-8b-full-pretrain-wash-c4-3-0m-bs4", "shuoxing/llama3-8b-full-pretrain-wash-c4-0-6m-sft-bs64", "shuoxing/llama3-8b-full-pretrain-wash-c4-0-9m-bs4", "shuoxing/llama3-8b-full-pretrain-wash-c4-0-3m-sft-bs64", "allenai/Llama-3.1-Tulu-3-8B-DPO", "wang7776/Llama-2-7b-chat-hf-10-sparsity", "jsfs11/West-Dare-7B", "mrm8488/llama-2-coder-7b", "waliaavi/csc413", "spar-project/Qwen2.5-7B-Instruct-layers-16-24-smaller-lr", "shubham20005/honeypot-merged", "general-preference/GPO-Llama-3-8B-Instruct-GPM-2B", "jaygala24/Qwen3-4B-RLOO-math-reasoning", "sail/Sailor2-8B-SFT", "jekunz/Qwen3-1.7B-sv-SmolTalk", "invisietch/EtherealRainbow-v0.3-8B", "DATEXIS/DeepICD-R1-Llama-8B", "rjjimenezl601/mr-james-phi3-mini", "kalisai/Nusantara-2.7b-Indo-Chat", "sarthakmasta/code-debugger-llama", "dipta007/GanitLLM-1.7B_SFT_GRPO", "olusegunola/phi-1.5-distill-Standard_SFT_Only-merged", "tokyotech-llm/Swallow-7b-instruct-v0.1", "ccui46/q2.5_7b_aime_per_chunk_act_untrained_1000", "xzybit/qwen2-7b-ts2", "mishface123/acrs-qwen-3b-rl", "bunsenfeng/parti_24_full", "bunsenfeng/parti_25_full", "jeiku/Soulful_Bepis_9B", "rithesh2005/TinyLlama-WorkflowOrchestration", "olusegunola/phi-1.5-distill-Ablation_Linear_Arch-merged", "olusegunola/phi-1.5-distill-Ablation_No_L2_Norm-merged", "mehuldamani/sft-new-story-v3", "rimon-dutta/Rimon-Math-3B-V1", "ShinjiCodeEVA/student_feedback_v1_Qwen3-4B-Base", "ogulcanaydogan/Turkish-LLM-7B-Instruct", "nigeLbasa/tadiwa-phi35-mini", "muhmmdfrd/llama3-indo-summarizer-final", "mohdAlal1/Nafha-Llama3.1-8B-Perfumery-Expert-v1", "popcornchicken/smollm2-finetuned", "shaw2037/Llama-3.2-3B-Instruct-Reasoning", "olusegunola/phi-1.5-distill-Proposed_MLP_L2_Beta2.0-merged", "limloop/MN-12B-LucidFaun-RP-RU", "Zual/MPropositioneur-V2-large", "bunsenfeng/parti_28_full", "bunsenfeng/parti_31_full", "ArianAskari/SOLID-SFT-WoDPO-MixQV2-Zephyr-7b-beta", "rajtembe13/Llama-3.2-3B-TUTOR-gsm8k", "pvlabs/Chytrej2-Mini", "pvlabs/Chytrej2-90M-Base", "pvlabs/Chytrej2-Mini-It", "misterJB/tata-field-432hz", "jdebaer/smollm2-1.7b-SFT", "Alelcv27/Qwen2.5-3B-INST-Math-v2", "bunsenfeng/parti_26_full", "Aryanne/WestSenzu-Swap-7B", "ksjpswaroop/zindango-slm", "bunsenfeng/parti_23_full", "lihaoxin2020/qwen3-4b-sft-gpt54-ep2-instance-rubric-gpt54-step300", "mehuldamani/code_gen_arl-ast-addmultiply-7b-v1", "abideen/MonarchCoder-7B", "jainsatyam26/mistral-nemotron-safety-guard-new", "juiceb0xc0de/bella-bartender-3b", "jsl5710/Shield-Llama-3.2-1B-Full-FT-CE", "jme-datasci/rewi-tagger", "grimjim/llama-3-Nephilim-v3-8B", "lucazsh/movi-v2", "cxrbon16/turkish-llama-MSFT-0.7", "kushal7031/Kushal-AI-1B-Merged", "lilygoulder/zh-en-beginner-learner-english", "alwaysgood/QWEN3-4B-CPT", "Afras/hackwatch-monitor", "bunsenfeng/parti_21_full", "bunsenfeng/parti_20_full", "j05hr3d/Llama-3.2-3B-Instruct-C_M_T-SEED999", "j05hr3d/Llama-3.2-3B-Instruct-C_M_T-AUX_CT_CE_CM-SEED999", "haoranli-ml/Llama-3-8B-CoPE-64k-Instruct", "ismetAktar/ministral-3-3b-it-finetuneV3", "bhargavvv412/course-bot-adapter", "aguitachan/Test-okuru", "pstic/toolcalling-merged-demo", "andakia/milkyway-3.1-8B-llm-gsa-001", "andakia/Awa-3.1-8B-v5-ic1011-milkyway", "andakia/milkyway-3.1-8B-llm-dpo-001", "andakia/milkyway-3.1-8B-llm-gsa-000", "pharaouk/fusedyi", "mncai/SDC_Llama2_Lr05_Ep4", "bunsenfeng/parti_18_full", "xx18/Baseline-4B-MATH12K", "bunsenfeng/parti_17_full", "Neelectric/Llama-3.1-8B-Instruct_SFT_sciencev00.03", "bunsenfeng/parti_16_full", "bunsenfeng/parti_10_full", "FinaPolat/RAGED_Qwen", "gustavecortal/Qwen3-psychological-reasoning-8B", "fpadovani/dan-latn-10mb-hu-baseline", "bgman47/voxtobox-phi3-mini-merged", "bcatt/business-news-generator-v1", "neohsedu/toolcalling-merged-demo", "WokeAI/Tankie-DPE-12B-SFT-v2", "Andrewstivan/AURA", "ashercn97/manatee-7b", "Weyaxi/EnsembleV5-Nova-13B", "amitk23/llama3-3b-asclepius-clinical-finetuned", "amritansecc/tinyllama-llmops-demo", "daredevil467/hanoi-router-qwen3-8b-v6", "anwgpt/anwllama-1-chat", "akcit-motion/llama3.2-1b-motion-base", "akcit-motion/llama3.2-3b-motion-base", "anwgpt/anwllama-1-base", "abharadwaj123/sqlstorm-grpo-plan8192", "Mphuc213222/Ai_interview_merged", "MihaiPopa-1/SmolLM2-135M-Math", "johanes-andre/Llama-3-Indo-Legal-SFT", "Corianas/Quokka_590m", "Almawave/Velvet-2B", "Weyaxi/Luban-Marcoroni-13B-v1", "simplescaling/s1.1-7B", "Parallel-R1/Qwen3-4B-Base-add-special-token", "MInAlA/Llama-3.2-3B-ORPO-merged", "Ziyi193/chess-smollm2-135m", "Misha0706/llm-alignment-ppo", "RJTPP/scot0500s-qwen3-8b-full", "bralynn/dt.md5.6.128.256.25", "PKU-Alignment/ProgressGym-HistLlama3-8B-C015-instruct-v0.2", "abideen/NexoNimbus-7B", "sail/Sailor2-L-20B", "MInAlA/llama3-dpo-merged", "Sharathhebbar24/ssh_1.8B", "MInAlA/Llama-3.2-3B-Instruct-KTO-merged", "ChuGyouk/R10", "J-DIEGO/MiLlama3-8B-merged", "Gangesh-Chaudhary-241562452/sanatan-gita-guru-full", "robinsmits/Qwen1.5-7B-Dutch-Chat", "Divij/Llama-3.2-3B-Instruct-sft-without-thoughts", "ChuGyouk/R8", "ChuGyouk/R99", "Chamaka8/Serendip-LLM-CPT-SFT-v2", "ChuGyouk/R8_1", "sail/Sailor2-1B", "vkasera/v2_qwen-2.5-1.5b-r1-countdown-phil", "Zachary1150/merge_lenfmt_MRL4096_ROLLOUT4_LR2e-6_w0.5_dare_ties", "Weyaxi/Luban-Marcoroni-13B-v3", "TomGrc/FusionNet_linear", "Divij/Llama-3.2-3B-Instruct-sft-with-thoughts", "ChuGyouk/R10_1", "Hariaz17/SmolLM2-FT-MyDataset", "Josephgflowers/Tinyllama-1.3B-Cinder-Reason-Test", "Hachiki/alley-smp-merged", "gshasiri/SmolLM3-Mid-Second-Round", "Bhuvanesh0195/phi35-sap-ax-merged", "kairawal/Llama-3.2-1B-Instruct-TL-SynthDolly-1A-E5", "jackf857/qwen3-8b-base-epsilon-dpo-ultrafeedback-4xh200-batch-128", "jackf857/qwen3-8b-base-epsilon-dpo-hh-harmless-4xh200-batch-64-20260424-040415", "jackf857/llama-3-8b-base-r-dpo-ultrafeedback-4xh200-batch-128-20260428-035521", "FlagRelease/Qwen3-4B-FlagOS-Ascend", "Weyaxi/HelpSteer-filtered-7B", "TIGER-Lab/MAmmoTH-7B", "glaiveai/Llama-3-8B-RAG-v1", "Lvxy1117/amber_fine_tune_sg_part1", "Ba2han/qwen-test-3-longer", "ankhamun/xxxI-Ixxx", "damerajee/Gaja-v2.00", "zhezi12138/Qwen3-4B_RL", "ljvmiranda921/Polyglot-OLMo3-7B-SFT-ar", "gradients-io-tournaments/augmented-ef1c978769ec9b85", "Ayansk11/FinSenti-Tiny-LLM-10M", "2pp/chess-smollm-1000steps", "RJTPP/scot0500s-qwen3-1.7b-full", "unsloth/Meta-Llama-3.1-8B-Instruct", "daydreamwarrior/Nemotron-Research-GooseReason-4B-Instruct-heretic-v2", "TechxGenus-MS/CursorCore-DS-6.7B", "soynade-research/Oolel-Corrector", "galuis116/evolai-hope", "geodesic-research/sfm_baseline_filtered_dpo", "OpenOneRec/OneRec-8B-pro", "princeton-nlp/Mistral-7B-Base-SFT-CPO", "SanjiWatsuki/Lelantos-DPO-7B", "jackf857/llama-3-8b-base-new-dpo-hh-harmless-4xh200-batch-64-q_t-0.5-s_star-1.0", "EleutherAI/deep-ignorance-e2e-strong-filter-weak-knowledge-corrupted", "EleutherAI/deep-ignorance-pretraining-stage-strong-filter", "TucanoBR/Tucano-160m", "DADA121/qwen2.5-0.5b-sft-new", "Alelcv27/Qwen2.5-3B-Base-Code", "yunjae-won/ubq30i_qwen4b_sft_yw", "Kyleyee/cDPO_hh-seed4", "alexchen4ai/Qwen3-8B-Instruct", "norallm/normistral-7b-scratch", "xw1234gan/olympiads_Main_fixed_BaseAnchor_3B_step_5", "jackf857/llama-3-8b-base-new-dpo-harmless-s_star0.6-q_t0.4", "NeverSleep/Llama-3-Lumimaid-8B-v0.1-OAS", "Ignaciohhhhggfgjfrffd/multi-dataset-model", "SanjiWatsuki/Sonya-7B", "RylanSchaeffer/mem_Qwen3-344M_minerva_math_rep_3_sbst_1.0000_epch_1_ot_1", "Aryanne/sheared-plus-westlake-nearest-50_75p", "omrisap/nemotron-7B-9K", "0arch-io/dolphin-v2-8b-abliterated", "xw1234gan/olympiads_Main_fixed_BaseAnchor_3B_step_8", "xw1234gan/olympiads_Main_fixed_BaseAnchor_3B_step_7", "BioMistral/BioMistral-7B-TIES", "Kyleyee/rDPO_hh-seed3", "ResplendentAI/Flora_7B", "HuHu1226/LLM-Gogo", "voidful/Qwen3-0.6B-SFT-Tulu3", "xw1234gan/olympiads_Main_fixed_BaseAnchor_3B_step_9", "G-reen/SmolLM3-3B-SFT", "Alelcv27/Qwen2.5-7B-Math-CoT", "ferrazzipietro/unsup-Llama-3.1-8B-Instruct-datav2", "electroglyph/Qwen3-4B-Instruct-2507-uncensored-unslop-v2", "nnethercott/llava-v1.5-7b_vicuna", "TinyPixel/Llama-2-7B-bf16-sharded", "RJTPP/scot0500s-deepseek-8b-full", "xw1234gan/olympiads_Main_fixed_BaseAnchor_3B_step_10", "tushar310/MisGemma-7B", "OpenBuddy/openbuddy-zen-3b-v21.2-32k", "FarReelAILab/Machine_Mindset_zh_ISFJ", "ajn313/cl-verilog-1.0", "Aratako/Qwen3-8B-NSFW-JP", "alwaysgood/QWEN3-4B-Base-stage2", "X1AOX1A/WorldModel-Webshop-Llama3.1-8B", "xxb881117/Qwen2.5-0.5B-Instruct-Gensyn-Swarm-meek_reclusive_penguin", "BAAI_Industry_Competition_tourism_dev/eatbreakfast_TouInd", "Alelcv27/Qwen2.5-3B-Arcee-Base-INST", "PYAE1994/Roleplay-Llama-3-8B", "RylanSchaeffer/mem_Qwen3-34M_minerva_math_rep_0_sbst_1.0000_epch_1_ot_1", "skysys00/Meta-Llama-3-8B-Instruct-DeepRefusal", "kurakurai/Luth-0.6B-Instruct", "Sheikhaei/llama-3.2-1b-english-persian-translator", "shisa-ai/shisa-v2-llama3.1-8b", "vrutkovs/Lusterka-7B-v0.3", "xw1234gan/SFT_Qwen2.5-1.5B-Instruct_MMLU", "FallenMerick/MN-Violet-Lotus-12B", "bralynn/dt.tl1.128.256.455steps", "smirki/UIGEN-FX-4B-Intermediate", "facebook/opt-iml-1.3b", "facebook/opt-350m", "facebook/opt-6.7b", "ai9stars/AutoTriton", "Aryanne/TinyllamaMix-1.1B", "Novaciano/Scylla_NSFW_Aggresive-3.2-1B", "akhadangi/Llama3.2.1B.0.01-H", "MiniLLM/MiniPLM-Qwen-200M", "sesaily/Qwen2.5-Coder-7B-Frends-Instruct", "waleko/Qwen3-8B-SFT-envbench_qwen-all", "electron271/graig-code-turbo-fast-slow-4.5-mini", "vicgalle/Humanish-Roleplay-Llama-3.1-8B", "eth-nlped/TutorRL-7B-think", "spritlesoftware/Qwen_3b_medical_o1_reasoning", "JoaoReiz/Llama3.2_3B_Unified", "ryokamoi/Qwen-2.5-7B-FoVer-PRM-2026", "bdaio-org/newspaper-title-titulm3b", "DatOneStormyz/Solor-TXT-7B-Ultra", "unsloth/Qwen3-8B", "facebook/opt-1.3b", "iapp/chinda-qwen3-4b", "DCAgent/b1_top32_seq", "iproskurina/smollm2-hf-iter-iter5", "aws-prototyping/MegaBeam-Mistral-7B-300k", "Qwen/Qwen3Guard-Gen-8B", "vicgalle/Configurable-Hermes-2-Pro-Llama-3-8B", "Shusuke07/qwen3-4b-dpo-qwen-cot-_2-3_05_DPO", "laion/nemotron-terminal-data_processing__Qwen3-8B", "Magpie-Align/Llama-3-8B-OpenHermes-2.5-1M", "PrimeIntellect/llama-2m-fresh", "ToxicityPrompts/PolyGuard-Qwen", "choiqs/Qwen3-1.7B-ultrachat-bsz128-ts300-regular-skywork8b-seed42-lr1e-6-warmup10-checkpoint125", "iproskurina/qwen-hf-iter-np-iter3", "theapilover/LLama-3-8b-Uncensored", "spiral-rl/Spiral-Qwen3-4B-Multi-Env", "tensoropera/Fox-1-1.6B-Instruct-v0.1", "llm-jp/llm-jp-3-13b-instruct2", "ontocord/wide_3b_sft_stage1.2-ss1-expert_how-to", "lldois/SmolLM2-135M-Reasoning-Beta001-Champion", "Polygl0t/Tucano2-qwen-1.5B-Base", "mags0ft/SmolLM2-360m-German-Instruct", "gplsi/Aitana-2B-S-base-IP-1.0", "kairawal/Qwen3-0.6B-GA-SynthDolly-1A-E3", "CaffeineThief/ttp_sft_kanana-1.5_steps_tram-step1-seed44", "omrisap/nemotron-7B-6K", "UmbrellaInc/T-Virus_Epsilon.Arklay-3.2-1B", "iproskurina/SmolLM2-360M-biasinbios-pt-factory-real-base-all", "ronigold/dictalm2.0-instruct-fine-tuned-alpaca-gpt4-hebrew", "jackf857/llama-3-8b-base-ipo-ultrafeedback-8xh200", "Alelcv27/Llama3.2-3B-ModelStock-Math-Code", "FlyPig23/Llama3.2-3B_Paper_Impact_code_SFT_1ep", "prithivMLmods/Triangulum-5B", "anyreach-ai/semantic-turn-taking", "dphn/dolphin-2.9.3-qwen2-0.5b", "Clashware/mail-agent-llama", "jackf857/llama-3-8b-base-slic-hf-ultrafeedback-4xh200", "j05hr3d/Llama-3.2-3B-Instruct-C_M_T-AUX_CT_CE_CM-SAM", "choiqs/Qwen3-1.7B-ultrachat-bsz128-ts300-regular-qrm-seed42-lr1e-6-warmup10-checkpoint200", "distil-labs/Distil-PII-Llama-3.2-3B-Instruct", "parallel-reasoner/threadweaver-qwen3-8b-131072-sft8x", "Jrose620/InnerVerse-Qwen3-14B-v1", "1024m/Llama-3.2-3B-Base", "burtenshaw/Qwen2-1.5B-GRPO-math", "jackf857/llama-3-8b-base-cpo-ultrafeedback-8xh200", "Ansarinoorie2001/Mini-kugal", "ehristoforu/coolqwen-3b-it", "dare43321/english-tts-model-2", "Weyaxi/Einstein-v6-7B", "posb/Qwen2.5-0.5B-Instruct-Gensyn-Swarm-grazing_stealthy_chicken", "daviddavidlu/DAPO-with-prompt-augmentation-step2720", "cycloneboy/CscSQL-Merge-Qwen2.5-Coder-7B-Instruct", "yilmazzey/qwen2_5_1_5b-abstract-finetuned-ep2-b4", "rbelanec/train_mrpc_42_1774791061", "NovaCorp/Uncensored-Kybalion-3.2-1B", "Kabster/Bio-Mistralv2-Squared", "formalmathatepfl/deepseek-math-7B-finetuned", "decruz07/llama-2-7b-miniguanaco", "inclusionAI/AReaL-boba-2-14B", "cs-552-2026-baseline/general_knowledge_model", "bisayofelix/model", "benjaminsinzore/Basqui-R1-4B-v1", "Karlzhy/Content_Review_Model", "darlong/Qwen2.5-0.5B-Instruct-Gensyn-Swarm-sedate_scavenging_hummingbird", "jackf857/llama-3-8b-base-margin-dpo-hh-helpful-batch-64", "ali-elganzory/Baguettotron", "allenai/OLMoE-1B-7B-0125-SFT", "movefast/Qwen2.5-7B-Open-R1-GRPO", "Azazelle/Mocha-Sample-7b-ex", "cs-552-2026-baseline/safety_model", "hard007ik/shopmanager-grpo-smoke-l4-v2", "swift/MS-LongWriter-Qwen2-7B-Instruct", "hard007ik/shopmanager-grpo-qwen3", "prithivMLmods/Octantis-QwenR1-1.5B", "VAGOsolutions/SauerkrautLM-1.5b", "occiglot/occiglot-7b-fr-en-instruct", "MatthieuJ/ING_2003M3_SLERP", "ghost4280/Ghost-V5-Ultra-8B", "Tesslate/UIGEN-T3-4B-Preview-MAX", "ozertuu/Lama3.1-8B-EksiSozlukAI", "daviddavidlu/DAPO-with-prompt-augmentation-step2820", "cyberagent/open-calm-1b", "cycloneboy/CscSQL-Merge-Qwen2.5-Coder-0.5B-Instruct", "myfi/parser_model_ner_4.12", "ZhichengLiao/grpo_numina_full_global_step_272_HF_format", "HelpingAI/Dhanishtha", "azuki-digital/llm-jp-4-math-lion", "hfl/chinese-alpaca-2-7b-64k", "yilmazzey/qwen2_5_7b-abstract-finetuned-ep2-b8", "franciscobdl/salamandra-estigiaV2", "HPLT/NorOLMo-13B", "yilmazzey/qwen2_5_1_5b-abstract-finetuned-ep1-b4", "g4me/QwenRolina3-1.7B-base-LR1e5-b32g2gc8-AR-Orig-IRM", "g-assismoraes/Qwen3-4B-it-pira-IRM-QA-qairm-ptbr", "FinancialSupport/saiga-7b", "QwenCollection/SeaLLMs-v3-7B-Chat", "rbelanec/train_cola_42_1774791067", "cs-552-2026-middle-west/math_model", "fungamer2/Ami-360M-Thinking", "Lili85/Llama2-7BSST2", "zjunlp/OceanGPT-basic-7B-v0.1", "jordanpainter/diallm-llama-grpo-aus", "Gianloko/apex-coder-1.5b", "Duyoung/toolcalling-merged-demo", "princeton-nlp/SWE-Llama-7b", "Vikhrmodels/Vikhr-7b-0.2", "Lili85/Llama2-7BCoQA-full", "wave-on-discord/silly-v0.2", "Qwen/Qwen3-4B-SafeRL", "jackf857/llama-3-8b-base-simpo-8xh200", "ClaudioSavelli/FAME_gold_llama32-1b-instruct-qa", "Kyleyee/cDPO_hh-seed2", "princeton-nlp/Mistral-7B-Instruct-KTO", "PAI/pai-llama3-8b-doc2qa", "cs-552-2026-OAAA/math_model", "EleutherAI/deep-ignorance-e2e-strong-filter-strong-knowledge-corrupted", "Jasonnn13/SmolLM2-FT-MyDataset", "Azurro/APT3-1B-Base", "TinyPixel/elm-test", "lamm-mit/meta-llama-Llama-3.2-3B-Instruct-untied", "princeton-nlp/Mistral-7B-Base-SFT-SimPO", "occiglot/occiglot-7b-eu5", "homebrewltd/Ichigo-llama3.1-8B-v0.5-cp-1000", "Qinghao/Qwen3-8B-Base-masked-ghpo", "ModelCloud.AI/Llama3.2-1B-Instruct", "QLUNLP/BianCang-Qwen2-7B-Instruct", "mncai/Mistral-7B-1st-NWS-eCot-2nd-LaAdMoAl_o500_u2k_Qn-100", "Xorbits/CodeLlama-13b-Instruct-hf", "context-labs/Meta-Llama-3.1-8B-Instruct-FP16", "PKU-ML/G1-7B", "kerolos1/Mistral-7B-Instruct-v0.1-Full-Final", "kmseong/llama2_7b_chat-WaRP-circuit-breaker-gsm8k-lr5e-5", "IntervitensInc/internlm2_5-20b-llamafied", "hyunseoki/verl-math-transfer-7bi-to-3bi-fix03", "pattlr13/Llama-Legal-Expression-8B-v0.1-merged", "PKU-Alignment/ProgressGym-HistLlama3-8B-C015-pretrain-v0.2", "cjiao/goldengoose-corr-v4-1.00-200", ] # ══════════════════════════════════════════════════════════ # 全局状态(供 /status 展示) # ══════════════════════════════════════════════════════════ _state = { "strategy_id": STRATEGY_ID, "phase": "starting", # starting | submitting | done | error "total": len(ALL_MODEL_IDS), "submitted": 0, "failed": 0, "started_at": None, "finished_at": None, } _shutdown = threading.Event() # ══════════════════════════════════════════════════════════ # HTTP 服务 # ══════════════════════════════════════════════════════════ class Handler(BaseHTTPRequestHandler): def do_GET(self): if self.path == "/health": self._json({"status": "ok"}) elif self.path == "/status": self._json(_state) else: self._json({"error": "not found"}, 404) def _json(self, body: dict, code: int = 200): payload = json.dumps(body, default=str).encode() self.send_response(code) self.send_header("Content-Type", "application/json") self.send_header("Content-Length", str(len(payload))) self.end_headers() self.wfile.write(payload) def log_message(self, fmt, *args): print(f"[http] {self.address_string()} {fmt % args}", flush=True) def _run_http(): server = ThreadingHTTPServer((HTTP_HOST, HTTP_PORT), Handler) server.timeout = 1 print(f"[http] 监听 {HTTP_HOST}:{HTTP_PORT}", flush=True) while not _shutdown.is_set(): server.handle_request() server.server_close() print("[http] 已关闭", flush=True) # ══════════════════════════════════════════════════════════ # 业务逻辑 # ══════════════════════════════════════════════════════════ def _submit_task(token: str, model_id: str) -> Tuple[bool, str]: headers = { "Content-Type": "application/json", "Authorization": f"Bearer {token}", } config_content = f"""gpu_type: ppu_zw_810e framework: vllm docker_image: harbor.4pd.io/hardcore-tech/asllm:1.10.1-pytorch2.10.0-ubuntu24.04-sail2.1.0-cuda13.0-sglang0.5.10-vllm0.19.0-py312 nv_docker_image: harbor-contest.4pd.io/sunruoxi/vllm-openai-fix-tokenizer:v0.11.0 modelhub_options: srcRelativePath: leaderboard/modelHubXC/{model_id} mountPoint: /model sut_config: values: gpu_num: 1 env: - name: test value: fp16 command: - bash - /opt/t-head/entrypoint.sh - python3 - -m - asllm.entrypoints.api_server - --model - /model - --port - '30000' - --host - 0.0.0.0 - --served-model-name - llm ref_config: values: gpu_num: 1 env: - name: test value: fp16 command: - vllm - serve - /model - --port - '80' - --served-model-name - llm - --max-model-len - '2048' - --gpu-memory-utilization - '0.9' - --enforce-eager - --trust-remote-code - -tp - '1' """ payload = { "contestApiToken": CONTEST_API_TOKEN, "contributors": CONTRIBUTORS, "gpuTypes": [GPU_TYPE], "taskType": TASK_TYPE, "modelId": model_id, "framework": "vllm", "strategyId": STRATEGY_ID, # 平台要求 "submissionConfig": [{ "config": config_content, "gpuType": GPU_TYPE, "taskType": TASK_TYPE, }], } print(f"[payload] {json.dumps(payload, indent=2, ensure_ascii=False)}", flush=True) try: resp = requests.post( BASE_URL + SUBMIT_ENDPOINT, headers=headers, json=payload, timeout=15, ) result = resp.json() if result.get("code") == 0: task_id = result.get("data", {}).get("id", "") print(f"[worker] OK {model_id} task_id={task_id}", flush=True) return True, task_id else: print(f"[worker] FAIL {model_id}: {result.get('message')}", flush=True) return False, "" except Exception as e: print(f"[worker] ERROR {model_id}: {e}", flush=True) return False, "" def _run_worker(): _state["started_at"] = datetime.utcnow().isoformat() _state["phase"] = "submitting" successful: List[Tuple[str, str]] = [] token = AUTH_TOKEN print("[worker] 使用预设 Token,跳过登录", flush=True) for model_id in ALL_MODEL_IDS: if _shutdown.is_set(): break ok, task_id = _submit_task(token, model_id) if ok: _state["submitted"] += 1 successful.append((task_id, model_id)) else: _state["failed"] += 1 # 写入结果文件 try: with open("submitted_validation_tasks.txt", "w", encoding="utf-8") as f: for tid, mid in successful: f.write(f"{tid}\t{mid}\n") except Exception: pass _state["finished_at"] = datetime.utcnow().isoformat() _state["phase"] = "done" print( f"[worker] 完成 submitted={_state['submitted']} failed={_state['failed']}", flush=True, ) # 提交完成后继续保持进程存活,等待平台停止 # ══════════════════════════════════════════════════════════ # 入口 # ══════════════════════════════════════════════════════════ def _handle_signal(signum, _frame): print(f"[main] 收到信号 {signum},正在关闭...", flush=True) _shutdown.set() def main(): signal.signal(signal.SIGTERM, _handle_signal) signal.signal(signal.SIGINT, _handle_signal) # HTTP 服务线程 http_thread = threading.Thread(target=_run_http, daemon=False) http_thread.start() # 提交任务线程 worker_thread = threading.Thread(target=_run_worker, daemon=True) worker_thread.start() # 主线程等待 shutdown _shutdown.wait() print("[main] 等待 HTTP 服务关闭...", flush=True) http_thread.join(timeout=5) print("[main] 退出", flush=True) if __name__ == "__main__": main()