From e2701cc52514c13a460e90746c901cce8ad753f9 Mon Sep 17 00:00:00 2001 From: cjackal <44624812+cjackal@users.noreply.github.com> Date: Mon, 5 Jan 2026 14:42:47 +0900 Subject: [PATCH] [Frontend] [Bugfix] respect server-level default chat template kwargs in reasoning parser (#31581) Signed-off-by: cjackal <44624812+cjackal@users.noreply.github.com> Co-authored-by: Chauncey --- vllm/entrypoints/openai/serving_chat.py | 14 ++++++++++++-- vllm/entrypoints/openai/serving_engine.py | 19 ++++++++++++++++--- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/vllm/entrypoints/openai/serving_chat.py b/vllm/entrypoints/openai/serving_chat.py index 32a3cf049..5a916f39b 100644 --- a/vllm/entrypoints/openai/serving_chat.py +++ b/vllm/entrypoints/openai/serving_chat.py @@ -659,9 +659,14 @@ class OpenAIServingChat(OpenAIServing): "Tokenizer not available when `skip_tokenizer_init=True`" ) + # Pass the same chat template kwargs as used in tokenization + chat_template_kwargs = self._prepare_extra_chat_template_kwargs( + request.chat_template_kwargs, + self.default_chat_template_kwargs, + ) reasoning_parser = self.reasoning_parser( tokenizer, - chat_template_kwargs=request.chat_template_kwargs, # type: ignore + chat_template_kwargs=chat_template_kwargs, # type: ignore[call-arg] ) except RuntimeError as e: logger.exception("Error in reasoning parser creation.") @@ -1437,9 +1442,14 @@ class OpenAIServingChat(OpenAIServing): "Tokenizer not available when `skip_tokenizer_init=True`" ) + # Pass the same chat template kwargs as used in tokenization + chat_template_kwargs = self._prepare_extra_chat_template_kwargs( + request.chat_template_kwargs, + self.default_chat_template_kwargs, + ) reasoning_parser = self.reasoning_parser( tokenizer, - chat_template_kwargs=request.chat_template_kwargs, # type: ignore + chat_template_kwargs=chat_template_kwargs, # type: ignore[call-arg] ) except RuntimeError as e: logger.exception("Error in reasoning parser creation.") diff --git a/vllm/entrypoints/openai/serving_engine.py b/vllm/entrypoints/openai/serving_engine.py index f1c4ab63f..e65141edd 100644 --- a/vllm/entrypoints/openai/serving_engine.py +++ b/vllm/entrypoints/openai/serving_engine.py @@ -1146,6 +1146,18 @@ class OpenAIServing: ) return None + @staticmethod + def _prepare_extra_chat_template_kwargs( + request_chat_template_kwargs: dict[str, Any] | None = None, + default_chat_template_kwargs: dict[str, Any] | None = None, + ) -> dict[str, Any]: + """Helper to merge server-default and request-specific chat template kwargs.""" + request_chat_template_kwargs = request_chat_template_kwargs or {} + if default_chat_template_kwargs is None: + return request_chat_template_kwargs + # Apply server defaults first, then request kwargs override. + return default_chat_template_kwargs | request_chat_template_kwargs + async def _preprocess_chat( self, request: ChatLikeRequest | ResponsesRequest, @@ -1184,9 +1196,10 @@ class OpenAIServing: tools=tool_dicts, documents=documents, ) - if default_chat_template_kwargs: - _chat_template_kwargs.update(default_chat_template_kwargs) - _chat_template_kwargs.update(chat_template_kwargs or {}) + _chat_template_kwargs |= self._prepare_extra_chat_template_kwargs( + chat_template_kwargs, + default_chat_template_kwargs, + ) request_prompt: str | list[int]