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,571 @@
1
+ ---
2
+ id: integration-mixin
3
+ title: IntegrationClientMixin
4
+ sidebar_position: 4
5
+ ---
6
+
7
+ # IntegrationClientMixin
8
+
9
+ Provides plugin management, job execution, and system integration operations for the Synapse backend.
10
+
11
+ ## Overview
12
+
13
+ The `IntegrationClientMixin` handles all operations related to plugins, jobs, agents, and storage management. This mixin is automatically included in the `BackendClient` and provides methods for system integration and automation workflows.
14
+
15
+ ## Agent Operations
16
+
17
+ ### `health_check_agent(token)`
18
+
19
+ Check the health status of an agent.
20
+
21
+ ```python
22
+ # Check agent health
23
+ status = client.health_check_agent('agent-token-123')
24
+ print(f"Agent status: {status}")
25
+
26
+ # Verify agent connectivity
27
+ try:
28
+ health = client.health_check_agent('my-agent-token')
29
+ print("Agent is healthy and connected")
30
+ except ClientError as e:
31
+ print(f"Agent health check failed: {e}")
32
+ ```
33
+
34
+ **Parameters:**
35
+
36
+ - `token` (str): Agent authentication token
37
+
38
+ **Returns:**
39
+
40
+ - `dict`: Agent health status and connectivity information
41
+
42
+ ## Plugin Management
43
+
44
+ ### `get_plugin(pk)`
45
+
46
+ Retrieve detailed information about a specific plugin.
47
+
48
+ ```python
49
+ plugin = client.get_plugin(123)
50
+ print(f"Plugin: {plugin['name']}")
51
+ print(f"Version: {plugin['version']}")
52
+ print(f"Description: {plugin['description']}")
53
+ print(f"Author: {plugin['author']}")
54
+ ```
55
+
56
+ **Parameters:**
57
+
58
+ - `pk` (int): Plugin ID
59
+
60
+ **Returns:**
61
+
62
+ - `dict`: Complete plugin information including metadata and configuration
63
+
64
+ ### `create_plugin(data)`
65
+
66
+ Create a new plugin in the system.
67
+
68
+ ```python
69
+ plugin_data = {
70
+ 'name': 'My Custom Plugin',
71
+ 'description': 'A plugin for custom data processing',
72
+ 'version': '1.0.0',
73
+ 'author': 'Your Name',
74
+ 'category': 'data_processing',
75
+ 'configuration': {
76
+ 'parameters': {
77
+ 'threshold': {'type': 'float', 'default': 0.5},
78
+ 'max_items': {'type': 'int', 'default': 100}
79
+ }
80
+ }
81
+ }
82
+
83
+ new_plugin = client.create_plugin(plugin_data)
84
+ print(f"Created plugin with ID: {new_plugin['id']}")
85
+ ```
86
+
87
+ **Parameters:**
88
+
89
+ - `data` (dict): Plugin configuration and metadata
90
+
91
+ **Plugin data structure:**
92
+
93
+ - `name` (str, required): Plugin name
94
+ - `description` (str): Plugin description
95
+ - `version` (str): Plugin version
96
+ - `author` (str): Plugin author
97
+ - `category` (str): Plugin category
98
+ - `configuration` (dict): Plugin configuration schema
99
+
100
+ **Returns:**
101
+
102
+ - `dict`: Created plugin with generated ID
103
+
104
+ ### `update_plugin(pk, data)`
105
+
106
+ Update an existing plugin.
107
+
108
+ ```python
109
+ # Update plugin description and version
110
+ updated_data = {
111
+ 'description': 'Updated plugin description',
112
+ 'version': '1.1.0',
113
+ 'configuration': {
114
+ 'parameters': {
115
+ 'threshold': {'type': 'float', 'default': 0.7},
116
+ 'max_items': {'type': 'int', 'default': 200},
117
+ 'new_param': {'type': 'string', 'default': 'default_value'}
118
+ }
119
+ }
120
+ }
121
+
122
+ updated_plugin = client.update_plugin(123, updated_data)
123
+ ```
124
+
125
+ **Parameters:**
126
+
127
+ - `pk` (int): Plugin ID
128
+ - `data` (dict): Updated plugin data
129
+
130
+ **Returns:**
131
+
132
+ - `dict`: Updated plugin information
133
+
134
+ ### `run_plugin(pk, data)`
135
+
136
+ Execute a plugin with specified parameters.
137
+
138
+ ```python
139
+ # Run plugin with parameters
140
+ execution_data = {
141
+ 'parameters': {
142
+ 'threshold': 0.8,
143
+ 'max_items': 150,
144
+ 'input_path': '/data/input/',
145
+ 'output_path': '/data/output/'
146
+ },
147
+ 'context': {
148
+ 'project_id': 123,
149
+ 'user_id': 456,
150
+ 'execution_mode': 'batch'
151
+ }
152
+ }
153
+
154
+ result = client.run_plugin(123, execution_data)
155
+ print(f"Plugin execution started: {result['job_id']}")
156
+ ```
157
+
158
+ **Parameters:**
159
+
160
+ - `pk` (int): Plugin ID
161
+ - `data` (dict): Execution parameters and context
162
+
163
+ **Execution data structure:**
164
+
165
+ - `parameters` (dict): Plugin-specific parameters
166
+ - `context` (dict): Execution context information
167
+
168
+ **Returns:**
169
+
170
+ - `dict`: Execution result with job information
171
+
172
+ ## Plugin Release Management
173
+
174
+ ### `get_plugin_release(pk, params=None)`
175
+
176
+ Get information about a specific plugin release.
177
+
178
+ ```python
179
+ # Get release information
180
+ release = client.get_plugin_release(456)
181
+ print(f"Release {release['version']} for plugin {release['plugin']}")
182
+
183
+ # Get release with expanded plugin info
184
+ release = client.get_plugin_release(456, params={'expand': 'plugin'})
185
+ ```
186
+
187
+ **Parameters:**
188
+
189
+ - `pk` (int): Plugin release ID
190
+ - `params` (dict, optional): Query parameters
191
+
192
+ **Returns:**
193
+
194
+ - `dict`: Plugin release information
195
+
196
+ ### `create_plugin_release(data)`
197
+
198
+ Create a new plugin release with file upload.
199
+
200
+ ```python
201
+ # Create plugin release
202
+ release_data = {
203
+ 'plugin': 123,
204
+ 'version': '2.0.0',
205
+ 'changelog': 'Added new features and bug fixes',
206
+ 'is_stable': True,
207
+ 'file': open('/path/to/plugin_v2.zip', 'rb')
208
+ }
209
+
210
+ new_release = client.create_plugin_release(release_data)
211
+ print(f"Created release: {new_release['id']}")
212
+ ```
213
+
214
+ **Parameters:**
215
+
216
+ - `data` (dict): Release data including file
217
+
218
+ **Release data structure:**
219
+
220
+ - `plugin` (int, required): Plugin ID
221
+ - `version` (str, required): Release version
222
+ - `changelog` (str): Release notes
223
+ - `is_stable` (bool): Whether this is a stable release
224
+ - `file` (file object, required): Plugin package file
225
+
226
+ **Returns:**
227
+
228
+ - `dict`: Created plugin release information
229
+
230
+ ## Job Management
231
+
232
+ ### `get_job(pk, params=None)`
233
+
234
+ Get detailed information about a job.
235
+
236
+ ```python
237
+ # Get basic job info
238
+ job = client.get_job(789)
239
+ print(f"Job {job['id']}: {job['status']}")
240
+
241
+ # Get job with logs
242
+ job = client.get_job(789, params={'expand': 'logs'})
243
+ print(f"Job logs: {job['logs']}")
244
+ ```
245
+
246
+ **Parameters:**
247
+
248
+ - `pk` (int): Job ID
249
+ - `params` (dict, optional): Query parameters
250
+
251
+ **Common params:**
252
+
253
+ - `expand`: Include additional data (`logs`, `metrics`, `result`)
254
+
255
+ **Returns:**
256
+
257
+ - `dict`: Complete job information
258
+
259
+ ### `list_jobs(params=None)`
260
+
261
+ List jobs with filtering options.
262
+
263
+ ```python
264
+ # List all jobs
265
+ jobs = client.list_jobs()
266
+
267
+ # List jobs by status
268
+ running_jobs = client.list_jobs(params={'status': 'running'})
269
+
270
+ # List jobs for a specific plugin
271
+ plugin_jobs = client.list_jobs(params={'plugin': 123})
272
+
273
+ # List recent jobs
274
+ from datetime import datetime, timedelta
275
+ recent_date = (datetime.now() - timedelta(days=7)).isoformat()
276
+ recent_jobs = client.list_jobs(params={'created_after': recent_date})
277
+ ```
278
+
279
+ **Parameters:**
280
+
281
+ - `params` (dict, optional): Filtering parameters
282
+
283
+ **Common filtering params:**
284
+
285
+ - `status`: Filter by job status (`queued`, `running`, `completed`, `failed`)
286
+ - `plugin`: Filter by plugin ID
287
+ - `created_after`: Filter by creation date
288
+ - `user`: Filter by user ID
289
+
290
+ **Returns:**
291
+
292
+ - `tuple`: (jobs_list, total_count)
293
+
294
+ ### `update_job(pk, data)`
295
+
296
+ Update job status or metadata.
297
+
298
+ ```python
299
+ # Update job status
300
+ client.update_job(789, {'status': 'completed'})
301
+
302
+ # Update job with result data
303
+ client.update_job(789, {
304
+ 'status': 'completed',
305
+ 'result': {
306
+ 'output_files': ['file1.txt', 'file2.txt'],
307
+ 'metrics': {'accuracy': 0.95, 'processing_time': 120}
308
+ }
309
+ })
310
+
311
+ # Update job progress
312
+ client.update_job(789, {
313
+ 'progress': 75,
314
+ 'status': 'running',
315
+ 'metadata': {'current_step': 'processing_images'}
316
+ })
317
+ ```
318
+
319
+ **Parameters:**
320
+
321
+ - `pk` (int): Job ID
322
+ - `data` (dict): Update data
323
+
324
+ **Updatable fields:**
325
+
326
+ - `status`: Job status
327
+ - `progress`: Progress percentage (0-100)
328
+ - `result`: Job result data
329
+ - `metadata`: Additional job metadata
330
+
331
+ **Returns:**
332
+
333
+ - `dict`: Updated job information
334
+
335
+ ### `list_job_console_logs(pk)`
336
+
337
+ Get console logs for a specific job.
338
+
339
+ ```python
340
+ # Get job console logs
341
+ logs = client.list_job_console_logs(789)
342
+ for log_entry in logs:
343
+ print(f"[{log_entry['timestamp']}] {log_entry['level']}: {log_entry['message']}")
344
+ ```
345
+
346
+ **Parameters:**
347
+
348
+ - `pk` (int): Job ID
349
+
350
+ **Returns:**
351
+
352
+ - `list`: Console log entries with timestamps and levels
353
+
354
+ ## Storage Management
355
+
356
+ ### `list_storages()`
357
+
358
+ List all available storage configurations.
359
+
360
+ ```python
361
+ storages = client.list_storages()
362
+ for storage in storages:
363
+ print(f"Storage: {storage['name']} ({storage['provider']})")
364
+ ```
365
+
366
+ **Returns:**
367
+
368
+ - `list`: Available storage configurations
369
+
370
+ ### `get_storage(pk)`
371
+
372
+ Get detailed information about a specific storage.
373
+
374
+ ```python
375
+ storage = client.get_storage(123)
376
+ print(f"Storage: {storage['name']}")
377
+ print(f"Provider: {storage['provider']}")
378
+ print(f"Configuration: {storage['configuration']}")
379
+ ```
380
+
381
+ **Parameters:**
382
+
383
+ - `pk` (int): Storage ID
384
+
385
+ **Returns:**
386
+
387
+ - `dict`: Complete storage configuration
388
+
389
+ ### `create_storage(data)`
390
+
391
+ Create a new storage configuration.
392
+
393
+ ```python
394
+ # Create Amazon S3 storage
395
+ s3_storage = client.create_storage({
396
+ 'name': 'My S3 Storage',
397
+ 'provider': 'amazon_s3',
398
+ 'category': 'external',
399
+ 'configuration': {
400
+ 'bucket_name': 'my-bucket',
401
+ 'region': 'us-west-2',
402
+ 'access_key_id': 'YOUR_ACCESS_KEY',
403
+ 'secret_access_key': 'YOUR_SECRET_KEY'
404
+ }
405
+ })
406
+
407
+ # Create local file system storage
408
+ local_storage = client.create_storage({
409
+ 'name': 'Local Storage',
410
+ 'provider': 'file_system',
411
+ 'category': 'internal',
412
+ 'configuration': {
413
+ 'base_path': '/data/storage',
414
+ 'permissions': '755'
415
+ }
416
+ })
417
+ ```
418
+
419
+ **Parameters:**
420
+
421
+ - `data` (dict): Storage configuration
422
+
423
+ **Storage data structure:**
424
+
425
+ - `name` (str, required): Storage name
426
+ - `provider` (str, required): Storage provider type
427
+ - `category` (str): Storage category (`internal`, `external`)
428
+ - `configuration` (dict): Provider-specific configuration
429
+
430
+ **Supported providers:**
431
+
432
+ - `amazon_s3`: Amazon S3
433
+ - `azure`: Azure Blob Storage
434
+ - `gcp`: Google Cloud Storage
435
+ - `file_system`: Local file system
436
+ - `ftp`, `sftp`: FTP protocols
437
+ - `minio`: MinIO storage
438
+
439
+ **Returns:**
440
+
441
+ - `dict`: Created storage configuration
442
+
443
+ ## Complete Integration Workflow
444
+
445
+ ```python
446
+ from synapse_sdk.clients.backend import BackendClient
447
+ import time
448
+
449
+ def complete_plugin_workflow():
450
+ """Complete workflow for plugin development and deployment."""
451
+ client = BackendClient(
452
+ base_url="https://api.synapse.sh",
453
+ api_token="your-token"
454
+ )
455
+
456
+ # 1. Create plugin
457
+ plugin_data = {
458
+ 'name': 'Image Processing Plugin',
459
+ 'description': 'Advanced image processing capabilities',
460
+ 'version': '1.0.0',
461
+ 'author': 'Development Team',
462
+ 'category': 'image_processing',
463
+ 'configuration': {
464
+ 'parameters': {
465
+ 'quality': {'type': 'float', 'default': 0.8},
466
+ 'format': {'type': 'string', 'default': 'jpeg'}
467
+ }
468
+ }
469
+ }
470
+
471
+ plugin = client.create_plugin(plugin_data)
472
+ plugin_id = plugin['id']
473
+ print(f"Created plugin: {plugin_id}")
474
+
475
+ # 2. Create plugin release
476
+ with open('/path/to/plugin.zip', 'rb') as plugin_file:
477
+ release_data = {
478
+ 'plugin': plugin_id,
479
+ 'version': '1.0.0',
480
+ 'changelog': 'Initial release',
481
+ 'is_stable': True,
482
+ 'file': plugin_file
483
+ }
484
+ release = client.create_plugin_release(release_data)
485
+
486
+ print(f"Created release: {release['id']}")
487
+
488
+ # 3. Run plugin
489
+ execution_data = {
490
+ 'parameters': {
491
+ 'quality': 0.9,
492
+ 'format': 'png'
493
+ },
494
+ 'context': {
495
+ 'project_id': 123,
496
+ 'batch_size': 100
497
+ }
498
+ }
499
+
500
+ job_result = client.run_plugin(plugin_id, execution_data)
501
+ job_id = job_result['job_id']
502
+ print(f"Started job: {job_id}")
503
+
504
+ # 4. Monitor job progress
505
+ while True:
506
+ job = client.get_job(job_id)
507
+ status = job['status']
508
+ progress = job.get('progress', 0)
509
+
510
+ print(f"Job {job_id}: {status} ({progress}%)")
511
+
512
+ if status in ['completed', 'failed']:
513
+ break
514
+
515
+ time.sleep(5) # Wait 5 seconds before checking again
516
+
517
+ # 5. Get job logs if failed
518
+ if status == 'failed':
519
+ logs = client.list_job_console_logs(job_id)
520
+ print("Job failed. Recent logs:")
521
+ for log in logs[-10:]: # Last 10 log entries
522
+ print(f" {log['timestamp']}: {log['message']}")
523
+ else:
524
+ print("Job completed successfully!")
525
+ if 'result' in job:
526
+ print(f"Result: {job['result']}")
527
+
528
+ return plugin_id, job_id
529
+
530
+ # Run the workflow
531
+ if __name__ == "__main__":
532
+ plugin_id, job_id = complete_plugin_workflow()
533
+ ```
534
+
535
+ ## Error Handling
536
+
537
+ ```python
538
+ from synapse_sdk.clients.exceptions import ClientError
539
+
540
+ def robust_plugin_execution(plugin_id, parameters, max_retries=3):
541
+ """Execute plugin with error handling and retries."""
542
+ for attempt in range(max_retries):
543
+ try:
544
+ result = client.run_plugin(plugin_id, {
545
+ 'parameters': parameters,
546
+ 'context': {'retry_attempt': attempt}
547
+ })
548
+ return result
549
+ except ClientError as e:
550
+ if e.status_code == 404:
551
+ print(f"Plugin {plugin_id} not found")
552
+ break
553
+ elif e.status_code == 400:
554
+ print(f"Invalid parameters: {e.response}")
555
+ break
556
+ elif e.status_code >= 500:
557
+ print(f"Server error (attempt {attempt + 1}): {e}")
558
+ if attempt < max_retries - 1:
559
+ time.sleep(2 ** attempt) # Exponential backoff
560
+ else:
561
+ print(f"Unexpected error: {e}")
562
+ break
563
+
564
+ return None
565
+ ```
566
+
567
+ ## See Also
568
+
569
+ - [BackendClient](./backend.md) - Main backend client
570
+ - [AnnotationClientMixin](./annotation-mixin.md) - Task and annotation operations
571
+ - [MLClientMixin](./ml-mixin.md) - Machine learning operations