Skip to content

Commit aaca0a8

Browse files
CursxLawrenceZHLee
authored andcommitted
fix agent putout the output of workflow-tool twice (langgenius#26835) (langgenius#27706)
1 parent 2982931 commit aaca0a8

File tree

1 file changed

+18
-9
lines changed

1 file changed

+18
-9
lines changed

api/core/tools/tool_engine.py

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -228,29 +228,38 @@ def _convert_tool_response_to_str(tool_response: list[ToolInvokeMessage]) -> str
228228
"""
229229
Handle tool response
230230
"""
231-
result = ""
231+
parts: list[str] = []
232+
json_parts: list[str] = []
233+
232234
for response in tool_response:
233235
if response.type == ToolInvokeMessage.MessageType.TEXT:
234-
result += cast(ToolInvokeMessage.TextMessage, response.message).text
236+
parts.append(cast(ToolInvokeMessage.TextMessage, response.message).text)
235237
elif response.type == ToolInvokeMessage.MessageType.LINK:
236-
result += (
238+
parts.append(
237239
f"result link: {cast(ToolInvokeMessage.TextMessage, response.message).text}."
238240
+ " please tell user to check it."
239241
)
240242
elif response.type in {ToolInvokeMessage.MessageType.IMAGE_LINK, ToolInvokeMessage.MessageType.IMAGE}:
241-
result += (
243+
parts.append(
242244
"image has been created and sent to user already, "
243245
+ "you do not need to create it, just tell the user to check it now."
244246
)
245247
elif response.type == ToolInvokeMessage.MessageType.JSON:
246-
result += json.dumps(
247-
safe_json_value(cast(ToolInvokeMessage.JsonMessage, response.message).json_object),
248-
ensure_ascii=False,
248+
json_parts.append(
249+
json.dumps(
250+
safe_json_value(cast(ToolInvokeMessage.JsonMessage, response.message).json_object),
251+
ensure_ascii=False,
252+
)
249253
)
250254
else:
251-
result += str(response.message)
255+
parts.append(str(response.message))
252256

253-
return result
257+
# Add JSON parts, avoiding duplicates from text parts.
258+
if json_parts:
259+
existing_parts = set(parts)
260+
parts.extend(p for p in json_parts if p not in existing_parts)
261+
262+
return "".join(parts)
254263

255264
@staticmethod
256265
def _extract_tool_response_binary_and_text(

0 commit comments

Comments
 (0)