mirror of
https://github.com/vllm-project/vllm.git
synced 2026-06-06 00:16:14 +00:00
4d51588e23
Signed-off-by: Yifan Qiao <yifanqiao@inferact.ai> Signed-off-by: Woosuk Kwon <woosuk@inferact.ai> Signed-off-by: qizixi <zixi@inferact.ai> Signed-off-by: Jee Jee Li <pandaleefree@gmail.com> Signed-off-by: Yongye Zhu <zyy1102000@gmail.com> Co-authored-by: Yongye Zhu <zyy1102000@gmail.com> Co-authored-by: Yongye Zhu <yongye@inferact.ai> Co-authored-by: Simon Mo <simon@inferact.ai> Co-authored-by: Bugen Zhao <i@bugenzhao.com> Co-authored-by: Giancarlo Delfin <gdelfin@inferact.ai> Co-authored-by: Jee Jee Li <pandaleefree@gmail.com> Co-authored-by: Nick Hill <nickhill123@gmail.com> Co-authored-by: Roger Wang <hey@rogerw.io> Co-authored-by: Roy Wang <yasong.wang@inferact.ai> Co-authored-by: Woosuk Kwon <woosuk@inferact.ai> Co-authored-by: youkaichao <youkaichao@gmail.com> Co-authored-by: Zhewen Li <jerven.vllm@gmail.com> Co-authored-by: Zijing Liu <liuzijing2014@gmail.com> Co-authored-by: khluu <khluu000@gmail.com> Co-authored-by: qizixi <zixi@inferact.ai> Co-authored-by: Zhewen Li <zhewenli@inferact.ai>
84 lines
2.9 KiB
Python
84 lines
2.9 KiB
Python
# SPDX-License-Identifier: Apache-2.0
|
|
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
|
|
|
|
import pytest
|
|
from transformers import AutoTokenizer
|
|
|
|
from vllm.entrypoints.openai.chat_completion.protocol import ChatCompletionRequest
|
|
from vllm.entrypoints.openai.engine.protocol import DeltaMessage
|
|
from vllm.reasoning import ReasoningParserManager
|
|
from vllm.reasoning.deepseek_r1_reasoning_parser import DeepSeekR1ReasoningParser
|
|
from vllm.reasoning.deepseek_v3_reasoning_parser import DeepSeekV3ReasoningParser
|
|
from vllm.reasoning.identity_reasoning_parser import IdentityReasoningParser
|
|
|
|
REASONING_MODEL_NAME = "deepseek-ai/DeepSeek-V3.1"
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
def tokenizer():
|
|
return AutoTokenizer.from_pretrained(REASONING_MODEL_NAME)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"thinking,expected_parser_type",
|
|
[
|
|
(True, DeepSeekR1ReasoningParser),
|
|
(False, IdentityReasoningParser),
|
|
],
|
|
)
|
|
def test_parser_selection(tokenizer, thinking, expected_parser_type):
|
|
parser = DeepSeekV3ReasoningParser(
|
|
tokenizer, chat_template_kwargs={"thinking": thinking}
|
|
)
|
|
|
|
assert isinstance(parser._parser, expected_parser_type)
|
|
|
|
|
|
def test_deepseek_v4_reasoning_parser_alias():
|
|
parser_cls = ReasoningParserManager.get_reasoning_parser("deepseek_v4")
|
|
|
|
assert parser_cls is DeepSeekV3ReasoningParser
|
|
|
|
|
|
def test_identity_reasoning_parser_basic(tokenizer):
|
|
parser = IdentityReasoningParser(tokenizer)
|
|
|
|
# Test is_reasoning_end always returns True
|
|
input_text = "This is some output"
|
|
input_tokens = tokenizer.tokenize(input_text)
|
|
input_ids = tokenizer.convert_tokens_to_ids(input_tokens)
|
|
assert parser.is_reasoning_end(input_ids) is True
|
|
assert parser.is_reasoning_end_streaming(input_ids, input_ids) is True
|
|
|
|
# Test extract_content_ids returns all input_ids
|
|
assert parser.extract_content_ids(input_ids) == input_ids
|
|
|
|
# Test extract_reasoning returns (None, model_output)
|
|
request = ChatCompletionRequest(model="test-model", messages=[], temperature=1.0)
|
|
reasoning, content = parser.extract_reasoning(input_text, request)
|
|
assert reasoning is None
|
|
assert content == input_text
|
|
|
|
# Test extract_reasoning_streaming returns DeltaMessage or None
|
|
result = parser.extract_reasoning_streaming(
|
|
previous_text="",
|
|
current_text="Hello world",
|
|
delta_text="Hello world",
|
|
previous_token_ids=[],
|
|
current_token_ids=input_ids,
|
|
delta_token_ids=input_ids,
|
|
)
|
|
assert isinstance(result, DeltaMessage)
|
|
assert result.content == "Hello world"
|
|
|
|
# If delta_text is empty, should return None
|
|
result_none = parser.extract_reasoning_streaming(
|
|
previous_text="Hello world",
|
|
current_text="Hello world",
|
|
delta_text="",
|
|
previous_token_ids=input_ids,
|
|
current_token_ids=input_ids,
|
|
delta_token_ids=[],
|
|
)
|
|
assert result_none is None
|