tool.py 2.5 KB

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