synapse-sdk 1.0.0a38__tar.gz → 1.0.0a39__tar.gz
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-1.0.0a38/synapse_sdk.egg-info → synapse_sdk-1.0.0a39}/PKG-INFO +2 -1
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/pyproject.toml +2 -1
- synapse_sdk-1.0.0a39/synapse_sdk/plugins/categories/neural_net/actions/deployment.py +58 -0
- synapse_sdk-1.0.0a39/synapse_sdk/plugins/categories/neural_net/actions/gradio.py +149 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/utils/file.py +5 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39/synapse_sdk.egg-info}/PKG-INFO +2 -1
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk.egg-info/SOURCES.txt +1 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk.egg-info/requires.txt +1 -0
- synapse_sdk-1.0.0a38/synapse_sdk/plugins/categories/neural_net/actions/deployment.py +0 -107
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/.github/workflows/lint.yml +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/.github/workflows/pypi-publish.yml +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/.gitignore +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/.pre-commit-config.yaml +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/LICENSE +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/README.md +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/locale/en/LC_MESSAGES/messages.mo +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/locale/en/LC_MESSAGES/messages.po +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/locale/ko/LC_MESSAGES/messages.mo +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/locale/ko/LC_MESSAGES/messages.po +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/requirements.test.txt +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/requirements.txt +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/setup.cfg +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/cli/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/cli/alias/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/cli/alias/create.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/cli/alias/dataclass.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/cli/alias/default.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/cli/alias/delete.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/cli/alias/list.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/cli/alias/read.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/cli/alias/update.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/cli/alias/utils.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/cli/plugin/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/cli/plugin/create.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/cli/plugin/publish.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/cli/plugin/run.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/clients/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/clients/agent/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/clients/agent/core.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/clients/agent/ray.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/clients/agent/service.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/clients/backend/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/clients/backend/annotation.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/clients/backend/core.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/clients/backend/dataset.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/clients/backend/hitl.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/clients/backend/integration.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/clients/backend/ml.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/clients/backend/models.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/clients/base.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/clients/exceptions.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/clients/ray/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/clients/ray/core.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/clients/ray/serve.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/clients/utils.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/clients/validators/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/clients/validators/collections.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/i18n.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/loggers.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/base.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/data_validation/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/data_validation/actions/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/data_validation/actions/validation.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/data_validation/templates/config.yaml +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/data_validation/templates/plugin/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/data_validation/templates/plugin/validation.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/decorators.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/export/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/export/actions/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/export/actions/export.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/export/enums.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/export/templates/config.yaml +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/export/templates/plugin/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/export/templates/plugin/export.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/neural_net/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/neural_net/actions/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/neural_net/actions/inference.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/neural_net/actions/test.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/neural_net/actions/train.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/neural_net/actions/tune.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/neural_net/base/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/neural_net/base/inference.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/neural_net/templates/config.yaml +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/neural_net/templates/plugin/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/neural_net/templates/plugin/inference.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/neural_net/templates/plugin/test.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/neural_net/templates/plugin/train.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/post_annotation/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/post_annotation/actions/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/post_annotation/actions/post_annotation.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/post_annotation/templates/config.yaml +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/post_annotation/templates/plugin/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/post_annotation/templates/plugin/post_annotation.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/pre_annotation/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/pre_annotation/actions/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/pre_annotation/templates/config.yaml +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/pre_annotation/templates/plugin/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/pre_annotation/templates/plugin/pre_annotation.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/registry.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/smart_tool/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/smart_tool/actions/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/smart_tool/actions/auto_label.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/smart_tool/templates/config.yaml +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/smart_tool/templates/plugin/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/smart_tool/templates/plugin/auto_label.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/templates.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/upload/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/upload/actions/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/upload/actions/upload.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/upload/templates/config.yaml +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/upload/templates/plugin/upload.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/enums.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/exceptions.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/models.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/templates/cookiecutter.json +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/templates/hooks/post_gen_project.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/templates/hooks/pre_prompt.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.gitignore +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.pre-commit-config.yaml +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/README.md +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/config.yaml +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/plugin/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/pyproject.toml +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/requirements.txt +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/upload.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/utils.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/shared/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/shared/enums.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/types.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/utils/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/utils/dataset.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/utils/debug.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/utils/module_loading.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/utils/network.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/utils/pydantic/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/utils/pydantic/config.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/utils/pydantic/errors.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/utils/pydantic/validators.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/utils/storage/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/utils/storage/providers/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/utils/storage/providers/gcp.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/utils/storage/providers/s3.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/utils/storage/providers/sftp.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/utils/storage/registry.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/utils/string.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk.egg-info/dependency_links.txt +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk.egg-info/entry_points.txt +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk.egg-info/top_level.txt +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/tests/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/tests/clients/__init__.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/tests/clients/test_backend_models.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/tests/clients/test_base_client.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/tests/clients/test_collection_validators.py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/tests/utils/__init__,py +0 -0
- {synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/tests/utils/test_debug.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: synapse-sdk
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.0a39
|
|
4
4
|
Summary: synapse sdk
|
|
5
5
|
Author-email: datamaker <developer@datamaker.io>
|
|
6
6
|
License: MIT
|
|
@@ -21,6 +21,7 @@ Requires-Dist: universal-pathlib
|
|
|
21
21
|
Requires-Dist: fsspec[gcs,s3,sftp]
|
|
22
22
|
Provides-Extra: all
|
|
23
23
|
Requires-Dist: ray[all]; extra == "all"
|
|
24
|
+
Requires-Dist: python-nmap; extra == "all"
|
|
24
25
|
Dynamic: license-file
|
|
25
26
|
|
|
26
27
|
This is the SDK to develop synapse plugins
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
from synapse_sdk.clients.exceptions import ClientError
|
|
2
|
+
from synapse_sdk.plugins.categories.base import Action
|
|
3
|
+
from synapse_sdk.plugins.categories.decorators import register_action
|
|
4
|
+
from synapse_sdk.plugins.enums import PluginCategory, RunMethod
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@register_action
|
|
8
|
+
class DeploymentAction(Action):
|
|
9
|
+
name = 'deployment'
|
|
10
|
+
category = PluginCategory.NEURAL_NET
|
|
11
|
+
method = RunMethod.JOB
|
|
12
|
+
|
|
13
|
+
def get_actor_options(self):
|
|
14
|
+
options = {'runtime_env': self.get_runtime_env()}
|
|
15
|
+
for option in ['num_cpus', 'num_gpus']:
|
|
16
|
+
option_value = self.params.get(option)
|
|
17
|
+
if option_value:
|
|
18
|
+
options[option] = option_value
|
|
19
|
+
return options
|
|
20
|
+
|
|
21
|
+
def start(self):
|
|
22
|
+
from ray import serve
|
|
23
|
+
|
|
24
|
+
from synapse_sdk.plugins.categories.neural_net.base.inference import app
|
|
25
|
+
|
|
26
|
+
self.ray_init()
|
|
27
|
+
|
|
28
|
+
ray_actor_options = self.get_actor_options()
|
|
29
|
+
|
|
30
|
+
deployment = serve.deployment(ray_actor_options=ray_actor_options)(serve.ingress(app)(self.entrypoint)).bind(
|
|
31
|
+
self.envs['SYNAPSE_PLUGIN_RUN_HOST']
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
serve.delete(self.plugin_release.code)
|
|
35
|
+
|
|
36
|
+
# TODO add run object
|
|
37
|
+
serve.run(
|
|
38
|
+
deployment,
|
|
39
|
+
name=self.plugin_release.code,
|
|
40
|
+
route_prefix=f'/{self.plugin_release.checksum}',
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
# 백엔드에 ServeApplication 추가
|
|
44
|
+
serve_application = self.create_serve_application()
|
|
45
|
+
return {'serve_application': serve_application['id'] if serve_application else None}
|
|
46
|
+
|
|
47
|
+
def create_serve_application(self):
|
|
48
|
+
if self.job_id:
|
|
49
|
+
try:
|
|
50
|
+
serve_application = self.ray_client.get_serve_application(self.plugin_release.code)
|
|
51
|
+
return self.client.create_serve_application({
|
|
52
|
+
'job': self.job_id,
|
|
53
|
+
'status': serve_application['status'],
|
|
54
|
+
'data': serve_application,
|
|
55
|
+
})
|
|
56
|
+
except ClientError:
|
|
57
|
+
pass
|
|
58
|
+
return None
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import contextlib
|
|
2
|
+
import subprocess
|
|
3
|
+
from functools import cached_property
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
from synapse_sdk.plugins.categories.base import Action
|
|
7
|
+
from synapse_sdk.plugins.categories.decorators import register_action
|
|
8
|
+
from synapse_sdk.plugins.enums import PluginCategory, RunMethod
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@register_action
|
|
12
|
+
class GradioAction(Action):
|
|
13
|
+
name = 'gradio'
|
|
14
|
+
category = PluginCategory.NEURAL_NET
|
|
15
|
+
method = RunMethod.JOB
|
|
16
|
+
|
|
17
|
+
@property
|
|
18
|
+
def working_directory(self):
|
|
19
|
+
dir = Path.cwd() / self.config['directory'].replace('.', '/')
|
|
20
|
+
assert dir.is_dir(), f'Working directory {dir} does not exist.'
|
|
21
|
+
return dir
|
|
22
|
+
|
|
23
|
+
@property
|
|
24
|
+
def _requirements(self):
|
|
25
|
+
return self.config.get('requirements', ['gradio>=5'])
|
|
26
|
+
|
|
27
|
+
@property
|
|
28
|
+
def tag(self):
|
|
29
|
+
_tag = f'{self.plugin_release.code}-{self.plugin_release.checksum}'
|
|
30
|
+
return _tag.replace('@', '-')
|
|
31
|
+
|
|
32
|
+
@cached_property
|
|
33
|
+
def deploy_port(self):
|
|
34
|
+
return self._get_avail_ports_host()
|
|
35
|
+
|
|
36
|
+
def deploy(self):
|
|
37
|
+
self.run.log('deploy', 'Start deploying')
|
|
38
|
+
|
|
39
|
+
try:
|
|
40
|
+
# Write Dockerfile and requirements.txt
|
|
41
|
+
path_dockerfile = self.write_dockerfile_template()
|
|
42
|
+
self.write_requirements(path_dockerfile.parent / 'requirements.txt')
|
|
43
|
+
|
|
44
|
+
# Build docker image
|
|
45
|
+
self.build_docker_image(path_dockerfile)
|
|
46
|
+
|
|
47
|
+
# Run docker image
|
|
48
|
+
self.run_docker_image()
|
|
49
|
+
except Exception as e:
|
|
50
|
+
self.run.log('deploy', f'Error: {e}')
|
|
51
|
+
raise e
|
|
52
|
+
|
|
53
|
+
def start(self):
|
|
54
|
+
self.deploy()
|
|
55
|
+
return {'endpoint': f'http://localhost:{self.deploy_port}'}
|
|
56
|
+
|
|
57
|
+
def write_dockerfile_template(self):
|
|
58
|
+
dockerfile_path = self.working_directory / 'Dockerfile'
|
|
59
|
+
|
|
60
|
+
with open(dockerfile_path, 'w') as f:
|
|
61
|
+
f.write("""FROM python:3.10
|
|
62
|
+
WORKDIR /home/user/app
|
|
63
|
+
|
|
64
|
+
RUN pip install --no-cache-dir pip -U && \\
|
|
65
|
+
pip install --no-cache-dir uvicorn
|
|
66
|
+
|
|
67
|
+
RUN apt-get update && \\
|
|
68
|
+
apt-get install -y curl && \\
|
|
69
|
+
curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \\
|
|
70
|
+
apt-get install -y nodejs && \\
|
|
71
|
+
rm -rf /var/lib/apt/lists/* && \\
|
|
72
|
+
apt-get clean
|
|
73
|
+
|
|
74
|
+
COPY . /home/user/app
|
|
75
|
+
|
|
76
|
+
RUN pip install --no-cache-dir -r requirements.txt
|
|
77
|
+
|
|
78
|
+
EXPOSE 7860
|
|
79
|
+
|
|
80
|
+
CMD ["python", "app.py"]
|
|
81
|
+
""")
|
|
82
|
+
return dockerfile_path
|
|
83
|
+
|
|
84
|
+
def write_requirements(self, path):
|
|
85
|
+
with open(path, 'w') as f:
|
|
86
|
+
f.write('\n'.join(self._requirements))
|
|
87
|
+
|
|
88
|
+
def build_docker_image(self, path_dockerfile):
|
|
89
|
+
self.run.log('deploy', 'Start building docker image')
|
|
90
|
+
result = subprocess.run(
|
|
91
|
+
[
|
|
92
|
+
'docker',
|
|
93
|
+
'build',
|
|
94
|
+
'-t',
|
|
95
|
+
self.tag,
|
|
96
|
+
'-f',
|
|
97
|
+
str(path_dockerfile),
|
|
98
|
+
'.',
|
|
99
|
+
],
|
|
100
|
+
cwd=self.working_directory,
|
|
101
|
+
check=True,
|
|
102
|
+
)
|
|
103
|
+
print(result)
|
|
104
|
+
|
|
105
|
+
@staticmethod
|
|
106
|
+
def _get_avail_ports_host(start_port=8900, end_port=8999):
|
|
107
|
+
import nmap
|
|
108
|
+
|
|
109
|
+
nm = nmap.PortScanner()
|
|
110
|
+
|
|
111
|
+
scan_range = f'{start_port}-{end_port}'
|
|
112
|
+
nm.scan(hosts='host.docker.internal', arguments=f'-p {scan_range}')
|
|
113
|
+
|
|
114
|
+
try:
|
|
115
|
+
open_ports = nm['host.docker.internal']['tcp'].keys()
|
|
116
|
+
open_ports = [int(port) for port in open_ports]
|
|
117
|
+
except KeyError:
|
|
118
|
+
open_ports = []
|
|
119
|
+
|
|
120
|
+
for port in range(start_port, end_port + 1):
|
|
121
|
+
if port not in open_ports:
|
|
122
|
+
return port
|
|
123
|
+
|
|
124
|
+
raise IOError(f'No free ports available in range {start_port}-{end_port}')
|
|
125
|
+
|
|
126
|
+
def run_docker_image(self):
|
|
127
|
+
self.run.log('deploy', 'Start running docker image')
|
|
128
|
+
|
|
129
|
+
# Check for existing container
|
|
130
|
+
self.run.log('deploy', 'Check for existing container')
|
|
131
|
+
with contextlib.suppress(subprocess.CalledProcessError):
|
|
132
|
+
subprocess.run(['docker', 'stop', self.tag], check=True)
|
|
133
|
+
subprocess.run(['docker', 'rm', self.tag], check=True)
|
|
134
|
+
|
|
135
|
+
# Run docker image
|
|
136
|
+
self.run.log('deploy', 'Starting docker container')
|
|
137
|
+
subprocess.run(
|
|
138
|
+
[
|
|
139
|
+
'docker',
|
|
140
|
+
'run',
|
|
141
|
+
'-d',
|
|
142
|
+
'--name',
|
|
143
|
+
self.tag,
|
|
144
|
+
'-p',
|
|
145
|
+
f'{self.deploy_port}:7860',
|
|
146
|
+
self.tag,
|
|
147
|
+
],
|
|
148
|
+
check=True,
|
|
149
|
+
)
|
|
@@ -4,6 +4,7 @@ import hashlib
|
|
|
4
4
|
import json
|
|
5
5
|
import mimetypes
|
|
6
6
|
import operator
|
|
7
|
+
import re
|
|
7
8
|
import zipfile
|
|
8
9
|
from functools import reduce
|
|
9
10
|
from pathlib import Path
|
|
@@ -197,6 +198,10 @@ def convert_file_to_base64(file_path):
|
|
|
197
198
|
Returns:
|
|
198
199
|
str: Base64 encoded string of the file contents
|
|
199
200
|
"""
|
|
201
|
+
# FIXME base64 is sent sometimes.
|
|
202
|
+
if file_path.startswith('data:'):
|
|
203
|
+
return file_path
|
|
204
|
+
|
|
200
205
|
# Convert string path to Path object
|
|
201
206
|
path = Path(file_path)
|
|
202
207
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: synapse-sdk
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.0a39
|
|
4
4
|
Summary: synapse sdk
|
|
5
5
|
Author-email: datamaker <developer@datamaker.io>
|
|
6
6
|
License: MIT
|
|
@@ -21,6 +21,7 @@ Requires-Dist: universal-pathlib
|
|
|
21
21
|
Requires-Dist: fsspec[gcs,s3,sftp]
|
|
22
22
|
Provides-Extra: all
|
|
23
23
|
Requires-Dist: ray[all]; extra == "all"
|
|
24
|
+
Requires-Dist: python-nmap; extra == "all"
|
|
24
25
|
Dynamic: license-file
|
|
25
26
|
|
|
26
27
|
This is the SDK to develop synapse plugins
|
|
@@ -85,6 +85,7 @@ synapse_sdk/plugins/categories/export/templates/plugin/export.py
|
|
|
85
85
|
synapse_sdk/plugins/categories/neural_net/__init__.py
|
|
86
86
|
synapse_sdk/plugins/categories/neural_net/actions/__init__.py
|
|
87
87
|
synapse_sdk/plugins/categories/neural_net/actions/deployment.py
|
|
88
|
+
synapse_sdk/plugins/categories/neural_net/actions/gradio.py
|
|
88
89
|
synapse_sdk/plugins/categories/neural_net/actions/inference.py
|
|
89
90
|
synapse_sdk/plugins/categories/neural_net/actions/test.py
|
|
90
91
|
synapse_sdk/plugins/categories/neural_net/actions/train.py
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
from packaging import version
|
|
2
|
-
|
|
3
|
-
from synapse_sdk.clients.exceptions import ClientError
|
|
4
|
-
from synapse_sdk.i18n import gettext as _
|
|
5
|
-
from synapse_sdk.plugins.categories.base import Action
|
|
6
|
-
from synapse_sdk.plugins.categories.decorators import register_action
|
|
7
|
-
from synapse_sdk.plugins.enums import PluginCategory, RunMethod
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
@register_action
|
|
11
|
-
class DeploymentAction(Action):
|
|
12
|
-
name = 'deployment'
|
|
13
|
-
category = PluginCategory.NEURAL_NET
|
|
14
|
-
method = RunMethod.JOB
|
|
15
|
-
|
|
16
|
-
def get_actor_options(self):
|
|
17
|
-
options = {'runtime_env': self.get_runtime_env()}
|
|
18
|
-
for option in ['num_cpus', 'num_gpus']:
|
|
19
|
-
option_value = self.params.get(option)
|
|
20
|
-
if option_value:
|
|
21
|
-
options[option] = option_value
|
|
22
|
-
return options
|
|
23
|
-
|
|
24
|
-
def start(self):
|
|
25
|
-
from ray import serve
|
|
26
|
-
|
|
27
|
-
from synapse_sdk.plugins.categories.neural_net.base.inference import app
|
|
28
|
-
|
|
29
|
-
self.ray_init()
|
|
30
|
-
|
|
31
|
-
ray_actor_options = self.get_actor_options()
|
|
32
|
-
|
|
33
|
-
if self.is_gradio_deployment:
|
|
34
|
-
from ray.serve.gradio_integrations import GradioServer
|
|
35
|
-
|
|
36
|
-
self.assert_gradio_version()
|
|
37
|
-
|
|
38
|
-
# GradioIngress differs from serve.ingress(app), thus the difference in self.entrypoint callable
|
|
39
|
-
try:
|
|
40
|
-
entrypoint = self.entrypoint().app
|
|
41
|
-
except (TypeError, ImportError):
|
|
42
|
-
raise ClientError(
|
|
43
|
-
400,
|
|
44
|
-
_(
|
|
45
|
-
'Gradio app is not callable.'
|
|
46
|
-
'Please ensure that your Deployment class defines a callable `app` function'
|
|
47
|
-
),
|
|
48
|
-
)
|
|
49
|
-
|
|
50
|
-
deployment = GradioServer.options(ray_actor_options=ray_actor_options).bind(entrypoint)
|
|
51
|
-
else:
|
|
52
|
-
deployment = serve.deployment(ray_actor_options=ray_actor_options)(
|
|
53
|
-
serve.ingress(app)(self.entrypoint)
|
|
54
|
-
).bind(self.envs['SYNAPSE_PLUGIN_RUN_HOST'])
|
|
55
|
-
|
|
56
|
-
serve.delete(self.plugin_release.code)
|
|
57
|
-
|
|
58
|
-
# TODO add run object
|
|
59
|
-
serve.run(
|
|
60
|
-
deployment,
|
|
61
|
-
name=self.plugin_release.code,
|
|
62
|
-
route_prefix=f'/{self.plugin_release.checksum}',
|
|
63
|
-
)
|
|
64
|
-
|
|
65
|
-
# 백엔드에 ServeApplication 추가
|
|
66
|
-
serve_application = self.create_serve_application()
|
|
67
|
-
return {'serve_application': serve_application['id'] if serve_application else None}
|
|
68
|
-
|
|
69
|
-
def create_serve_application(self):
|
|
70
|
-
if self.job_id:
|
|
71
|
-
try:
|
|
72
|
-
serve_application = self.ray_client.get_serve_application(self.plugin_release.code)
|
|
73
|
-
return self.client.create_serve_application({
|
|
74
|
-
'job': self.job_id,
|
|
75
|
-
'status': serve_application['status'],
|
|
76
|
-
'data': serve_application,
|
|
77
|
-
})
|
|
78
|
-
except ClientError:
|
|
79
|
-
pass
|
|
80
|
-
return None
|
|
81
|
-
|
|
82
|
-
@property
|
|
83
|
-
def is_gradio_deployment(self):
|
|
84
|
-
return self.config.get('gradio_app', False)
|
|
85
|
-
|
|
86
|
-
def assert_gradio_version(self):
|
|
87
|
-
"""Assert gradio version is not greater than 3.50.2.
|
|
88
|
-
Ray Serve cannot pickle gradio endpoints, thus gradio version greater than 3.50.2 is not supported (SSE Issues)
|
|
89
|
-
"""
|
|
90
|
-
GRADIO_VERSION_MAX_ALLOWED = '3.50.2'
|
|
91
|
-
|
|
92
|
-
gradio_installed = False
|
|
93
|
-
gradio_version = None
|
|
94
|
-
for req in self.requirements:
|
|
95
|
-
if req.startswith('gradio=='):
|
|
96
|
-
gradio_installed = True
|
|
97
|
-
gradio_version = req.split('==')[1]
|
|
98
|
-
break
|
|
99
|
-
|
|
100
|
-
assert gradio_installed, _(
|
|
101
|
-
'Gradio is not installed or version is not specified. Please install gradio==3.50.2 to use this feature.'
|
|
102
|
-
)
|
|
103
|
-
|
|
104
|
-
if version.parse(gradio_version) > version.parse(GRADIO_VERSION_MAX_ALLOWED):
|
|
105
|
-
raise AssertionError(
|
|
106
|
-
f'Gradio version {gradio_version} is greater than maximum allowed version {GRADIO_VERSION_MAX_ALLOWED}'
|
|
107
|
-
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/export/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/export/enums.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/neural_net/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/smart_tool/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/categories/upload/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/templates/cookiecutter.json
RENAMED
|
File without changes
|
|
File without changes
|
{synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/plugins/templates/hooks/pre_prompt.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{synapse_sdk-1.0.0a38 → synapse_sdk-1.0.0a39}/synapse_sdk/utils/storage/providers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|