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,134 @@
1
+ import shutil
2
+ from pathlib import Path
3
+
4
+ from synapse_sdk.utils.storage.providers import BaseStorage
5
+
6
+
7
+ class FileSystemStorage(BaseStorage):
8
+ """Storage provider for file system.
9
+
10
+ * This storage do not support url based initialization.
11
+
12
+ Args:
13
+ url (str): The URL of the storage provider.
14
+
15
+ Examples:
16
+ >>> # Dict-based initialization
17
+ >>> config = {
18
+ ... 'provider': 'filesystem',
19
+ ... 'configuration': {
20
+ ... 'location': '/data'
21
+ ... }
22
+ ... }
23
+ >>> storage = FileSystemStorage(config)
24
+ """
25
+
26
+ def __init__(self, connection_params: str | dict):
27
+ super().__init__(connection_params)
28
+ self.base_path = Path(self.query_params['location'])
29
+
30
+ def get_pathlib(self, path):
31
+ """Get the path as a pathlib object.
32
+
33
+ Args:
34
+ path (str): The path to convert.
35
+
36
+ Returns:
37
+ pathlib.Path: The converted path.
38
+ """
39
+ if path == '/' or path == '':
40
+ return self.base_path
41
+
42
+ # Strip leading slash to ensure path is relative to base_path.
43
+ # Path('/data') / '/subdir' would incorrectly resolve to '/subdir' instead of '/data/subdir'
44
+ if isinstance(path, str) and path.startswith('/'):
45
+ path = path.lstrip('/')
46
+
47
+ return self.base_path / path
48
+
49
+ def upload(self, source, target):
50
+ """Upload a file from source to target location.
51
+
52
+ Args:
53
+ source (str): Path to source file
54
+ target (str): Target path relative to base path
55
+
56
+ Returns:
57
+ str: URL of uploaded file
58
+ """
59
+ source_path = Path(source)
60
+ target_path = self.base_path / target
61
+
62
+ # Create parent directories if they don't exist
63
+ target_path.parent.mkdir(parents=True, exist_ok=True)
64
+
65
+ # Copy the file
66
+ shutil.copy2(source_path, target_path)
67
+
68
+ return self.get_url(target)
69
+
70
+ def exists(self, target):
71
+ """Check if target file exists.
72
+
73
+ Args:
74
+ target (str): Target path relative to base path
75
+
76
+ Returns:
77
+ bool: True if file exists, False otherwise
78
+ """
79
+ target_path = self.base_path / target
80
+ return target_path.exists()
81
+
82
+ def get_url(self, target):
83
+ """Get URL for target file.
84
+
85
+ Args:
86
+ target (str): Target path relative to base path
87
+
88
+ Returns:
89
+ str: File URL
90
+ """
91
+ target_path = self.base_path / target
92
+ return f'file://{target_path.absolute()}'
93
+
94
+ def get_path_file_count(self, pathlib_obj):
95
+ """Get the file count in the path.
96
+
97
+ Args:
98
+ pathlib_obj (Path): The path to get file count.
99
+
100
+ Returns:
101
+ int: The file count in the path.
102
+ """
103
+ if not pathlib_obj.exists():
104
+ return 0
105
+
106
+ if pathlib_obj.is_file():
107
+ return 1
108
+
109
+ count = 0
110
+ for item in pathlib_obj.rglob('*'):
111
+ if item.is_file():
112
+ count += 1
113
+ return count
114
+
115
+ def get_path_total_size(self, pathlib_obj):
116
+ """Get the total size of the path.
117
+
118
+ Args:
119
+ pathlib_obj (Path): The path to get total size.
120
+
121
+ Returns:
122
+ int: The total size of the path.
123
+ """
124
+ if not pathlib_obj.exists():
125
+ return 0
126
+
127
+ if pathlib_obj.is_file():
128
+ return pathlib_obj.stat().st_size
129
+
130
+ total_size = 0
131
+ for item in pathlib_obj.rglob('*'):
132
+ if item.is_file():
133
+ total_size += item.stat().st_size
134
+ return total_size
@@ -0,0 +1,13 @@
1
+ from upath import UPath
2
+
3
+ from synapse_sdk.utils.storage.providers import BaseStorage
4
+
5
+
6
+ class GCPStorage(BaseStorage):
7
+ def __init__(self, url):
8
+ super().__init__(url)
9
+
10
+ self.upath = UPath(f'gs://{self.query_params["bucket_name"]}', token=self.query_params['credentials'])
11
+
12
+ def get_pathlib(self, path):
13
+ return self.upath.joinuri(path)
@@ -0,0 +1,190 @@
1
+ import os
2
+ from urllib.parse import urljoin, urlparse
3
+
4
+ import requests
5
+
6
+ from synapse_sdk.utils.storage.providers import BaseStorage
7
+
8
+
9
+ class HTTPStorage(BaseStorage):
10
+ """Storage provider for no-auth HTTP file servers (e.g., Django FileSystemStorage served over HTTP)."""
11
+
12
+ OPTION_CASTS = {
13
+ 'timeout': int,
14
+ }
15
+
16
+ def __init__(self, connection_params: str | dict):
17
+ super().__init__(connection_params)
18
+
19
+ # Extract base URL
20
+ if isinstance(connection_params, dict):
21
+ self.base_url = self.query_params.get('base_url', '')
22
+ self.timeout = self.query_params.get('timeout', 30)
23
+ else:
24
+ # Parse URL like: http://example.com/media/
25
+ parsed = urlparse(connection_params)
26
+ self.base_url = f'{parsed.scheme}://{parsed.netloc}{parsed.path}'
27
+ self.timeout = self.query_params.get('timeout', 30)
28
+
29
+ # Ensure base_url ends with /
30
+ if not self.base_url.endswith('/'):
31
+ self.base_url += '/'
32
+
33
+ # Setup session for connection pooling
34
+ self.session = requests.Session()
35
+
36
+ def _get_full_url(self, path: str) -> str:
37
+ """Get the full URL for a given path."""
38
+ # Remove leading slash from path to avoid double slashes
39
+ if path.startswith('/'):
40
+ path = path[1:]
41
+ return urljoin(self.base_url, path)
42
+
43
+ def upload(self, source: str, target: str) -> str:
44
+ """Upload a file to the HTTP server.
45
+
46
+ Args:
47
+ source: Local file path to upload
48
+ target: Target path on the HTTP server
49
+
50
+ Returns:
51
+ URL of the uploaded file
52
+ """
53
+ url = self._get_full_url(target)
54
+
55
+ with open(source, 'rb') as f:
56
+ files = {'file': (os.path.basename(source), f)}
57
+
58
+ # Try PUT first (more RESTful), fallback to POST
59
+ response = self.session.put(url, files=files, timeout=self.timeout)
60
+
61
+ if response.status_code == 405: # Method not allowed
62
+ # Reset file pointer and try POST
63
+ f.seek(0)
64
+ response = self.session.post(url, files=files, timeout=self.timeout)
65
+
66
+ response.raise_for_status()
67
+
68
+ return url
69
+
70
+ def exists(self, target: str) -> bool:
71
+ """Check if a file exists on the HTTP server.
72
+
73
+ Args:
74
+ target: Path to check
75
+
76
+ Returns:
77
+ True if file exists, False otherwise
78
+ """
79
+ url = self._get_full_url(target)
80
+
81
+ try:
82
+ response = self.session.head(url, timeout=self.timeout)
83
+ return response.status_code == 200
84
+ except requests.RequestException:
85
+ return False
86
+
87
+ def get_url(self, target: str) -> str:
88
+ """Get the URL for a file.
89
+
90
+ Args:
91
+ target: File path
92
+
93
+ Returns:
94
+ Full URL of the file
95
+ """
96
+ return self._get_full_url(target)
97
+
98
+ def get_pathlib(self, path: str) -> 'HTTPPath':
99
+ """Get a pathlib-like object for HTTP operations.
100
+
101
+ Args:
102
+ path: Path to wrap
103
+
104
+ Returns:
105
+ HTTPPath object
106
+ """
107
+ return HTTPPath(self, path)
108
+
109
+ def get_path_file_count(self, pathlib_obj) -> int:
110
+ """Get file count in a directory.
111
+
112
+ Note: This requires the HTTP server to provide directory listing functionality.
113
+
114
+ Args:
115
+ pathlib_obj: HTTPPath object
116
+
117
+ Returns:
118
+ File count
119
+ """
120
+ # Most HTTP servers don't provide directory listing
121
+ # This would need custom server-side support
122
+ raise NotImplementedError('File counting requires server-side directory listing support')
123
+
124
+ def get_path_total_size(self, pathlib_obj) -> int:
125
+ """Get total size of files in a directory.
126
+
127
+ Note: This requires the HTTP server to provide directory listing functionality.
128
+
129
+ Args:
130
+ pathlib_obj: HTTPPath object
131
+
132
+ Returns:
133
+ Total size in bytes
134
+ """
135
+ # Most HTTP servers don't provide directory listing
136
+ # This would need custom server-side support
137
+ raise NotImplementedError('Size calculation requires server-side directory listing support')
138
+
139
+
140
+ class HTTPPath:
141
+ """A pathlib-like interface for HTTP paths."""
142
+
143
+ def __init__(self, storage: HTTPStorage, path: str):
144
+ self.storage = storage
145
+ self.path = path.strip('/')
146
+
147
+ def __str__(self):
148
+ return self.path
149
+
150
+ def __truediv__(self, other):
151
+ """Join paths using / operator."""
152
+ new_path = f'{self.path}/{other}' if self.path else str(other)
153
+ return HTTPPath(self.storage, new_path)
154
+
155
+ def joinuri(self, *parts):
156
+ """Join path parts."""
157
+ parts = [self.path] + [str(p) for p in parts]
158
+ new_path = '/'.join(p.strip('/') for p in parts if p)
159
+ return HTTPPath(self.storage, new_path)
160
+
161
+ @property
162
+ def name(self):
163
+ """Get the final component of the path."""
164
+ return os.path.basename(self.path)
165
+
166
+ @property
167
+ def parent(self):
168
+ """Get the parent directory."""
169
+ parent_path = os.path.dirname(self.path)
170
+ return HTTPPath(self.storage, parent_path)
171
+
172
+ def exists(self):
173
+ """Check if this path exists."""
174
+ return self.storage.exists(self.path)
175
+
176
+ def is_file(self):
177
+ """Check if this path is a file."""
178
+ # For HTTP, we assume it's a file if it exists
179
+ return self.exists()
180
+
181
+ def read_bytes(self):
182
+ """Read file contents as bytes."""
183
+ url = self.storage.get_url(self.path)
184
+ response = self.storage.session.get(url, timeout=self.storage.timeout)
185
+ response.raise_for_status()
186
+ return response.content
187
+
188
+ def read_text(self, encoding='utf-8'):
189
+ """Read file contents as text."""
190
+ return self.read_bytes().decode(encoding)
@@ -0,0 +1,91 @@
1
+ from upath import UPath
2
+
3
+ from synapse_sdk.utils.storage.providers import BaseStorage
4
+
5
+
6
+ class S3Storage(BaseStorage):
7
+ ENDPOINT_URL = 'https://s3.amazonaws.com'
8
+ DEFAULT_REGION = 'us-east-1'
9
+
10
+ def __init__(self, url):
11
+ super().__init__(url)
12
+
13
+ self.upath = self._get_upath()
14
+
15
+ def _get_upath(self):
16
+ client_kwargs = {'region_name': self.query_params.get('region_name', self.DEFAULT_REGION)}
17
+
18
+ if self.query_params.get('endpoint_url'):
19
+ client_kwargs['endpoint_url'] = self.query_params['endpoint_url']
20
+
21
+ upath_kwargs = {
22
+ 'key': self.query_params['access_key'],
23
+ 'secret': self.query_params['secret_key'],
24
+ 'client_kwargs': client_kwargs,
25
+ }
26
+
27
+ return UPath(
28
+ f's3://{self.query_params["bucket_name"]}',
29
+ **upath_kwargs,
30
+ )
31
+
32
+ def upload(self, source, target):
33
+ with open(source, 'rb') as file:
34
+ (self.upath / target).write_bytes(file.read())
35
+
36
+ return self.get_url(target)
37
+
38
+ def exists(self, target):
39
+ return (self.upath / target).exists()
40
+
41
+ def get_url(self, target):
42
+ return str(self.upath.joinuri(target))
43
+
44
+ def get_pathlib(self, path):
45
+ return self.upath.joinuri(path)
46
+
47
+ def get_path_file_count(self, pathlib_obj: UPath):
48
+ """Get file count in the path from S3 provider.
49
+
50
+ TODO: Need to find a method to get file count using S3 API
51
+
52
+ Args:
53
+ pathlib_obj (UPath): The path to get file count.
54
+
55
+ Returns:
56
+ int: The file count in the path.
57
+ """
58
+ count = 0
59
+ files = list(pathlib_obj.glob('**/*'))
60
+ for file in files:
61
+ if file.is_file():
62
+ count += 1
63
+ return count
64
+
65
+ def get_path_total_size(self, pathlib_obj: UPath):
66
+ """Get total size of the files in the path from S3 provider.
67
+
68
+ TODO: Need to find a method to get total file size using S3 API
69
+
70
+ Args:
71
+ pathlib_obj (UPath): The path to get total size.
72
+
73
+ Returns:
74
+ int: The total size of the files in the path.
75
+ """
76
+ total_size = 0
77
+ for file in pathlib_obj.glob('**/*'):
78
+ if file.is_file():
79
+ total_size += file.stat().st_size
80
+ return total_size
81
+
82
+ def glob(self, pattern):
83
+ """Glob pattern matching in S3 storage.
84
+
85
+ Args:
86
+ pattern (str): The glob pattern to match.
87
+
88
+ Returns:
89
+ list: List of matching paths.
90
+ """
91
+ return list((self.upath / '').glob(pattern))
@@ -0,0 +1,47 @@
1
+ from upath import UPath
2
+
3
+ from synapse_sdk.utils.storage.providers import BaseStorage
4
+
5
+
6
+ class SFTPStorage(BaseStorage):
7
+ def get_pathlib(self, path):
8
+ credentials = self.query_params['params']
9
+ host = self.query_params['host']
10
+ root_path = self.query_params['root_path']
11
+
12
+ username = credentials['username']
13
+ password = credentials['password']
14
+ if path == '/':
15
+ path = ''
16
+ return UPath(f'sftp://{host}', username=username, password=password) / root_path / path
17
+
18
+ def get_path_file_count(self, pathlib_obj: UPath):
19
+ """Get file count in the path from SFTP provider.
20
+
21
+ Args:
22
+ pathlib_obj (UPath): The path to get file count.
23
+
24
+ Returns:
25
+ int: The file count in the path.
26
+ """
27
+ count = 0
28
+ files = list(pathlib_obj.glob('**/*'))
29
+ for file in files:
30
+ if file.is_file():
31
+ count += 1
32
+ return count
33
+
34
+ def get_path_total_size(self, pathlib_obj: UPath):
35
+ """Get total size of the files in the path from SFTP provider.
36
+
37
+ Args:
38
+ pathlib_obj (UPath): The path to get total size.
39
+
40
+ Returns:
41
+ int: The total size of the files in the path.
42
+ """
43
+ total_size = 0
44
+ for file in pathlib_obj.glob('**/*'):
45
+ if file.is_file():
46
+ total_size += file.stat().st_size
47
+ return total_size
@@ -0,0 +1,17 @@
1
+ from synapse_sdk.utils.storage.providers.file_system import FileSystemStorage
2
+ from synapse_sdk.utils.storage.providers.gcp import GCPStorage
3
+ from synapse_sdk.utils.storage.providers.http import HTTPStorage
4
+ from synapse_sdk.utils.storage.providers.s3 import S3Storage
5
+ from synapse_sdk.utils.storage.providers.sftp import SFTPStorage
6
+
7
+ STORAGE_PROVIDERS = {
8
+ 's3': S3Storage,
9
+ 'amazon_s3': S3Storage,
10
+ 'minio': S3Storage,
11
+ 'gs': GCPStorage,
12
+ 'gcp': GCPStorage,
13
+ 'sftp': SFTPStorage,
14
+ 'http': HTTPStorage,
15
+ 'https': HTTPStorage,
16
+ 'file_system': FileSystemStorage,
17
+ }
@@ -0,0 +1,122 @@
1
+ Metadata-Version: 2.4
2
+ Name: synapse-sdk
3
+ Version: 2025.11.7
4
+ Summary: synapse sdk
5
+ Author-email: datamaker <developer@datamaker.io>
6
+ License: MIT
7
+ Classifier: Programming Language :: Python :: 3
8
+ Requires-Python: >=3.10
9
+ Description-Content-Type: text/markdown
10
+ License-File: LICENSE
11
+ Requires-Dist: boto3
12
+ Requires-Dist: click
13
+ Requires-Dist: cookiecutter
14
+ Requires-Dist: requests
15
+ Requires-Dist: tqdm
16
+ Requires-Dist: openpyxl
17
+ Requires-Dist: python-dotenv
18
+ Requires-Dist: pyyaml
19
+ Requires-Dist: pydantic
20
+ Requires-Dist: pyjwt
21
+ Requires-Dist: universal-pathlib
22
+ Requires-Dist: fsspec[gcs,s3,sftp]
23
+ Requires-Dist: inquirer
24
+ Requires-Dist: pillow
25
+ Requires-Dist: websockets
26
+ Requires-Dist: ffmpeg-python==0.2.0
27
+ Requires-Dist: sentry-sdk==2.38.0
28
+ Provides-Extra: all
29
+ Requires-Dist: ray[all]==2.50.0; extra == "all"
30
+ Requires-Dist: python-nmap; extra == "all"
31
+ Requires-Dist: hyperopt; extra == "all"
32
+ Requires-Dist: bayesian-optimization==1.4.3; extra == "all"
33
+ Provides-Extra: devtools
34
+ Requires-Dist: streamlit>=1.29.0; extra == "devtools"
35
+ Requires-Dist: streamlit-ace>=0.1.1; extra == "devtools"
36
+ Provides-Extra: test
37
+ Requires-Dist: pytest>=7.0.0; extra == "test"
38
+ Requires-Dist: pytest-cov>=4.0.0; extra == "test"
39
+ Requires-Dist: pytest-mock>=3.10.0; extra == "test"
40
+ Requires-Dist: pytest-timeout>=2.1.0; extra == "test"
41
+ Requires-Dist: pytest-xdist>=3.0.0; extra == "test"
42
+ Requires-Dist: pytest-html>=3.1.0; extra == "test"
43
+ Requires-Dist: pytest-json-report>=1.5.0; extra == "test"
44
+ Requires-Dist: requests-mock>=1.10.0; extra == "test"
45
+ Requires-Dist: responses>=0.25.0; extra == "test"
46
+ Provides-Extra: dev
47
+ Requires-Dist: pre-commit; extra == "dev"
48
+ Dynamic: license-file
49
+
50
+ # 🧠 Synapse SDK
51
+
52
+ ![lint workflow](https://github.com/datamaker-kr/synapse-sdk/actions/workflows/lint.yml/badge.svg)
53
+ ![test workflow](https://github.com/datamaker-kr/synapse-sdk/actions/workflows/test.yml/badge.svg)
54
+
55
+ A Python SDK for building and managing ML plugins, data annotation workflows, and AI agents.
56
+
57
+ ## ✨ Features
58
+
59
+ - **🔌 Plugin System**: Create and manage ML plugins with categories like neural networks, data validation, and export tools
60
+ - **🤖 Agent Management**: Backend and Ray-based agent clients for distributed AI workflows
61
+ - **🔄 Data Converters**: Convert between formats (COCO, Pascal VOC, YOLO) and annotation schemas
62
+ - **🛠️ Development Tools**: Interactive web dashboard for monitoring and debugging
63
+ - **⚡ CLI Interface**: Command-line tool for configuration, plugin management, and development
64
+
65
+ ## 📅 Versioning
66
+
67
+ Synapse SDK uses **CalVer (Calendar Versioning)**.
68
+ The version format is `YYYY.MM.PATCH`, based on the release year and month.
69
+
70
+ Examples:
71
+
72
+ - `2025.9.5` → 5th release in September 2025
73
+ - `2025.10.1` → 1st release in October 2025
74
+
75
+ We recommend using the latest monthly release.
76
+ If needed, you can pin to a specific month, e.g. `2025.9.*`.
77
+
78
+ ## 🚀 Quick Start
79
+
80
+ ```bash
81
+ pip install synapse-sdk
82
+ synapse --help
83
+ ```
84
+
85
+ ## 🔍 Code Review
86
+
87
+ This repository uses systematic code review with P1-P4 priority rules:
88
+
89
+ ### Using the Review-PR Command
90
+
91
+ Review pull requests using the integrated review system:
92
+
93
+ ```bash
94
+ # Review a PR with English comments
95
+ /review-pr 123
96
+
97
+ # Review a PR with Korean comments
98
+ /review-pr 123 ko
99
+ ```
100
+
101
+ ### Code Review Priority Levels
102
+
103
+ - **[P1_rules.md](P1_rules.md)** - Security and Stability (Critical) 🔴
104
+ - **[P2_rules.md](P2_rules.md)** - Core Functionality (High Priority) 🟡
105
+ - **[P3_rules.md](P3_rules.md)** - Best Practices (Medium Priority) 🟠
106
+ - **[P4_rules.md](P4_rules.md)** - Code Style (Low Priority) 🔵
107
+
108
+ ### Review Process
109
+
110
+ 1. **Automated Analysis**: The review-pr command systematically applies P1-P4 rules
111
+ 2. **Priority-Based Feedback**: Issues are categorized by severity and impact
112
+ 3. **Actionable Comments**: Each issue includes specific recommendations and rule references
113
+ 4. **Language Support**: Comments can be generated in English or Korean
114
+ 5. **Decision Logic**:
115
+ - P1, P2, or P3 violations → Request Changes
116
+ - Only P4 violations or no issues → Approve
117
+
118
+ See [AGENT.md](AGENT.md) for complete development guidelines and code review rules.
119
+
120
+ ## 📚 Documentation
121
+
122
+ *Docs [https://docs.synapse.sh](https://docs.synapse.sh)*