76 lines
3.6 KiB
Python
76 lines
3.6 KiB
Python
|
|
# SPDX-License-Identifier: Apache-2.0
|
||
|
|
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
|
||
|
|
|
||
|
|
|
||
|
|
import pytest
|
||
|
|
|
||
|
|
from tests.tool_parsers.common_tests import (
|
||
|
|
ToolParserTestConfig,
|
||
|
|
ToolParserTests,
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
class TestQwen3xmlToolParser(ToolParserTests):
|
||
|
|
@pytest.fixture
|
||
|
|
def test_config(self) -> ToolParserTestConfig:
|
||
|
|
return ToolParserTestConfig(
|
||
|
|
parser_name="qwen3_xml",
|
||
|
|
# Test data
|
||
|
|
no_tool_calls_output="This is a regular response without any tool calls.",
|
||
|
|
single_tool_call_output="<tool_call>\n<function=get_weather>\n<parameter=city>Tokyo</parameter>\n</function>\n</tool_call>",
|
||
|
|
parallel_tool_calls_output="<tool_call>\n<function=get_weather>\n<parameter=city>Tokyo</parameter>\n</function>\n</tool_call><tool_call>\n<function=get_time>\n<parameter=timezone>Asia/Tokyo</parameter>\n</function>\n</tool_call>",
|
||
|
|
various_data_types_output=(
|
||
|
|
"<tool_call>\n<function=test_function>\n"
|
||
|
|
"<parameter=string_field>hello</parameter>\n"
|
||
|
|
"<parameter=int_field>42</parameter>\n"
|
||
|
|
"<parameter=float_field>3.14</parameter>\n"
|
||
|
|
"<parameter=bool_field>true</parameter>\n"
|
||
|
|
"<parameter=null_field>null</parameter>\n"
|
||
|
|
'<parameter=array_field>["a", "b", "c"]</parameter>\n'
|
||
|
|
'<parameter=object_field>{"nested": "value"}</parameter>\n'
|
||
|
|
"</function>\n</tool_call>"
|
||
|
|
),
|
||
|
|
empty_arguments_output="<tool_call>\n<function=refresh>\n</function>\n</tool_call>",
|
||
|
|
surrounding_text_output=(
|
||
|
|
"Let me check the weather for you.\n\n"
|
||
|
|
"<tool_call>\n<function=get_weather>\n"
|
||
|
|
"<parameter=city>Tokyo</parameter>\n"
|
||
|
|
"</function>\n</tool_call>\n\n"
|
||
|
|
"I will get that information."
|
||
|
|
),
|
||
|
|
escaped_strings_output=(
|
||
|
|
"<tool_call>\n<function=test_function>\n"
|
||
|
|
'<parameter=quoted>He said "hello"</parameter>\n'
|
||
|
|
"<parameter=path>C:\\Users\\file.txt</parameter>\n"
|
||
|
|
"<parameter=newline>line1\nline2</parameter>\n"
|
||
|
|
"</function>\n</tool_call>"
|
||
|
|
),
|
||
|
|
malformed_input_outputs=[
|
||
|
|
"<tool_call><function=func>",
|
||
|
|
"<tool_call><function=></function></tool_call>",
|
||
|
|
],
|
||
|
|
# Expected results
|
||
|
|
single_tool_call_expected_name="get_weather",
|
||
|
|
single_tool_call_expected_args={"city": "Tokyo"},
|
||
|
|
parallel_tool_calls_count=2,
|
||
|
|
parallel_tool_calls_names=["get_weather", "get_time"],
|
||
|
|
# xfail markers - Qwen3XML has systematic streaming issues
|
||
|
|
xfail_streaming={
|
||
|
|
"test_single_tool_call_simple_args": (
|
||
|
|
"Qwen3XML streaming has systematic issues"
|
||
|
|
),
|
||
|
|
"test_parallel_tool_calls": "Qwen3XML streaming has systematic issues",
|
||
|
|
"test_various_data_types": "Qwen3XML streaming has systematic issues",
|
||
|
|
"test_empty_arguments": "Qwen3XML streaming has systematic issues",
|
||
|
|
"test_surrounding_text": "Qwen3XML streaming has systematic issues",
|
||
|
|
"test_escaped_strings": "Qwen3XML streaming has systematic issues",
|
||
|
|
"test_malformed_input": (
|
||
|
|
"Qwen3XML parser is lenient with malformed input"
|
||
|
|
),
|
||
|
|
"test_streaming_reconstruction": (
|
||
|
|
"Qwen3XML streaming reconstruction has known issues"
|
||
|
|
),
|
||
|
|
},
|
||
|
|
supports_typed_arguments=False,
|
||
|
|
)
|