workbench 0.8.233__tar.gz → 0.8.241__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.
- {workbench-0.8.233 → workbench-0.8.241}/PKG-INFO +2 -2
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/Dockerfile +1 -1
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/app.py +13 -3
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/pages/endpoints/callbacks.py +23 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/pages/endpoints/page.py +1 -0
- workbench-0.8.241/applications/aws_dashboard/pages/models/callbacks.py +137 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/pages/models/page.py +12 -31
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_compute/workbench_compute/lambdas/batch_failure/handler.py +2 -2
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_compute/workbench_compute/workbench_compute_stack.py +53 -5
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_dashboard_full/app.py +1 -1
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_dashboard_full/workbench_dashboard_full/workbench_dashboard_stack.py +4 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_dashboard_lite/app.py +1 -1
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_dashboard_lite/workbench_dashboard_lite/workbench_dashboard_stack.py +4 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/advanced_models/index.md +1 -8
- workbench-0.8.241/docs/confidence/index.md +111 -0
- workbench-0.8.241/docs/themes/details.md +61 -0
- workbench-0.8.241/docs/themes/index.md +79 -0
- workbench-0.8.241/examples/models/split_comparison_chemprop.py +90 -0
- workbench-0.8.241/examples/models/split_comparison_pytorch.py +96 -0
- workbench-0.8.241/examples/models/split_comparison_xgb.py +95 -0
- {workbench-0.8.233 → workbench-0.8.241}/mkdocs.yml +2 -0
- workbench-0.8.241/model_docker_images/inference/requirements.txt +11 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/ml_pipelines/Dockerfile +1 -1
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/ml_pipelines/requirements.txt +4 -4
- workbench-0.8.241/model_docker_images/training/requirements.txt +9 -0
- {workbench-0.8.233 → workbench-0.8.241}/pyproject.toml +4 -2
- workbench-0.8.241/scripts/admin/find_orphan_models.py +132 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/dataframe/smart_aggregator.py +17 -12
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/api/endpoint.py +13 -4
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/api/model.py +2 -2
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/cached/cached_model.py +2 -2
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/artifacts/athena_source.py +5 -3
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/artifacts/endpoint_core.py +30 -5
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/cloud_platform/aws/aws_meta.py +2 -1
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/model_to_endpoint/model_to_endpoint.py +27 -14
- {workbench-0.8.233/src/workbench/model_scripts/pytorch_model → workbench-0.8.241/src/workbench/model_script_utils}/model_script_utils.py +225 -0
- {workbench-0.8.233/src/workbench/model_scripts/pytorch_model → workbench-0.8.241/src/workbench/model_script_utils}/uq_harness.py +39 -21
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/chemprop/chemprop.template +32 -15
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/chemprop/generated_model_script.py +37 -17
- {workbench-0.8.233/src/workbench/model_script_utils → workbench-0.8.241/src/workbench/model_scripts/chemprop}/model_script_utils.py +225 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/pytorch_model/generated_model_script.py +29 -15
- {workbench-0.8.233/src/workbench/model_scripts/xgb_model → workbench-0.8.241/src/workbench/model_scripts/pytorch_model}/model_script_utils.py +225 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/pytorch_model/pytorch.template +28 -14
- {workbench-0.8.233/src/workbench/model_scripts/xgb_model → workbench-0.8.241/src/workbench/model_scripts/pytorch_model}/uq_harness.py +39 -21
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/xgb_model/generated_model_script.py +35 -22
- {workbench-0.8.233/src/workbench/model_scripts/chemprop → workbench-0.8.241/src/workbench/model_scripts/xgb_model}/model_script_utils.py +225 -0
- {workbench-0.8.233/src/workbench/model_script_utils → workbench-0.8.241/src/workbench/model_scripts/xgb_model}/uq_harness.py +39 -21
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/xgb_model/xgb_model.template +29 -18
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/scripts/ml_pipeline_batch.py +47 -2
- workbench-0.8.241/src/workbench/scripts/ml_pipeline_launcher.py +410 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/scripts/ml_pipeline_sqs.py +22 -2
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/themes/dark/custom.css +29 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/themes/light/custom.css +29 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/themes/midnight_blue/custom.css +28 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/model_utils.py +9 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/theme_manager.py +95 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/component_interface.py +3 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/plugin_interface.py +26 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/plugins/ag_table.py +4 -11
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/plugins/confusion_matrix.py +14 -8
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/plugins/model_details.py +8 -3
- workbench-0.8.241/src/workbench/web_interface/components/plugins/model_plot.py +156 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/plugins/scatter_plot.py +9 -2
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/plugins/shap_summary_plot.py +12 -4
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/settings_menu.py +10 -49
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench.egg-info/PKG-INFO +2 -2
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench.egg-info/SOURCES.txt +7 -1
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench.egg-info/entry_points.txt +1 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench.egg-info/requires.txt +1 -1
- {workbench-0.8.233 → workbench-0.8.241}/tests/artifacts/empty_model_group.py +4 -0
- {workbench-0.8.233 → workbench-0.8.241}/tox.ini +2 -2
- workbench-0.8.233/applications/aws_dashboard/pages/models/callbacks.py +0 -156
- workbench-0.8.233/docs/themes/details.md +0 -112
- workbench-0.8.233/docs/themes/index.md +0 -87
- workbench-0.8.233/model_docker_images/inference/requirements.txt +0 -10
- workbench-0.8.233/model_docker_images/training/requirements.txt +0 -8
- workbench-0.8.233/src/workbench/web_interface/components/model_plot.py +0 -75
- {workbench-0.8.233 → workbench-0.8.241}/.flake8 +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/.github/dependabot.yml +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/.github/workflows/deploy-docs.yml +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/.github/workflows/python-lint.yml +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/.gitignore +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/CONTRIBUTING.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/Dockerfile +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/LICENSE +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/Makefile +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/README.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/SECURITY.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/README.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/assets/favicon.ico +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/dashboard +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/deploy.sh +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/open_source_config.json +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/pages/data_sources/callbacks.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/pages/data_sources/layout.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/pages/data_sources/page.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/pages/endpoints/layout.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/pages/feature_sets/callbacks.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/pages/feature_sets/layout.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/pages/feature_sets/page.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/pages/license/page.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/pages/main/callbacks.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/pages/main/layout.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/pages/main/page.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/pages/models/layout.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/pages/pipelines/callbacks.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/pages/pipelines/layout.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/pages/pipelines/page.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/pages/status/page.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/static/dark.css +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/static/light.css +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/compound_explorer/Dockerfile +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/compound_explorer/README.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/compound_explorer/app.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/compound_explorer/assets/favicon.ico +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/compound_explorer/callbacks.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/compound_explorer/explorer +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/compound_explorer/layout.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/compound_explorer/nginx.conf +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/compound_explorer/open_source_config.json +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/compound_explorer/requirements.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/compound_explorer/storage/callbacks.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/compound_explorer/storage/callbacks_new.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/compound_explorer/storage/layout_new.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/applications/compound_explorer/supervisord.conf +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/aws_account_setup.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/aws_identity_check.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/build_ml_pipeline.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/compound_explorer/.gitignore +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/compound_explorer/README.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/compound_explorer/app.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/compound_explorer/cdk.json +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/compound_explorer/compound_explorer/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/compound_explorer/compound_explorer/compound_explorer_stack.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/compound_explorer/requirements.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/event_bridge/Readme.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_compute/README.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_compute/app.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_compute/cdk.json +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_compute/requirements.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_compute/workbench_compute/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_compute/workbench_compute/lambdas/batch_trigger/handler.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_core/.gitignore +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_core/README.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_core/app.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_core/cdk.json +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_core/requirements-dev.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_core/requirements.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_core/source.bat +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_core/workbench_core/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_core/workbench_core/workbench_core_stack.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_dashboard_full/.gitignore +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_dashboard_full/README.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_dashboard_full/cdk.json +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_dashboard_full/requirements-dev.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_dashboard_full/requirements.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_dashboard_full/source.bat +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_dashboard_full/workbench_dashboard_full/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_dashboard_lite/.gitignore +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_dashboard_lite/README.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_dashboard_lite/cdk.json +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_dashboard_lite/requirements.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/aws_setup/workbench_dashboard_lite/workbench_dashboard_lite/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/data/abalone.csv +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/data/karate_graph.json +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/data/test_data.csv +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/data/test_data.json +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/data/wine_dataset.csv +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/deploy_docker.sh +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/admin/aws_service_limits.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/admin/base_docker_push.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/admin/dashboard_docker_push.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/admin/dashboard_s3_plugins.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/admin/explorer_docker_push.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/admin/images/dashboard_secret_click.png +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/admin/images/serverless_quotas.png +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/admin/images/status_showing_S3_path.png +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/admin/pypi_release.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/admin/workbench_docker_for_lambdas.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/advanced_models/images/confidence.jpg +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/api_classes/data_source.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/api_classes/df_store.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/api_classes/endpoint.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/api_classes/feature_set.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/api_classes/meta.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/api_classes/model.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/api_classes/monitor.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/api_classes/overview.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/api_classes/parameter_store.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/api_classes/pipelines.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/api_classes/views.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/aws_setup/aws_access_management.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/aws_setup/aws_client_vpn.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/aws_setup/aws_setup.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/aws_setup/aws_tips_and_tricks.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/aws_setup/core_stack.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/aws_setup/dashboard_stack.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/aws_setup/domain_cert_setup.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/aws_setup/full_pipeline.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/aws_setup/iam_assume_role.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/aws_setup/sso_assume_role.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/blogs/aws_credentials_lock.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/blogs/canonicalization_and_tautomerization.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/blogs/compound_etl.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/blogs/compound_explorer.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/blogs/descriptor_drilldown.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/blogs/eda.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/blogs/feature_importances.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/blogs/fun_with_workbench/fun_with_endpoints.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/blogs/htg.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/blogs/index.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/blogs/model_monitoring.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/blogs/residual_analysis.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/cached/cached_data_source.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/cached/cached_endpoint.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/cached/cached_feature_set.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/cached/cached_meta.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/cached/cached_model.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/cached/overview.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/chem_utils/index.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/cloudwatch/index.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/comparisons/workbench_vs_databricks.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/compound_explorer/tox21.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/compound_explorer/toxicity_modeling.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/core_classes/artifacts/artifact.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/core_classes/artifacts/athena_source.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/core_classes/artifacts/data_source_abstract.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/core_classes/artifacts/endpoint_core.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/core_classes/artifacts/feature_set_core.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/core_classes/artifacts/model_core.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/core_classes/artifacts/monitor_core.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/core_classes/artifacts/overview.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/core_classes/overview.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/core_classes/transforms/data_loaders_heavy.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/core_classes/transforms/data_loaders_light.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/core_classes/transforms/data_to_features.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/core_classes/transforms/features_to_model.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/core_classes/transforms/model_to_endpoint.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/core_classes/transforms/overview.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/core_classes/transforms/pandas_transforms.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/core_classes/transforms/transform.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/core_classes/views/computation_view.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/core_classes/views/display_view.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/core_classes/views/inference_view.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/core_classes/views/overview.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/core_classes/views/training_view.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/data_algorithms/dataframes/overview.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/data_algorithms/graphs/overview.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/data_algorithms/overview.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/data_algorithms/spark/overview.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/data_algorithms/sql/overview.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/enterprise/index.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/enterprise/private_saas.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/enterprise/project_branding.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/enterprise/themes.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/getting_started/index.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/glue/index.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/images/big_spider.png +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/images/graph_representation.png +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/images/powered_aws_dark_blue.png +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/images/powered_aws_transparent.png +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/images/powered_aws_white.png +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/images/powered_aws_with_tm_grey.png +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/images/scp.png +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/images/scp_labs.png +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/images/small_spider.png +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/images/workbench_concepts.png +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/index.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/lambda_layer/index.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/misc/faq.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/misc/general_info.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/misc/scp_consulting.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/misc/workbench_classes_concepts.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/model_utils/index.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/plugins/index.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/presentations/index.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/release_notes/0_8_106.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/release_notes/0_8_158.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/release_notes/0_8_50.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/release_notes/0_8_55.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/release_notes/0_8_58.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/release_notes/0_8_60.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/release_notes/0_8_71.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/release_notes/0_8_74.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/release_notes/0_8_78.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/release_notes/archived/0_7_8.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/release_notes/archived/0_8_11.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/release_notes/archived/0_8_20.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/release_notes/archived/0_8_22.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/release_notes/archived/0_8_23.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/release_notes/archived/0_8_27.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/release_notes/archived/0_8_29.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/release_notes/archived/0_8_33.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/release_notes/archived/0_8_35.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/release_notes/archived/0_8_36.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/release_notes/archived/0_8_39.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/release_notes/archived/0_8_42.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/release_notes/archived/0_8_46.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/release_notes/archived/0_8_6.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/release_notes/archived/0_8_8.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/repl/index.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/road_maps/0_9_0.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/docs/road_maps/0_9_5.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/ag-grid/hello_world.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/chem_utils/tautomerize_smiles.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/datasource/datasource_from_df.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/datasource/datasource_from_s3.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/datasource/datasource_query.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/datasource/datasource_stats.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/datasource/datasource_to_featureset.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/endpoint/endpoint_details.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/endpoint/endpoint_inference.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/endpoint/endpoint_metrics.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/featureset/featureset_eda.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/featureset/featureset_query.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/full_ml_pipeline.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/glue_jobs/glue_example_1.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/glue_jobs/glue_example_2.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/glue_jobs/glue_example_3.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/glue_jobs/glue_launcher_examples/example_1.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/glue_jobs/glue_launcher_examples/example_2.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/meta/meta_list_endpoints.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/meta/meta_list_models.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/meta/meta_model_metrics.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/ml_pipelines/list_models.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/ml_pipelines/wine_classifier.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/model_utils/model_metrics.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/model_utils/model_to_endpoint.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/model_utils/onboard_model.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/models/chemprop.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/models/chemprop_foundation.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/models/custom_model.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/models/dbscan.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/models/knn.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/models/meta_model.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/models/pytorch.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/models/random_forest.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/models/smiles_to_fingerprints.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/models/smiles_to_md_v1.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/models/uq/bayesian_ridge.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/models/uq/ensemble_xgb.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/models/uq/gaussian_process.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/models/uq/meta_uq.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/models/uq/ngboost.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/models/uq/quant_xgb.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/models/xgb_model.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/monitor/monitor_setup.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/monitor/monitor_usage.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/plugins/branding/Readme.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/plugins/branding/scp.json +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/plugins/components/custom_plugin.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/plugins/components/endpoint_plugin.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/plugins/components/endpoint_turbo.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/plugins/components/model_markdown.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/plugins/components/model_plugin.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/plugins/packages/my_plugin_utils/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/plugins/packages/my_plugin_utils/assets/foo.json +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/plugins/packages/my_plugin_utils/cool_stuff.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/plugins/pages/plugin_page_1.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/plugins/pages/plugin_page_2.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/plugins/pages/plugin_page_3.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/plugins/templates/Readme.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/plugins/views/model_plugin_view.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/examples/plugins/views/my_view_plugin.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/experiments/chem_info/bulk_sims.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/experiments/chem_info/knn_sims.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/experiments/cleanlab_bug_report.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/experiments/confidence_roc_curve.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/experiments/coverage_probability.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/experiments/db_scan_test.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/experiments/log_testing.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/experiments/networkx_id.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/experiments/prediction_intervals.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/experiments/residual_analysis.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/experiments/rocauc_testing.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/experiments/scatter_zoom_issue.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/experiments/sol_pipeline.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/feature_endpoints/model_scripts/molecular_utils/mol_descriptors.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/feature_endpoints/model_scripts/molecular_utils/mol_standardize.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/feature_endpoints/model_scripts/rdkit_mordred_model_script.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/feature_endpoints/model_scripts/rdkit_mordred_model_script_keep_salts.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/feature_endpoints/model_scripts/requirements.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/feature_endpoints/rdkit_mordred_keep_salts_v1.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/feature_endpoints/rdkit_mordred_v1.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/glue_jobs/create_glue_workflow_with_trigger.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/glue_jobs/example_glue_job.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/glue_jobs/glue_job_pipeline.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/glue_jobs/glue_mixed_case.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/ml_pipelines/hyper_uq.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/Readme.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/inference/Dockerfile +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/inference/main.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/inference/serve +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/meta_inference/Dockerfile +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/meta_inference/main.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/meta_inference/requirements.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/meta_inference/serve +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/meta_training/Dockerfile +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/meta_training/requirements.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/meta_training/sagemaker_entrypoint.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/ml_pipelines/ml_pipeline_runner.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/pytorch_inference/Dockerfile +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/pytorch_inference/main.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/pytorch_inference/requirements.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/pytorch_inference/serve +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/pytorch_training/Dockerfile +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/pytorch_training/requirements.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/pytorch_training/sagemaker_entrypoint.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/scripts/build_deploy.sh +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/tests/data/abalone_sm.csv +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/tests/example_model_script.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/tests/run_tests.sh +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/tests/test_inference.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/tests/test_training.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/training/Dockerfile +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/training/sagemaker_entrypoint.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/workbench_inference/Dockerfile +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/workbench_inference/main.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/workbench_inference/requirements.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/model_docker_images/workbench_inference/serve +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/notebooks/Inference_On_Legacy_Models.ipynb +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/notebooks/ML_Pipeline_with_Workbench.ipynb +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/notebooks/ML_Pipeline_with_Workbench_2.ipynb +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/notebooks/Outliers_in_Workbench.ipynb +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/notebooks/Regression_Confidence_Experiments.ipynb +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/notebooks/Residual_Analysis.ipynb +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/notebooks/images/athena_query_aqsol.png +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/notebooks/images/aws_dashboard_aqsol.png +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/notebooks/images/dashboard_aqsol_features.png +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/notebooks/images/model_screenshot.png +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/notebooks/images/scp_labs.png +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/open_admet/.gitignore +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/open_admet/README.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/open_admet/all_models.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/open_admet/hello_world.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/open_admet/images/confidence.jpg +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/open_admet/images/open_admet_model.jpg +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/open_admet/load_data.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/open_admet/model_metrics.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/open_admet/run_inference.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/open_admet/utils/compute_model_metrics.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/presentations/README.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/active_logs.sh +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/admin/athena_ddl_mixed_case.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/admin/check_all_glue_tables.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/admin/delete_invalid_views.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/admin/delete_redis_keys.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/admin/list_datacatalog.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/admin/migration/copy_glue_database.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/admin/migration/delete_sageworks_glue_database.sh +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/admin/migration/ds_migrate.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/admin/migration/endpoint_migrate.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/admin/migration/fs_migrate.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/admin/migration/model_migrate.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/admin/pull_image_digest.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/admin/redis_reaper.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/admin/spam_list_tags.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/admin/storage/convert_training_views.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/admin/storage/migrate_data_source_via_df.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/admin/storage/migrate_ds_meta.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/admin/test_batch_job_failure.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/admin/test_no_workbench_config.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/ag_table_row_selection.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/compare_dataframes.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/compare_model_packages.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/delete_data_capture.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/endpoint_timing.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/get_tags.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/instantiation_timings.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/llm_deploys/deepseek_deploy.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/model_cache_refresh.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/model_endpoint_sanity_check.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/monitor_event_bridge.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/onboard_endpoints.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/onboard_models.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/pipeline_model_endpoint.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/pubchem/pubchem_example.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/pubchem/pubchem_query.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/pubchem/pubchem_query_with_cid.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/sagemaker_feature_group_issue.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/seaborn_to_plotly.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/storage/dns_data_to_features.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/storage/generate_jsonl_data.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/test_feature_resolution.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/test_feature_set_creation.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/tox21/test_tox_heuristic.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/scripts/tox21/tox21_to_df_store.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/setup.cfg +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/dataframe/Readme.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/dataframe/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/dataframe/compound_dataset_overlap.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/dataframe/data_source_eda.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/dataframe/feature_space_proximity.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/dataframe/fingerprint_proximity.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/dataframe/projection_2d.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/dataframe/proximity.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/dataframe/storage/aggregation.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/dataframe/storage/feature_resolution.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/dataframe/storage/feature_spider.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/dataframe/storage/residuals_calculator.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/dataframe/storage/row_tagger.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/dataframe/storage/target_gradients.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/graph/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/graph/heavy/Readme.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/graph/light/Readme.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/graph/light/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/graph/light/proximity_graph.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/models/cleanlab_model.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/models/noise_model.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/spark/Readme.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/sql/Readme.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/sql/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/sql/column_stats.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/sql/correlations.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/sql/descriptive_stats.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/sql/outliers.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/sql/sample_rows.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/algorithms/sql/value_counts.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/api/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/api/compound.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/api/data_source.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/api/df_store.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/api/feature_set.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/api/graph_store.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/api/meta.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/api/meta_model.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/api/monitor.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/api/parameter_store.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/api/pipeline.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/cached/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/cached/cached_data_source.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/cached/cached_endpoint.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/cached/cached_feature_set.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/cached/cached_meta.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/cached/cached_pipeline.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/artifacts/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/artifacts/artifact.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/artifacts/cached_artifact_mixin.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/artifacts/data_capture_core.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/artifacts/data_source_abstract.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/artifacts/data_source_factory.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/artifacts/df_store_core.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/artifacts/feature_set_core.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/artifacts/model_core.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/artifacts/monitor_core.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/artifacts/parameter_store_core.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/cloud_platform/aws/README.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/cloud_platform/aws/aws_account_clamp.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/cloud_platform/aws/aws_graph_store.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/cloud_platform/aws/aws_secrets_manager.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/cloud_platform/aws/aws_session.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/cloud_platform/aws/cache_dataframe.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/cloud_platform/azure/README.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/cloud_platform/cloud_meta.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/cloud_platform/gcp/README.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/pipelines/pipeline_executor.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/Readme.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/data_loaders/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/data_loaders/heavy/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/data_loaders/heavy/s3_heavy_to_data_source.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/data_loaders/light/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/data_loaders/light/csv_to_data_source.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/data_loaders/light/json_to_data_source.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/data_loaders/light/s3_to_data_source_light.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/data_to_data/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/data_to_data/heavy/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/data_to_data/heavy/emr/Readme.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/data_to_data/heavy/glue/Readme.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/data_to_data/light/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/data_to_data/light/clean_data.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/data_to_data/light/data_to_data_light.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/data_to_features/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/data_to_features/heavy/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/data_to_features/heavy/chunk/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/data_to_features/heavy/chunk/data_to_features_chunk.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/data_to_features/heavy/emr/Readme.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/data_to_features/heavy/glue/Readme.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/data_to_features/heavy/storage/data_to_features_heavy_old.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/data_to_features/light/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/data_to_features/light/data_to_features_light.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/data_to_features/light/molecular_descriptors.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/features_to_features/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/features_to_features/heavy/emr/Readme.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/features_to_features/heavy/glue/Readme.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/features_to_model/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/features_to_model/features_to_model.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/model_to_endpoint/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/pandas_transforms/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/pandas_transforms/data_to_pandas.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/pandas_transforms/features_to_pandas.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/pandas_transforms/pandas_to_data.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/pandas_transforms/pandas_to_features.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/pandas_transforms/pandas_to_features_chunked.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/transforms/transform.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/views/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/views/column_subset_view.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/views/computation_view.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/views/create_view.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/views/display_view.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/views/inference_view.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/views/pandas_to_view.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/views/storage/mdq_view.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/views/training_view.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/views/view.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/core/views/view_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_script_utils/pytorch_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/chemprop/requirements.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/custom_models/chem_info/Readme.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/custom_models/chem_info/fingerprints.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/custom_models/chem_info/mol_descriptors.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/custom_models/chem_info/mol_standardize.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/custom_models/chem_info/molecular_descriptors.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/custom_models/chem_info/morgan_fingerprints.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/custom_models/chem_info/requirements.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/custom_models/network_security/Readme.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/custom_models/proximity/Readme.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/custom_models/proximity/feature_space_proximity.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/custom_models/proximity/feature_space_proximity.template +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/custom_models/proximity/requirements.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/custom_models/uq_models/Readme.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/custom_models/uq_models/bayesian_ridge.template +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/custom_models/uq_models/ensemble_xgb.template +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/custom_models/uq_models/feature_space_proximity.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/custom_models/uq_models/gaussian_process.template +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/custom_models/uq_models/ngboost.template +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/custom_models/uq_models/requirements.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/custom_script_example/custom_model_script.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/custom_script_example/requirements.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/ensemble_xgb/ensemble_xgb.template +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/ensemble_xgb/requirements.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/meta_model/generated_model_script.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/meta_model/meta_model.template +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/pytorch_model/pytorch_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/pytorch_model/requirements.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/scikit_learn/generated_model_script.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/scikit_learn/requirements.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/scikit_learn/scikit_learn.template +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/script_generation.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/uq_models/generated_model_script.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/model_scripts/xgb_model/requirements.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/repl/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/repl/workbench_shell.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/resources/open_source_api.key +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/resources/signature_verify_pub.pem +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/scripts/check_double_bond_stereo.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/scripts/endpoint_test.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/scripts/glue_launcher.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/scripts/lambda_test.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/scripts/meta_model_sim.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/scripts/monitor_cloud_watch.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/scripts/redis_expire.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/scripts/redis_report.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/scripts/show_config.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/scripts/training_test.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/themes/dark/base_css.url +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/themes/dark/plotly.json +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/themes/light/base_css.url +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/themes/light/branding.json +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/themes/light/plotly.json +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/themes/midnight_blue/base_css.url +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/themes/midnight_blue/branding.json +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/themes/midnight_blue/plotly.json +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/ai_compound_generator.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/ai_summary.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/ai_synth.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/athena_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/aws_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/bulk_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/cache.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/chem_utils/__init__.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/chem_utils/fingerprints.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/chem_utils/misc.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/chem_utils/mol_descriptors.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/chem_utils/mol_standardize.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/chem_utils/mol_tagging.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/chem_utils/projections.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/chem_utils/salts.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/chem_utils/sdf.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/chem_utils/toxicity.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/chem_utils/vis.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/chemprop_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/clientside_callbacks.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/cloudwatch_handler.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/cloudwatch_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/color_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/config_manager.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/dashboard_metrics.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/datetime_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/deprecated_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/df_to_endpoint.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/ecs_info.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/endpoint_metrics.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/endpoint_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/extract_model_artifact.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/glue_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/graph_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/ipython_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/json_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/lambda_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/license_manager.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/log_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/markdown_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/meta_model_simulator.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/metrics_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/monitor_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/pandas_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/performance_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/pipeline_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/plot_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/plugin_manager.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/prox_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/pytorch_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/redis_cache.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/repl_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/s3_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/shap_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/shapley_values.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/symbols.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/test_data_generator.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/trace_calls.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/type_abbrev.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/workbench_cache.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/workbench_event_bridge.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/workbench_logging.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/workbench_sqs.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/xgboost_local_crossfold.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/utils/xgboost_model_utils.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/correlation_matrix.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/data_details_markdown.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/endpoint_metric_plots.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/experiments/dashboard_metric_plots.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/experiments/outlier_plot.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/plugin_unit_test.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/plugins/dashboard_status.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/plugins/data_details.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/plugins/endpoint_details.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/plugins/generated_compounds.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/plugins/graph_plot.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/plugins/license_details.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/plugins/molecule_panel.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/plugins/molecule_viewer.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/plugins/pipeline_details.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/plugins/proximity_mini_graph.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/regression_plot.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/components/violin_plots.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/page_views/data_sources_page_view.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/page_views/endpoints_page_view.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/page_views/feature_sets_page_view.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/page_views/main_page.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/page_views/models_page_view.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/page_views/page_view.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench/web_interface/page_views/pipelines_page_view.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench.egg-info/dependency_links.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/src/workbench.egg-info/top_level.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/test_artifacts/create_aqsol_artifacts.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/test_artifacts/create_aqsol_artifacts_all.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/test_artifacts/create_aqsol_rt_artifacts.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/test_artifacts/create_basic_test_artifacts.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/test_artifacts/create_copy_artifacts.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/test_artifacts/create_empty_model_group.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/test_artifacts/create_endpoints_for_timing.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/test_artifacts/create_graph_artifacts.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/test_artifacts/create_knn_artifacts.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/test_artifacts/create_meta_endpoints.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/test_artifacts/create_pipeline_model.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/test_artifacts/create_proximity_models.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/test_artifacts/create_quant_regression_artifacts.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/test_artifacts/create_realtime_endpoint.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/test_artifacts/create_training_adjusted_artifacts.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/test_artifacts/create_wine_artifacts.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/test_artifacts/delete_stress_test_artifacts.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/test_artifacts/delete_test_artifacts.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/test_artifacts/hyper_testing.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/test_artifacts/regression_ensemble.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/test_artifacts/stress_test_aws.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/README.md +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/artifacts/data_source_tests.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/artifacts/endpoint_tests.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/artifacts/featureset_ingest_boundaries.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/artifacts/featureset_tests.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/artifacts/graph_tests.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/artifacts/model_metrics_tests.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/artifacts/model_tests.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/aws_account/aws_account_clamp_tests.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/cached/cached_artifact_tests.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/chem_info/test_tautomerization.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/corner_cases/end_to_end.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/df_store/df_store_tests.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/lambda/decompress_layers.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/pandas_tests/test_drift.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/parameter_store/param_store_tests.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/plugin_tests/crashing_plugin.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/pytorch/pytorch_hello.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/requirements-dev.txt +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/specific/capital_tests.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/specific/column_changes.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/specific/config_manager.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/specific/deletion_tests.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/specific/shap_tests.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/transforms/data_to_data_tests.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/transforms/data_to_features_tests.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/transforms/features_to_model_tests.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/transforms/model_to_endpoint_tests.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/transforms/pandas_to_data_tests.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/transforms/pandas_to_features_test.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/views/view_tests.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/views/view_tests_complex.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/web_components/confusion_matrix_test.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/web_components/correlation_matrix_test.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/web_components/graph_plot_test.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/web_components/plugin_interface_test.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/tests/web_components/scatter_plot_test.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/ui_testing/assets/custom.css +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/ui_testing/table_comparison.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/ui_testing/theme_switching.py +0 -0
- {workbench-0.8.233 → workbench-0.8.241}/ui_testing/theme_switching_2.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: workbench
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.241
|
|
4
4
|
Summary: Workbench: A Dashboard and Python API for creating and deploying AWS SageMaker Model Pipelines
|
|
5
5
|
Author-email: SuperCowPowers LLC <support@supercowpowers.com>
|
|
6
6
|
License: MIT License
|
|
@@ -40,7 +40,7 @@ Requires-Dist: boto3>=1.31.76
|
|
|
40
40
|
Requires-Dist: botocore>=1.31.76
|
|
41
41
|
Requires-Dist: redis>=5.0.1
|
|
42
42
|
Requires-Dist: numpy>=1.26.4
|
|
43
|
-
Requires-Dist: pandas
|
|
43
|
+
Requires-Dist: pandas<3.0,>=2.2.1
|
|
44
44
|
Requires-Dist: awswrangler>=3.4.0
|
|
45
45
|
Requires-Dist: sagemaker<3.0,>=2.143
|
|
46
46
|
Requires-Dist: cryptography>=44.0.2
|
|
@@ -33,6 +33,7 @@ app = Dash(
|
|
|
33
33
|
title=app_title,
|
|
34
34
|
use_pages=True,
|
|
35
35
|
external_stylesheets=css_files,
|
|
36
|
+
assets_folder="assets",
|
|
36
37
|
)
|
|
37
38
|
|
|
38
39
|
# Register the CSS route in the ThemeManager
|
|
@@ -90,6 +91,8 @@ app.layout = html.Div(
|
|
|
90
91
|
# URL for subpage navigation (jumping to feature_sets, models, etc.)
|
|
91
92
|
dcc.Location(id="url", refresh="callback-nav"),
|
|
92
93
|
dcc.Store(id=plugin_info_id, data={}),
|
|
94
|
+
# Theme store for dynamic theme switching (plugins can use this as Input to re-render figures)
|
|
95
|
+
dcc.Store(id="workbench-theme-store", data=tm.current_theme()),
|
|
93
96
|
# Settings menu in top-right corner
|
|
94
97
|
html.Div(
|
|
95
98
|
settings_menu.create_component(settings_menu_id),
|
|
@@ -100,10 +103,10 @@ app.layout = html.Div(
|
|
|
100
103
|
**{"data-bs-theme": tm.data_bs_theme()},
|
|
101
104
|
)
|
|
102
105
|
|
|
103
|
-
# Clientside callback for theme switching (stores in localStorage, sets cookie,
|
|
106
|
+
# Clientside callback for theme switching (stores in localStorage, sets cookie, triggers checkmark update)
|
|
104
107
|
app.clientside_callback(
|
|
105
|
-
settings_menu.get_clientside_callback_code(
|
|
106
|
-
Output(f"{settings_menu_id}-
|
|
108
|
+
settings_menu.get_clientside_callback_code(),
|
|
109
|
+
Output(f"{settings_menu_id}-init", "data"),
|
|
107
110
|
Input({"type": f"{settings_menu_id}-theme-item", "theme": ALL}, "n_clicks"),
|
|
108
111
|
State({"type": f"{settings_menu_id}-theme-item", "theme": ALL}, "id"),
|
|
109
112
|
)
|
|
@@ -116,6 +119,13 @@ app.clientside_callback(
|
|
|
116
119
|
State({"type": f"{settings_menu_id}-checkmark", "theme": ALL}, "id"),
|
|
117
120
|
)
|
|
118
121
|
|
|
122
|
+
# Clientside callback to update the workbench-theme-store (plugins listen to this for figure re-renders)
|
|
123
|
+
app.clientside_callback(
|
|
124
|
+
"function(theme) { return theme; }",
|
|
125
|
+
Output("workbench-theme-store", "data"),
|
|
126
|
+
Input(f"{settings_menu_id}-init", "data"),
|
|
127
|
+
)
|
|
128
|
+
|
|
119
129
|
# Spin up the Plugin Manager
|
|
120
130
|
pm = PluginManager()
|
|
121
131
|
|
{workbench-0.8.233 → workbench-0.8.241}/applications/aws_dashboard/pages/endpoints/callbacks.py
RENAMED
|
@@ -14,6 +14,9 @@ from workbench.cached.cached_endpoint import CachedEndpoint
|
|
|
14
14
|
# Get the Workbench logger
|
|
15
15
|
log = logging.getLogger("workbench")
|
|
16
16
|
|
|
17
|
+
# Theme store ID (defined in app.py)
|
|
18
|
+
THEME_STORE_ID = "workbench-theme-store"
|
|
19
|
+
|
|
17
20
|
|
|
18
21
|
def on_page_load():
|
|
19
22
|
@callback(
|
|
@@ -119,3 +122,23 @@ def setup_plugin_callbacks(plugins):
|
|
|
119
122
|
|
|
120
123
|
# Return all the updated properties
|
|
121
124
|
return all_props
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def setup_theme_callback(plugins):
|
|
128
|
+
"""Set up a callback to update all plugins when the theme changes.
|
|
129
|
+
|
|
130
|
+
Args:
|
|
131
|
+
plugins: List of all plugin instances on this page.
|
|
132
|
+
"""
|
|
133
|
+
|
|
134
|
+
@callback(
|
|
135
|
+
[Output(cid, prop, allow_duplicate=True) for p in plugins for cid, prop in p.properties],
|
|
136
|
+
Input(THEME_STORE_ID, "data"),
|
|
137
|
+
prevent_initial_call=True,
|
|
138
|
+
)
|
|
139
|
+
def on_theme_change(theme):
|
|
140
|
+
"""Update all plugins when the theme changes."""
|
|
141
|
+
all_props = []
|
|
142
|
+
for plugin in plugins:
|
|
143
|
+
all_props.extend(plugin.set_theme(theme))
|
|
144
|
+
return all_props
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"""Callbacks for the Model Subpage Web User Interface"""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from dash import callback, Input, Output, State
|
|
5
|
+
from dash.exceptions import PreventUpdate
|
|
6
|
+
from urllib.parse import urlparse, parse_qs
|
|
7
|
+
|
|
8
|
+
# Workbench Imports
|
|
9
|
+
from workbench.web_interface.page_views.models_page_view import ModelsPageView
|
|
10
|
+
from workbench.web_interface.components.plugins.ag_table import AGTable
|
|
11
|
+
from workbench.cached.cached_model import CachedModel
|
|
12
|
+
|
|
13
|
+
# Get the Workbench logger
|
|
14
|
+
log = logging.getLogger("workbench")
|
|
15
|
+
|
|
16
|
+
# Theme store ID (defined in app.py)
|
|
17
|
+
THEME_STORE_ID = "workbench-theme-store"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def on_page_load():
|
|
21
|
+
@callback(
|
|
22
|
+
Output("models_table", "selectedRows"),
|
|
23
|
+
Output("models_page_loaded", "data"),
|
|
24
|
+
Input("url", "href"),
|
|
25
|
+
Input("models_table", "rowData"),
|
|
26
|
+
State("models_page_loaded", "data"),
|
|
27
|
+
prevent_initial_call=True,
|
|
28
|
+
)
|
|
29
|
+
def _on_page_load(href, row_data, page_already_loaded):
|
|
30
|
+
if page_already_loaded:
|
|
31
|
+
raise PreventUpdate
|
|
32
|
+
|
|
33
|
+
if not href or not row_data:
|
|
34
|
+
raise PreventUpdate
|
|
35
|
+
|
|
36
|
+
parsed = urlparse(href)
|
|
37
|
+
if parsed.path != "/models":
|
|
38
|
+
raise PreventUpdate
|
|
39
|
+
|
|
40
|
+
selected_name = parse_qs(parsed.query).get("name", [None])[0]
|
|
41
|
+
if not selected_name:
|
|
42
|
+
return [row_data[0]], True
|
|
43
|
+
|
|
44
|
+
for row in row_data:
|
|
45
|
+
if row.get("name") == selected_name:
|
|
46
|
+
return [row], True
|
|
47
|
+
|
|
48
|
+
raise PreventUpdate
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def model_table_refresh(page_view: ModelsPageView, table: AGTable):
|
|
52
|
+
@callback(
|
|
53
|
+
[Output(component_id, prop) for component_id, prop in table.properties],
|
|
54
|
+
Input("models_refresh", "n_intervals"),
|
|
55
|
+
)
|
|
56
|
+
def _model_table_refresh(_n):
|
|
57
|
+
"""Return the table data for the Models Table"""
|
|
58
|
+
page_view.refresh()
|
|
59
|
+
models = page_view.models()
|
|
60
|
+
models["name"] = models["Model Group"]
|
|
61
|
+
models["id"] = range(len(models))
|
|
62
|
+
return table.update_properties(models)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def setup_plugin_callbacks(plugins, model_details_plugin):
|
|
66
|
+
"""Set up callbacks for all plugins.
|
|
67
|
+
|
|
68
|
+
Args:
|
|
69
|
+
plugins: List of all plugins (model_details, shap_plot, model_plot)
|
|
70
|
+
model_details_plugin: The model_details plugin (handles the inference dropdown)
|
|
71
|
+
"""
|
|
72
|
+
|
|
73
|
+
# Register internal callbacks for all plugins
|
|
74
|
+
for plugin in plugins:
|
|
75
|
+
plugin.register_internal_callbacks()
|
|
76
|
+
|
|
77
|
+
# Separate model_details from other plugins - it sets the dropdown that others depend on
|
|
78
|
+
other_plugins = [p for p in plugins if p is not model_details_plugin]
|
|
79
|
+
|
|
80
|
+
# Callback to update model_details when a model is selected (this sets the dropdown)
|
|
81
|
+
@callback(
|
|
82
|
+
[Output(cid, prop) for cid, prop in model_details_plugin.properties],
|
|
83
|
+
Input("models_table", "selectedRows"),
|
|
84
|
+
State("model_details-dropdown", "value"),
|
|
85
|
+
State("model_details-header", "children"),
|
|
86
|
+
)
|
|
87
|
+
def update_model_details(selected_rows, inference_run, previous_model_name):
|
|
88
|
+
"""Update model_details when a model is selected."""
|
|
89
|
+
if not selected_rows or selected_rows[0] is None:
|
|
90
|
+
raise PreventUpdate
|
|
91
|
+
|
|
92
|
+
model_name = selected_rows[0]["name"]
|
|
93
|
+
model = CachedModel(model_name)
|
|
94
|
+
|
|
95
|
+
return model_details_plugin.update_properties(
|
|
96
|
+
model, inference_run=inference_run, previous_model_name=previous_model_name
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
# Callback to update other plugins when the dropdown changes (triggered by model_details)
|
|
100
|
+
@callback(
|
|
101
|
+
[Output(cid, prop) for p in other_plugins for cid, prop in p.properties],
|
|
102
|
+
Input("model_details-dropdown", "value"),
|
|
103
|
+
State("models_table", "selectedRows"),
|
|
104
|
+
)
|
|
105
|
+
def update_other_plugins(inference_run, selected_rows):
|
|
106
|
+
"""Update other plugins when inference run changes."""
|
|
107
|
+
if not selected_rows or selected_rows[0] is None or inference_run is None:
|
|
108
|
+
raise PreventUpdate
|
|
109
|
+
|
|
110
|
+
model_name = selected_rows[0]["name"]
|
|
111
|
+
model = CachedModel(model_name)
|
|
112
|
+
|
|
113
|
+
all_props = []
|
|
114
|
+
for plugin in other_plugins:
|
|
115
|
+
all_props.extend(plugin.update_properties(model, inference_run=inference_run))
|
|
116
|
+
|
|
117
|
+
return all_props
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def setup_theme_callback(plugins):
|
|
121
|
+
"""Set up a callback to update all plugins when the theme changes.
|
|
122
|
+
|
|
123
|
+
Args:
|
|
124
|
+
plugins: List of all plugin instances on this page.
|
|
125
|
+
"""
|
|
126
|
+
|
|
127
|
+
@callback(
|
|
128
|
+
[Output(cid, prop, allow_duplicate=True) for p in plugins for cid, prop in p.properties],
|
|
129
|
+
Input(THEME_STORE_ID, "data"),
|
|
130
|
+
prevent_initial_call=True,
|
|
131
|
+
)
|
|
132
|
+
def on_theme_change(theme):
|
|
133
|
+
"""Update all plugins when the theme changes."""
|
|
134
|
+
all_props = []
|
|
135
|
+
for plugin in plugins:
|
|
136
|
+
all_props.extend(plugin.set_theme(theme))
|
|
137
|
+
return all_props
|
|
@@ -1,19 +1,13 @@
|
|
|
1
1
|
"""Models: A Workbench Web Interface to view, and interact with Models"""
|
|
2
2
|
|
|
3
|
-
from dash import register_page
|
|
3
|
+
from dash import register_page
|
|
4
4
|
|
|
5
5
|
# Local Imports
|
|
6
6
|
from .layout import models_layout
|
|
7
7
|
from . import callbacks
|
|
8
8
|
|
|
9
9
|
# Workbench Imports
|
|
10
|
-
from workbench.web_interface.components.plugins import
|
|
11
|
-
model_details,
|
|
12
|
-
ag_table,
|
|
13
|
-
shap_summary_plot,
|
|
14
|
-
scatter_plot,
|
|
15
|
-
confusion_matrix,
|
|
16
|
-
)
|
|
10
|
+
from workbench.web_interface.components.plugins import model_details, ag_table, shap_summary_plot, model_plot
|
|
17
11
|
from workbench.web_interface.page_views.models_page_view import ModelsPageView
|
|
18
12
|
|
|
19
13
|
# Register this page with Dash
|
|
@@ -31,35 +25,19 @@ models_table_component = models_table.create_component("models_table", max_heigh
|
|
|
31
25
|
my_model_details = model_details.ModelDetails()
|
|
32
26
|
model_details_component = my_model_details.create_component("model_details")
|
|
33
27
|
|
|
34
|
-
# Create
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
# Create ConfusionMatrix plugin for classification models
|
|
39
|
-
my_confusion_matrix = confusion_matrix.ConfusionMatrix()
|
|
40
|
-
confusion_matrix_component = my_confusion_matrix.create_component("model_confusion_matrix")
|
|
41
|
-
|
|
42
|
-
# Wrap both in visibility-controlled containers
|
|
43
|
-
# Show scatter plot by default (with "Waiting for Data..." placeholder)
|
|
44
|
-
# The callback will toggle visibility based on model type once data loads
|
|
45
|
-
model_plot_container = html.Div(
|
|
46
|
-
[
|
|
47
|
-
html.Div(scatter_plot_component, id="scatter-plot-container", style={"display": "block"}),
|
|
48
|
-
html.Div(confusion_matrix_component, id="confusion-matrix-container", style={"display": "none"}),
|
|
49
|
-
],
|
|
50
|
-
id="model-plot-container",
|
|
51
|
-
)
|
|
28
|
+
# Create ModelPlot plugin (handles both regression scatter plot and classification confusion matrix)
|
|
29
|
+
my_model_plot = model_plot.ModelPlot()
|
|
30
|
+
model_plot_component = my_model_plot.create_component("model_plot")
|
|
52
31
|
|
|
53
32
|
# Shap summary plot component
|
|
54
33
|
my_shap_plot = shap_summary_plot.ShapSummaryPlot()
|
|
55
34
|
shap_plot_component = my_shap_plot.create_component("shap_plot")
|
|
56
35
|
|
|
57
|
-
|
|
58
36
|
# Capture our components in a dictionary to send off to the layout
|
|
59
37
|
components = {
|
|
60
38
|
"models_table": models_table_component,
|
|
61
39
|
"model_details": model_details_component,
|
|
62
|
-
"model_plot":
|
|
40
|
+
"model_plot": model_plot_component,
|
|
63
41
|
"shap_plot": shap_plot_component,
|
|
64
42
|
}
|
|
65
43
|
|
|
@@ -76,7 +54,10 @@ callbacks.on_page_load()
|
|
|
76
54
|
callbacks.model_table_refresh(model_view, models_table)
|
|
77
55
|
|
|
78
56
|
# All model visualization plugins
|
|
79
|
-
plugins = [my_model_details, my_shap_plot,
|
|
57
|
+
plugins = [my_model_details, my_shap_plot, my_model_plot]
|
|
58
|
+
|
|
59
|
+
# Set up callbacks for all the plugins
|
|
60
|
+
callbacks.setup_plugin_callbacks(plugins, my_model_details)
|
|
80
61
|
|
|
81
|
-
# Set up
|
|
82
|
-
callbacks.
|
|
62
|
+
# Set up theme change callback for all plugins
|
|
63
|
+
callbacks.setup_theme_callback(plugins)
|
|
@@ -42,7 +42,7 @@ def get_log_events(log_stream_name: str, limit: int = 50) -> list[str]:
|
|
|
42
42
|
return [f"(Error fetching logs: {e})"]
|
|
43
43
|
|
|
44
44
|
|
|
45
|
-
def format_log_messages(messages: list[str], max_chars: int =
|
|
45
|
+
def format_log_messages(messages: list[str], max_chars: int = 10000) -> str:
|
|
46
46
|
"""
|
|
47
47
|
Format log messages for SNS, truncating if necessary.
|
|
48
48
|
|
|
@@ -97,7 +97,7 @@ def lambda_handler(event, context):
|
|
|
97
97
|
# Fetch CloudWatch logs
|
|
98
98
|
log_messages = []
|
|
99
99
|
if log_stream_name:
|
|
100
|
-
log_messages = get_log_events(log_stream_name)
|
|
100
|
+
log_messages = get_log_events(log_stream_name, limit=200)
|
|
101
101
|
|
|
102
102
|
# Build the console URL
|
|
103
103
|
console_url = f"https://{region}.console.aws.amazon.com/batch/home?region={region}" f"#jobs/fargate/detail/{job_id}"
|
|
@@ -13,6 +13,8 @@ from aws_cdk import (
|
|
|
13
13
|
aws_events as events,
|
|
14
14
|
aws_events_targets as targets,
|
|
15
15
|
aws_logs as logs,
|
|
16
|
+
aws_cloudwatch as cloudwatch,
|
|
17
|
+
aws_cloudwatch_actions as cw_actions,
|
|
16
18
|
Duration,
|
|
17
19
|
Size,
|
|
18
20
|
)
|
|
@@ -67,7 +69,7 @@ class WorkbenchComputeStack(Stack):
|
|
|
67
69
|
self.batch_job_definitions = self.create_batch_job_definitions()
|
|
68
70
|
|
|
69
71
|
# Create ML Pipeline SQS Queue and Lambda (after Batch resources)
|
|
70
|
-
self.ml_pipeline_queue = self.create_ml_pipeline_queue()
|
|
72
|
+
self.ml_pipeline_dlq, self.ml_pipeline_queue = self.create_ml_pipeline_queue()
|
|
71
73
|
self.batch_trigger_lambda = self.create_batch_trigger_lambda()
|
|
72
74
|
|
|
73
75
|
# Create Batch failure notification resources
|
|
@@ -75,6 +77,9 @@ class WorkbenchComputeStack(Stack):
|
|
|
75
77
|
self.batch_failure_lambda = self.create_batch_failure_lambda()
|
|
76
78
|
self.create_batch_failure_rule()
|
|
77
79
|
|
|
80
|
+
# Create DLQ alarm (uses the batch failure topic for notifications)
|
|
81
|
+
self.create_dlq_alarm()
|
|
82
|
+
|
|
78
83
|
#####################
|
|
79
84
|
# Batch Compute #
|
|
80
85
|
#####################
|
|
@@ -166,8 +171,12 @@ class WorkbenchComputeStack(Stack):
|
|
|
166
171
|
###########################
|
|
167
172
|
# ML Pipeline SQS Queue #
|
|
168
173
|
###########################
|
|
169
|
-
def create_ml_pipeline_queue(self) -> sqs.Queue:
|
|
170
|
-
"""Create SQS FIFO queue for ML pipeline orchestration with deduplication.
|
|
174
|
+
def create_ml_pipeline_queue(self) -> tuple[sqs.Queue, sqs.Queue]:
|
|
175
|
+
"""Create SQS FIFO queue for ML pipeline orchestration with deduplication.
|
|
176
|
+
|
|
177
|
+
Returns:
|
|
178
|
+
Tuple of (dlq, main_queue)
|
|
179
|
+
"""
|
|
171
180
|
|
|
172
181
|
# Dead letter queue for failed messages (also FIFO)
|
|
173
182
|
dlq = sqs.Queue(
|
|
@@ -179,7 +188,7 @@ class WorkbenchComputeStack(Stack):
|
|
|
179
188
|
)
|
|
180
189
|
|
|
181
190
|
# Main FIFO queue with deduplication
|
|
182
|
-
|
|
191
|
+
main_queue = sqs.Queue(
|
|
183
192
|
self,
|
|
184
193
|
"MLPipelineQueue",
|
|
185
194
|
queue_name="workbench-ml-pipeline-queue.fifo", # Must end with .fifo
|
|
@@ -190,6 +199,8 @@ class WorkbenchComputeStack(Stack):
|
|
|
190
199
|
dead_letter_queue=sqs.DeadLetterQueue(max_receive_count=1, queue=dlq),
|
|
191
200
|
)
|
|
192
201
|
|
|
202
|
+
return dlq, main_queue
|
|
203
|
+
|
|
193
204
|
def create_batch_trigger_lambda(self) -> lambda_.Function:
|
|
194
205
|
"""Create Lambda function to process SQS messages and trigger Batch jobs.
|
|
195
206
|
|
|
@@ -237,13 +248,27 @@ class WorkbenchComputeStack(Stack):
|
|
|
237
248
|
################################
|
|
238
249
|
def create_batch_failure_topic(self) -> sns.Topic:
|
|
239
250
|
"""Create SNS topic for batch job failure notifications."""
|
|
240
|
-
|
|
251
|
+
topic = sns.Topic(
|
|
241
252
|
self,
|
|
242
253
|
"BatchJobFailureTopic",
|
|
243
254
|
topic_name="workbench-batch-job-failure",
|
|
244
255
|
display_name="Workbench Batch Job Failure",
|
|
245
256
|
)
|
|
246
257
|
|
|
258
|
+
# Allow CloudWatch Alarms to publish to this topic
|
|
259
|
+
topic.add_to_resource_policy(
|
|
260
|
+
iam.PolicyStatement(
|
|
261
|
+
sid="AllowCloudWatchAlarms",
|
|
262
|
+
effect=iam.Effect.ALLOW,
|
|
263
|
+
principals=[iam.ServicePrincipal("cloudwatch.amazonaws.com")],
|
|
264
|
+
actions=["sns:Publish"],
|
|
265
|
+
resources=[topic.topic_arn],
|
|
266
|
+
conditions={"ArnLike": {"aws:SourceArn": f"arn:aws:cloudwatch:{self.region}:{self.account}:alarm:*"}},
|
|
267
|
+
)
|
|
268
|
+
)
|
|
269
|
+
|
|
270
|
+
return topic
|
|
271
|
+
|
|
247
272
|
def create_batch_failure_lambda(self) -> lambda_.Function:
|
|
248
273
|
"""Create Lambda function to handle batch job failures and send notifications."""
|
|
249
274
|
|
|
@@ -300,3 +325,26 @@ class WorkbenchComputeStack(Stack):
|
|
|
300
325
|
batch_failure_rule.add_target(targets.LambdaFunction(self.batch_failure_lambda))
|
|
301
326
|
|
|
302
327
|
return batch_failure_rule
|
|
328
|
+
|
|
329
|
+
def create_dlq_alarm(self) -> cloudwatch.Alarm:
|
|
330
|
+
"""Create CloudWatch alarm for DLQ messages to alert on pipeline failures."""
|
|
331
|
+
|
|
332
|
+
alarm = cloudwatch.Alarm(
|
|
333
|
+
self,
|
|
334
|
+
"MLPipelineDLQAlarm",
|
|
335
|
+
alarm_name="workbench-ml-pipeline-dlq-alarm",
|
|
336
|
+
alarm_description="Alert when messages appear in the ML Pipeline dead letter queue",
|
|
337
|
+
metric=self.ml_pipeline_dlq.metric_approximate_number_of_messages_visible(
|
|
338
|
+
period=Duration.minutes(15),
|
|
339
|
+
statistic="Maximum",
|
|
340
|
+
),
|
|
341
|
+
threshold=1,
|
|
342
|
+
evaluation_periods=1,
|
|
343
|
+
comparison_operator=cloudwatch.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
|
|
344
|
+
treat_missing_data=cloudwatch.TreatMissingData.NOT_BREACHING,
|
|
345
|
+
)
|
|
346
|
+
|
|
347
|
+
# Send alarm notifications to the batch failure topic
|
|
348
|
+
alarm.add_alarm_action(cw_actions.SnsAction(self.batch_failure_topic))
|
|
349
|
+
|
|
350
|
+
return alarm
|
|
@@ -12,7 +12,7 @@ print(f"Account: {aws_account}")
|
|
|
12
12
|
print(f"Region: {aws_region}")
|
|
13
13
|
|
|
14
14
|
# When you want a different docker image change this line
|
|
15
|
-
dashboard_image = "public.ecr.aws/m6i5k1r2/workbench_dashboard:
|
|
15
|
+
dashboard_image = "public.ecr.aws/m6i5k1r2/workbench_dashboard:v0_8_237_amd64"
|
|
16
16
|
|
|
17
17
|
# Workbench Configuration
|
|
18
18
|
try:
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from typing import Optional, List
|
|
2
2
|
from aws_cdk import (
|
|
3
|
+
Duration,
|
|
3
4
|
Stack,
|
|
4
5
|
StackProps,
|
|
5
6
|
aws_ecs as ecs,
|
|
@@ -175,3 +176,6 @@ class WorkbenchDashboardStack(Stack):
|
|
|
175
176
|
|
|
176
177
|
# Add our custom security group
|
|
177
178
|
fargate_service.load_balancer.add_security_group(lb_security_group)
|
|
179
|
+
|
|
180
|
+
# Enable sticky sessions so users stay on the same container (preserves in-memory state)
|
|
181
|
+
fargate_service.target_group.enable_cookie_stickiness(Duration.hours(1))
|
|
@@ -12,7 +12,7 @@ print(f"Account: {aws_account}")
|
|
|
12
12
|
print(f"Region: {aws_region}")
|
|
13
13
|
|
|
14
14
|
# When you want a different docker image change this line
|
|
15
|
-
dashboard_image = "public.ecr.aws/m6i5k1r2/workbench_dashboard:
|
|
15
|
+
dashboard_image = "public.ecr.aws/m6i5k1r2/workbench_dashboard:v0_8_237_amd64"
|
|
16
16
|
|
|
17
17
|
# Workbench Configuration
|
|
18
18
|
try:
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from typing import Optional, List
|
|
2
2
|
from aws_cdk import (
|
|
3
|
+
Duration,
|
|
3
4
|
Stack,
|
|
4
5
|
StackProps,
|
|
5
6
|
aws_ecs as ecs,
|
|
@@ -183,3 +184,6 @@ class WorkbenchDashboardStack(Stack):
|
|
|
183
184
|
|
|
184
185
|
# Add our custom security group
|
|
185
186
|
fargate_service.load_balancer.add_security_group(lb_security_group)
|
|
187
|
+
|
|
188
|
+
# Enable sticky sessions so users stay on the same container (preserves in-memory state)
|
|
189
|
+
fargate_service.target_group.enable_cookie_stickiness(Duration.hours(1))
|
|
@@ -100,15 +100,8 @@ model = feature_set.to_model(
|
|
|
100
100
|
)
|
|
101
101
|
```
|
|
102
102
|
|
|
103
|
-
## Getting Started
|
|
104
|
-
|
|
105
|
-
1. Install Workbench: `pip install workbench`
|
|
106
|
-
2. Connect to AWS®: [Setup Guide](../getting_started/index.md)
|
|
107
|
-
3. Create your model using the examples above
|
|
108
|
-
4. Deploy to an endpoint for inference
|
|
109
|
-
|
|
110
103
|
!!! note "Examples"
|
|
111
|
-
All Workbench examples are in the repository under the `examples
|
|
104
|
+
All Workbench model examples are in the repository under the `examples/models` directory. For full code listings, visit [Workbench Model Examples](https://github.com/SuperCowPowers/workbench/blob/main/examples/models).
|
|
112
105
|
|
|
113
106
|
---
|
|
114
107
|
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Confidence Scores in Workbench
|
|
2
|
+
!!!tip inline end "Need Help?"
|
|
3
|
+
The SuperCowPowers team is happy to give any assistance needed when setting up AWS and Workbench. So please contact us at [workbench@supercowpowers.com](mailto:workbench@supercowpowers.com) or on chat us up on [Discord](https://discord.gg/WHAJuz8sw8)
|
|
4
|
+
|
|
5
|
+
Workbench provides **confidence scores** for model predictions, giving users a measure of how certain the model is about each prediction. Higher confidence indicates the model is more certain, while lower confidence suggests greater uncertainty.
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
| **Framework** | **UQ Method** | **Confidence Source** |
|
|
10
|
+
|----------------|----------------------------------------|---------------------------------|
|
|
11
|
+
| XGBoost | MAPIE Conformalized Quantile Regression | 80% prediction interval width |
|
|
12
|
+
| PyTorch | MAPIE Conformalized Quantile Regression | 80% prediction interval width |
|
|
13
|
+
| ChemProp | Ensemble disagreement (5 models) | Ensemble standard deviation |
|
|
14
|
+
|
|
15
|
+
All frameworks use the same confidence formula, but the uncertainty source differs.
|
|
16
|
+
|
|
17
|
+
## Confidence Formula
|
|
18
|
+
|
|
19
|
+
Confidence is computed using a simple exponential decay function:
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
confidence = exp(-uncertainty / median_uncertainty)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Where:
|
|
26
|
+
|
|
27
|
+
- **uncertainty**: The model's uncertainty estimate for each prediction
|
|
28
|
+
- **median_uncertainty**: The median uncertainty from the training/validation data
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
## XGBoost and PyTorch: MAPIE CQR
|
|
32
|
+
|
|
33
|
+
For XGBoost and PyTorch models, Workbench uses **MAPIE Conformalized Quantile Regression (CQR)** to generate prediction intervals with coverage guarantees.
|
|
34
|
+
|
|
35
|
+
### How It Works
|
|
36
|
+
|
|
37
|
+
1. **Train quantile models**: LightGBM models are trained to predict the 10th and 90th percentiles (80% confidence interval)
|
|
38
|
+
2. **Conformalize**: MAPIE adjusts the intervals using a held-out calibration set to guarantee coverage
|
|
39
|
+
3. **Compute interval width**: The uncertainty is the width of the 80% prediction interval (q_90 - q_10)
|
|
40
|
+
4. **Calculate confidence**: Apply the exponential decay formula
|
|
41
|
+
|
|
42
|
+
### Why 80% Confidence Interval?
|
|
43
|
+
|
|
44
|
+
We use the 80% CI (q_10 to q_90) rather than other intervals because:
|
|
45
|
+
|
|
46
|
+
- **68% CI** is too narrow and sensitive to noise
|
|
47
|
+
- **95% CI** is too wide and less discriminating between samples
|
|
48
|
+
- **80% CI** provides a good balance for ranking prediction reliability
|
|
49
|
+
|
|
50
|
+
### Coverage Guarantees
|
|
51
|
+
|
|
52
|
+
MAPIE's conformalization ensures that prediction intervals achieve their target coverage. For example, an 80% CI will contain approximately 80% of true values on the calibration set. This is a key advantage over simple quantile regression.
|
|
53
|
+
|
|
54
|
+
## ChemProp: Ensemble Disagreement
|
|
55
|
+
|
|
56
|
+
For ChemProp models, Workbench trains an **ensemble of 5 models** and uses their disagreement as the uncertainty measure.
|
|
57
|
+
|
|
58
|
+
### How It Works
|
|
59
|
+
|
|
60
|
+
1. **Train ensemble**: 5 ChemProp models are trained with different random seeds
|
|
61
|
+
2. **Predict**: Each model makes a prediction for each sample
|
|
62
|
+
3. **Compute disagreement**: The standard deviation across the 5 predictions is the uncertainty
|
|
63
|
+
4. **Calibrate**: The standard deviation is empirically calibrated against actual errors
|
|
64
|
+
5. **Calculate confidence**: Apply the exponential decay formula using calibrated std
|
|
65
|
+
|
|
66
|
+
### Ensemble vs MAPIE
|
|
67
|
+
|
|
68
|
+
| Aspect | MAPIE (XGBoost/PyTorch) | Ensemble (ChemProp) |
|
|
69
|
+
|--------|---------------------------|----------------------------|
|
|
70
|
+
| Coverage guarantee | Yes (conformal) | No (empirical) |
|
|
71
|
+
| Computational cost | + 5 MAPIE models | Just the 5 chemprop models |
|
|
72
|
+
| Uncertainty type | Prediction interval width | Model disagreement |
|
|
73
|
+
|
|
74
|
+
Both approaches are valid and widely used in the ML community. MAPIE provides theoretical guarantees, while ensembles capture model uncertainty more directly.
|
|
75
|
+
|
|
76
|
+
## Interpreting Confidence Scores
|
|
77
|
+
|
|
78
|
+
### High Confidence (> 0.5)
|
|
79
|
+
- Model is relatively certain about the prediction
|
|
80
|
+
- Prediction interval is narrower than typical
|
|
81
|
+
- Good candidates for prioritization
|
|
82
|
+
|
|
83
|
+
### Medium Confidence (0.3 - 0.5)
|
|
84
|
+
- Model has typical uncertainty
|
|
85
|
+
- Prediction is likely reasonable but verify important decisions
|
|
86
|
+
|
|
87
|
+
### Low Confidence (< 0.3)
|
|
88
|
+
- Model is uncertain about the prediction
|
|
89
|
+
- Prediction interval is wider than typical
|
|
90
|
+
- May indicate out-of-distribution samples or difficult predictions
|
|
91
|
+
|
|
92
|
+
## Metrics for Evaluating Confidence
|
|
93
|
+
|
|
94
|
+
Workbench computes several metrics to evaluate how well confidence correlates with actual prediction quality:
|
|
95
|
+
|
|
96
|
+
### confidence_to_error_corr
|
|
97
|
+
Spearman correlation between confidence and absolute error. **Should be negative** (high confidence = low error). Target: < -0.5
|
|
98
|
+
|
|
99
|
+
### interval_to_error_corr
|
|
100
|
+
Spearman correlation between interval width and absolute error. **Should be positive** (wide intervals = high error). Target: > 0.5
|
|
101
|
+
|
|
102
|
+
### Coverage Metrics
|
|
103
|
+
For each confidence level (50%, 68%, 80%, 90%, 95%), the percentage of true values that fall within the prediction interval. Should match the target coverage.
|
|
104
|
+
|
|
105
|
+
## Additional Resources
|
|
106
|
+
|
|
107
|
+
<img align="right" src="../images/scp.png" width="180">
|
|
108
|
+
|
|
109
|
+
Need help with confidence scores or uncertainty quantification? Want to develop a customized application tailored to your business needs?
|
|
110
|
+
|
|
111
|
+
- Consulting Available: [SuperCowPowers LLC](https://www.supercowpowers.com)
|