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,74 @@
1
+ from typing import Annotated, Literal
2
+
3
+ from pydantic import AfterValidator, BaseModel, field_validator
4
+ from pydantic_core import PydanticCustomError
5
+
6
+ from synapse_sdk.clients.exceptions import ClientError
7
+ from synapse_sdk.i18n import gettext as _
8
+ from synapse_sdk.utils.pydantic.validators import non_blank
9
+
10
+ from .utils import TargetHandlerFactory
11
+
12
+
13
+ class ExportParams(BaseModel):
14
+ """Export action parameter validation model.
15
+
16
+ Defines and validates all parameters required for export operations.
17
+ Uses Pydantic for type validation and custom validators to ensure
18
+ storage and filter resources exist before processing.
19
+
20
+ Attributes:
21
+ name (str): Human-readable name for the export operation
22
+ description (str | None): Optional description of the export
23
+ storage (int): Storage ID where exported data will be saved
24
+ save_original_file (bool): Whether to save the original file
25
+ path (str): File system path where exported data will be saved
26
+ target (str): The target source to export data from (assignment, ground_truth, task)
27
+ filter (dict): Filter criteria to apply when retrieving data
28
+ extra_params (dict | None): Additional parameters for export customization.
29
+ Example: {"include_metadata": True, "compression": "gzip"}
30
+
31
+ Validation:
32
+ - name: Must be non-blank after validation
33
+ - storage: Must exist and be accessible via client API
34
+ - target: Must be one of the supported target types
35
+ - filter: Must be valid for the specified target type
36
+
37
+ Example:
38
+ >>> params = ExportParams(
39
+ ... name="Assignment Export",
40
+ ... storage=1,
41
+ ... path="/exports/assignments",
42
+ ... target="assignment",
43
+ ... filter={"project": 123}
44
+ ... )
45
+ """
46
+
47
+ name: Annotated[str, AfterValidator(non_blank)]
48
+ description: str | None = None
49
+ storage: int
50
+ save_original_file: bool = True
51
+ path: str
52
+ target: Literal['assignment', 'ground_truth', 'task']
53
+ filter: dict
54
+ extra_params: dict | None = None
55
+
56
+ @field_validator('storage')
57
+ @staticmethod
58
+ def check_storage_exists(value, info):
59
+ action = info.context['action']
60
+ client = action.client
61
+ try:
62
+ client.get_storage(value)
63
+ except ClientError:
64
+ raise PydanticCustomError('client_error', _('Unable to get storage from Synapse backend.'))
65
+ return value
66
+
67
+ @field_validator('filter')
68
+ @staticmethod
69
+ def check_filter_by_target(value, info):
70
+ action = info.context['action']
71
+ client = action.client
72
+ target = action.params['target']
73
+ handler = TargetHandlerFactory.get_handler(target)
74
+ return handler.validate_filter(value, client)
@@ -0,0 +1,195 @@
1
+ import json
2
+ from datetime import datetime
3
+ from typing import Optional
4
+
5
+ from pydantic import BaseModel
6
+
7
+ from synapse_sdk.plugins.models import Run
8
+ from synapse_sdk.shared.enums import Context
9
+
10
+ from .enums import LOG_MESSAGES, ExportStatus, LogCode
11
+
12
+
13
+ class ExportRun(Run):
14
+ """Export-specific run management class.
15
+
16
+ Extends the base Run class with export-specific logging capabilities
17
+ and event tracking. Provides type-safe logging using LogCode enums
18
+ and specialized methods for tracking export progress.
19
+
20
+ Manages logging for export events, data files, and export targets
21
+ throughout the export lifecycle. Each log entry includes status,
22
+ timestamps, and relevant metadata.
23
+
24
+ Attributes:
25
+ Inherits all attributes from base Run class plus export-specific
26
+ logging methods and nested model classes for structured logging.
27
+
28
+ Example:
29
+ >>> run = ExportRun(job_id, context)
30
+ >>> run.log_message_with_code(LogCode.EXPORT_STARTED)
31
+ >>> run.log_export_event(LogCode.RESULTS_RETRIEVED, target_id, count)
32
+ """
33
+
34
+ class ExportEventLog(BaseModel):
35
+ """Model for export event log entries.
36
+
37
+ Records significant events during export processing with
38
+ target identification and status information.
39
+
40
+ Attributes:
41
+ target_id (int): The ID of the export target
42
+ info (str | None): Optional additional information
43
+ status (Context): Event status/severity level
44
+ created (str): Timestamp when event occurred
45
+ """
46
+
47
+ target_id: int
48
+ info: str | None = None
49
+ status: Context
50
+ created: str
51
+
52
+ class DataFileLog(BaseModel):
53
+ """Model for data file export log entries.
54
+
55
+ Tracks the export status of individual data files during
56
+ export operations.
57
+
58
+ Attributes:
59
+ target_id (int): The ID of the target being exported
60
+ data_file_info (str | None): JSON information about the data file
61
+ status (ExportStatus): Export status (SUCCESS/FAILED/STAND_BY)
62
+ error (str | None): Error message if export failed
63
+ created (str): Timestamp when log entry was created
64
+ """
65
+
66
+ target_id: int
67
+ data_file_info: str | None
68
+ status: ExportStatus
69
+ error: str | None = None
70
+ created: str
71
+
72
+ class MetricsRecord(BaseModel):
73
+ """Model for export metrics tracking.
74
+
75
+ Records count-based metrics for monitoring export
76
+ progress and success rates.
77
+
78
+ Attributes:
79
+ stand_by (int): Number of items waiting to be processed
80
+ failed (int): Number of items that failed processing
81
+ success (int): Number of items successfully processed
82
+ """
83
+
84
+ stand_by: int
85
+ failed: int
86
+ success: int
87
+
88
+ def log_message_with_code(self, code: LogCode, *args, level: Optional[Context] = None):
89
+ """Log message using predefined code with type safety.
90
+
91
+ Args:
92
+ code (LogCode): The log message code
93
+ *args: Arguments to format the message
94
+ level (Context | None): Optional context level override
95
+ """
96
+ if code not in LOG_MESSAGES:
97
+ self.log_message(f'Unknown log code: {code}')
98
+ return
99
+
100
+ log_config = LOG_MESSAGES[code]
101
+ message = log_config['message'].format(*args) if args else log_config['message']
102
+ log_level = level or log_config['level'] or Context.INFO
103
+
104
+ # Always call log_message for basic logging
105
+ if log_level:
106
+ self.log_message(message, context=log_level.value)
107
+ else:
108
+ self.log_message(message)
109
+
110
+ def log_file(
111
+ self, log_type: str, target_id: int, data_file_info: dict, status: ExportStatus, error: str | None = None
112
+ ):
113
+ """Log export file information.
114
+
115
+ Args:
116
+ log_type (str): The type of log ('export_data_file' or 'export_original_file').
117
+ target_id (int): The ID of the data file.
118
+ data_file_info (dict): The JSON info of the data file.
119
+ status (ExportStatus): The status of the data file.
120
+ error (str | None): The error message, if any.
121
+ """
122
+ now = datetime.now().isoformat()
123
+ self.log(
124
+ log_type,
125
+ self.DataFileLog(
126
+ target_id=target_id,
127
+ data_file_info=json.dumps(data_file_info),
128
+ status=status.value,
129
+ error=error,
130
+ created=now,
131
+ ).model_dump(),
132
+ )
133
+
134
+ def log_export_event(self, code: LogCode, target_id: int, *args, level: Context | None = None):
135
+ """Log export event using predefined code.
136
+
137
+ Args:
138
+ code (str): The log message code.
139
+ target_id (int): The ID of the export target.
140
+ *args: Arguments to format the message.
141
+ level (Context | None): Optional context level override.
142
+ """
143
+ # Call log_message_with_code to handle the basic logging
144
+ self.log_message_with_code(code, *args, level=level)
145
+
146
+ # Also log the event for export-specific tracking
147
+ if code not in LOG_MESSAGES:
148
+ now = datetime.now().isoformat()
149
+ self.log(
150
+ 'export_event',
151
+ self.ExportEventLog(
152
+ target_id=target_id, info=f'Unknown log code: {code}', status=Context.DANGER, created=now
153
+ ).model_dump(),
154
+ )
155
+ return
156
+
157
+ log_config = LOG_MESSAGES[code]
158
+ message = log_config['message'].format(*args) if args else log_config['message']
159
+ log_level = level or log_config['level'] or Context.INFO
160
+
161
+ now = datetime.now().isoformat()
162
+ self.log(
163
+ 'export_event',
164
+ self.ExportEventLog(info=message, status=log_level, target_id=target_id, created=now).model_dump(),
165
+ )
166
+
167
+ def log_metrics(self, record: MetricsRecord, category: str):
168
+ """Log export metrics.
169
+
170
+ Args:
171
+ record (MetricsRecord): The metrics record to log.
172
+ category (str): The category of the metrics.
173
+ """
174
+ record = self.MetricsRecord.model_validate(record)
175
+ self.set_metrics(value=record.model_dump(), category=category)
176
+
177
+ def export_log_json_file(
178
+ self,
179
+ target_id: int,
180
+ data_file_info: dict,
181
+ status: ExportStatus = ExportStatus.STAND_BY,
182
+ error: str | None = None,
183
+ ):
184
+ """Log export json data file."""
185
+ self.log_file('export_data_file', target_id, data_file_info, status, error)
186
+
187
+ def export_log_original_file(
188
+ self,
189
+ target_id: int,
190
+ data_file_info: dict,
191
+ status: ExportStatus = ExportStatus.STAND_BY,
192
+ error: str | None = None,
193
+ ):
194
+ """Log export origin data file."""
195
+ self.log_file('export_original_file', target_id, data_file_info, status, error)
@@ -1,15 +1,10 @@
1
1
  from abc import ABC, abstractmethod
2
- from typing import Any, Literal
2
+ from typing import Any
3
3
 
4
- from pydantic import BaseModel, field_validator
5
4
  from pydantic_core import PydanticCustomError
6
5
 
7
6
  from synapse_sdk.clients.exceptions import ClientError
8
7
  from synapse_sdk.i18n import gettext as _
9
- from synapse_sdk.plugins.categories.base import Action
10
- from synapse_sdk.plugins.categories.decorators import register_action
11
- from synapse_sdk.plugins.enums import PluginCategory, RunMethod
12
- from synapse_sdk.utils.storage import get_pathlib
13
8
 
14
9
 
15
10
  class ExportTargetHandler(ABC):
@@ -66,6 +61,12 @@ class ExportTargetHandler(ABC):
66
61
 
67
62
 
68
63
  class AssignmentExportTargetHandler(ExportTargetHandler):
64
+ """Handler for assignment target exports.
65
+
66
+ Implements ExportTargetHandler interface for assignment-specific
67
+ export operations including validation, data retrieval, and processing.
68
+ """
69
+
69
70
  def validate_filter(self, value: dict, client: Any):
70
71
  if 'project' not in value:
71
72
  raise PydanticCustomError('missing_field', _('Project is required for Assignment.'))
@@ -88,6 +89,12 @@ class AssignmentExportTargetHandler(ExportTargetHandler):
88
89
 
89
90
 
90
91
  class GroundTruthExportTargetHandler(ExportTargetHandler):
92
+ """Handler for ground truth target exports.
93
+
94
+ Implements ExportTargetHandler interface for ground truth dataset
95
+ export operations including validation, data retrieval, and processing.
96
+ """
97
+
91
98
  def validate_filter(self, value: dict, client: Any):
92
99
  if 'ground_truth_dataset_version' not in value:
93
100
  raise PydanticCustomError('missing_field', _('Ground Truth dataset version is required.'))
@@ -107,11 +114,17 @@ class GroundTruthExportTargetHandler(ExportTargetHandler):
107
114
  yield {
108
115
  'data': result['data'],
109
116
  'files': result['data_unit']['files'][files_key],
110
- 'id': result['ground_truth'],
117
+ 'id': result['id'],
111
118
  }
112
119
 
113
120
 
114
121
  class TaskExportTargetHandler(ExportTargetHandler):
122
+ """Handler for task target exports.
123
+
124
+ Implements ExportTargetHandler interface for task-specific
125
+ export operations including validation, data retrieval, and processing.
126
+ """
127
+
115
128
  def validate_filter(self, value: dict, client: Any):
116
129
  if 'project' not in value:
117
130
  raise PydanticCustomError('missing_field', _('Project is required for Task.'))
@@ -122,7 +135,7 @@ class TaskExportTargetHandler(ExportTargetHandler):
122
135
  return value
123
136
 
124
137
  def get_results(self, client: Any, filters: dict):
125
- filters['expand'] = 'data_unit'
138
+ filters['expand'] = ['data_unit', 'assignment', 'workshop']
126
139
  return client.list_tasks(params=filters, list_all=True)
127
140
 
128
141
  def get_export_item(self, results):
@@ -136,8 +149,34 @@ class TaskExportTargetHandler(ExportTargetHandler):
136
149
 
137
150
 
138
151
  class TargetHandlerFactory:
152
+ """Factory class for creating export target handlers.
153
+
154
+ Provides a centralized way to create appropriate target handlers
155
+ based on the target type. Supports assignment, ground_truth, and task targets.
156
+
157
+ Example:
158
+ >>> handler = TargetHandlerFactory.get_handler('assignment')
159
+ >>> isinstance(handler, AssignmentExportTargetHandler)
160
+ True
161
+ """
162
+
139
163
  @staticmethod
140
164
  def get_handler(target: str) -> ExportTargetHandler:
165
+ """Get the appropriate target handler for the given target type.
166
+
167
+ Args:
168
+ target (str): The target type ('assignment', 'ground_truth', 'task')
169
+
170
+ Returns:
171
+ ExportTargetHandler: The appropriate handler instance
172
+
173
+ Raises:
174
+ ValueError: If the target type is not supported
175
+
176
+ Example:
177
+ >>> handler = TargetHandlerFactory.get_handler('assignment')
178
+ >>> handler.validate_filter({'project': 123}, client)
179
+ """
141
180
  if target == 'assignment':
142
181
  return AssignmentExportTargetHandler()
143
182
  elif target == 'ground_truth':
@@ -146,77 +185,3 @@ class TargetHandlerFactory:
146
185
  return TaskExportTargetHandler()
147
186
  else:
148
187
  raise ValueError(f'Unknown target: {target}')
149
-
150
-
151
- class ExportParams(BaseModel):
152
- """
153
- Parameters for the export action.
154
-
155
- Attributes:
156
- storage (int): The storage ID to save the exported data.
157
- save_original_file (bool): Whether to save the original file.
158
- path (str): The path to save the exported data.
159
- target (str): The target source to export data from. (ex. ground_truth, assignment, task)
160
- filter (dict): The filter criteria to apply.
161
- """
162
-
163
- storage: int
164
- save_original_file: bool = True
165
- path: str
166
- target: Literal['assignment', 'ground_truth', 'task']
167
- filter: dict
168
-
169
- @field_validator('storage')
170
- @staticmethod
171
- def check_storage_exists(value, info):
172
- action = info.context['action']
173
- client = action.client
174
- try:
175
- client.get_storage(value)
176
- except ClientError:
177
- raise PydanticCustomError('client_error', _('Unable to get storage from Synapse backend.'))
178
- return value
179
-
180
- @field_validator('filter')
181
- @staticmethod
182
- def check_filter_by_target(value, info):
183
- action = info.context['action']
184
- client = action.client
185
- target = action.params['target']
186
- handler = TargetHandlerFactory.get_handler(target)
187
- return handler.validate_filter(value, client)
188
-
189
-
190
- @register_action
191
- class ExportAction(Action):
192
- name = 'export'
193
- category = PluginCategory.EXPORT
194
- method = RunMethod.JOB
195
- params_model = ExportParams
196
- progress_categories = {
197
- 'dataset_conversion': {
198
- 'proportion': 100,
199
- }
200
- }
201
-
202
- def get_filtered_results(self, filters, handler):
203
- """Get filtered target results."""
204
- try:
205
- result_list = handler.get_results(self.client, filters)
206
- results = result_list[0]
207
- count = result_list[1]
208
- except ClientError:
209
- raise PydanticCustomError('client_error', _('Unable to get Ground Truth dataset.'))
210
- return results, count
211
-
212
- def start(self):
213
- filters = {'expand': 'data', **self.params['filter']}
214
- target = self.params['target']
215
- handler = TargetHandlerFactory.get_handler(target)
216
-
217
- self.params['results'], self.params['count'] = self.get_filtered_results(filters, handler)
218
- export_items = handler.get_export_item(self.params['results'])
219
-
220
- storage = self.client.get_storage(self.params['storage'])
221
- pathlib_cwd = get_pathlib(storage, self.params['path'])
222
- return self.entrypoint(self.run, export_items, pathlib_cwd, **self.params)
@@ -1,3 +1,21 @@
1
1
  actions:
2
2
  export:
3
- entrypoint: plugin.export.export
3
+ entrypoint: plugin.export.Exporter
4
+ # Filter to only export action specific annotation types (e.g., only export image annotations project)
5
+ # Supported types: image, video, audio, text, pcd, prompt
6
+ annotation_types:
7
+ - image
8
+ - video
9
+ - audio
10
+ - text
11
+ - pcd
12
+ - prompt
13
+
14
+ # Filter to only export specific data types (e.g., only export image data)
15
+ # Supported types: image, video, audio, text, pcd
16
+ data_types:
17
+ - image
18
+ - video
19
+ - audio
20
+ - text
21
+ - pcd