108 lines
4.1 KiB
Python
108 lines
4.1 KiB
Python
# SPDX-License-Identifier: Apache-2.0
|
|
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
|
|
"""Unit tests for reasoning_effort -> enable_thinking mapping.
|
|
|
|
Models like Gemma4 require enable_thinking=True in chat_template_kwargs to
|
|
activate thinking mode. This mapping ensures that when a user requests
|
|
reasoning (via reasoning_effort or reasoning.effort), the template kwarg
|
|
is injected automatically.
|
|
"""
|
|
|
|
import pytest
|
|
from openai.types.shared import Reasoning
|
|
|
|
from vllm.entrypoints.openai.chat_completion.protocol import (
|
|
ChatCompletionRequest,
|
|
)
|
|
from vllm.entrypoints.openai.responses.protocol import ResponsesRequest
|
|
|
|
|
|
def _build_chat_request(**kwargs) -> ChatCompletionRequest:
|
|
defaults = dict(
|
|
model="test-model",
|
|
messages=[{"role": "user", "content": "Hello"}],
|
|
)
|
|
defaults.update(kwargs)
|
|
return ChatCompletionRequest(**defaults)
|
|
|
|
|
|
def _build_responses_request(**kwargs) -> ResponsesRequest:
|
|
defaults = dict(
|
|
model="test-model",
|
|
input=[{"role": "user", "content": "Hello"}],
|
|
)
|
|
defaults.update(kwargs)
|
|
return ResponsesRequest(**defaults)
|
|
|
|
|
|
class TestChatCompletionReasoningEffort:
|
|
"""Chat Completions: reasoning_effort -> enable_thinking."""
|
|
|
|
@pytest.mark.parametrize("effort", ["low", "medium", "high"])
|
|
def test_non_none_effort_injects_enable_thinking_true(self, effort):
|
|
request = _build_chat_request(reasoning_effort=effort)
|
|
params = request.build_chat_params(None, "auto")
|
|
assert params.chat_template_kwargs["enable_thinking"] is True
|
|
|
|
def test_none_effort_injects_enable_thinking_false(self):
|
|
request = _build_chat_request(reasoning_effort="none")
|
|
params = request.build_chat_params(None, "auto")
|
|
assert params.chat_template_kwargs["enable_thinking"] is False
|
|
|
|
def test_no_effort_does_not_inject(self):
|
|
request = _build_chat_request()
|
|
params = request.build_chat_params(None, "auto")
|
|
assert "enable_thinking" not in params.chat_template_kwargs
|
|
|
|
def test_explicit_user_kwarg_not_overridden(self):
|
|
request = _build_chat_request(
|
|
reasoning_effort="high",
|
|
chat_template_kwargs={"enable_thinking": False},
|
|
)
|
|
params = request.build_chat_params(None, "auto")
|
|
assert params.chat_template_kwargs["enable_thinking"] is False
|
|
|
|
def test_reasoning_effort_still_in_kwargs(self):
|
|
request = _build_chat_request(reasoning_effort="high")
|
|
params = request.build_chat_params(None, "auto")
|
|
assert params.chat_template_kwargs["reasoning_effort"] == "high"
|
|
|
|
|
|
class TestResponsesReasoningEffort:
|
|
"""Responses API: reasoning.effort -> enable_thinking."""
|
|
|
|
@pytest.mark.parametrize("effort", ["low", "medium", "high"])
|
|
def test_non_none_effort_injects_enable_thinking_true(self, effort):
|
|
request = _build_responses_request(
|
|
reasoning=Reasoning(effort=effort),
|
|
)
|
|
params = request.build_chat_params(None, "auto")
|
|
assert params.chat_template_kwargs["enable_thinking"] is True
|
|
|
|
def test_none_effort_injects_enable_thinking_false(self):
|
|
request = _build_responses_request(
|
|
reasoning=Reasoning(effort="none"),
|
|
)
|
|
params = request.build_chat_params(None, "auto")
|
|
assert params.chat_template_kwargs["enable_thinking"] is False
|
|
|
|
def test_no_reasoning_does_not_inject(self):
|
|
request = _build_responses_request()
|
|
params = request.build_chat_params(None, "auto")
|
|
assert "enable_thinking" not in params.chat_template_kwargs
|
|
|
|
def test_explicit_user_kwarg_not_overridden(self):
|
|
request = _build_responses_request(
|
|
reasoning=Reasoning(effort="high"),
|
|
chat_template_kwargs={"enable_thinking": False},
|
|
)
|
|
params = request.build_chat_params(None, "auto")
|
|
assert params.chat_template_kwargs["enable_thinking"] is False
|
|
|
|
def test_reasoning_effort_still_in_kwargs(self):
|
|
request = _build_responses_request(
|
|
reasoning=Reasoning(effort="high"),
|
|
)
|
|
params = request.build_chat_params(None, "auto")
|
|
assert params.chat_template_kwargs["reasoning_effort"] == "high"
|