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,145 @@
1
+ """Refactored ToTask action using Strategy and Facade patterns."""
2
+
3
+ from typing import Dict
4
+
5
+ from synapse_sdk.clients.backend import BackendClient
6
+ from synapse_sdk.clients.backend.models import JobStatus
7
+ from synapse_sdk.plugins.categories.base import Action
8
+ from synapse_sdk.plugins.categories.decorators import register_action
9
+ from synapse_sdk.plugins.enums import PluginCategory, RunMethod
10
+
11
+ from .enums import LogCode
12
+ from .exceptions import PreAnnotationToTaskFailed
13
+ from .models import ToTaskParams, ToTaskResult
14
+ from .orchestrator import ToTaskOrchestrator
15
+ from .run import ToTaskRun
16
+ from .strategies.base import ToTaskContext
17
+
18
+
19
+ @register_action
20
+ class ToTaskAction(Action):
21
+ """ToTask action for pre-annotation data processing using Strategy and Facade patterns.
22
+
23
+ This action handles the process of annotating data to tasks in a project. It supports
24
+ two annotation methods: file-based annotation and inference-based annotation.
25
+
26
+ The action uses a Strategy pattern to handle different annotation methods and validation
27
+ approaches, coordinated by an Orchestrator (Facade pattern) that manages the complete
28
+ workflow with rollback capabilities.
29
+
30
+ File-based annotation fetches data from file URLs specified in task data units,
31
+ downloads and processes JSON data, and updates task data with the processed information.
32
+ It also validates target specification names against file specifications.
33
+
34
+ Inference-based annotation uses pre-processor plugins for model inference
35
+ for automatic data annotation.
36
+
37
+ Attrs:
38
+ name (str): Action name, set to 'to_task'.
39
+ category (PluginCategory): Plugin category, set to PRE_ANNOTATION.
40
+ method (RunMethod): Execution method, set to JOB.
41
+ run_class (Type[ToTaskRun]): Run class for this action.
42
+ params_model (Type[ToTaskParams]): Parameter validation model.
43
+ progress_categories (Dict): Progress tracking configuration.
44
+ metrics_categories (Set[str]): Metrics categories for this action.
45
+
46
+ Note:
47
+ This action requires a valid project with an associated data collection.
48
+ For file-based annotation, the target_specification_name must exist in the
49
+ project's file specifications.
50
+
51
+ Raises:
52
+ ValueError: If run instance or parameters are not properly initialized.
53
+ PreAnnotationToTaskFailed: If the annotation workflow fails.
54
+ """
55
+
56
+ name = 'to_task'
57
+ category = PluginCategory.PRE_ANNOTATION
58
+ method = RunMethod.JOB
59
+ run_class = ToTaskRun
60
+ params_model = ToTaskParams
61
+ progress_categories = {
62
+ 'annotate_task_data': {
63
+ 'proportion': 100,
64
+ },
65
+ }
66
+ metrics_categories = {
67
+ 'annotate_task_data': {
68
+ 'stand_by': 0,
69
+ 'failed': 0,
70
+ 'success': 0,
71
+ }
72
+ }
73
+
74
+ def __init__(self, *args, **kwargs):
75
+ """Initialize the action with orchestrator context."""
76
+ super().__init__(*args, **kwargs)
77
+ self.context = None
78
+
79
+ def start(self) -> Dict:
80
+ """Start to_task action using orchestrator facade.
81
+
82
+ The action now uses a simplified workflow:
83
+ 1. Validate initialization
84
+ 2. Create execution context
85
+ 3. Execute workflow through orchestrator
86
+ 4. Handle results and errors
87
+
88
+ Returns:
89
+ dict: Validated result with status and message.
90
+ """
91
+ # Validate initialization
92
+ if not self.run or not self.params:
93
+ result = ToTaskResult(
94
+ status=JobStatus.FAILED, message='Run instance or parameters not properly initialized'
95
+ )
96
+ raise PreAnnotationToTaskFailed(result.message)
97
+
98
+ # Type assertions for better IDE support
99
+ assert isinstance(self.run, ToTaskRun)
100
+ assert isinstance(self.run.client, BackendClient)
101
+
102
+ # Log action start
103
+ self.run.log_message_with_code(LogCode.TO_TASK_STARTED)
104
+
105
+ try:
106
+ # Create execution context
107
+ self.context = ToTaskContext(
108
+ params=self.params,
109
+ client=self.run.client,
110
+ logger=self.run,
111
+ entrypoint=self.entrypoint,
112
+ config=self.config,
113
+ plugin_config=self.plugin_config,
114
+ job_id=self.job_id,
115
+ progress_categories=self.progress_categories,
116
+ metrics_categories=self.metrics_categories,
117
+ )
118
+
119
+ # Create and execute orchestrator
120
+ orchestrator = ToTaskOrchestrator(self.context)
121
+ result = orchestrator.execute_workflow()
122
+
123
+ # Log successful completion
124
+ self.run.log_message_with_code(LogCode.TO_TASK_COMPLETED)
125
+ return result
126
+
127
+ except PreAnnotationToTaskFailed as e:
128
+ # Re-raise pre-annotation specific errors
129
+ self.run.log_message_with_code(LogCode.TO_TASK_FAILED, str(e))
130
+ raise e
131
+
132
+ except Exception as e:
133
+ # Handle unexpected errors
134
+ error_msg = f'ToTask action failed: {str(e)}'
135
+ self.run.log_message_with_code(LogCode.TO_TASK_FAILED, error_msg)
136
+ result = ToTaskResult(status=JobStatus.FAILED, message=error_msg)
137
+ raise PreAnnotationToTaskFailed(result.message)
138
+
139
+ def get_context(self) -> ToTaskContext:
140
+ """Get the current execution context for testing/debugging.
141
+
142
+ Returns:
143
+ ToTaskContext: The current execution context, or None if not initialized.
144
+ """
145
+ return self.context
@@ -0,0 +1,269 @@
1
+ from enum import Enum
2
+
3
+ from synapse_sdk.shared.enums import Context
4
+
5
+
6
+ class AnnotationMethod(str, Enum):
7
+ FILE = 'file'
8
+ INFERENCE = 'inference'
9
+
10
+
11
+ class AnnotateTaskDataStatus(str, Enum):
12
+ SUCCESS = 'success'
13
+ FAILED = 'failed'
14
+
15
+
16
+ class LogCode(str, Enum):
17
+ """Type-safe logging codes for to_task operations.
18
+
19
+ Enumeration of all possible log events during to_task processing. Each code
20
+ corresponds to a specific event or error state with predefined message
21
+ templates and log levels.
22
+
23
+ The codes are organized by category:
24
+ - Validation codes (INVALID_PROJECT_RESPONSE, NO_DATA_COLLECTION, etc.)
25
+ - Processing codes (ANNOTATING_DATA, ANNOTATION_COMPLETED, etc.)
26
+ - Error codes (CRITICAL_ERROR, TASK_PROCESSING_FAILED, etc.)
27
+ - Inference codes (ANNOTATING_INFERENCE_DATA, INFERENCE_PROCESSING_FAILED, etc.)
28
+ """
29
+
30
+ INVALID_PROJECT_RESPONSE = 'INVALID_PROJECT_RESPONSE'
31
+ NO_DATA_COLLECTION = 'NO_DATA_COLLECTION'
32
+ INVALID_DATA_COLLECTION_RESPONSE = 'INVALID_DATA_COLLECTION_RESPONSE'
33
+ NO_TASKS_FOUND = 'NO_TASKS_FOUND'
34
+ TARGET_SPEC_REQUIRED = 'TARGET_SPEC_REQUIRED'
35
+ TARGET_SPEC_NOT_FOUND = 'TARGET_SPEC_NOT_FOUND'
36
+ UNSUPPORTED_METHOD = 'UNSUPPORTED_METHOD'
37
+ ANNOTATING_DATA = 'ANNOTATING_DATA'
38
+ CRITICAL_ERROR = 'CRITICAL_ERROR'
39
+ TASK_PROCESSING_FAILED = 'TASK_PROCESSING_FAILED'
40
+ ANNOTATION_COMPLETED = 'ANNOTATION_COMPLETED'
41
+ INVALID_TASK_RESPONSE = 'INVALID_TASK_RESPONSE'
42
+ TARGET_SPEC_REQUIRED_FOR_TASK = 'TARGET_SPEC_REQUIRED_FOR_TASK'
43
+ UNSUPPORTED_METHOD_FOR_TASK = 'UNSUPPORTED_METHOD_FOR_TASK'
44
+ PRIMARY_IMAGE_URL_NOT_FOUND = 'PRIMARY_IMAGE_URL_NOT_FOUND'
45
+ FILE_SPEC_NOT_FOUND = 'FILE_SPEC_NOT_FOUND'
46
+ FILE_ORIGINAL_NAME_NOT_FOUND = 'FILE_ORIGINAL_NAME_NOT_FOUND'
47
+ URL_NOT_FOUND = 'URL_NOT_FOUND'
48
+ FETCH_DATA_FAILED = 'FETCH_DATA_FAILED'
49
+ CONVERT_DATA_FAILED = 'CONVERT_DATA_FAILED'
50
+ PREPROCESSOR_ID_REQUIRED = 'PREPROCESSOR_ID_REQUIRED'
51
+ INFERENCE_PROCESSING_FAILED = 'INFERENCE_PROCESSING_FAILED'
52
+ ANNOTATING_INFERENCE_DATA = 'ANNOTATING_INFERENCE_DATA'
53
+ INFERENCE_ANNOTATION_COMPLETED = 'INFERENCE_ANNOTATION_COMPLETED'
54
+ INFERENCE_PREPROCESSOR_FAILED = 'INFERENCE_PREPROCESSOR_FAILED'
55
+
56
+ # Orchestrator workflow codes
57
+ TO_TASK_STARTED = 'TO_TASK_STARTED'
58
+ TO_TASK_COMPLETED = 'TO_TASK_COMPLETED'
59
+ TO_TASK_FAILED = 'TO_TASK_FAILED'
60
+ STEP_STARTED = 'STEP_STARTED'
61
+ STEP_COMPLETED = 'STEP_COMPLETED'
62
+ STEP_FAILED = 'STEP_FAILED'
63
+ ROLLBACK_FAILED = 'ROLLBACK_FAILED'
64
+ ROLLBACK_ACTION_FAILED = 'ROLLBACK_ACTION_FAILED'
65
+
66
+ # Additional strategy codes
67
+ VALIDATION_FAILED = 'VALIDATION_FAILED'
68
+ NO_DATA_UNIT = 'NO_DATA_UNIT'
69
+ NO_DATA_UNIT_FILES = 'NO_DATA_UNIT_FILES'
70
+ TARGET_SPEC_URL_NOT_FOUND = 'TARGET_SPEC_URL_NOT_FOUND'
71
+ DATA_DOWNLOAD_FAILED = 'DATA_DOWNLOAD_FAILED'
72
+ JSON_DECODE_FAILED = 'JSON_DECODE_FAILED'
73
+ ANNOTATION_SUBMISSION_FAILED = 'ANNOTATION_SUBMISSION_FAILED'
74
+ NO_PREPROCESSOR_ID = 'NO_PREPROCESSOR_ID'
75
+ DATA_EXTRACTION_FAILED = 'DATA_EXTRACTION_FAILED'
76
+ PROGRESS_UPDATE_FAILED = 'PROGRESS_UPDATE_FAILED'
77
+ METRICS_RECORDING_FAILED = 'METRICS_RECORDING_FAILED'
78
+ METRICS_UPDATE_FAILED = 'METRICS_UPDATE_FAILED'
79
+ METRICS_FINALIZATION_FAILED = 'METRICS_FINALIZATION_FAILED'
80
+
81
+
82
+ LOG_MESSAGES = {
83
+ LogCode.INVALID_PROJECT_RESPONSE: {
84
+ 'message': 'Invalid project response received.',
85
+ 'level': Context.DANGER,
86
+ },
87
+ LogCode.NO_DATA_COLLECTION: {
88
+ 'message': 'Project does not have a data collection.',
89
+ 'level': Context.DANGER,
90
+ },
91
+ LogCode.INVALID_DATA_COLLECTION_RESPONSE: {
92
+ 'message': 'Invalid data collection response received.',
93
+ 'level': Context.DANGER,
94
+ },
95
+ LogCode.NO_TASKS_FOUND: {
96
+ 'message': 'Tasks to annotate not found.',
97
+ 'level': Context.WARNING,
98
+ },
99
+ LogCode.TARGET_SPEC_REQUIRED: {
100
+ 'message': 'Target specification name is required for file annotation method.',
101
+ 'level': Context.DANGER,
102
+ },
103
+ LogCode.TARGET_SPEC_NOT_FOUND: {
104
+ 'message': 'Target specification name "{}" not found in file specifications',
105
+ 'level': Context.DANGER,
106
+ },
107
+ LogCode.UNSUPPORTED_METHOD: {
108
+ 'message': 'Unsupported annotation method: {}',
109
+ 'level': Context.DANGER,
110
+ },
111
+ LogCode.ANNOTATING_DATA: {
112
+ 'message': 'Annotating data to tasks...',
113
+ 'level': None,
114
+ },
115
+ LogCode.CRITICAL_ERROR: {
116
+ 'message': 'Critical error occured while processing task. Stopping the job.',
117
+ 'level': Context.DANGER,
118
+ },
119
+ LogCode.TASK_PROCESSING_FAILED: {
120
+ 'message': 'Failed to process task {}: {}',
121
+ 'level': Context.DANGER,
122
+ },
123
+ LogCode.ANNOTATION_COMPLETED: {
124
+ 'message': 'Annotation completed. Success: {}, Failed: {}',
125
+ 'level': None,
126
+ },
127
+ LogCode.INVALID_TASK_RESPONSE: {
128
+ 'message': 'Invalid task response received for task {}',
129
+ 'level': Context.DANGER,
130
+ },
131
+ LogCode.TARGET_SPEC_REQUIRED_FOR_TASK: {
132
+ 'message': 'Target specification name is required for file annotation method for task {}',
133
+ 'level': Context.DANGER,
134
+ },
135
+ LogCode.UNSUPPORTED_METHOD_FOR_TASK: {
136
+ 'message': 'Unsupported annotation method: {} for task {}',
137
+ 'level': Context.DANGER,
138
+ },
139
+ LogCode.PRIMARY_IMAGE_URL_NOT_FOUND: {
140
+ 'message': 'Primary image URL not found in task data for task {}',
141
+ 'level': Context.DANGER,
142
+ },
143
+ LogCode.FILE_SPEC_NOT_FOUND: {
144
+ 'message': 'File specification not found for task {}',
145
+ 'level': Context.DANGER,
146
+ },
147
+ LogCode.FILE_ORIGINAL_NAME_NOT_FOUND: {
148
+ 'message': 'File original name not found for task {}',
149
+ 'level': Context.DANGER,
150
+ },
151
+ LogCode.URL_NOT_FOUND: {
152
+ 'message': 'URL not found for task {}',
153
+ 'level': Context.DANGER,
154
+ },
155
+ LogCode.FETCH_DATA_FAILED: {
156
+ 'message': 'Failed to fetch data from URL: {} for task {}',
157
+ 'level': Context.DANGER,
158
+ },
159
+ LogCode.CONVERT_DATA_FAILED: {
160
+ 'message': 'Failed to convert data to task object: {} for task {}',
161
+ 'level': Context.DANGER,
162
+ },
163
+ LogCode.PREPROCESSOR_ID_REQUIRED: {
164
+ 'message': 'Pre-processor ID is required for inference annotation method for task {}',
165
+ 'level': Context.DANGER,
166
+ },
167
+ LogCode.INFERENCE_PROCESSING_FAILED: {
168
+ 'message': 'Failed to process inference for task {}: {}',
169
+ 'level': Context.DANGER,
170
+ },
171
+ LogCode.ANNOTATING_INFERENCE_DATA: {
172
+ 'message': 'Annotating data to tasks using inference...',
173
+ 'level': None,
174
+ },
175
+ LogCode.INFERENCE_ANNOTATION_COMPLETED: {
176
+ 'message': 'Inference annotation completed. Success: {}, Failed: {}',
177
+ 'level': None,
178
+ },
179
+ LogCode.INFERENCE_PREPROCESSOR_FAILED: {
180
+ 'message': 'Inference pre processor failed for task {}: {}',
181
+ 'level': Context.DANGER,
182
+ },
183
+ # Orchestrator workflow messages
184
+ LogCode.TO_TASK_STARTED: {
185
+ 'message': 'ToTask action started.',
186
+ 'level': Context.INFO,
187
+ },
188
+ LogCode.TO_TASK_COMPLETED: {
189
+ 'message': 'ToTask action completed successfully.',
190
+ 'level': Context.SUCCESS,
191
+ },
192
+ LogCode.TO_TASK_FAILED: {
193
+ 'message': 'ToTask action failed: {}',
194
+ 'level': Context.DANGER,
195
+ },
196
+ LogCode.STEP_STARTED: {
197
+ 'message': 'Starting workflow step: {}',
198
+ 'level': Context.INFO,
199
+ },
200
+ LogCode.STEP_COMPLETED: {
201
+ 'message': 'Completed workflow step: {}',
202
+ 'level': Context.INFO,
203
+ },
204
+ LogCode.STEP_FAILED: {
205
+ 'message': 'Failed workflow step {}: {}',
206
+ 'level': Context.DANGER,
207
+ },
208
+ LogCode.ROLLBACK_FAILED: {
209
+ 'message': 'Failed to rollback step {}: {}',
210
+ 'level': Context.WARNING,
211
+ },
212
+ LogCode.ROLLBACK_ACTION_FAILED: {
213
+ 'message': 'Failed to execute rollback action: {}',
214
+ 'level': Context.WARNING,
215
+ },
216
+ # Additional strategy messages
217
+ LogCode.VALIDATION_FAILED: {
218
+ 'message': 'Validation failed: {}',
219
+ 'level': Context.DANGER,
220
+ },
221
+ LogCode.NO_DATA_UNIT: {
222
+ 'message': 'Task does not have a data unit',
223
+ 'level': Context.DANGER,
224
+ },
225
+ LogCode.NO_DATA_UNIT_FILES: {
226
+ 'message': 'Data unit does not have files',
227
+ 'level': Context.DANGER,
228
+ },
229
+ LogCode.TARGET_SPEC_URL_NOT_FOUND: {
230
+ 'message': 'Target specification URL not found for {} in task {}',
231
+ 'level': Context.DANGER,
232
+ },
233
+ LogCode.DATA_DOWNLOAD_FAILED: {
234
+ 'message': 'Failed to download data for task {}: {}',
235
+ 'level': Context.DANGER,
236
+ },
237
+ LogCode.JSON_DECODE_FAILED: {
238
+ 'message': 'Failed to decode JSON data for task {}: {}',
239
+ 'level': Context.DANGER,
240
+ },
241
+ LogCode.ANNOTATION_SUBMISSION_FAILED: {
242
+ 'message': 'Failed to submit annotation data for task {}: {}',
243
+ 'level': Context.DANGER,
244
+ },
245
+ LogCode.NO_PREPROCESSOR_ID: {
246
+ 'message': 'Pre-processor ID is required for inference annotation method',
247
+ 'level': Context.DANGER,
248
+ },
249
+ LogCode.DATA_EXTRACTION_FAILED: {
250
+ 'message': 'Data extraction failed: {}',
251
+ 'level': Context.DANGER,
252
+ },
253
+ LogCode.PROGRESS_UPDATE_FAILED: {
254
+ 'message': 'Progress update failed: {}',
255
+ 'level': Context.WARNING,
256
+ },
257
+ LogCode.METRICS_RECORDING_FAILED: {
258
+ 'message': 'Metrics recording failed: {}',
259
+ 'level': Context.WARNING,
260
+ },
261
+ LogCode.METRICS_UPDATE_FAILED: {
262
+ 'message': 'Metrics update failed: {}',
263
+ 'level': Context.WARNING,
264
+ },
265
+ LogCode.METRICS_FINALIZATION_FAILED: {
266
+ 'message': 'Metrics finalization failed: {}',
267
+ 'level': Context.WARNING,
268
+ },
269
+ }
@@ -0,0 +1,14 @@
1
+ class CriticalError(Exception):
2
+ """Critical error."""
3
+
4
+ def __init__(self, message: str = 'Critical error occured while processing task'):
5
+ self.message = message
6
+ super().__init__(self.message)
7
+
8
+
9
+ class PreAnnotationToTaskFailed(Exception):
10
+ """Pre-annotation to task failed."""
11
+
12
+ def __init__(self, message: str = 'Pre-annotation to task failed'):
13
+ self.message = message
14
+ super().__init__(self.message)
@@ -0,0 +1,76 @@
1
+ """Factory for creating ToTask strategies based on context."""
2
+
3
+ from typing import Dict, Type
4
+
5
+ from .enums import AnnotationMethod
6
+ from .strategies.base import (
7
+ AnnotationStrategy,
8
+ DataExtractionStrategy,
9
+ MetricsStrategy,
10
+ PreProcessorStrategy,
11
+ ValidationStrategy,
12
+ )
13
+
14
+
15
+ class ToTaskStrategyFactory:
16
+ """Factory for creating action strategies based on context."""
17
+
18
+ def __init__(self):
19
+ # Import strategies here to avoid circular imports
20
+ from .strategies.annotation import FileAnnotationStrategy, InferenceAnnotationStrategy
21
+ from .strategies.extraction import FileUrlExtractionStrategy, InferenceDataExtractionStrategy
22
+ from .strategies.metrics import ProgressTrackingStrategy
23
+ from .strategies.preprocessor import PreProcessorManagementStrategy
24
+ from .strategies.validation import (
25
+ ProjectValidationStrategy,
26
+ TargetSpecificationValidationStrategy,
27
+ TaskValidationStrategy,
28
+ )
29
+
30
+ self._annotation_strategies: Dict[AnnotationMethod, Type[AnnotationStrategy]] = {
31
+ AnnotationMethod.FILE: FileAnnotationStrategy,
32
+ AnnotationMethod.INFERENCE: InferenceAnnotationStrategy,
33
+ }
34
+
35
+ self._validation_strategies = {
36
+ 'project': ProjectValidationStrategy,
37
+ 'task': TaskValidationStrategy,
38
+ 'target_spec': TargetSpecificationValidationStrategy,
39
+ }
40
+
41
+ self._extraction_strategies = {
42
+ AnnotationMethod.FILE: FileUrlExtractionStrategy,
43
+ AnnotationMethod.INFERENCE: InferenceDataExtractionStrategy,
44
+ }
45
+
46
+ self._preprocessor_strategy = PreProcessorManagementStrategy
47
+ self._metrics_strategy = ProgressTrackingStrategy
48
+
49
+ def create_annotation_strategy(self, method: AnnotationMethod) -> AnnotationStrategy:
50
+ """Create annotation strategy based on method."""
51
+ strategy_class = self._annotation_strategies.get(method)
52
+ if not strategy_class:
53
+ raise ValueError(f'No annotation strategy available for method: {method}')
54
+ return strategy_class()
55
+
56
+ def create_validation_strategy(self, validation_type: str) -> ValidationStrategy:
57
+ """Create validation strategy based on type."""
58
+ strategy_class = self._validation_strategies.get(validation_type)
59
+ if not strategy_class:
60
+ raise ValueError(f'No validation strategy available for type: {validation_type}')
61
+ return strategy_class()
62
+
63
+ def create_extraction_strategy(self, method: AnnotationMethod) -> DataExtractionStrategy:
64
+ """Create data extraction strategy based on method."""
65
+ strategy_class = self._extraction_strategies.get(method)
66
+ if not strategy_class:
67
+ raise ValueError(f'No extraction strategy available for method: {method}')
68
+ return strategy_class()
69
+
70
+ def create_preprocessor_strategy(self) -> PreProcessorStrategy:
71
+ """Create pre-processor management strategy."""
72
+ return self._preprocessor_strategy()
73
+
74
+ def create_metrics_strategy(self) -> MetricsStrategy:
75
+ """Create metrics tracking strategy."""
76
+ return self._metrics_strategy()
@@ -0,0 +1,97 @@
1
+ from typing import Annotated, Any, Dict, Optional
2
+
3
+ from pydantic import AfterValidator, BaseModel, field_validator
4
+ from pydantic_core import PydanticCustomError
5
+
6
+ from synapse_sdk.clients.backend.models import JobStatus
7
+ from synapse_sdk.clients.exceptions import ClientError
8
+ from synapse_sdk.shared.enums import Context
9
+ from synapse_sdk.utils.pydantic.validators import non_blank
10
+
11
+ from .enums import AnnotateTaskDataStatus
12
+
13
+
14
+ class ToTaskParams(BaseModel):
15
+ """ToTask action parameters.
16
+
17
+ Args:
18
+ name (str): The name of the action.
19
+ description (str | None): The description of the action.
20
+ project (int): The project ID.
21
+ agent (int): The agent ID.
22
+ task_filters (dict): The filters of tasks.
23
+ method (AnnotationMethod): The method of annotation.
24
+ target_specification_name (str | None): The name of the target specification.
25
+ model (int): The model ID.
26
+ pre_processor (int | None): The pre processor ID.
27
+ pre_processor_params (dict): The params of the pre processor.
28
+ """
29
+
30
+ name: Annotated[str, AfterValidator(non_blank)]
31
+ description: Optional[str] = None
32
+ project: int
33
+ agent: int
34
+ task_filters: Dict[str, Any]
35
+ method: Optional[str] = None
36
+ target_specification_name: Optional[str] = None
37
+ model: Optional[int] = None
38
+ pre_processor: Optional[int] = None
39
+ pre_processor_params: Dict[str, Any]
40
+
41
+ @field_validator('project', mode='before')
42
+ @classmethod
43
+ def check_project_exists(cls, value: int, info) -> int:
44
+ """Validate synapse-backend project exists."""
45
+ if not value:
46
+ return value
47
+
48
+ action = info.context['action']
49
+ client = action.client
50
+ try:
51
+ client.get_project(value)
52
+ except ClientError:
53
+ raise PydanticCustomError('client_error', 'Error occurred while checking project exists.')
54
+ return value
55
+
56
+
57
+ class ToTaskResult(BaseModel):
58
+ """Result model for ToTaskAction.start method.
59
+
60
+ Args:
61
+ status (JobStatus): The job status from the action execution.
62
+ message (str): A descriptive message about the action result.
63
+ """
64
+
65
+ status: JobStatus
66
+ message: str
67
+
68
+ def model_dump(self, **kwargs):
69
+ """Override model_dump to return status as enum value."""
70
+ data = super().model_dump(**kwargs)
71
+ if 'status' in data and isinstance(data['status'], JobStatus):
72
+ data['status'] = data['status'].value
73
+ return data
74
+
75
+
76
+ class AnnotateTaskEventLog(BaseModel):
77
+ """Annotate task event log model."""
78
+
79
+ info: Optional[str] = None
80
+ status: Context
81
+ created: str
82
+
83
+
84
+ class AnnotateTaskDataLog(BaseModel):
85
+ """Log model for annotate task data."""
86
+
87
+ task_info: Optional[str] = None
88
+ status: AnnotateTaskDataStatus
89
+ created: str
90
+
91
+
92
+ class MetricsRecord(BaseModel):
93
+ """Metrics record model."""
94
+
95
+ stand_by: int
96
+ failed: int
97
+ success: int