[Feature] Add --default-chat-template-kwargs server arg (#29579)

This commit is contained in:
Xinyuan Tong
2026-07-13 11:34:39 -07:00
committed by GitHub
parent b44ac5d49a
commit afaa17a7f2
3 changed files with 78 additions and 0 deletions
@@ -171,6 +171,9 @@ class OpenAIServingChat(OpenAIServingBase):
self.template_manager = template_manager
self.tool_call_parser = self.tokenizer_manager.server_args.tool_call_parser
self.reasoning_parser = self.tokenizer_manager.server_args.reasoning_parser
self.default_chat_template_kwargs = (
self.tokenizer_manager.server_args.default_chat_template_kwargs or {}
)
self._reasoning_detector = None
if self.reasoning_parser:
try:
@@ -633,6 +636,15 @@ class OpenAIServingChat(OpenAIServingBase):
self, request: ChatCompletionRequest, is_multimodal: bool
) -> MessageProcessingResult:
"""Process chat messages and apply chat template"""
if self.default_chat_template_kwargs:
ctk = dict(request.chat_template_kwargs or {})
for k, v in self.default_chat_template_kwargs.items():
ctk.setdefault(k, v)
request.chat_template_kwargs = ctk
effort = ctk.get("reasoning_effort")
if effort is not None and request.reasoning_effort is None:
request.reasoning_effort = effort
# GptOss model needs to keep special tokens for harmony parsing
if self.is_gpt_oss or self.is_gemma4:
request.skip_special_tokens = False
+17
View File
@@ -1116,6 +1116,16 @@ class ServerArgs:
"Return number of cached tokens in usage.prompt_tokens_details for each openai request.",
] = False
reasoning_parser: Optional[str] = None
default_chat_template_kwargs: A[
Optional[Dict[str, Any]],
Arg(
help="Default chat template kwargs applied to every request when not "
"overridden per-request. Keys must match what the model's chat template "
"expects (e.g. enable_thinking, thinking, reasoning_effort). Per-request "
"chat_template_kwargs takes precedence.",
type_parser=json.loads,
),
] = None
strip_thinking_cache: A[
bool,
"Skip caching reasoning-model output (thinking + answer) in the radix tree on finish; keep only the prompt prefix. Opt-in: changes cache contents.",
@@ -2810,6 +2820,13 @@ class ServerArgs:
# Validate transcription/ASR-specific server args.
self._handle_asr_validation()
if self.default_chat_template_kwargs is not None and not isinstance(
self.default_chat_template_kwargs, dict
):
raise ValueError(
"--default-chat-template-kwargs must decode to a JSON object"
)
# Handle deprecated arguments.
self._handle_deprecated_args()