synapse-sdk 1.0.0a39__tar.gz → 1.0.0a41__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.0a39/synapse_sdk.egg-info → synapse_sdk-1.0.0a41}/PKG-INFO +1 -1
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/neural_net/actions/gradio.py +45 -49
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/utils/file.py +0 -1
- synapse_sdk-1.0.0a41/synapse_sdk/utils/http.py +110 -0
- synapse_sdk-1.0.0a41/synapse_sdk/utils/network.py +37 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41/synapse_sdk.egg-info}/PKG-INFO +1 -1
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk.egg-info/SOURCES.txt +1 -0
- synapse_sdk-1.0.0a39/synapse_sdk/utils/network.py +0 -16
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/.github/workflows/lint.yml +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/.github/workflows/pypi-publish.yml +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/.gitignore +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/.pre-commit-config.yaml +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/LICENSE +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/README.md +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/locale/en/LC_MESSAGES/messages.mo +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/locale/en/LC_MESSAGES/messages.po +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/locale/ko/LC_MESSAGES/messages.mo +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/locale/ko/LC_MESSAGES/messages.po +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/pyproject.toml +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/requirements.test.txt +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/requirements.txt +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/setup.cfg +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/cli/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/cli/alias/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/cli/alias/create.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/cli/alias/dataclass.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/cli/alias/default.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/cli/alias/delete.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/cli/alias/list.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/cli/alias/read.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/cli/alias/update.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/cli/alias/utils.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/cli/plugin/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/cli/plugin/create.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/cli/plugin/publish.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/cli/plugin/run.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/clients/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/clients/agent/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/clients/agent/core.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/clients/agent/ray.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/clients/agent/service.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/clients/backend/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/clients/backend/annotation.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/clients/backend/core.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/clients/backend/dataset.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/clients/backend/hitl.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/clients/backend/integration.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/clients/backend/ml.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/clients/backend/models.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/clients/base.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/clients/exceptions.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/clients/ray/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/clients/ray/core.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/clients/ray/serve.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/clients/utils.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/clients/validators/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/clients/validators/collections.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/i18n.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/loggers.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/base.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/data_validation/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/data_validation/actions/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/data_validation/actions/validation.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/data_validation/templates/config.yaml +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/data_validation/templates/plugin/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/data_validation/templates/plugin/validation.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/decorators.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/export/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/export/actions/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/export/actions/export.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/export/enums.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/export/templates/config.yaml +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/export/templates/plugin/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/export/templates/plugin/export.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/neural_net/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/neural_net/actions/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/neural_net/actions/deployment.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/neural_net/actions/inference.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/neural_net/actions/test.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/neural_net/actions/train.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/neural_net/actions/tune.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/neural_net/base/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/neural_net/base/inference.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/neural_net/templates/config.yaml +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/neural_net/templates/plugin/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/neural_net/templates/plugin/inference.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/neural_net/templates/plugin/test.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/neural_net/templates/plugin/train.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/post_annotation/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/post_annotation/actions/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/post_annotation/actions/post_annotation.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/post_annotation/templates/config.yaml +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/post_annotation/templates/plugin/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/post_annotation/templates/plugin/post_annotation.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/pre_annotation/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/pre_annotation/actions/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/pre_annotation/templates/config.yaml +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/pre_annotation/templates/plugin/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/pre_annotation/templates/plugin/pre_annotation.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/registry.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/smart_tool/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/smart_tool/actions/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/smart_tool/actions/auto_label.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/smart_tool/templates/config.yaml +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/smart_tool/templates/plugin/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/smart_tool/templates/plugin/auto_label.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/templates.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/upload/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/upload/actions/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/upload/actions/upload.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/upload/templates/config.yaml +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/upload/templates/plugin/upload.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/enums.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/exceptions.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/models.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/templates/cookiecutter.json +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/templates/hooks/post_gen_project.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/templates/hooks/pre_prompt.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.gitignore +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.pre-commit-config.yaml +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/README.md +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/config.yaml +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/plugin/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/pyproject.toml +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/requirements.txt +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/upload.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/utils.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/shared/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/shared/enums.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/types.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/utils/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/utils/dataset.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/utils/debug.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/utils/module_loading.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/utils/pydantic/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/utils/pydantic/config.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/utils/pydantic/errors.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/utils/pydantic/validators.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/utils/storage/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/utils/storage/providers/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/utils/storage/providers/gcp.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/utils/storage/providers/s3.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/utils/storage/providers/sftp.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/utils/storage/registry.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/utils/string.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk.egg-info/dependency_links.txt +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk.egg-info/entry_points.txt +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk.egg-info/requires.txt +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk.egg-info/top_level.txt +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/tests/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/tests/clients/__init__.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/tests/clients/test_backend_models.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/tests/clients/test_base_client.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/tests/clients/test_collection_validators.py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/tests/utils/__init__,py +0 -0
- {synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/tests/utils/test_debug.py +0 -0
|
@@ -6,6 +6,7 @@ from pathlib import Path
|
|
|
6
6
|
from synapse_sdk.plugins.categories.base import Action
|
|
7
7
|
from synapse_sdk.plugins.categories.decorators import register_action
|
|
8
8
|
from synapse_sdk.plugins.enums import PluginCategory, RunMethod
|
|
9
|
+
from synapse_sdk.utils.network import get_available_ports_host
|
|
9
10
|
|
|
10
11
|
|
|
11
12
|
@register_action
|
|
@@ -21,8 +22,10 @@ class GradioAction(Action):
|
|
|
21
22
|
return dir
|
|
22
23
|
|
|
23
24
|
@property
|
|
24
|
-
def
|
|
25
|
-
|
|
25
|
+
def requirements_file(self):
|
|
26
|
+
requirements_file = self.working_directory / 'requirements.txt'
|
|
27
|
+
if requirements_file.exists():
|
|
28
|
+
return requirements_file
|
|
26
29
|
|
|
27
30
|
@property
|
|
28
31
|
def tag(self):
|
|
@@ -31,7 +34,7 @@ class GradioAction(Action):
|
|
|
31
34
|
|
|
32
35
|
@cached_property
|
|
33
36
|
def deploy_port(self):
|
|
34
|
-
return
|
|
37
|
+
return get_available_ports_host()
|
|
35
38
|
|
|
36
39
|
def deploy(self):
|
|
37
40
|
self.run.log('deploy', 'Start deploying')
|
|
@@ -39,7 +42,7 @@ class GradioAction(Action):
|
|
|
39
42
|
try:
|
|
40
43
|
# Write Dockerfile and requirements.txt
|
|
41
44
|
path_dockerfile = self.write_dockerfile_template()
|
|
42
|
-
self.
|
|
45
|
+
self.check_requirements()
|
|
43
46
|
|
|
44
47
|
# Build docker image
|
|
45
48
|
self.build_docker_image(path_dockerfile)
|
|
@@ -58,11 +61,15 @@ class GradioAction(Action):
|
|
|
58
61
|
dockerfile_path = self.working_directory / 'Dockerfile'
|
|
59
62
|
|
|
60
63
|
with open(dockerfile_path, 'w') as f:
|
|
61
|
-
f.write("""FROM python:3.
|
|
64
|
+
f.write("""FROM python:3.12-slim
|
|
62
65
|
WORKDIR /home/user/app
|
|
63
66
|
|
|
64
67
|
RUN pip install --no-cache-dir pip -U && \\
|
|
65
68
|
pip install --no-cache-dir uvicorn
|
|
69
|
+
|
|
70
|
+
RUN apt-get update && \\
|
|
71
|
+
apt-get install -y git nmap ffmpeg libsm6 libxext6 libgl1-mesa-glx && \\
|
|
72
|
+
rm -rf /var/lib/apt/lists/*
|
|
66
73
|
|
|
67
74
|
RUN apt-get update && \\
|
|
68
75
|
apt-get install -y curl && \\
|
|
@@ -81,48 +88,24 @@ CMD ["python", "app.py"]
|
|
|
81
88
|
""")
|
|
82
89
|
return dockerfile_path
|
|
83
90
|
|
|
84
|
-
def
|
|
85
|
-
|
|
86
|
-
|
|
91
|
+
def check_requirements(self):
|
|
92
|
+
default_packages = ['gradio', 'synapse-sdk', 'python-nmap']
|
|
93
|
+
if self.requirements_file is None:
|
|
94
|
+
with open(self.working_directory / 'requirements.txt', 'a') as f:
|
|
95
|
+
f.write('\n' + '\n'.join(default_packages))
|
|
96
|
+
else:
|
|
97
|
+
with open(self.requirements_file, 'a') as f:
|
|
98
|
+
f.write('\n' + '\n'.join(default_packages[1:]))
|
|
87
99
|
|
|
88
100
|
def build_docker_image(self, path_dockerfile):
|
|
89
101
|
self.run.log('deploy', 'Start building docker image')
|
|
90
102
|
result = subprocess.run(
|
|
91
|
-
[
|
|
92
|
-
'docker',
|
|
93
|
-
'build',
|
|
94
|
-
'-t',
|
|
95
|
-
self.tag,
|
|
96
|
-
'-f',
|
|
97
|
-
str(path_dockerfile),
|
|
98
|
-
'.',
|
|
99
|
-
],
|
|
103
|
+
['docker', 'build', '-t', self.tag, '-f', str(path_dockerfile), '.'],
|
|
100
104
|
cwd=self.working_directory,
|
|
101
105
|
check=True,
|
|
102
106
|
)
|
|
103
107
|
print(result)
|
|
104
108
|
|
|
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
109
|
def run_docker_image(self):
|
|
127
110
|
self.run.log('deploy', 'Start running docker image')
|
|
128
111
|
|
|
@@ -133,17 +116,30 @@ CMD ["python", "app.py"]
|
|
|
133
116
|
subprocess.run(['docker', 'rm', self.tag], check=True)
|
|
134
117
|
|
|
135
118
|
# Run docker image
|
|
136
|
-
|
|
119
|
+
command = [
|
|
120
|
+
'docker',
|
|
121
|
+
'run',
|
|
122
|
+
'-d',
|
|
123
|
+
'--name',
|
|
124
|
+
self.tag,
|
|
125
|
+
'-p',
|
|
126
|
+
f'{self.deploy_port}:7860',
|
|
127
|
+
'-p',
|
|
128
|
+
'8991-8999:8991-8999',
|
|
129
|
+
'--add-host',
|
|
130
|
+
'host.docker.internal:host-gateway',
|
|
131
|
+
'-e',
|
|
132
|
+
'GRADIO_SERVER_NAME=0.0.0.0',
|
|
133
|
+
]
|
|
134
|
+
|
|
135
|
+
# extend synapse env vars
|
|
136
|
+
for key, value in self.envs.items():
|
|
137
|
+
command.extend(['-e', f'{key}={value}'])
|
|
138
|
+
command.append(self.tag)
|
|
139
|
+
|
|
140
|
+
self.run.log('deploy', f'Starting docker container with command: {" ".join(command)}')
|
|
141
|
+
|
|
137
142
|
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
|
-
],
|
|
143
|
+
command,
|
|
148
144
|
check=True,
|
|
149
145
|
)
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import os
|
|
3
|
+
import tempfile
|
|
4
|
+
import threading
|
|
5
|
+
import time
|
|
6
|
+
from contextlib import contextmanager
|
|
7
|
+
from http.server import HTTPServer, SimpleHTTPRequestHandler
|
|
8
|
+
|
|
9
|
+
from synapse_sdk.utils.network import get_available_ports_host
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class SingleFileHttpServer(SimpleHTTPRequestHandler):
|
|
13
|
+
"""
|
|
14
|
+
Custom HTTP request handler that serves a single specified file
|
|
15
|
+
regardless of the request path.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def __init__(self, *args, file_path=None, content_type=None, **kwargs):
|
|
19
|
+
self.file_path = file_path
|
|
20
|
+
self.content_type = content_type
|
|
21
|
+
super().__init__(*args, **kwargs)
|
|
22
|
+
|
|
23
|
+
def do_GET(self):
|
|
24
|
+
"""Handle GET requests by serving the single file."""
|
|
25
|
+
try:
|
|
26
|
+
# Always serve the specified file regardless of the path requested
|
|
27
|
+
self.send_response(200)
|
|
28
|
+
if self.content_type:
|
|
29
|
+
self.send_header('Content-type', self.content_type)
|
|
30
|
+
self.send_header('Content-Length', str(os.path.getsize(self.file_path)))
|
|
31
|
+
self.end_headers()
|
|
32
|
+
|
|
33
|
+
with open(self.file_path, 'rb') as file:
|
|
34
|
+
self.wfile.write(file.read())
|
|
35
|
+
|
|
36
|
+
except Exception as e:
|
|
37
|
+
self.send_error(500, str(e))
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@contextmanager
|
|
41
|
+
def temp_file_server(image=None, file_path=None, format='JPEG', host='0.0.0.0', port=None, content_type=None):
|
|
42
|
+
"""
|
|
43
|
+
Context manager that serves a file temporarily via HTTP.
|
|
44
|
+
|
|
45
|
+
Args:
|
|
46
|
+
image: A PIL Image object to serve (optional)
|
|
47
|
+
file_path: Path to an existing file to serve (optional - used if image not provided)
|
|
48
|
+
format: Image format when saving a PIL Image (default: "JPEG")
|
|
49
|
+
host: Host to serve on (default: "0.0.0.0")
|
|
50
|
+
port: Port to serve on (default: auto-selected free port)
|
|
51
|
+
content_type: Content type header (default: auto-detected based on format)
|
|
52
|
+
|
|
53
|
+
Returns:
|
|
54
|
+
URL where the file is being served
|
|
55
|
+
|
|
56
|
+
Usage:
|
|
57
|
+
with temp_file_serve(image=my_pillow_img) as url:
|
|
58
|
+
# use url to access the image
|
|
59
|
+
print(f"Image available at: {url}")
|
|
60
|
+
"""
|
|
61
|
+
if image is None and file_path is None:
|
|
62
|
+
raise ValueError('Either image or file_path must be provided')
|
|
63
|
+
|
|
64
|
+
# Use a free port if none specified
|
|
65
|
+
if port is None:
|
|
66
|
+
port = get_available_ports_host(start_port=8991, end_port=8999)
|
|
67
|
+
|
|
68
|
+
temp_dir = None
|
|
69
|
+
|
|
70
|
+
try:
|
|
71
|
+
if image is not None:
|
|
72
|
+
temp_dir = tempfile.mkdtemp()
|
|
73
|
+
ext_map = {'JPEG': '.jpg', 'PNG': '.png', 'GIF': '.gif', 'WEBP': '.webp'}
|
|
74
|
+
content_type_map = {'JPEG': 'image/jpeg', 'PNG': 'image/png', 'GIF': 'image/gif', 'WEBP': 'image/webp'}
|
|
75
|
+
|
|
76
|
+
ext = ext_map.get(format, '.jpg')
|
|
77
|
+
if content_type is None:
|
|
78
|
+
content_type = content_type_map.get(format, 'image/jpeg')
|
|
79
|
+
|
|
80
|
+
temp_file_path = os.path.join(temp_dir, f'temp_image{ext}')
|
|
81
|
+
image.save(temp_file_path, format=format)
|
|
82
|
+
file_path = temp_file_path
|
|
83
|
+
|
|
84
|
+
def handler(*args, **kwargs):
|
|
85
|
+
return SingleFileHttpServer(*args, file_path=file_path, content_type=content_type, **kwargs)
|
|
86
|
+
|
|
87
|
+
server = HTTPServer((host, port), handler)
|
|
88
|
+
|
|
89
|
+
server_thread = threading.Thread(target=server.serve_forever)
|
|
90
|
+
server_thread.daemon = True
|
|
91
|
+
server_thread.start()
|
|
92
|
+
|
|
93
|
+
time.sleep(0.1)
|
|
94
|
+
|
|
95
|
+
url = f'http://localhost:{port}'
|
|
96
|
+
|
|
97
|
+
try:
|
|
98
|
+
yield url
|
|
99
|
+
finally:
|
|
100
|
+
server.shutdown()
|
|
101
|
+
server.server_close()
|
|
102
|
+
|
|
103
|
+
finally:
|
|
104
|
+
if temp_dir:
|
|
105
|
+
try:
|
|
106
|
+
if temp_file_path and os.path.exists(temp_file_path):
|
|
107
|
+
os.unlink(temp_file_path)
|
|
108
|
+
os.rmdir(temp_dir)
|
|
109
|
+
except Exception as e:
|
|
110
|
+
logging.warning(f'Error cleaning up temporary files: {e}')
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
from urllib.parse import urlparse, urlunparse
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def clean_url(url, remove_query_params=True, remove_fragment=True):
|
|
5
|
+
parsed = urlparse(url)
|
|
6
|
+
query = '' if remove_query_params else parsed.query
|
|
7
|
+
fragment = '' if remove_fragment else parsed.fragment
|
|
8
|
+
|
|
9
|
+
return urlunparse((
|
|
10
|
+
parsed.scheme,
|
|
11
|
+
parsed.netloc,
|
|
12
|
+
parsed.path,
|
|
13
|
+
parsed.params,
|
|
14
|
+
query,
|
|
15
|
+
fragment,
|
|
16
|
+
))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def get_available_ports_host(start_port=8900, end_port=8990):
|
|
20
|
+
import nmap
|
|
21
|
+
|
|
22
|
+
nm = nmap.PortScanner()
|
|
23
|
+
|
|
24
|
+
scan_range = f'{start_port}-{end_port}'
|
|
25
|
+
nm.scan(hosts='host.docker.internal', arguments=f'-p {scan_range}')
|
|
26
|
+
|
|
27
|
+
try:
|
|
28
|
+
open_ports = nm['host.docker.internal']['tcp'].keys()
|
|
29
|
+
open_ports = [int(port) for port in open_ports]
|
|
30
|
+
except KeyError:
|
|
31
|
+
open_ports = []
|
|
32
|
+
|
|
33
|
+
for port in range(start_port, end_port + 1):
|
|
34
|
+
if port not in open_ports:
|
|
35
|
+
return port
|
|
36
|
+
|
|
37
|
+
raise IOError(f'No free ports available in range {start_port}-{end_port}')
|
|
@@ -137,6 +137,7 @@ synapse_sdk/utils/__init__.py
|
|
|
137
137
|
synapse_sdk/utils/dataset.py
|
|
138
138
|
synapse_sdk/utils/debug.py
|
|
139
139
|
synapse_sdk/utils/file.py
|
|
140
|
+
synapse_sdk/utils/http.py
|
|
140
141
|
synapse_sdk/utils/module_loading.py
|
|
141
142
|
synapse_sdk/utils/network.py
|
|
142
143
|
synapse_sdk/utils/string.py
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
from urllib.parse import urlparse, urlunparse
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
def clean_url(url, remove_query_params=True, remove_fragment=True):
|
|
5
|
-
parsed = urlparse(url)
|
|
6
|
-
query = '' if remove_query_params else parsed.query
|
|
7
|
-
fragment = '' if remove_fragment else parsed.fragment
|
|
8
|
-
|
|
9
|
-
return urlunparse((
|
|
10
|
-
parsed.scheme,
|
|
11
|
-
parsed.netloc,
|
|
12
|
-
parsed.path,
|
|
13
|
-
parsed.params,
|
|
14
|
-
query,
|
|
15
|
-
fragment,
|
|
16
|
-
))
|
|
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
|
|
File without changes
|
{synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/export/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/categories/export/enums.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/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
|
|
File without changes
|
{synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/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.0a39 → synapse_sdk-1.0.0a41}/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.0a39 → synapse_sdk-1.0.0a41}/synapse_sdk/plugins/templates/cookiecutter.json
RENAMED
|
File without changes
|
|
File without changes
|
{synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/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
|
{synapse_sdk-1.0.0a39 → synapse_sdk-1.0.0a41}/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
|
|
File without changes
|