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,284 @@
1
+ ---
2
+ id: ml-mixin
3
+ title: MLClientMixin
4
+ sidebar_position: 16
5
+ ---
6
+
7
+ # MLClientMixin
8
+
9
+ Synapse 백엔드를 위한 머신러닝 모델 관리 및 정답 데이터 작업을 제공합니다.
10
+
11
+ ## 개요
12
+
13
+ `MLClientMixin`은 머신러닝 모델, 정답 데이터셋, 모델 평가 워크플로와 관련된 모든 작업을 처리합니다. 이 믹스인은 `BackendClient`에 자동으로 포함되며 ML 파이프라인 통합을 위한 메서드를 제공합니다.
14
+
15
+ ## 모델 관리
16
+
17
+ ### `list_models(params=None)`
18
+
19
+ 필터링 옵션과 함께 사용 가능한 머신러닝 모델을 나열합니다.
20
+
21
+ ```python
22
+ # 모든 모델 나열
23
+ models = client.list_models()
24
+ for model in models[0]:
25
+ print(f"모델: {model['name']} (ID: {model['id']})")
26
+
27
+ # 특정 프로젝트의 모델 나열
28
+ project_models = client.list_models(params={'project': 123})
29
+
30
+ # 유형별 모델 나열
31
+ classification_models = client.list_models(params={'model_type': 'classification'})
32
+
33
+ # 활성 모델만 나열
34
+ active_models = client.list_models(params={'is_active': True})
35
+ ```
36
+
37
+ **매개변수:**
38
+
39
+ - `params` (dict, 선택사항): 필터링 매개변수
40
+
41
+ **일반적인 필터링 params:**
42
+
43
+ - `project`: 프로젝트 ID로 필터링
44
+ - `model_type`: 모델 유형으로 필터링 (`classification`, `detection`, `segmentation`)
45
+ - `is_active`: 모델 상태로 필터링
46
+ - `created_after`: 생성 날짜로 필터링
47
+ - `search`: 모델 이름 및 설명에서 텍스트 검색
48
+
49
+ **반환값:**
50
+
51
+ - `tuple`: (models_list, total_count)
52
+
53
+ ### `get_model(pk, params=None, url_conversion=None)`
54
+
55
+ 특정 모델에 대한 상세 정보를 가져옵니다.
56
+
57
+ ```python
58
+ # 기본 모델 정보 가져오기
59
+ model = client.get_model(456)
60
+ print(f"모델: {model['name']}")
61
+ print(f"유형: {model['model_type']}")
62
+ print(f"정확도: {model['metrics']['accuracy']}")
63
+
64
+ # 확장된 메트릭과 함께 모델 가져오기
65
+ model = client.get_model(456, params={'expand': 'metrics'})
66
+
67
+ # 파일에 대한 사용자 정의 URL 변환과 함께 모델 가져오기
68
+ model = client.get_model(
69
+ 456,
70
+ url_conversion={'file': lambda url: f"https://cdn.example.com{url}"}
71
+ )
72
+ ```
73
+
74
+ **매개변수:**
75
+
76
+ - `pk` (int): 모델 ID
77
+ - `params` (dict, 선택사항): 쿼리 매개변수
78
+ - `url_conversion` (dict, 선택사항): 파일 필드에 대한 사용자 정의 URL 변환
79
+
80
+ **일반적인 params:**
81
+
82
+ - `expand`: 추가 데이터 포함 (`metrics`, `evaluations`, `versions`)
83
+ - `include_file`: 모델 파일 정보 포함 여부
84
+
85
+ **반환값:**
86
+
87
+ - `dict`: 메타데이터와 메트릭을 포함한 완전한 모델 정보
88
+
89
+ **모델 구조:**
90
+
91
+ - `id`: 모델 ID
92
+ - `name`: 모델 이름
93
+ - `description`: 모델 설명
94
+ - `model_type`: 모델 유형
95
+ - `file`: 모델 파일 참조
96
+ - `metrics`: 성능 메트릭
97
+ - `project`: 연관된 프로젝트 ID
98
+ - `is_active`: 모델이 현재 활성 상태인지 여부
99
+ - `created_at`: 생성 타임스탬프
100
+
101
+ ### `create_model(data)`
102
+
103
+ 파일 업로드와 함께 새로운 머신러닝 모델을 생성합니다.
104
+
105
+ ```python
106
+ # 파일 업로드와 함께 모델 생성
107
+ model_data = {
108
+ 'name': 'Object Detection Model v2',
109
+ 'description': '향상된 정확도를 가진 개선된 객체 탐지 모델',
110
+ 'model_type': 'detection',
111
+ 'project': 123,
112
+ 'metrics': {
113
+ 'accuracy': 0.92,
114
+ 'precision': 0.89,
115
+ 'recall': 0.94,
116
+ 'f1_score': 0.91
117
+ },
118
+ 'configuration': {
119
+ 'input_size': [640, 640],
120
+ 'num_classes': 10,
121
+ 'framework': 'pytorch'
122
+ },
123
+ 'file': '/path/to/model.pkl' # 청크 업로드를 통해 업로드됨
124
+ }
125
+
126
+ new_model = client.create_model(model_data)
127
+ print(f"ID {new_model['id']}로 모델 생성됨")
128
+ ```
129
+
130
+ **매개변수:**
131
+
132
+ - `data` (dict): 모델 구성 및 메타데이터
133
+
134
+ **모델 데이터 구조:**
135
+
136
+ - `name` (str, 필수): 모델 이름
137
+ - `description` (str): 모델 설명
138
+ - `model_type` (str, 필수): 모델 유형
139
+ - `project` (int, 필수): 프로젝트 ID
140
+ - `file` (str, 필수): 모델 파일 경로
141
+ - `metrics` (dict): 성능 메트릭
142
+ - `configuration` (dict): 모델 구성
143
+ - `is_active` (bool): 모델이 활성 상태여야 하는지 여부
144
+
145
+ **반환값:**
146
+
147
+ - `dict`: 생성된 ID가 포함된 생성된 모델
148
+
149
+ **참고:** 모델 파일은 최적 성능을 위해 청크 업로드를 사용하여 자동으로 업로드됩니다.
150
+
151
+ ## 정답 데이터 작업
152
+
153
+ ### `list_ground_truth_events(params=None, url_conversion=None, list_all=False)`
154
+
155
+ 포괄적인 필터링 옵션과 함께 정답 이벤트를 나열합니다.
156
+
157
+ ```python
158
+ # 데이터셋 버전의 정답 이벤트 나열
159
+ events = client.list_ground_truth_events(params={
160
+ 'ground_truth_dataset_versions': [123]
161
+ })
162
+
163
+ # 모든 이벤트 나열 (페이지네이션 자동 처리)
164
+ all_events = client.list_ground_truth_events(list_all=True)
165
+
166
+ # 날짜 필터링과 함께 이벤트 나열
167
+ from datetime import datetime, timedelta
168
+ recent_date = (datetime.now() - timedelta(days=30)).isoformat()
169
+ recent_events = client.list_ground_truth_events(params={
170
+ 'created_after': recent_date,
171
+ 'ground_truth_dataset_versions': [123]
172
+ })
173
+
174
+ # 사용자 정의 URL 변환과 함께 이벤트 나열
175
+ events = client.list_ground_truth_events(
176
+ params={'ground_truth_dataset_versions': [123]},
177
+ url_conversion={'files': lambda url: f"https://cdn.example.com{url}"}
178
+ )
179
+ ```
180
+
181
+ **매개변수:**
182
+
183
+ - `params` (dict, 선택사항): 필터링 매개변수
184
+ - `url_conversion` (dict, 선택사항): 파일 필드에 대한 사용자 정의 URL 변환
185
+ - `list_all` (bool): True인 경우, 페이지네이션을 자동 처리
186
+
187
+ **일반적인 필터링 params:**
188
+
189
+ - `ground_truth_dataset_versions`: 데이터셋 버전 ID 목록
190
+ - `project`: 프로젝트 ID로 필터링
191
+ - `created_after`: 생성 날짜로 필터링
192
+ - `data_type`: 데이터 유형으로 필터링
193
+ - `search`: 이벤트 데이터에서 텍스트 검색
194
+
195
+ **반환값:**
196
+
197
+ - `tuple`: `list_all=False`인 경우 (events_list, total_count)
198
+ - `list`: `list_all=True`인 경우 모든 이벤트
199
+
200
+ **정답 이벤트 구조:**
201
+
202
+ - `id`: 이벤트 ID
203
+ - `data`: 어노테이션/정답 데이터
204
+ - `data_unit`: 연관된 데이터 유닛 정보
205
+ - `ground_truth_dataset_version`: 데이터셋 버전 ID
206
+ - `created_at`: 생성 타임스탬프
207
+ - `metadata`: 추가 이벤트 메타데이터
208
+
209
+ ### `get_ground_truth_version(pk)`
210
+
211
+ 정답 데이터셋 버전에 대한 상세 정보를 가져옵니다.
212
+
213
+ ```python
214
+ version = client.get_ground_truth_version(123)
215
+ print(f"데이터셋 버전: {version['version']}")
216
+ print(f"데이터셋: {version['ground_truth_dataset']['name']}")
217
+ print(f"총 이벤트: {version['event_count']}")
218
+ print(f"생성됨: {version['created_at']}")
219
+ ```
220
+
221
+ **매개변수:**
222
+
223
+ - `pk` (int): 정답 데이터셋 버전 ID
224
+
225
+ **반환값:**
226
+
227
+ - `dict`: 완전한 데이터셋 버전 정보
228
+
229
+ **데이터셋 버전 구조:**
230
+
231
+ - `id`: 버전 ID
232
+ - `version`: 버전 번호/이름
233
+ - `ground_truth_dataset`: 부모 데이터셋 정보
234
+ - `event_count`: 이 버전의 이벤트 수
235
+ - `description`: 버전 설명
236
+ - `is_active`: 버전이 현재 활성 상태인지 여부
237
+ - `created_at`: 생성 타임스탬프
238
+ - `statistics`: 버전 통계 및 메트릭
239
+
240
+ ## 오류 처리
241
+
242
+ ```python
243
+ from synapse_sdk.clients.exceptions import ClientError
244
+
245
+ def robust_model_operations():
246
+ """오류 처리가 있는 안정적인 모델 작업 예제."""
247
+
248
+ try:
249
+ # 모델 가져오기 시도
250
+ model = client.get_model(999)
251
+ except ClientError as e:
252
+ if e.status_code == 404:
253
+ print("모델을 찾을 수 없음")
254
+ return None
255
+ else:
256
+ print(f"모델 가져오기 오류: {e}")
257
+ raise
258
+
259
+ try:
260
+ # 모델 생성 시도
261
+ model_data = {
262
+ 'name': 'Test Model',
263
+ 'model_type': 'classification',
264
+ 'project': 123,
265
+ 'file': '/path/to/model.pkl'
266
+ }
267
+ new_model = client.create_model(model_data)
268
+ except ClientError as e:
269
+ if e.status_code == 400:
270
+ print(f"잘못된 모델 데이터: {e.response}")
271
+ elif e.status_code == 413:
272
+ print("모델 파일이 너무 큼")
273
+ else:
274
+ print(f"모델 생성 오류: {e}")
275
+ return None
276
+
277
+ return new_model
278
+ ```
279
+
280
+ ## 참고
281
+
282
+ - [BackendClient](./backend.md) - 메인 백엔드 클라이언트
283
+ - [DataCollectionClientMixin](./data-collection-mixin.md) - 데이터 관리 작업
284
+ - [IntegrationClientMixin](./integration-mixin.md) - 플러그인 및 작업 관리
@@ -0,0 +1,342 @@
1
+ ---
2
+ id: ray
3
+ title: RayClient
4
+ sidebar_position: 4
5
+ ---
6
+
7
+ # RayClient
8
+
9
+ Apache Ray 클러스터 관리 및 모니터링 기능을 위한 클라이언트입니다.
10
+
11
+ ## 개요
12
+
13
+ `RayClientMixin`은 작업 관리, 실시간 로그 스트리밍, 노드 모니터링, Ray Serve 애플리케이션 제어를 포함한 포괄적인 Ray 클러스터 작업을 제공합니다. Ray 전용 기능으로 `BaseClient`를 확장하는 mixin 클래스로 설계되었습니다.
14
+
15
+ ## 주요 기능
16
+
17
+ - **Job 라이프사이클 관리**: Ray 작업 생성, 모니터링, 관리 및 중지
18
+ - **실시간 로그 스트리밍**: WebSocket 및 HTTP 기반 로그 테일링
19
+ - **노드 및 태스크 모니터링**: 클러스터 리소스 및 태스크 실행 모니터링
20
+ - **Ray Serve 통합**: Ray Serve 애플리케이션 배포 및 관리
21
+ - **강력한 오류 처리**: 입력 유효성 검사 및 정제된 오류 메시지
22
+ - **리소스 관리**: 자동 정리 및 연결 추적
23
+
24
+ ## Constructor
25
+
26
+ ```python
27
+ # RayClientMixin은 일반적으로 mixin으로 사용됩니다
28
+ class RayClient(RayClientMixin):
29
+ def __init__(self, base_url: str, timeout: dict = None):
30
+ super().__init__(base_url, timeout)
31
+ ```
32
+
33
+ ### Parameters
34
+
35
+ - `base_url` (str): Ray 클러스터 대시보드 URL (예: "http://ray-head:8265")
36
+ - `timeout` (dict, 선택사항): 연결 및 읽기 timeout 설정
37
+
38
+ ## 사용법
39
+
40
+ ```python
41
+ from synapse_sdk.clients.agent.ray import RayClientMixin
42
+ from synapse_sdk.clients.base import BaseClient
43
+
44
+ class RayClient(RayClientMixin, BaseClient):
45
+ pass
46
+
47
+ client = RayClient(base_url="http://ray-head:8265")
48
+
49
+ # 모든 작업 나열
50
+ jobs = client.list_jobs()
51
+
52
+ # 특정 작업 세부정보 가져오기
53
+ job = client.get_job('job-12345')
54
+
55
+ # 필요한 경우 실행 중인 작업 중지
56
+ if job['status'] == 'RUNNING':
57
+ result = client.stop_job('job-12345')
58
+ print(f"작업 중지 시작: {result['status']}")
59
+
60
+ # 실시간으로 로그 스트리밍
61
+ for log_line in client.tail_job_logs('job-12345'):
62
+ print(log_line.strip())
63
+ ```
64
+
65
+ ## Job 작업
66
+
67
+ ### `get_job(pk)`
68
+
69
+ 특정 작업에 대한 세부정보를 검색합니다.
70
+
71
+ ```python
72
+ job = client.get_job('job-12345')
73
+ print(f"Job 상태: {job['status']}")
74
+ ```
75
+
76
+ ### `list_jobs()`
77
+
78
+ Ray 클러스터의 모든 작업을 나열합니다.
79
+
80
+ ```python
81
+ jobs = client.list_jobs()
82
+ for job in jobs['results']:
83
+ print(f"Job {job['id']}: {job['status']}")
84
+ ```
85
+
86
+ ### `list_job_logs(pk)`
87
+
88
+ 작업에 대한 정적 로그 항목을 가져옵니다.
89
+
90
+ ```python
91
+ logs = client.list_job_logs('job-12345')
92
+ ```
93
+
94
+ ### `stop_job(pk)`
95
+
96
+ Ray의 stop_job() API를 사용하여 실행 중인 작업을 정상적으로 중지합니다.
97
+
98
+ ```python
99
+ # 실행 중인 작업 중지
100
+ result = client.stop_job('job-12345')
101
+ print(f"중지 상태: {result['status']}")
102
+
103
+ # 중지 오류 처리
104
+ try:
105
+ client.stop_job('job-12345')
106
+ except ClientError as e:
107
+ print(f"중지 실패: {e}")
108
+ ```
109
+
110
+ ## 실시간 로그 스트리밍
111
+
112
+ ### `tail_job_logs(pk, stream_timeout=10, protocol='stream')`
113
+
114
+ WebSocket 또는 HTTP 프로토콜을 사용하여 작업 로그를 스트리밍합니다.
115
+
116
+ ```python
117
+ # HTTP 스트리밍 (기본값, 호환성 높음)
118
+ for log_line in client.tail_job_logs('job-12345', protocol='stream'):
119
+ print(log_line.strip())
120
+
121
+ # WebSocket 스트리밍 (낮은 지연시간)
122
+ for log_line in client.tail_job_logs('job-12345', protocol='websocket'):
123
+ print(log_line.strip())
124
+
125
+ # 사용자 정의 timeout으로
126
+ for log_line in client.tail_job_logs('job-12345', stream_timeout=30):
127
+ if 'ERROR' in log_line:
128
+ break
129
+ ```
130
+
131
+ ### `websocket_tail_job_logs(pk, stream_timeout=10)`
132
+
133
+ 가장 낮은 지연시간을 위해 WebSocket을 통해 로그를 스트리밍합니다.
134
+
135
+ ```python
136
+ try:
137
+ for log_line in client.websocket_tail_job_logs('job-12345'):
138
+ print(log_line.strip())
139
+ if 'COMPLETED' in log_line:
140
+ break
141
+ except ClientError as e:
142
+ print(f"WebSocket 스트리밍 실패: {e}")
143
+ ```
144
+
145
+ ### `stream_tail_job_logs(pk, stream_timeout=10)`
146
+
147
+ HTTP chunked transfer encoding을 통해 로그를 스트리밍합니다.
148
+
149
+ ```python
150
+ for log_line in client.stream_tail_job_logs('job-12345', stream_timeout=60):
151
+ if 'FAILED' in log_line:
152
+ print(f"Job 실패: {log_line}")
153
+ break
154
+ ```
155
+
156
+ ## 노드 작업
157
+
158
+ ### `get_node(pk)`
159
+
160
+ 특정 클러스터 노드에 대한 세부정보를 가져옵니다.
161
+
162
+ ```python
163
+ node = client.get_node('node-abc123')
164
+ print(f"노드 상태: {node['alive']}")
165
+ ```
166
+
167
+ ### `list_nodes()`
168
+
169
+ Ray 클러스터의 모든 노드를 나열합니다.
170
+
171
+ ```python
172
+ nodes = client.list_nodes()
173
+ for node in nodes['results']:
174
+ print(f"노드 {node['node_id']}: {node['state']}")
175
+ ```
176
+
177
+ ## 태스크 작업
178
+
179
+ ### `get_task(pk)`
180
+
181
+ 특정 태스크에 대한 세부정보를 검색합니다.
182
+
183
+ ```python
184
+ task = client.get_task('task-xyz789')
185
+ ```
186
+
187
+ ### `list_tasks()`
188
+
189
+ 클러스터의 모든 태스크를 나열합니다.
190
+
191
+ ```python
192
+ tasks = client.list_tasks()
193
+ ```
194
+
195
+ ## Ray Serve 작업
196
+
197
+ ### `get_serve_application(pk)`
198
+
199
+ Ray Serve 애플리케이션에 대한 세부정보를 가져옵니다.
200
+
201
+ ```python
202
+ app = client.get_serve_application('app-123')
203
+ print(f"애플리케이션 상태: {app['status']}")
204
+ ```
205
+
206
+ ### `list_serve_applications()`
207
+
208
+ 모든 Ray Serve 애플리케이션을 나열합니다.
209
+
210
+ ```python
211
+ apps = client.list_serve_applications()
212
+ ```
213
+
214
+ ### `delete_serve_application(pk)`
215
+
216
+ Ray Serve 애플리케이션을 삭제합니다.
217
+
218
+ ```python
219
+ client.delete_serve_application('app-123')
220
+ ```
221
+
222
+ ## 오류 처리
223
+
224
+ 모든 메서드에는 특정 `ClientError` 예외와 함께 강력한 오류 처리가 포함됩니다:
225
+
226
+ ```python
227
+ from synapse_sdk.clients.exceptions import ClientError
228
+
229
+ try:
230
+ for log_line in client.tail_job_logs('invalid-job'):
231
+ print(log_line)
232
+ except ClientError as e:
233
+ if e.status == 400:
234
+ print("잘못된 작업 ID 또는 매개변수")
235
+ elif e.status == 404:
236
+ print("작업을 찾을 수 없음")
237
+ elif e.status == 503:
238
+ print("Ray 클러스터 연결 실패")
239
+ else:
240
+ print(f"예상치 못한 오류: {e}")
241
+ ```
242
+
243
+ ### 일반적인 오류 코드
244
+
245
+ - **400**: 잘못된 매개변수 (job ID, timeout, protocol) 또는 이미 종료 상태인 작업
246
+ - **404**: 리소스를 찾을 수 없음 (job, node, task, application)
247
+ - **408**: 연결 또는 읽기 timeout
248
+ - **429**: 스트림 제한 초과
249
+ - **500**: WebSocket 라이브러리 사용 불가 또는 내부 오류
250
+ - **503**: Ray 클러스터 연결 실패
251
+
252
+ ## 리소스 관리
253
+
254
+ RayClient에는 자동 리소스 관리가 포함됩니다:
255
+
256
+ - **Thread Pool**: 동시 작업을 위한 5개 작업자 스레드
257
+ - **연결 추적**: 활성 연결을 위한 WeakSet
258
+ - **스트림 제한**: 메모리 고갈 방지
259
+ - **자동 정리**: 소멸 시 리소스 정리
260
+
261
+ ### 스트림 제한
262
+
263
+ 로그 스트리밍을 위한 기본 제한:
264
+
265
+ - 최대 메시지: 10,000
266
+ - 최대 라인: 50,000
267
+ - 최대 바이트: 50MB
268
+ - 최대 메시지 크기: 10KB
269
+ - Queue 크기: 1,000
270
+
271
+ ## 모범 사례
272
+
273
+ ### 1. 프로토콜 선택
274
+
275
+ ```python
276
+ # 사용 가능한 경우 가장 낮은 지연시간을 위해 WebSocket 사용
277
+ try:
278
+ logs = client.tail_job_logs(job_id, protocol='websocket')
279
+ except ClientError:
280
+ # HTTP 스트리밍으로 폴백
281
+ logs = client.tail_job_logs(job_id, protocol='stream')
282
+ ```
283
+
284
+ ### 2. Timeout 관리
285
+
286
+ ```python
287
+ # 장기 실행 작업에 적절한 timeout 사용
288
+ for log_line in client.tail_job_logs(job_id, stream_timeout=300):
289
+ process_log_line(log_line)
290
+ ```
291
+
292
+ ### 3. 오류 복구
293
+
294
+ ```python
295
+ import time
296
+
297
+ def robust_log_streaming(client, job_id, max_retries=3):
298
+ for attempt in range(max_retries):
299
+ try:
300
+ for log_line in client.tail_job_logs(job_id):
301
+ yield log_line
302
+ break
303
+ except ClientError as e:
304
+ if e.status == 503 and attempt < max_retries - 1:
305
+ time.sleep(2 ** attempt) # 지수 백오프
306
+ continue
307
+ raise
308
+ ```
309
+
310
+ ### 4. 리소스 정리
311
+
312
+ ```python
313
+ # 적절한 정리를 위한 컨텍스트 매니저
314
+ class RayClientContext:
315
+ def __init__(self, base_url):
316
+ self.client = RayClient(base_url)
317
+
318
+ def __enter__(self):
319
+ return self.client
320
+
321
+ def __exit__(self, exc_type, exc_val, exc_tb):
322
+ # RayClient.__del__()에 의해 자동으로 정리 처리
323
+ pass
324
+
325
+ with RayClientContext("http://ray-head:8265") as client:
326
+ for log_line in client.tail_job_logs('job-12345'):
327
+ print(log_line.strip())
328
+ ```
329
+
330
+ ## 스레드 안전성
331
+
332
+ RayClient는 적절한 스레드 안전 메커니즘을 통해 동시 사용을 위해 설계되었습니다:
333
+
334
+ - 백그라운드 작업을 위한 스레드 풀
335
+ - 연결 추적을 위한 WeakSet
336
+ - 적절한 리소스 정리 메커니즘
337
+
338
+ ## 참고
339
+
340
+ - [AgentClient](./agent.md) - Agent 전용 작업을 위한 클라이언트
341
+ - [BaseClient](./base.md) - 기본 클라이언트 구현
342
+ - [Network Utilities](../../features/utils/network.md) - 스트리밍 및 유효성 검사 유틸리티
@@ -0,0 +1,52 @@
1
+ ---
2
+ id: index
3
+ title: API 참조
4
+ sidebar_position: 1
5
+ ---
6
+
7
+ # API 참조
8
+
9
+ Synapse SDK 클래스 및 함수에 대한 완전한 참조 문서입니다.
10
+
11
+ ## 개요
12
+
13
+ Synapse SDK API는 다음 주요 모듈로 구성됩니다:
14
+
15
+ ### [클라이언트](./clients/backend.md)
16
+ 백엔드 서비스 및 에이전트와 상호작용하기 위한 클라이언트 클래스들.
17
+
18
+ - **[BackendClient](./clients/backend.md)** - 백엔드 작업을 위한 메인 클라이언트
19
+ - **[AgentClient](./clients/agent.md)** - 에이전트 특정 작업을 위한 클라이언트
20
+ - **[RayClient](./clients/ray.md)** - Ray 클러스터 관리 및 모니터링을 위한 클라이언트
21
+ - **[BaseClient](./clients/base.md)** - 모든 클라이언트의 기본 클래스
22
+
23
+ 핵심 플러그인 시스템 컴포넌트들.
24
+
25
+ ### [유틸리티](../features/utils/file.md)
26
+ 도우미 함수 및 유틸리티들.
27
+
28
+ - **[파일 유틸](../features/utils/file.md)** - 파일 작업 및 처리
29
+ - **[네트워크](../features/utils/network.md)** - 스트리밍, 검증 및 연결 관리
30
+ - **[스토리지](../features/utils/storage.md)** - 스토리지 제공자들 (S3, GCS, SFTP)
31
+ - **[타입](../features/utils/types.md)** - 커스텀 타입 및 필드
32
+
33
+ ## 빠른 참조
34
+
35
+ ### 클라이언트 생성
36
+
37
+ ```python
38
+ from synapse_sdk.clients.backend import BackendClient
39
+
40
+ client = BackendClient(
41
+ base_url="https://api.synapse.sh",
42
+ api_token="your-api-token"
43
+ )
44
+ ```
45
+
46
+ ### 플러그인 실행
47
+
48
+ ### 플러그인 액션 생성
49
+
50
+ ## 타입 어노테이션
51
+
52
+ ## 파일 처리