36 lines
1.2 KiB
Python
36 lines
1.2 KiB
Python
# SPDX-License-Identifier: Apache-2.0
|
|
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
|
|
from vllm.entrypoints.openai.chat_completion.protocol import (
|
|
ChatCompletionRequest,
|
|
)
|
|
from vllm.entrypoints.openai.responses.protocol import (
|
|
ResponsesRequest,
|
|
)
|
|
from vllm.reasoning.deepseek_r1_reasoning_parser import DeepSeekR1ReasoningParser
|
|
|
|
|
|
class NemotronV3ReasoningParser(DeepSeekR1ReasoningParser):
|
|
"""
|
|
Reasoning parser for Nemotron V3 models.
|
|
"""
|
|
|
|
def extract_reasoning(
|
|
self, model_output: str, request: ChatCompletionRequest | ResponsesRequest
|
|
) -> tuple[str | None, str | None]:
|
|
reasoning_content, final_content = super().extract_reasoning(
|
|
model_output, request
|
|
)
|
|
chat_template_kwargs = getattr(request, "chat_template_kwargs", None)
|
|
|
|
if (
|
|
chat_template_kwargs
|
|
and (
|
|
chat_template_kwargs.get("enable_thinking") is False
|
|
or chat_template_kwargs.get("force_nonempty_content") is True
|
|
)
|
|
and final_content is None
|
|
):
|
|
reasoning_content, final_content = final_content, reasoning_content
|
|
|
|
return reasoning_content, final_content
|