mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-08-13 21:26:03 +08:00
fix(agent node): tool setting and workflow tool. (#14461)
This commit is contained in:
parent
4fbe52da40
commit
bb4fecf3d1
@ -8,12 +8,12 @@ from core.model_manager import ModelManager
|
|||||||
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
|
||||||
@ -156,16 +156,38 @@ class AgentNode(ToolNode):
|
|||||||
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),
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -178,11 +200,26 @@ class AgentNode(ToolNode):
|
|||||||
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
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
from enum import Enum
|
||||||
from typing import Any, Literal, Union
|
from typing import Any, Literal, Union
|
||||||
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
@ -16,3 +17,8 @@ class AgentNodeData(BaseNodeData):
|
|||||||
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…
x
Reference in New Issue
Block a user