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
@@ -1,3 +1,22 @@
1
1
  actions:
2
2
  pre_annotation:
3
3
  entrypoint: plugin.pre_annotation.pre_annotate
4
+ to_task:
5
+ entrypoint: plugin.to_task.AnnotationToTask
6
+ inference_options:
7
+ required_cpu_count: 1
8
+ required_gpu_count: 0.1
9
+ ui_schema:
10
+ - $formkit: "radio"
11
+ name: "schema_to_convert"
12
+ label: "변환 스키마"
13
+ help: "변환 스키마 선택"
14
+ required: True
15
+ value: "<yolo>"
16
+ option:
17
+ - label: "Yolo"
18
+ value: "yolo"
19
+ - label: "Coco"
20
+ value: "coco"
21
+ - label: "Pascal"
22
+ value: "pascal"
@@ -0,0 +1,40 @@
1
+ class AnnotationToTask:
2
+ def __init__(self, run, *args, **kwargs):
3
+ """Initialize the plugin task pre annotation action class.
4
+
5
+ Args:
6
+ run: Plugin run object.
7
+ """
8
+ self.run = run
9
+
10
+ def convert_data_from_file(
11
+ self,
12
+ primary_file_url: str,
13
+ primary_file_original_name: str,
14
+ data_file_url: str,
15
+ data_file_original_name: str,
16
+ ) -> dict:
17
+ """Convert the data from a file to a task object.
18
+
19
+ Args:
20
+ primary_file_url (str): primary file url.
21
+ primary_file_original_name (str): primary file original name.
22
+ data_file_url (str): data file url.
23
+ data_file_original_name (str): data file original name.
24
+
25
+ Returns:
26
+ dict: The converted data.
27
+ """
28
+ converted_data = {}
29
+ return converted_data
30
+
31
+ def convert_data_from_inference(self, data: dict) -> dict:
32
+ """Convert the data from inference result to a task object.
33
+
34
+ Args:
35
+ data: Converted data.
36
+
37
+ Returns:
38
+ dict: The converted data.
39
+ """
40
+ return data
@@ -0,0 +1,19 @@
1
+ from .action import UploadAction
2
+ from .enums import LOG_MESSAGES, LogCode, UploadStatus
3
+ from .exceptions import ExcelParsingError, ExcelSecurityError
4
+ from .models import UploadParams
5
+ from .run import UploadRun
6
+ from .utils import ExcelSecurityConfig, PathAwareJSONEncoder
7
+
8
+ __all__ = [
9
+ 'UploadAction',
10
+ 'UploadRun',
11
+ 'UploadParams',
12
+ 'UploadStatus',
13
+ 'LogCode',
14
+ 'LOG_MESSAGES',
15
+ 'ExcelSecurityError',
16
+ 'ExcelParsingError',
17
+ 'PathAwareJSONEncoder',
18
+ 'ExcelSecurityConfig',
19
+ ]
@@ -0,0 +1,232 @@
1
+ from typing import Any, Dict
2
+
3
+ from synapse_sdk.plugins.categories.base import Action
4
+ from synapse_sdk.plugins.categories.decorators import register_action
5
+ from synapse_sdk.plugins.enums import PluginCategory, RunMethod
6
+ from synapse_sdk.plugins.exceptions import ActionError
7
+
8
+ from .context import UploadContext
9
+ from .enums import LogCode
10
+ from .factory import StrategyFactory
11
+ from .models import UploadParams
12
+ from .orchestrator import UploadOrchestrator
13
+ from .registry import StepRegistry
14
+ from .run import UploadRun
15
+ from .steps.cleanup import CleanupStep
16
+ from .steps.collection import AnalyzeCollectionStep
17
+ from .steps.generate import GenerateDataUnitsStep
18
+ from .steps.initialize import InitializeStep
19
+ from .steps.metadata import ProcessMetadataStep
20
+ from .steps.organize import OrganizeFilesStep
21
+ from .steps.upload import UploadFilesStep
22
+ from .steps.validate import ValidateFilesStep
23
+ from .utils import ExcelSecurityConfig
24
+
25
+
26
+ @register_action
27
+ class UploadAction(Action):
28
+ """Upload action for processing and uploading files to storage.
29
+
30
+ This implementation uses Strategy and Facade patterns to provide a clean,
31
+ extensible architecture for upload operations. The monolithic legacy
32
+ implementation has been refactored into pluggable strategies and workflow steps.
33
+
34
+ Features:
35
+ - Strategy pattern for pluggable behaviors (validation, file discovery, etc.)
36
+ - Facade pattern with UploadOrchestrator for simplified workflow management
37
+ - Step-based workflow with automatic rollback on failures
38
+ - Comprehensive error handling and progress tracking
39
+ - Easy extensibility for new strategies and workflow steps
40
+
41
+ Class Attributes:
42
+ name (str): Action identifier ('upload')
43
+ category (PluginCategory): UPLOAD category
44
+ method (RunMethod): JOB execution method
45
+ run_class (type): UploadRun for specialized logging
46
+ params_model (type): UploadParams for parameter validation
47
+ progress_categories (dict): Progress tracking configuration
48
+ metrics_categories (dict): Metrics collection configuration
49
+
50
+ Example:
51
+ >>> action = UploadAction(
52
+ ... params={
53
+ ... 'name': 'Data Upload',
54
+ ... 'path': '/data/files',
55
+ ... 'storage': 1,
56
+ ... 'data_collection': 5
57
+ ... },
58
+ ... plugin_config=config
59
+ ... )
60
+ >>> result = action.start()
61
+ """
62
+
63
+ name = 'upload'
64
+ category = PluginCategory.UPLOAD
65
+ method = RunMethod.JOB
66
+ run_class = UploadRun
67
+ params_model = UploadParams
68
+ progress_categories = {
69
+ 'analyze_collection': {
70
+ 'proportion': 2,
71
+ },
72
+ 'upload_data_files': {
73
+ 'proportion': 38,
74
+ },
75
+ 'generate_data_units': {
76
+ 'proportion': 60,
77
+ },
78
+ }
79
+ metrics_categories = {
80
+ 'data_files': {
81
+ 'stand_by': 0,
82
+ 'failed': 0,
83
+ 'success': 0,
84
+ },
85
+ 'data_units': {
86
+ 'stand_by': 0,
87
+ 'failed': 0,
88
+ 'success': 0,
89
+ },
90
+ }
91
+
92
+ def __init__(self, *args, **kwargs):
93
+ """Initialize the upload action."""
94
+ super().__init__(*args, **kwargs)
95
+
96
+ # Initialize Excel configuration from config.yaml
97
+ self.excel_config = ExcelSecurityConfig.from_action_config(self.config)
98
+ self.strategy_factory = StrategyFactory()
99
+ self.step_registry = StepRegistry()
100
+ self._configure_workflow()
101
+
102
+ def _configure_workflow(self) -> None:
103
+ """Configure workflow steps based on parameters.
104
+
105
+ Registers all workflow steps in the correct order. Steps can be
106
+ dynamically added, removed, or reordered for different use cases.
107
+ """
108
+ # Register steps in execution order
109
+ self.step_registry.register(InitializeStep())
110
+ self.step_registry.register(ProcessMetadataStep())
111
+ self.step_registry.register(AnalyzeCollectionStep())
112
+ self.step_registry.register(OrganizeFilesStep())
113
+ self.step_registry.register(ValidateFilesStep())
114
+ self.step_registry.register(UploadFilesStep())
115
+ self.step_registry.register(GenerateDataUnitsStep())
116
+ self.step_registry.register(CleanupStep())
117
+
118
+ def start(self) -> Dict[str, Any]:
119
+ """Execute upload workflow with uploader integration.
120
+
121
+ This method integrates the essential uploader mechanism with the new
122
+ strategy pattern architecture while maintaining backward compatibility.
123
+
124
+ Returns:
125
+ Dict[str, Any]: Upload result with file counts, success status, and metrics
126
+
127
+ Raises:
128
+ ActionError: If upload workflow fails
129
+ """
130
+ try:
131
+ # Ensure params is not None
132
+ params = self.params or {}
133
+
134
+ # Create upload context for sharing state between steps
135
+ context = UploadContext(params, self.run, self.client, action=self)
136
+
137
+ # Configure strategies based on parameters with context
138
+ strategies = self._configure_strategies(context)
139
+
140
+ # Create orchestrator but run it with uploader integration
141
+ orchestrator = UploadOrchestrator(context, self.step_registry, strategies)
142
+
143
+ # Execute the workflow steps, but intercept after organize step
144
+ result = self._execute_with_uploader_integration(orchestrator, context)
145
+
146
+ return result
147
+
148
+ except Exception as e:
149
+ # Log the error and re-raise as ActionError
150
+ if self.run:
151
+ self.run.log_message_with_code(LogCode.UPLOAD_WORKFLOW_FAILED, str(e))
152
+ raise ActionError(f'Upload failed: {str(e)}')
153
+
154
+ def _execute_with_uploader_integration(self, orchestrator, context) -> Dict[str, Any]:
155
+ """Execute workflow with proper uploader integration."""
156
+ # Inject strategies into context before executing steps
157
+ orchestrator._inject_strategies_into_context()
158
+
159
+ # Run initial steps up to file organization
160
+ steps = orchestrator.step_registry.get_steps()
161
+
162
+ # Execute steps one by one until we reach the organization step
163
+ for i, step in enumerate(steps):
164
+ if step.name in ['initialize', 'process_metadata', 'analyze_collection', 'organize_files']:
165
+ try:
166
+ result = step.safe_execute(context)
167
+ context.update(result)
168
+ if not result.success:
169
+ raise Exception(f"Step '{step.name}' failed: {result.error}")
170
+ except Exception as e:
171
+ raise ActionError(f"Failed at step '{step.name}': {str(e)}")
172
+
173
+ # Execute remaining steps
174
+ for step in steps:
175
+ if step.name in ['validate_files', 'upload_files', 'generate_data_units', 'cleanup']:
176
+ try:
177
+ result = step.safe_execute(context)
178
+ context.update(result)
179
+ if not result.success:
180
+ raise Exception(f"Step '{step.name}' failed: {result.error}")
181
+ except Exception as e:
182
+ raise ActionError(f"Failed at step '{step.name}': {str(e)}")
183
+
184
+ # Return the final result from context
185
+ return context.get_result()
186
+
187
+ def _configure_strategies(self, context=None) -> Dict[str, Any]:
188
+ """Configure strategies based on parameters.
189
+
190
+ Uses the Strategy pattern to create appropriate strategy implementations
191
+ based on the action parameters. This allows for runtime selection of
192
+ different behaviors (recursive vs flat discovery, batch vs single data unit creation, etc.).
193
+
194
+ Args:
195
+ context: UploadContext for strategies that need access to client/run
196
+
197
+ Returns:
198
+ Dict[str, Any]: Dictionary of strategy instances keyed by type
199
+ """
200
+ # Ensure params is not None
201
+ params = self.params or {}
202
+
203
+ return {
204
+ 'validation': self.strategy_factory.create_validation_strategy(params, context),
205
+ 'file_discovery': self.strategy_factory.create_file_discovery_strategy(params, context),
206
+ 'metadata': self.strategy_factory.create_metadata_strategy(params, context),
207
+ 'upload': self.strategy_factory.create_upload_strategy(params, context),
208
+ 'data_unit': self.strategy_factory.create_data_unit_strategy(params, context),
209
+ }
210
+
211
+ def get_uploader(self, path, file_specification, organized_files, params: Dict = {}):
212
+ """Get uploader from entrypoint (compatibility method).
213
+
214
+ This method is kept for backward compatibility with existing code
215
+ that may still call it directly.
216
+ """
217
+ return self.entrypoint(
218
+ self.run, path, file_specification, organized_files, extra_params=params.get('extra_params')
219
+ )
220
+
221
+ def get_workflow_summary(self) -> Dict[str, Any]:
222
+ """Get summary of configured workflow.
223
+
224
+ Returns:
225
+ Dict[str, Any]: Summary of steps and strategies
226
+ """
227
+ return {
228
+ 'steps': [step.name for step in self.step_registry.get_steps()],
229
+ 'step_count': len(self.step_registry),
230
+ 'total_progress_weight': self.step_registry.get_total_progress_weight(),
231
+ 'available_strategies': self.strategy_factory.get_available_strategies(),
232
+ }
@@ -0,0 +1,185 @@
1
+ from datetime import datetime
2
+ from pathlib import Path
3
+ from typing import Any, Dict, List, Optional
4
+
5
+ from .run import UploadRun
6
+
7
+
8
+ class StepResult:
9
+ """Result of a workflow step execution."""
10
+
11
+ def __init__(
12
+ self,
13
+ success: bool = True,
14
+ data: Dict[str, Any] = None,
15
+ error: str = None,
16
+ rollback_data: Dict[str, Any] = None,
17
+ skipped: bool = False,
18
+ original_exception: Optional[Exception] = None,
19
+ ):
20
+ self.success = success
21
+ self.data = data or {}
22
+ self.error = error
23
+ self.rollback_data = rollback_data or {}
24
+ self.skipped = skipped
25
+ self.original_exception = original_exception
26
+ self.timestamp = datetime.now()
27
+
28
+ def __bool__(self):
29
+ return self.success
30
+
31
+
32
+ class UploadContext:
33
+ """Shared context for all upload workflow steps."""
34
+
35
+ def __init__(self, params: Dict, run: UploadRun, client: Any, action: Any = None):
36
+ self.params = params
37
+ self.run = run
38
+ self.client = client
39
+ self._action = action # Reference to parent action for uploader access
40
+
41
+ # Core state
42
+ self.storage = None
43
+ self.pathlib_cwd = None
44
+ self.metadata: Dict[str, Dict[str, Any]] = {}
45
+ self.file_specifications: Dict[str, Any] = {}
46
+ self.organized_files: List[Dict[str, Any]] = []
47
+ self.uploaded_files: List[Dict[str, Any]] = []
48
+ self.data_units: List[Dict[str, Any]] = []
49
+
50
+ # Progress and metrics
51
+ self.metrics: Dict[str, Any] = {}
52
+ self.errors: List[str] = []
53
+ self.step_results: List[StepResult] = []
54
+
55
+ # Strategies (injected by orchestrator)
56
+ self.strategies: Dict[str, Any] = {}
57
+
58
+ # Rollback information
59
+ self.rollback_data: Dict[str, Any] = {}
60
+
61
+ def update(self, result: StepResult) -> None:
62
+ """Update context with step results."""
63
+ self.step_results.append(result)
64
+
65
+ if result.success:
66
+ # Update context state with step data
67
+ for key, value in result.data.items():
68
+ if hasattr(self, key):
69
+ setattr(self, key, value)
70
+ else:
71
+ # Store in a general data dictionary
72
+ if not hasattr(self, 'step_data'):
73
+ self.step_data = {}
74
+ self.step_data[key] = value
75
+
76
+ # Store rollback data
77
+ if result.rollback_data:
78
+ self.rollback_data.update(result.rollback_data)
79
+ else:
80
+ # Record error
81
+ if result.error:
82
+ self.errors.append(result.error)
83
+
84
+ def get_result(self) -> Dict[str, Any]:
85
+ """Get final result dictionary."""
86
+ return {
87
+ 'uploaded_files_count': len(self.uploaded_files),
88
+ 'generated_data_units_count': len(self.data_units),
89
+ 'success': len(self.errors) == 0,
90
+ 'errors': self.errors,
91
+ }
92
+
93
+ def has_errors(self) -> bool:
94
+ """Check if context has any errors."""
95
+ return len(self.errors) > 0
96
+
97
+ def get_last_step_result(self) -> Optional[StepResult]:
98
+ """Get the result of the last executed step."""
99
+ return self.step_results[-1] if self.step_results else None
100
+
101
+ def get_step_result_by_name(self, step_name: str) -> Optional[StepResult]:
102
+ """Get step result by step name (stored in rollback_data)."""
103
+ for result in self.step_results:
104
+ if result.rollback_data.get('step_name') == step_name:
105
+ return result
106
+ return None
107
+
108
+ def clear_errors(self) -> None:
109
+ """Clear all errors (useful for retry scenarios)."""
110
+ self.errors.clear()
111
+
112
+ def add_error(self, error: str) -> None:
113
+ """Add an error to the context."""
114
+ self.errors.append(error)
115
+
116
+ def get_param(self, key: str, default: Any = None) -> Any:
117
+ """Get parameter value with default."""
118
+ return self.params.get(key, default)
119
+
120
+ def set_storage(self, storage: Any) -> None:
121
+ """Set storage object."""
122
+ self.storage = storage
123
+
124
+ def set_pathlib_cwd(self, path: Path) -> None:
125
+ """Set current working directory path."""
126
+ self.pathlib_cwd = path
127
+
128
+ def set_file_specifications(self, specs: Dict[str, Any]) -> None:
129
+ """Set file specifications."""
130
+ self.file_specifications = specs
131
+
132
+ def add_organized_files(self, files: List[Dict[str, Any]]) -> None:
133
+ """Add organized files to context."""
134
+ self.organized_files.extend(files)
135
+
136
+ def add_uploaded_files(self, files: List[Dict[str, Any]]) -> None:
137
+ """Add uploaded files to context."""
138
+ self.uploaded_files.extend(files)
139
+
140
+ def add_data_units(self, units: List[Dict[str, Any]]) -> None:
141
+ """Add data units to context."""
142
+ self.data_units.extend(units)
143
+
144
+ def update_metrics(self, category: str, metrics: Dict[str, Any]) -> None:
145
+ """Update metrics for a specific category."""
146
+ if category not in self.metrics:
147
+ self.metrics[category] = {}
148
+ self.metrics[category].update(metrics)
149
+
150
+ def get(self, key: str, default: Any = None) -> Any:
151
+ """Get value from context by key."""
152
+ # First check direct attributes
153
+ if hasattr(self, key):
154
+ return getattr(self, key)
155
+
156
+ # Then check step_data if it exists
157
+ if hasattr(self, 'step_data') and key in self.step_data:
158
+ return self.step_data[key]
159
+
160
+ # Special mappings for expected keys
161
+ if key == 'file_specification_template':
162
+ return self.file_specifications
163
+ elif key == 'pathlib_cwd':
164
+ return self.pathlib_cwd
165
+ elif key == 'organized_files':
166
+ return self.organized_files
167
+
168
+ return default
169
+
170
+ def set(self, key: str, value: Any) -> None:
171
+ """Set value in context by key."""
172
+ # Special mappings for expected keys
173
+ if key == 'file_specification_template':
174
+ self.file_specifications = value
175
+ elif key == 'pathlib_cwd':
176
+ self.pathlib_cwd = value
177
+ elif key == 'organized_files':
178
+ self.organized_files = value
179
+ elif hasattr(self, key):
180
+ setattr(self, key, value)
181
+ else:
182
+ # Store in step_data
183
+ if not hasattr(self, 'step_data'):
184
+ self.step_data = {}
185
+ self.step_data[key] = value