synapse-sdk 1.0.0a37__tar.gz → 1.0.0a38__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of synapse-sdk might be problematic. Click here for more details.

Files changed (158) hide show
  1. {synapse_sdk-1.0.0a37/synapse_sdk.egg-info → synapse_sdk-1.0.0a38}/PKG-INFO +1 -1
  2. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/clients/base.py +3 -1
  3. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/base.py +11 -3
  4. synapse_sdk-1.0.0a38/synapse_sdk/plugins/categories/neural_net/actions/tune.py +268 -0
  5. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/upload/actions/upload.py +5 -0
  6. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/models.py +9 -1
  7. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/utils/file.py +3 -2
  8. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38/synapse_sdk.egg-info}/PKG-INFO +1 -1
  9. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk.egg-info/SOURCES.txt +1 -0
  10. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/.github/workflows/lint.yml +0 -0
  11. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/.github/workflows/pypi-publish.yml +0 -0
  12. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/.gitignore +0 -0
  13. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/.pre-commit-config.yaml +0 -0
  14. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/LICENSE +0 -0
  15. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/README.md +0 -0
  16. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/locale/en/LC_MESSAGES/messages.mo +0 -0
  17. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/locale/en/LC_MESSAGES/messages.po +0 -0
  18. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/locale/ko/LC_MESSAGES/messages.mo +0 -0
  19. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/locale/ko/LC_MESSAGES/messages.po +0 -0
  20. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/pyproject.toml +0 -0
  21. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/requirements.test.txt +0 -0
  22. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/requirements.txt +0 -0
  23. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/setup.cfg +0 -0
  24. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/__init__.py +0 -0
  25. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/cli/__init__.py +0 -0
  26. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/cli/alias/__init__.py +0 -0
  27. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/cli/alias/create.py +0 -0
  28. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/cli/alias/dataclass.py +0 -0
  29. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/cli/alias/default.py +0 -0
  30. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/cli/alias/delete.py +0 -0
  31. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/cli/alias/list.py +0 -0
  32. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/cli/alias/read.py +0 -0
  33. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/cli/alias/update.py +0 -0
  34. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/cli/alias/utils.py +0 -0
  35. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/cli/plugin/__init__.py +0 -0
  36. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/cli/plugin/create.py +0 -0
  37. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/cli/plugin/publish.py +0 -0
  38. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/cli/plugin/run.py +0 -0
  39. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/clients/__init__.py +0 -0
  40. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/clients/agent/__init__.py +0 -0
  41. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/clients/agent/core.py +0 -0
  42. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/clients/agent/ray.py +0 -0
  43. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/clients/agent/service.py +0 -0
  44. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/clients/backend/__init__.py +0 -0
  45. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/clients/backend/annotation.py +0 -0
  46. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/clients/backend/core.py +0 -0
  47. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/clients/backend/dataset.py +0 -0
  48. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/clients/backend/hitl.py +0 -0
  49. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/clients/backend/integration.py +0 -0
  50. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/clients/backend/ml.py +0 -0
  51. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/clients/backend/models.py +0 -0
  52. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/clients/exceptions.py +0 -0
  53. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/clients/ray/__init__.py +0 -0
  54. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/clients/ray/core.py +0 -0
  55. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/clients/ray/serve.py +0 -0
  56. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/clients/utils.py +0 -0
  57. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/clients/validators/__init__.py +0 -0
  58. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/clients/validators/collections.py +0 -0
  59. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/i18n.py +0 -0
  60. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/loggers.py +0 -0
  61. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/__init__.py +0 -0
  62. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/__init__.py +0 -0
  63. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/data_validation/__init__.py +0 -0
  64. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/data_validation/actions/__init__.py +0 -0
  65. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/data_validation/actions/validation.py +0 -0
  66. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/data_validation/templates/config.yaml +0 -0
  67. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/data_validation/templates/plugin/__init__.py +0 -0
  68. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/data_validation/templates/plugin/validation.py +0 -0
  69. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/decorators.py +0 -0
  70. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/export/__init__.py +0 -0
  71. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/export/actions/__init__.py +0 -0
  72. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/export/actions/export.py +0 -0
  73. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/export/enums.py +0 -0
  74. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/export/templates/config.yaml +0 -0
  75. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/export/templates/plugin/__init__.py +0 -0
  76. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/export/templates/plugin/export.py +0 -0
  77. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/neural_net/__init__.py +0 -0
  78. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/neural_net/actions/__init__.py +0 -0
  79. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/neural_net/actions/deployment.py +0 -0
  80. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/neural_net/actions/inference.py +0 -0
  81. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/neural_net/actions/test.py +0 -0
  82. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/neural_net/actions/train.py +0 -0
  83. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/neural_net/base/__init__.py +0 -0
  84. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/neural_net/base/inference.py +0 -0
  85. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/neural_net/templates/config.yaml +0 -0
  86. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/neural_net/templates/plugin/__init__.py +0 -0
  87. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/neural_net/templates/plugin/inference.py +0 -0
  88. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/neural_net/templates/plugin/test.py +0 -0
  89. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/neural_net/templates/plugin/train.py +0 -0
  90. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/post_annotation/__init__.py +0 -0
  91. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/post_annotation/actions/__init__.py +0 -0
  92. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/post_annotation/actions/post_annotation.py +0 -0
  93. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/post_annotation/templates/config.yaml +0 -0
  94. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/post_annotation/templates/plugin/__init__.py +0 -0
  95. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/post_annotation/templates/plugin/post_annotation.py +0 -0
  96. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/pre_annotation/__init__.py +0 -0
  97. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/pre_annotation/actions/__init__.py +0 -0
  98. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation.py +0 -0
  99. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/pre_annotation/templates/config.yaml +0 -0
  100. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/pre_annotation/templates/plugin/__init__.py +0 -0
  101. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/pre_annotation/templates/plugin/pre_annotation.py +0 -0
  102. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/registry.py +0 -0
  103. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/smart_tool/__init__.py +0 -0
  104. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/smart_tool/actions/__init__.py +0 -0
  105. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/smart_tool/actions/auto_label.py +0 -0
  106. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/smart_tool/templates/config.yaml +0 -0
  107. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/smart_tool/templates/plugin/__init__.py +0 -0
  108. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/smart_tool/templates/plugin/auto_label.py +0 -0
  109. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/templates.py +0 -0
  110. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/upload/__init__.py +0 -0
  111. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/upload/actions/__init__.py +0 -0
  112. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/upload/templates/config.yaml +0 -0
  113. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py +0 -0
  114. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/categories/upload/templates/plugin/upload.py +0 -0
  115. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/enums.py +0 -0
  116. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/exceptions.py +0 -0
  117. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/templates/cookiecutter.json +0 -0
  118. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/templates/hooks/post_gen_project.py +0 -0
  119. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/templates/hooks/pre_prompt.py +0 -0
  120. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.gitignore +0 -0
  121. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.pre-commit-config.yaml +0 -0
  122. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/README.md +0 -0
  123. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/config.yaml +0 -0
  124. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/plugin/__init__.py +0 -0
  125. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/pyproject.toml +0 -0
  126. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/requirements.txt +0 -0
  127. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/upload.py +0 -0
  128. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/plugins/utils.py +0 -0
  129. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/shared/__init__.py +0 -0
  130. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/shared/enums.py +0 -0
  131. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/types.py +0 -0
  132. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/utils/__init__.py +0 -0
  133. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/utils/dataset.py +0 -0
  134. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/utils/debug.py +0 -0
  135. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/utils/module_loading.py +0 -0
  136. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/utils/network.py +0 -0
  137. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/utils/pydantic/__init__.py +0 -0
  138. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/utils/pydantic/config.py +0 -0
  139. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/utils/pydantic/errors.py +0 -0
  140. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/utils/pydantic/validators.py +0 -0
  141. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/utils/storage/__init__.py +0 -0
  142. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/utils/storage/providers/__init__.py +0 -0
  143. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/utils/storage/providers/gcp.py +0 -0
  144. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/utils/storage/providers/s3.py +0 -0
  145. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/utils/storage/providers/sftp.py +0 -0
  146. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/utils/storage/registry.py +0 -0
  147. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk/utils/string.py +0 -0
  148. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk.egg-info/dependency_links.txt +0 -0
  149. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk.egg-info/entry_points.txt +0 -0
  150. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk.egg-info/requires.txt +0 -0
  151. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/synapse_sdk.egg-info/top_level.txt +0 -0
  152. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/tests/__init__.py +0 -0
  153. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/tests/clients/__init__.py +0 -0
  154. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/tests/clients/test_backend_models.py +0 -0
  155. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/tests/clients/test_base_client.py +0 -0
  156. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/tests/clients/test_collection_validators.py +0 -0
  157. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/tests/utils/__init__,py +0 -0
  158. {synapse_sdk-1.0.0a37 → synapse_sdk-1.0.0a38}/tests/utils/test_debug.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synapse-sdk
3
- Version: 1.0.0a37
3
+ Version: 1.0.0a38
4
4
  Summary: synapse sdk
5
5
  Author-email: datamaker <developer@datamaker.io>
6
6
  License: MIT
@@ -11,6 +11,7 @@ from synapse_sdk.utils.file import files_url_to_path_from_objs
11
11
  class BaseClient:
12
12
  name = None
13
13
  base_url = None
14
+ page_size = 100
14
15
 
15
16
  def __init__(self, base_url):
16
17
  self.base_url = base_url
@@ -146,7 +147,8 @@ class BaseClient:
146
147
  else:
147
148
  return response
148
149
 
149
- def _list_all(self, path, url_conversion=None, params=None, **kwargs):
150
+ def _list_all(self, path, url_conversion=None, params={}, **kwargs):
151
+ params['page_size'] = self.page_size
150
152
  response = self._get(path, url_conversion, params=params, **kwargs)
151
153
  yield from response['results']
152
154
  if response['next']:
@@ -133,6 +133,11 @@ class Action:
133
133
  def plugin_package_manager(self):
134
134
  return self.plugin_config.get('package_manager', 'pip')
135
135
 
136
+ @property
137
+ def package_manager_options(self):
138
+ options = {'pip': {}, 'uv': {'uv_pip_install_options': []}}
139
+ return options[self.plugin_package_manager]
140
+
136
141
  def get_run(self):
137
142
  context = {
138
143
  'plugin_release': self.plugin_release,
@@ -147,13 +152,16 @@ class Action:
147
152
  return {env: os.environ[env] for env in self.REQUIRED_ENVS if env in os.environ}
148
153
 
149
154
  def get_runtime_env(self):
150
- runtime_env = {self.plugin_package_manager: [], 'working_dir': self.plugin_url}
155
+ runtime_env = {self.plugin_package_manager: {'packages': []}, 'working_dir': self.plugin_url}
151
156
 
152
157
  if self.requirements:
153
- runtime_env[self.plugin_package_manager] += self.requirements
158
+ runtime_env[self.plugin_package_manager]['packages'] += self.requirements
154
159
 
155
160
  if self.debug:
156
- runtime_env[self.plugin_package_manager] += self.debug_modules
161
+ runtime_env[self.plugin_package_manager]['packages'] += self.debug_modules
162
+
163
+ for key, value in self.package_manager_options.items():
164
+ runtime_env[self.plugin_package_manager][key] = value
157
165
 
158
166
  # 맨 마지막에 진행되어야 함
159
167
  runtime_env['env_vars'] = self.envs
@@ -0,0 +1,268 @@
1
+ import copy
2
+ import tempfile
3
+ from pathlib import Path
4
+ from typing import Annotated, Optional
5
+
6
+ from pydantic import AfterValidator, BaseModel, field_validator
7
+ from pydantic_core import PydanticCustomError
8
+
9
+ from synapse_sdk.clients.exceptions import ClientError
10
+ from synapse_sdk.plugins.categories.decorators import register_action
11
+ from synapse_sdk.plugins.categories.neural_net.actions.train import TrainAction, TrainRun
12
+ from synapse_sdk.plugins.enums import PluginCategory, RunMethod
13
+ from synapse_sdk.utils.file import archive
14
+ from synapse_sdk.utils.module_loading import import_string
15
+ from synapse_sdk.utils.pydantic.validators import non_blank
16
+
17
+
18
+ class TuneRun(TrainRun):
19
+ is_tune = True
20
+ completed_samples = 0
21
+ num_samples = 0
22
+ checkpoint_output = None
23
+
24
+
25
+ class TuneConfig(BaseModel):
26
+ mode: Optional[str] = None
27
+ metric: Optional[str] = None
28
+ num_samples: int = 1
29
+ max_concurrent_trials: Optional[int] = None
30
+
31
+
32
+ class TuneParams(BaseModel):
33
+ name: Annotated[str, AfterValidator(non_blank)]
34
+ description: str
35
+ checkpoint: int | None
36
+ dataset: int
37
+ tune_config: TuneConfig
38
+
39
+ @field_validator('name')
40
+ @staticmethod
41
+ def unique_name(value, info):
42
+ action = info.context['action']
43
+ client = action.client
44
+ try:
45
+ job_exists = client.exists(
46
+ 'list_jobs',
47
+ params={
48
+ 'ids_ex': action.job_id,
49
+ 'category': 'neural_net',
50
+ 'job__action': 'tune',
51
+ 'is_active': True,
52
+ 'params': f'name:{value}',
53
+ },
54
+ )
55
+ assert not job_exists, '존재하는 튜닝 작업 이름입니다.'
56
+ except ClientError:
57
+ raise PydanticCustomError('client_error', '')
58
+ return value
59
+
60
+
61
+ @register_action
62
+ class TuneAction(TrainAction):
63
+ """
64
+ **Must read** Important notes before using Tune:
65
+
66
+ 1. Path to the model output (which is the return value of your train function)
67
+ should be set to the checkpoint_output attribute of the run object **before**
68
+ starting the training.
69
+ 2. Before exiting the training function, report the results to Tune.
70
+ 3. When using own tune.py, take note of the difference in the order of parameters.
71
+ tune() function starts with hyperparameter, run, dataset, checkpoint, **kwargs
72
+ whereas the train() function starts with run, dataset, hyperparameter, checkpoint, **kwargs.
73
+ ----
74
+ 1)
75
+ Set the output path for the checkpoint to export best model
76
+
77
+ output_path = Path('path/to/your/weights')
78
+ run.checkpoint_output = str(output_path)
79
+
80
+ 2)
81
+ Before exiting the training function, report the results to Tune.
82
+ The results_dict should contain the metrics you want to report.
83
+
84
+ Example: (In train function)
85
+ results_dict = {
86
+ "accuracy": accuracy,
87
+ "loss": loss,
88
+ # Add other metrics as needed
89
+ }
90
+ if hasattr(self.dm_run, 'is_tune') and self.dm_run.is_tune:
91
+ tune.report(results_dict, checkpoint=tune.Checkpoint.from_directory(self.dm_run.checkpoint_output))
92
+
93
+
94
+ 3)
95
+ tune() function takes hyperparameter, run, dataset, checkpoint, **kwargs in that order
96
+ whereas train() function takes run, dataset, hyperparameter, checkpoint, **kwargs in that order.
97
+
98
+ --------------------------------------------------------------------------------------------------------
99
+
100
+ **중요** Tune 사용 전 반드시 읽어야 할 사항들
101
+
102
+ 1. 본 플러그인의 train 함수에서, 학습을 진행하기 코드 전에
103
+ 결과 모델 파일의 경로(train함수의 리턴 값)을 checkpoint_output 속성에 설정해야 합니다.
104
+ 2. 학습이 종료되기 전에, 결과를 Tune에 보고해야 합니다.
105
+ 3. 플러그인에서 tune.py를 직접 생성해서 사용할 시, 매개변수의 순서가 다릅니다.
106
+
107
+ ----
108
+ 1)
109
+ 체크포인트를 설정할 경로를 지정합니다.
110
+ output_path = Path('path/to/your/weights')
111
+ run.checkpoint_output = str(output_path)
112
+
113
+ 2)
114
+ 학습이 종료되기 전에, 결과를 Tune에 보고합니다.
115
+ results_dict = {
116
+ "accuracy": accuracy,
117
+ "loss": loss,
118
+ # 필요한 다른 메트릭 추가
119
+ }
120
+ if hasattr(self.dm_run, 'is_tune') and self.dm_run.is_tune:
121
+ tune.report(results_dict, checkpoint=tune.Checkpoint.from_directory(self.dm_run.checkpoint_output))
122
+
123
+ 3)
124
+ tune() 함수는 hyperparameter, run, dataset, checkpoint, **kwargs 순서이고
125
+ train() 함수는 run, dataset, hyperparameter, checkpoint, **kwargs 순서입니다.
126
+ """
127
+
128
+ name = 'tune'
129
+ category = PluginCategory.NEURAL_NET
130
+ method = RunMethod.JOB
131
+ run_class = TuneRun
132
+ params_model = TuneParams
133
+ progress_categories = {
134
+ 'dataset': {
135
+ 'proportion': 5,
136
+ },
137
+ 'trials': {
138
+ 'proportion': 90,
139
+ },
140
+ 'model_upload': {
141
+ 'proportion': 5,
142
+ },
143
+ }
144
+
145
+ def start(self):
146
+ from ray import tune
147
+
148
+ # download dataset
149
+ self.run.log_message('Preparing dataset for hyperparameter tuning.')
150
+ input_dataset = self.get_dataset()
151
+
152
+ # retrieve checkpoint
153
+ checkpoint = None
154
+ if self.params['checkpoint']:
155
+ self.run.log_message('Retrieving checkpoint.')
156
+ checkpoint = self.get_model(self.params['checkpoint'])
157
+
158
+ # train dataset
159
+ self.run.log_message('Starting training for hyperparameter tuning.')
160
+
161
+ # Save num_samples to TuneRun for logging
162
+ self.run.num_samples = self.params['tune_config']['num_samples']
163
+
164
+ entrypoint = self.entrypoint
165
+ if not self._tune_override_exists():
166
+ # entrypoint must be train entrypoint
167
+ def _tune(param_space, run, dataset, checkpoint=None, **kwargs):
168
+ return entrypoint(run, dataset, param_space, checkpoint, **kwargs)
169
+
170
+ entrypoint = _tune
171
+
172
+ trainable = tune.with_parameters(entrypoint, run=self.run, dataset=input_dataset, checkpoint=checkpoint)
173
+ tune_config = self.params['tune_config']
174
+
175
+ hyperparameter = self.params['hyperparameter']
176
+ param_space = self.convert_tune_params(hyperparameter)
177
+ temp_path = tempfile.TemporaryDirectory()
178
+
179
+ tuner = tune.Tuner(
180
+ tune.with_resources(trainable, resources=self.tune_resources),
181
+ tune_config=tune.TuneConfig(**tune_config),
182
+ run_config=tune.RunConfig(
183
+ name=f'synapse_tune_hpo_{self.job_id}',
184
+ log_to_file=('stdout.log', 'stderr.log'),
185
+ storage_path=temp_path.name,
186
+ ),
187
+ param_space=param_space,
188
+ )
189
+ result = tuner.fit()
190
+
191
+ best_result = result.get_best_result()
192
+
193
+ # upload model_data
194
+ self.run.log_message('Registering best model data.')
195
+ self.run.set_progress(0, 1, category='model_upload')
196
+ self.create_model_from_result(best_result)
197
+ self.run.set_progress(1, 1, category='model_upload')
198
+
199
+ self.run.end_log()
200
+
201
+ return {'best_result': best_result.config}
202
+
203
+ @property
204
+ def tune_resources(self):
205
+ resources = {}
206
+ for option in ['num_cpus', 'num_gpus']:
207
+ option_value = self.params.get(option)
208
+ if option_value:
209
+ # Remove the 'num_' prefix and trailing s from the option name
210
+ resources[(lambda s: s[4:-1])(option)] = option_value
211
+ return resources
212
+
213
+ def create_model_from_result(self, result):
214
+ params = copy.deepcopy(self.params)
215
+ configuration_fields = ['hyperparameter']
216
+ configuration = {field: params.pop(field) for field in configuration_fields}
217
+
218
+ with tempfile.TemporaryDirectory() as temp_path:
219
+ archive_path = Path(temp_path, 'archive.zip')
220
+
221
+ # Archive tune results
222
+ # https://docs.ray.io/en/latest/tune/tutorials/tune_get_data_in_and_out.html#getting-data-out-of-tune-using-checkpoints-other-artifacts
223
+ archive(result.path, archive_path)
224
+
225
+ return self.client.create_model({
226
+ 'plugin': self.plugin_release.plugin,
227
+ 'version': self.plugin_release.version,
228
+ 'file': str(archive_path),
229
+ 'configuration': configuration,
230
+ **params,
231
+ })
232
+
233
+ @staticmethod
234
+ def convert_tune_params(param_list):
235
+ """
236
+ Convert YAML hyperparameter configuration to Ray Tune parameter dictionary.
237
+
238
+ Args:
239
+ param_list (list): List of hyperparameter configurations.
240
+
241
+ Returns:
242
+ dict: Ray Tune parameter dictionary
243
+ """
244
+ from ray import tune
245
+
246
+ param_space = {}
247
+
248
+ for param in param_list:
249
+ name = param['name']
250
+ param_type = param['type']
251
+
252
+ if param_type == 'loguniform':
253
+ param_space[name] = tune.loguniform(param['min'], param['max'])
254
+ elif param_type == 'choice':
255
+ param_space[name] = tune.choice(param['options'])
256
+ elif param_type == 'randint':
257
+ param_space[name] = tune.randint(param['min'], param['max'])
258
+ # Add more type handlers as needed
259
+
260
+ return param_space
261
+
262
+ @staticmethod
263
+ def _tune_override_exists(module_path='plugin.tune') -> bool:
264
+ try:
265
+ import_string(module_path)
266
+ return True
267
+ except ImportError:
268
+ return False
@@ -218,12 +218,14 @@ class UploadAction(Action):
218
218
  organized_files = uploader.handle_upload_files()
219
219
  if not self._validate_organized_files(file_specification_template, organized_files):
220
220
  self.run.log_message('Validate organized files failed.')
221
+ self.run.end_log()
221
222
  return result
222
223
 
223
224
  # Upload files to synapse-backend.
224
225
  organized_files_count = len(organized_files)
225
226
  if not organized_files_count:
226
227
  self.run.log_message('Files not found on the path.', context=Context.WARNING.value)
228
+ self.run.end_log()
227
229
  return result
228
230
  uploaded_files = self._upload_files(organized_files, organized_files_count)
229
231
  result['uploaded_files_count'] = len(uploaded_files)
@@ -232,6 +234,7 @@ class UploadAction(Action):
232
234
  upload_result_count = len(uploaded_files)
233
235
  if not upload_result_count:
234
236
  self.run.log_message('No files were uploaded.', context=Context.WARNING.value)
237
+ self.run.end_log()
235
238
  return result
236
239
  generated_data_units = self._generate_data_units(uploaded_files, upload_result_count)
237
240
  result['generated_data_units_count'] = len(generated_data_units)
@@ -239,6 +242,7 @@ class UploadAction(Action):
239
242
  # Setup task with uploaded synapse-backend data units.
240
243
  if not len(generated_data_units):
241
244
  self.run.log_message('No data units were generated.', context=Context.WARNING.value)
245
+ self.run.end_log()
242
246
  return result
243
247
 
244
248
  if self.config['options']['allow_generate_tasks'] and self.params['is_generate_tasks']:
@@ -255,6 +259,7 @@ class UploadAction(Action):
255
259
  else:
256
260
  self.run.log_message('Generating ground truths process has passed.')
257
261
 
262
+ self.run.end_log()
258
263
  return result
259
264
 
260
265
  def _analyze_collection(self) -> Dict:
@@ -45,6 +45,11 @@ class PluginRelease:
45
45
  def package_manager(self):
46
46
  return self.config.get('package_manager', 'pip')
47
47
 
48
+ @cached_property
49
+ def package_manager_options(self):
50
+ options = {'pip': {}, 'uv': {'uv_pip_install_options': []}}
51
+ return options[self.package_manager]
52
+
48
53
  @cached_property
49
54
  def checksum(self):
50
55
  return hash_text(self.code)
@@ -69,7 +74,10 @@ class PluginRelease:
69
74
 
70
75
  warm_up.options(
71
76
  runtime_env={
72
- self.package_manager: ['-r ${RAY_RUNTIME_ENV_CREATE_WORKING_DIR}/requirements.txt'],
77
+ self.package_manager: {
78
+ 'packages': ['-r ${RAY_RUNTIME_ENV_CREATE_WORKING_DIR}/requirements.txt']
79
+ ** self.package_manager_options
80
+ },
73
81
  'working_dir': self.get_url(self.envs['SYNAPSE_PLUGIN_STORAGE']),
74
82
  },
75
83
  scheduling_strategy=strategy,
@@ -150,11 +150,12 @@ def calculate_checksum(file_path, prefix=''):
150
150
  return checksum
151
151
 
152
152
 
153
- def archive(input_path, output_path):
153
+ def archive(input_path, output_path, append=False):
154
154
  input_path = Path(input_path)
155
155
  output_path = Path(output_path)
156
156
 
157
- with zipfile.ZipFile(output_path, mode='w', compression=zipfile.ZIP_DEFLATED) as zipf:
157
+ mode = 'a' if append and output_path.exists() else 'w'
158
+ with zipfile.ZipFile(output_path, mode=mode, compression=zipfile.ZIP_DEFLATED) as zipf:
158
159
  if input_path.is_file():
159
160
  zipf.write(input_path, input_path.name)
160
161
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synapse-sdk
3
- Version: 1.0.0a37
3
+ Version: 1.0.0a38
4
4
  Summary: synapse sdk
5
5
  Author-email: datamaker <developer@datamaker.io>
6
6
  License: MIT
@@ -88,6 +88,7 @@ synapse_sdk/plugins/categories/neural_net/actions/deployment.py
88
88
  synapse_sdk/plugins/categories/neural_net/actions/inference.py
89
89
  synapse_sdk/plugins/categories/neural_net/actions/test.py
90
90
  synapse_sdk/plugins/categories/neural_net/actions/train.py
91
+ synapse_sdk/plugins/categories/neural_net/actions/tune.py
91
92
  synapse_sdk/plugins/categories/neural_net/base/__init__.py
92
93
  synapse_sdk/plugins/categories/neural_net/base/inference.py
93
94
  synapse_sdk/plugins/categories/neural_net/templates/config.yaml
File without changes
File without changes
File without changes