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,578 @@
1
+ ---
2
+ id: ml-mixin
3
+ title: MLClientMixin
4
+ sidebar_position: 5
5
+ ---
6
+
7
+ # MLClientMixin
8
+
9
+ Provides machine learning model management and ground truth operations for the Synapse backend.
10
+
11
+ ## Overview
12
+
13
+ The `MLClientMixin` handles all operations related to machine learning models, ground truth datasets, and model evaluation workflows. This mixin is automatically included in the `BackendClient` and provides methods for ML pipeline integration.
14
+
15
+ ## Model Management
16
+
17
+ ### `list_models(params=None)`
18
+
19
+ List available machine learning models with filtering options.
20
+
21
+ ```python
22
+ # List all models
23
+ models = client.list_models()
24
+ for model in models[0]:
25
+ print(f"Model: {model['name']} (ID: {model['id']})")
26
+
27
+ # List models for a specific project
28
+ project_models = client.list_models(params={'project': 123})
29
+
30
+ # List models by type
31
+ classification_models = client.list_models(params={'model_type': 'classification'})
32
+
33
+ # List active models only
34
+ active_models = client.list_models(params={'is_active': True})
35
+ ```
36
+
37
+ **Parameters:**
38
+
39
+ - `params` (dict, optional): Filtering parameters
40
+
41
+ **Common filtering params:**
42
+
43
+ - `project`: Filter by project ID
44
+ - `model_type`: Filter by model type (`classification`, `detection`, `segmentation`)
45
+ - `is_active`: Filter by model status
46
+ - `created_after`: Filter by creation date
47
+ - `search`: Text search in model names and descriptions
48
+
49
+ **Returns:**
50
+
51
+ - `tuple`: (models_list, total_count)
52
+
53
+ ### `get_model(pk, params=None, url_conversion=None)`
54
+
55
+ Get detailed information about a specific model.
56
+
57
+ ```python
58
+ # Get basic model info
59
+ model = client.get_model(456)
60
+ print(f"Model: {model['name']}")
61
+ print(f"Type: {model['model_type']}")
62
+ print(f"Accuracy: {model['metrics']['accuracy']}")
63
+
64
+ # Get model with expanded metrics
65
+ model = client.get_model(456, params={'expand': 'metrics'})
66
+
67
+ # Get model with custom URL conversion for files
68
+ model = client.get_model(
69
+ 456,
70
+ url_conversion={'file': lambda url: f"https://cdn.example.com{url}"}
71
+ )
72
+ ```
73
+
74
+ **Parameters:**
75
+
76
+ - `pk` (int): Model ID
77
+ - `params` (dict, optional): Query parameters
78
+ - `url_conversion` (dict, optional): Custom URL conversion for file fields
79
+
80
+ **Common params:**
81
+
82
+ - `expand`: Include additional data (`metrics`, `evaluations`, `versions`)
83
+ - `include_file`: Whether to include model file information
84
+
85
+ **Returns:**
86
+
87
+ - `dict`: Complete model information including metadata and metrics
88
+
89
+ **Model structure:**
90
+
91
+ - `id`: Model ID
92
+ - `name`: Model name
93
+ - `description`: Model description
94
+ - `model_type`: Type of model
95
+ - `file`: Model file reference
96
+ - `metrics`: Performance metrics
97
+ - `project`: Associated project ID
98
+ - `is_active`: Whether model is currently active
99
+ - `created_at`: Creation timestamp
100
+
101
+ ### `create_model(data)`
102
+
103
+ Create a new machine learning model with file upload.
104
+
105
+ ```python
106
+ # Create model with file upload
107
+ model_data = {
108
+ 'name': 'Object Detection Model v2',
109
+ 'description': 'Improved object detection with better accuracy',
110
+ 'model_type': 'detection',
111
+ 'project': 123,
112
+ 'metrics': {
113
+ 'accuracy': 0.92,
114
+ 'precision': 0.89,
115
+ 'recall': 0.94,
116
+ 'f1_score': 0.91
117
+ },
118
+ 'configuration': {
119
+ 'input_size': [640, 640],
120
+ 'num_classes': 10,
121
+ 'framework': 'pytorch'
122
+ },
123
+ 'file': '/path/to/model.pkl' # Will be uploaded via chunked upload
124
+ }
125
+
126
+ new_model = client.create_model(model_data)
127
+ print(f"Created model with ID: {new_model['id']}")
128
+ ```
129
+
130
+ **Parameters:**
131
+
132
+ - `data` (dict): Model configuration and metadata
133
+
134
+ **Model data structure:**
135
+
136
+ - `name` (str, required): Model name
137
+ - `description` (str): Model description
138
+ - `model_type` (str, required): Model type
139
+ - `project` (int, required): Project ID
140
+ - `file` (str, required): Path to model file
141
+ - `metrics` (dict): Performance metrics
142
+ - `configuration` (dict): Model configuration
143
+ - `is_active` (bool): Whether model should be active
144
+
145
+ **Returns:**
146
+
147
+ - `dict`: Created model with generated ID
148
+
149
+ **Note:** The model file is automatically uploaded using chunked upload for optimal performance.
150
+
151
+ ## Ground Truth Operations
152
+
153
+ ### `list_ground_truth_events(params=None, url_conversion=None, list_all=False)`
154
+
155
+ List ground truth events with comprehensive filtering options.
156
+
157
+ ```python
158
+ # List ground truth events for a dataset version
159
+ events = client.list_ground_truth_events(params={
160
+ 'ground_truth_dataset_versions': [123]
161
+ })
162
+
163
+ # List all events (handles pagination automatically)
164
+ all_events = client.list_ground_truth_events(list_all=True)
165
+
166
+ # List events with date filtering
167
+ from datetime import datetime, timedelta
168
+ recent_date = (datetime.now() - timedelta(days=30)).isoformat()
169
+ recent_events = client.list_ground_truth_events(params={
170
+ 'created_after': recent_date,
171
+ 'ground_truth_dataset_versions': [123]
172
+ })
173
+
174
+ # List events with custom URL conversion
175
+ events = client.list_ground_truth_events(
176
+ params={'ground_truth_dataset_versions': [123]},
177
+ url_conversion={'files': lambda url: f"https://cdn.example.com{url}"}
178
+ )
179
+ ```
180
+
181
+ **Parameters:**
182
+
183
+ - `params` (dict, optional): Filtering parameters
184
+ - `url_conversion` (dict, optional): Custom URL conversion for file fields
185
+ - `list_all` (bool): If True, automatically handles pagination
186
+
187
+ **Common filtering params:**
188
+
189
+ - `ground_truth_dataset_versions`: List of dataset version IDs
190
+ - `project`: Filter by project ID
191
+ - `created_after`: Filter by creation date
192
+ - `data_type`: Filter by data type
193
+ - `search`: Text search in event data
194
+
195
+ **Returns:**
196
+
197
+ - `tuple`: (events_list, total_count) if `list_all=False`
198
+ - `list`: All events if `list_all=True`
199
+
200
+ **Ground truth event structure:**
201
+
202
+ - `id`: Event ID
203
+ - `data`: Annotation/ground truth data
204
+ - `data_unit`: Associated data unit information
205
+ - `ground_truth_dataset_version`: Dataset version ID
206
+ - `created_at`: Creation timestamp
207
+ - `metadata`: Additional event metadata
208
+
209
+ ### `get_ground_truth_version(pk)`
210
+
211
+ Get detailed information about a ground truth dataset version.
212
+
213
+ ```python
214
+ version = client.get_ground_truth_version(123)
215
+ print(f"Dataset version: {version['version']}")
216
+ print(f"Dataset: {version['ground_truth_dataset']['name']}")
217
+ print(f"Total events: {version['event_count']}")
218
+ print(f"Created: {version['created_at']}")
219
+ ```
220
+
221
+ **Parameters:**
222
+
223
+ - `pk` (int): Ground truth dataset version ID
224
+
225
+ **Returns:**
226
+
227
+ - `dict`: Complete dataset version information
228
+
229
+ **Dataset version structure:**
230
+
231
+ - `id`: Version ID
232
+ - `version`: Version number/name
233
+ - `ground_truth_dataset`: Parent dataset information
234
+ - `event_count`: Number of events in this version
235
+ - `description`: Version description
236
+ - `is_active`: Whether version is currently active
237
+ - `created_at`: Creation timestamp
238
+ - `statistics`: Version statistics and metrics
239
+
240
+ ## Model Evaluation Workflows
241
+
242
+ ### Model Performance Analysis
243
+
244
+ ```python
245
+ def analyze_model_performance(model_id, ground_truth_version_id):
246
+ """Analyze model performance against ground truth data."""
247
+
248
+ # Get model details
249
+ model = client.get_model(model_id, params={'expand': 'metrics'})
250
+ print(f"Analyzing model: {model['name']}")
251
+
252
+ # Get ground truth data
253
+ gt_events = client.list_ground_truth_events(
254
+ params={'ground_truth_dataset_versions': [ground_truth_version_id]},
255
+ list_all=True
256
+ )
257
+
258
+ print(f"Ground truth events: {len(gt_events)}")
259
+
260
+ # Extract metrics
261
+ model_metrics = model.get('metrics', {})
262
+ print("Model Metrics:")
263
+ for metric, value in model_metrics.items():
264
+ print(f" {metric}: {value}")
265
+
266
+ # Analyze ground truth distribution
267
+ data_types = {}
268
+ for event in gt_events:
269
+ data_type = event['data'].get('type', 'unknown')
270
+ data_types[data_type] = data_types.get(data_type, 0) + 1
271
+
272
+ print("Ground Truth Distribution:")
273
+ for data_type, count in data_types.items():
274
+ print(f" {data_type}: {count}")
275
+
276
+ return {
277
+ 'model': model,
278
+ 'ground_truth_stats': data_types,
279
+ 'total_gt_events': len(gt_events)
280
+ }
281
+
282
+ # Usage
283
+ analysis = analyze_model_performance(456, 123)
284
+ ```
285
+
286
+ ### Model Comparison
287
+
288
+ ```python
289
+ def compare_models(model_ids, metric='accuracy'):
290
+ """Compare multiple models by a specific metric."""
291
+ models = []
292
+
293
+ for model_id in model_ids:
294
+ model = client.get_model(model_id, params={'expand': 'metrics'})
295
+ models.append(model)
296
+
297
+ # Sort by metric
298
+ sorted_models = sorted(
299
+ models,
300
+ key=lambda m: m.get('metrics', {}).get(metric, 0),
301
+ reverse=True
302
+ )
303
+
304
+ print(f"Models ranked by {metric}:")
305
+ for i, model in enumerate(sorted_models, 1):
306
+ metric_value = model.get('metrics', {}).get(metric, 'N/A')
307
+ print(f"{i}. {model['name']}: {metric_value}")
308
+
309
+ return sorted_models
310
+
311
+ # Compare models by accuracy
312
+ model_ranking = compare_models([456, 457, 458], metric='accuracy')
313
+ ```
314
+
315
+ ### Ground Truth Data Export
316
+
317
+ ```python
318
+ def export_ground_truth_data(dataset_version_id, output_format='coco'):
319
+ """Export ground truth data in specified format."""
320
+
321
+ # Get dataset version info
322
+ version = client.get_ground_truth_version(dataset_version_id)
323
+ print(f"Exporting dataset: {version['ground_truth_dataset']['name']}")
324
+
325
+ # Get all events
326
+ events = client.list_ground_truth_events(
327
+ params={'ground_truth_dataset_versions': [dataset_version_id]},
328
+ list_all=True
329
+ )
330
+
331
+ if output_format == 'coco':
332
+ # Convert to COCO format
333
+ coco_data = {
334
+ 'info': {
335
+ 'description': version['description'],
336
+ 'version': version['version'],
337
+ 'year': 2023,
338
+ 'contributor': 'Synapse SDK'
339
+ },
340
+ 'images': [],
341
+ 'annotations': [],
342
+ 'categories': []
343
+ }
344
+
345
+ # Process events
346
+ for event in events:
347
+ # Extract image info from data_unit
348
+ data_unit = event['data_unit']
349
+ files = data_unit.get('files', {})
350
+
351
+ # Add image
352
+ if 'image' in files:
353
+ image_info = {
354
+ 'id': data_unit['id'],
355
+ 'file_name': files['image'].get('name', ''),
356
+ 'width': files['image'].get('width', 0),
357
+ 'height': files['image'].get('height', 0)
358
+ }
359
+ coco_data['images'].append(image_info)
360
+
361
+ # Add annotations
362
+ annotations = event['data'].get('annotations', [])
363
+ for ann in annotations:
364
+ annotation = {
365
+ 'id': len(coco_data['annotations']),
366
+ 'image_id': data_unit['id'],
367
+ 'category_id': ann.get('category_id', 1),
368
+ 'bbox': ann.get('bbox', []),
369
+ 'area': ann.get('area', 0),
370
+ 'iscrowd': ann.get('iscrowd', 0)
371
+ }
372
+ coco_data['annotations'].append(annotation)
373
+
374
+ return coco_data
375
+
376
+ else:
377
+ # Return raw format
378
+ return events
379
+
380
+ # Export as COCO format
381
+ coco_data = export_ground_truth_data(123, 'coco')
382
+ print(f"Exported {len(coco_data['images'])} images and {len(coco_data['annotations'])} annotations")
383
+ ```
384
+
385
+ ## Model Training Integration
386
+
387
+ ### Training Data Preparation
388
+
389
+ ```python
390
+ def prepare_training_data(project_id, split_ratio=0.8):
391
+ """Prepare training and validation data from ground truth."""
392
+
393
+ # Get all ground truth events for project
394
+ events = client.list_ground_truth_events(
395
+ params={'project': project_id},
396
+ list_all=True
397
+ )
398
+
399
+ # Split data
400
+ import random
401
+ random.shuffle(events)
402
+ split_point = int(len(events) * split_ratio)
403
+
404
+ train_events = events[:split_point]
405
+ val_events = events[split_point:]
406
+
407
+ print(f"Training samples: {len(train_events)}")
408
+ print(f"Validation samples: {len(val_events)}")
409
+
410
+ return {
411
+ 'train': train_events,
412
+ 'validation': val_events,
413
+ 'total': len(events)
414
+ }
415
+
416
+ # Prepare data
417
+ data_split = prepare_training_data(123, split_ratio=0.8)
418
+ ```
419
+
420
+ ### Model Deployment
421
+
422
+ ```python
423
+ def deploy_model(model_path, model_config):
424
+ """Deploy a trained model to the system."""
425
+
426
+ # Create model entry
427
+ model_data = {
428
+ 'name': model_config['name'],
429
+ 'description': model_config['description'],
430
+ 'model_type': model_config['type'],
431
+ 'project': model_config['project_id'],
432
+ 'file': model_path,
433
+ 'metrics': model_config.get('metrics', {}),
434
+ 'configuration': model_config.get('configuration', {}),
435
+ 'is_active': True
436
+ }
437
+
438
+ # Upload and create model
439
+ model = client.create_model(model_data)
440
+ print(f"Deployed model: {model['id']}")
441
+
442
+ # Deactivate previous models if requested
443
+ if model_config.get('replace_active', False):
444
+ existing_models = client.list_models(params={
445
+ 'project': model_config['project_id'],
446
+ 'is_active': True
447
+ })
448
+
449
+ for existing_model in existing_models[0]:
450
+ if existing_model['id'] != model['id']:
451
+ # Note: You'd need an update_model method for this
452
+ print(f"Would deactivate model: {existing_model['id']}")
453
+
454
+ return model
455
+
456
+ # Deploy model
457
+ deployment_config = {
458
+ 'name': 'Production Object Detector v3',
459
+ 'description': 'Latest object detection model for production',
460
+ 'type': 'detection',
461
+ 'project_id': 123,
462
+ 'metrics': {'accuracy': 0.94, 'mAP': 0.87},
463
+ 'configuration': {'input_size': [640, 640], 'confidence_threshold': 0.5},
464
+ 'replace_active': True
465
+ }
466
+
467
+ deployed_model = deploy_model('/path/to/trained_model.pkl', deployment_config)
468
+ ```
469
+
470
+ ## Complete ML Workflow
471
+
472
+ ```python
473
+ def complete_ml_workflow(project_id):
474
+ """Complete machine learning workflow from data to deployed model."""
475
+
476
+ client = BackendClient(
477
+ base_url="https://api.synapse.sh",
478
+ api_token="your-token"
479
+ )
480
+
481
+ print("=== ML Workflow Started ===")
482
+
483
+ # 1. Analyze available ground truth data
484
+ print("1. Analyzing ground truth data...")
485
+ events = client.list_ground_truth_events(
486
+ params={'project': project_id},
487
+ list_all=True
488
+ )
489
+ print(f"Found {len(events)} ground truth events")
490
+
491
+ # 2. Get existing models for comparison
492
+ print("2. Checking existing models...")
493
+ existing_models = client.list_models(params={'project': project_id})
494
+ print(f"Found {len(existing_models[0])} existing models")
495
+
496
+ # 3. Create and deploy new model (simulated)
497
+ print("3. Deploying new model...")
498
+ model_data = {
499
+ 'name': f'Auto-Generated Model for Project {project_id}',
500
+ 'description': 'Model created through automated workflow',
501
+ 'model_type': 'classification',
502
+ 'project': project_id,
503
+ 'file': '/path/to/new_model.pkl', # In real scenario, this would be actual trained model
504
+ 'metrics': {
505
+ 'accuracy': 0.93,
506
+ 'precision': 0.91,
507
+ 'recall': 0.95,
508
+ 'f1_score': 0.93
509
+ },
510
+ 'configuration': {
511
+ 'framework': 'pytorch',
512
+ 'input_size': [224, 224],
513
+ 'num_classes': 10
514
+ }
515
+ }
516
+
517
+ new_model = client.create_model(model_data)
518
+ print(f"Deployed model: {new_model['id']}")
519
+
520
+ # 4. Compare with existing models
521
+ print("4. Comparing model performance...")
522
+ all_models = existing_models[0] + [new_model]
523
+ best_model = max(all_models, key=lambda m: m.get('metrics', {}).get('accuracy', 0))
524
+ print(f"Best model: {best_model['name']} (Accuracy: {best_model['metrics']['accuracy']})")
525
+
526
+ print("=== ML Workflow Completed ===")
527
+ return new_model
528
+
529
+ # Run workflow
530
+ if __name__ == "__main__":
531
+ result = complete_ml_workflow(123)
532
+ ```
533
+
534
+ ## Error Handling
535
+
536
+ ```python
537
+ from synapse_sdk.clients.exceptions import ClientError
538
+
539
+ def robust_model_operations():
540
+ """Example of robust model operations with error handling."""
541
+
542
+ try:
543
+ # Try to get model
544
+ model = client.get_model(999)
545
+ except ClientError as e:
546
+ if e.status_code == 404:
547
+ print("Model not found")
548
+ return None
549
+ else:
550
+ print(f"Error getting model: {e}")
551
+ raise
552
+
553
+ try:
554
+ # Try to create model
555
+ model_data = {
556
+ 'name': 'Test Model',
557
+ 'model_type': 'classification',
558
+ 'project': 123,
559
+ 'file': '/path/to/model.pkl'
560
+ }
561
+ new_model = client.create_model(model_data)
562
+ except ClientError as e:
563
+ if e.status_code == 400:
564
+ print(f"Invalid model data: {e.response}")
565
+ elif e.status_code == 413:
566
+ print("Model file too large")
567
+ else:
568
+ print(f"Error creating model: {e}")
569
+ return None
570
+
571
+ return new_model
572
+ ```
573
+
574
+ ## See Also
575
+
576
+ - [BackendClient](./backend.md) - Main backend client
577
+ - [DataCollectionClientMixin](./data-collection-mixin.md) - Data management operations
578
+ - [IntegrationClientMixin](./integration-mixin.md) - Plugin and job management