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.