synapse-sdk 1.0.0a35__py3-none-any.whl → 2025.11.7__py3-none-any.whl

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 (307) hide show
  1. synapse_sdk/__init__.py +24 -0
  2. synapse_sdk/cli/__init__.py +308 -5
  3. synapse_sdk/cli/alias/utils.py +1 -1
  4. synapse_sdk/cli/code_server.py +687 -0
  5. synapse_sdk/cli/config.py +440 -0
  6. synapse_sdk/cli/devtools.py +90 -0
  7. synapse_sdk/cli/plugin/publish.py +23 -15
  8. synapse_sdk/clients/agent/__init__.py +9 -3
  9. synapse_sdk/clients/agent/container.py +133 -0
  10. synapse_sdk/clients/agent/core.py +19 -0
  11. synapse_sdk/clients/agent/ray.py +298 -9
  12. synapse_sdk/clients/backend/__init__.py +28 -12
  13. synapse_sdk/clients/backend/annotation.py +9 -1
  14. synapse_sdk/clients/backend/core.py +31 -4
  15. synapse_sdk/clients/backend/data_collection.py +186 -0
  16. synapse_sdk/clients/backend/hitl.py +1 -1
  17. synapse_sdk/clients/backend/integration.py +4 -3
  18. synapse_sdk/clients/backend/ml.py +1 -1
  19. synapse_sdk/clients/backend/models.py +35 -1
  20. synapse_sdk/clients/base.py +309 -36
  21. synapse_sdk/clients/ray/serve.py +2 -0
  22. synapse_sdk/devtools/__init__.py +0 -0
  23. synapse_sdk/devtools/config.py +94 -0
  24. synapse_sdk/devtools/docs/.gitignore +20 -0
  25. synapse_sdk/devtools/docs/README.md +41 -0
  26. synapse_sdk/devtools/docs/blog/2019-05-28-first-blog-post.md +12 -0
  27. synapse_sdk/devtools/docs/blog/2019-05-29-long-blog-post.md +44 -0
  28. synapse_sdk/devtools/docs/blog/2021-08-01-mdx-blog-post.mdx +24 -0
  29. synapse_sdk/devtools/docs/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg +0 -0
  30. synapse_sdk/devtools/docs/blog/2021-08-26-welcome/index.md +29 -0
  31. synapse_sdk/devtools/docs/blog/authors.yml +25 -0
  32. synapse_sdk/devtools/docs/blog/tags.yml +19 -0
  33. synapse_sdk/devtools/docs/docs/api/clients/agent.md +43 -0
  34. synapse_sdk/devtools/docs/docs/api/clients/annotation-mixin.md +378 -0
  35. synapse_sdk/devtools/docs/docs/api/clients/backend.md +420 -0
  36. synapse_sdk/devtools/docs/docs/api/clients/base.md +257 -0
  37. synapse_sdk/devtools/docs/docs/api/clients/core-mixin.md +477 -0
  38. synapse_sdk/devtools/docs/docs/api/clients/data-collection-mixin.md +422 -0
  39. synapse_sdk/devtools/docs/docs/api/clients/hitl-mixin.md +554 -0
  40. synapse_sdk/devtools/docs/docs/api/clients/index.md +391 -0
  41. synapse_sdk/devtools/docs/docs/api/clients/integration-mixin.md +571 -0
  42. synapse_sdk/devtools/docs/docs/api/clients/ml-mixin.md +578 -0
  43. synapse_sdk/devtools/docs/docs/api/clients/ray.md +342 -0
  44. synapse_sdk/devtools/docs/docs/api/index.md +52 -0
  45. synapse_sdk/devtools/docs/docs/api/plugins/categories.md +43 -0
  46. synapse_sdk/devtools/docs/docs/api/plugins/models.md +114 -0
  47. synapse_sdk/devtools/docs/docs/api/plugins/utils.md +328 -0
  48. synapse_sdk/devtools/docs/docs/categories.md +0 -0
  49. synapse_sdk/devtools/docs/docs/cli-usage.md +280 -0
  50. synapse_sdk/devtools/docs/docs/concepts/index.md +38 -0
  51. synapse_sdk/devtools/docs/docs/configuration.md +83 -0
  52. synapse_sdk/devtools/docs/docs/contributing.md +306 -0
  53. synapse_sdk/devtools/docs/docs/examples/index.md +29 -0
  54. synapse_sdk/devtools/docs/docs/faq.md +179 -0
  55. synapse_sdk/devtools/docs/docs/features/converters/index.md +455 -0
  56. synapse_sdk/devtools/docs/docs/features/index.md +24 -0
  57. synapse_sdk/devtools/docs/docs/features/utils/file.md +415 -0
  58. synapse_sdk/devtools/docs/docs/features/utils/network.md +378 -0
  59. synapse_sdk/devtools/docs/docs/features/utils/storage.md +57 -0
  60. synapse_sdk/devtools/docs/docs/features/utils/types.md +51 -0
  61. synapse_sdk/devtools/docs/docs/installation.md +94 -0
  62. synapse_sdk/devtools/docs/docs/introduction.md +47 -0
  63. synapse_sdk/devtools/docs/docs/plugins/categories/neural-net-plugins/train-action-overview.md +814 -0
  64. synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/pre-annotation-plugin-overview.md +198 -0
  65. synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-action-development.md +1645 -0
  66. synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-overview.md +717 -0
  67. synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-template-development.md +1380 -0
  68. synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-action.md +948 -0
  69. synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-overview.md +544 -0
  70. synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-template.md +766 -0
  71. synapse_sdk/devtools/docs/docs/plugins/export-plugins.md +1092 -0
  72. synapse_sdk/devtools/docs/docs/plugins/plugins.md +852 -0
  73. synapse_sdk/devtools/docs/docs/quickstart.md +78 -0
  74. synapse_sdk/devtools/docs/docs/troubleshooting.md +519 -0
  75. synapse_sdk/devtools/docs/docs/tutorial-basics/_category_.json +8 -0
  76. synapse_sdk/devtools/docs/docs/tutorial-basics/congratulations.md +23 -0
  77. synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-blog-post.md +34 -0
  78. synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-document.md +57 -0
  79. synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-page.md +43 -0
  80. synapse_sdk/devtools/docs/docs/tutorial-basics/deploy-your-site.md +31 -0
  81. synapse_sdk/devtools/docs/docs/tutorial-basics/markdown-features.mdx +152 -0
  82. synapse_sdk/devtools/docs/docs/tutorial-extras/_category_.json +7 -0
  83. synapse_sdk/devtools/docs/docs/tutorial-extras/img/docsVersionDropdown.png +0 -0
  84. synapse_sdk/devtools/docs/docs/tutorial-extras/img/localeDropdown.png +0 -0
  85. synapse_sdk/devtools/docs/docs/tutorial-extras/manage-docs-versions.md +55 -0
  86. synapse_sdk/devtools/docs/docs/tutorial-extras/translate-your-site.md +88 -0
  87. synapse_sdk/devtools/docs/docusaurus.config.ts +148 -0
  88. synapse_sdk/devtools/docs/i18n/ko/code.json +325 -0
  89. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/agent.md +43 -0
  90. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/annotation-mixin.md +289 -0
  91. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/backend.md +420 -0
  92. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/base.md +257 -0
  93. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/core-mixin.md +417 -0
  94. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/data-collection-mixin.md +356 -0
  95. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/hitl-mixin.md +192 -0
  96. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/index.md +391 -0
  97. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/integration-mixin.md +479 -0
  98. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/ml-mixin.md +284 -0
  99. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/ray.md +342 -0
  100. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/index.md +52 -0
  101. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/plugins/models.md +114 -0
  102. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/categories.md +0 -0
  103. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/cli-usage.md +280 -0
  104. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/concepts/index.md +38 -0
  105. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/configuration.md +83 -0
  106. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/contributing.md +306 -0
  107. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/examples/index.md +29 -0
  108. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/faq.md +179 -0
  109. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/converters/index.md +30 -0
  110. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/index.md +24 -0
  111. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/file.md +415 -0
  112. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/network.md +378 -0
  113. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/storage.md +60 -0
  114. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/types.md +51 -0
  115. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/installation.md +94 -0
  116. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/introduction.md +47 -0
  117. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/neural-net-plugins/train-action-overview.md +815 -0
  118. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/pre-annotation-plugin-overview.md +198 -0
  119. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-action-development.md +1645 -0
  120. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-overview.md +717 -0
  121. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-template-development.md +1380 -0
  122. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-action.md +948 -0
  123. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-overview.md +544 -0
  124. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-template.md +766 -0
  125. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/export-plugins.md +1092 -0
  126. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/plugins.md +117 -0
  127. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/quickstart.md +78 -0
  128. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/troubleshooting.md +519 -0
  129. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current.json +34 -0
  130. synapse_sdk/devtools/docs/i18n/ko/docusaurus-theme-classic/footer.json +42 -0
  131. synapse_sdk/devtools/docs/i18n/ko/docusaurus-theme-classic/navbar.json +18 -0
  132. synapse_sdk/devtools/docs/package-lock.json +18784 -0
  133. synapse_sdk/devtools/docs/package.json +48 -0
  134. synapse_sdk/devtools/docs/sidebars.ts +122 -0
  135. synapse_sdk/devtools/docs/src/components/HomepageFeatures/index.tsx +71 -0
  136. synapse_sdk/devtools/docs/src/components/HomepageFeatures/styles.module.css +11 -0
  137. synapse_sdk/devtools/docs/src/css/custom.css +30 -0
  138. synapse_sdk/devtools/docs/src/pages/index.module.css +23 -0
  139. synapse_sdk/devtools/docs/src/pages/index.tsx +21 -0
  140. synapse_sdk/devtools/docs/src/pages/markdown-page.md +7 -0
  141. synapse_sdk/devtools/docs/static/.nojekyll +0 -0
  142. synapse_sdk/devtools/docs/static/img/docusaurus-social-card.jpg +0 -0
  143. synapse_sdk/devtools/docs/static/img/docusaurus.png +0 -0
  144. synapse_sdk/devtools/docs/static/img/favicon.ico +0 -0
  145. synapse_sdk/devtools/docs/static/img/logo.png +0 -0
  146. synapse_sdk/devtools/docs/static/img/undraw_docusaurus_mountain.svg +171 -0
  147. synapse_sdk/devtools/docs/static/img/undraw_docusaurus_react.svg +170 -0
  148. synapse_sdk/devtools/docs/static/img/undraw_docusaurus_tree.svg +40 -0
  149. synapse_sdk/devtools/docs/tsconfig.json +8 -0
  150. synapse_sdk/devtools/server.py +41 -0
  151. synapse_sdk/devtools/streamlit_app/__init__.py +5 -0
  152. synapse_sdk/devtools/streamlit_app/app.py +128 -0
  153. synapse_sdk/devtools/streamlit_app/services/__init__.py +11 -0
  154. synapse_sdk/devtools/streamlit_app/services/job_service.py +233 -0
  155. synapse_sdk/devtools/streamlit_app/services/plugin_service.py +236 -0
  156. synapse_sdk/devtools/streamlit_app/services/serve_service.py +95 -0
  157. synapse_sdk/devtools/streamlit_app/ui/__init__.py +15 -0
  158. synapse_sdk/devtools/streamlit_app/ui/config_tab.py +76 -0
  159. synapse_sdk/devtools/streamlit_app/ui/deployment_tab.py +66 -0
  160. synapse_sdk/devtools/streamlit_app/ui/http_tab.py +125 -0
  161. synapse_sdk/devtools/streamlit_app/ui/jobs_tab.py +573 -0
  162. synapse_sdk/devtools/streamlit_app/ui/serve_tab.py +346 -0
  163. synapse_sdk/devtools/streamlit_app/ui/status_bar.py +118 -0
  164. synapse_sdk/devtools/streamlit_app/utils/__init__.py +40 -0
  165. synapse_sdk/devtools/streamlit_app/utils/json_viewer.py +197 -0
  166. synapse_sdk/devtools/streamlit_app/utils/log_formatter.py +38 -0
  167. synapse_sdk/devtools/streamlit_app/utils/styles.py +241 -0
  168. synapse_sdk/devtools/streamlit_app/utils/ui_components.py +289 -0
  169. synapse_sdk/devtools/streamlit_app.py +10 -0
  170. synapse_sdk/loggers.py +65 -7
  171. synapse_sdk/plugins/README.md +1340 -0
  172. synapse_sdk/plugins/categories/base.py +73 -11
  173. synapse_sdk/plugins/categories/data_validation/actions/validation.py +72 -0
  174. synapse_sdk/plugins/categories/data_validation/templates/plugin/validation.py +33 -5
  175. synapse_sdk/plugins/categories/export/actions/__init__.py +3 -0
  176. synapse_sdk/plugins/categories/export/actions/export/__init__.py +28 -0
  177. synapse_sdk/plugins/categories/export/actions/export/action.py +165 -0
  178. synapse_sdk/plugins/categories/export/actions/export/enums.py +113 -0
  179. synapse_sdk/plugins/categories/export/actions/export/exceptions.py +53 -0
  180. synapse_sdk/plugins/categories/export/actions/export/models.py +74 -0
  181. synapse_sdk/plugins/categories/export/actions/export/run.py +195 -0
  182. synapse_sdk/plugins/categories/export/actions/{export.py → export/utils.py} +47 -82
  183. synapse_sdk/plugins/categories/export/templates/config.yaml +19 -1
  184. synapse_sdk/plugins/categories/export/templates/plugin/__init__.py +390 -0
  185. synapse_sdk/plugins/categories/export/templates/plugin/export.py +153 -129
  186. synapse_sdk/plugins/categories/neural_net/actions/deployment.py +9 -62
  187. synapse_sdk/plugins/categories/neural_net/actions/train.py +1062 -32
  188. synapse_sdk/plugins/categories/neural_net/actions/tune.py +534 -0
  189. synapse_sdk/plugins/categories/neural_net/templates/config.yaml +27 -5
  190. synapse_sdk/plugins/categories/neural_net/templates/plugin/inference.py +26 -10
  191. synapse_sdk/plugins/categories/pre_annotation/actions/__init__.py +4 -0
  192. synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation/__init__.py +3 -0
  193. synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation/action.py +10 -0
  194. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/__init__.py +28 -0
  195. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/action.py +145 -0
  196. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/enums.py +269 -0
  197. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/exceptions.py +14 -0
  198. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/factory.py +76 -0
  199. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/models.py +97 -0
  200. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/orchestrator.py +250 -0
  201. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/run.py +64 -0
  202. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/__init__.py +17 -0
  203. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/annotation.py +287 -0
  204. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/base.py +170 -0
  205. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/extraction.py +83 -0
  206. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/metrics.py +87 -0
  207. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/preprocessor.py +127 -0
  208. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/validation.py +143 -0
  209. synapse_sdk/plugins/categories/pre_annotation/actions/to_task.py +966 -0
  210. synapse_sdk/plugins/categories/pre_annotation/templates/config.yaml +19 -0
  211. synapse_sdk/plugins/categories/pre_annotation/templates/plugin/to_task.py +40 -0
  212. synapse_sdk/plugins/categories/upload/actions/upload/__init__.py +19 -0
  213. synapse_sdk/plugins/categories/upload/actions/upload/action.py +232 -0
  214. synapse_sdk/plugins/categories/upload/actions/upload/context.py +185 -0
  215. synapse_sdk/plugins/categories/upload/actions/upload/enums.py +471 -0
  216. synapse_sdk/plugins/categories/upload/actions/upload/exceptions.py +36 -0
  217. synapse_sdk/plugins/categories/upload/actions/upload/factory.py +138 -0
  218. synapse_sdk/plugins/categories/upload/actions/upload/models.py +203 -0
  219. synapse_sdk/plugins/categories/upload/actions/upload/orchestrator.py +183 -0
  220. synapse_sdk/plugins/categories/upload/actions/upload/registry.py +113 -0
  221. synapse_sdk/plugins/categories/upload/actions/upload/run.py +179 -0
  222. synapse_sdk/plugins/categories/upload/actions/upload/steps/__init__.py +1 -0
  223. synapse_sdk/plugins/categories/upload/actions/upload/steps/base.py +107 -0
  224. synapse_sdk/plugins/categories/upload/actions/upload/steps/cleanup.py +62 -0
  225. synapse_sdk/plugins/categories/upload/actions/upload/steps/collection.py +63 -0
  226. synapse_sdk/plugins/categories/upload/actions/upload/steps/generate.py +84 -0
  227. synapse_sdk/plugins/categories/upload/actions/upload/steps/initialize.py +82 -0
  228. synapse_sdk/plugins/categories/upload/actions/upload/steps/metadata.py +235 -0
  229. synapse_sdk/plugins/categories/upload/actions/upload/steps/organize.py +203 -0
  230. synapse_sdk/plugins/categories/upload/actions/upload/steps/upload.py +97 -0
  231. synapse_sdk/plugins/categories/upload/actions/upload/steps/validate.py +71 -0
  232. synapse_sdk/plugins/categories/upload/actions/upload/strategies/__init__.py +1 -0
  233. synapse_sdk/plugins/categories/upload/actions/upload/strategies/base.py +82 -0
  234. synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/__init__.py +1 -0
  235. synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/batch.py +39 -0
  236. synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/single.py +29 -0
  237. synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/__init__.py +1 -0
  238. synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/flat.py +258 -0
  239. synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/recursive.py +281 -0
  240. synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/__init__.py +1 -0
  241. synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/excel.py +174 -0
  242. synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/none.py +16 -0
  243. synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/__init__.py +1 -0
  244. synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/sync.py +84 -0
  245. synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/__init__.py +1 -0
  246. synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/default.py +60 -0
  247. synapse_sdk/plugins/categories/upload/actions/upload/utils.py +250 -0
  248. synapse_sdk/plugins/categories/upload/templates/README.md +470 -0
  249. synapse_sdk/plugins/categories/upload/templates/config.yaml +29 -2
  250. synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py +294 -0
  251. synapse_sdk/plugins/categories/upload/templates/plugin/upload.py +88 -30
  252. synapse_sdk/plugins/models.py +122 -16
  253. synapse_sdk/plugins/templates/plugin-config-schema.json +406 -0
  254. synapse_sdk/plugins/templates/schema.json +491 -0
  255. synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/requirements.txt +1 -1
  256. synapse_sdk/plugins/utils/__init__.py +46 -0
  257. synapse_sdk/plugins/utils/actions.py +119 -0
  258. synapse_sdk/plugins/utils/config.py +203 -0
  259. synapse_sdk/plugins/{utils.py → utils/legacy.py} +26 -46
  260. synapse_sdk/plugins/utils/ray_gcs.py +66 -0
  261. synapse_sdk/plugins/utils/registry.py +58 -0
  262. synapse_sdk/shared/__init__.py +25 -0
  263. synapse_sdk/shared/enums.py +93 -0
  264. synapse_sdk/utils/converters/__init__.py +240 -0
  265. synapse_sdk/utils/converters/coco/__init__.py +0 -0
  266. synapse_sdk/utils/converters/coco/from_dm.py +322 -0
  267. synapse_sdk/utils/converters/coco/to_dm.py +215 -0
  268. synapse_sdk/utils/converters/dm/__init__.py +56 -0
  269. synapse_sdk/utils/converters/dm/from_v1.py +627 -0
  270. synapse_sdk/utils/converters/dm/to_v1.py +367 -0
  271. synapse_sdk/utils/converters/pascal/__init__.py +0 -0
  272. synapse_sdk/utils/converters/pascal/from_dm.py +244 -0
  273. synapse_sdk/utils/converters/pascal/to_dm.py +214 -0
  274. synapse_sdk/utils/converters/yolo/__init__.py +0 -0
  275. synapse_sdk/utils/converters/yolo/from_dm.py +384 -0
  276. synapse_sdk/utils/converters/yolo/to_dm.py +267 -0
  277. synapse_sdk/utils/dataset.py +46 -0
  278. synapse_sdk/utils/encryption.py +158 -0
  279. synapse_sdk/utils/file/__init__.py +39 -0
  280. synapse_sdk/utils/file/archive.py +32 -0
  281. synapse_sdk/utils/file/checksum.py +56 -0
  282. synapse_sdk/utils/file/chunking.py +31 -0
  283. synapse_sdk/utils/file/download.py +385 -0
  284. synapse_sdk/utils/file/encoding.py +40 -0
  285. synapse_sdk/utils/file/io.py +22 -0
  286. synapse_sdk/utils/file/video/__init__.py +29 -0
  287. synapse_sdk/utils/file/video/transcode.py +307 -0
  288. synapse_sdk/utils/{file.py → file.py.backup} +84 -2
  289. synapse_sdk/utils/http.py +138 -0
  290. synapse_sdk/utils/network.py +293 -0
  291. synapse_sdk/utils/storage/__init__.py +36 -2
  292. synapse_sdk/utils/storage/providers/__init__.py +141 -0
  293. synapse_sdk/utils/storage/providers/file_system.py +134 -0
  294. synapse_sdk/utils/storage/providers/http.py +190 -0
  295. synapse_sdk/utils/storage/providers/s3.py +54 -6
  296. synapse_sdk/utils/storage/providers/sftp.py +31 -0
  297. synapse_sdk/utils/storage/registry.py +6 -0
  298. synapse_sdk-2025.11.7.dist-info/METADATA +122 -0
  299. synapse_sdk-2025.11.7.dist-info/RECORD +386 -0
  300. {synapse_sdk-1.0.0a35.dist-info → synapse_sdk-2025.11.7.dist-info}/WHEEL +1 -1
  301. synapse_sdk/clients/backend/dataset.py +0 -102
  302. synapse_sdk/plugins/categories/upload/actions/upload.py +0 -293
  303. synapse_sdk-1.0.0a35.dist-info/METADATA +0 -47
  304. synapse_sdk-1.0.0a35.dist-info/RECORD +0 -137
  305. {synapse_sdk-1.0.0a35.dist-info → synapse_sdk-2025.11.7.dist-info}/entry_points.txt +0 -0
  306. {synapse_sdk-1.0.0a35.dist-info → synapse_sdk-2025.11.7.dist-info}/licenses/LICENSE +0 -0
  307. {synapse_sdk-1.0.0a35.dist-info → synapse_sdk-2025.11.7.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,814 @@
1
+ ---
2
+ id: train-action-overview
3
+ title: Train Action Overview
4
+ sidebar_position: 1
5
+ ---
6
+
7
+ # Train Action Overview
8
+
9
+ The Train Action provides unified functionality for both model training and hyperparameter optimization (HPO) through a single interface. It supports regular training workflows and advanced hyperparameter tuning with Ray Tune integration.
10
+
11
+ ## Quick Overview
12
+
13
+ **Category:** Neural Net
14
+ **Available Actions:** `train`
15
+ **Execution Method:** Job-based execution
16
+ **Modes:** Training mode and Hyperparameter Tuning mode
17
+
18
+ ## Key Features
19
+
20
+ - **Unified Interface**: Single action for both training and hyperparameter tuning
21
+ - **Flexible Hyperparameters**: No rigid structure - plugins define their own hyperparameter schema
22
+ - **Ray Tune Integration**: Advanced HPO with multiple search algorithms and schedulers
23
+ - **Automatic Trial Tracking**: Trial IDs automatically injected into logs during tuning
24
+ - **Real-time Trial Progress**: Live trial table updates with hyperparameters and metrics
25
+ - **All Trial Models Upload**: All trial models uploaded, not just the best one
26
+ - **Resource Management**: Configurable CPU/GPU allocation per trial
27
+ - **Best Model Selection**: Automatic best model checkpoint selection after tuning
28
+ - **Progress Tracking**: Real-time progress updates across training/tuning phases
29
+
30
+ ## Modes
31
+
32
+ ### Training Mode (Default)
33
+
34
+ Standard model training with fixed hyperparameters.
35
+
36
+ ```json
37
+ {
38
+ "action": "train",
39
+ "params": {
40
+ "name": "my_model",
41
+ "dataset": 123,
42
+ "checkpoint": null,
43
+ "is_tune": false,
44
+ "hyperparameter": {
45
+ "epochs": 100,
46
+ "batch_size": 32,
47
+ "learning_rate": 0.001,
48
+ "optimizer": "adam"
49
+ }
50
+ }
51
+ }
52
+ ```
53
+
54
+ ### Hyperparameter Tuning Mode
55
+
56
+ Hyperparameter optimization using Ray Tune.
57
+
58
+ ```json
59
+ {
60
+ "action": "train",
61
+ "params": {
62
+ "name": "my_tuning_job",
63
+ "dataset": 123,
64
+ "checkpoint": null,
65
+ "is_tune": true,
66
+ "hyperparameters": [
67
+ {
68
+ "name": "batch_size",
69
+ "type": "choice",
70
+ "options": [16, 32, 64]
71
+ },
72
+ {
73
+ "name": "learning_rate",
74
+ "type": "loguniform",
75
+ "min": 0.0001,
76
+ "max": 0.01,
77
+ "base": 10
78
+ },
79
+ {
80
+ "name": "optimizer",
81
+ "type": "choice",
82
+ "options": ["adam", "sgd"]
83
+ }
84
+ ],
85
+ "tune_config": {
86
+ "mode": "max",
87
+ "metric": "accuracy",
88
+ "num_samples": 10,
89
+ "max_concurrent_trials": 2
90
+ }
91
+ }
92
+ }
93
+ ```
94
+
95
+ ## Configuration Parameters
96
+
97
+ ### Common Parameters (Both Modes)
98
+
99
+ | Parameter | Type | Required | Description |
100
+ | ------------ | ------------- | -------- | ------------------------------------- |
101
+ | `name` | `str` | Yes | Training/tuning job name |
102
+ | `dataset` | `int` | Yes | Dataset ID |
103
+ | `checkpoint` | `int \| None` | No | Checkpoint ID for resuming training |
104
+ | `is_tune` | `bool` | No | Enable tuning mode (default: `false`) |
105
+ | `num_cpus` | `float` | No | CPU resources per trial (tuning only) |
106
+ | `num_gpus` | `float` | No | GPU resources per trial (tuning only) |
107
+
108
+ ### Training Mode Parameters (`is_tune=false`)
109
+
110
+ | Parameter | Type | Required | Description |
111
+ | ---------------- | ------ | -------- | ---------------------------------- |
112
+ | `hyperparameter` | `dict` | Yes | Fixed hyperparameters for training |
113
+
114
+ **Note**: The structure of `hyperparameter` is completely flexible and defined by your plugin. Common fields include:
115
+
116
+ - `epochs`: Number of training epochs
117
+ - `batch_size`: Batch size for training
118
+ - `learning_rate`: Learning rate
119
+ - `optimizer`: Optimizer type (adam, sgd, etc.)
120
+ - Any custom fields your plugin needs (e.g., `dropout_rate`, `weight_decay`, `image_size`)
121
+
122
+ ### Tuning Mode Parameters (`is_tune=true`)
123
+
124
+ | Parameter | Type | Required | Description |
125
+ | ----------------- | ------ | -------- | ------------------------------------ |
126
+ | `hyperparameters` | `list` | Yes | List of hyperparameter search spaces |
127
+ | `tune_config` | `dict` | Yes | Ray Tune configuration |
128
+
129
+ ## Hyperparameter Search Spaces
130
+
131
+ Define hyperparameter distributions for tuning:
132
+
133
+ ### Continuous Distributions
134
+
135
+ ```json
136
+ [
137
+ {
138
+ "name": "learning_rate",
139
+ "type": "uniform",
140
+ "min": 0.0001,
141
+ "max": 0.01
142
+ },
143
+ {
144
+ "name": "dropout_rate",
145
+ "type": "loguniform",
146
+ "min": 0.0001,
147
+ "max": 0.1,
148
+ "base": 10
149
+ }
150
+ ]
151
+ ```
152
+
153
+ ### Discrete Distributions
154
+
155
+ ```json
156
+ [
157
+ {
158
+ "name": "batch_size",
159
+ "type": "choice",
160
+ "options": [16, 32, 64, 128]
161
+ },
162
+ {
163
+ "name": "optimizer",
164
+ "type": "choice",
165
+ "options": ["adam", "sgd", "rmsprop"]
166
+ }
167
+ ]
168
+ ```
169
+
170
+ ### Quantized Distributions
171
+
172
+ ```json
173
+ [
174
+ {
175
+ "name": "learning_rate",
176
+ "type": "quniform",
177
+ "min": 0.0001,
178
+ "max": 0.01,
179
+ "q": 0.0001
180
+ }
181
+ ]
182
+ ```
183
+
184
+ ### Supported Distribution Types
185
+
186
+ Each hyperparameter type requires specific parameters:
187
+
188
+ | Type | Required Parameters | Description | Example |
189
+ |------|-------------------|-------------|---------|
190
+ | `uniform` | `min`, `max` | Uniform distribution between min and max | `{"name": "lr", "type": "uniform", "min": 0.0001, "max": 0.01}` |
191
+ | `quniform` | `min`, `max` | Quantized uniform distribution | `{"name": "lr", "type": "quniform", "min": 0.0001, "max": 0.01}` |
192
+ | `loguniform` | `min`, `max`, `base` | Log-uniform distribution | `{"name": "lr", "type": "loguniform", "min": 0.0001, "max": 0.01, "base": 10}` |
193
+ | `qloguniform` | `min`, `max`, `base` | Quantized log-uniform distribution | `{"name": "lr", "type": "qloguniform", "min": 0.0001, "max": 0.01, "base": 10}` |
194
+ | `randn` | `mean`, `sd` | Normal (Gaussian) distribution | `{"name": "noise", "type": "randn", "mean": 0.0, "sd": 1.0}` |
195
+ | `qrandn` | `mean`, `sd` | Quantized normal distribution | `{"name": "noise", "type": "qrandn", "mean": 0.0, "sd": 1.0}` |
196
+ | `randint` | `min`, `max` | Random integer between min and max | `{"name": "epochs", "type": "randint", "min": 5, "max": 15}` |
197
+ | `qrandint` | `min`, `max` | Quantized random integer | `{"name": "epochs", "type": "qrandint", "min": 5, "max": 15}` |
198
+ | `lograndint` | `min`, `max`, `base` | Log-random integer | `{"name": "units", "type": "lograndint", "min": 16, "max": 256, "base": 2}` |
199
+ | `qlograndint` | `min`, `max`, `base` | Quantized log-random integer | `{"name": "units", "type": "qlograndint", "min": 16, "max": 256, "base": 2}` |
200
+ | `choice` | `options` | Choose from a list of values | `{"name": "optimizer", "type": "choice", "options": ["adam", "sgd"]}` |
201
+ | `grid_search` | `options` | Grid search over all values | `{"name": "batch_size", "type": "grid_search", "options": [16, 32, 64]}` |
202
+
203
+ **Important Notes:**
204
+ - All hyperparameters must include `name` and `type` fields
205
+ - For `loguniform`, `qloguniform`, `lograndint`, `qlograndint`: `base` parameter is required (typically 10 or 2)
206
+ - For `choice` and `grid_search`: Use `options` (not `values`)
207
+ - For range-based types: Use `min` and `max` (not `lower` and `upper`)
208
+
209
+ ## Tune Configuration
210
+
211
+ ### Basic Configuration
212
+
213
+ ```python
214
+ {
215
+ "mode": "max", # "max" or "min"
216
+ "metric": "accuracy", # Metric to optimize
217
+ "num_samples": 10, # Number of trials
218
+ "max_concurrent_trials": 2 # Parallel trials
219
+ }
220
+ ```
221
+
222
+ ### With Search Algorithm
223
+
224
+ ```python
225
+ {
226
+ "mode": "max",
227
+ "metric": "accuracy",
228
+ "num_samples": 20,
229
+ "max_concurrent_trials": 4,
230
+ "search_alg": {
231
+ "name": "hyperoptsearch", # Search algorithm
232
+ "points_to_evaluate": [ # Optional initial points
233
+ {
234
+ "learning_rate": 0.001,
235
+ "batch_size": 32
236
+ }
237
+ ]
238
+ }
239
+ }
240
+ ```
241
+
242
+ ### With Scheduler
243
+
244
+ ```python
245
+ {
246
+ "mode": "max",
247
+ "metric": "accuracy",
248
+ "num_samples": 50,
249
+ "max_concurrent_trials": 8,
250
+ "scheduler": {
251
+ "name": "hyperband", # Scheduler type
252
+ "options": {
253
+ "max_t": 100
254
+ }
255
+ }
256
+ }
257
+ ```
258
+
259
+ ### Supported Search Algorithms
260
+
261
+ - `basicvariantgenerator` - Random search (default)
262
+ - `bayesoptsearch` - Bayesian optimization
263
+ - `hyperoptsearch` - Tree-structured Parzen Estimator
264
+
265
+ ### Supported Schedulers
266
+
267
+ - `fifo` - First-in-first-out (default)
268
+ - `hyperband` - HyperBand scheduler
269
+
270
+ ## Plugin Development
271
+
272
+ ### For Training Mode
273
+
274
+ Implement the `train()` function in your plugin:
275
+
276
+ ```python
277
+ def train(run, dataset, hyperparameter, checkpoint, **kwargs):
278
+ """
279
+ Training function for your model.
280
+
281
+ Args:
282
+ run: TrainRun object for logging
283
+ dataset: Dataset object
284
+ hyperparameter: dict with hyperparameters
285
+ checkpoint: Optional checkpoint for resuming
286
+ """
287
+ # Access hyperparameters
288
+ epochs = hyperparameter['epochs']
289
+ batch_size = hyperparameter['batch_size']
290
+ learning_rate = hyperparameter['learning_rate']
291
+
292
+ # Training loop
293
+ for epoch in range(epochs):
294
+ # Train one epoch
295
+ loss, accuracy = train_one_epoch(...)
296
+
297
+ # Log metrics
298
+ run.log_metric('training', 'loss', loss, epoch=epoch)
299
+ run.log_metric('training', 'accuracy', accuracy, epoch=epoch)
300
+
301
+ # Log visualizations
302
+ run.log_visualization('predictions', 'train', epoch, image_data)
303
+
304
+ # Save final model
305
+ save_model(model, '/path/to/model.pth')
306
+ ```
307
+
308
+ ### For Tuning Mode
309
+
310
+ Implement the `tune()` function in your plugin:
311
+
312
+ ```python
313
+ def tune(hyperparameter, run, dataset, checkpoint, **kwargs):
314
+ """
315
+ Tuning function for hyperparameter optimization.
316
+
317
+ Args:
318
+ hyperparameter: dict with current trial's hyperparameters
319
+ run: TrainRun object for logging (with is_tune=True)
320
+ dataset: Dataset object
321
+ checkpoint: Optional checkpoint for resuming
322
+ """
323
+ from ray import tune
324
+
325
+ # Set checkpoint output path BEFORE training
326
+ output_path = Path('/path/to/trial/weights')
327
+ run.checkpoint_output = str(output_path)
328
+
329
+ # Training loop
330
+ for epoch in range(hyperparameter['epochs']):
331
+ loss, accuracy = train_one_epoch(...)
332
+
333
+ # Log metrics (trial_id automatically added)
334
+ run.log_metric('training', 'loss', loss, epoch=epoch)
335
+ run.log_metric('training', 'accuracy', accuracy, epoch=epoch)
336
+
337
+ # Report results to Ray Tune
338
+ results = {
339
+ "accuracy": final_accuracy,
340
+ "loss": final_loss
341
+ }
342
+
343
+ # IMPORTANT: Report with checkpoint
344
+ tune.report(
345
+ results,
346
+ checkpoint=tune.Checkpoint.from_directory(run.checkpoint_output)
347
+ )
348
+ ```
349
+
350
+ ### Parameter Order Difference
351
+
352
+ **Important**: The parameter order differs between `train()` and `tune()`:
353
+
354
+ - `train(run, dataset, hyperparameter, checkpoint, **kwargs)`
355
+ - `tune(hyperparameter, run, dataset, checkpoint, **kwargs)`
356
+
357
+ ### Automatic Trial ID Logging
358
+
359
+ When `is_tune=True`, the SDK automatically injects `trial_id` into all metric and visualization logs:
360
+
361
+ ```python
362
+ # Your plugin code
363
+ run.log_metric('training', 'loss', 0.5, epoch=10)
364
+
365
+ # Actual logged data (trial_id added automatically)
366
+ {
367
+ 'category': 'training',
368
+ 'key': 'loss',
369
+ 'value': 0.5,
370
+ 'metrics': {'epoch': 10},
371
+ 'trial_id': 'abc123' # Added automatically
372
+ }
373
+ ```
374
+
375
+ No plugin changes required - this happens transparently at the SDK level.
376
+
377
+ ## Migration from TuneAction
378
+
379
+ The standalone `TuneAction` is now **deprecated**. Migrate to `TrainAction` with `is_tune=true`:
380
+
381
+ ### Before (Deprecated)
382
+
383
+ ```json
384
+ {
385
+ "action": "tune",
386
+ "params": {
387
+ "name": "my_tuning_job",
388
+ "dataset": 123,
389
+ "hyperparameter": [...],
390
+ "tune_config": {...}
391
+ }
392
+ }
393
+ ```
394
+
395
+ ### After (Recommended)
396
+
397
+ ```json
398
+ {
399
+ "action": "train",
400
+ "params": {
401
+ "name": "my_tuning_job",
402
+ "dataset": 123,
403
+ "is_tune": true,
404
+ "hyperparameters": [...],
405
+ "tune_config": {...}
406
+ }
407
+ }
408
+ ```
409
+
410
+ ### Key Changes
411
+
412
+ 1. Change `"action": "tune"` to `"action": "train"`
413
+ 2. Add `"is_tune": true`
414
+ 3. Rename `"hyperparameter"` to `"hyperparameters"`
415
+
416
+ ## Examples
417
+
418
+ ### Simple Training
419
+
420
+ ```json
421
+ {
422
+ "action": "train",
423
+ "params": {
424
+ "name": "resnet50_training",
425
+ "dataset": 456,
426
+ "checkpoint": null,
427
+ "hyperparameter": {
428
+ "epochs": 100,
429
+ "batch_size": 32,
430
+ "learning_rate": 0.001,
431
+ "optimizer": "adam",
432
+ "weight_decay": 0.0001
433
+ }
434
+ }
435
+ }
436
+ ```
437
+
438
+ ### Resume from Checkpoint
439
+
440
+ ```json
441
+ {
442
+ "action": "train",
443
+ "params": {
444
+ "name": "resnet50_continued",
445
+ "dataset": 456,
446
+ "checkpoint": 789,
447
+ "hyperparameter": {
448
+ "epochs": 50,
449
+ "batch_size": 32,
450
+ "learning_rate": 0.0001,
451
+ "optimizer": "adam"
452
+ }
453
+ }
454
+ }
455
+ ```
456
+
457
+ ### Hyperparameter Tuning with Grid Search
458
+
459
+ ```json
460
+ {
461
+ "action": "train",
462
+ "params": {
463
+ "name": "resnet50_tuning",
464
+ "dataset": 456,
465
+ "is_tune": true,
466
+ "hyperparameters": [
467
+ {
468
+ "name": "batch_size",
469
+ "type": "grid_search",
470
+ "options": [16, 32, 64]
471
+ },
472
+ {
473
+ "name": "learning_rate",
474
+ "type": "grid_search",
475
+ "options": [0.001, 0.0001]
476
+ },
477
+ {
478
+ "name": "optimizer",
479
+ "type": "grid_search",
480
+ "options": ["adam", "sgd"]
481
+ }
482
+ ],
483
+ "tune_config": {
484
+ "mode": "max",
485
+ "metric": "validation_accuracy",
486
+ "num_samples": 12,
487
+ "max_concurrent_trials": 4
488
+ }
489
+ }
490
+ }
491
+ ```
492
+
493
+ ### Advanced Tuning with HyperOpt and HyperBand
494
+
495
+ ```json
496
+ {
497
+ "action": "train",
498
+ "params": {
499
+ "name": "resnet50_hyperopt_tuning",
500
+ "dataset": 456,
501
+ "is_tune": true,
502
+ "num_cpus": 2,
503
+ "num_gpus": 0.5,
504
+ "hyperparameters": [
505
+ {
506
+ "name": "batch_size",
507
+ "type": "choice",
508
+ "options": [16, 32, 64, 128]
509
+ },
510
+ {
511
+ "name": "learning_rate",
512
+ "type": "loguniform",
513
+ "min": 0.00001,
514
+ "max": 0.01,
515
+ "base": 10
516
+ },
517
+ {
518
+ "name": "weight_decay",
519
+ "type": "loguniform",
520
+ "min": 0.00001,
521
+ "max": 0.001,
522
+ "base": 10
523
+ },
524
+ {
525
+ "name": "optimizer",
526
+ "type": "choice",
527
+ "options": ["adam", "sgd", "rmsprop"]
528
+ }
529
+ ],
530
+ "tune_config": {
531
+ "mode": "max",
532
+ "metric": "validation_accuracy",
533
+ "num_samples": 50,
534
+ "max_concurrent_trials": 8,
535
+ "search_alg": {
536
+ "name": "hyperoptsearch"
537
+ },
538
+ "scheduler": {
539
+ "name": "hyperband",
540
+ "options": {
541
+ "max_t": 100
542
+ }
543
+ }
544
+ }
545
+ }
546
+ }
547
+ ```
548
+
549
+ ## Real-time Trial Progress Tracking
550
+
551
+ When running in tuning mode (`is_tune=true`), the SDK automatically captures and logs real-time trial progress tables to the backend. This provides live visibility into:
552
+
553
+ - Trial status (RUNNING, TERMINATED, ERROR, PENDING)
554
+ - Hyperparameter configurations per trial
555
+ - Performance metrics per trial
556
+ - Trial completion progress
557
+
558
+ ### Automatic Trial Table Logging
559
+
560
+ The SDK uses a `_TuneTrialsLoggingCallback` that:
561
+
562
+ - Captures Ray Tune trial table snapshots in real-time
563
+ - Tracks trial status, hyperparameters, and metrics
564
+ - Forwards structured data to the backend via `run.log_trials()`
565
+ - Limits metric columns to 4 for optimal UI performance
566
+ - Handles trial completion, errors, and step-end events
567
+
568
+ This happens automatically - no plugin changes required.
569
+
570
+ ### TrainRun.log_trials() Method
571
+
572
+ You can also manually log trial progress data using the `log_trials()` method:
573
+
574
+ ```python
575
+ run.log_trials(
576
+ trials={
577
+ 'trial_001': {
578
+ 'status': 'RUNNING',
579
+ 'batch_size': 32,
580
+ 'learning_rate': 0.001,
581
+ 'accuracy': 0.85
582
+ },
583
+ 'trial_002': {
584
+ 'status': 'TERMINATED',
585
+ 'batch_size': 64,
586
+ 'learning_rate': 0.0001,
587
+ 'accuracy': 0.87
588
+ }
589
+ },
590
+ base=['status'],
591
+ hyperparameters=['batch_size', 'learning_rate'],
592
+ metrics=['accuracy']
593
+ )
594
+ ```
595
+
596
+ **Parameters:**
597
+
598
+ - `data` (optional): Pre-built payload for custom formatting
599
+ - `trials`: Mapping of trial_id to structured values
600
+ - `base`: Column names for the fixed base section (e.g., status)
601
+ - `hyperparameters`: Column names for hyperparameters
602
+ - `metrics`: Column names for metrics (max 4 recommended)
603
+ - `best_trial` (optional): Trial ID of the best trial (empty string during tuning, populated at the end)
604
+
605
+ ## Trial Model Management
606
+
607
+ ### All Trial Models Upload
608
+
609
+ When tuning completes, the SDK now uploads **all trial models**, not just the best one. This allows you to:
610
+
611
+ - Review and compare all trial results
612
+ - Select alternative trials if needed
613
+ - Track the full experimental history
614
+
615
+ The return value from a tuning job includes:
616
+
617
+ ```python
618
+ {
619
+ 'model_id': 123, # Best trial model ID
620
+ 'best_trial': {
621
+ 'trial_logdir': '/path/to/best_trial',
622
+ 'config': {'batch_size': 32, 'learning_rate': 0.001},
623
+ 'metrics': {'accuracy': 0.92, 'loss': 0.15}
624
+ },
625
+ 'trial_models': [
626
+ {
627
+ 'trial_logdir': '/path/to/trial_001',
628
+ 'model_id': 124,
629
+ 'config': {'batch_size': 16, 'learning_rate': 0.001},
630
+ 'metrics': {'accuracy': 0.85, 'loss': 0.22}
631
+ },
632
+ {
633
+ 'trial_logdir': '/path/to/trial_002',
634
+ 'model_id': 125,
635
+ 'config': {'batch_size': 32, 'learning_rate': 0.0001},
636
+ 'metrics': {'accuracy': 0.88, 'loss': 0.18}
637
+ }
638
+ ]
639
+ }
640
+ ```
641
+
642
+ Each trial model is registered with a unique name including the trial ID.
643
+
644
+ ### Best Trial Override
645
+
646
+ After tuning completes, the SDK automatically notifies the backend about which trial was selected as optimal and logs a final trials table with the best trial marked. This enables:
647
+
648
+ - Proper tracking of the best configuration
649
+ - UI display of the selected trial highlighted in the trials table
650
+ - Backend awareness of optimal hyperparameters
651
+ - Final snapshot of all trials with the winner clearly identified
652
+
653
+ The SDK:
654
+ 1. Calls the backend API to register the best trial
655
+ 2. Logs an updated trials table via `run.log_trials()` with `best_trial` set to the winning trial ID
656
+ 3. Reuses the last cached trials snapshot to avoid duplicate data collection
657
+
658
+ This happens transparently - no plugin changes required.
659
+
660
+ ## Enhanced Tune Entrypoint Behavior
661
+
662
+ The SDK automatically wraps your `tune()` function to handle various return value formats:
663
+
664
+ ### Return Value Normalization
665
+
666
+ Your tune function can return:
667
+
668
+ - **Dictionary**: `return {"accuracy": 0.92, "loss": 0.15}`
669
+ - **Number**: `return 0.92` (automatically wrapped with the metric key)
670
+ - **Other types**: Converted to appropriate format
671
+
672
+ The wrapper ensures:
673
+
674
+ - The optimization metric is always present in results
675
+ - Metrics from `ray.train.report()` are cached and merged
676
+ - Proper function names for Ray Tune's internal tracking
677
+
678
+ ### No Plugin Changes Required
679
+
680
+ This behavior is transparent. You can write your tune function naturally:
681
+
682
+ ```python
683
+ def tune(hyperparameter, run, dataset, checkpoint, **kwargs):
684
+ from ray import tune
685
+
686
+ # Training logic...
687
+ accuracy = train_model(...)
688
+
689
+ # Any of these work:
690
+ tune.report({"accuracy": accuracy}) # Dict
691
+ # Or
692
+ return accuracy # Number (wrapped automatically)
693
+ ```
694
+
695
+ ## Progress Tracking
696
+
697
+ The train action tracks progress across different phases:
698
+
699
+ ### Training Mode
700
+
701
+ | Category | Proportion | Description |
702
+ | -------------- | ---------- | -------------------- |
703
+ | `dataset` | 20% | Dataset preparation |
704
+ | `train` | 75% | Model training |
705
+ | `model_upload` | 5% | Model upload |
706
+
707
+ ### Tuning Mode
708
+
709
+ | Category | Proportion | Description |
710
+ | -------------- | ---------- | ---------------------------- |
711
+ | `dataset` | 20% | Dataset preparation |
712
+ | `train` | 75% | Hyperparameter tuning trials |
713
+ | `trials` | 90% | Trial progress logging |
714
+ | `model_upload` | 5% | Model upload |
715
+
716
+ ## Benefits
717
+
718
+ ### Unified Interface
719
+
720
+ - Single action for both training and tuning
721
+ - Consistent parameter handling
722
+ - Reduced code duplication
723
+
724
+ ### Flexible Hyperparameters
725
+
726
+ - No rigid structure enforced by SDK
727
+ - Plugins define their own hyperparameter schema
728
+ - Support for custom fields without validation errors
729
+
730
+ ### Advanced HPO
731
+
732
+ - Multiple search algorithms (Optuna, Ax, HyperOpt, BayesOpt)
733
+ - Multiple schedulers (ASHA, HyperBand, PBT)
734
+ - Automatic best model selection
735
+
736
+ ### Developer Experience
737
+
738
+ - Automatic trial tracking
739
+ - Transparent logging enhancements
740
+ - Clear migration path from deprecated TuneAction
741
+
742
+ ## Best Practices
743
+
744
+ ### Hyperparameter Design
745
+
746
+ - Keep hyperparameter search spaces reasonable
747
+ - Start with grid search for initial exploration
748
+ - Use Bayesian optimization (Optuna, Ax) for efficient search
749
+ - Set appropriate `num_samples` based on search space size
750
+
751
+ ### Resource Management
752
+
753
+ - Allocate `num_cpus` and `num_gpus` based on trial resource needs
754
+ - Set `max_concurrent_trials` based on available hardware
755
+ - Monitor resource usage during tuning
756
+
757
+ ### Checkpoint Management
758
+
759
+ - Always set `run.checkpoint_output` before training in tune mode
760
+ - Save checkpoints at regular intervals
761
+ - Use the best checkpoint returned by tuning
762
+
763
+ ### Logging
764
+
765
+ - Log all relevant metrics for comparison
766
+ - Use consistent metric names across trials
767
+ - Include validation metrics in tune reports
768
+
769
+ ## Troubleshooting
770
+
771
+ ### Common Issues
772
+
773
+ #### "hyperparameter is required when is_tune=False"
774
+
775
+ Make sure to provide `hyperparameter` in training mode:
776
+
777
+ ```json
778
+ {
779
+ "is_tune": false,
780
+ "hyperparameter": {...}
781
+ }
782
+ ```
783
+
784
+ #### "hyperparameters is required when is_tune=True"
785
+
786
+ Make sure to provide `hyperparameters` and `tune_config` in tuning mode:
787
+
788
+ ```json
789
+ {
790
+ "is_tune": true,
791
+ "hyperparameters": [...],
792
+ "tune_config": {...}
793
+ }
794
+ ```
795
+
796
+ #### Tuning Fails Without Error
797
+
798
+ Check that your `tune()` function:
799
+
800
+ 1. Sets `run.checkpoint_output` before training
801
+ 2. Calls `tune.report()` with results and checkpoint
802
+ 3. Returns properly without exceptions
803
+
804
+ ## Next Steps
805
+
806
+ - **For Plugin Developers**: Implement `train()` and optionally `tune()` functions
807
+ - **For Users**: Start with training mode, then experiment with tuning
808
+ - **For Advanced Users**: Explore different search algorithms and schedulers
809
+
810
+ ## Support and Resources
811
+
812
+ - **API Reference**: See TrainAction class documentation
813
+ - **Examples**: Check plugin examples repository
814
+ - **Ray Tune Documentation**: https://docs.ray.io/en/latest/tune/