vllm.reasoning
模块:
__all__ module-attribute ¶
__all__ = [
"ReasoningParser",
"ReasoningParserManager",
"DeepSeekR1ReasoningParser",
"GraniteReasoningParser",
"HunyuanA13BReasoningParser",
"Qwen3ReasoningParser",
"Glm4MoeModelReasoningParser",
"MistralReasoningParser",
"Step3ReasoningParser",
]
DeepSeekR1推理解析器 ¶
基础类: ReasoningParser
DeepSeek R1模型的推理解析器。
DeepSeek R1模型使用
Source code in vllm/reasoning/deepseek_r1_reasoning_parser.py
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 | |
__init__ ¶
Source code in vllm/reasoning/deepseek_r1_reasoning_parser.py
extract_content_ids ¶
提取结束标记后的内容
Source code in vllm/reasoning/deepseek_r1_reasoning_parser.py
extract_reasoning_content ¶
extract_reasoning_content(
model_output: str, request: ChatCompletionRequest
) -> tuple[Optional[str], Optional[str]]
从模型输出中提取推理内容。
对于文本
返回:
| 类型 | 描述 |
|---|---|
tuple[Optional[str], Optional[str]] | tuple[Optional[str], Optional[str]]: 推理内容和内容 |
Source code in vllm/reasoning/deepseek_r1_reasoning_parser.py
extract_reasoning_content_streaming ¶
extract_reasoning_content_streaming(
previous_text: str,
current_text: str,
delta_text: str,
previous_token_ids: Sequence[int],
current_token_ids: Sequence[int],
delta_token_ids: Sequence[int],
) -> Union[DeltaMessage, None]
从增量消息中提取推理内容。处理流式输出,其中"previous + delta = current"。使用token ID以实现更快的处理速度。对于文本
Source code in vllm/reasoning/deepseek_r1_reasoning_parser.py
Glm4MoeModelReasoningParser ¶
基类: ReasoningParser
Glm4MoeModel模型的推理解析器。
Glm4MoeModel模型使用
Source code in vllm/reasoning/glm4_moe_reasoning_parser.py
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | |
__init__ ¶
Source code in vllm/reasoning/glm4_moe_reasoning_parser.py
extract_content_ids ¶
提取结束标记后的内容
Source code in vllm/reasoning/glm4_moe_reasoning_parser.py
extract_reasoning_content ¶
extract_reasoning_content(
model_output: str, request: ChatCompletionRequest
) -> tuple[Optional[str], Optional[str]]
从模型输出中提取推理内容。
对于文本
返回:
| 类型 | 描述 |
|---|---|
tuple[Optional[str], Optional[str]] | tuple[Optional[str], Optional[str]]: 推理内容和内容 |
Source code in vllm/reasoning/glm4_moe_reasoning_parser.py
extract_reasoning_content_streaming ¶
extract_reasoning_content_streaming(
previous_text: str,
current_text: str,
delta_text: str,
previous_token_ids: Sequence[int],
current_token_ids: Sequence[int],
delta_token_ids: Sequence[int],
) -> Union[DeltaMessage, None]
从增量消息中提取推理内容。处理流式输出,其中"previous + delta = current"。使用token ID以加速处理。对于文本
Source code in vllm/reasoning/glm4_moe_reasoning_parser.py
GraniteReasoningParser ¶
基础类: ReasoningParser
IBM Granite的推理解析器。
IBM granite模型目前使用"Here is my thought process:"和"Here is my response:"来分隔其思考/响应输出。
Source code in vllm/reasoning/granite_reasoning_parser.py
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 | |
longest_think_start instance-attribute ¶
reasoning_regex instance-attribute ¶
valid_response_starts instance-attribute ¶
valid_think_starts instance-attribute ¶
__init__ ¶
Source code in vllm/reasoning/granite_reasoning_parser.py
_get_content_sections ¶
解析文本以提取推理内容/内容(如果存在)。
参数:
| 名称 | 类型 | 描述 | 默认值 |
|---|---|---|---|
current_text | str | 完整的先前文本 + 差异文本。 | required |
返回:
| 类型 | 描述 |
|---|---|
Optional[str] | tuple[Optional[str], Optional[int], Optional[str]]: 长度为3的元组 |
Optional[int] | 包含推理内容,响应序列的长度 |
Optional[str] | (如果有的话)以及非推理内容。 |
Source code in vllm/reasoning/granite_reasoning_parser.py
_get_delta_message_with_both_bounds ¶
_get_delta_message_with_both_bounds(
delta_text: str,
reasoning_content: str,
response_content: str,
current_text: str,
response_seq_len: int,
) -> DeltaMessage
解析当前文本同时包含推理内容和普通(响应)内容时的增量消息。
参数:
| 名称 | 类型 | 描述 | 默认值 |
|---|---|---|---|
delta_text | str | 需要解析内容的文本。 | required |
reasoning_content | str | 从current_text中推理内容。 | required |
response_content | str | 当前文本的响应内容。 | required |
current_text | str | 完整的先前文本 + 差异文本。 | required |
response_seq_len(str) | 所使用的完整响应序列的长度。 | required |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
DeltaMessage | DeltaMessage | 包含解析后内容的消息。 |
Source code in vllm/reasoning/granite_reasoning_parser.py
_get_delta_message_with_no_reasoning_bounds ¶
_get_delta_message_with_no_reasoning_bounds(
current_text: str, delta_text: str
) -> DeltaMessage
在当前文本尚未完成其推理序列开始时解析增量消息。
参数:
| 名称 | 类型 | 描述 | 默认值 |
|---|---|---|---|
current_text | str | 完整的先前文本 + 差异文本。 | required |
delta_text | str | 需要解析和处理的文本内容。 | required |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
DeltaMessage | DeltaMessage | 包含解析后内容的消息。 |
Source code in vllm/reasoning/granite_reasoning_parser.py
_get_delta_message_with_no_response_bounds ¶
_get_delta_message_with_no_response_bounds(
current_text: str,
reasoning_content: str,
delta_text: str,
) -> DeltaMessage
解析当前文本同时包含推理内容但无(响应)内容时的增量消息。注意,增量文本的两侧可能存在与推理开始/响应开始序列重叠的标记。
参数:
| 名称 | 类型 | 描述 | 默认值 |
|---|---|---|---|
current_text | str | 完整的上文 + 差异文本。 | required |
reasoning_content | str | 从current_text中推理内容。 | required |
delta_text | str | 需要解析和处理的文本内容。 | required |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
DeltaMessage | DeltaMessage | 包含解析后内容的消息。 |
Source code in vllm/reasoning/granite_reasoning_parser.py
_is_reasoning_start_substr ¶
检查文本是否匹配其中一个可能的开始推理序列。
参数:
| 名称 | 类型 | 描述 | 默认值 |
|---|---|---|---|
text | str | 检查文本是否以指定子字符串开头。 | required |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool | bool | 如果任何可能的原因起始序列匹配,则为True。 |
Source code in vllm/reasoning/granite_reasoning_parser.py
_is_response_start_substr ¶
检查文本是否匹配可能的起始响应序列之一。
参数:
| 名称 | 类型 | 描述 | 默认值 |
|---|---|---|---|
text | str | 检查文本是否以指定子字符串开头。 | required |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool | bool | 如果任何可能的响应起始序列匹配,则为True。 |
Source code in vllm/reasoning/granite_reasoning_parser.py
extract_reasoning_content ¶
extract_reasoning_content(
model_output: str, request: ChatCompletionRequest
) -> tuple[Optional[str], Optional[str]]
分别提取推理内容和非推理内容部分。如果序列不符合预期(即模型生成了其他内容),则所有内容都将视为非推理内容。
参数:
| 名称 | 类型 | 描述 | 默认值 |
|---|---|---|---|
model_output | str | 需要解析的模型输出。 | required |
request | ChatCompletionRequest | 请求正在处理中。 | required |
返回:
| 类型 | 描述 |
|---|---|
Optional[str] | tuple[Optional[str], Optional[str]]: 包含的元组对 |
Optional[str] | 推理内容与非推理内容。 |
Source code in vllm/reasoning/granite_reasoning_parser.py
extract_reasoning_content_streaming ¶
extract_reasoning_content_streaming(
previous_text: str,
current_text: str,
delta_text: str,
previous_token_ids: Sequence[int],
current_token_ids: Sequence[int],
delta_token_ids: Sequence[int],
) -> Union[DeltaMessage, None]
提取granite模型输出的推理内容/生成内容;如果序列不符合预期(即模型生成了其他内容),则所有内容均视为非推理内容。
注意:Granite模型不使用特殊标记来开始其推理和响应部分;而是采用标记序列,例如,
Here is my thought process: Foo Here is my response: Bar
这增加了正确处理流的复杂性,因为我们需要监视特定的序列并正确解析它们,而不会丢弃可能重叠并跨越多个增量消息的内容。
参数:
| 名称 | 类型 | 描述 | 默认值 |
|---|---|---|---|
previous_text | str | 此差异消息之前的文本内容。 | required |
current_text | str | 前文 + 增量文本。 | required |
delta_text | str | 需要解析内容的文本。 | required |
previous_token_ids | Sequence[int] | previous_text的Token ID。 | required |
current_token_ids | Sequence[int] | 当前文本的Token ID。 | required |
delta_token_ids | Sequence[int] | delta_text的令牌ID。 | required |
返回:
| 类型 | 描述 |
|---|---|
Union[DeltaMessage, None] | Union[DeltaMessage, None] 包含推理内容或内容的DeltaMessage,或None。 |
Source code in vllm/reasoning/granite_reasoning_parser.py
HunyuanA13B推理解析器 ¶
基类: ReasoningParser
Reasoning parser for Hunyuan A13B Model
HunyuanReasoningParser
This class implements a reasoning parser specifically designed
for the Hunyuan A13B Model. It is responsible for parsing and
extracting structured reasoning and answer segments from model
outputs that follow a specific pattern.
Key Features:
- For non-stream output , Recognizes and extracts reasoning ("think")
and answer ("answer") sections from text using regular expressions.
- For stream process, it require a token id sequences to change the
reasoning state and other state so it maintains internal state to
manage parsing across multiple token.
think start: "<think>
": [14023, 771, 397] 思考结束: "
Source code in vllm/reasoning/hunyuan_a13b_reasoning_parser.py
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 | |
fast_think_ids instance-attribute ¶
full_match_reasoning_regex instance-attribute ¶
full_match_reasoning_regex = compile(
f"(?:{think_start_expr}(.*?){response_start_expr})?(.*?){response_end_expr}",
DOTALL,
)
half_match_reasoning_regex instance-attribute ¶
half_match_reasoning_regex = compile(
f"{think_start_expr}(.*?){response_start_expr}(.*)",
DOTALL,
)
response_start_ids_fast instance-attribute ¶
__init__ ¶
Source code in vllm/reasoning/hunyuan_a13b_reasoning_parser.py
_is_strict_increasing_subsequence ¶
Source code in vllm/reasoning/hunyuan_a13b_reasoning_parser.py
extract_content_ids ¶
Source code in vllm/reasoning/hunyuan_a13b_reasoning_parser.py
extract_reasoning_content ¶
extract_reasoning_content(
model_output: str, request: ChatCompletionRequest
) -> tuple[Optional[str], Optional[str]]
分别提取推理内容和非推理内容部分。如果序列不符合预期(即模型生成了其他内容),则所有内容都将视为非推理内容。
参数:
| 名称 | 类型 | 描述 | 默认值 |
|---|---|---|---|
model_output | str | 需要解析的模型输出。 | required |
request | ChatCompletionRequest | 请求正在处理中。 | required |
返回:
| 类型 | 描述 |
|---|---|
Optional[str] | tuple[Optional[str], Optional[str]]: 包含的元组对 |
Optional[str] | 推理内容与非推理内容。 |
Source code in vllm/reasoning/hunyuan_a13b_reasoning_parser.py
extract_reasoning_content_streaming ¶
extract_reasoning_content_streaming(
previous_text: str,
current_text: str,
delta_text: str,
previous_token_ids: Sequence[int],
current_token_ids: Sequence[int],
delta_token_ids: Sequence[int],
) -> Union[DeltaMessage, None]
使用token ID序列状态机提取内容
Source code in vllm/reasoning/hunyuan_a13b_reasoning_parser.py
147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 | |
MistralReasoningParser ¶
基础类: DeepSeekR1ReasoningParser
Mistral模型的推理解析器。
Mistral模型使用[THINK]...[/THINK]标记来表示推理文本。该解析器从模型输出中提取推理内容。
Source code in vllm/reasoning/mistral_reasoning_parser.py
__init__ ¶
__init__(tokenizer: MistralTokenizer)
Source code in vllm/reasoning/mistral_reasoning_parser.py
Qwen3推理解析器 ¶
基类: ReasoningParser
Qwen3模型的推理解析器。
Qwen3模型使用
Source code in vllm/reasoning/qwen3_reasoning_parser.py
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | |
__init__ ¶
Source code in vllm/reasoning/qwen3_reasoning_parser.py
extract_content_ids ¶
提取结束标记后的内容
Source code in vllm/reasoning/qwen3_reasoning_parser.py
extract_reasoning_content ¶
extract_reasoning_content(
model_output: str, request: ChatCompletionRequest
) -> tuple[Optional[str], Optional[str]]
从模型输出中提取推理内容。
对于文本
返回:
| 类型 | 描述 |
|---|---|
tuple[Optional[str], Optional[str]] | tuple[Optional[str], Optional[str]]: 推理内容和内容 |
Source code in vllm/reasoning/qwen3_reasoning_parser.py
extract_reasoning_content_streaming ¶
extract_reasoning_content_streaming(
previous_text: str,
current_text: str,
delta_text: str,
previous_token_ids: Sequence[int],
current_token_ids: Sequence[int],
delta_token_ids: Sequence[int],
) -> Union[DeltaMessage, None]
从增量消息中提取推理内容。处理流式输出,其中"previous + delta = current"。使用token ID以加速处理。对于文本
Source code in vllm/reasoning/qwen3_reasoning_parser.py
ReasoningParser ¶
不应直接使用的抽象推理解析器类。提供的方法应在派生类中使用。
它用于从模型输出中提取推理内容。
Source code in vllm/reasoning/abs_reasoning_parsers.py
__init__ ¶
__init__(tokenizer: AnyTokenizer)
extract_content_ids abstractmethod ¶
从input_ids中提取内容token id。参数:input_ids: list[int] 模型输出的input_ids。返回值:list[int] 从input_ids中提取的内容。
Source code in vllm/reasoning/abs_reasoning_parsers.py
extract_reasoning_content abstractmethod ¶
extract_reasoning_content(
model_output: str,
request: Union[ChatCompletionRequest, ResponsesRequest],
) -> tuple[Optional[str], Optional[str]]
从完整的模型生成字符串中提取推理内容。
用于非流式响应场景,即在将完整模型响应发送给客户端之前,我们已经获取了整个响应内容。
model_output: str 需要从中提取推理内容的模型生成字符串。
ChatCompletionRequest
用于生成模型输出的请求对象。
tuple[Optional[str], Optional[str]] 一个包含推理内容和内容的元组。
Source code in vllm/reasoning/abs_reasoning_parsers.py
extract_reasoning_content_streaming abstractmethod ¶
extract_reasoning_content_streaming(
previous_text: str,
current_text: str,
delta_text: str,
previous_token_ids: Sequence[int],
current_token_ids: Sequence[int],
delta_token_ids: Sequence[int],
) -> Union[DeltaMessage, None]
这是一个实例方法,需要实现从不完整响应中提取推理逻辑的功能;用于处理推理调用和流式传输场景。必须作为实例方法,因为它需要维护状态——当前的分词/差异信息,以及之前已解析和提取内容的相关信息(参见构造函数)
Source code in vllm/reasoning/abs_reasoning_parsers.py
is_reasoning_end abstractmethod ¶
检查推理内容是否以input_ids结尾。
它用于像xgrammar这样的结构化引擎中,用于检查推理内容是否在模型输出中结束。
input_ids: list[int] 模型输出的输入标识符列表。
如果推理内容以input_ids结尾,则bool为True。
Source code in vllm/reasoning/abs_reasoning_parsers.py
ReasoningParserManager ¶
Source code in vllm/reasoning/abs_reasoning_parsers.py
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 | |
_register_module classmethod ¶
_register_module(
module: type,
module_name: Optional[Union[str, list[str]]] = None,
force: bool = True,
) -> None
Source code in vllm/reasoning/abs_reasoning_parsers.py
get_reasoning_parser classmethod ¶
get_reasoning_parser(
name: str | None,
) -> type[ReasoningParser]
通过名称获取由register_module注册的推理解析器。
如果名称未注册,则引发KeyError异常。
Source code in vllm/reasoning/abs_reasoning_parsers.py
import_reasoning_parser classmethod ¶
import_reasoning_parser(plugin_path: str) -> None
通过推理解析器定义文件的路径导入用户自定义的推理解析器。
Source code in vllm/reasoning/abs_reasoning_parsers.py
register_module classmethod ¶
register_module(
name: Optional[Union[str, list[str]]] = None,
force: bool = True,
module: Union[type, None] = None,
) -> Union[type, Callable]
使用给定的名称或名称列表注册模块。它可以用作解码器(模块为None时)或普通函数(模块不为None时)。
Source code in vllm/reasoning/abs_reasoning_parsers.py
Step3ReasoningParser ¶
基类: ReasoningParser
Step3模型的推理解析器。
Step3模型使用token来表示推理文本的结束。该解析器提取之前的所有内容作为推理内容。
Source code in vllm/reasoning/step3_reasoning_parser.py
__init__ ¶
Source code in vllm/reasoning/step3_reasoning_parser.py
extract_content_ids ¶
extract_reasoning_content ¶
extract_reasoning_content(
model_output: str, request: ChatCompletionRequest
) -> tuple[Optional[str], Optional[str]]
Source code in vllm/reasoning/step3_reasoning_parser.py
extract_reasoning_content_streaming ¶
extract_reasoning_content_streaming(
previous_text: str,
current_text: str,
delta_text: str,
previous_token_ids: Sequence[int],
current_token_ids: Sequence[int],
delta_token_ids: Sequence[int],
) -> Union[DeltaMessage, None]
从增量消息中提取推理内容。处理流式输出,其中"前文 + 增量 = 当前内容"。使用令牌ID实现更快的处理速度。以文本"abcxyz"为例:- 'abc'进入推理内容 - 'xyz'进入常规内容