tool.py 2.6 KB

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