import unittest from sglang.srt.environ import envs from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.kits.gsm8k_accuracy_kit import GSM8KMixin from sglang.test.kits.kl_divergence_kit import KLDivergenceMixin from sglang.test.kits.prefix_cache_branching_kit import PrefixCacheBranchingMixin from sglang.test.server_fixtures.default_fixture import DefaultServerBase register_cuda_ci(est_time=500, suite="stage-c-test-4-gpu-h100") QWEN3_NEXT_MODEL = "Qwen/Qwen3-Next-80B-A3B-Instruct" class TestQwen3NextMTP(GSM8KMixin, KLDivergenceMixin, DefaultServerBase): model = QWEN3_NEXT_MODEL gsm8k_accuracy_thres = 0.93 kl_div_thres = 0.0025 other_args = [ "--trust-remote-code", "--speculative-algorithm", "NEXTN", "--speculative-num-steps", "3", "--speculative-eagle-topk", "1", "--speculative-num-draft-tokens", "4", "--mem-fraction-static", "0.8", "--tp", "4", "--chunked-prefill-size", "2048", "--mamba-scheduler-strategy", "no_buffer", "--disable-radix-cache", ] class TestQwen3NextMTPTopk( GSM8KMixin, KLDivergenceMixin, PrefixCacheBranchingMixin, DefaultServerBase ): model = QWEN3_NEXT_MODEL cache_chunk_size = 64 gsm8k_accuracy_thres = 0.93 kl_div_thres = 0.008 other_args = [ "--trust-remote-code", "--speculative-algorithm", "NEXTN", "--speculative-num-steps", "5", "--speculative-eagle-topk", "4", "--speculative-num-draft-tokens", "8", "--mem-fraction-static", "0.8", "--tp", "4", "--chunked-prefill-size", "2048", "--mamba-scheduler-strategy", "extra_buffer", "--mamba-track-interval", "128", ] # TODO(hzh): After merging the PR that fixes specv2 to correctly return log probs, # add KLDivergenceMixin back. https://github.com/sgl-project/sglang/pull/18645 class TestQwen3NextMTPV2(GSM8KMixin, DefaultServerBase): model = QWEN3_NEXT_MODEL gsm8k_accuracy_thres = 0.93 other_args = [ "--trust-remote-code", "--speculative-algorithm", "NEXTN", "--speculative-num-steps", "3", "--speculative-eagle-topk", "1", "--speculative-num-draft-tokens", "4", "--mem-fraction-static", "0.8", "--tp", "4", "--chunked-prefill-size", "2048", "--mamba-scheduler-strategy", "extra_buffer", "--mamba-track-interval", "128", ] @classmethod def setUpClass(cls): envs.SGLANG_ENABLE_SPEC_V2.set(True) super().setUpClass() @classmethod def tearDownClass(cls): envs.SGLANG_ENABLE_SPEC_V2.set(False) super().tearDownClass() if __name__ == "__main__": unittest.main()