[Bugfix] [Parser] Fix Qwen3 latent bug in partial params dropping values containing `<` (#46047)

Signed-off-by: Ben Browning <bbrownin@redhat.com>

Ben Browning committed Jun 18, 2026 at 14:04 UTC 09f3cd5c1080de42c9001803f638852b7f6a4310
2 files changed +19 -1
tests/parser/engine/test_qwen3.py
+18
@@ -615,6 +615,24 @@ class TestArgConverter:
615 assert result["command"] == "ls -la"
616 assert result["desc"] == "\npartial value"
617
618 + def test_partial_value_with_angle_bracket(self):
619 + from vllm.parser.qwen3 import (
620 + _qwen3_arg_converter,
621 + )
622 +
623 + raw = "<parameter=expr>x<5"
624 + result = json.loads(_qwen3_arg_converter(raw, partial=True))
625 + assert result == {"expr": "x<5"}
626 +
627 + def test_partial_value_with_angle_bracket_and_complete_param(self):
628 + from vllm.parser.qwen3 import (
629 + _qwen3_arg_converter,
630 + )
631 +
632 + raw = "<parameter=city>Tokyo</parameter>\n<parameter=expr>x<5"
633 + result = json.loads(_qwen3_arg_converter(raw, partial=True))
634 + assert result == {"city": "Tokyo", "expr": "x<5"}
635 +
636
637 class TestSchemaAwareTypeCoercion:
638 """Verify that _fix_arg_types corrects miscoerced values using the
vllm/parser/qwen3.py
+1 -1
@@ -49,7 +49,7 @@ _PARAM_RE = re.compile(
49 r"(?:<\s*/\s*parameter\s*>|(?=<\s*parameter\s*=))",
50 re.DOTALL,
51 )
52 -_PARTIAL_PARAM_RE = re.compile(r"<\s*parameter\s*=\s*([^>]+)>([^<]*)$", re.DOTALL)
52 +_PARTIAL_PARAM_RE = re.compile(r"<\s*parameter\s*=\s*([^>]+)>(.*)$", re.DOTALL)
53
54
55 def _qwen3_arg_converter(raw_args: str, partial: bool) -> str: