diff --git a/tests/parser/engine/test_gemma4_streaming_reasoning.py b/tests/parser/engine/test_gemma4_streaming_reasoning.py index 5f6b0a414e..10681786af 100644 --- a/tests/parser/engine/test_gemma4_streaming_reasoning.py +++ b/tests/parser/engine/test_gemma4_streaming_reasoning.py @@ -170,7 +170,7 @@ def mock_tokenizer(): @pytest.fixture def parser(mock_tokenizer): - return Gemma4Parser(mock_tokenizer) + return Gemma4Parser(mock_tokenizer, chat_template_kwargs={"enable_thinking": True}) @pytest.fixture @@ -289,7 +289,10 @@ class TestGemma4PromptOpenReasoning: @pytest.fixture def open_reasoning_parser(self, open_reasoning_tokenizer): - return Gemma4Parser(open_reasoning_tokenizer) + return Gemma4Parser( + open_reasoning_tokenizer, + chat_template_kwargs={"enable_thinking": True}, + ) @staticmethod def _prompt_ids_open_channel() -> list[int]: @@ -394,7 +397,9 @@ class TestGemma4PreInitReasoningRobustness: @pytest.fixture def pre_init_parser(self, pre_init_tokenizer): - return Gemma4Parser(pre_init_tokenizer) + return Gemma4Parser( + pre_init_tokenizer, chat_template_kwargs={"enable_thinking": True} + ) def test_model_emitted_channel_open_after_new_turn( self, pre_init_parser, pre_init_tokenizer, request_obj @@ -489,7 +494,9 @@ class TestGemma4ChannelLessOutputConsistency: @pytest.fixture def plain_parser(self, plain_tokenizer): - return Gemma4Parser(plain_tokenizer) + return Gemma4Parser( + plain_tokenizer, chat_template_kwargs={"enable_thinking": True} + ) def test_streaming_channel_less_output_is_content( self, plain_parser, plain_tokenizer, request_obj @@ -521,7 +528,9 @@ class TestGemma4ChannelLessOutputConsistency: assert reasoning is None assert content == _PLAIN_ANSWER_TEXT - stream_parser = Gemma4Parser(plain_tokenizer) + stream_parser = Gemma4Parser( + plain_tokenizer, chat_template_kwargs={"enable_thinking": True} + ) results = _stream_tokens_batched( stream_parser, plain_tokenizer, diff --git a/tests/reasoning/test_gemma4_reasoning_parser.py b/tests/reasoning/test_gemma4_reasoning_parser.py index b92d84b195..825cc7d0f7 100644 --- a/tests/reasoning/test_gemma4_reasoning_parser.py +++ b/tests/reasoning/test_gemma4_reasoning_parser.py @@ -262,14 +262,27 @@ def test_gemma4_adjust_request(generic_tokenizer): assert result is request -def test_gemma4_previous_turn_reasoning_is_reasoning_end(generic_tokenizer): +@pytest.mark.parametrize( + ("chat_template_kwargs", "expected_is_reasoning_end"), + [ + pytest.param({}, True, id="omitted_enable_thinking"), + pytest.param({"enable_thinking": False}, True, id="thinking_disabled"), + pytest.param({"enable_thinking": True}, False, id="thinking_enabled"), + ], +) +def test_gemma4_new_turn_reasoning_end_matches_enable_thinking( + generic_tokenizer, + chat_template_kwargs, + expected_is_reasoning_end, +): output = ( "<|channel>thought\n1st thought1st content\n" "<|turn>user\nThanks<|turn>model\n" ) output_tokens = gemma4_encode_output(generic_tokenizer, output) parser: ReasoningParser = ReasoningParserManager.get_reasoning_parser(parser_name)( - generic_tokenizer + generic_tokenizer, + chat_template_kwargs=chat_template_kwargs, ) is_reasoning_end = parser.is_reasoning_end(output_tokens) - assert not is_reasoning_end + assert is_reasoning_end is expected_is_reasoning_end diff --git a/vllm/parser/gemma4.py b/vllm/parser/gemma4.py index 801bb190bc..47a97cc490 100644 --- a/vllm/parser/gemma4.py +++ b/vllm/parser/gemma4.py @@ -400,7 +400,7 @@ class Gemma4Parser(ParserEngine): **kwargs, ) -> None: chat_kwargs = kwargs.get("chat_template_kwargs", {}) or {} - self._thinking_enabled = chat_kwargs.get("enable_thinking", True) + self._thinking_enabled = chat_kwargs.get("enable_thinking", False) super().__init__( tokenizer, tools,