services.py 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. from app.db.models import ToolBinding, ToolDefinition, ToolVersion
  2. from app.domain.repositories import ToolBindingRepository, ToolDefinitionRepository, ToolVersionRepository
  3. from app.schemas.tool import (
  4. ToolBindingCreateRequest,
  5. ToolCreateRequest,
  6. ToolVersionCreateRequest,
  7. )
  8. class ToolApplicationService:
  9. def __init__(
  10. self,
  11. tool_definition_repository: ToolDefinitionRepository,
  12. tool_version_repository: ToolVersionRepository,
  13. tool_binding_repository: ToolBindingRepository,
  14. ) -> None:
  15. self.tool_definition_repository = tool_definition_repository
  16. self.tool_version_repository = tool_version_repository
  17. self.tool_binding_repository = tool_binding_repository
  18. def create_tool_definition(self, payload: ToolCreateRequest) -> ToolDefinition:
  19. return self.tool_definition_repository.create(
  20. tenant_id=payload.tenant_id,
  21. plugin_id=payload.plugin_id,
  22. code=payload.code,
  23. name=payload.name,
  24. tool_type=payload.tool_type,
  25. description=payload.description,
  26. )
  27. def list_tool_definitions(self, tenant_id: str) -> list[ToolDefinition]:
  28. return self.tool_definition_repository.list_by_tenant(tenant_id)
  29. def create_tool_version(self, payload: ToolVersionCreateRequest) -> ToolVersion:
  30. return self.tool_version_repository.create(
  31. tenant_id=payload.tenant_id,
  32. tool_id=payload.tool_id,
  33. input_schema_json=payload.input_schema_json,
  34. output_schema_json=payload.output_schema_json,
  35. invoke_config_json=payload.invoke_config_json,
  36. timeout_ms=payload.timeout_ms,
  37. retry_policy_json=payload.retry_policy_json,
  38. )
  39. def list_tool_versions(self, tenant_id: str, tool_id: str) -> list[ToolVersion]:
  40. return self.tool_version_repository.list_by_tool(tenant_id=tenant_id, tool_id=tool_id)
  41. def create_tool_binding(self, payload: ToolBindingCreateRequest) -> ToolBinding:
  42. return self.tool_binding_repository.create(
  43. tenant_id=payload.tenant_id,
  44. app_id=payload.app_id,
  45. tool_version_id=payload.tool_version_id,
  46. credential_id=payload.credential_id,
  47. binding_scope=payload.binding_scope,
  48. enabled=payload.enabled,
  49. config_json=payload.config_json,
  50. )
  51. def list_tool_bindings(self, tenant_id: str, app_id: str | None = None) -> list[ToolBinding]:
  52. return self.tool_binding_repository.list_by_scope(tenant_id=tenant_id, app_id=app_id)
  53. def get_tool_binding_detail(
  54. self,
  55. *,
  56. tenant_id: str,
  57. binding_id: str,
  58. ) -> tuple[ToolBinding, ToolVersion, ToolDefinition] | None:
  59. binding = self.tool_binding_repository.get_by_id(tenant_id=tenant_id, binding_id=binding_id)
  60. if binding is None:
  61. return None
  62. tool_version = self.tool_version_repository.get_by_id(
  63. tenant_id=tenant_id,
  64. tool_version_id=binding.tool_version_id,
  65. )
  66. if tool_version is None:
  67. return None
  68. tool_definition = self.tool_definition_repository.get_by_id(
  69. tenant_id=tenant_id,
  70. tool_id=tool_version.tool_id,
  71. )
  72. if tool_definition is None:
  73. return None
  74. return binding, tool_version, tool_definition