Underground-Digital/Workflow-Engine
0
1from typing import Literal, Optional2 3from pydantic import BaseModel4 5from core.model_runtime.utils.encoders import jsonable_encoder6from core.tools.entities.common_entities import I18nObject7from core.tools.entities.tool_entities import ToolProviderCredentials, ToolProviderType8from core.tools.tool.tool import ToolParameter9 10 11class UserTool(BaseModel):12 author: str13 name: str # identifier14 label: I18nObject # label15 description: I18nObject16 parameters: Optional[list[ToolParameter]] = None17 labels: list[str] = None18 19 20UserToolProviderTypeLiteral = Optional[Literal["builtin", "api", "workflow"]]21 22 23class UserToolProvider(BaseModel):24 id: str25 author: str26 name: str # identifier27 description: I18nObject28 icon: str29 label: I18nObject # label30 type: ToolProviderType31 masked_credentials: Optional[dict] = None32 original_credentials: Optional[dict] = None33 is_team_authorization: bool = False34 allow_delete: bool = True35 tools: list[UserTool] | None = None36 labels: list[str] | None = None37 38 def to_dict(self) -> dict:39 # -------------40 # overwrite tool parameter types for temp fix41 tools = jsonable_encoder(self.tools)42 for tool in tools:43 if tool.get("parameters"):44 for parameter in tool.get("parameters"):45 if parameter.get("type") == ToolParameter.ToolParameterType.SYSTEM_FILES.value:46 parameter["type"] = "files"47 # -------------48 49 return {50 "id": self.id,51 "author": self.author,52 "name": self.name,53 "description": self.description.to_dict(),54 "icon": self.icon,55 "label": self.label.to_dict(),56 "type": self.type.value,57 "team_credentials": self.masked_credentials,58 "is_team_authorization": self.is_team_authorization,59 "allow_delete": self.allow_delete,60 "tools": tools,61 "labels": self.labels,62 }63 64 65class UserToolProviderCredentials(BaseModel):66 credentials: dict[str, ToolProviderCredentials]67 