api_entities.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. from typing import Literal, Optional
  2. from pydantic import BaseModel
  3. from core.model_runtime.utils.encoders import jsonable_encoder
  4. from core.tools.entities.common_entities import I18nObject
  5. from core.tools.entities.tool_entities import ToolProviderCredentials, ToolProviderType
  6. from core.tools.tool.tool import ToolParameter
  7. class UserTool(BaseModel):
  8. author: str
  9. name: str # identifier
  10. label: I18nObject # label
  11. description: I18nObject
  12. parameters: Optional[list[ToolParameter]] = None
  13. labels: list[str] = None
  14. UserToolProviderTypeLiteral = Optional[Literal["builtin", "api", "workflow"]]
  15. class UserToolProvider(BaseModel):
  16. id: str
  17. author: str
  18. name: str # identifier
  19. description: I18nObject
  20. icon: str
  21. label: I18nObject # label
  22. type: ToolProviderType
  23. masked_credentials: Optional[dict] = None
  24. original_credentials: Optional[dict] = None
  25. is_team_authorization: bool = False
  26. allow_delete: bool = True
  27. tools: list[UserTool] = None
  28. labels: list[str] = None
  29. def to_dict(self) -> dict:
  30. # -------------
  31. # overwrite tool parameter types for temp fix
  32. tools = jsonable_encoder(self.tools)
  33. for tool in tools:
  34. if tool.get("parameters"):
  35. for parameter in tool.get("parameters"):
  36. if parameter.get("type") == ToolParameter.ToolParameterType.FILE.value:
  37. parameter["type"] = "files"
  38. # -------------
  39. return {
  40. "id": self.id,
  41. "author": self.author,
  42. "name": self.name,
  43. "description": self.description.to_dict(),
  44. "icon": self.icon,
  45. "label": self.label.to_dict(),
  46. "type": self.type.value,
  47. "team_credentials": self.masked_credentials,
  48. "is_team_authorization": self.is_team_authorization,
  49. "allow_delete": self.allow_delete,
  50. "tools": tools,
  51. "labels": self.labels,
  52. }
  53. class UserToolProviderCredentials(BaseModel):
  54. credentials: dict[str, ToolProviderCredentials]