mirror of
https://github.com/langgenius/dify.git
synced 2026-04-21 11:17:38 +08:00
feat: support agent node
This commit is contained in:
@ -27,6 +27,40 @@ class PluginTool(Tool):
|
||||
def tool_provider_type(self) -> ToolProviderType:
|
||||
return ToolProviderType.PLUGIN
|
||||
|
||||
@classmethod
|
||||
def _transform_image_parameters(cls, parameters: dict[str, Any]) -> dict[str, Any]:
|
||||
for parameter_name, parameter in parameters.items():
|
||||
if isinstance(parameter, File):
|
||||
url = parameter.generate_url()
|
||||
if url is None:
|
||||
raise ValueError(f"File {parameter.id} does not have a valid URL")
|
||||
parameters[parameter_name] = PluginFileEntity(
|
||||
url=url,
|
||||
mime_type=parameter.mime_type,
|
||||
type=parameter.type,
|
||||
filename=parameter.filename,
|
||||
extension=parameter.extension,
|
||||
size=parameter.size,
|
||||
).model_dump()
|
||||
elif isinstance(parameter, list) and all(isinstance(p, File) for p in parameter):
|
||||
parameters[parameter_name] = []
|
||||
for p in parameter:
|
||||
assert isinstance(p, File)
|
||||
url = p.generate_url()
|
||||
if url is None:
|
||||
raise ValueError(f"File {p.id} does not have a valid URL")
|
||||
parameters[parameter_name].append(
|
||||
PluginFileEntity(
|
||||
url=url,
|
||||
mime_type=p.mime_type,
|
||||
type=p.type,
|
||||
filename=p.filename,
|
||||
extension=p.extension,
|
||||
size=p.size,
|
||||
).model_dump()
|
||||
)
|
||||
return parameters
|
||||
|
||||
def _invoke(
|
||||
self,
|
||||
user_id: str,
|
||||
@ -38,38 +72,9 @@ class PluginTool(Tool):
|
||||
manager = PluginToolManager()
|
||||
|
||||
# convert tool parameters with File type to PluginFileEntity
|
||||
for parameter_name, parameter in tool_parameters.items():
|
||||
if isinstance(parameter, File):
|
||||
url = parameter.generate_url()
|
||||
if url is None:
|
||||
raise ValueError(f"File {parameter.id} does not have a valid URL")
|
||||
tool_parameters[parameter_name] = PluginFileEntity(
|
||||
url=url,
|
||||
mime_type=parameter.mime_type,
|
||||
type=parameter.type,
|
||||
filename=parameter.filename,
|
||||
extension=parameter.extension,
|
||||
size=parameter.size,
|
||||
).model_dump()
|
||||
elif isinstance(parameter, list) and all(isinstance(p, File) for p in parameter):
|
||||
tool_parameters[parameter_name] = []
|
||||
for p in parameter:
|
||||
assert isinstance(p, File)
|
||||
url = p.generate_url()
|
||||
if url is None:
|
||||
raise ValueError(f"File {p.id} does not have a valid URL")
|
||||
tool_parameters[parameter_name].append(
|
||||
PluginFileEntity(
|
||||
url=url,
|
||||
mime_type=p.mime_type,
|
||||
type=p.type,
|
||||
filename=p.filename,
|
||||
extension=p.extension,
|
||||
size=p.size,
|
||||
).model_dump()
|
||||
)
|
||||
tool_parameters = self._transform_image_parameters(tool_parameters)
|
||||
|
||||
return manager.invoke(
|
||||
yield from manager.invoke(
|
||||
tenant_id=self.tenant_id,
|
||||
user_id=user_id,
|
||||
tool_provider=self.entity.identity.provider,
|
||||
|
||||
Reference in New Issue
Block a user