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,554 @@
1
+ ---
2
+ id: hitl-mixin
3
+ title: HITLClientMixin
4
+ sidebar_position: 6
5
+ ---
6
+
7
+ # HITLClientMixin
8
+
9
+ Provides Human-in-the-Loop (HITL) assignment management operations for the Synapse backend.
10
+
11
+ ## Overview
12
+
13
+ The `HITLClientMixin` handles all operations related to human-in-the-loop workflows, including assignment management and tagging. This mixin is automatically included in the `BackendClient` and provides methods for managing human annotation and review workflows.
14
+
15
+ ## Assignment Operations
16
+
17
+ ### `get_assignment(pk)`
18
+
19
+ Retrieve detailed information about a specific assignment.
20
+
21
+ ```python
22
+ assignment = client.get_assignment(789)
23
+ print(f"Assignment: {assignment['id']}")
24
+ print(f"Project: {assignment['project']}")
25
+ print(f"Status: {assignment['status']}")
26
+ print(f"Assignee: {assignment['assignee']}")
27
+ print(f"Data: {assignment['data']}")
28
+ ```
29
+
30
+ **Parameters:**
31
+
32
+ - `pk` (int): Assignment ID
33
+
34
+ **Returns:**
35
+
36
+ - `dict`: Complete assignment information
37
+
38
+ **Assignment structure:**
39
+
40
+ - `id`: Assignment ID
41
+ - `project`: Associated project ID
42
+ - `status`: Assignment status (`pending`, `in_progress`, `completed`, `rejected`)
43
+ - `assignee`: User ID of assigned reviewer
44
+ - `data`: Assignment data and annotations
45
+ - `file`: Associated files
46
+ - `created_at`: Creation timestamp
47
+ - `updated_at`: Last update timestamp
48
+ - `metadata`: Additional assignment metadata
49
+
50
+ ### `list_assignments(params=None, url_conversion=None, list_all=False)`
51
+
52
+ List assignments with comprehensive filtering and pagination support.
53
+
54
+ ```python
55
+ # List assignments for a specific project
56
+ assignments = client.list_assignments(params={'project': 123})
57
+
58
+ # List assignments by status
59
+ pending_assignments = client.list_assignments(params={
60
+ 'project': 123,
61
+ 'status': 'pending'
62
+ })
63
+
64
+ # List assignments for specific assignee
65
+ user_assignments = client.list_assignments(params={
66
+ 'assignee': 456
67
+ })
68
+
69
+ # Get all assignments (handles pagination automatically)
70
+ all_assignments = client.list_assignments(list_all=True)
71
+
72
+ # List assignments with custom URL conversion for files
73
+ assignments = client.list_assignments(
74
+ params={'project': 123},
75
+ url_conversion={'files': lambda url: f"https://cdn.example.com{url}"}
76
+ )
77
+ ```
78
+
79
+ **Parameters:**
80
+
81
+ - `params` (dict, optional): Filtering parameters
82
+ - `url_conversion` (dict, optional): Custom URL conversion for file fields
83
+ - `list_all` (bool): If True, automatically handles pagination
84
+
85
+ **Common filtering params:**
86
+
87
+ - `project`: Filter by project ID
88
+ - `status`: Filter by assignment status
89
+ - `assignee`: Filter by assigned user ID
90
+ - `created_after`: Filter by creation date
91
+ - `updated_after`: Filter by last update date
92
+ - `priority`: Filter by assignment priority
93
+ - `search`: Text search in assignment content
94
+
95
+ **Returns:**
96
+
97
+ - `tuple`: (assignments_list, total_count) if `list_all=False`
98
+ - `list`: All assignments if `list_all=True`
99
+
100
+ ### `set_tags_assignments(data, params=None)`
101
+
102
+ Set tags for multiple assignments in batch operations.
103
+
104
+ ```python
105
+ # Set tags for multiple assignments
106
+ client.set_tags_assignments({
107
+ 'assignment_ids': [789, 790, 791],
108
+ 'tag_ids': [1, 2, 3] # Tag IDs to apply
109
+ })
110
+
111
+ # Set tags with replacement option
112
+ client.set_tags_assignments(
113
+ {
114
+ 'assignment_ids': [789, 790],
115
+ 'tag_ids': [1, 2]
116
+ },
117
+ params={'replace': True} # Replace existing tags
118
+ )
119
+
120
+ # Set priority tags
121
+ client.set_tags_assignments({
122
+ 'assignment_ids': [789],
123
+ 'tag_ids': [5] # High priority tag
124
+ })
125
+ ```
126
+
127
+ **Parameters:**
128
+
129
+ - `data` (dict): Batch tagging data
130
+ - `params` (dict, optional): Additional parameters
131
+
132
+ **Data structure:**
133
+
134
+ - `assignment_ids` (list): List of assignment IDs to tag
135
+ - `tag_ids` (list): List of tag IDs to apply
136
+
137
+ **Optional params:**
138
+
139
+ - `replace` (bool): If True, replace existing tags; if False, add to existing
140
+ - `notify` (bool): If True, notify assignees of tag changes
141
+
142
+ **Returns:**
143
+
144
+ - `dict`: Tagging operation result
145
+
146
+ ## HITL Workflow Examples
147
+
148
+ ### Assignment Queue Management
149
+
150
+ ```python
151
+ def manage_assignment_queue(project_id, max_assignments_per_user=10):
152
+ """Manage assignment distribution and queue."""
153
+
154
+ # Get pending assignments
155
+ pending = client.list_assignments(params={
156
+ 'project': project_id,
157
+ 'status': 'pending'
158
+ })
159
+
160
+ # Get active assignments by user
161
+ active = client.list_assignments(params={
162
+ 'project': project_id,
163
+ 'status': 'in_progress'
164
+ })
165
+
166
+ # Count assignments per user
167
+ user_workload = {}
168
+ for assignment in active[0]:
169
+ user_id = assignment['assignee']
170
+ user_workload[user_id] = user_workload.get(user_id, 0) + 1
171
+
172
+ print(f"Pending assignments: {len(pending[0])}")
173
+ print("User workload:")
174
+ for user_id, count in user_workload.items():
175
+ print(f" User {user_id}: {count} assignments")
176
+
177
+ # Find users with capacity
178
+ available_users = [
179
+ user_id for user_id, count in user_workload.items()
180
+ if count < max_assignments_per_user
181
+ ]
182
+
183
+ return {
184
+ 'pending_count': len(pending[0]),
185
+ 'user_workload': user_workload,
186
+ 'available_users': available_users
187
+ }
188
+
189
+ # Monitor queue
190
+ queue_status = manage_assignment_queue(123)
191
+ ```
192
+
193
+ ### Quality Control Workflow
194
+
195
+ ```python
196
+ def quality_control_workflow(project_id):
197
+ """Implement quality control for completed assignments."""
198
+
199
+ # Get completed assignments
200
+ completed = client.list_assignments(params={
201
+ 'project': project_id,
202
+ 'status': 'completed'
203
+ })
204
+
205
+ quality_results = []
206
+
207
+ for assignment in completed[0]:
208
+ assignment_id = assignment['id']
209
+
210
+ # Get detailed assignment data
211
+ detailed = client.get_assignment(assignment_id)
212
+
213
+ # Perform quality checks (custom logic)
214
+ quality_score = calculate_quality_score(detailed)
215
+
216
+ if quality_score >= 0.9:
217
+ # High quality - approve
218
+ tag_name = 'approved'
219
+ tag_id = get_tag_id(tag_name) # Custom function
220
+
221
+ client.set_tags_assignments({
222
+ 'assignment_ids': [assignment_id],
223
+ 'tag_ids': [tag_id]
224
+ })
225
+
226
+ elif quality_score >= 0.7:
227
+ # Medium quality - needs review
228
+ tag_name = 'needs_review'
229
+ tag_id = get_tag_id(tag_name)
230
+
231
+ client.set_tags_assignments({
232
+ 'assignment_ids': [assignment_id],
233
+ 'tag_ids': [tag_id]
234
+ })
235
+
236
+ else:
237
+ # Low quality - reject
238
+ tag_name = 'rejected'
239
+ tag_id = get_tag_id(tag_name)
240
+
241
+ client.set_tags_assignments({
242
+ 'assignment_ids': [assignment_id],
243
+ 'tag_ids': [tag_id]
244
+ })
245
+
246
+ quality_results.append({
247
+ 'assignment_id': assignment_id,
248
+ 'quality_score': quality_score,
249
+ 'action': tag_name
250
+ })
251
+
252
+ return quality_results
253
+
254
+ def calculate_quality_score(assignment):
255
+ """Calculate quality score for an assignment (custom implementation)."""
256
+ # Implement your quality scoring logic here
257
+ # This could include annotation completeness, consistency, etc.
258
+ import random
259
+ return random.uniform(0.5, 1.0) # Placeholder
260
+
261
+ def get_tag_id(tag_name):
262
+ """Get tag ID by name (custom implementation)."""
263
+ # You might want to cache tag mappings or use a lookup service
264
+ tag_mapping = {
265
+ 'approved': 1,
266
+ 'needs_review': 2,
267
+ 'rejected': 3,
268
+ 'high_priority': 4,
269
+ 'low_priority': 5
270
+ }
271
+ return tag_mapping.get(tag_name, 1)
272
+
273
+ # Run quality control
274
+ quality_results = quality_control_workflow(123)
275
+ print(f"Processed {len(quality_results)} assignments")
276
+ ```
277
+
278
+ ### Assignment Analytics
279
+
280
+ ```python
281
+ def assignment_analytics(project_id, days=30):
282
+ """Generate analytics for assignment performance."""
283
+ from datetime import datetime, timedelta
284
+
285
+ # Calculate date range
286
+ end_date = datetime.now()
287
+ start_date = end_date - timedelta(days=days)
288
+
289
+ # Get assignments in date range
290
+ assignments = client.list_assignments(params={
291
+ 'project': project_id,
292
+ 'created_after': start_date.isoformat()
293
+ }, list_all=True)
294
+
295
+ # Calculate metrics
296
+ analytics = {
297
+ 'total_assignments': len(assignments),
298
+ 'status_breakdown': {},
299
+ 'assignee_performance': {},
300
+ 'completion_rate': 0,
301
+ 'average_time_to_complete': 0
302
+ }
303
+
304
+ completion_times = []
305
+
306
+ for assignment in assignments:
307
+ # Status breakdown
308
+ status = assignment['status']
309
+ analytics['status_breakdown'][status] = \
310
+ analytics['status_breakdown'].get(status, 0) + 1
311
+
312
+ # Assignee performance
313
+ assignee = assignment.get('assignee')
314
+ if assignee:
315
+ if assignee not in analytics['assignee_performance']:
316
+ analytics['assignee_performance'][assignee] = {
317
+ 'total': 0,
318
+ 'completed': 0,
319
+ 'in_progress': 0,
320
+ 'pending': 0
321
+ }
322
+
323
+ analytics['assignee_performance'][assignee]['total'] += 1
324
+ analytics['assignee_performance'][assignee][status] += 1
325
+
326
+ # Calculate completion time
327
+ if status == 'completed':
328
+ created = datetime.fromisoformat(assignment['created_at'].replace('Z', '+00:00'))
329
+ updated = datetime.fromisoformat(assignment['updated_at'].replace('Z', '+00:00'))
330
+ completion_time = (updated - created).total_seconds() / 3600 # hours
331
+ completion_times.append(completion_time)
332
+
333
+ # Calculate rates
334
+ completed_count = analytics['status_breakdown'].get('completed', 0)
335
+ analytics['completion_rate'] = completed_count / analytics['total_assignments'] if analytics['total_assignments'] > 0 else 0
336
+ analytics['average_time_to_complete'] = sum(completion_times) / len(completion_times) if completion_times else 0
337
+
338
+ return analytics
339
+
340
+ # Generate analytics
341
+ analytics = assignment_analytics(123, days=30)
342
+ print(f"Assignment Analytics:")
343
+ print(f" Total assignments: {analytics['total_assignments']}")
344
+ print(f" Completion rate: {analytics['completion_rate']:.2%}")
345
+ print(f" Average completion time: {analytics['average_time_to_complete']:.1f} hours")
346
+ print(f" Status breakdown: {analytics['status_breakdown']}")
347
+ ```
348
+
349
+ ### Batch Assignment Operations
350
+
351
+ ```python
352
+ def batch_assignment_operations(project_id):
353
+ """Perform batch operations on assignments."""
354
+
355
+ # Get assignments that need batch processing
356
+ assignments = client.list_assignments(params={
357
+ 'project': project_id,
358
+ 'status': 'completed'
359
+ }, list_all=True)
360
+
361
+ # Group assignments by assignee for performance review
362
+ assignee_groups = {}
363
+ for assignment in assignments:
364
+ assignee = assignment.get('assignee')
365
+ if assignee:
366
+ if assignee not in assignee_groups:
367
+ assignee_groups[assignee] = []
368
+ assignee_groups[assignee].append(assignment['id'])
369
+
370
+ # Apply performance-based tags
371
+ for assignee, assignment_ids in assignee_groups.items():
372
+ assignment_count = len(assignment_ids)
373
+
374
+ if assignment_count >= 50:
375
+ # High performer
376
+ tag_id = get_tag_id('high_performer')
377
+ elif assignment_count >= 20:
378
+ # Regular performer
379
+ tag_id = get_tag_id('regular_performer')
380
+ else:
381
+ # New contributor
382
+ tag_id = get_tag_id('new_contributor')
383
+
384
+ # Apply tags in batch
385
+ client.set_tags_assignments({
386
+ 'assignment_ids': assignment_ids,
387
+ 'tag_ids': [tag_id]
388
+ })
389
+
390
+ print(f"Tagged {assignment_count} assignments for user {assignee}")
391
+
392
+ return assignee_groups
393
+
394
+ # Run batch operations
395
+ assignee_groups = batch_assignment_operations(123)
396
+ ```
397
+
398
+ ### Assignment Workflow Automation
399
+
400
+ ```python
401
+ def automate_assignment_workflow(project_id):
402
+ """Automate assignment workflow based on rules."""
403
+
404
+ # Get all assignments that need processing
405
+ assignments = client.list_assignments(params={
406
+ 'project': project_id
407
+ }, list_all=True)
408
+
409
+ automation_actions = []
410
+
411
+ for assignment in assignments:
412
+ assignment_id = assignment['id']
413
+ status = assignment['status']
414
+ created_at = datetime.fromisoformat(assignment['created_at'].replace('Z', '+00:00'))
415
+ age_hours = (datetime.now(created_at.tzinfo) - created_at).total_seconds() / 3600
416
+
417
+ actions = []
418
+
419
+ # Rule 1: Mark old pending assignments as urgent
420
+ if status == 'pending' and age_hours > 24:
421
+ urgent_tag_id = get_tag_id('urgent')
422
+ client.set_tags_assignments({
423
+ 'assignment_ids': [assignment_id],
424
+ 'tag_ids': [urgent_tag_id]
425
+ })
426
+ actions.append('marked_urgent')
427
+
428
+ # Rule 2: Escalate very old in-progress assignments
429
+ if status == 'in_progress' and age_hours > 72:
430
+ escalation_tag_id = get_tag_id('escalated')
431
+ client.set_tags_assignments({
432
+ 'assignment_ids': [assignment_id],
433
+ 'tag_ids': [escalation_tag_id]
434
+ })
435
+ actions.append('escalated')
436
+
437
+ # Rule 3: Archive very old completed assignments
438
+ if status == 'completed' and age_hours > 168: # 1 week
439
+ archive_tag_id = get_tag_id('archived')
440
+ client.set_tags_assignments({
441
+ 'assignment_ids': [assignment_id],
442
+ 'tag_ids': [archive_tag_id]
443
+ })
444
+ actions.append('archived')
445
+
446
+ if actions:
447
+ automation_actions.append({
448
+ 'assignment_id': assignment_id,
449
+ 'actions': actions,
450
+ 'age_hours': age_hours
451
+ })
452
+
453
+ return automation_actions
454
+
455
+ # Run automation
456
+ automation_results = automate_assignment_workflow(123)
457
+ print(f"Automated {len(automation_results)} assignments")
458
+ ```
459
+
460
+ ## Error Handling
461
+
462
+ ```python
463
+ from synapse_sdk.clients.exceptions import ClientError
464
+
465
+ def robust_assignment_operations():
466
+ """Example of robust assignment operations with error handling."""
467
+
468
+ try:
469
+ # Try to get assignment
470
+ assignment = client.get_assignment(999)
471
+ except ClientError as e:
472
+ if e.status_code == 404:
473
+ print("Assignment not found")
474
+ return None
475
+ elif e.status_code == 403:
476
+ print("Permission denied - insufficient access rights")
477
+ return None
478
+ else:
479
+ print(f"Error getting assignment: {e}")
480
+ raise
481
+
482
+ try:
483
+ # Try to set tags
484
+ client.set_tags_assignments({
485
+ 'assignment_ids': [999],
486
+ 'tag_ids': [1, 2, 3]
487
+ })
488
+ except ClientError as e:
489
+ if e.status_code == 400:
490
+ print(f"Invalid tagging data: {e.response}")
491
+ elif e.status_code == 404:
492
+ print("Assignment or tags not found")
493
+ else:
494
+ print(f"Error setting tags: {e}")
495
+
496
+ return assignment
497
+
498
+ # Use robust operations
499
+ assignment = robust_assignment_operations()
500
+ ```
501
+
502
+ ## Complete HITL Workflow
503
+
504
+ ```python
505
+ def complete_hitl_workflow(project_id):
506
+ """Complete HITL workflow from assignment creation to quality control."""
507
+
508
+ print("=== HITL Workflow Started ===")
509
+
510
+ # 1. Analyze current assignment status
511
+ print("1. Analyzing assignment status...")
512
+ queue_status = manage_assignment_queue(project_id)
513
+ print(f"Pending assignments: {queue_status['pending_count']}")
514
+
515
+ # 2. Run quality control on completed assignments
516
+ print("2. Running quality control...")
517
+ quality_results = quality_control_workflow(project_id)
518
+ print(f"Quality control processed: {len(quality_results)} assignments")
519
+
520
+ # 3. Generate analytics
521
+ print("3. Generating analytics...")
522
+ analytics = assignment_analytics(project_id)
523
+ print(f"Completion rate: {analytics['completion_rate']:.2%}")
524
+
525
+ # 4. Run automation rules
526
+ print("4. Running automation...")
527
+ automation_results = automate_assignment_workflow(project_id)
528
+ print(f"Automated actions: {len(automation_results)}")
529
+
530
+ # 5. Summary
531
+ print("5. Workflow Summary:")
532
+ print(f" - Total assignments processed: {analytics['total_assignments']}")
533
+ print(f" - Quality control actions: {len(quality_results)}")
534
+ print(f" - Automation actions: {len(automation_results)}")
535
+
536
+ print("=== HITL Workflow Completed ===")
537
+
538
+ return {
539
+ 'queue_status': queue_status,
540
+ 'quality_results': quality_results,
541
+ 'analytics': analytics,
542
+ 'automation_results': automation_results
543
+ }
544
+
545
+ # Run complete workflow
546
+ if __name__ == "__main__":
547
+ workflow_results = complete_hitl_workflow(123)
548
+ ```
549
+
550
+ ## See Also
551
+
552
+ - [BackendClient](./backend.md) - Main backend client
553
+ - [AnnotationClientMixin](./annotation-mixin.md) - Task and annotation management
554
+ - [IntegrationClientMixin](./integration-mixin.md) - Plugin and job management