From 074bb928f09c6e044b98b93c7b8aef48032d013d Mon Sep 17 00:00:00 2001 From: Xinyuan Tong <115166877+JustinTong0323@users.noreply.github.com> Date: Thu, 9 Jul 2026 07:47:36 +0800 Subject: [PATCH] Move template manager files under parser; update CODEOWNERS (#26052) --- .github/CODEOWNERS | 8 ++++++-- .../sglang/srt/entrypoints/anthropic/serving.py | 2 +- python/sglang/srt/entrypoints/engine.py | 4 ++-- python/sglang/srt/entrypoints/http_server.py | 2 +- .../srt/entrypoints/openai/serving_chat.py | 2 +- .../srt/entrypoints/openai/serving_classify.py | 2 +- .../entrypoints/openai/serving_completions.py | 2 +- .../srt/entrypoints/openai/serving_embedding.py | 2 +- .../srt/entrypoints/openai/serving_responses.py | 2 +- .../{managers => parser}/template_detection.py | 0 .../srt/{managers => parser}/template_manager.py | 16 ++++++++-------- .../unit/entrypoints/anthropic/test_serving.py | 2 +- .../unit/entrypoints/openai/test_serving_chat.py | 4 ++-- .../test_template_manager.py | 2 +- 14 files changed, 27 insertions(+), 23 deletions(-) rename python/sglang/srt/{managers => parser}/template_detection.py (100%) rename python/sglang/srt/{managers => parser}/template_manager.py (99%) rename test/registered/unit/{managers => parser}/test_template_manager.py (99%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 48df903ff..dfced8a86 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -13,7 +13,7 @@ /python/sglang/multimodal_gen/test/server/ascend @ping1jing2 @ssshinigami @Makcum888e @e-martirosian /python/sglang/srt/batch_invariant_ops @Fridge003 @hebiao064 /python/sglang/srt/compilation @hebiao064 @Oasis-Git -/python/sglang/srt/constrained @hnyls2002 @DarkSharpness +/python/sglang/srt/constrained @hnyls2002 @DarkSharpness @JustinTong0323 /python/sglang/srt/disaggregation @ByronHsu @hnyls2002 @ShangmingCai @HaiShaw @sogalin /python/sglang/srt/disaggregation/ascend @ping1jing2 @iforgetmyname /python/sglang/srt/disaggregation/encode_receiver.py @ShangmingCai @liusy58 @ZhengWG @gty111 @@ -23,11 +23,13 @@ /python/sglang/srt/distributed/device_communicators/mooncake_transfer_engine.py @ShangmingCai @stmatengss /python/sglang/srt/dllm @ClawSeven @btw616 /python/sglang/srt/entrypoints @ispobock @CatherineSue @slin1237 @merrymercy @JustinTong0323 +/python/sglang/srt/entrypoints/anthropic @JustinTong0323 +/python/sglang/srt/entrypoints/openai @JustinTong0323 /python/sglang/srt/entrypoints/engine_score_mixin.py @sundar24295s @chanh @fortunecookiee /python/sglang/srt/entrypoints/grpc_server.py @CatherineSue @slin1237 /python/sglang/srt/entrypoints/openai/serving_score.py @sundar24295s @chanh @fortunecookiee /python/sglang/srt/eplb @fzyzcjy @ch-wan @xutizhou -/python/sglang/srt/function_call @CatherineSue @JustinTong0323 +/python/sglang/srt/function_call @JustinTong0323 /python/sglang/srt/grpc @CatherineSue @slin1237 /python/sglang/srt/hardware_backend/mlx @yeahdongcn /python/sglang/srt/hardware_backend/musa @yeahdongcn @@ -60,9 +62,11 @@ /python/sglang/srt/models/transformers.py @adarshxs /python/sglang/srt/multimodal @mickqian @JustinTong0323 @yhyang201 @yuan-luo /python/sglang/srt/observability @merrymercy @fzyzcjy @sufeng-buaa +/python/sglang/srt/parser @JustinTong0323 /python/sglang/srt/platforms @merrymercy @whybeyoung @alexnails /python/sglang/srt/ray @Qiaolin-Yu @xyuzh /python/sglang/srt/speculative @Ying1123 @merrymercy @hnyls2002 @Qiaolin-Yu +/python/sglang/srt/utils/hf_transformers @JustinTong0323 /sgl-kernel @ispobock @BBuf @yizhang2077 @merrymercy @FlamingoPg @HaiShaw /sgl-kernel/csrc/musa @yeahdongcn /sgl-model-gateway @slin1237 @CatherineSue diff --git a/python/sglang/srt/entrypoints/anthropic/serving.py b/python/sglang/srt/entrypoints/anthropic/serving.py index ad59cc30a..d84614210 100644 --- a/python/sglang/srt/entrypoints/anthropic/serving.py +++ b/python/sglang/srt/entrypoints/anthropic/serving.py @@ -52,8 +52,8 @@ from sglang.srt.entrypoints.openai.protocol import ( ToolChoice, ToolChoiceFuncName, ) -from sglang.srt.managers.template_detection import detect_inline_system_support from sglang.srt.observability.req_time_stats import monotonic_time +from sglang.srt.parser.template_detection import detect_inline_system_support if TYPE_CHECKING: from sglang.srt.entrypoints.openai.serving_chat import OpenAIServingChat diff --git a/python/sglang/srt/entrypoints/engine.py b/python/sglang/srt/entrypoints/engine.py index f58dc2784..83483c515 100644 --- a/python/sglang/srt/entrypoints/engine.py +++ b/python/sglang/srt/entrypoints/engine.py @@ -88,10 +88,10 @@ from sglang.srt.managers.multi_tokenizer_mixin import ( run_multi_detokenizer_router_process, ) from sglang.srt.managers.scheduler import run_scheduler_process -from sglang.srt.managers.template_detection import resolve_auto_parsers -from sglang.srt.managers.template_manager import TemplateManager from sglang.srt.managers.tokenizer_manager import TokenizerManager from sglang.srt.observability.trace import process_tracing_init, trace_set_thread_info +from sglang.srt.parser.template_detection import resolve_auto_parsers +from sglang.srt.parser.template_manager import TemplateManager from sglang.srt.plugins import load_plugins from sglang.srt.server_args import PortArgs, ServerArgs from sglang.srt.utils import ( diff --git a/python/sglang/srt/entrypoints/http_server.py b/python/sglang/srt/entrypoints/http_server.py index 9893d3e64..ce061978a 100644 --- a/python/sglang/srt/entrypoints/http_server.py +++ b/python/sglang/srt/entrypoints/http_server.py @@ -149,7 +149,6 @@ from sglang.srt.managers.multi_tokenizer_mixin import ( read_from_shared_memory, write_data_for_multi_tokenizer, ) -from sglang.srt.managers.template_manager import TemplateManager from sglang.srt.managers.tokenizer_manager import ServerStatus, TokenizerManager from sglang.srt.observability.func_timer import enable_func_timer from sglang.srt.observability.trace import ( @@ -158,6 +157,7 @@ from sglang.srt.observability.trace import ( trace_set_thread_info, ) from sglang.srt.parser.reasoning_parser import ReasoningParser +from sglang.srt.parser.template_manager import TemplateManager from sglang.srt.server_args import PortArgs, ServerArgs from sglang.srt.utils import ( add_prometheus_middleware, diff --git a/python/sglang/srt/entrypoints/openai/serving_chat.py b/python/sglang/srt/entrypoints/openai/serving_chat.py index 2a02ac408..cea79662e 100644 --- a/python/sglang/srt/entrypoints/openai/serving_chat.py +++ b/python/sglang/srt/entrypoints/openai/serving_chat.py @@ -71,8 +71,8 @@ from sglang.srt.parser.jinja_template_utils import process_content_for_template_ from sglang.srt.parser.reasoning_parser import ReasoningParser if TYPE_CHECKING: - from sglang.srt.managers.template_manager import TemplateManager from sglang.srt.managers.tokenizer_manager import TokenizerManager + from sglang.srt.parser.template_manager import TemplateManager logger = logging.getLogger(__name__) diff --git a/python/sglang/srt/entrypoints/openai/serving_classify.py b/python/sglang/srt/entrypoints/openai/serving_classify.py index 6b2a64abb..c5feff867 100644 --- a/python/sglang/srt/entrypoints/openai/serving_classify.py +++ b/python/sglang/srt/entrypoints/openai/serving_classify.py @@ -19,8 +19,8 @@ from sglang.srt.entrypoints.openai.serving_base import OpenAIServingBase from sglang.srt.managers.io_struct import EmbeddingReqInput if TYPE_CHECKING: - from sglang.srt.managers.template_manager import TemplateManager from sglang.srt.managers.tokenizer_manager import TokenizerManager + from sglang.srt.parser.template_manager import TemplateManager logger = logging.getLogger(__name__) diff --git a/python/sglang/srt/entrypoints/openai/serving_completions.py b/python/sglang/srt/entrypoints/openai/serving_completions.py index 307d84515..0b88c1a2e 100644 --- a/python/sglang/srt/entrypoints/openai/serving_completions.py +++ b/python/sglang/srt/entrypoints/openai/serving_completions.py @@ -34,8 +34,8 @@ from sglang.srt.parser.code_completion_parser import ( from sglang.utils import convert_json_schema_to_str if TYPE_CHECKING: - from sglang.srt.managers.template_manager import TemplateManager from sglang.srt.managers.tokenizer_manager import TokenizerManager + from sglang.srt.parser.template_manager import TemplateManager logger = logging.getLogger(__name__) diff --git a/python/sglang/srt/entrypoints/openai/serving_embedding.py b/python/sglang/srt/entrypoints/openai/serving_embedding.py index 10f66cfd3..21ca3aa40 100644 --- a/python/sglang/srt/entrypoints/openai/serving_embedding.py +++ b/python/sglang/srt/entrypoints/openai/serving_embedding.py @@ -21,8 +21,8 @@ from sglang.srt.parser.conversation import generate_embedding_convs from sglang.srt.parser.jinja_template_utils import process_content_for_template_format if TYPE_CHECKING: - from sglang.srt.managers.template_manager import TemplateManager from sglang.srt.managers.tokenizer_manager import TokenizerManager + from sglang.srt.parser.template_manager import TemplateManager class OpenAIServingEmbedding(OpenAIServingBase): diff --git a/python/sglang/srt/entrypoints/openai/serving_responses.py b/python/sglang/srt/entrypoints/openai/serving_responses.py index 9d2b3fe1a..973123da7 100644 --- a/python/sglang/srt/entrypoints/openai/serving_responses.py +++ b/python/sglang/srt/entrypoints/openai/serving_responses.py @@ -74,8 +74,8 @@ from sglang.srt.parser.reasoning_parser import ReasoningParser from sglang.srt.utils import random_uuid if TYPE_CHECKING: - from sglang.srt.managers.template_manager import TemplateManager from sglang.srt.managers.tokenizer_manager import TokenizerManager + from sglang.srt.parser.template_manager import TemplateManager logger = logging.getLogger(__name__) diff --git a/python/sglang/srt/managers/template_detection.py b/python/sglang/srt/parser/template_detection.py similarity index 100% rename from python/sglang/srt/managers/template_detection.py rename to python/sglang/srt/parser/template_detection.py diff --git a/python/sglang/srt/managers/template_manager.py b/python/sglang/srt/parser/template_manager.py similarity index 99% rename from python/sglang/srt/managers/template_manager.py rename to python/sglang/srt/parser/template_manager.py index 95337ad2a..f8faabc7c 100644 --- a/python/sglang/srt/managers/template_manager.py +++ b/python/sglang/srt/parser/template_manager.py @@ -23,14 +23,6 @@ import logging import os from typing import Dict, Optional -from sglang.srt.managers.template_detection import ( - REASONING_PARSER_RULES, - TOOL_CALL_PARSER_RULES, - ReasoningToggleConfig, - build_detection_context, - detect_reasoning_pattern, - match_rules, -) from sglang.srt.managers.tokenizer_manager import TokenizerManager from sglang.srt.parser.code_completion_parser import ( CompletionTemplate, @@ -47,6 +39,14 @@ from sglang.srt.parser.conversation import ( register_conv_template, ) from sglang.srt.parser.jinja_template_utils import detect_jinja_template_content_format +from sglang.srt.parser.template_detection import ( + REASONING_PARSER_RULES, + TOOL_CALL_PARSER_RULES, + ReasoningToggleConfig, + build_detection_context, + detect_reasoning_pattern, + match_rules, +) logger = logging.getLogger(__name__) diff --git a/test/registered/unit/entrypoints/anthropic/test_serving.py b/test/registered/unit/entrypoints/anthropic/test_serving.py index 57aefedb2..a6ad8e358 100644 --- a/test/registered/unit/entrypoints/anthropic/test_serving.py +++ b/test/registered/unit/entrypoints/anthropic/test_serving.py @@ -18,7 +18,7 @@ from sglang.srt.entrypoints.openai.protocol import ( # noqa: E402 ChatCompletionRequest, ChatCompletionResponse, ) -from sglang.srt.managers.template_detection import ( # noqa: E402 +from sglang.srt.parser.template_detection import ( # noqa: E402 detect_inline_system_support, ) from sglang.test.ci.ci_register import register_cpu_ci # noqa: E402 diff --git a/test/registered/unit/entrypoints/openai/test_serving_chat.py b/test/registered/unit/entrypoints/openai/test_serving_chat.py index bebe83ddf..8dd0cc22c 100644 --- a/test/registered/unit/entrypoints/openai/test_serving_chat.py +++ b/test/registered/unit/entrypoints/openai/test_serving_chat.py @@ -28,7 +28,7 @@ from sglang.srt.entrypoints.openai.serving_chat import ( normalize_tool_content, ) from sglang.srt.managers.io_struct import GenerateReqInput -from sglang.srt.managers.template_detection import ReasoningToggleConfig +from sglang.srt.parser.template_detection import ReasoningToggleConfig from sglang.srt.utils import get_or_create_event_loop from sglang.test.ci.ci_register import register_cpu_ci @@ -1164,7 +1164,7 @@ class ServingChatTestCase(unittest.TestCase): def test_dpsk_v32_encoding_path(self): """Test DeepSeek V3.2 encoding path detection and application.""" - from sglang.srt.managers.template_manager import TemplateManager + from sglang.srt.parser.template_manager import TemplateManager # Only mock the fields that _use_dpsk_v32_encoding() actually reads: # tokenizer.chat_template and hf_config.architectures diff --git a/test/registered/unit/managers/test_template_manager.py b/test/registered/unit/parser/test_template_manager.py similarity index 99% rename from test/registered/unit/managers/test_template_manager.py rename to test/registered/unit/parser/test_template_manager.py index 2774d0d4b..32f147008 100644 --- a/test/registered/unit/managers/test_template_manager.py +++ b/test/registered/unit/parser/test_template_manager.py @@ -4,7 +4,7 @@ import unittest from types import ModuleType, SimpleNamespace from unittest.mock import Mock, patch -from sglang.srt.managers.template_detection import ( +from sglang.srt.parser.template_detection import ( REASONING_PARSER_RULES, TOOL_CALL_PARSER_RULES, ReasoningToggleConfig,