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.
- synapse_sdk/__init__.py +24 -0
- synapse_sdk/cli/__init__.py +310 -5
- synapse_sdk/cli/alias/__init__.py +22 -0
- synapse_sdk/cli/alias/create.py +36 -0
- synapse_sdk/cli/alias/dataclass.py +31 -0
- synapse_sdk/cli/alias/default.py +16 -0
- synapse_sdk/cli/alias/delete.py +15 -0
- synapse_sdk/cli/alias/list.py +19 -0
- synapse_sdk/cli/alias/read.py +15 -0
- synapse_sdk/cli/alias/update.py +17 -0
- synapse_sdk/cli/alias/utils.py +61 -0
- synapse_sdk/cli/code_server.py +687 -0
- synapse_sdk/cli/config.py +440 -0
- synapse_sdk/cli/devtools.py +90 -0
- synapse_sdk/cli/plugin/__init__.py +33 -0
- synapse_sdk/cli/{create_plugin.py → plugin/create.py} +2 -2
- synapse_sdk/cli/plugin/publish.py +45 -0
- synapse_sdk/{plugins/cli → cli/plugin}/run.py +12 -5
- synapse_sdk/clients/agent/__init__.py +9 -3
- synapse_sdk/clients/agent/container.py +133 -0
- synapse_sdk/clients/agent/core.py +19 -0
- synapse_sdk/clients/agent/ray.py +298 -9
- synapse_sdk/clients/backend/__init__.py +41 -12
- synapse_sdk/clients/backend/annotation.py +13 -5
- synapse_sdk/clients/backend/core.py +59 -0
- synapse_sdk/clients/backend/data_collection.py +186 -0
- synapse_sdk/clients/backend/hitl.py +17 -0
- synapse_sdk/clients/backend/integration.py +19 -4
- synapse_sdk/clients/backend/ml.py +10 -7
- synapse_sdk/clients/backend/models.py +78 -0
- synapse_sdk/clients/base.py +381 -34
- synapse_sdk/clients/ray/serve.py +2 -0
- synapse_sdk/clients/validators/collections.py +31 -0
- synapse_sdk/devtools/config.py +94 -0
- synapse_sdk/devtools/docs/.gitignore +20 -0
- synapse_sdk/devtools/docs/README.md +41 -0
- synapse_sdk/devtools/docs/blog/2019-05-28-first-blog-post.md +12 -0
- synapse_sdk/devtools/docs/blog/2019-05-29-long-blog-post.md +44 -0
- synapse_sdk/devtools/docs/blog/2021-08-01-mdx-blog-post.mdx +24 -0
- synapse_sdk/devtools/docs/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg +0 -0
- synapse_sdk/devtools/docs/blog/2021-08-26-welcome/index.md +29 -0
- synapse_sdk/devtools/docs/blog/authors.yml +25 -0
- synapse_sdk/devtools/docs/blog/tags.yml +19 -0
- synapse_sdk/devtools/docs/docs/api/clients/agent.md +43 -0
- synapse_sdk/devtools/docs/docs/api/clients/annotation-mixin.md +378 -0
- synapse_sdk/devtools/docs/docs/api/clients/backend.md +420 -0
- synapse_sdk/devtools/docs/docs/api/clients/base.md +257 -0
- synapse_sdk/devtools/docs/docs/api/clients/core-mixin.md +477 -0
- synapse_sdk/devtools/docs/docs/api/clients/data-collection-mixin.md +422 -0
- synapse_sdk/devtools/docs/docs/api/clients/hitl-mixin.md +554 -0
- synapse_sdk/devtools/docs/docs/api/clients/index.md +391 -0
- synapse_sdk/devtools/docs/docs/api/clients/integration-mixin.md +571 -0
- synapse_sdk/devtools/docs/docs/api/clients/ml-mixin.md +578 -0
- synapse_sdk/devtools/docs/docs/api/clients/ray.md +342 -0
- synapse_sdk/devtools/docs/docs/api/index.md +52 -0
- synapse_sdk/devtools/docs/docs/api/plugins/categories.md +43 -0
- synapse_sdk/devtools/docs/docs/api/plugins/models.md +114 -0
- synapse_sdk/devtools/docs/docs/api/plugins/utils.md +328 -0
- synapse_sdk/devtools/docs/docs/categories.md +0 -0
- synapse_sdk/devtools/docs/docs/cli-usage.md +280 -0
- synapse_sdk/devtools/docs/docs/concepts/index.md +38 -0
- synapse_sdk/devtools/docs/docs/configuration.md +83 -0
- synapse_sdk/devtools/docs/docs/contributing.md +306 -0
- synapse_sdk/devtools/docs/docs/examples/index.md +29 -0
- synapse_sdk/devtools/docs/docs/faq.md +179 -0
- synapse_sdk/devtools/docs/docs/features/converters/index.md +455 -0
- synapse_sdk/devtools/docs/docs/features/index.md +24 -0
- synapse_sdk/devtools/docs/docs/features/utils/file.md +415 -0
- synapse_sdk/devtools/docs/docs/features/utils/network.md +378 -0
- synapse_sdk/devtools/docs/docs/features/utils/storage.md +57 -0
- synapse_sdk/devtools/docs/docs/features/utils/types.md +51 -0
- synapse_sdk/devtools/docs/docs/installation.md +94 -0
- synapse_sdk/devtools/docs/docs/introduction.md +47 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/neural-net-plugins/train-action-overview.md +814 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/pre-annotation-plugin-overview.md +198 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-action-development.md +1645 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-overview.md +717 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-template-development.md +1380 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-action.md +948 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-overview.md +544 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-template.md +766 -0
- synapse_sdk/devtools/docs/docs/plugins/export-plugins.md +1092 -0
- synapse_sdk/devtools/docs/docs/plugins/plugins.md +852 -0
- synapse_sdk/devtools/docs/docs/quickstart.md +78 -0
- synapse_sdk/devtools/docs/docs/troubleshooting.md +519 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/_category_.json +8 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/congratulations.md +23 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-blog-post.md +34 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-document.md +57 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-page.md +43 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/deploy-your-site.md +31 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/markdown-features.mdx +152 -0
- synapse_sdk/devtools/docs/docs/tutorial-extras/_category_.json +7 -0
- synapse_sdk/devtools/docs/docs/tutorial-extras/img/docsVersionDropdown.png +0 -0
- synapse_sdk/devtools/docs/docs/tutorial-extras/img/localeDropdown.png +0 -0
- synapse_sdk/devtools/docs/docs/tutorial-extras/manage-docs-versions.md +55 -0
- synapse_sdk/devtools/docs/docs/tutorial-extras/translate-your-site.md +88 -0
- synapse_sdk/devtools/docs/docusaurus.config.ts +148 -0
- synapse_sdk/devtools/docs/i18n/ko/code.json +325 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/agent.md +43 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/annotation-mixin.md +289 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/backend.md +420 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/base.md +257 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/core-mixin.md +417 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/data-collection-mixin.md +356 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/hitl-mixin.md +192 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/index.md +391 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/integration-mixin.md +479 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/ml-mixin.md +284 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/ray.md +342 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/index.md +52 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/plugins/models.md +114 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/categories.md +0 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/cli-usage.md +280 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/concepts/index.md +38 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/configuration.md +83 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/contributing.md +306 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/examples/index.md +29 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/faq.md +179 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/converters/index.md +30 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/index.md +24 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/file.md +415 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/network.md +378 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/storage.md +60 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/types.md +51 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/installation.md +94 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/introduction.md +47 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/neural-net-plugins/train-action-overview.md +815 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/pre-annotation-plugin-overview.md +198 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-action-development.md +1645 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-overview.md +717 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-template-development.md +1380 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-action.md +948 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-overview.md +544 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-template.md +766 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/export-plugins.md +1092 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/plugins.md +117 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/quickstart.md +78 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/troubleshooting.md +519 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current.json +34 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-theme-classic/footer.json +42 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-theme-classic/navbar.json +18 -0
- synapse_sdk/devtools/docs/package-lock.json +18784 -0
- synapse_sdk/devtools/docs/package.json +48 -0
- synapse_sdk/devtools/docs/sidebars.ts +122 -0
- synapse_sdk/devtools/docs/src/components/HomepageFeatures/index.tsx +71 -0
- synapse_sdk/devtools/docs/src/components/HomepageFeatures/styles.module.css +11 -0
- synapse_sdk/devtools/docs/src/css/custom.css +30 -0
- synapse_sdk/devtools/docs/src/pages/index.module.css +23 -0
- synapse_sdk/devtools/docs/src/pages/index.tsx +21 -0
- synapse_sdk/devtools/docs/src/pages/markdown-page.md +7 -0
- synapse_sdk/devtools/docs/static/.nojekyll +0 -0
- synapse_sdk/devtools/docs/static/img/docusaurus-social-card.jpg +0 -0
- synapse_sdk/devtools/docs/static/img/docusaurus.png +0 -0
- synapse_sdk/devtools/docs/static/img/favicon.ico +0 -0
- synapse_sdk/devtools/docs/static/img/logo.png +0 -0
- synapse_sdk/devtools/docs/static/img/undraw_docusaurus_mountain.svg +171 -0
- synapse_sdk/devtools/docs/static/img/undraw_docusaurus_react.svg +170 -0
- synapse_sdk/devtools/docs/static/img/undraw_docusaurus_tree.svg +40 -0
- synapse_sdk/devtools/docs/tsconfig.json +8 -0
- synapse_sdk/devtools/server.py +41 -0
- synapse_sdk/devtools/streamlit_app/__init__.py +5 -0
- synapse_sdk/devtools/streamlit_app/app.py +128 -0
- synapse_sdk/devtools/streamlit_app/services/__init__.py +11 -0
- synapse_sdk/devtools/streamlit_app/services/job_service.py +233 -0
- synapse_sdk/devtools/streamlit_app/services/plugin_service.py +236 -0
- synapse_sdk/devtools/streamlit_app/services/serve_service.py +95 -0
- synapse_sdk/devtools/streamlit_app/ui/__init__.py +15 -0
- synapse_sdk/devtools/streamlit_app/ui/config_tab.py +76 -0
- synapse_sdk/devtools/streamlit_app/ui/deployment_tab.py +66 -0
- synapse_sdk/devtools/streamlit_app/ui/http_tab.py +125 -0
- synapse_sdk/devtools/streamlit_app/ui/jobs_tab.py +573 -0
- synapse_sdk/devtools/streamlit_app/ui/serve_tab.py +346 -0
- synapse_sdk/devtools/streamlit_app/ui/status_bar.py +118 -0
- synapse_sdk/devtools/streamlit_app/utils/__init__.py +40 -0
- synapse_sdk/devtools/streamlit_app/utils/json_viewer.py +197 -0
- synapse_sdk/devtools/streamlit_app/utils/log_formatter.py +38 -0
- synapse_sdk/devtools/streamlit_app/utils/styles.py +241 -0
- synapse_sdk/devtools/streamlit_app/utils/ui_components.py +289 -0
- synapse_sdk/devtools/streamlit_app.py +10 -0
- synapse_sdk/loggers.py +74 -9
- synapse_sdk/plugins/README.md +1340 -0
- synapse_sdk/plugins/__init__.py +0 -13
- synapse_sdk/plugins/categories/base.py +145 -30
- synapse_sdk/plugins/categories/data_validation/actions/validation.py +72 -0
- synapse_sdk/plugins/categories/data_validation/templates/plugin/validation.py +33 -5
- synapse_sdk/plugins/categories/export/actions/__init__.py +3 -0
- synapse_sdk/plugins/categories/export/actions/export/__init__.py +28 -0
- synapse_sdk/plugins/categories/export/actions/export/action.py +165 -0
- synapse_sdk/plugins/categories/export/actions/export/enums.py +113 -0
- synapse_sdk/plugins/categories/export/actions/export/exceptions.py +53 -0
- synapse_sdk/plugins/categories/export/actions/export/models.py +74 -0
- synapse_sdk/plugins/categories/export/actions/export/run.py +195 -0
- synapse_sdk/plugins/categories/export/actions/export/utils.py +187 -0
- synapse_sdk/plugins/categories/export/templates/config.yaml +21 -0
- synapse_sdk/plugins/categories/export/templates/plugin/__init__.py +390 -0
- synapse_sdk/plugins/categories/export/templates/plugin/export.py +160 -0
- synapse_sdk/plugins/categories/neural_net/actions/deployment.py +29 -14
- synapse_sdk/plugins/categories/neural_net/actions/inference.py +13 -1
- synapse_sdk/plugins/categories/neural_net/actions/train.py +1084 -38
- synapse_sdk/plugins/categories/neural_net/actions/tune.py +534 -0
- synapse_sdk/plugins/categories/neural_net/base/__init__.py +0 -0
- synapse_sdk/plugins/categories/neural_net/base/inference.py +37 -0
- synapse_sdk/plugins/categories/neural_net/templates/config.yaml +30 -5
- synapse_sdk/plugins/categories/neural_net/templates/plugin/inference.py +26 -10
- synapse_sdk/plugins/categories/pre_annotation/actions/__init__.py +4 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation/__init__.py +3 -0
- synapse_sdk/plugins/categories/{export/actions/export.py → pre_annotation/actions/pre_annotation/action.py} +4 -4
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/__init__.py +28 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/action.py +145 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/enums.py +269 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/exceptions.py +14 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/factory.py +76 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/models.py +97 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/orchestrator.py +250 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/run.py +64 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/__init__.py +17 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/annotation.py +287 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/base.py +170 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/extraction.py +83 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/metrics.py +87 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/preprocessor.py +127 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/validation.py +143 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task.py +966 -0
- synapse_sdk/plugins/categories/pre_annotation/templates/config.yaml +19 -0
- synapse_sdk/plugins/categories/pre_annotation/templates/plugin/to_task.py +40 -0
- synapse_sdk/plugins/categories/smart_tool/templates/config.yaml +5 -2
- synapse_sdk/plugins/categories/upload/__init__.py +0 -0
- synapse_sdk/plugins/categories/upload/actions/__init__.py +0 -0
- synapse_sdk/plugins/categories/upload/actions/upload/__init__.py +19 -0
- synapse_sdk/plugins/categories/upload/actions/upload/action.py +232 -0
- synapse_sdk/plugins/categories/upload/actions/upload/context.py +185 -0
- synapse_sdk/plugins/categories/upload/actions/upload/enums.py +471 -0
- synapse_sdk/plugins/categories/upload/actions/upload/exceptions.py +36 -0
- synapse_sdk/plugins/categories/upload/actions/upload/factory.py +138 -0
- synapse_sdk/plugins/categories/upload/actions/upload/models.py +203 -0
- synapse_sdk/plugins/categories/upload/actions/upload/orchestrator.py +183 -0
- synapse_sdk/plugins/categories/upload/actions/upload/registry.py +113 -0
- synapse_sdk/plugins/categories/upload/actions/upload/run.py +179 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/base.py +107 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/cleanup.py +62 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/collection.py +63 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/generate.py +84 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/initialize.py +82 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/metadata.py +235 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/organize.py +203 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/upload.py +97 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/validate.py +71 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/base.py +82 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/batch.py +39 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/single.py +29 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/flat.py +258 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/recursive.py +281 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/excel.py +174 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/none.py +16 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/sync.py +84 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/default.py +60 -0
- synapse_sdk/plugins/categories/upload/actions/upload/utils.py +250 -0
- synapse_sdk/plugins/categories/upload/templates/README.md +470 -0
- synapse_sdk/plugins/categories/upload/templates/config.yaml +33 -0
- synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py +294 -0
- synapse_sdk/plugins/categories/upload/templates/plugin/upload.py +102 -0
- synapse_sdk/plugins/enums.py +3 -1
- synapse_sdk/plugins/models.py +140 -16
- synapse_sdk/plugins/templates/plugin-config-schema.json +406 -0
- synapse_sdk/plugins/templates/schema.json +491 -0
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/config.yaml +1 -0
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/requirements.txt +1 -1
- synapse_sdk/plugins/utils/__init__.py +46 -0
- synapse_sdk/plugins/utils/actions.py +119 -0
- synapse_sdk/plugins/utils/config.py +203 -0
- synapse_sdk/plugins/utils/legacy.py +95 -0
- synapse_sdk/plugins/utils/ray_gcs.py +66 -0
- synapse_sdk/plugins/utils/registry.py +58 -0
- synapse_sdk/shared/__init__.py +25 -0
- synapse_sdk/shared/enums.py +93 -0
- synapse_sdk/types.py +19 -0
- synapse_sdk/utils/converters/__init__.py +240 -0
- synapse_sdk/utils/converters/coco/__init__.py +0 -0
- synapse_sdk/utils/converters/coco/from_dm.py +322 -0
- synapse_sdk/utils/converters/coco/to_dm.py +215 -0
- synapse_sdk/utils/converters/dm/__init__.py +56 -0
- synapse_sdk/utils/converters/dm/from_v1.py +627 -0
- synapse_sdk/utils/converters/dm/to_v1.py +367 -0
- synapse_sdk/utils/converters/pascal/__init__.py +0 -0
- synapse_sdk/utils/converters/pascal/from_dm.py +244 -0
- synapse_sdk/utils/converters/pascal/to_dm.py +214 -0
- synapse_sdk/utils/converters/yolo/__init__.py +0 -0
- synapse_sdk/utils/converters/yolo/from_dm.py +384 -0
- synapse_sdk/utils/converters/yolo/to_dm.py +267 -0
- synapse_sdk/utils/dataset.py +46 -0
- synapse_sdk/utils/encryption.py +158 -0
- synapse_sdk/utils/file/__init__.py +39 -0
- synapse_sdk/utils/file/archive.py +32 -0
- synapse_sdk/utils/file/checksum.py +56 -0
- synapse_sdk/utils/file/chunking.py +31 -0
- synapse_sdk/utils/file/download.py +385 -0
- synapse_sdk/utils/file/encoding.py +40 -0
- synapse_sdk/utils/file/io.py +22 -0
- synapse_sdk/utils/file/video/__init__.py +29 -0
- synapse_sdk/utils/file/video/transcode.py +307 -0
- synapse_sdk/utils/file.py.backup +301 -0
- synapse_sdk/utils/http.py +138 -0
- synapse_sdk/utils/network.py +309 -0
- synapse_sdk/utils/storage/__init__.py +72 -0
- synapse_sdk/utils/storage/providers/__init__.py +183 -0
- synapse_sdk/utils/storage/providers/file_system.py +134 -0
- synapse_sdk/utils/storage/providers/gcp.py +13 -0
- synapse_sdk/utils/storage/providers/http.py +190 -0
- synapse_sdk/utils/storage/providers/s3.py +91 -0
- synapse_sdk/utils/storage/providers/sftp.py +47 -0
- synapse_sdk/utils/storage/registry.py +17 -0
- synapse_sdk-2025.11.7.dist-info/METADATA +122 -0
- synapse_sdk-2025.11.7.dist-info/RECORD +386 -0
- {synapse_sdk-1.0.0a13.dist-info → synapse_sdk-2025.11.7.dist-info}/WHEEL +1 -1
- synapse_sdk/clients/backend/dataset.py +0 -51
- synapse_sdk/plugins/categories/import/actions/import.py +0 -10
- synapse_sdk/plugins/cli/__init__.py +0 -21
- synapse_sdk/plugins/cli/publish.py +0 -37
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.env +0 -24
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.env.dist +0 -24
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/main.py +0 -4
- synapse_sdk/plugins/utils.py +0 -50
- synapse_sdk/utils/file.py +0 -87
- synapse_sdk/utils/storage.py +0 -91
- synapse_sdk-1.0.0a13.dist-info/METADATA +0 -43
- synapse_sdk-1.0.0a13.dist-info/RECORD +0 -111
- /synapse_sdk/{plugins/categories/import → clients/validators}/__init__.py +0 -0
- /synapse_sdk/{plugins/categories/import/actions → devtools}/__init__.py +0 -0
- {synapse_sdk-1.0.0a13.dist-info → synapse_sdk-2025.11.7.dist-info}/entry_points.txt +0 -0
- {synapse_sdk-1.0.0a13.dist-info → synapse_sdk-2025.11.7.dist-info/licenses}/LICENSE +0 -0
- {synapse_sdk-1.0.0a13.dist-info → synapse_sdk-2025.11.7.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,717 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: to-task-overview
|
|
3
|
+
title: ToTask Action - User Guide
|
|
4
|
+
sidebar_position: 2
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# ToTask Action - User Guide
|
|
8
|
+
|
|
9
|
+
The `to_task` action provides automated task annotation capabilities, supporting both file-based and AI inference-based annotation methods with comprehensive validation and progress tracking.
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
The ToTask action annotates tasks in your Synapse project by:
|
|
14
|
+
|
|
15
|
+
- Retrieving annotation data from JSON files (file-based method)
|
|
16
|
+
- Running model inference through pre-processors (inference-based method)
|
|
17
|
+
- Applying annotations to task data automatically
|
|
18
|
+
- Tracking progress and metrics in real-time
|
|
19
|
+
- Handling errors gracefully with automatic rollback
|
|
20
|
+
|
|
21
|
+
## Prerequisites
|
|
22
|
+
|
|
23
|
+
### Common Requirements
|
|
24
|
+
|
|
25
|
+
- Valid Synapse project with tasks
|
|
26
|
+
- Data collection linked to the project
|
|
27
|
+
- Agent with appropriate permissions
|
|
28
|
+
- Tasks matching your filter criteria
|
|
29
|
+
|
|
30
|
+
### File-based Method Requirements
|
|
31
|
+
|
|
32
|
+
- Data units must have files matching the `target_specification_name`
|
|
33
|
+
- JSON files must be accessible via HTTP/HTTPS URLs
|
|
34
|
+
- JSON structure must match task object format
|
|
35
|
+
|
|
36
|
+
### Inference-based Method Requirements
|
|
37
|
+
|
|
38
|
+
- Deployed and active pre-processor plugin
|
|
39
|
+
- Pre-processor must support the data types in your tasks
|
|
40
|
+
- Tasks must have primary images or compatible input data
|
|
41
|
+
|
|
42
|
+
## Basic Usage
|
|
43
|
+
|
|
44
|
+
### File-based Annotation
|
|
45
|
+
|
|
46
|
+
Annotate tasks using JSON data from file URLs stored in data units.
|
|
47
|
+
|
|
48
|
+
```python
|
|
49
|
+
from synapse_sdk.plugins.categories.pre_annotation.actions.to_task import ToTaskAction
|
|
50
|
+
|
|
51
|
+
# Configuration
|
|
52
|
+
params = {
|
|
53
|
+
'name': 'File_Based_Annotation',
|
|
54
|
+
'description': 'Annotate tasks from JSON files',
|
|
55
|
+
'project': 123,
|
|
56
|
+
'agent': 1,
|
|
57
|
+
'task_filters': {
|
|
58
|
+
'status': 'pending',
|
|
59
|
+
'data_collection': 456
|
|
60
|
+
},
|
|
61
|
+
'method': 'file',
|
|
62
|
+
'target_specification_name': 'annotation_data',
|
|
63
|
+
'pre_processor_params': {}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
# Execute
|
|
67
|
+
action = ToTaskAction(run=run_instance, params=params)
|
|
68
|
+
result = action.start()
|
|
69
|
+
|
|
70
|
+
# Check result
|
|
71
|
+
if result['status'] == 'SUCCEEDED':
|
|
72
|
+
print(f"Success: {result['message']}")
|
|
73
|
+
else:
|
|
74
|
+
print(f"Failed: {result['message']}")
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**How it works:**
|
|
78
|
+
|
|
79
|
+
1. System finds tasks matching the filters
|
|
80
|
+
2. For each task, retrieves the data unit
|
|
81
|
+
3. Finds files with specification name `annotation_data`
|
|
82
|
+
4. Downloads JSON data from the file URL
|
|
83
|
+
5. Applies the JSON data to the task
|
|
84
|
+
6. Tracks success/failure for each task
|
|
85
|
+
|
|
86
|
+
### Inference-based Annotation
|
|
87
|
+
|
|
88
|
+
Annotate tasks using AI model inference through a pre-processor.
|
|
89
|
+
|
|
90
|
+
```python
|
|
91
|
+
params = {
|
|
92
|
+
'name': 'Inference_Based_Annotation',
|
|
93
|
+
'description': 'Auto-annotate using AI model',
|
|
94
|
+
'project': 123,
|
|
95
|
+
'agent': 1,
|
|
96
|
+
'task_filters': {
|
|
97
|
+
'status': 'pending',
|
|
98
|
+
'assignee': None # Unassigned tasks only
|
|
99
|
+
},
|
|
100
|
+
'method': 'inference',
|
|
101
|
+
'pre_processor': 789, # Pre-processor plugin release ID
|
|
102
|
+
'pre_processor_params': {
|
|
103
|
+
'confidence_threshold': 0.8,
|
|
104
|
+
'model_config': {
|
|
105
|
+
'batch_size': 16,
|
|
106
|
+
'device': 'cuda'
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
action = ToTaskAction(run=run_instance, params=params)
|
|
112
|
+
result = action.start()
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**How it works:**
|
|
116
|
+
|
|
117
|
+
1. System validates the pre-processor is active
|
|
118
|
+
2. Finds tasks matching the filters
|
|
119
|
+
3. For each task, extracts the primary image URL
|
|
120
|
+
4. Calls pre-processor API with image and parameters
|
|
121
|
+
5. Converts inference results to task object format
|
|
122
|
+
6. Updates task with generated annotations
|
|
123
|
+
|
|
124
|
+
## Parameter Reference
|
|
125
|
+
|
|
126
|
+
### Required Parameters
|
|
127
|
+
|
|
128
|
+
#### `name` (string)
|
|
129
|
+
|
|
130
|
+
- Action name identifier
|
|
131
|
+
- Must not contain whitespace
|
|
132
|
+
- Example: `"File_Annotation_Job"`
|
|
133
|
+
|
|
134
|
+
#### `project` (integer)
|
|
135
|
+
|
|
136
|
+
- Synapse project ID
|
|
137
|
+
- Must be a valid, accessible project
|
|
138
|
+
- Example: `123`
|
|
139
|
+
|
|
140
|
+
#### `agent` (integer)
|
|
141
|
+
|
|
142
|
+
- Agent ID for execution
|
|
143
|
+
- Agent must have permissions on the project
|
|
144
|
+
- Example: `1`
|
|
145
|
+
|
|
146
|
+
#### `task_filters` (object)
|
|
147
|
+
|
|
148
|
+
- Dictionary of filter criteria for task selection
|
|
149
|
+
- Supports all task query parameters
|
|
150
|
+
- Example: `{"status": "pending", "data_collection": 456}`
|
|
151
|
+
|
|
152
|
+
#### `method` (string)
|
|
153
|
+
|
|
154
|
+
- Annotation method type
|
|
155
|
+
- Values: `"file"` or `"inference"`
|
|
156
|
+
- Determines which annotation strategy to use
|
|
157
|
+
|
|
158
|
+
### Method-Specific Parameters
|
|
159
|
+
|
|
160
|
+
#### For File-based Method
|
|
161
|
+
|
|
162
|
+
**`target_specification_name`** (string, required for file method)
|
|
163
|
+
|
|
164
|
+
- Name of the file specification containing annotation JSON
|
|
165
|
+
- Must exist in the project's file specifications
|
|
166
|
+
- Example: `"annotation_data"`
|
|
167
|
+
|
|
168
|
+
#### For Inference-based Method
|
|
169
|
+
|
|
170
|
+
**`pre_processor`** (integer, required for inference method)
|
|
171
|
+
|
|
172
|
+
- Pre-processor plugin release ID
|
|
173
|
+
- Pre-processor must be deployed and active
|
|
174
|
+
- Example: `789`
|
|
175
|
+
|
|
176
|
+
**`pre_processor_params`** (object, optional)
|
|
177
|
+
|
|
178
|
+
- Configuration parameters passed to the pre-processor
|
|
179
|
+
- Structure depends on the pre-processor implementation
|
|
180
|
+
- Example:
|
|
181
|
+
```python
|
|
182
|
+
{
|
|
183
|
+
'confidence_threshold': 0.8,
|
|
184
|
+
'model_config': {
|
|
185
|
+
'batch_size': 16,
|
|
186
|
+
'device': 'cuda',
|
|
187
|
+
'use_fp16': True
|
|
188
|
+
},
|
|
189
|
+
'post_processing': {
|
|
190
|
+
'nms_threshold': 0.5,
|
|
191
|
+
'min_size': 10
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Optional Parameters
|
|
197
|
+
|
|
198
|
+
#### `description` (string)
|
|
199
|
+
|
|
200
|
+
- Human-readable description of the action
|
|
201
|
+
- Example: `"Annotate all pending tasks with model v2 predictions"`
|
|
202
|
+
|
|
203
|
+
## Task Filtering
|
|
204
|
+
|
|
205
|
+
The `task_filters` parameter supports rich filtering options:
|
|
206
|
+
|
|
207
|
+
### Common Filter Examples
|
|
208
|
+
|
|
209
|
+
```python
|
|
210
|
+
# Filter by status
|
|
211
|
+
task_filters = {'status': 'pending'}
|
|
212
|
+
|
|
213
|
+
# Filter by data collection
|
|
214
|
+
task_filters = {'data_collection': 456}
|
|
215
|
+
|
|
216
|
+
# Filter by assignee
|
|
217
|
+
task_filters = {'assignee': 12} # Specific user
|
|
218
|
+
task_filters = {'assignee': None} # Unassigned tasks
|
|
219
|
+
|
|
220
|
+
# Multiple filters (AND logic)
|
|
221
|
+
task_filters = {
|
|
222
|
+
'status': 'pending',
|
|
223
|
+
'data_collection': 456,
|
|
224
|
+
'assignee': None
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
# Filter by creation date
|
|
228
|
+
task_filters = {
|
|
229
|
+
'created_at__gte': '2025-01-01',
|
|
230
|
+
'created_at__lte': '2025-01-31'
|
|
231
|
+
}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### Advanced Filtering
|
|
235
|
+
|
|
236
|
+
```python
|
|
237
|
+
# Combine multiple criteria
|
|
238
|
+
task_filters = {
|
|
239
|
+
'status__in': ['pending', 'in_progress'],
|
|
240
|
+
'data_collection': 456,
|
|
241
|
+
'created_at__gte': '2025-01-01'
|
|
242
|
+
}
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
## Progress and Metrics
|
|
246
|
+
|
|
247
|
+
### Real-time Progress Updates
|
|
248
|
+
|
|
249
|
+
The action provides continuous progress updates:
|
|
250
|
+
|
|
251
|
+
```python
|
|
252
|
+
# Progress is logged automatically during execution
|
|
253
|
+
# Example log output:
|
|
254
|
+
# [annotate_task_data] Progress: 25.0% (25/100)
|
|
255
|
+
# [annotate_task_data] Progress: 50.0% (50/100)
|
|
256
|
+
# [annotate_task_data] Progress: 100.0% (100/100)
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### Metrics Categories
|
|
260
|
+
|
|
261
|
+
**Success Metrics:**
|
|
262
|
+
|
|
263
|
+
- Total tasks processed
|
|
264
|
+
- Successfully annotated count
|
|
265
|
+
- Failed annotation count
|
|
266
|
+
- Standby (not yet processed) count
|
|
267
|
+
|
|
268
|
+
**Status Messages:**
|
|
269
|
+
|
|
270
|
+
```python
|
|
271
|
+
# Example metrics output
|
|
272
|
+
{
|
|
273
|
+
'total': 100,
|
|
274
|
+
'success': 95,
|
|
275
|
+
'failed': 5,
|
|
276
|
+
'stand_by': 0
|
|
277
|
+
}
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### Accessing Metrics
|
|
281
|
+
|
|
282
|
+
Metrics are automatically logged to the run logger and can be accessed through the Synapse platform UI or API.
|
|
283
|
+
|
|
284
|
+
## File-based Annotation Details
|
|
285
|
+
|
|
286
|
+
### Expected JSON Structure
|
|
287
|
+
|
|
288
|
+
The JSON files must follow the task data object format:
|
|
289
|
+
|
|
290
|
+
```json
|
|
291
|
+
{
|
|
292
|
+
"objects": [
|
|
293
|
+
{
|
|
294
|
+
"id": "obj_001",
|
|
295
|
+
"class_id": 1,
|
|
296
|
+
"type": "bbox",
|
|
297
|
+
"coordinates": {
|
|
298
|
+
"x": 100,
|
|
299
|
+
"y": 150,
|
|
300
|
+
"width": 200,
|
|
301
|
+
"height": 180
|
|
302
|
+
},
|
|
303
|
+
"properties": {
|
|
304
|
+
"confidence": 0.95,
|
|
305
|
+
"label": "person"
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
]
|
|
309
|
+
}
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
### File Specification Setup
|
|
313
|
+
|
|
314
|
+
1. **Define file specification** in your project with the target name (e.g., `annotation_data`)
|
|
315
|
+
2. **Upload annotation JSON files** to data units under this specification
|
|
316
|
+
3. **Ensure files are accessible** via HTTP/HTTPS URLs
|
|
317
|
+
4. **Run the ToTask action** with `target_specification_name` matching your specification
|
|
318
|
+
|
|
319
|
+
### Example Workflow
|
|
320
|
+
|
|
321
|
+
```python
|
|
322
|
+
# Step 1: Prepare your data
|
|
323
|
+
# - Upload images to data collection
|
|
324
|
+
# - Upload annotation JSON files with specification "annotations"
|
|
325
|
+
|
|
326
|
+
# Step 2: Configure and run
|
|
327
|
+
params = {
|
|
328
|
+
'name': 'Apply_Pregenerated_Annotations',
|
|
329
|
+
'project': 123,
|
|
330
|
+
'agent': 1,
|
|
331
|
+
'task_filters': {'status': 'pending'},
|
|
332
|
+
'method': 'file',
|
|
333
|
+
'target_specification_name': 'annotations'
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
action = ToTaskAction(run=run_instance, params=params)
|
|
337
|
+
result = action.start()
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
## Inference-based Annotation Details
|
|
341
|
+
|
|
342
|
+
### Pre-processor Requirements
|
|
343
|
+
|
|
344
|
+
Your pre-processor must:
|
|
345
|
+
|
|
346
|
+
- Be deployed and in `RUNNING` status
|
|
347
|
+
- Accept image URLs as input
|
|
348
|
+
- Return results in task-compatible format
|
|
349
|
+
- Support the data types in your tasks
|
|
350
|
+
|
|
351
|
+
### Pre-processor Parameters
|
|
352
|
+
|
|
353
|
+
Configure inference behavior through `pre_processor_params`:
|
|
354
|
+
|
|
355
|
+
```python
|
|
356
|
+
pre_processor_params = {
|
|
357
|
+
# Model configuration
|
|
358
|
+
'model_config': {
|
|
359
|
+
'batch_size': 16,
|
|
360
|
+
'device': 'cuda',
|
|
361
|
+
'use_fp16': True
|
|
362
|
+
},
|
|
363
|
+
|
|
364
|
+
# Inference thresholds
|
|
365
|
+
'confidence_threshold': 0.8,
|
|
366
|
+
'nms_threshold': 0.5,
|
|
367
|
+
|
|
368
|
+
# Post-processing
|
|
369
|
+
'min_object_size': 10,
|
|
370
|
+
'max_objects': 100,
|
|
371
|
+
|
|
372
|
+
# Output formatting
|
|
373
|
+
'include_masks': True,
|
|
374
|
+
'output_format': 'coco'
|
|
375
|
+
}
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
### Inference Workflow
|
|
379
|
+
|
|
380
|
+
```python
|
|
381
|
+
# Step 1: Deploy your pre-processor
|
|
382
|
+
# (See Pre-processor Plugin documentation)
|
|
383
|
+
|
|
384
|
+
# Step 2: Configure inference annotation
|
|
385
|
+
params = {
|
|
386
|
+
'name': 'AI_Auto_Annotation',
|
|
387
|
+
'project': 123,
|
|
388
|
+
'agent': 1,
|
|
389
|
+
'task_filters': {
|
|
390
|
+
'status': 'pending',
|
|
391
|
+
'data_collection': 456
|
|
392
|
+
},
|
|
393
|
+
'method': 'inference',
|
|
394
|
+
'pre_processor': 789,
|
|
395
|
+
'pre_processor_params': {
|
|
396
|
+
'confidence_threshold': 0.85,
|
|
397
|
+
'model_config': {
|
|
398
|
+
'device': 'cuda'
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
# Step 3: Execute
|
|
404
|
+
action = ToTaskAction(run=run_instance, params=params)
|
|
405
|
+
result = action.start()
|
|
406
|
+
|
|
407
|
+
# Step 4: Review results
|
|
408
|
+
# Check success/failed counts in metrics
|
|
409
|
+
# Review annotated tasks in Synapse UI
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
### Pre-processor Management
|
|
413
|
+
|
|
414
|
+
The system automatically:
|
|
415
|
+
|
|
416
|
+
- Checks if pre-processor is running
|
|
417
|
+
- Starts the pre-processor if needed
|
|
418
|
+
- Waits for pre-processor to be ready
|
|
419
|
+
- Handles pre-processor errors gracefully
|
|
420
|
+
|
|
421
|
+
## Error Handling
|
|
422
|
+
|
|
423
|
+
### Task-level Errors
|
|
424
|
+
|
|
425
|
+
Individual task failures don't stop the workflow:
|
|
426
|
+
|
|
427
|
+
```python
|
|
428
|
+
# Example: 100 tasks to process
|
|
429
|
+
# - 95 succeed
|
|
430
|
+
# - 5 fail (e.g., invalid JSON, network errors)
|
|
431
|
+
# Result: Job completes with success=95, failed=5
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
Failed tasks are logged with error details:
|
|
435
|
+
|
|
436
|
+
```
|
|
437
|
+
[Task 123] Failed: Invalid JSON format in annotation file
|
|
438
|
+
[Task 456] Failed: Pre-processor inference timeout
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
### Critical Errors
|
|
442
|
+
|
|
443
|
+
System-level errors trigger immediate rollback:
|
|
444
|
+
|
|
445
|
+
```python
|
|
446
|
+
# Critical error examples:
|
|
447
|
+
# - Project not found
|
|
448
|
+
# - No data collection linked
|
|
449
|
+
# - Target specification doesn't exist
|
|
450
|
+
# - Pre-processor not deployed
|
|
451
|
+
|
|
452
|
+
# On critical error:
|
|
453
|
+
# 1. Workflow stops immediately
|
|
454
|
+
# 2. Completed steps are rolled back
|
|
455
|
+
# 3. Temporary files are cleaned up
|
|
456
|
+
# 4. Error is raised with detailed message
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
### Common Errors and Solutions
|
|
460
|
+
|
|
461
|
+
#### "Project has no data collection"
|
|
462
|
+
|
|
463
|
+
**Solution:** Link a data collection to your project before running.
|
|
464
|
+
|
|
465
|
+
#### "Target specification not found"
|
|
466
|
+
|
|
467
|
+
**Solution:** Verify the `target_specification_name` exists in project file specifications.
|
|
468
|
+
|
|
469
|
+
#### "Pre-processor not active"
|
|
470
|
+
|
|
471
|
+
**Solution:** Deploy and start your pre-processor before running inference annotation.
|
|
472
|
+
|
|
473
|
+
#### "No tasks found matching filters"
|
|
474
|
+
|
|
475
|
+
**Solution:** Check your `task_filters` criteria and verify tasks exist.
|
|
476
|
+
|
|
477
|
+
#### "Failed to download JSON from URL"
|
|
478
|
+
|
|
479
|
+
**Solution:** Ensure annotation files are accessible and URLs are valid.
|
|
480
|
+
|
|
481
|
+
## Best Practices
|
|
482
|
+
|
|
483
|
+
### Performance Optimization
|
|
484
|
+
|
|
485
|
+
1. **Batch size for inference**
|
|
486
|
+
|
|
487
|
+
```python
|
|
488
|
+
pre_processor_params = {
|
|
489
|
+
'model_config': {
|
|
490
|
+
'batch_size': 32 # Adjust based on GPU memory
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
2. **Filter tasks effectively**
|
|
496
|
+
|
|
497
|
+
```python
|
|
498
|
+
# Good: Specific filters
|
|
499
|
+
task_filters = {
|
|
500
|
+
'status': 'pending',
|
|
501
|
+
'data_collection': 456,
|
|
502
|
+
'created_at__gte': '2025-01-01'
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
# Avoid: Too broad
|
|
506
|
+
task_filters = {'status': 'pending'} # May match thousands
|
|
507
|
+
```
|
|
508
|
+
|
|
509
|
+
3. **Use appropriate confidence thresholds**
|
|
510
|
+
|
|
511
|
+
```python
|
|
512
|
+
# Higher threshold = fewer false positives
|
|
513
|
+
pre_processor_params = {
|
|
514
|
+
'confidence_threshold': 0.9 # Strict
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
# Lower threshold = more detections
|
|
518
|
+
pre_processor_params = {
|
|
519
|
+
'confidence_threshold': 0.5 # Permissive
|
|
520
|
+
}
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
### Reliability
|
|
524
|
+
|
|
525
|
+
1. **Validate data before processing**
|
|
526
|
+
|
|
527
|
+
- Check that tasks have required data (images, files)
|
|
528
|
+
- Verify file specifications exist
|
|
529
|
+
- Ensure pre-processors are tested and stable
|
|
530
|
+
|
|
531
|
+
2. **Monitor progress**
|
|
532
|
+
|
|
533
|
+
- Review progress logs during execution
|
|
534
|
+
- Check metrics after completion
|
|
535
|
+
- Investigate failed tasks
|
|
536
|
+
|
|
537
|
+
3. **Handle partial failures**
|
|
538
|
+
```python
|
|
539
|
+
# After execution, check metrics
|
|
540
|
+
if result['status'] == 'SUCCEEDED':
|
|
541
|
+
# Check if all tasks succeeded
|
|
542
|
+
# Review failed count
|
|
543
|
+
# Re-run for failed tasks if needed
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
### Security
|
|
547
|
+
|
|
548
|
+
1. **File access validation**
|
|
549
|
+
|
|
550
|
+
- Ensure JSON files are from trusted sources
|
|
551
|
+
- Validate file content before upload
|
|
552
|
+
- Use secure HTTPS URLs
|
|
553
|
+
|
|
554
|
+
2. **Input validation**
|
|
555
|
+
- Validate pre-processor parameters
|
|
556
|
+
- Check confidence thresholds are reasonable
|
|
557
|
+
- Verify task filters don't expose sensitive data
|
|
558
|
+
|
|
559
|
+
## Complete Examples
|
|
560
|
+
|
|
561
|
+
### Example 1: Bulk File-based Annotation
|
|
562
|
+
|
|
563
|
+
```python
|
|
564
|
+
"""
|
|
565
|
+
Scenario: You have 1000 images with pre-generated annotation JSON files.
|
|
566
|
+
Goal: Apply all annotations to pending tasks.
|
|
567
|
+
"""
|
|
568
|
+
|
|
569
|
+
from synapse_sdk.plugins.categories.pre_annotation.actions.to_task import ToTaskAction
|
|
570
|
+
|
|
571
|
+
params = {
|
|
572
|
+
'name': 'Bulk_File_Annotation_Jan2025',
|
|
573
|
+
'description': 'Apply pre-generated annotations from external tool',
|
|
574
|
+
'project': 123,
|
|
575
|
+
'agent': 1,
|
|
576
|
+
'task_filters': {
|
|
577
|
+
'status': 'pending',
|
|
578
|
+
'data_collection': 456,
|
|
579
|
+
'created_at__gte': '2025-01-01'
|
|
580
|
+
},
|
|
581
|
+
'method': 'file',
|
|
582
|
+
'target_specification_name': 'external_annotations',
|
|
583
|
+
'pre_processor_params': {}
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
action = ToTaskAction(run=run_instance, params=params)
|
|
587
|
+
result = action.start()
|
|
588
|
+
|
|
589
|
+
print(f"Status: {result['status']}")
|
|
590
|
+
print(f"Message: {result['message']}")
|
|
591
|
+
```
|
|
592
|
+
|
|
593
|
+
### Example 2: AI-powered Auto-annotation
|
|
594
|
+
|
|
595
|
+
```python
|
|
596
|
+
"""
|
|
597
|
+
Scenario: You have a trained object detection model deployed as a pre-processor.
|
|
598
|
+
Goal: Auto-annotate all unassigned tasks with high-confidence predictions.
|
|
599
|
+
"""
|
|
600
|
+
|
|
601
|
+
params = {
|
|
602
|
+
'name': 'AI_Object_Detection_v2',
|
|
603
|
+
'description': 'Auto-detect objects using YOLOv8 model',
|
|
604
|
+
'project': 123,
|
|
605
|
+
'agent': 1,
|
|
606
|
+
'task_filters': {
|
|
607
|
+
'status': 'pending',
|
|
608
|
+
'assignee': None, # Only unassigned
|
|
609
|
+
'data_collection': 789
|
|
610
|
+
},
|
|
611
|
+
'method': 'inference',
|
|
612
|
+
'pre_processor': 456,
|
|
613
|
+
'pre_processor_params': {
|
|
614
|
+
'confidence_threshold': 0.85,
|
|
615
|
+
'nms_threshold': 0.5,
|
|
616
|
+
'model_config': {
|
|
617
|
+
'batch_size': 16,
|
|
618
|
+
'device': 'cuda',
|
|
619
|
+
'use_fp16': True
|
|
620
|
+
},
|
|
621
|
+
'class_filter': [1, 2, 3], # Only detect specific classes
|
|
622
|
+
'min_object_size': 20
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
action = ToTaskAction(run=run_instance, params=params)
|
|
627
|
+
result = action.start()
|
|
628
|
+
|
|
629
|
+
# Check results
|
|
630
|
+
if result['status'] == 'SUCCEEDED':
|
|
631
|
+
print("Auto-annotation completed successfully")
|
|
632
|
+
# Review tasks in Synapse UI for quality check
|
|
633
|
+
else:
|
|
634
|
+
print(f"Failed: {result['message']}")
|
|
635
|
+
```
|
|
636
|
+
|
|
637
|
+
### Example 3: Active Learning Workflow
|
|
638
|
+
|
|
639
|
+
```python
|
|
640
|
+
"""
|
|
641
|
+
Scenario: Iterative model improvement with active learning.
|
|
642
|
+
Goal: Auto-annotate with model, review uncertain cases manually.
|
|
643
|
+
"""
|
|
644
|
+
|
|
645
|
+
# Step 1: Auto-annotate with medium confidence
|
|
646
|
+
params_high_confidence = {
|
|
647
|
+
'name': 'Active_Learning_Round1_High',
|
|
648
|
+
'project': 123,
|
|
649
|
+
'agent': 1,
|
|
650
|
+
'task_filters': {'status': 'pending'},
|
|
651
|
+
'method': 'inference',
|
|
652
|
+
'pre_processor': 789,
|
|
653
|
+
'pre_processor_params': {
|
|
654
|
+
'confidence_threshold': 0.9 # High confidence only
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
action = ToTaskAction(run=run_instance, params=params_high_confidence)
|
|
659
|
+
result = action.start()
|
|
660
|
+
|
|
661
|
+
# Step 2: Low confidence cases go to manual review
|
|
662
|
+
# (These remain pending for human annotators)
|
|
663
|
+
|
|
664
|
+
# Step 3: After manual review, retrain model and repeat
|
|
665
|
+
```
|
|
666
|
+
|
|
667
|
+
## Troubleshooting
|
|
668
|
+
|
|
669
|
+
### Debugging Failed Tasks
|
|
670
|
+
|
|
671
|
+
1. **Check logs for specific errors**
|
|
672
|
+
|
|
673
|
+
```
|
|
674
|
+
Look for messages like:
|
|
675
|
+
[Task 123] Failed: <error_message>
|
|
676
|
+
```
|
|
677
|
+
|
|
678
|
+
2. **Verify task data structure**
|
|
679
|
+
|
|
680
|
+
- Ensure tasks have required fields
|
|
681
|
+
- Check data units exist
|
|
682
|
+
- Validate file URLs are accessible
|
|
683
|
+
|
|
684
|
+
3. **Test with small batch first**
|
|
685
|
+
```python
|
|
686
|
+
# Test with 10 tasks first
|
|
687
|
+
task_filters = {
|
|
688
|
+
'status': 'pending',
|
|
689
|
+
'limit': 10
|
|
690
|
+
}
|
|
691
|
+
```
|
|
692
|
+
|
|
693
|
+
### Performance Issues
|
|
694
|
+
|
|
695
|
+
1. **Reduce batch size** if experiencing timeouts
|
|
696
|
+
2. **Filter tasks more narrowly** to process smaller groups
|
|
697
|
+
3. **Check pre-processor resource usage** for inference method
|
|
698
|
+
|
|
699
|
+
### Validation Errors
|
|
700
|
+
|
|
701
|
+
1. **"No tasks found"** - Verify filters and task existence
|
|
702
|
+
2. **"Invalid project"** - Check project ID and permissions
|
|
703
|
+
3. **"Target specification not found"** - Verify file specification name
|
|
704
|
+
4. **"Pre-processor not found"** - Check pre-processor ID and status
|
|
705
|
+
|
|
706
|
+
## Next Steps
|
|
707
|
+
|
|
708
|
+
- **Architecture Details**: Read [ToTask Action Development](./to-task-action-development.md) for technical architecture
|
|
709
|
+
- **Custom Strategies**: Learn how to extend the ToTask action with custom validation and annotation strategies
|
|
710
|
+
- **Pre-processor Guide**: See Pre-processor Plugin documentation for model deployment
|
|
711
|
+
|
|
712
|
+
## Related Documentation
|
|
713
|
+
|
|
714
|
+
- [Pre-annotation Plugin Overview](./pre-annotation-plugin-overview.md)
|
|
715
|
+
- [Upload Plugins](../upload-plugins/upload-plugin-overview.md)
|
|
716
|
+
- Plugin Development Guide
|
|
717
|
+
- API Reference
|