@tduncan / Nvidia-Optimization-Stack-VLLM Mirror · read-only / commits / e261d37c9a
Fork 0

A high-throughput and memory-efficient inference and serving engine for LLMs

Mirrored from https://github.com/tduncan-lum/Nvidia-Optimization-Stack---VLLM.git

Synced Nov 13, 19:30 UTC

[Refactor] Lazy-loaded reasoning_parser (#28092)

Signed-off-by: chaunceyjiang <chaunceyjiang@gmail.com>

Chauncey committed Nov 5, 2025 at 15:37 UTC e261d37c9a5e88a6c86d32decf39f1fab7ca1f2c
21 files changed +206 -99
docs/features/reasoning_outputs.md
+6 -1
@@ -219,7 +219,6 @@ You can add a new `ReasoningParser` similar to [vllm/reasoning/deepseek_r1_reaso
219 # define a reasoning parser and register it to vllm
220 # the name list in register_module can be used
221 # in --reasoning-parser.
222 - @ReasoningParserManager.register_module(["example"])
222 class ExampleParser(ReasoningParser):
223 def __init__(self, tokenizer: AnyTokenizer):
224 super().__init__(tokenizer)
@@ -263,6 +262,12 @@ You can add a new `ReasoningParser` similar to [vllm/reasoning/deepseek_r1_reaso
262 tuple[Optional[str], Optional[str]]
263 A tuple containing the reasoning content and the content.
264 """
265 + # Register the reasoning parser
266 + ReasoningParserManager.register_lazy_module(
267 + name="example",
268 + module_path="vllm.reasoning.example_reasoning_parser",
269 + class_name="ExampleParser",
270 + )
271 ```
272
273 Additionally, to enable structured output, you'll need to create a new `Reasoner` similar to the one in [vllm/reasoning/deepseek_r1_reasoning_parser.py](../../vllm/reasoning/deepseek_r1_reasoning_parser.py).
tests/reasoning/test_deepseekv3_reasoning_parser.py
+3 -5
@@ -5,11 +5,9 @@ import pytest
5 from transformers import AutoTokenizer
6
7 from vllm.entrypoints.openai.protocol import ChatCompletionRequest, DeltaMessage
8 -from vllm.reasoning import (
9 - DeepSeekR1ReasoningParser,
10 - DeepSeekV3ReasoningParser,
11 - IdentityReasoningParser,
12 -)
8 +from vllm.reasoning.deepseek_r1_reasoning_parser import DeepSeekR1ReasoningParser
9 +from vllm.reasoning.deepseek_v3_reasoning_parser import DeepSeekV3ReasoningParser
10 +from vllm.reasoning.identity_reasoning_parser import IdentityReasoningParser
11
12 REASONING_MODEL_NAME = "deepseek-ai/DeepSeek-V3.1"
13
vllm/engine/arg_utils.py
+1 -1
@@ -708,7 +708,7 @@ class EngineArgs:
708 structured_outputs_group.add_argument(
709 "--reasoning-parser",
710 # This choice is a special case because it's not static
711 - choices=list(ReasoningParserManager.reasoning_parsers),
711 + choices=list(ReasoningParserManager.list_registered()),
712 **structured_outputs_kwargs["reasoning_parser"],
713 )
714 # Deprecated guided decoding arguments
vllm/entrypoints/openai/api_server.py
+1 -1
@@ -1944,7 +1944,7 @@ def validate_api_server_args(args):
1944 f"(chose from {{ {','.join(valid_tool_parses)} }})"
1945 )
1946
1947 - valid_reasoning_parses = ReasoningParserManager.reasoning_parsers.keys()
1947 + valid_reasoning_parses = ReasoningParserManager.list_registered()
1948 if (
1949 reasoning_parser := args.structured_outputs_config.reasoning_parser
1950 ) and reasoning_parser not in valid_reasoning_parses:
vllm/entrypoints/openai/run_batch.py
+1 -1
@@ -334,7 +334,7 @@ async def run_request(
334
335
336 def validate_run_batch_args(args):
337 - valid_reasoning_parses = ReasoningParserManager.reasoning_parsers.keys()
337 + valid_reasoning_parses = ReasoningParserManager.list_registered()
338 if (
339 reasoning_parser := args.structured_outputs_config.reasoning_parser
340 ) and reasoning_parser not in valid_reasoning_parses:
vllm/entrypoints/openai/tool_parsers/__init__.py
+3 -3
@@ -72,7 +72,7 @@ _TOOL_PARSERS_TO_REGISTER = {
72 ),
73 "llama4_json": (
74 "llama_tool_parser",
75 - "Llama4JsonToolParser",
75 + "Llama3JsonToolParser",
76 ),
77 "llama4_pythonic": (
78 "llama4_pythonic_tool_parser",
@@ -116,11 +116,11 @@ _TOOL_PARSERS_TO_REGISTER = {
116 ),
117 "qwen3_xml": (
118 "qwen3xml_tool_parser",
119 - "Qwen3XmlToolParser",
119 + "Qwen3XMLToolParser",
120 ),
121 "seed_oss": (
122 "seed_oss_tool_parser",
123 - "SeedOsSToolParser",
123 + "SeedOssToolParser",
124 ),
125 "step3": (
126 "step3_tool_parser",
vllm/reasoning/__init__.py
+80 -31
@@ -1,39 +1,88 @@
1 # SPDX-License-Identifier: Apache-2.0
2 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3
4 -from .abs_reasoning_parsers import ReasoningParser, ReasoningParserManager
5 -from .basic_parsers import BaseThinkingReasoningParser
6 -from .deepseek_r1_reasoning_parser import DeepSeekR1ReasoningParser
7 -from .deepseek_v3_reasoning_parser import DeepSeekV3ReasoningParser
8 -from .ernie45_reasoning_parser import Ernie45ReasoningParser
9 -from .glm4_moe_reasoning_parser import Glm4MoeModelReasoningParser
10 -from .gptoss_reasoning_parser import GptOssReasoningParser
11 -from .granite_reasoning_parser import GraniteReasoningParser
12 -from .hunyuan_a13b_reasoning_parser import HunyuanA13BReasoningParser
13 -from .identity_reasoning_parser import IdentityReasoningParser
14 -from .minimax_m2_reasoning_parser import MiniMaxM2ReasoningParser
15 -from .mistral_reasoning_parser import MistralReasoningParser
16 -from .olmo3_reasoning_parser import Olmo3ReasoningParser
17 -from .qwen3_reasoning_parser import Qwen3ReasoningParser
18 -from .seedoss_reasoning_parser import SeedOSSReasoningParser
19 -from .step3_reasoning_parser import Step3ReasoningParser
4 +from vllm.reasoning.abs_reasoning_parsers import ReasoningParser, ReasoningParserManager
5
6 __all__ = [
7 "ReasoningParser",
23 - "BaseThinkingReasoningParser",
8 "ReasoningParserManager",
25 - "DeepSeekR1ReasoningParser",
26 - "IdentityReasoningParser",
27 - "DeepSeekV3ReasoningParser",
28 - "Ernie45ReasoningParser",
29 - "GraniteReasoningParser",
30 - "HunyuanA13BReasoningParser",
31 - "Qwen3ReasoningParser",
32 - "Glm4MoeModelReasoningParser",
33 - "MistralReasoningParser",
34 - "Olmo3ReasoningParser",
35 - "Step3ReasoningParser",
36 - "GptOssReasoningParser",
37 - "SeedOSSReasoningParser",
38 - "MiniMaxM2ReasoningParser",
9 ]
10 +"""
11 +Register a lazy module mapping.
12 +
13 +Example:
14 + ReasoningParserManager.register_lazy_module(
15 + name="qwen3",
16 + module_path="vllm.reasoning.qwen3_reasoning_parser",
17 + class_name="Qwen3ReasoningParser",
18 + )
19 +"""
20 +
21 +
22 +_REASONING_PARSERS_TO_REGISTER = {
23 + "deepseek_r1": ( # name
24 + "deepseek_r1_reasoning_parser", # filename
25 + "DeepSeekR1ReasoningParser", # class_name
26 + ),
27 + "deepseek_v3": (
28 + "deepseek_v3_reasoning_parser",
29 + "DeepSeekV3ReasoningParser",
30 + ),
31 + "ernie45": (
32 + "ernie45_reasoning_parser",
33 + "Ernie45ReasoningParser",
34 + ),
35 + "glm45": (
36 + "glm4_moe_reasoning_parser",
37 + "Glm4MoeModelReasoningParser",
38 + ),
39 + "openai_gptoss": (
40 + "gptoss_reasoning_parser",
41 + "GptOssReasoningParser",
42 + ),
43 + "granite": (
44 + "granite_reasoning_parser",
45 + "GraniteReasoningParser",
46 + ),
47 + "hunyuan_a13b": (
48 + "hunyuan_a13b_reasoning_parser",
49 + "HunyuanA13BReasoningParser",
50 + ),
51 + "minimax_m2": (
52 + "minimax_m2_reasoning_parser",
53 + "MiniMaxM2ReasoningParser",
54 + ),
55 + "minimax_m2_append_think": (
56 + "minimax_m2_reasoning_parser",
57 + "MiniMaxM2AppendThinkReasoningParser",
58 + ),
59 + "mistral": (
60 + "mistral_reasoning_parser",
61 + "MistralReasoningParser",
62 + ),
63 + "olmo3": (
64 + "olmo3_reasoning_parser",
65 + "Olmo3ReasoningParser",
66 + ),
67 + "qwen3": (
68 + "qwen3_reasoning_parser",
69 + "Qwen3ReasoningParser",
70 + ),
71 + "seed_oss": (
72 + "seedoss_reasoning_parser",
73 + "SeedOSSReasoningParser",
74 + ),
75 + "step3": (
76 + "step3_reasoning_parser",
77 + "Step3ReasoningParser",
78 + ),
79 +}
80 +
81 +
82 +def register_lazy_reasoning_parsers():
83 + for name, (file_name, class_name) in _REASONING_PARSERS_TO_REGISTER.items():
84 + module_path = f"vllm.reasoning.{file_name}"
85 + ReasoningParserManager.register_lazy_module(name, module_path, class_name)
86 +
87 +
88 +register_lazy_reasoning_parsers()
vllm/reasoning/abs_reasoning_parsers.py
+102 -29
@@ -1,6 +1,7 @@
1 # SPDX-License-Identifier: Apache-2.0
2 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3
4 +import importlib
5 import os
6 from abc import abstractmethod
7 from collections.abc import Callable, Sequence
@@ -129,50 +130,117 @@ class ReasoningParser:
130
131
132 class ReasoningParserManager:
132 - reasoning_parsers: dict[str, type] = {}
133 + """
134 + Central registry for ReasoningParser implementations.
135 +
136 + Supports two registration modes:
137 + - Eager registration via `register_module`
138 + - Lazy registration via `register_lazy_module`
139 +
140 + Each reasoning parser must inherit from `ReasoningParser`.
141 + """
142 +
143 + reasoning_parsers: dict[str, type[ReasoningParser]] = {}
144 + lazy_parsers: dict[str, tuple[str, str]] = {} # name -> (module_path, class_name)
145
146 @classmethod
135 - def get_reasoning_parser(cls, name: str | None) -> type[ReasoningParser]:
147 + def get_reasoning_parser(cls, name: str) -> type[ReasoningParser]:
148 """
137 - Get reasoning parser by name which is registered by `register_module`.
149 + Retrieve a registered or lazily registered ReasoningParser class.
150 +
151 + If the parser is lazily registered, it will be imported and cached
152 + on first access.
153
139 - Raise a KeyError exception if the name is not registered.
154 + Raises:
155 + KeyError: if no parser is found under the given name.
156 """
157 if name in cls.reasoning_parsers:
158 return cls.reasoning_parsers[name]
159
144 - raise KeyError(f"reasoning helper: '{name}' not found in reasoning_parsers")
160 + if name in cls.lazy_parsers:
161 + return cls._load_lazy_parser(name)
162 +
163 + raise KeyError(f"Reasoning parser '{name}' not found.")
164 +
165 + @classmethod
166 + def list_registered(cls) -> list[str]:
167 + """Return names of all eagerly and lazily registered reasoning parsers."""
168 + return sorted(set(cls.reasoning_parsers.keys()) | set(cls.lazy_parsers.keys()))
169 +
170 + @classmethod
171 + def _load_lazy_parser(cls, name: str) -> type[ReasoningParser]:
172 + """Import and register a lazily loaded reasoning parser."""
173 + module_path, class_name = cls.lazy_parsers[name]
174 + try:
175 + mod = importlib.import_module(module_path)
176 + parser_cls = getattr(mod, class_name)
177 + if not issubclass(parser_cls, ReasoningParser):
178 + raise TypeError(
179 + f"{class_name} in {module_path} is not a ReasoningParser subclass."
180 + )
181 +
182 + cls.reasoning_parsers[name] = parser_cls # cache
183 + return parser_cls
184 + except Exception as e:
185 + logger.exception(
186 + "Failed to import lazy reasoning parser '%s' from %s: %s",
187 + name,
188 + module_path,
189 + e,
190 + )
191 + raise
192
193 @classmethod
194 def _register_module(
195 cls,
149 - module: type,
196 + module: type[ReasoningParser],
197 module_name: str | list[str] | None = None,
198 force: bool = True,
199 ) -> None:
200 + """Register a ReasoningParser class immediately."""
201 if not issubclass(module, ReasoningParser):
202 raise TypeError(
203 f"module must be subclass of ReasoningParser, but got {type(module)}"
204 )
205 +
206 if module_name is None:
158 - module_name = module.__name__
159 - if isinstance(module_name, str):
160 - module_name = [module_name]
161 - for name in module_name:
207 + module_names = [module.__name__]
208 + elif isinstance(module_name, str):
209 + module_names = [module_name]
210 + elif is_list_of(module_name, str):
211 + module_names = module_name
212 + else:
213 + raise TypeError("module_name must be str, list[str], or None.")
214 +
215 + for name in module_names:
216 if not force and name in cls.reasoning_parsers:
163 - existed_module = cls.reasoning_parsers[name]
164 - raise KeyError(
165 - f"{name} is already registered at {existed_module.__module__}"
166 - )
217 + existed = cls.reasoning_parsers[name]
218 + raise KeyError(f"{name} is already registered at {existed.__module__}")
219 cls.reasoning_parsers[name] = module
220
221 + @classmethod
222 + def register_lazy_module(cls, name: str, module_path: str, class_name: str) -> None:
223 + """
224 + Register a lazy module mapping for delayed import.
225 +
226 + Example:
227 + ReasoningParserManager.register_lazy_module(
228 + name="qwen3",
229 + module_path="vllm.reasoning.parsers.qwen3_reasoning_parser",
230 + class_name="Qwen3ReasoningParser",
231 + )
232 + """
233 + cls.lazy_parsers[name] = (module_path, class_name)
234 +
235 @classmethod
236 def register_module(
237 cls,
238 name: str | list[str] | None = None,
239 force: bool = True,
174 - module: type | None = None,
175 - ) -> type | Callable:
240 + module: type[ReasoningParser] | None = None,
241 + ) -> (
242 + type[ReasoningParser] | Callable[[type[ReasoningParser]], type[ReasoningParser]]
243 + ):
244 """
245 Register module with the given name or name list. it can be used as a
246 decoder(with module as None) or normal function(with module as not
@@ -181,24 +249,29 @@ class ReasoningParserManager:
249 if not isinstance(force, bool):
250 raise TypeError(f"force must be a boolean, but got {type(force)}")
251
184 - # raise the error ahead of time
185 - if not (name is None or isinstance(name, str) or is_list_of(name, str)):
186 - raise TypeError(
187 - "name must be None, an instance of str, or a sequence of str, "
188 - f"but got {type(name)}"
189 - )
190 -
191 - # use it as a normal method: x.register_module(module=SomeClass)
252 + # Immediate registration (explicit call)
253 if module is not None:
254 cls._register_module(module=module, module_name=name, force=force)
255 return module
256
196 - # use it as a decorator: @x.register_module()
197 - def _register(module):
198 - cls._register_module(module=module, module_name=name, force=force)
199 - return module
257 + # Decorator usage
258 + def _decorator(obj: type[ReasoningParser]) -> type[ReasoningParser]:
259 + module_path = obj.__module__
260 + class_name = obj.__name__
261 +
262 + if isinstance(name, str):
263 + names = [name]
264 + elif is_list_of(name, str):
265 + names = name
266 + else:
267 + names = [class_name]
268 +
269 + for n in names:
270 + cls.lazy_parsers[n] = (module_path, class_name)
271 +
272 + return obj
273
201 - return _register
274 + return _decorator
275
276 @classmethod
277 def import_reasoning_parser(cls, plugin_path: str) -> None:
vllm/reasoning/deepseek_r1_reasoning_parser.py
-2
@@ -4,11 +4,9 @@
4 from collections.abc import Sequence
5
6 from vllm.entrypoints.openai.protocol import DeltaMessage
7 -from vllm.reasoning.abs_reasoning_parsers import ReasoningParserManager
7 from vllm.reasoning.basic_parsers import BaseThinkingReasoningParser
8
9
11 -@ReasoningParserManager.register_module("deepseek_r1")
10 class DeepSeekR1ReasoningParser(BaseThinkingReasoningParser):
11 """
12 Reasoning parser for DeepSeek R1 model.
vllm/reasoning/deepseek_v3_reasoning_parser.py
-2
@@ -10,7 +10,6 @@ from vllm.logger import init_logger
10 from vllm.reasoning import (
11 DeepSeekR1ReasoningParser,
12 ReasoningParser,
13 - ReasoningParserManager,
13 )
14
15 from .identity_reasoning_parser import IdentityReasoningParser
@@ -18,7 +17,6 @@ from .identity_reasoning_parser import IdentityReasoningParser
17 logger = init_logger(__name__)
18
19
21 -@ReasoningParserManager.register_module("deepseek_v3")
20 class DeepSeekV3ReasoningParser(ReasoningParser):
21 """
22 V3 parser that delegates to either DeepSeekR1ReasoningParser or
vllm/reasoning/ernie45_reasoning_parser.py
-2
@@ -7,13 +7,11 @@ from transformers import PreTrainedTokenizerBase
7
8 from vllm.entrypoints.openai.protocol import ChatCompletionRequest, DeltaMessage
9 from vllm.logger import init_logger
10 -from vllm.reasoning import ReasoningParserManager
10 from vllm.reasoning.basic_parsers import BaseThinkingReasoningParser
11
12 logger = init_logger(__name__)
13
14
16 -@ReasoningParserManager.register_module("ernie45")
15 class Ernie45ReasoningParser(BaseThinkingReasoningParser):
16 """
17 Reasoning parser for Ernie45 thinking model.
vllm/reasoning/glm4_moe_reasoning_parser.py
+1 -2
@@ -7,12 +7,11 @@ from transformers import PreTrainedTokenizerBase
7
8 from vllm.entrypoints.openai.protocol import ChatCompletionRequest, DeltaMessage
9 from vllm.logger import init_logger
10 -from vllm.reasoning import ReasoningParser, ReasoningParserManager
10 +from vllm.reasoning import ReasoningParser
11
12 logger = init_logger(__name__)
13
14
15 -@ReasoningParserManager.register_module("glm45")
15 class Glm4MoeModelReasoningParser(ReasoningParser):
16 """
17 Reasoning parser for the Glm4MoeModel model.
vllm/reasoning/gptoss_reasoning_parser.py
+1 -2
@@ -9,7 +9,7 @@ from vllm.entrypoints.harmony_utils import parse_chat_output
9 from vllm.entrypoints.openai.protocol import ChatCompletionRequest, DeltaMessage
10 from vllm.entrypoints.tool_server import ToolServer
11 from vllm.logger import init_logger
12 -from vllm.reasoning import ReasoningParser, ReasoningParserManager
12 +from vllm.reasoning import ReasoningParser
13
14 logger = init_logger(__name__)
15
@@ -57,7 +57,6 @@ def tag_with_builtin_funcs(no_func_reaonsing_tag, builtin_tool_list: list[str])
57 return new_tag
58
59
60 -@ReasoningParserManager.register_module("openai_gptoss")
60 class GptOssReasoningParser(ReasoningParser):
61 """
62 Reasoning parser for GptOss model.
vllm/reasoning/granite_reasoning_parser.py
+1 -2
@@ -8,12 +8,11 @@ from transformers import PreTrainedTokenizerBase
8
9 from vllm.entrypoints.openai.protocol import ChatCompletionRequest, DeltaMessage
10 from vllm.logger import init_logger
11 -from vllm.reasoning import ReasoningParser, ReasoningParserManager
11 +from vllm.reasoning import ReasoningParser
12
13 logger = init_logger(__name__)
14
15
16 -@ReasoningParserManager.register_module("granite")
16 class GraniteReasoningParser(ReasoningParser):
17 """
18 Reasoning parser for IBM Granite.
vllm/reasoning/hunyuan_a13b_reasoning_parser.py
+1 -2
@@ -8,12 +8,11 @@ from transformers import PreTrainedTokenizerBase
8
9 from vllm.entrypoints.openai.protocol import ChatCompletionRequest, DeltaMessage
10 from vllm.logger import init_logger
11 -from vllm.reasoning import ReasoningParser, ReasoningParserManager
11 +from vllm.reasoning import ReasoningParser
12
13 logger = init_logger(__name__)
14
15
16 -@ReasoningParserManager.register_module("hunyuan_a13b")
16 class HunyuanA13BReasoningParser(ReasoningParser):
17 """
18 Reasoning parser for Hunyuan A13B Model
vllm/reasoning/minimax_m2_reasoning_parser.py
+1 -3
@@ -9,14 +9,13 @@ from vllm.entrypoints.openai.protocol import (
9 ResponsesRequest,
10 )
11 from vllm.logger import init_logger
12 -from vllm.reasoning.abs_reasoning_parsers import ReasoningParser, ReasoningParserManager
12 +from vllm.reasoning.abs_reasoning_parsers import ReasoningParser
13 from vllm.reasoning.basic_parsers import BaseThinkingReasoningParser
14 from vllm.transformers_utils.tokenizer import AnyTokenizer
15
16 logger = init_logger(__name__)
17
18
19 -@ReasoningParserManager.register_module("minimax_m2")
19 class MiniMaxM2ReasoningParser(BaseThinkingReasoningParser):
20 """
21 Reasoning parser for MiniMax M2 model.
@@ -33,7 +32,6 @@ class MiniMaxM2ReasoningParser(BaseThinkingReasoningParser):
32 return "</think>"
33
34
36 -@ReasoningParserManager.register_module("minimax_m2_append_think")
35 class MiniMaxM2AppendThinkReasoningParser(ReasoningParser):
36 """
37 Reasoning parser for MiniMax M2 model.
vllm/reasoning/mistral_reasoning_parser.py
+1 -2
@@ -4,14 +4,13 @@
4 from functools import cached_property
5
6 from vllm.logger import init_logger
7 -from vllm.reasoning import ReasoningParser, ReasoningParserManager
7 +from vllm.reasoning import ReasoningParser
8 from vllm.reasoning.deepseek_r1_reasoning_parser import DeepSeekR1ReasoningParser
9 from vllm.transformers_utils.tokenizers.mistral import MistralTokenizer
10
11 logger = init_logger(__name__)
12
13
14 -@ReasoningParserManager.register_module("mistral")
14 class MistralReasoningParser(DeepSeekR1ReasoningParser):
15 """
16 Reasoning parser for Mistral models.
vllm/reasoning/olmo3_reasoning_parser.py
+1 -2
@@ -17,7 +17,7 @@ from vllm.entrypoints.openai.protocol import (
17 ResponsesRequest,
18 )
19 from vllm.logger import init_logger
20 -from vllm.reasoning import ReasoningParser, ReasoningParserManager
20 +from vllm.reasoning import ReasoningParser
21
22 logger = init_logger(__name__)
23
@@ -192,7 +192,6 @@ class Olmo3ReasoningBuffer:
192 return delta_message
193
194
195 -@ReasoningParserManager.register_module("olmo3")
195 class Olmo3ReasoningParser(ReasoningParser):
196 """
197 Reasoning parser for Olmo 3 model
vllm/reasoning/qwen3_reasoning_parser.py
-2
@@ -3,11 +3,9 @@
3
4
5 from vllm.entrypoints.openai.protocol import ChatCompletionRequest, ResponsesRequest
6 -from vllm.reasoning.abs_reasoning_parsers import ReasoningParserManager
6 from vllm.reasoning.basic_parsers import BaseThinkingReasoningParser
7
8
10 -@ReasoningParserManager.register_module("qwen3")
9 class Qwen3ReasoningParser(BaseThinkingReasoningParser):
10 """
11 Reasoning parser for the Qwen3 model.
vllm/reasoning/seedoss_reasoning_parser.py
+1 -2
@@ -1,11 +1,10 @@
1 # SPDX-License-Identifier: Apache-2.0
2 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3
4 -from vllm.reasoning.abs_reasoning_parsers import ReasoningParserManager
4 +
5 from vllm.reasoning.basic_parsers import BaseThinkingReasoningParser
6
7
8 -@ReasoningParserManager.register_module("seed_oss")
8 class SeedOSSReasoningParser(BaseThinkingReasoningParser):
9 """
10 Reasoning parser for SeedOSS model.
vllm/reasoning/step3_reasoning_parser.py
+1 -2
@@ -8,12 +8,11 @@ from transformers import PreTrainedTokenizerBase
8
9 from vllm.entrypoints.openai.protocol import ChatCompletionRequest, DeltaMessage
10 from vllm.logger import init_logger
11 -from vllm.reasoning import ReasoningParser, ReasoningParserManager
11 +from vllm.reasoning import ReasoningParser
12
13 logger = init_logger(__name__)
14
15
16 -@ReasoningParserManager.register_module("step3")
16 class Step3ReasoningParser(ReasoningParser):
17 """
18 Reasoning parser for Step3 model.