tool.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. from datetime import datetime
  2. from typing import TYPE_CHECKING
  3. from pydantic import BaseModel, Field
  4. from core_shared import JSONValue
  5. if TYPE_CHECKING:
  6. from app.db.models import ToolBinding, ToolDefinition, ToolVersion
  7. class ToolCreateRequest(BaseModel):
  8. tenant_id: str
  9. plugin_id: str | None = None
  10. code: str
  11. name: str
  12. tool_type: str
  13. description: str | None = None
  14. class ToolResponse(BaseModel):
  15. id: str
  16. tenant_id: str
  17. plugin_id: str | None = None
  18. code: str
  19. name: str
  20. tool_type: str
  21. description: str | None = None
  22. created_time: datetime
  23. @classmethod
  24. def from_entity(cls, entity: "ToolDefinition") -> "ToolResponse":
  25. return cls.model_validate(entity, from_attributes=True)
  26. class ToolVersionCreateRequest(BaseModel):
  27. tenant_id: str
  28. tool_id: str
  29. input_schema_json: dict[str, JSONValue] = Field(default_factory=dict)
  30. output_schema_json: dict[str, JSONValue] = Field(default_factory=dict)
  31. invoke_config_json: dict[str, JSONValue] = Field(default_factory=dict)
  32. timeout_ms: int | None = None
  33. retry_policy_json: dict[str, JSONValue] = Field(default_factory=dict)
  34. class ToolVersionResponse(BaseModel):
  35. id: str
  36. tenant_id: str
  37. tool_id: str
  38. version_no: int
  39. input_schema_json: dict[str, JSONValue] | None = None
  40. output_schema_json: dict[str, JSONValue] | None = None
  41. invoke_config_json: dict[str, JSONValue] | None = None
  42. timeout_ms: int | None = None
  43. retry_policy_json: dict[str, JSONValue] | None = None
  44. created_time: datetime
  45. @classmethod
  46. def from_entity(cls, entity: "ToolVersion") -> "ToolVersionResponse":
  47. return cls.model_validate(entity, from_attributes=True)
  48. class ToolBindingCreateRequest(BaseModel):
  49. tenant_id: str
  50. app_id: str
  51. tool_version_id: str
  52. credential_id: str | None = None
  53. binding_scope: str = "app"
  54. enabled: bool = True
  55. config_json: dict[str, JSONValue] = Field(default_factory=dict)
  56. class ToolBindingResponse(BaseModel):
  57. id: str
  58. tenant_id: str
  59. app_id: str
  60. tool_version_id: str
  61. credential_id: str | None = None
  62. binding_scope: str
  63. enabled: bool
  64. config_json: dict[str, JSONValue] | None = None
  65. created_time: datetime
  66. @classmethod
  67. def from_entity(cls, entity: "ToolBinding") -> "ToolBindingResponse":
  68. return cls.model_validate(entity, from_attributes=True)