tool.py 1.9 KB

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