瀏覽代碼

fix(agent node): tool setting and workflow tool. (#14461)

tags/1.0.0
Novice 8 月之前
父節點
當前提交
bb4fecf3d1
沒有連結到貢獻者的電子郵件帳戶。
共有 2 個檔案被更改,包括 49 行新增6 行删除
  1. 43
    6
      api/core/workflow/nodes/agent/agent_node.py
  2. 6
    0
      api/core/workflow/nodes/agent/entities.py

+ 43
- 6
api/core/workflow/nodes/agent/agent_node.py 查看文件

from core.model_runtime.entities.model_entities import ModelType from core.model_runtime.entities.model_entities import ModelType
from core.plugin.manager.exc import PluginDaemonClientSideError from core.plugin.manager.exc import PluginDaemonClientSideError
from core.plugin.manager.plugin import PluginInstallationManager from core.plugin.manager.plugin import PluginInstallationManager
from core.tools.entities.tool_entities import ToolProviderType
from core.tools.entities.tool_entities import ToolParameter, ToolProviderType
from core.tools.tool_manager import ToolManager from core.tools.tool_manager import ToolManager
from core.workflow.entities.node_entities import NodeRunResult from core.workflow.entities.node_entities import NodeRunResult
from core.workflow.entities.variable_pool import VariablePool from core.workflow.entities.variable_pool import VariablePool
from core.workflow.enums import SystemVariableKey from core.workflow.enums import SystemVariableKey
from core.workflow.nodes.agent.entities import AgentNodeData
from core.workflow.nodes.agent.entities import AgentNodeData, ParamsAutoGenerated
from core.workflow.nodes.base.entities import BaseNodeData from core.workflow.nodes.base.entities import BaseNodeData
from core.workflow.nodes.enums import NodeType from core.workflow.nodes.enums import NodeType
from core.workflow.nodes.event.event import RunCompletedEvent from core.workflow.nodes.event.event import RunCompletedEvent
value = cast(list[dict[str, Any]], value) value = cast(list[dict[str, Any]], value)
value = [tool for tool in value if tool.get("enabled", False)] value = [tool for tool in value if tool.get("enabled", False)]


for tool in value:
if "schemas" in tool:
tool.pop("schemas")
parameters = tool.get("parameters", {})
if all(isinstance(v, dict) for _, v in parameters.items()):
params = {}
for key, param in parameters.items():
if param.get("auto", ParamsAutoGenerated.OPEN.value) == ParamsAutoGenerated.CLOSE.value:
value_param = param.get("value", {})
params[key] = value_param.get("value", "") if value_param is not None else None
else:
params[key] = None
parameters = params
tool["settings"] = {k: v.get("value", None) for k, v in tool.get("settings", {}).items()}
tool["parameters"] = parameters

if not for_log: if not for_log:
if parameter.type == "array[tools]": if parameter.type == "array[tools]":
value = cast(list[dict[str, Any]], value) value = cast(list[dict[str, Any]], value)
tool_value = [] tool_value = []
for tool in value: for tool in value:
provider_type = ToolProviderType(tool.get("type", ToolProviderType.BUILT_IN.value))
setting_params = tool.get("settings", {})
parameters = tool.get("parameters", {})
manual_input_params = [key for key, value in parameters.items() if value is not None]

parameters = {**parameters, **setting_params}
entity = AgentToolEntity( entity = AgentToolEntity(
provider_id=tool.get("provider_name", ""), provider_id=tool.get("provider_name", ""),
provider_type=ToolProviderType.BUILT_IN,
provider_type=provider_type,
tool_name=tool.get("tool_name", ""), tool_name=tool.get("tool_name", ""),
tool_parameters=tool.get("parameters", {}),
tool_parameters=parameters,
plugin_unique_identifier=tool.get("plugin_unique_identifier", None), plugin_unique_identifier=tool.get("plugin_unique_identifier", None),
) )


tool_runtime.entity.description.llm = ( tool_runtime.entity.description.llm = (
extra.get("descrption", "") or tool_runtime.entity.description.llm extra.get("descrption", "") or tool_runtime.entity.description.llm
) )

for tool_runtime_params in tool_runtime.entity.parameters:
tool_runtime_params.form = (
ToolParameter.ToolParameterForm.FORM
if tool_runtime_params.name in manual_input_params
else tool_runtime_params.form
)
manual_input_value = {}
if tool_runtime.entity.parameters:
manual_input_value = {
key: value for key, value in parameters.items() if key in manual_input_params
}
runtime_parameters = {
**tool_runtime.runtime.runtime_parameters,
**manual_input_value,
}
tool_value.append( tool_value.append(
{ {
**tool_runtime.entity.model_dump(mode="json"), **tool_runtime.entity.model_dump(mode="json"),
"runtime_parameters": tool_runtime.runtime.runtime_parameters,
"runtime_parameters": runtime_parameters,
"provider_type": provider_type.value,
} }
) )
value = tool_value value = tool_value

+ 6
- 0
api/core/workflow/nodes/agent/entities.py 查看文件

from enum import Enum
from typing import Any, Literal, Union from typing import Any, Literal, Union


from pydantic import BaseModel from pydantic import BaseModel
type: Literal["mixed", "variable", "constant"] type: Literal["mixed", "variable", "constant"]


agent_parameters: dict[str, AgentInput] agent_parameters: dict[str, AgentInput]


class ParamsAutoGenerated(Enum):
CLOSE = 0
OPEN = 1

Loading…
取消
儲存