Fix: Resolve issue with json_output (#22053)

This commit is contained in:
baonudesifeizhai
2025-07-10 01:34:06 -04:00
committed by GitHub
parent 10858ea1dc
commit 18b58424ec

View File

@@ -285,6 +285,7 @@ class ToolNode(BaseNode[ToolNodeData]):
for key, value in msg_metadata.items() for key, value in msg_metadata.items()
if key in WorkflowNodeExecutionMetadataKey.__members__.values() if key in WorkflowNodeExecutionMetadataKey.__members__.values()
} }
if message.message.json_object is not None:
json.append(message.message.json_object) json.append(message.message.json_object)
elif message.type == ToolInvokeMessage.MessageType.LINK: elif message.type == ToolInvokeMessage.MessageType.LINK:
assert isinstance(message.message, ToolInvokeMessage.TextMessage) assert isinstance(message.message, ToolInvokeMessage.TextMessage)
@@ -369,19 +370,14 @@ class ToolNode(BaseNode[ToolNodeData]):
agent_logs.append(agent_log) agent_logs.append(agent_log)
yield agent_log yield agent_log
# Add agent_logs to outputs['json'] to ensure frontend can access thinking process
json_output: dict[str, Any] = {}
if json:
if isinstance(json, list) and len(json) == 1:
# If json is a list with only one element, convert it to a dictionary
json_output = json[0] if isinstance(json[0], dict) else {"data": json[0]}
elif isinstance(json, list):
# If json is a list with multiple elements, create a dictionary containing all data
json_output = {"data": json}
# Add agent_logs to outputs['json'] to ensure frontend can access thinking process
json_output: list[dict[str, Any]] = []
# Step 1: append each agent log as its own dict.
if agent_logs: if agent_logs:
# Add agent_logs to json output for log in agent_logs:
json_output["agent_logs"] = [ json_output.append(
{ {
"id": log.id, "id": log.id,
"parent_id": log.parent_id, "parent_id": log.parent_id,
@@ -392,8 +388,13 @@ class ToolNode(BaseNode[ToolNodeData]):
"metadata": log.metadata, "metadata": log.metadata,
"node_id": log.node_id, "node_id": log.node_id,
} }
for log in agent_logs )
] # Step 2: normalize JSON into {"data": [...]}.change json to list[dict]
if json:
json_output.extend(json)
else:
json_output.append({"data": []})
yield RunCompletedEvent( yield RunCompletedEvent(
run_result=NodeRunResult( run_result=NodeRunResult(
status=WorkflowNodeExecutionStatus.SUCCEEDED, status=WorkflowNodeExecutionStatus.SUCCEEDED,