|
from typing import Literal, Optional |
|
|
|
from pydantic import BaseModel |
|
|
|
from core.model_runtime.utils.encoders import jsonable_encoder |
|
from core.tools.entities.common_entities import I18nObject |
|
from core.tools.entities.tool_entities import ToolProviderCredentials, ToolProviderType |
|
from core.tools.tool.tool import ToolParameter |
|
|
|
|
|
class UserTool(BaseModel): |
|
author: str |
|
name: str |
|
label: I18nObject |
|
description: I18nObject |
|
parameters: Optional[list[ToolParameter]] = None |
|
labels: list[str] = None |
|
|
|
|
|
UserToolProviderTypeLiteral = Optional[Literal["builtin", "api", "workflow"]] |
|
|
|
|
|
class UserToolProvider(BaseModel): |
|
id: str |
|
author: str |
|
name: str |
|
description: I18nObject |
|
icon: str |
|
label: I18nObject |
|
type: ToolProviderType |
|
masked_credentials: Optional[dict] = None |
|
original_credentials: Optional[dict] = None |
|
is_team_authorization: bool = False |
|
allow_delete: bool = True |
|
tools: list[UserTool] | None = None |
|
labels: list[str] | None = None |
|
|
|
def to_dict(self) -> dict: |
|
|
|
|
|
tools = jsonable_encoder(self.tools) |
|
for tool in tools: |
|
if tool.get("parameters"): |
|
for parameter in tool.get("parameters"): |
|
if parameter.get("type") == ToolParameter.ToolParameterType.SYSTEM_FILES.value: |
|
parameter["type"] = "files" |
|
|
|
|
|
return { |
|
"id": self.id, |
|
"author": self.author, |
|
"name": self.name, |
|
"description": self.description.to_dict(), |
|
"icon": self.icon, |
|
"label": self.label.to_dict(), |
|
"type": self.type.value, |
|
"team_credentials": self.masked_credentials, |
|
"is_team_authorization": self.is_team_authorization, |
|
"allow_delete": self.allow_delete, |
|
"tools": tools, |
|
"labels": self.labels, |
|
} |
|
|
|
|
|
class UserToolProviderCredentials(BaseModel): |
|
credentials: dict[str, ToolProviderCredentials] |
|
|