synapse-sdk 1.0.0a13__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 (339) hide show
  1. synapse_sdk/__init__.py +24 -0
  2. synapse_sdk/cli/__init__.py +310 -5
  3. synapse_sdk/cli/alias/__init__.py +22 -0
  4. synapse_sdk/cli/alias/create.py +36 -0
  5. synapse_sdk/cli/alias/dataclass.py +31 -0
  6. synapse_sdk/cli/alias/default.py +16 -0
  7. synapse_sdk/cli/alias/delete.py +15 -0
  8. synapse_sdk/cli/alias/list.py +19 -0
  9. synapse_sdk/cli/alias/read.py +15 -0
  10. synapse_sdk/cli/alias/update.py +17 -0
  11. synapse_sdk/cli/alias/utils.py +61 -0
  12. synapse_sdk/cli/code_server.py +687 -0
  13. synapse_sdk/cli/config.py +440 -0
  14. synapse_sdk/cli/devtools.py +90 -0
  15. synapse_sdk/cli/plugin/__init__.py +33 -0
  16. synapse_sdk/cli/{create_plugin.py → plugin/create.py} +2 -2
  17. synapse_sdk/cli/plugin/publish.py +45 -0
  18. synapse_sdk/{plugins/cli → cli/plugin}/run.py +12 -5
  19. synapse_sdk/clients/agent/__init__.py +9 -3
  20. synapse_sdk/clients/agent/container.py +133 -0
  21. synapse_sdk/clients/agent/core.py +19 -0
  22. synapse_sdk/clients/agent/ray.py +298 -9
  23. synapse_sdk/clients/backend/__init__.py +41 -12
  24. synapse_sdk/clients/backend/annotation.py +13 -5
  25. synapse_sdk/clients/backend/core.py +59 -0
  26. synapse_sdk/clients/backend/data_collection.py +186 -0
  27. synapse_sdk/clients/backend/hitl.py +17 -0
  28. synapse_sdk/clients/backend/integration.py +19 -4
  29. synapse_sdk/clients/backend/ml.py +10 -7
  30. synapse_sdk/clients/backend/models.py +78 -0
  31. synapse_sdk/clients/base.py +381 -34
  32. synapse_sdk/clients/ray/serve.py +2 -0
  33. synapse_sdk/clients/validators/collections.py +31 -0
  34. synapse_sdk/devtools/config.py +94 -0
  35. synapse_sdk/devtools/docs/.gitignore +20 -0
  36. synapse_sdk/devtools/docs/README.md +41 -0
  37. synapse_sdk/devtools/docs/blog/2019-05-28-first-blog-post.md +12 -0
  38. synapse_sdk/devtools/docs/blog/2019-05-29-long-blog-post.md +44 -0
  39. synapse_sdk/devtools/docs/blog/2021-08-01-mdx-blog-post.mdx +24 -0
  40. synapse_sdk/devtools/docs/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg +0 -0
  41. synapse_sdk/devtools/docs/blog/2021-08-26-welcome/index.md +29 -0
  42. synapse_sdk/devtools/docs/blog/authors.yml +25 -0
  43. synapse_sdk/devtools/docs/blog/tags.yml +19 -0
  44. synapse_sdk/devtools/docs/docs/api/clients/agent.md +43 -0
  45. synapse_sdk/devtools/docs/docs/api/clients/annotation-mixin.md +378 -0
  46. synapse_sdk/devtools/docs/docs/api/clients/backend.md +420 -0
  47. synapse_sdk/devtools/docs/docs/api/clients/base.md +257 -0
  48. synapse_sdk/devtools/docs/docs/api/clients/core-mixin.md +477 -0
  49. synapse_sdk/devtools/docs/docs/api/clients/data-collection-mixin.md +422 -0
  50. synapse_sdk/devtools/docs/docs/api/clients/hitl-mixin.md +554 -0
  51. synapse_sdk/devtools/docs/docs/api/clients/index.md +391 -0
  52. synapse_sdk/devtools/docs/docs/api/clients/integration-mixin.md +571 -0
  53. synapse_sdk/devtools/docs/docs/api/clients/ml-mixin.md +578 -0
  54. synapse_sdk/devtools/docs/docs/api/clients/ray.md +342 -0
  55. synapse_sdk/devtools/docs/docs/api/index.md +52 -0
  56. synapse_sdk/devtools/docs/docs/api/plugins/categories.md +43 -0
  57. synapse_sdk/devtools/docs/docs/api/plugins/models.md +114 -0
  58. synapse_sdk/devtools/docs/docs/api/plugins/utils.md +328 -0
  59. synapse_sdk/devtools/docs/docs/categories.md +0 -0
  60. synapse_sdk/devtools/docs/docs/cli-usage.md +280 -0
  61. synapse_sdk/devtools/docs/docs/concepts/index.md +38 -0
  62. synapse_sdk/devtools/docs/docs/configuration.md +83 -0
  63. synapse_sdk/devtools/docs/docs/contributing.md +306 -0
  64. synapse_sdk/devtools/docs/docs/examples/index.md +29 -0
  65. synapse_sdk/devtools/docs/docs/faq.md +179 -0
  66. synapse_sdk/devtools/docs/docs/features/converters/index.md +455 -0
  67. synapse_sdk/devtools/docs/docs/features/index.md +24 -0
  68. synapse_sdk/devtools/docs/docs/features/utils/file.md +415 -0
  69. synapse_sdk/devtools/docs/docs/features/utils/network.md +378 -0
  70. synapse_sdk/devtools/docs/docs/features/utils/storage.md +57 -0
  71. synapse_sdk/devtools/docs/docs/features/utils/types.md +51 -0
  72. synapse_sdk/devtools/docs/docs/installation.md +94 -0
  73. synapse_sdk/devtools/docs/docs/introduction.md +47 -0
  74. synapse_sdk/devtools/docs/docs/plugins/categories/neural-net-plugins/train-action-overview.md +814 -0
  75. synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/pre-annotation-plugin-overview.md +198 -0
  76. synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-action-development.md +1645 -0
  77. synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-overview.md +717 -0
  78. synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-template-development.md +1380 -0
  79. synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-action.md +948 -0
  80. synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-overview.md +544 -0
  81. synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-template.md +766 -0
  82. synapse_sdk/devtools/docs/docs/plugins/export-plugins.md +1092 -0
  83. synapse_sdk/devtools/docs/docs/plugins/plugins.md +852 -0
  84. synapse_sdk/devtools/docs/docs/quickstart.md +78 -0
  85. synapse_sdk/devtools/docs/docs/troubleshooting.md +519 -0
  86. synapse_sdk/devtools/docs/docs/tutorial-basics/_category_.json +8 -0
  87. synapse_sdk/devtools/docs/docs/tutorial-basics/congratulations.md +23 -0
  88. synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-blog-post.md +34 -0
  89. synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-document.md +57 -0
  90. synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-page.md +43 -0
  91. synapse_sdk/devtools/docs/docs/tutorial-basics/deploy-your-site.md +31 -0
  92. synapse_sdk/devtools/docs/docs/tutorial-basics/markdown-features.mdx +152 -0
  93. synapse_sdk/devtools/docs/docs/tutorial-extras/_category_.json +7 -0
  94. synapse_sdk/devtools/docs/docs/tutorial-extras/img/docsVersionDropdown.png +0 -0
  95. synapse_sdk/devtools/docs/docs/tutorial-extras/img/localeDropdown.png +0 -0
  96. synapse_sdk/devtools/docs/docs/tutorial-extras/manage-docs-versions.md +55 -0
  97. synapse_sdk/devtools/docs/docs/tutorial-extras/translate-your-site.md +88 -0
  98. synapse_sdk/devtools/docs/docusaurus.config.ts +148 -0
  99. synapse_sdk/devtools/docs/i18n/ko/code.json +325 -0
  100. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/agent.md +43 -0
  101. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/annotation-mixin.md +289 -0
  102. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/backend.md +420 -0
  103. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/base.md +257 -0
  104. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/core-mixin.md +417 -0
  105. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/data-collection-mixin.md +356 -0
  106. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/hitl-mixin.md +192 -0
  107. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/index.md +391 -0
  108. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/integration-mixin.md +479 -0
  109. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/ml-mixin.md +284 -0
  110. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/ray.md +342 -0
  111. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/index.md +52 -0
  112. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/plugins/models.md +114 -0
  113. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/categories.md +0 -0
  114. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/cli-usage.md +280 -0
  115. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/concepts/index.md +38 -0
  116. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/configuration.md +83 -0
  117. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/contributing.md +306 -0
  118. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/examples/index.md +29 -0
  119. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/faq.md +179 -0
  120. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/converters/index.md +30 -0
  121. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/index.md +24 -0
  122. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/file.md +415 -0
  123. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/network.md +378 -0
  124. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/storage.md +60 -0
  125. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/types.md +51 -0
  126. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/installation.md +94 -0
  127. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/introduction.md +47 -0
  128. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/neural-net-plugins/train-action-overview.md +815 -0
  129. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/pre-annotation-plugin-overview.md +198 -0
  130. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-action-development.md +1645 -0
  131. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-overview.md +717 -0
  132. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-template-development.md +1380 -0
  133. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-action.md +948 -0
  134. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-overview.md +544 -0
  135. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-template.md +766 -0
  136. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/export-plugins.md +1092 -0
  137. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/plugins.md +117 -0
  138. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/quickstart.md +78 -0
  139. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/troubleshooting.md +519 -0
  140. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current.json +34 -0
  141. synapse_sdk/devtools/docs/i18n/ko/docusaurus-theme-classic/footer.json +42 -0
  142. synapse_sdk/devtools/docs/i18n/ko/docusaurus-theme-classic/navbar.json +18 -0
  143. synapse_sdk/devtools/docs/package-lock.json +18784 -0
  144. synapse_sdk/devtools/docs/package.json +48 -0
  145. synapse_sdk/devtools/docs/sidebars.ts +122 -0
  146. synapse_sdk/devtools/docs/src/components/HomepageFeatures/index.tsx +71 -0
  147. synapse_sdk/devtools/docs/src/components/HomepageFeatures/styles.module.css +11 -0
  148. synapse_sdk/devtools/docs/src/css/custom.css +30 -0
  149. synapse_sdk/devtools/docs/src/pages/index.module.css +23 -0
  150. synapse_sdk/devtools/docs/src/pages/index.tsx +21 -0
  151. synapse_sdk/devtools/docs/src/pages/markdown-page.md +7 -0
  152. synapse_sdk/devtools/docs/static/.nojekyll +0 -0
  153. synapse_sdk/devtools/docs/static/img/docusaurus-social-card.jpg +0 -0
  154. synapse_sdk/devtools/docs/static/img/docusaurus.png +0 -0
  155. synapse_sdk/devtools/docs/static/img/favicon.ico +0 -0
  156. synapse_sdk/devtools/docs/static/img/logo.png +0 -0
  157. synapse_sdk/devtools/docs/static/img/undraw_docusaurus_mountain.svg +171 -0
  158. synapse_sdk/devtools/docs/static/img/undraw_docusaurus_react.svg +170 -0
  159. synapse_sdk/devtools/docs/static/img/undraw_docusaurus_tree.svg +40 -0
  160. synapse_sdk/devtools/docs/tsconfig.json +8 -0
  161. synapse_sdk/devtools/server.py +41 -0
  162. synapse_sdk/devtools/streamlit_app/__init__.py +5 -0
  163. synapse_sdk/devtools/streamlit_app/app.py +128 -0
  164. synapse_sdk/devtools/streamlit_app/services/__init__.py +11 -0
  165. synapse_sdk/devtools/streamlit_app/services/job_service.py +233 -0
  166. synapse_sdk/devtools/streamlit_app/services/plugin_service.py +236 -0
  167. synapse_sdk/devtools/streamlit_app/services/serve_service.py +95 -0
  168. synapse_sdk/devtools/streamlit_app/ui/__init__.py +15 -0
  169. synapse_sdk/devtools/streamlit_app/ui/config_tab.py +76 -0
  170. synapse_sdk/devtools/streamlit_app/ui/deployment_tab.py +66 -0
  171. synapse_sdk/devtools/streamlit_app/ui/http_tab.py +125 -0
  172. synapse_sdk/devtools/streamlit_app/ui/jobs_tab.py +573 -0
  173. synapse_sdk/devtools/streamlit_app/ui/serve_tab.py +346 -0
  174. synapse_sdk/devtools/streamlit_app/ui/status_bar.py +118 -0
  175. synapse_sdk/devtools/streamlit_app/utils/__init__.py +40 -0
  176. synapse_sdk/devtools/streamlit_app/utils/json_viewer.py +197 -0
  177. synapse_sdk/devtools/streamlit_app/utils/log_formatter.py +38 -0
  178. synapse_sdk/devtools/streamlit_app/utils/styles.py +241 -0
  179. synapse_sdk/devtools/streamlit_app/utils/ui_components.py +289 -0
  180. synapse_sdk/devtools/streamlit_app.py +10 -0
  181. synapse_sdk/loggers.py +74 -9
  182. synapse_sdk/plugins/README.md +1340 -0
  183. synapse_sdk/plugins/__init__.py +0 -13
  184. synapse_sdk/plugins/categories/base.py +145 -30
  185. synapse_sdk/plugins/categories/data_validation/actions/validation.py +72 -0
  186. synapse_sdk/plugins/categories/data_validation/templates/plugin/validation.py +33 -5
  187. synapse_sdk/plugins/categories/export/actions/__init__.py +3 -0
  188. synapse_sdk/plugins/categories/export/actions/export/__init__.py +28 -0
  189. synapse_sdk/plugins/categories/export/actions/export/action.py +165 -0
  190. synapse_sdk/plugins/categories/export/actions/export/enums.py +113 -0
  191. synapse_sdk/plugins/categories/export/actions/export/exceptions.py +53 -0
  192. synapse_sdk/plugins/categories/export/actions/export/models.py +74 -0
  193. synapse_sdk/plugins/categories/export/actions/export/run.py +195 -0
  194. synapse_sdk/plugins/categories/export/actions/export/utils.py +187 -0
  195. synapse_sdk/plugins/categories/export/templates/config.yaml +21 -0
  196. synapse_sdk/plugins/categories/export/templates/plugin/__init__.py +390 -0
  197. synapse_sdk/plugins/categories/export/templates/plugin/export.py +160 -0
  198. synapse_sdk/plugins/categories/neural_net/actions/deployment.py +29 -14
  199. synapse_sdk/plugins/categories/neural_net/actions/inference.py +13 -1
  200. synapse_sdk/plugins/categories/neural_net/actions/train.py +1084 -38
  201. synapse_sdk/plugins/categories/neural_net/actions/tune.py +534 -0
  202. synapse_sdk/plugins/categories/neural_net/base/__init__.py +0 -0
  203. synapse_sdk/plugins/categories/neural_net/base/inference.py +37 -0
  204. synapse_sdk/plugins/categories/neural_net/templates/config.yaml +30 -5
  205. synapse_sdk/plugins/categories/neural_net/templates/plugin/inference.py +26 -10
  206. synapse_sdk/plugins/categories/pre_annotation/actions/__init__.py +4 -0
  207. synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation/__init__.py +3 -0
  208. synapse_sdk/plugins/categories/{export/actions/export.py → pre_annotation/actions/pre_annotation/action.py} +4 -4
  209. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/__init__.py +28 -0
  210. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/action.py +145 -0
  211. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/enums.py +269 -0
  212. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/exceptions.py +14 -0
  213. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/factory.py +76 -0
  214. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/models.py +97 -0
  215. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/orchestrator.py +250 -0
  216. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/run.py +64 -0
  217. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/__init__.py +17 -0
  218. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/annotation.py +287 -0
  219. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/base.py +170 -0
  220. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/extraction.py +83 -0
  221. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/metrics.py +87 -0
  222. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/preprocessor.py +127 -0
  223. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/validation.py +143 -0
  224. synapse_sdk/plugins/categories/pre_annotation/actions/to_task.py +966 -0
  225. synapse_sdk/plugins/categories/pre_annotation/templates/config.yaml +19 -0
  226. synapse_sdk/plugins/categories/pre_annotation/templates/plugin/to_task.py +40 -0
  227. synapse_sdk/plugins/categories/smart_tool/templates/config.yaml +5 -2
  228. synapse_sdk/plugins/categories/upload/__init__.py +0 -0
  229. synapse_sdk/plugins/categories/upload/actions/__init__.py +0 -0
  230. synapse_sdk/plugins/categories/upload/actions/upload/__init__.py +19 -0
  231. synapse_sdk/plugins/categories/upload/actions/upload/action.py +232 -0
  232. synapse_sdk/plugins/categories/upload/actions/upload/context.py +185 -0
  233. synapse_sdk/plugins/categories/upload/actions/upload/enums.py +471 -0
  234. synapse_sdk/plugins/categories/upload/actions/upload/exceptions.py +36 -0
  235. synapse_sdk/plugins/categories/upload/actions/upload/factory.py +138 -0
  236. synapse_sdk/plugins/categories/upload/actions/upload/models.py +203 -0
  237. synapse_sdk/plugins/categories/upload/actions/upload/orchestrator.py +183 -0
  238. synapse_sdk/plugins/categories/upload/actions/upload/registry.py +113 -0
  239. synapse_sdk/plugins/categories/upload/actions/upload/run.py +179 -0
  240. synapse_sdk/plugins/categories/upload/actions/upload/steps/__init__.py +1 -0
  241. synapse_sdk/plugins/categories/upload/actions/upload/steps/base.py +107 -0
  242. synapse_sdk/plugins/categories/upload/actions/upload/steps/cleanup.py +62 -0
  243. synapse_sdk/plugins/categories/upload/actions/upload/steps/collection.py +63 -0
  244. synapse_sdk/plugins/categories/upload/actions/upload/steps/generate.py +84 -0
  245. synapse_sdk/plugins/categories/upload/actions/upload/steps/initialize.py +82 -0
  246. synapse_sdk/plugins/categories/upload/actions/upload/steps/metadata.py +235 -0
  247. synapse_sdk/plugins/categories/upload/actions/upload/steps/organize.py +203 -0
  248. synapse_sdk/plugins/categories/upload/actions/upload/steps/upload.py +97 -0
  249. synapse_sdk/plugins/categories/upload/actions/upload/steps/validate.py +71 -0
  250. synapse_sdk/plugins/categories/upload/actions/upload/strategies/__init__.py +1 -0
  251. synapse_sdk/plugins/categories/upload/actions/upload/strategies/base.py +82 -0
  252. synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/__init__.py +1 -0
  253. synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/batch.py +39 -0
  254. synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/single.py +29 -0
  255. synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/__init__.py +1 -0
  256. synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/flat.py +258 -0
  257. synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/recursive.py +281 -0
  258. synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/__init__.py +1 -0
  259. synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/excel.py +174 -0
  260. synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/none.py +16 -0
  261. synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/__init__.py +1 -0
  262. synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/sync.py +84 -0
  263. synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/__init__.py +1 -0
  264. synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/default.py +60 -0
  265. synapse_sdk/plugins/categories/upload/actions/upload/utils.py +250 -0
  266. synapse_sdk/plugins/categories/upload/templates/README.md +470 -0
  267. synapse_sdk/plugins/categories/upload/templates/config.yaml +33 -0
  268. synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py +294 -0
  269. synapse_sdk/plugins/categories/upload/templates/plugin/upload.py +102 -0
  270. synapse_sdk/plugins/enums.py +3 -1
  271. synapse_sdk/plugins/models.py +140 -16
  272. synapse_sdk/plugins/templates/plugin-config-schema.json +406 -0
  273. synapse_sdk/plugins/templates/schema.json +491 -0
  274. synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/config.yaml +1 -0
  275. synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/requirements.txt +1 -1
  276. synapse_sdk/plugins/utils/__init__.py +46 -0
  277. synapse_sdk/plugins/utils/actions.py +119 -0
  278. synapse_sdk/plugins/utils/config.py +203 -0
  279. synapse_sdk/plugins/utils/legacy.py +95 -0
  280. synapse_sdk/plugins/utils/ray_gcs.py +66 -0
  281. synapse_sdk/plugins/utils/registry.py +58 -0
  282. synapse_sdk/shared/__init__.py +25 -0
  283. synapse_sdk/shared/enums.py +93 -0
  284. synapse_sdk/types.py +19 -0
  285. synapse_sdk/utils/converters/__init__.py +240 -0
  286. synapse_sdk/utils/converters/coco/__init__.py +0 -0
  287. synapse_sdk/utils/converters/coco/from_dm.py +322 -0
  288. synapse_sdk/utils/converters/coco/to_dm.py +215 -0
  289. synapse_sdk/utils/converters/dm/__init__.py +56 -0
  290. synapse_sdk/utils/converters/dm/from_v1.py +627 -0
  291. synapse_sdk/utils/converters/dm/to_v1.py +367 -0
  292. synapse_sdk/utils/converters/pascal/__init__.py +0 -0
  293. synapse_sdk/utils/converters/pascal/from_dm.py +244 -0
  294. synapse_sdk/utils/converters/pascal/to_dm.py +214 -0
  295. synapse_sdk/utils/converters/yolo/__init__.py +0 -0
  296. synapse_sdk/utils/converters/yolo/from_dm.py +384 -0
  297. synapse_sdk/utils/converters/yolo/to_dm.py +267 -0
  298. synapse_sdk/utils/dataset.py +46 -0
  299. synapse_sdk/utils/encryption.py +158 -0
  300. synapse_sdk/utils/file/__init__.py +39 -0
  301. synapse_sdk/utils/file/archive.py +32 -0
  302. synapse_sdk/utils/file/checksum.py +56 -0
  303. synapse_sdk/utils/file/chunking.py +31 -0
  304. synapse_sdk/utils/file/download.py +385 -0
  305. synapse_sdk/utils/file/encoding.py +40 -0
  306. synapse_sdk/utils/file/io.py +22 -0
  307. synapse_sdk/utils/file/video/__init__.py +29 -0
  308. synapse_sdk/utils/file/video/transcode.py +307 -0
  309. synapse_sdk/utils/file.py.backup +301 -0
  310. synapse_sdk/utils/http.py +138 -0
  311. synapse_sdk/utils/network.py +309 -0
  312. synapse_sdk/utils/storage/__init__.py +72 -0
  313. synapse_sdk/utils/storage/providers/__init__.py +183 -0
  314. synapse_sdk/utils/storage/providers/file_system.py +134 -0
  315. synapse_sdk/utils/storage/providers/gcp.py +13 -0
  316. synapse_sdk/utils/storage/providers/http.py +190 -0
  317. synapse_sdk/utils/storage/providers/s3.py +91 -0
  318. synapse_sdk/utils/storage/providers/sftp.py +47 -0
  319. synapse_sdk/utils/storage/registry.py +17 -0
  320. synapse_sdk-2025.11.7.dist-info/METADATA +122 -0
  321. synapse_sdk-2025.11.7.dist-info/RECORD +386 -0
  322. {synapse_sdk-1.0.0a13.dist-info → synapse_sdk-2025.11.7.dist-info}/WHEEL +1 -1
  323. synapse_sdk/clients/backend/dataset.py +0 -51
  324. synapse_sdk/plugins/categories/import/actions/import.py +0 -10
  325. synapse_sdk/plugins/cli/__init__.py +0 -21
  326. synapse_sdk/plugins/cli/publish.py +0 -37
  327. synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.env +0 -24
  328. synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.env.dist +0 -24
  329. synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/main.py +0 -4
  330. synapse_sdk/plugins/utils.py +0 -50
  331. synapse_sdk/utils/file.py +0 -87
  332. synapse_sdk/utils/storage.py +0 -91
  333. synapse_sdk-1.0.0a13.dist-info/METADATA +0 -43
  334. synapse_sdk-1.0.0a13.dist-info/RECORD +0 -111
  335. /synapse_sdk/{plugins/categories/import → clients/validators}/__init__.py +0 -0
  336. /synapse_sdk/{plugins/categories/import/actions → devtools}/__init__.py +0 -0
  337. {synapse_sdk-1.0.0a13.dist-info → synapse_sdk-2025.11.7.dist-info}/entry_points.txt +0 -0
  338. {synapse_sdk-1.0.0a13.dist-info → synapse_sdk-2025.11.7.dist-info/licenses}/LICENSE +0 -0
  339. {synapse_sdk-1.0.0a13.dist-info → synapse_sdk-2025.11.7.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,477 @@
1
+ ---
2
+ id: core-mixin
3
+ title: CoreClientMixin
4
+ sidebar_position: 7
5
+ ---
6
+
7
+ # CoreClientMixin
8
+
9
+ Provides core file upload and fundamental operations for the Synapse backend.
10
+
11
+ ## Overview
12
+
13
+ The `CoreClientMixin` handles core system operations, particularly file upload capabilities including chunked upload for large files. This mixin is automatically included in the `BackendClient` and provides essential functionality used by other mixins.
14
+
15
+ ## File Upload Operations
16
+
17
+ ### `create_chunked_upload(file_path)`
18
+
19
+ Upload large files using chunked upload for optimal performance and reliability.
20
+
21
+ ```python
22
+ from pathlib import Path
23
+
24
+ # Upload a large file
25
+ file_path = Path('/path/to/large_dataset.zip')
26
+ result = client.create_chunked_upload(file_path)
27
+ print(f"Upload completed: {result}")
28
+ print(f"File ID: {result['id']}")
29
+ ```
30
+
31
+ **Parameters:**
32
+
33
+ - `file_path` (str | Path): Path to the file to upload
34
+
35
+ **Returns:**
36
+
37
+ - `dict`: Upload result with file ID and metadata
38
+
39
+ **Features:**
40
+
41
+ - **50MB Chunks**: Uses optimal chunk size for performance
42
+ - **MD5 Integrity**: Automatic checksum verification
43
+ - **Resume Capability**: Can resume interrupted uploads
44
+ - **Progress Tracking**: Supports upload progress monitoring
45
+ - **Error Recovery**: Automatic retry for failed chunks
46
+
47
+ ### Upload Process Details
48
+
49
+ The chunked upload process works as follows:
50
+
51
+ 1. **File Analysis**: Calculate file size and MD5 hash
52
+ 2. **Chunk Creation**: Split file into 50MB chunks
53
+ 3. **Sequential Upload**: Upload chunks one by one
54
+ 4. **Integrity Check**: Verify each chunk with MD5
55
+ 5. **Assembly**: Server assembles chunks into final file
56
+ 6. **Verification**: Final integrity check of complete file
57
+
58
+ ```python
59
+ import hashlib
60
+ import os
61
+ from pathlib import Path
62
+
63
+ def upload_with_progress(file_path):
64
+ """Upload file with detailed progress tracking."""
65
+
66
+ file_path = Path(file_path)
67
+
68
+ # Get file info
69
+ file_size = os.path.getsize(file_path)
70
+ print(f"Uploading file: {file_path.name}")
71
+ print(f"File size: {file_size / (1024*1024):.2f} MB")
72
+
73
+ # Calculate MD5 (this is done automatically by the client)
74
+ hash_md5 = hashlib.md5()
75
+ with open(file_path, "rb") as f:
76
+ for chunk in iter(lambda: f.read(4096), b""):
77
+ hash_md5.update(chunk)
78
+
79
+ print(f"MD5 checksum: {hash_md5.hexdigest()}")
80
+
81
+ # Upload with chunked upload
82
+ try:
83
+ result = client.create_chunked_upload(file_path)
84
+ print("Upload successful!")
85
+ return result
86
+ except Exception as e:
87
+ print(f"Upload failed: {e}")
88
+ raise
89
+
90
+ # Usage
91
+ upload_result = upload_with_progress('/path/to/large_file.zip')
92
+ ```
93
+
94
+ ## Advanced Upload Scenarios
95
+
96
+ ### Batch File Upload
97
+
98
+ ```python
99
+ def batch_chunked_upload(file_paths, max_concurrent=3):
100
+ """Upload multiple large files with concurrency control."""
101
+ import concurrent.futures
102
+ import threading
103
+
104
+ upload_results = []
105
+ failed_uploads = []
106
+
107
+ def upload_single_file(file_path):
108
+ try:
109
+ print(f"Starting upload: {file_path}")
110
+ result = client.create_chunked_upload(file_path)
111
+ print(f"Completed upload: {file_path}")
112
+ return {'file_path': file_path, 'result': result, 'status': 'success'}
113
+ except Exception as e:
114
+ print(f"Failed upload: {file_path} - {e}")
115
+ return {'file_path': file_path, 'error': str(e), 'status': 'failed'}
116
+
117
+ # Use ThreadPoolExecutor for concurrent uploads
118
+ with concurrent.futures.ThreadPoolExecutor(max_workers=max_concurrent) as executor:
119
+ future_to_file = {
120
+ executor.submit(upload_single_file, file_path): file_path
121
+ for file_path in file_paths
122
+ }
123
+
124
+ for future in concurrent.futures.as_completed(future_to_file):
125
+ result = future.result()
126
+
127
+ if result['status'] == 'success':
128
+ upload_results.append(result)
129
+ else:
130
+ failed_uploads.append(result)
131
+
132
+ return {
133
+ 'successful': upload_results,
134
+ 'failed': failed_uploads,
135
+ 'total': len(file_paths)
136
+ }
137
+
138
+ # Upload multiple files
139
+ file_list = [
140
+ Path('/data/file1.zip'),
141
+ Path('/data/file2.zip'),
142
+ Path('/data/file3.zip')
143
+ ]
144
+
145
+ batch_results = batch_chunked_upload(file_list, max_concurrent=2)
146
+ print(f"Successful uploads: {len(batch_results['successful'])}")
147
+ print(f"Failed uploads: {len(batch_results['failed'])}")
148
+ ```
149
+
150
+ ### Upload with Retry Logic
151
+
152
+ ```python
153
+ import time
154
+ from synapse_sdk.clients.exceptions import ClientError
155
+
156
+ def robust_chunked_upload(file_path, max_retries=3, retry_delay=5):
157
+ """Upload with retry logic for improved reliability."""
158
+
159
+ for attempt in range(max_retries):
160
+ try:
161
+ result = client.create_chunked_upload(file_path)
162
+ print(f"Upload successful on attempt {attempt + 1}")
163
+ return result
164
+
165
+ except ClientError as e:
166
+ if e.status_code == 413: # File too large
167
+ print(f"File {file_path} is too large for upload")
168
+ raise
169
+ elif e.status_code == 507: # Insufficient storage
170
+ print("Server storage full")
171
+ raise
172
+ elif e.status_code >= 500: # Server error
173
+ if attempt < max_retries - 1:
174
+ print(f"Server error on attempt {attempt + 1}, retrying in {retry_delay} seconds...")
175
+ time.sleep(retry_delay)
176
+ retry_delay *= 2 # Exponential backoff
177
+ else:
178
+ print(f"Upload failed after {max_retries} attempts")
179
+ raise
180
+ else:
181
+ print(f"Upload failed with error: {e}")
182
+ raise
183
+
184
+ except OSError as e:
185
+ print(f"File system error: {e}")
186
+ raise
187
+
188
+ except Exception as e:
189
+ if attempt < max_retries - 1:
190
+ print(f"Unexpected error on attempt {attempt + 1}: {e}")
191
+ time.sleep(retry_delay)
192
+ else:
193
+ print(f"Upload failed after {max_retries} attempts with error: {e}")
194
+ raise
195
+
196
+ # Use robust upload
197
+ try:
198
+ result = robust_chunked_upload('/path/to/file.zip')
199
+ print(f"File uploaded successfully: {result['id']}")
200
+ except Exception as e:
201
+ print(f"Final upload failure: {e}")
202
+ ```
203
+
204
+ ### Upload Progress Monitoring
205
+
206
+ ```python
207
+ import os
208
+ from tqdm import tqdm
209
+
210
+ class ProgressTracker:
211
+ """Simple progress tracker for file uploads."""
212
+
213
+ def __init__(self, total_size):
214
+ self.total_size = total_size
215
+ self.uploaded_size = 0
216
+ self.progress_bar = tqdm(total=total_size, unit='B', unit_scale=True, desc="Uploading")
217
+
218
+ def update(self, chunk_size):
219
+ self.uploaded_size += chunk_size
220
+ self.progress_bar.update(chunk_size)
221
+
222
+ if self.uploaded_size >= self.total_size:
223
+ self.progress_bar.close()
224
+
225
+ def get_progress_percentage(self):
226
+ return (self.uploaded_size / self.total_size) * 100 if self.total_size > 0 else 0
227
+
228
+ def upload_with_progress_bar(file_path):
229
+ """Upload file with visual progress bar."""
230
+
231
+ file_path = Path(file_path)
232
+ file_size = os.path.getsize(file_path)
233
+
234
+ # Create progress tracker
235
+ tracker = ProgressTracker(file_size)
236
+
237
+ try:
238
+ # Note: The actual chunked upload doesn't expose chunk-level progress
239
+ # This is a conceptual example of how you might track progress
240
+ print(f"Starting upload of {file_path.name} ({file_size / (1024*1024):.2f} MB)")
241
+
242
+ result = client.create_chunked_upload(file_path)
243
+
244
+ # Simulate progress completion
245
+ tracker.update(file_size)
246
+ print(f"Upload completed: {result['id']}")
247
+
248
+ return result
249
+
250
+ except Exception as e:
251
+ tracker.progress_bar.close()
252
+ print(f"Upload failed: {e}")
253
+ raise
254
+
255
+ # Usage
256
+ upload_result = upload_with_progress_bar('/path/to/large_file.zip')
257
+ ```
258
+
259
+ ## File Validation
260
+
261
+ ### Pre-Upload Validation
262
+
263
+ ```python
264
+ def validate_file_for_upload(file_path, max_size_gb=10):
265
+ """Validate file before attempting upload."""
266
+
267
+ file_path = Path(file_path)
268
+
269
+ # Check if file exists
270
+ if not file_path.exists():
271
+ raise FileNotFoundError(f"File not found: {file_path}")
272
+
273
+ # Check if it's a file (not directory)
274
+ if not file_path.is_file():
275
+ raise ValueError(f"Path is not a file: {file_path}")
276
+
277
+ # Check file size
278
+ file_size = os.path.getsize(file_path)
279
+ max_size_bytes = max_size_gb * 1024 * 1024 * 1024
280
+
281
+ if file_size > max_size_bytes:
282
+ raise ValueError(f"File too large: {file_size / (1024**3):.2f} GB (max: {max_size_gb} GB)")
283
+
284
+ # Check file permissions
285
+ if not os.access(file_path, os.R_OK):
286
+ raise PermissionError(f"Cannot read file: {file_path}")
287
+
288
+ # Basic file integrity check
289
+ try:
290
+ with open(file_path, 'rb') as f:
291
+ f.read(1024) # Try to read first 1KB
292
+ except Exception as e:
293
+ raise ValueError(f"File appears to be corrupted: {e}")
294
+
295
+ return {
296
+ 'valid': True,
297
+ 'file_size': file_size,
298
+ 'file_path': str(file_path)
299
+ }
300
+
301
+ def safe_chunked_upload(file_path):
302
+ """Upload with pre-validation."""
303
+
304
+ try:
305
+ # Validate file first
306
+ validation = validate_file_for_upload(file_path)
307
+ print(f"File validation passed: {validation['file_size'] / (1024*1024):.2f} MB")
308
+
309
+ # Proceed with upload
310
+ result = client.create_chunked_upload(file_path)
311
+ print(f"Upload successful: {result['id']}")
312
+
313
+ return result
314
+
315
+ except (FileNotFoundError, ValueError, PermissionError) as e:
316
+ print(f"Validation failed: {e}")
317
+ return None
318
+ except Exception as e:
319
+ print(f"Upload failed: {e}")
320
+ return None
321
+
322
+ # Usage
323
+ upload_result = safe_chunked_upload('/path/to/file.zip')
324
+ ```
325
+
326
+ ## Performance Optimization
327
+
328
+ ### Optimized Upload Strategy
329
+
330
+ ```python
331
+ def optimized_upload_strategy(file_path):
332
+ """Choose optimal upload strategy based on file characteristics."""
333
+
334
+ file_path = Path(file_path)
335
+ file_size = os.path.getsize(file_path)
336
+
337
+ # Thresholds (in bytes)
338
+ SMALL_FILE_THRESHOLD = 10 * 1024 * 1024 # 10MB
339
+ LARGE_FILE_THRESHOLD = 100 * 1024 * 1024 # 100MB
340
+
341
+ if file_size < SMALL_FILE_THRESHOLD:
342
+ print(f"Small file ({file_size / (1024*1024):.2f} MB) - using regular upload")
343
+ # For small files, you might use a different upload method
344
+ # This is conceptual as the CoreClientMixin only provides chunked upload
345
+ return client.create_chunked_upload(file_path)
346
+
347
+ elif file_size < LARGE_FILE_THRESHOLD:
348
+ print(f"Medium file ({file_size / (1024*1024):.2f} MB) - using chunked upload")
349
+ return client.create_chunked_upload(file_path)
350
+
351
+ else:
352
+ print(f"Large file ({file_size / (1024*1024):.2f} MB) - using optimized chunked upload")
353
+ # For very large files, you might want additional optimizations
354
+ return robust_chunked_upload(file_path, max_retries=5)
355
+
356
+ # Usage
357
+ result = optimized_upload_strategy('/path/to/any_size_file.zip')
358
+ ```
359
+
360
+ ## Integration with Other Operations
361
+
362
+ ### Upload and Process Workflow
363
+
364
+ ```python
365
+ def upload_and_process_workflow(file_path, collection_id):
366
+ """Complete workflow: upload file and create data unit."""
367
+
368
+ try:
369
+ # Step 1: Upload file using chunked upload
370
+ print("Step 1: Uploading file...")
371
+ upload_result = client.create_chunked_upload(file_path)
372
+ file_id = upload_result['id']
373
+ print(f"File uploaded successfully: {file_id}")
374
+
375
+ # Step 2: Create data file entry
376
+ print("Step 2: Creating data file entry...")
377
+ data_file = client.create_data_file(Path(file_path))
378
+ print(f"Data file created: {data_file}")
379
+
380
+ # Step 3: Organize for collection
381
+ print("Step 3: Organizing for collection...")
382
+ organized_file = {
383
+ 'files': {'primary': Path(file_path)},
384
+ 'meta': {
385
+ 'origin_file_stem': Path(file_path).stem,
386
+ 'origin_file_extension': Path(file_path).suffix,
387
+ 'uploaded_file_id': file_id
388
+ }
389
+ }
390
+
391
+ # Step 4: Upload to collection
392
+ collection_result = client.upload_data_file(
393
+ organized_file,
394
+ collection_id
395
+ )
396
+ print(f"Added to collection: {collection_result}")
397
+
398
+ # Step 5: Create data unit
399
+ data_units = client.create_data_units([collection_result])
400
+ print(f"Data unit created: {data_units[0]['id']}")
401
+
402
+ return {
403
+ 'file_id': file_id,
404
+ 'data_file': data_file,
405
+ 'collection_result': collection_result,
406
+ 'data_unit': data_units[0]
407
+ }
408
+
409
+ except Exception as e:
410
+ print(f"Workflow failed: {e}")
411
+ raise
412
+
413
+ # Complete workflow
414
+ workflow_result = upload_and_process_workflow(
415
+ '/path/to/data.zip',
416
+ collection_id=123
417
+ )
418
+ ```
419
+
420
+ ## Error Handling
421
+
422
+ ```python
423
+ from synapse_sdk.clients.exceptions import ClientError
424
+
425
+ def handle_upload_errors():
426
+ """Comprehensive error handling for uploads."""
427
+
428
+ try:
429
+ result = client.create_chunked_upload('/path/to/file.zip')
430
+ return result
431
+
432
+ except FileNotFoundError:
433
+ print("Error: File not found")
434
+ return None
435
+
436
+ except PermissionError:
437
+ print("Error: Permission denied - check file permissions")
438
+ return None
439
+
440
+ except ClientError as e:
441
+ if e.status_code == 413:
442
+ print("Error: File too large for upload")
443
+ elif e.status_code == 507:
444
+ print("Error: Server storage full")
445
+ elif e.status_code == 429:
446
+ print("Error: Rate limited - too many requests")
447
+ elif e.status_code >= 500:
448
+ print(f"Error: Server error ({e.status_code})")
449
+ else:
450
+ print(f"Error: Client error ({e.status_code}): {e}")
451
+ return None
452
+
453
+ except OSError as e:
454
+ print(f"Error: Operating system error: {e}")
455
+ return None
456
+
457
+ except MemoryError:
458
+ print("Error: Insufficient memory for upload")
459
+ return None
460
+
461
+ except Exception as e:
462
+ print(f"Error: Unexpected error: {e}")
463
+ return None
464
+
465
+ # Use error handling
466
+ upload_result = handle_upload_errors()
467
+ if upload_result:
468
+ print(f"Upload successful: {upload_result['id']}")
469
+ else:
470
+ print("Upload failed")
471
+ ```
472
+
473
+ ## See Also
474
+
475
+ - [BackendClient](./backend.md) - Main backend client
476
+ - [DataCollectionClientMixin](./data-collection-mixin.md) - Data collection operations that use chunked upload
477
+ - [MLClientMixin](./ml-mixin.md) - ML model uploads that use chunked upload