diff --git a/python/sglang/test/kits/ebnf_constrained_kit.py b/python/sglang/test/kits/ebnf_constrained_kit.py index 6d00249a2..292faf937 100644 --- a/python/sglang/test/kits/ebnf_constrained_kit.py +++ b/python/sglang/test/kits/ebnf_constrained_kit.py @@ -3,7 +3,8 @@ import json import requests -class TestEBNFConstrainedMixin: +class EBNFConstrainedMixin: + ebnf_grammar = 'root ::= "test"' # Default grammar def _run_decode_ebnf( diff --git a/python/sglang/test/kits/json_constrained_kit.py b/python/sglang/test/kits/json_constrained_kit.py index 05c0b7f7d..6576e61aa 100644 --- a/python/sglang/test/kits/json_constrained_kit.py +++ b/python/sglang/test/kits/json_constrained_kit.py @@ -5,7 +5,8 @@ import openai import requests -class TestJSONConstrainedMixin: +class JSONConstrainedMixin: + json_schema = json.dumps( { "type": "object", diff --git a/python/sglang/test/kits/regex_constrained_kit.py b/python/sglang/test/kits/regex_constrained_kit.py index 61f47e294..f4c3e31d9 100644 --- a/python/sglang/test/kits/regex_constrained_kit.py +++ b/python/sglang/test/kits/regex_constrained_kit.py @@ -3,7 +3,8 @@ import json import requests -class TestRegexConstrainedMixin: +class RegexConstrainedMixin: + def _run_decode_regex( self, regex, diff --git a/python/sglang/test/test_utils.py b/python/sglang/test/test_utils.py index e24cdfced..554def33a 100644 --- a/python/sglang/test/test_utils.py +++ b/python/sglang/test/test_utils.py @@ -2056,6 +2056,7 @@ def _distributed_worker(rank, world_size, backend, port, func, result_queue, kwa class CustomTestCase(unittest.TestCase): + def _callTestMethod(self, method): max_retry = envs.SGLANG_TEST_MAX_RETRY.get() if max_retry is None: diff --git a/test/registered/constrained_decoding/test_constrained_decoding.py b/test/registered/constrained_decoding/test_constrained_decoding.py index cf74f2d2d..66280138d 100644 --- a/test/registered/constrained_decoding/test_constrained_decoding.py +++ b/test/registered/constrained_decoding/test_constrained_decoding.py @@ -2,9 +2,9 @@ import unittest from sglang.srt.utils import kill_process_tree from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci -from sglang.test.kits.ebnf_constrained_kit import TestEBNFConstrainedMixin -from sglang.test.kits.json_constrained_kit import TestJSONConstrainedMixin -from sglang.test.kits.regex_constrained_kit import TestRegexConstrainedMixin +from sglang.test.kits.ebnf_constrained_kit import EBNFConstrainedMixin +from sglang.test.kits.json_constrained_kit import JSONConstrainedMixin +from sglang.test.kits.regex_constrained_kit import RegexConstrainedMixin from sglang.test.test_utils import ( DEFAULT_SMALL_MODEL_NAME_FOR_TEST, DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -49,22 +49,22 @@ class ServerWithGrammar(CustomTestCase): class TestXGrammarBackend( ServerWithGrammar, - TestJSONConstrainedMixin, - TestEBNFConstrainedMixin, - TestRegexConstrainedMixin, + JSONConstrainedMixin, + EBNFConstrainedMixin, + RegexConstrainedMixin, ): backend = "xgrammar" -class TestOutlinesBackend(ServerWithGrammar, TestJSONConstrainedMixin): +class TestOutlinesBackend(ServerWithGrammar, JSONConstrainedMixin): backend = "outlines" class TestLLGuidanceBackend( ServerWithGrammar, - TestJSONConstrainedMixin, - TestEBNFConstrainedMixin, - TestRegexConstrainedMixin, + JSONConstrainedMixin, + EBNFConstrainedMixin, + RegexConstrainedMixin, ): backend = "llguidance" diff --git a/test/registered/distributed/test_dp_attention.py b/test/registered/distributed/test_dp_attention.py index eb7672fa4..1824f6f71 100644 --- a/test/registered/distributed/test_dp_attention.py +++ b/test/registered/distributed/test_dp_attention.py @@ -8,10 +8,10 @@ from sglang.srt.environ import envs from sglang.srt.utils import kill_process_tree from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k -from sglang.test.kits.ebnf_constrained_kit import TestEBNFConstrainedMixin -from sglang.test.kits.json_constrained_kit import TestJSONConstrainedMixin +from sglang.test.kits.ebnf_constrained_kit import EBNFConstrainedMixin +from sglang.test.kits.json_constrained_kit import JSONConstrainedMixin from sglang.test.kits.radix_cache_server_kit import run_radix_attention_test -from sglang.test.kits.regex_constrained_kit import TestRegexConstrainedMixin +from sglang.test.kits.regex_constrained_kit import RegexConstrainedMixin from sglang.test.run_eval import run_eval from sglang.test.test_utils import ( DEFAULT_IMAGE_URL, @@ -30,9 +30,9 @@ register_cuda_ci(est_time=350, suite="stage-b-test-large-2-gpu") class TestDPAttentionDP2TP2( CustomTestCase, - TestJSONConstrainedMixin, - TestEBNFConstrainedMixin, - TestRegexConstrainedMixin, + JSONConstrainedMixin, + EBNFConstrainedMixin, + RegexConstrainedMixin, ): @classmethod def setUpClass(cls): @@ -75,9 +75,9 @@ class TestDPAttentionDP2TP2( class TestDPRetract( CustomTestCase, - TestJSONConstrainedMixin, - TestEBNFConstrainedMixin, - TestRegexConstrainedMixin, + JSONConstrainedMixin, + EBNFConstrainedMixin, + RegexConstrainedMixin, ): @classmethod def setUpClass(cls): @@ -115,9 +115,9 @@ class TestDPRetract( class TestDPAttentionDP2TP2DeepseekV3MTP( CustomTestCase, - TestJSONConstrainedMixin, - TestEBNFConstrainedMixin, - TestRegexConstrainedMixin, + JSONConstrainedMixin, + EBNFConstrainedMixin, + RegexConstrainedMixin, ): @classmethod def setUpClass(cls): diff --git a/test/registered/distributed/test_dp_attention_large.py b/test/registered/distributed/test_dp_attention_large.py index f3cf17d55..ff277a8eb 100644 --- a/test/registered/distributed/test_dp_attention_large.py +++ b/test/registered/distributed/test_dp_attention_large.py @@ -7,9 +7,9 @@ from sglang.lang.chat_template import get_chat_template_by_model_path from sglang.srt.utils import kill_process_tree from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k -from sglang.test.kits.ebnf_constrained_kit import TestEBNFConstrainedMixin -from sglang.test.kits.json_constrained_kit import TestJSONConstrainedMixin -from sglang.test.kits.regex_constrained_kit import TestRegexConstrainedMixin +from sglang.test.kits.ebnf_constrained_kit import EBNFConstrainedMixin +from sglang.test.kits.json_constrained_kit import JSONConstrainedMixin +from sglang.test.kits.regex_constrained_kit import RegexConstrainedMixin from sglang.test.run_eval import run_eval from sglang.test.test_utils import ( DEFAULT_IMAGE_URL, @@ -28,9 +28,9 @@ register_cuda_ci(est_time=350, suite="stage-c-test-4-gpu-h100") class TestDPAttentionDP2TP4( CustomTestCase, - TestJSONConstrainedMixin, - TestEBNFConstrainedMixin, - TestRegexConstrainedMixin, + JSONConstrainedMixin, + EBNFConstrainedMixin, + RegexConstrainedMixin, ): @classmethod def setUpClass(cls): @@ -68,9 +68,9 @@ class TestDPAttentionDP2TP4( class TestDPAttentionDP2TP2DeepseekV3MTP( CustomTestCase, - TestJSONConstrainedMixin, - TestEBNFConstrainedMixin, - TestRegexConstrainedMixin, + JSONConstrainedMixin, + EBNFConstrainedMixin, + RegexConstrainedMixin, ): @classmethod def setUpClass(cls): diff --git a/test/registered/openai_server/features/test_json_mode.py b/test/registered/openai_server/features/test_json_mode.py index 136fa9ddf..7f8373458 100644 --- a/test/registered/openai_server/features/test_json_mode.py +++ b/test/registered/openai_server/features/test_json_mode.py @@ -18,7 +18,7 @@ register_cuda_ci(est_time=109, suite="stage-b-test-small-1-gpu") register_amd_ci(est_time=180, suite="stage-b-test-small-1-gpu-amd") -class TestJSONModeMixin: +class JSONModeMixin: """Mixin class containing JSON mode test methods""" def test_json_mode_response(self): @@ -123,15 +123,15 @@ class ServerWithGrammarBackend(CustomTestCase): kill_process_tree(cls.process.pid) -class TestJSONModeXGrammar(ServerWithGrammarBackend, TestJSONModeMixin): +class TestJSONModeXGrammar(ServerWithGrammarBackend, JSONModeMixin): backend = "xgrammar" -class TestJSONModeOutlines(ServerWithGrammarBackend, TestJSONModeMixin): +class TestJSONModeOutlines(ServerWithGrammarBackend, JSONModeMixin): backend = "outlines" -class TestJSONModeLLGuidance(ServerWithGrammarBackend, TestJSONModeMixin): +class TestJSONModeLLGuidance(ServerWithGrammarBackend, JSONModeMixin): backend = "llguidance" diff --git a/test/registered/spec/eagle/test_eagle_constrained_decoding.py b/test/registered/spec/eagle/test_eagle_constrained_decoding.py index e6d1271ef..6cdc1e9f5 100644 --- a/test/registered/spec/eagle/test_eagle_constrained_decoding.py +++ b/test/registered/spec/eagle/test_eagle_constrained_decoding.py @@ -3,8 +3,8 @@ import unittest from sglang.srt.environ import envs from sglang.srt.utils import kill_process_tree from sglang.test.ci.ci_register import register_cuda_ci -from sglang.test.kits.json_constrained_kit import TestJSONConstrainedMixin -from sglang.test.kits.regex_constrained_kit import TestRegexConstrainedMixin +from sglang.test.kits.json_constrained_kit import JSONConstrainedMixin +from sglang.test.kits.regex_constrained_kit import RegexConstrainedMixin from sglang.test.test_utils import ( DEFAULT_DRAFT_MODEL_EAGLE, DEFAULT_TARGET_MODEL_EAGLE, @@ -18,7 +18,7 @@ register_cuda_ci(est_time=100, suite="stage-b-test-large-1-gpu") class TestEagleConstrainedDecoding( - CustomTestCase, TestRegexConstrainedMixin, TestJSONConstrainedMixin + CustomTestCase, RegexConstrainedMixin, JSONConstrainedMixin ): max_running_requests = 64 attention_backend = "triton"