Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
# coding=utf-8
"""
@project: MaxKB
@file: tool_aggregator.py
@date:2026/7/22 16:24
@desc: ToolContent 聚合器
@project: MaxKB
@file: tool_aggregator.py
@date:2026/7/22 16:24
@desc: ToolContent 聚合器
"""

from application.workflow.message.aggregator.content_aggregator import ContentAggregator
from application.workflow.message.struct.tool_content import ToolContent

Expand All @@ -18,36 +19,38 @@ class ToolAggregator(ContentAggregator[ToolContent]):
def aggregate(self, prev: ToolContent, chunk: ToolContent) -> ToolContent:
"""
聚合工具内容

@param prev: 之前的内容
@param chunk: 新的内容块
@return: 合并后的内容
"""
if prev is None:
return chunk

# 合并 content (tool_name)
prev_content = prev.content if prev.content else ""
chunk_content = chunk.content if chunk.content else ""
merged_content = chunk_content if chunk_content else prev_content
# 合并 name (tool_name):取新回退旧
prev_name = prev.name if prev.name else ""
chunk_name = chunk.name if chunk.name else ""
merged_name = chunk_name if chunk_name else prev_name

# 合并 arguments
# 合并 arguments:拼接
prev_arguments = prev.arguments if prev.arguments else ""
chunk_arguments = chunk.arguments if chunk.arguments else ""
merged_arguments = prev_arguments + chunk_arguments

# 合并 result
prev_result = prev.result if prev.result else ""
chunk_result = chunk.result if chunk.result else ""
merged_result = prev_result + chunk_result
# 合并 content(即 result 结果):拼接
prev_content = prev.content if prev.content else ""
chunk_content = chunk.content if chunk.content else ""
merged_content = prev_content + chunk_content

# 合并基础字段
merged_id = chunk.id if chunk.id else prev.id
merged_status = chunk.status if chunk.status else prev.status
merged_node_info = chunk.node_info if chunk.node_info else prev.node_info
merged_position = chunk.position if chunk.position else prev.position

result = ToolContent(merged_id, merged_content, merged_arguments, merged_result,
merged_status, merged_node_info, merged_position)
# ToolContent(_id, tool_name, arguments, result, status, node_info, position)
result = ToolContent(
merged_id, merged_name, merged_arguments, merged_content, merged_status, merged_node_info, merged_position
)

return result
34 changes: 22 additions & 12 deletions apps/application/workflow/message/struct/tool_content.py
Original file line number Diff line number Diff line change
@@ -1,27 +1,37 @@
# coding=utf-8
"""
@project: MaxKB
@Author:虎虎
@file: tool_content.py
@date:2026/6/30 16:17
@desc:
@project: MaxKB
@Author:虎虎
@file: tool_content.py
@date:2026/6/30 16:17
@desc:
"""

from application.workflow.content_type import ContentType
from application.workflow.message.struct.content import Content, NodeInfo, Position
from application.workflow.status import Status


class ToolContent(Content):
def __init__(self, _id, tool_name: str, arguments: str, result: str, status: Status, node_info: NodeInfo,
position: Position, **kwargs):
self.content = tool_name
def __init__(
self,
_id,
tool_name: str,
arguments: str,
result: str,
status: Status,
node_info: NodeInfo,
position: Position,
**kwargs,
):
self.name = tool_name
self.arguments = arguments
self.result = result
self.content = result
super().__init__(_id, status, ContentType.TOOL, node_info, position, **kwargs)

def to_dict(self):
result = super().to_dict()
result['content'] = self.content
result['arguments'] = self.arguments
result['result'] = self.result
result["content"] = self.content
result["arguments"] = self.arguments
result["name"] = self.name
return result
Loading
Loading