feat: support agent node

This commit is contained in:
Yeuoly
2024-12-09 23:02:11 +08:00
parent 16b49ac436
commit ae72514cb4
15 changed files with 459 additions and 34 deletions

View File

@ -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,