diff --git a/tests/parser/engine/test_qwen3.py b/tests/parser/engine/test_qwen3.py index 7c2255ac7b2b..06784212e1b7 100644 --- a/tests/parser/engine/test_qwen3.py +++ b/tests/parser/engine/test_qwen3.py @@ -615,6 +615,24 @@ def test_partial_multiline(self): assert result["command"] == "ls -la" assert result["desc"] == "\npartial value" + def test_partial_value_with_angle_bracket(self): + from vllm.parser.qwen3 import ( + _qwen3_arg_converter, + ) + + raw = "x<5" + result = json.loads(_qwen3_arg_converter(raw, partial=True)) + assert result == {"expr": "x<5"} + + def test_partial_value_with_angle_bracket_and_complete_param(self): + from vllm.parser.qwen3 import ( + _qwen3_arg_converter, + ) + + raw = "Tokyo\nx<5" + result = json.loads(_qwen3_arg_converter(raw, partial=True)) + assert result == {"city": "Tokyo", "expr": "x<5"} + class TestSchemaAwareTypeCoercion: """Verify that _fix_arg_types corrects miscoerced values using the diff --git a/vllm/parser/qwen3.py b/vllm/parser/qwen3.py index ed47b1b9254d..45e3c7e43255 100644 --- a/vllm/parser/qwen3.py +++ b/vllm/parser/qwen3.py @@ -49,7 +49,7 @@ r"(?:<\s*/\s*parameter\s*>|(?=<\s*parameter\s*=))", re.DOTALL, ) -_PARTIAL_PARAM_RE = re.compile(r"<\s*parameter\s*=\s*([^>]+)>([^<]*)$", re.DOTALL) +_PARTIAL_PARAM_RE = re.compile(r"<\s*parameter\s*=\s*([^>]+)>(.*)$", re.DOTALL) def _qwen3_arg_converter(raw_args: str, partial: bool) -> str: