Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions backend/python/sglang/backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -363,8 +363,9 @@ def _build_prompt(self, request) -> str:
template_kwargs["tools"] = json.loads(request.Tools)
except json.JSONDecodeError:
pass
if request.Metadata.get("enable_thinking", "").lower() == "true":
template_kwargs["enable_thinking"] = True
_thinking = request.Metadata.get("enable_thinking", "").lower()
if _thinking in ("true", "false"):
template_kwargs["enable_thinking"] = (_thinking == "true")

try:
return self.tokenizer.apply_chat_template(messages_dicts, **template_kwargs)
Expand Down
32 changes: 32 additions & 0 deletions backend/python/sglang/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,38 @@ def test_apply_engine_args_non_object_raises(self):
servicer._apply_engine_args({}, "[1,2,3]")
self.assertIn("must be a JSON object", str(ctx.exception))

def test_build_prompt_forwards_enable_thinking(self):
from types import SimpleNamespace

class Tok:
def __init__(self):
self.kwargs = None

def apply_chat_template(self, messages, **kwargs):
self.kwargs = kwargs
return "PROMPT"

def kwargs_for(metadata):
servicer = self._servicer()
tok = Tok()
servicer.tokenizer = tok
msg = SimpleNamespace(
role="user", content="hi", name="",
tool_call_id="", reasoning_content="", tool_calls="",
)
req = SimpleNamespace(
Prompt="", UseTokenizerTemplate=True,
Messages=[msg], Tools="", Metadata=metadata,
)
self.assertEqual(servicer._build_prompt(req), "PROMPT")
return tok.kwargs

self.assertIs(kwargs_for({"enable_thinking": "true"})["enable_thinking"], True)
# "false" used to be dropped, so Qwen3 kept thinking on
self.assertIs(kwargs_for({"enable_thinking": "false"})["enable_thinking"], False)
self.assertNotIn("enable_thinking", kwargs_for({}))
self.assertIs(kwargs_for({"enable_thinking": "FALSE"})["enable_thinking"], False)


if __name__ == "__main__":
unittest.main()
6 changes: 3 additions & 3 deletions backend/python/vllm/backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -587,9 +587,9 @@ async def _predict(self, request, context, streaming=False):
except json.JSONDecodeError:
pass

# Enable thinking mode if requested
if request.Metadata.get("enable_thinking", "").lower() == "true":
template_kwargs["enable_thinking"] = True
_thinking = request.Metadata.get("enable_thinking", "").lower()
if _thinking in ("true", "false"):
template_kwargs["enable_thinking"] = (_thinking == "true")

try:
prompt = self.tokenizer.apply_chat_template(messages_dicts, **template_kwargs)
Expand Down