fix: prevent newline accumulation in XML parameter serialization (#11767)

Co-authored-by: Lai Jinyi <laijinyi@tp-link.com.cn>
This commit is contained in:
aoi127 2025-11-25 18:56:35 +08:00 committed by GitHub
parent 7782f2afe9
commit f6e4d00df1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 7 additions and 13 deletions

View File

@ -421,16 +421,12 @@ def convert_tool_call_to_string(tool_call: dict) -> str:
f'Failed to parse arguments as JSON. Arguments: {tool_call["function"]["arguments"]}'
) from e
for param_name, param_value in args.items():
is_multiline = isinstance(param_value, str) and '\n' in param_value
# Don't add extra newlines - keep parameter value as-is
ret += f'<parameter={param_name}>'
if is_multiline:
ret += '\n'
if isinstance(param_value, list) or isinstance(param_value, dict):
ret += json.dumps(param_value)
else:
ret += f'{param_value}'
if is_multiline:
ret += '\n'
ret += '</parameter>\n'
ret += '</function>'
return ret

View File

@ -701,6 +701,8 @@ NON_FNCALL_RESPONSE_MESSAGE = {
</function>""",
),
# Test case with indented code block to verify indentation is preserved
# Note: multiline parameter values should NOT have extra newlines before/after
# to prevent newline accumulation across multiple LLM response cycles
(
[
{
@ -716,16 +718,12 @@ NON_FNCALL_RESPONSE_MESSAGE = {
"""<function=str_replace_editor>
<parameter=command>str_replace</parameter>
<parameter=path>/test/file.py</parameter>
<parameter=old_str>
def example():
pass
</parameter>
<parameter=new_str>
def example():
<parameter=old_str>def example():
pass</parameter>
<parameter=new_str>def example():
# This is indented
print("hello")
return True
</parameter>
return True</parameter>
</function>""",
),
# Test case with list parameter value