clarifai 11.1.3__tar.gz → 11.1.4rc1__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.
- {clarifai-11.1.3/clarifai.egg-info → clarifai-11.1.4rc1}/PKG-INFO +3 -27
- clarifai-11.1.4rc1/clarifai/__init__.py +1 -0
- clarifai-11.1.4rc1/clarifai/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/__pycache__/errors.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/__pycache__/versions.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/cli/__main__.py~ +4 -0
- clarifai-11.1.4rc1/clarifai/cli/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/cli/__pycache__/__main__.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/cli/__pycache__/base.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/cli/__pycache__/compute_cluster.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/cli/__pycache__/deployment.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/cli/__pycache__/model.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/cli/__pycache__/nodepool.cpython-310.pyc +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/cli/model.py +13 -10
- clarifai-11.1.4rc1/clarifai/client/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/client/__pycache__/app.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/client/__pycache__/base.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/client/__pycache__/dataset.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/client/__pycache__/input.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/client/__pycache__/lister.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/client/__pycache__/model.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/client/__pycache__/module.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/client/__pycache__/runner.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/client/__pycache__/search.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/client/__pycache__/user.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/client/__pycache__/workflow.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/client/auth/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/client/auth/__pycache__/helper.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/client/auth/__pycache__/register.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/client/auth/__pycache__/stub.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/constants/__pycache__/dataset.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/constants/__pycache__/model.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/constants/__pycache__/search.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/datasets/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/datasets/export/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/datasets/export/__pycache__/inputs_annotations.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/datasets/upload/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/datasets/upload/__pycache__/base.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/datasets/upload/__pycache__/features.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/datasets/upload/__pycache__/image.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/datasets/upload/__pycache__/text.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/datasets/upload/__pycache__/utils.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/models/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/models/model_serving/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/models/model_serving/__pycache__/constants.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/models/model_serving/cli/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/models/model_serving/cli/__pycache__/_utils.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/models/model_serving/cli/__pycache__/base.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/models/model_serving/cli/__pycache__/build.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/models/model_serving/cli/__pycache__/create.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/models/model_serving/model_config/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/models/model_serving/model_config/__pycache__/base.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/models/model_serving/model_config/__pycache__/config.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/models/model_serving/model_config/__pycache__/inference_parameter.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/models/model_serving/model_config/__pycache__/output.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/models/model_serving/model_config/triton/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/models/model_serving/model_config/triton/__pycache__/serializer.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/models/model_serving/model_config/triton/__pycache__/triton_config.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/models/model_serving/model_config/triton/__pycache__/wrappers.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/models/model_serving/repo_build/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/models/model_serving/repo_build/__pycache__/build.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/models/model_serving/repo_build/static_files/__pycache__/base_test.cpython-310-pytest-7.2.0.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/rag/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/rag/__pycache__/rag.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/rag/__pycache__/utils.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/runners/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/runners/__pycache__/server.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/runners/dockerfile_template/Dockerfile.debug +11 -0
- clarifai-11.1.4rc1/clarifai/runners/dockerfile_template/Dockerfile.debug~ +9 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/runners/dockerfile_template/Dockerfile.template +2 -2
- clarifai-11.1.4rc1/clarifai/runners/models/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/runners/models/__pycache__/base_typed_model.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/runners/models/__pycache__/model_builder.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/runners/models/__pycache__/model_class.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/runners/models/__pycache__/model_run_locally.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/runners/models/__pycache__/model_runner.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/runners/models/__pycache__/model_servicer.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/runners/models/__pycache__/model_upload.cpython-310.pyc +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/runners/models/model_builder.py +53 -24
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/runners/models/model_run_locally.py +2 -1
- clarifai-11.1.4rc1/clarifai/runners/utils/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/runners/utils/__pycache__/const.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/runners/utils/__pycache__/data_handler.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/runners/utils/__pycache__/data_utils.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/runners/utils/__pycache__/loader.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/runners/utils/__pycache__/logging.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/runners/utils/__pycache__/url_fetcher.cpython-310.pyc +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/runners/utils/const.py +3 -0
- clarifai-11.1.4rc1/clarifai/schema/__pycache__/search.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/urls/__pycache__/helper.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/utils/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/utils/__pycache__/logging.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/utils/__pycache__/misc.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/utils/__pycache__/model_train.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/workflows/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/workflows/__pycache__/export.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/workflows/__pycache__/utils.cpython-310.pyc +0 -0
- clarifai-11.1.4rc1/clarifai/workflows/__pycache__/validate.cpython-310.pyc +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1/clarifai.egg-info}/PKG-INFO +3 -27
- clarifai-11.1.4rc1/clarifai.egg-info/SOURCES.txt +209 -0
- clarifai-11.1.3/clarifai/__init__.py +0 -1
- clarifai-11.1.3/clarifai.egg-info/SOURCES.txt +0 -118
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/LICENSE +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/MANIFEST.in +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/README.md +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/cli/README.md +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/cli/__init__.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/cli/__main__.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/cli/base.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/cli/compute_cluster.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/cli/deployment.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/cli/nodepool.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/cli.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/client/__init__.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/client/app.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/client/auth/__init__.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/client/auth/helper.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/client/auth/register.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/client/auth/stub.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/client/base.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/client/compute_cluster.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/client/dataset.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/client/deployment.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/client/input.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/client/lister.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/client/model.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/client/module.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/client/nodepool.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/client/search.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/client/user.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/client/workflow.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/constants/base.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/constants/dataset.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/constants/input.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/constants/model.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/constants/rag.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/constants/search.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/constants/workflow.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/datasets/__init__.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/datasets/export/__init__.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/datasets/export/inputs_annotations.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/datasets/upload/__init__.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/datasets/upload/base.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/datasets/upload/features.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/datasets/upload/image.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/datasets/upload/loaders/README.md +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/datasets/upload/loaders/__init__.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/datasets/upload/loaders/coco_captions.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/datasets/upload/loaders/coco_detection.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/datasets/upload/loaders/imagenet_classification.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/datasets/upload/loaders/xview_detection.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/datasets/upload/multimodal.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/datasets/upload/text.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/datasets/upload/utils.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/errors.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/models/__init__.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/models/api.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/modules/README.md +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/modules/__init__.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/modules/css.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/modules/pages.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/modules/style.css +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/rag/__init__.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/rag/rag.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/rag/utils.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/runners/__init__.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/runners/models/__init__.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/runners/models/base_typed_model.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/runners/models/model_class.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/runners/models/model_runner.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/runners/models/model_servicer.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/runners/server.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/runners/utils/__init__.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/runners/utils/data_handler.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/runners/utils/data_utils.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/runners/utils/loader.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/runners/utils/url_fetcher.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/schema/search.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/urls/helper.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/utils/__init__.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/utils/cli.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/utils/constants.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/utils/evaluation/__init__.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/utils/evaluation/helpers.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/utils/evaluation/main.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/utils/evaluation/testset_annotation_parser.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/utils/logging.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/utils/misc.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/utils/model_train.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/versions.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/workflows/__init__.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/workflows/export.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/workflows/utils.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/workflows/validate.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai.egg-info/dependency_links.txt +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai.egg-info/entry_points.txt +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai.egg-info/requires.txt +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai.egg-info/top_level.txt +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/pyproject.toml +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/requirements.txt +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/setup.cfg +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/setup.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/tests/test_app.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/tests/test_auth.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/tests/test_data_upload.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/tests/test_eval.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/tests/test_misc.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/tests/test_model_predict.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/tests/test_model_train.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/tests/test_modules.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/tests/test_rag.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/tests/test_search.py +0 -0
- {clarifai-11.1.3 → clarifai-11.1.4rc1}/tests/test_stub.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.1
|
2
2
|
Name: clarifai
|
3
|
-
Version: 11.1.
|
3
|
+
Version: 11.1.4rc1
|
4
4
|
Summary: Clarifai Python SDK
|
5
5
|
Home-page: https://github.com/Clarifai/clarifai-python
|
6
6
|
Author: Clarifai
|
@@ -19,32 +19,8 @@ Classifier: License :: OSI Approved :: Apache Software License
|
|
19
19
|
Classifier: Operating System :: OS Independent
|
20
20
|
Requires-Python: >=3.8
|
21
21
|
Description-Content-Type: text/markdown
|
22
|
-
License-File: LICENSE
|
23
|
-
Requires-Dist: clarifai-grpc>=11.0.7
|
24
|
-
Requires-Dist: clarifai-protocol>=0.0.16
|
25
|
-
Requires-Dist: numpy>=1.22.0
|
26
|
-
Requires-Dist: tqdm>=4.65.0
|
27
|
-
Requires-Dist: rich>=13.4.2
|
28
|
-
Requires-Dist: PyYAML>=6.0.1
|
29
|
-
Requires-Dist: schema==0.7.5
|
30
|
-
Requires-Dist: Pillow>=9.5.0
|
31
|
-
Requires-Dist: tabulate>=0.9.0
|
32
|
-
Requires-Dist: fsspec>=2024.6.1
|
33
|
-
Requires-Dist: click>=8.1.7
|
34
|
-
Requires-Dist: requests>=2.32.3
|
35
22
|
Provides-Extra: all
|
36
|
-
|
37
|
-
Dynamic: author
|
38
|
-
Dynamic: author-email
|
39
|
-
Dynamic: classifier
|
40
|
-
Dynamic: description
|
41
|
-
Dynamic: description-content-type
|
42
|
-
Dynamic: home-page
|
43
|
-
Dynamic: license
|
44
|
-
Dynamic: provides-extra
|
45
|
-
Dynamic: requires-dist
|
46
|
-
Dynamic: requires-python
|
47
|
-
Dynamic: summary
|
23
|
+
License-File: LICENSE
|
48
24
|
|
49
25
|
<h1 align="center">
|
50
26
|
<a href="https://www.clarifai.com/"><img alt="Clarifai" title="Clarifai" src="https://github.com/user-attachments/assets/623b883b-7fe5-4b95-bbfa-8691f5779af4"></a>
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "11.1.4rc1"
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -14,22 +14,16 @@ def model():
|
|
14
14
|
type=click.Path(exists=True),
|
15
15
|
required=True,
|
16
16
|
help='Path to the model directory.')
|
17
|
-
@click.option(
|
18
|
-
'--download_checkpoints',
|
19
|
-
is_flag=True,
|
20
|
-
help=
|
21
|
-
'Flag to download checkpoints before uploading and including them in the tar file that is uploaded. Defaults to False, which will attempt to download them at docker build time.',
|
22
|
-
)
|
23
17
|
@click.option(
|
24
18
|
'--skip_dockerfile',
|
25
19
|
is_flag=True,
|
26
20
|
help=
|
27
21
|
'Flag to skip generating a dockerfile so that you can manually edit an already created dockerfile.',
|
28
22
|
)
|
29
|
-
def upload(model_path,
|
23
|
+
def upload(model_path, skip_dockerfile):
|
30
24
|
"""Upload a model to Clarifai."""
|
31
25
|
from clarifai.runners.models.model_builder import upload_model
|
32
|
-
upload_model(model_path,
|
26
|
+
upload_model(model_path, "upload", skip_dockerfile)
|
33
27
|
|
34
28
|
|
35
29
|
@model.command()
|
@@ -46,12 +40,21 @@ def upload(model_path, download_checkpoints, skip_dockerfile):
|
|
46
40
|
help=
|
47
41
|
'Option path to write the checkpoints to. This will place them in {out_path}/ If not provided it will default to {model_path}/1/checkpoints where the config.yaml is read..'
|
48
42
|
)
|
49
|
-
|
43
|
+
@click.option(
|
44
|
+
'--stage',
|
45
|
+
type=str,
|
46
|
+
required=False,
|
47
|
+
default="build",
|
48
|
+
show_default=True,
|
49
|
+
help=
|
50
|
+
'The stage we are calling download checkpoints from. Typically this would be in the build stage which is the default. Other options include "runtime" to be used in load_model, "upload" to be used during model upload or "any" which will force download now regardless of config.yaml'
|
51
|
+
)
|
52
|
+
def download_checkpoints(model_path, out_path, stage):
|
50
53
|
"""Download checkpoints from external source to local model_path"""
|
51
54
|
|
52
55
|
from clarifai.runners.models.model_builder import ModelBuilder
|
53
56
|
builder = ModelBuilder(model_path, download_validation_only=True)
|
54
|
-
builder.download_checkpoints(out_path)
|
57
|
+
builder.download_checkpoints(stage=stage, checkpoint_path_override=out_path)
|
55
58
|
|
56
59
|
|
57
60
|
@model.command()
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
clarifai-11.1.4rc1/clarifai/models/model_serving/model_config/__pycache__/__init__.cpython-310.pyc
ADDED
Binary file
|
clarifai-11.1.4rc1/clarifai/models/model_serving/model_config/__pycache__/base.cpython-310.pyc
ADDED
Binary file
|
clarifai-11.1.4rc1/clarifai/models/model_serving/model_config/__pycache__/config.cpython-310.pyc
ADDED
Binary file
|
Binary file
|
clarifai-11.1.4rc1/clarifai/models/model_serving/model_config/__pycache__/output.cpython-310.pyc
ADDED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
clarifai-11.1.4rc1/clarifai/models/model_serving/repo_build/__pycache__/__init__.cpython-310.pyc
ADDED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,11 @@
|
|
1
|
+
FROM --platform=$TARGETPLATFORM public.ecr.aws/docker/library/python:3.12-slim-bookworm as pybase
|
2
|
+
|
3
|
+
#############################
|
4
|
+
# Final runtime image
|
5
|
+
#############################
|
6
|
+
FROM --platform=$TARGETPLATFORM ${RUNTIME_IMAGE} as final
|
7
|
+
|
8
|
+
COPY --from=pybase --link=true /usr/bin/ls /usr/bin/cat /usr/bin/which /usr/bin/bash /usr/bin/sort /usr/bin/du /usr/bin/
|
9
|
+
COPY --from=pybase --link=true /bin/rbash /bin/sh /bin/rm /bin/
|
10
|
+
COPY --from=pybase --link=true /lib/*-linux-gnu/libselinux.so.1 /lib/*-linux-gnu/libpcre2-8.so.0 /lib/x86_64-linux-gnu/
|
11
|
+
COPY --from=pybase --link=true /lib/*-linux-gnu/libselinux.so.1 /lib/*-linux-gnu/libpcre2-8.so.0 /lib/aarch64-linux-gnu/
|
@@ -0,0 +1,9 @@
|
|
1
|
+
FROM --platform=$TARGETPLATFORM public.ecr.aws/docker/library/python:3.12-slim-bookworm as pybase
|
2
|
+
|
3
|
+
#############################
|
4
|
+
# Final runtime image
|
5
|
+
#############################
|
6
|
+
FROM --platform=$TARGETPLATFORM ${RUNTIME_IMAGE} as final
|
7
|
+
|
8
|
+
COPY --from=pybase --link=true /usr/bin/ls /usr/bin/cat /usr/bin/which /usr/bin/bash /usr/bin/sort /usr/bin/du /usr/bin/
|
9
|
+
COPY --from=pybase --link=true /bin/rbash /bin/sh /bin/rm /bin/
|
{clarifai-11.1.3 → clarifai-11.1.4rc1}/clarifai/runners/dockerfile_template/Dockerfile.template
RENAMED
@@ -47,9 +47,9 @@ COPY --link=true --from=downloader /venv /venv
|
|
47
47
|
COPY --chown=nonroot:nonroot downloader/unused.yaml /home/nonroot/main/1/checkpoints/.cache/unused.yaml
|
48
48
|
|
49
49
|
#####
|
50
|
-
# Download checkpoints
|
50
|
+
# Download checkpoints if config.yaml has checkpoints.when = "build"
|
51
51
|
COPY --link=true config.yaml /home/nonroot/main/
|
52
|
-
RUN ["python", "-m", "clarifai.cli", "model", "download-checkpoints", "--model_path", "/home/nonroot/main", "--out_path", "/home/nonroot/main"]
|
52
|
+
RUN ["python", "-m", "clarifai.cli", "model", "download-checkpoints", "--model_path", "/home/nonroot/main", "--out_path", "/home/nonroot/main", "--stage", "build"]
|
53
53
|
#####
|
54
54
|
|
55
55
|
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -16,9 +16,9 @@ from rich.markup import escape
|
|
16
16
|
|
17
17
|
from clarifai.client import BaseClient
|
18
18
|
from clarifai.runners.models.model_class import ModelClass
|
19
|
-
from clarifai.runners.utils.const import (
|
20
|
-
|
21
|
-
|
19
|
+
from clarifai.runners.utils.const import (
|
20
|
+
AVAILABLE_PYTHON_IMAGES, AVAILABLE_TORCH_IMAGES, CONCEPTS_REQUIRED_MODEL_TYPE,
|
21
|
+
DEFAULT_DOWNLOAD_CHECKPOINT_WHEN, DEFAULT_PYTHON_VERSION, PYTHON_BASE_IMAGE, TORCH_BASE_IMAGE)
|
22
22
|
from clarifai.runners.utils.loader import HuggingFaceLoader
|
23
23
|
from clarifai.urls.helper import ClarifaiUrlHelper
|
24
24
|
from clarifai.utils.logging import logger
|
@@ -145,11 +145,25 @@ class ModelBuilder:
|
|
145
145
|
:return: repo_id location of checkpoint.
|
146
146
|
:return: hf_token token to access checkpoint.
|
147
147
|
"""
|
148
|
+
if "checkpoints" not in self.config:
|
149
|
+
return None, None, None, DEFAULT_DOWNLOAD_CHECKPOINT_WHEN
|
148
150
|
assert "type" in self.config.get("checkpoints"), "No loader type specified in the config file"
|
149
151
|
loader_type = self.config.get("checkpoints").get("type")
|
150
152
|
if not loader_type:
|
151
153
|
logger.info("No loader type specified in the config file for checkpoints")
|
152
154
|
return None, None, None
|
155
|
+
checkpoints = self.config.get("checkpoints")
|
156
|
+
if 'when' not in checkpoints:
|
157
|
+
logger.warn(
|
158
|
+
f"No 'when' specified in the config file for checkpoints, defaulting to download at {DEFAULT_DOWNLOAD_CHECKPOINT_WHEN}"
|
159
|
+
)
|
160
|
+
when = checkpoints.get("when", DEFAULT_DOWNLOAD_CHECKPOINT_WHEN)
|
161
|
+
# In the config.yaml we don't allow "any", that's only used in download_checkpoints to force download.
|
162
|
+
assert when in [
|
163
|
+
"upload",
|
164
|
+
"build",
|
165
|
+
"runtime",
|
166
|
+
], "Invalid value for when in the checkpoint loader when, needs to be one of ['upload', 'build', 'runtime']"
|
153
167
|
assert loader_type == "huggingface", "Only huggingface loader supported for now"
|
154
168
|
if loader_type == "huggingface":
|
155
169
|
assert "repo_id" in self.config.get("checkpoints"), "No repo_id specified in the config file"
|
@@ -157,7 +171,7 @@ class ModelBuilder:
|
|
157
171
|
|
158
172
|
# get from config.yaml otherwise fall back to HF_TOKEN env var.
|
159
173
|
hf_token = self.config.get("checkpoints").get("hf_token", os.environ.get("HF_TOKEN", None))
|
160
|
-
return loader_type, repo_id, hf_token
|
174
|
+
return loader_type, repo_id, hf_token, when
|
161
175
|
|
162
176
|
def _check_app_exists(self):
|
163
177
|
resp = self.client.STUB.GetApp(service_pb2.GetAppRequest(user_app_id=self.client.user_app_id))
|
@@ -202,7 +216,7 @@ class ModelBuilder:
|
|
202
216
|
assert model_type_id in CONCEPTS_REQUIRED_MODEL_TYPE, f"Model type {model_type_id} not supported for concepts"
|
203
217
|
|
204
218
|
if self.config.get("checkpoints"):
|
205
|
-
loader_type, _, hf_token = self._validate_config_checkpoints()
|
219
|
+
loader_type, _, hf_token, _ = self._validate_config_checkpoints()
|
206
220
|
|
207
221
|
if loader_type == "huggingface" and hf_token:
|
208
222
|
is_valid_token = HuggingFaceLoader.validate_hftoken(hf_token)
|
@@ -434,10 +448,13 @@ class ModelBuilder:
|
|
434
448
|
def tar_file(self):
|
435
449
|
return f"{self.folder}.tar.gz"
|
436
450
|
|
437
|
-
def download_checkpoints(self, checkpoint_path_override: str = None):
|
451
|
+
def download_checkpoints(self, stage: str, checkpoint_path_override: str = None):
|
438
452
|
"""
|
439
453
|
Downloads the checkpoints specified in the config file.
|
440
454
|
|
455
|
+
:param stage: The stage of the build process. This is used to determine when to download the
|
456
|
+
checkpoints. The stage can be one of ['build', 'upload', 'runtime', 'any']. If "any" it will always try to download
|
457
|
+
regardless of what is specified in config.yaml. Otherwise it must match what is in config.yaml
|
441
458
|
:param checkpoint_path_override: The path to download the checkpoints to. If not provided, the
|
442
459
|
default path is used based on the folder ModelUploader was initialized with. The
|
443
460
|
checkpoint_suffix will be appended to the path.
|
@@ -446,7 +463,14 @@ class ModelBuilder:
|
|
446
463
|
logger.info("No checkpoints specified in the config file")
|
447
464
|
return True
|
448
465
|
|
449
|
-
loader_type, repo_id, hf_token = self._validate_config_checkpoints()
|
466
|
+
loader_type, repo_id, hf_token, when = self._validate_config_checkpoints()
|
467
|
+
if stage not in ["build", "upload", "runtime", "any"]:
|
468
|
+
raise Exception("Invalid stage provided, must be one of ['build', 'upload', 'runtime']")
|
469
|
+
if when != stage and stage != "any":
|
470
|
+
logger.info(
|
471
|
+
f"Skipping downloading checkpoints for stage {stage} since config.yaml says to download them at stage {when}"
|
472
|
+
)
|
473
|
+
return True # success seems fine here.
|
450
474
|
|
451
475
|
success = True
|
452
476
|
if loader_type == "huggingface":
|
@@ -520,11 +544,12 @@ class ModelBuilder:
|
|
520
544
|
self._concepts_protos_from_concepts(labels))
|
521
545
|
return model_version_proto
|
522
546
|
|
523
|
-
def upload_model_version(self
|
547
|
+
def upload_model_version(self):
|
524
548
|
file_path = f"{self.folder}.tar.gz"
|
525
549
|
logger.debug(f"Will tar it into file: {file_path}")
|
526
550
|
|
527
551
|
model_type_id = self.config.get('model').get('model_type_id')
|
552
|
+
loader_type, repo_id, hf_token, when = self._validate_config_checkpoints()
|
528
553
|
|
529
554
|
if (model_type_id in CONCEPTS_REQUIRED_MODEL_TYPE) and 'concepts' not in self.config:
|
530
555
|
logger.info(
|
@@ -534,15 +559,13 @@ class ModelBuilder:
|
|
534
559
|
logger.info(
|
535
560
|
"Checkpoints specified in the config.yaml file, will download the HF model's config.json file to infer the concepts."
|
536
561
|
)
|
537
|
-
|
538
|
-
if
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
loader_type, repo_id, hf_token = self._validate_config_checkpoints()
|
545
|
-
if loader_type == "huggingface":
|
562
|
+
# If we don't already have the concepts, download the config.json file from HuggingFace
|
563
|
+
if loader_type == "huggingface":
|
564
|
+
# If the config.yaml says we'll download in the future (build time or runtime) then we need to get this config now.
|
565
|
+
if when != "upload" and not HuggingFaceLoader.validate_config(self.checkpoint_path):
|
566
|
+
input(
|
567
|
+
"Press Enter to download the HuggingFace model's config.json file to infer the concepts and continue..."
|
568
|
+
)
|
546
569
|
loader = HuggingFaceLoader(repo_id=repo_id, token=hf_token)
|
547
570
|
loader.download_config(self.checkpoint_path)
|
548
571
|
|
@@ -557,7 +580,7 @@ class ModelBuilder:
|
|
557
580
|
def filter_func(tarinfo):
|
558
581
|
name = tarinfo.name
|
559
582
|
exclude = [self.tar_file, "*~"]
|
560
|
-
if
|
583
|
+
if when != "upload":
|
561
584
|
exclude.append(self.checkpoint_suffix)
|
562
585
|
return None if any(name.endswith(ex) for ex in exclude) else tarinfo
|
563
586
|
|
@@ -569,12 +592,12 @@ class ModelBuilder:
|
|
569
592
|
logger.debug(f"Size of the tar is: {file_size} bytes")
|
570
593
|
|
571
594
|
self.storage_request_size = self._get_tar_file_content_size(file_path)
|
572
|
-
if
|
595
|
+
if when != "upload" and self.config.get("checkpoints"):
|
573
596
|
# Get the checkpoint size to add to the storage request.
|
574
597
|
# First check for the env variable, then try querying huggingface. If all else fails, use the default.
|
575
598
|
checkpoint_size = os.environ.get('CHECKPOINT_SIZE_BYTES', 0)
|
576
599
|
if not checkpoint_size:
|
577
|
-
_, repo_id, _ = self._validate_config_checkpoints()
|
600
|
+
_, repo_id, _, _ = self._validate_config_checkpoints()
|
578
601
|
checkpoint_size = HuggingFaceLoader.get_huggingface_checkpoint_total_size(repo_id)
|
579
602
|
if not checkpoint_size:
|
580
603
|
checkpoint_size = self.DEFAULT_CHECKPOINT_SIZE
|
@@ -702,10 +725,16 @@ class ModelBuilder:
|
|
702
725
|
return False
|
703
726
|
|
704
727
|
|
705
|
-
def upload_model(folder,
|
728
|
+
def upload_model(folder, stage, skip_dockerfile):
|
729
|
+
"""
|
730
|
+
Uploads a model to Clarifai.
|
731
|
+
|
732
|
+
:param folder: The folder containing the model files.
|
733
|
+
:param stage: The stage of when you're uploading this model. This is used to determine when to download the checkpoints based on a match with the "when" field in the config.yaml checkpoints section or if you set stage to "any" it will always download the checkpoints.
|
734
|
+
:param skip_dockerfile: If True, skips creating the Dockerfile so you can re-use the local one.
|
735
|
+
"""
|
706
736
|
builder = ModelBuilder(folder)
|
707
|
-
|
708
|
-
builder.download_checkpoints()
|
737
|
+
builder.download_checkpoints(stage=stage)
|
709
738
|
if not skip_dockerfile:
|
710
739
|
builder.create_dockerfile()
|
711
740
|
exists = builder.check_model_exists()
|
@@ -717,4 +746,4 @@ def upload_model(folder, download_checkpoints, skip_dockerfile):
|
|
717
746
|
logger.info(f"New model will be created at {builder.model_url} with it's first version.")
|
718
747
|
|
719
748
|
input("Press Enter to continue...")
|
720
|
-
builder.upload_model_version(
|
749
|
+
builder.upload_model_version()
|
@@ -481,7 +481,8 @@ def main(model_path,
|
|
481
481
|
)
|
482
482
|
sys.exit(1)
|
483
483
|
manager = ModelRunLocally(model_path)
|
484
|
-
|
484
|
+
# stage="any" forces downloaded now regardless of config.yaml
|
485
|
+
manager.builder.download_checkpoints(stage="any")
|
485
486
|
if inside_container:
|
486
487
|
if not manager.is_docker_installed():
|
487
488
|
sys.exit(1)
|
Binary file
|
@@ -12,6 +12,9 @@ AVAILABLE_PYTHON_IMAGES = ['3.11', '3.12']
|
|
12
12
|
|
13
13
|
DEFAULT_PYTHON_VERSION = 3.12
|
14
14
|
|
15
|
+
# By default we download at runtime.
|
16
|
+
DEFAULT_DOWNLOAD_CHECKPOINT_WHEN = "runtime"
|
17
|
+
|
15
18
|
# List of available torch images
|
16
19
|
# Keep sorted by most recent cuda version.
|
17
20
|
AVAILABLE_TORCH_IMAGES = [
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.1
|
2
2
|
Name: clarifai
|
3
|
-
Version: 11.1.
|
3
|
+
Version: 11.1.4rc1
|
4
4
|
Summary: Clarifai Python SDK
|
5
5
|
Home-page: https://github.com/Clarifai/clarifai-python
|
6
6
|
Author: Clarifai
|
@@ -19,32 +19,8 @@ Classifier: License :: OSI Approved :: Apache Software License
|
|
19
19
|
Classifier: Operating System :: OS Independent
|
20
20
|
Requires-Python: >=3.8
|
21
21
|
Description-Content-Type: text/markdown
|
22
|
-
License-File: LICENSE
|
23
|
-
Requires-Dist: clarifai-grpc>=11.0.7
|
24
|
-
Requires-Dist: clarifai-protocol>=0.0.16
|
25
|
-
Requires-Dist: numpy>=1.22.0
|
26
|
-
Requires-Dist: tqdm>=4.65.0
|
27
|
-
Requires-Dist: rich>=13.4.2
|
28
|
-
Requires-Dist: PyYAML>=6.0.1
|
29
|
-
Requires-Dist: schema==0.7.5
|
30
|
-
Requires-Dist: Pillow>=9.5.0
|
31
|
-
Requires-Dist: tabulate>=0.9.0
|
32
|
-
Requires-Dist: fsspec>=2024.6.1
|
33
|
-
Requires-Dist: click>=8.1.7
|
34
|
-
Requires-Dist: requests>=2.32.3
|
35
22
|
Provides-Extra: all
|
36
|
-
|
37
|
-
Dynamic: author
|
38
|
-
Dynamic: author-email
|
39
|
-
Dynamic: classifier
|
40
|
-
Dynamic: description
|
41
|
-
Dynamic: description-content-type
|
42
|
-
Dynamic: home-page
|
43
|
-
Dynamic: license
|
44
|
-
Dynamic: provides-extra
|
45
|
-
Dynamic: requires-dist
|
46
|
-
Dynamic: requires-python
|
47
|
-
Dynamic: summary
|
23
|
+
License-File: LICENSE
|
48
24
|
|
49
25
|
<h1 align="center">
|
50
26
|
<a href="https://www.clarifai.com/"><img alt="Clarifai" title="Clarifai" src="https://github.com/user-attachments/assets/623b883b-7fe5-4b95-bbfa-8691f5779af4"></a>
|