11# SPDX-License-Identifier: Apache-2.0
22# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
33import logging
4- from collections . abc import Callable
4+ from typing import Any
55
66from openai .types .responses import ResponseFunctionToolCall , ResponseOutputItem
77from openai .types .responses .response_function_tool_call_output_item import (
1515 ResponseReasoningItem ,
1616)
1717
18+ from vllm .entrypoints .chat_utils import ChatTemplateContentFormatOption
1819from vllm .entrypoints .constants import MCP_PREFIX
1920from vllm .entrypoints .openai .responses .protocol import (
2021 ResponseInputOutputItem ,
@@ -36,10 +37,12 @@ def __init__(
3637 self ,
3738 * ,
3839 tokenizer : TokenizerLike ,
39- reasoning_parser_cls : Callable [[ TokenizerLike ], ReasoningParser ],
40+ reasoning_parser_cls : type [ ReasoningParser ],
4041 response_messages : list [ResponseInputOutputItem ],
4142 request : ResponsesRequest ,
4243 tool_parser_cls : type [ToolParser ] | None ,
44+ chat_template : str | None ,
45+ chat_template_content_format : ChatTemplateContentFormatOption ,
4346 ):
4447 self .response_messages : list [ResponseInputOutputItem ] = (
4548 # TODO: initial messages may not be properly typed
@@ -49,7 +52,14 @@ def __init__(
4952 self .tokenizer = tokenizer
5053 self .request = request
5154
52- self .reasoning_parser_instance = reasoning_parser_cls (tokenizer )
55+ self .reasoning_parser_instance = reasoning_parser_cls (
56+ tokenizer ,
57+ chat_template_kwargs = _effective_chat_template_kwargs (
58+ request ,
59+ chat_template = chat_template ,
60+ chat_template_content_format = chat_template_content_format ,
61+ ),
62+ )
5363 self .tool_parser_instance = None
5464 if tool_parser_cls is not None :
5565 self .tool_parser_instance = tool_parser_cls (tokenizer , request .tools )
@@ -159,10 +169,12 @@ def make_response_output_items_from_parsable_context(
159169def get_responses_parser_for_simple_context (
160170 * ,
161171 tokenizer : TokenizerLike ,
162- reasoning_parser_cls : Callable [[ TokenizerLike ], ReasoningParser ],
172+ reasoning_parser_cls : type [ ReasoningParser ],
163173 response_messages : list [ResponseInputOutputItem ],
164174 request : ResponsesRequest ,
165175 tool_parser_cls ,
176+ chat_template : str | None ,
177+ chat_template_content_format : ChatTemplateContentFormatOption ,
166178) -> ResponsesParser :
167179 """Factory function to create a ResponsesParser with
168180 optional reasoning parser.
@@ -176,4 +188,17 @@ def get_responses_parser_for_simple_context(
176188 response_messages = response_messages ,
177189 request = request ,
178190 tool_parser_cls = tool_parser_cls ,
191+ chat_template = chat_template ,
192+ chat_template_content_format = chat_template_content_format ,
179193 )
194+
195+
196+ def _effective_chat_template_kwargs (
197+ request : ResponsesRequest ,
198+ chat_template : str | None ,
199+ chat_template_content_format : ChatTemplateContentFormatOption ,
200+ ) -> dict [str , Any ]:
201+ return request .build_chat_params (
202+ default_template = chat_template ,
203+ default_template_content_format = chat_template_content_format ,
204+ ).chat_template_kwargs
0 commit comments