mirror of
https://github.com/OpenHands/OpenHands.git
synced 2025-12-26 05:48:36 +08:00
fix: prevent newline accumulation in XML parameter serialization (#11767)
Co-authored-by: Lai Jinyi <laijinyi@tp-link.com.cn>
This commit is contained in:
parent
7782f2afe9
commit
f6e4d00df1
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user