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,544 @@
1
+ ---
2
+ id: upload-plugin-overview
3
+ title: Upload Plugin Overview
4
+ sidebar_position: 1
5
+ ---
6
+
7
+ # Upload Plugin Overview
8
+
9
+ Upload plugins provide comprehensive file upload and data ingestion operations for processing files into the Synapse platform with metadata support, security validation, and organized data unit generation.
10
+
11
+ ## Quick Overview
12
+
13
+ **Category:** Upload
14
+ **Available Actions:** `upload`
15
+ **Execution Method:** Job-based execution
16
+
17
+ ## Key Features
18
+
19
+ - **Multi-Path Mode Support**: Upload files from different locations with individual path settings for each asset
20
+ - **Excel Metadata Integration**: Automatic metadata annotation from Excel files
21
+ - **Flexible File Organization**: Single-path or multi-path modes for different use cases
22
+ - **Batch Processing**: Optimized batch processing for large-scale uploads
23
+ - **Progress Tracking**: Real-time progress updates across workflow stages
24
+ - **Security Validation**: Comprehensive file and Excel security checks
25
+
26
+ ## Use Cases
27
+
28
+ - Bulk file uploads with metadata annotation
29
+ - Excel-based metadata mapping and validation
30
+ - Recursive directory processing
31
+ - Type-based file organization
32
+ - Batch data unit creation
33
+ - Multi-source dataset uploads (sensors, cameras, annotations from different locations)
34
+ - Secure file processing with size and content validation
35
+
36
+ ## Supported Upload Sources
37
+
38
+ - Local file system paths (files and directories)
39
+ - Recursive directory scanning
40
+ - Excel metadata files for enhanced file annotation
41
+ - Mixed file types with automatic organization
42
+ - Distributed data sources with per-asset path configuration
43
+
44
+ ## Configuration Modes
45
+
46
+ ### Mode 1: Single Path Mode (Default - `use_single_path: true`)
47
+
48
+ All assets share one base directory. The system expects subdirectories for each file specification.
49
+
50
+ ```json
51
+ {
52
+ "name": "Standard Upload",
53
+ "use_single_path": true,
54
+ "path": "/data/experiment",
55
+ "is_recursive": true,
56
+ "storage": 1,
57
+ "data_collection": 5
58
+ }
59
+ ```
60
+
61
+ **Expected Directory Structure:**
62
+
63
+ ```
64
+ /data/experiment/
65
+ ├── pcd_1/ # Point clouds
66
+ │ └── *.pcd
67
+ ├── image_1/ # Images
68
+ │ └── *.jpg
69
+ └── json_meta_1/ # Metadata
70
+ └── *.json
71
+ ```
72
+
73
+ ### Mode 2: Multi-Path Mode (`use_single_path: false`)
74
+
75
+ Each asset has its own path and recursive setting. Perfect for distributed data sources.
76
+
77
+ ```json
78
+ {
79
+ "name": "Multi-Source Upload",
80
+ "use_single_path": false,
81
+ "assets": {
82
+ "pcd_1": {
83
+ "path": "/sensors/lidar/scan_001",
84
+ "is_recursive": false
85
+ },
86
+ "image_1": {
87
+ "path": "/sensors/camera/front",
88
+ "is_recursive": true
89
+ },
90
+ "json_meta_1": {
91
+ "path": "/metadata/annotations",
92
+ "is_recursive": false
93
+ }
94
+ },
95
+ "storage": 1,
96
+ "data_collection": 5
97
+ }
98
+ ```
99
+
100
+ **Optional File Specs:**
101
+
102
+ In multi-path mode, file specifications can be marked as optional in the data collection's file specification template:
103
+
104
+ - **Required specs** (`is_required: true`): Must have an asset path in the `assets` parameter
105
+ - **Optional specs** (`is_required: false`): Can be omitted from `assets` - the system will skip them
106
+
107
+ Example with optional spec omitted:
108
+
109
+ ```json
110
+ {
111
+ "name": "Multi-Source Upload",
112
+ "use_single_path": false,
113
+ "assets": {
114
+ "pcd_1": {"path": "/sensors/lidar", "is_recursive": false},
115
+ "image_1": {"path": "/cameras/front", "is_recursive": true}
116
+ // "json_meta_1" is optional and omitted
117
+ },
118
+ "storage": 1,
119
+ "data_collection": 5
120
+ }
121
+ ```
122
+
123
+ The system logs: `"Skipping optional spec json_meta_1: no asset path configured"`
124
+
125
+ ## Basic Usage
126
+
127
+ ### CLI Usage
128
+
129
+ ```bash
130
+ # Single path mode (traditional)
131
+ synapse plugin run upload '{
132
+ "name": "Dataset Upload",
133
+ "use_single_path": true,
134
+ "path": "/data/training",
135
+ "is_recursive": true,
136
+ "storage": 1,
137
+ "data_collection": 5
138
+ }'
139
+
140
+ # Multi-path mode (advanced)
141
+ synapse plugin run upload '{
142
+ "name": "Multi-Sensor Upload",
143
+ "use_single_path": false,
144
+ "assets": {
145
+ "lidar": {"path": "/sensors/lidar", "is_recursive": true},
146
+ "camera": {"path": "/sensors/camera", "is_recursive": false}
147
+ },
148
+ "storage": 1,
149
+ "data_collection": 5
150
+ }'
151
+ ```
152
+
153
+ ### Python API Usage
154
+
155
+ ```python
156
+ from synapse_sdk.plugins.categories.upload.actions.upload.action import UploadAction
157
+
158
+ # Configure upload parameters
159
+ params = {
160
+ "name": "Dataset Upload",
161
+ "use_single_path": true,
162
+ "path": "/data/training_images",
163
+ "is_recursive": True,
164
+ "storage": 1,
165
+ "data_collection": 5,
166
+ "max_file_size_mb": 100
167
+ }
168
+
169
+ action = UploadAction(params=params, plugin_config=plugin_config)
170
+ result = action.start()
171
+
172
+ print(f"Uploaded {result['uploaded_files_count']} files")
173
+ print(f"Generated {result['generated_data_units_count']} data units")
174
+ ```
175
+
176
+ ## Configuration Parameters
177
+
178
+ ### Required Parameters
179
+
180
+ | Parameter | Type | Description | Example |
181
+ | ----------------- | ----- | ------------------ | ------------- |
182
+ | `name` | `str` | Upload name | `"My Upload"` |
183
+ | `storage` | `int` | Storage ID | `1` |
184
+ | `data_collection` | `int` | Data collection ID | `5` |
185
+
186
+ ### Mode-Specific Required Parameters
187
+
188
+ **Single Path Mode** (`use_single_path: true`):
189
+
190
+ - `path` (str): Base directory path
191
+
192
+ **Multi-Path Mode** (`use_single_path: false`):
193
+
194
+ - `assets` (dict): Asset-specific configurations with `path` and `is_recursive` per asset
195
+
196
+ ### Optional Parameters
197
+
198
+ | Parameter | Type | Default | Description |
199
+ | ------------------------------- | ------------- | ------- | --------------------------------- |
200
+ | `description` | `str \| None` | `None` | Upload description |
201
+ | `project` | `int \| None` | `None` | Project ID |
202
+ | `use_single_path` | `bool` | `true` | Mode toggle |
203
+ | `is_recursive` | `bool` | `true` | Recursive scan (single path mode) |
204
+ | `excel_metadata_path` | `str \| None` | `None` | Excel metadata file path |
205
+ | `max_file_size_mb` | `int` | `50` | Maximum file size in MB |
206
+ | `creating_data_unit_batch_size` | `int` | `100` | Batch size for data units |
207
+
208
+ ## Excel Metadata Support
209
+
210
+ The upload plugin provides advanced Excel metadata processing with flexible header support and comprehensive filename matching capabilities.
211
+
212
+ ### Specifying Excel Metadata Files
213
+
214
+ You can provide Excel metadata files using the `excel_metadata_path` parameter. The system supports multiple path resolution strategies:
215
+
216
+ 1. **Absolute Path**: Full filesystem path to the Excel file
217
+ 2. **Storage-Relative Path**: Path relative to the storage's default directory
218
+ 3. **Working Directory-Relative Path**: Path relative to the upload working directory (single-path mode only)
219
+
220
+ **Examples:**
221
+
222
+ ```json
223
+ {
224
+ "excel_metadata_path": "/data/metadata.xlsx" // Absolute path
225
+ }
226
+ ```
227
+
228
+ ```json
229
+ {
230
+ "excel_metadata_path": "metadata.xlsx" // Relative to storage default path
231
+ }
232
+ ```
233
+
234
+ ```json
235
+ {
236
+ "excel_metadata_path": "metadata/dataset_info.xlsx" // Subdirectory in storage
237
+ }
238
+ ```
239
+
240
+ ### Path Resolution Order
241
+
242
+ The system resolves Excel metadata paths in the following order:
243
+
244
+ 1. **Absolute path**: If the path starts with `/`, it's treated as an absolute filesystem path
245
+ 2. **Storage-relative path**: The path is resolved relative to the storage's default path
246
+ 3. **Working directory-relative path** (single-path mode): The path is resolved relative to the current working directory
247
+
248
+ This flexible resolution allows you to store metadata files alongside your data in the configured storage location.
249
+
250
+ ### Default Metadata Files
251
+
252
+ If no `excel_metadata_path` is specified, the system automatically searches for default metadata files in the working directory (single-path mode only):
253
+
254
+ - `meta.xlsx` (checked first)
255
+ - `meta.xls` (fallback)
256
+
257
+ **Python Example:**
258
+
259
+ ```python
260
+ # Explicit path to Excel metadata
261
+ upload_params = {
262
+ "name": "Upload with Metadata",
263
+ "path": "/data/files",
264
+ "storage": 1,
265
+ "data_collection": 5,
266
+ "excel_metadata_path": "metadata/dataset_info.xlsx" // Relative to storage
267
+ }
268
+
269
+ # Using default metadata file (meta.xlsx in working directory)
270
+ upload_params = {
271
+ "name": "Upload with Default Metadata",
272
+ "path": "/data/files",
273
+ "storage": 1,
274
+ "data_collection": 5
275
+ // No excel_metadata_path specified - will use meta.xlsx if present
276
+ }
277
+ ```
278
+
279
+ ### Excel Format
280
+
281
+ Both header formats are supported (case-insensitive):
282
+
283
+ **Option 1: "filename" header**
284
+ | filename | category | description | custom_field |
285
+ |----------|----------|-------------|--------------|
286
+ | image1.jpg | nature | Mountain landscape | high_res |
287
+ | image2.png | urban | City skyline | processed |
288
+
289
+ **Option 2: "filename" header**
290
+ | file_name | category | description | custom_field |
291
+ |-----------|----------|-------------|--------------|
292
+ | image1.jpg | nature | Mountain landscape | high_res |
293
+ | image2.png | urban | City skyline | processed |
294
+
295
+ ### Filename Matching
296
+
297
+ The system uses a 5-tier priority matching algorithm:
298
+
299
+ 1. **Exact stem match** (highest priority): `image1` matches `image1.jpg`
300
+ 2. **Exact filename match**: `image1.jpg` matches `image1.jpg`
301
+ 3. **Metadata key stem match**: `path/image1.ext` stem matches `image1`
302
+ 4. **Partial path matching**: `/uploads/image1.jpg` contains `image1`
303
+ 5. **Full path matching**: Complete path matching for complex structures
304
+
305
+ ### Security Validation
306
+
307
+ Excel files undergo security validation:
308
+
309
+ ```python
310
+ # Default security limits
311
+ max_file_size_mb: 10 # File size limit
312
+ max_rows: 100000 # Row count limit
313
+ max_columns: 50 # Column count limit
314
+ ```
315
+
316
+ ### Configuration
317
+
318
+ Configure Excel security in `config.yaml`:
319
+
320
+ ```yaml
321
+ actions:
322
+ upload:
323
+ excel_config:
324
+ max_file_size_mb: 10
325
+ max_rows: 100000
326
+ max_columns: 50
327
+ ```
328
+
329
+ ## Progress Tracking
330
+
331
+ The upload action tracks progress across three main phases:
332
+
333
+ | Category | Proportion | Description |
334
+ | --------------------- | ---------- | ----------------------------------- |
335
+ | `analyze_collection` | 2% | Parameter validation and setup |
336
+ | `upload_data_files` | 38% | File upload processing |
337
+ | `generate_data_units` | 60% | Data unit creation and finalization |
338
+
339
+ ## Common Use Cases
340
+
341
+ ### 1. Simple Dataset Upload
342
+
343
+ ```json
344
+ {
345
+ "name": "Training Dataset",
346
+ "use_single_path": true,
347
+ "path": "/datasets/training",
348
+ "is_recursive": true,
349
+ "storage": 1,
350
+ "data_collection": 2
351
+ }
352
+ ```
353
+
354
+ ### 2. Multi-Source Sensor Data
355
+
356
+ ```json
357
+ {
358
+ "name": "Multi-Camera Dataset",
359
+ "use_single_path": false,
360
+ "assets": {
361
+ "front_camera": { "path": "/cameras/front", "is_recursive": true },
362
+ "rear_camera": { "path": "/cameras/rear", "is_recursive": true },
363
+ "lidar": { "path": "/sensors/lidar", "is_recursive": false }
364
+ },
365
+ "storage": 1,
366
+ "data_collection": 2
367
+ }
368
+ ```
369
+
370
+ ### 3. Dataset with Metadata (Absolute Path)
371
+
372
+ ```json
373
+ {
374
+ "name": "Annotated Dataset",
375
+ "use_single_path": true,
376
+ "path": "/data/annotated",
377
+ "is_recursive": true,
378
+ "excel_metadata_path": "/data/metadata.xlsx",
379
+ "storage": 1,
380
+ "data_collection": 5
381
+ }
382
+ ```
383
+
384
+ ### 4. Dataset with Metadata (Storage-Relative Path)
385
+
386
+ ```json
387
+ {
388
+ "name": "Upload with Storage-Relative Metadata",
389
+ "use_single_path": true,
390
+ "path": "/data/uploads",
391
+ "is_recursive": true,
392
+ "excel_metadata_path": "metadata/dataset_info.xlsx",
393
+ "storage": 1,
394
+ "data_collection": 5
395
+ }
396
+ ```
397
+
398
+ **Python Example - Using Different Path Types:**
399
+
400
+ ```python
401
+ # Example 1: Absolute path
402
+ params = {
403
+ "name": "Upload with Absolute Path Metadata",
404
+ "path": "/data/uploads",
405
+ "excel_metadata_path": "/data/metadata.xlsx",
406
+ "storage": 1,
407
+ "data_collection": 5
408
+ }
409
+
410
+ # Example 2: Storage-relative path
411
+ params = {
412
+ "name": "Upload with Storage-Relative Metadata",
413
+ "path": "/data/uploads",
414
+ "excel_metadata_path": "metadata/info.xlsx", # Relative to storage default path
415
+ "storage": 1,
416
+ "data_collection": 5
417
+ }
418
+
419
+ # Example 3: Using default metadata file
420
+ params = {
421
+ "name": "Upload with Default Metadata",
422
+ "path": "/data/uploads",
423
+ # No excel_metadata_path - will look for meta.xlsx in working directory
424
+ "storage": 1,
425
+ "data_collection": 5
426
+ }
427
+ ```
428
+
429
+ ## Benefits
430
+
431
+ ### For Users
432
+
433
+ - **Flexibility**: Upload files from multiple different locations in a single operation
434
+ - **Granular Control**: Set recursive search per asset, not globally
435
+ - **Organization**: Map complex file structures to data collection specifications
436
+ - **Use Case Support**: Multi-sensor data collection, distributed datasets, heterogeneous sources
437
+
438
+ ### For Developers
439
+
440
+ - **Backward Compatible**: Existing code continues to work without changes
441
+ - **Type Safe**: Full Pydantic validation with clear error messages
442
+ - **Maintainable**: Clean separation between single-path and multi-path logic
443
+ - **Extensible**: Easy to add more per-asset configuration options in the future
444
+
445
+ ## Next Steps
446
+
447
+ - **For Plugin Developers**: See [BaseUploader Template Guide](./upload-plugin-template.md) for creating custom upload plugins with file processing logic
448
+ - **For SDK/Action Developers**: See [Upload Action Development](./upload-plugin-action.md) for architecture details, strategy patterns, and action internals
449
+
450
+ ## Migration Guide
451
+
452
+ ### From Legacy to Current Version
453
+
454
+ The upload action maintains 100% backward compatibility. The default behavior (`use_single_path=true`) works identically to the previous version.
455
+
456
+ #### No Migration Required
457
+
458
+ Existing configurations continue to work without changes:
459
+
460
+ ```python
461
+ # This legacy usage still works
462
+ params = {
463
+ "name": "My Upload",
464
+ "path": "/data/files",
465
+ "storage": 1,
466
+ "data_collection": 5
467
+ }
468
+ ```
469
+
470
+ #### Adopting Multi-Path Mode
471
+
472
+ To use the new multi-path functionality:
473
+
474
+ 1. Set `use_single_path: false`
475
+ 2. Remove the `path` field (it will be ignored)
476
+ 3. Add `assets` dictionary with per-asset configurations
477
+
478
+ ```python
479
+ # New multi-path mode
480
+ params = {
481
+ "name": "Multi-Source Upload",
482
+ "use_single_path": false,
483
+ "assets": {
484
+ "pcd_1": {"path": "/sensors/lidar", "is_recursive": false},
485
+ "image_1": {"path": "/cameras/front", "is_recursive": true}
486
+ },
487
+ "storage": 1,
488
+ "data_collection": 5
489
+ }
490
+ ```
491
+
492
+ ## Troubleshooting
493
+
494
+ ### Common Issues
495
+
496
+ #### "No Files Found" Error
497
+
498
+ ```bash
499
+ # Check path exists and is readable
500
+ ls -la /path/to/data
501
+ test -r /path/to/data && echo "Readable" || echo "Not readable"
502
+
503
+ # Verify files exist
504
+ find /path/to/data -name "*.jpg" | head -10
505
+ ```
506
+
507
+ #### Excel Processing Errors
508
+
509
+ ```bash
510
+ # Check file format and size
511
+ file /path/to/metadata.xlsx
512
+ ls -lh /path/to/metadata.xlsx
513
+ ```
514
+
515
+ #### Mode Validation Errors
516
+
517
+ - **Single path mode**: Ensure `path` is provided
518
+ - **Multi-path mode**: Ensure `assets` is provided with at least one asset configuration
519
+
520
+ ## Best Practices
521
+
522
+ ### Directory Organization
523
+
524
+ - Use clear, descriptive directory names
525
+ - Keep reasonable directory sizes (< 10,000 files per directory)
526
+ - Use absolute paths for reliability
527
+
528
+ ### Performance Optimization
529
+
530
+ - Enable recursive only when needed
531
+ - Keep Excel files under 5MB for best performance
532
+ - Organize files in balanced directory structures
533
+
534
+ ### Security Considerations
535
+
536
+ - Validate all paths before processing
537
+ - Use read-only permissions for source data
538
+ - Set appropriate Excel size limits
539
+
540
+ ## Support and Resources
541
+
542
+ - **Action Development Guide**: [Upload Plugin Action Development](./upload-plugin-action.md)
543
+ - **Template Development Guide**: [Upload Plugin Template Development](./upload-plugin-template.md)
544
+ - **API Reference**: See action development documentation for detailed API reference