services.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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)