workbench 0.8.168__tar.gz → 0.8.170__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of workbench might be problematic. Click here for more details.

Files changed (772) hide show
  1. {workbench-0.8.168 → workbench-0.8.170}/PKG-INFO +1 -1
  2. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/workbench_core/app.py +8 -3
  3. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/workbench_core/workbench_core/workbench_core_stack.py +170 -45
  4. {workbench-0.8.168 → workbench-0.8.170}/docs/aws_setup/core_stack.md +1 -1
  5. workbench-0.8.170/examples/ml_pipelines/list_models.py +14 -0
  6. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/ml_pipelines/ml_pipeline_runner.py +3 -1
  7. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/api/model.py +3 -0
  8. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/artifacts/endpoint_core.py +16 -5
  9. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/artifacts/monitor_core.py +2 -2
  10. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/model_to_endpoint/model_to_endpoint.py +36 -6
  11. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/scripts/ml_pipeline_launcher.py +49 -51
  12. {workbench-0.8.168 → workbench-0.8.170}/src/workbench.egg-info/PKG-INFO +1 -1
  13. {workbench-0.8.168 → workbench-0.8.170}/src/workbench.egg-info/SOURCES.txt +1 -0
  14. {workbench-0.8.168 → workbench-0.8.170}/.flake8 +0 -0
  15. {workbench-0.8.168 → workbench-0.8.170}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  16. {workbench-0.8.168 → workbench-0.8.170}/.github/dependabot.yml +0 -0
  17. {workbench-0.8.168 → workbench-0.8.170}/.github/workflows/deploy-docs.yml +0 -0
  18. {workbench-0.8.168 → workbench-0.8.170}/.github/workflows/python-lint.yml +0 -0
  19. {workbench-0.8.168 → workbench-0.8.170}/.gitignore +0 -0
  20. {workbench-0.8.168 → workbench-0.8.170}/CONTRIBUTING.md +0 -0
  21. {workbench-0.8.168 → workbench-0.8.170}/Dockerfile +0 -0
  22. {workbench-0.8.168 → workbench-0.8.170}/LICENSE +0 -0
  23. {workbench-0.8.168 → workbench-0.8.170}/Makefile +0 -0
  24. {workbench-0.8.168 → workbench-0.8.170}/README.md +0 -0
  25. {workbench-0.8.168 → workbench-0.8.170}/SECURITY.md +0 -0
  26. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/Dockerfile +0 -0
  27. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/README.md +0 -0
  28. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/app.py +0 -0
  29. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/assets/favicon.ico +0 -0
  30. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/dashboard +0 -0
  31. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/deploy.sh +0 -0
  32. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/nginx.conf +0 -0
  33. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/open_source_config.json +0 -0
  34. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/pages/data_sources/callbacks.py +0 -0
  35. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/pages/data_sources/layout.py +0 -0
  36. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/pages/data_sources/page.py +0 -0
  37. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/pages/endpoints/callbacks.py +0 -0
  38. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/pages/endpoints/layout.py +0 -0
  39. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/pages/endpoints/page.py +0 -0
  40. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/pages/feature_sets/callbacks.py +0 -0
  41. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/pages/feature_sets/layout.py +0 -0
  42. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/pages/feature_sets/page.py +0 -0
  43. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/pages/license/page.py +0 -0
  44. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/pages/main/callbacks.py +0 -0
  45. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/pages/main/layout.py +0 -0
  46. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/pages/main/page.py +0 -0
  47. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/pages/models/callbacks.py +0 -0
  48. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/pages/models/layout.py +0 -0
  49. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/pages/models/page.py +0 -0
  50. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/pages/pipelines/callbacks.py +0 -0
  51. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/pages/pipelines/layout.py +0 -0
  52. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/pages/pipelines/page.py +0 -0
  53. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/pages/status/page.py +0 -0
  54. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/static/dark.css +0 -0
  55. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/static/light.css +0 -0
  56. {workbench-0.8.168 → workbench-0.8.170}/applications/aws_dashboard/supervisord.conf +0 -0
  57. {workbench-0.8.168 → workbench-0.8.170}/applications/compound_explorer/Dockerfile +0 -0
  58. {workbench-0.8.168 → workbench-0.8.170}/applications/compound_explorer/README.md +0 -0
  59. {workbench-0.8.168 → workbench-0.8.170}/applications/compound_explorer/app.py +0 -0
  60. {workbench-0.8.168 → workbench-0.8.170}/applications/compound_explorer/assets/favicon.ico +0 -0
  61. {workbench-0.8.168 → workbench-0.8.170}/applications/compound_explorer/callbacks.py +0 -0
  62. {workbench-0.8.168 → workbench-0.8.170}/applications/compound_explorer/explorer +0 -0
  63. {workbench-0.8.168 → workbench-0.8.170}/applications/compound_explorer/layout.py +0 -0
  64. {workbench-0.8.168 → workbench-0.8.170}/applications/compound_explorer/nginx.conf +0 -0
  65. {workbench-0.8.168 → workbench-0.8.170}/applications/compound_explorer/open_source_config.json +0 -0
  66. {workbench-0.8.168 → workbench-0.8.170}/applications/compound_explorer/requirements.txt +0 -0
  67. {workbench-0.8.168 → workbench-0.8.170}/applications/compound_explorer/storage/callbacks.py +0 -0
  68. {workbench-0.8.168 → workbench-0.8.170}/applications/compound_explorer/storage/callbacks_new.py +0 -0
  69. {workbench-0.8.168 → workbench-0.8.170}/applications/compound_explorer/storage/layout_new.py +0 -0
  70. {workbench-0.8.168 → workbench-0.8.170}/applications/compound_explorer/supervisord.conf +0 -0
  71. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/aws_account_check.py +0 -0
  72. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/aws_identity_check.py +0 -0
  73. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/build_ml_pipeline.py +0 -0
  74. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/compound_explorer/.gitignore +0 -0
  75. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/compound_explorer/README.md +0 -0
  76. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/compound_explorer/app.py +0 -0
  77. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/compound_explorer/cdk.json +0 -0
  78. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/compound_explorer/compound_explorer/__init__.py +0 -0
  79. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/compound_explorer/compound_explorer/compound_explorer_stack.py +0 -0
  80. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/compound_explorer/requirements.txt +0 -0
  81. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/event_bridge/Readme.md +0 -0
  82. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/event_bridge/dynamic_docker/Readme.md +0 -0
  83. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/event_bridge/dynamic_docker/app.py +0 -0
  84. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/event_bridge/dynamic_docker/cdk.json +0 -0
  85. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/event_bridge/dynamic_docker/lambda/lambda_replace_task.py +0 -0
  86. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/event_bridge/dynamic_docker/workbench_image_update_stack.py +0 -0
  87. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/workbench_core/.gitignore +0 -0
  88. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/workbench_core/README.md +0 -0
  89. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/workbench_core/cdk.json +0 -0
  90. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/workbench_core/requirements-dev.txt +0 -0
  91. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/workbench_core/requirements.txt +0 -0
  92. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/workbench_core/source.bat +0 -0
  93. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/workbench_core/workbench_core/__init__.py +0 -0
  94. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/workbench_dashboard_full/.gitignore +0 -0
  95. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/workbench_dashboard_full/README.md +0 -0
  96. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/workbench_dashboard_full/app.py +0 -0
  97. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/workbench_dashboard_full/cdk.json +0 -0
  98. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/workbench_dashboard_full/requirements-dev.txt +0 -0
  99. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/workbench_dashboard_full/requirements.txt +0 -0
  100. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/workbench_dashboard_full/source.bat +0 -0
  101. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/workbench_dashboard_full/workbench_dashboard_full/__init__.py +0 -0
  102. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/workbench_dashboard_full/workbench_dashboard_full/workbench_dashboard_stack.py +0 -0
  103. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/workbench_dashboard_lite/.gitignore +0 -0
  104. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/workbench_dashboard_lite/README.md +0 -0
  105. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/workbench_dashboard_lite/app.py +0 -0
  106. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/workbench_dashboard_lite/cdk.json +0 -0
  107. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/workbench_dashboard_lite/requirements.txt +0 -0
  108. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/workbench_dashboard_lite/workbench_dashboard_lite/__init__.py +0 -0
  109. {workbench-0.8.168 → workbench-0.8.170}/aws_setup/workbench_dashboard_lite/workbench_dashboard_lite/workbench_dashboard_stack.py +0 -0
  110. {workbench-0.8.168 → workbench-0.8.170}/data/abalone.csv +0 -0
  111. {workbench-0.8.168 → workbench-0.8.170}/data/karate_graph.json +0 -0
  112. {workbench-0.8.168 → workbench-0.8.170}/data/test_data.csv +0 -0
  113. {workbench-0.8.168 → workbench-0.8.170}/data/test_data.json +0 -0
  114. {workbench-0.8.168 → workbench-0.8.170}/data/wine_dataset.csv +0 -0
  115. {workbench-0.8.168 → workbench-0.8.170}/deploy_docker.sh +0 -0
  116. {workbench-0.8.168 → workbench-0.8.170}/docs/admin/aws_service_limits.md +0 -0
  117. {workbench-0.8.168 → workbench-0.8.170}/docs/admin/base_docker_push.md +0 -0
  118. {workbench-0.8.168 → workbench-0.8.170}/docs/admin/dashboard_docker_push.md +0 -0
  119. {workbench-0.8.168 → workbench-0.8.170}/docs/admin/dashboard_s3_plugins.md +0 -0
  120. {workbench-0.8.168 → workbench-0.8.170}/docs/admin/explorer_docker_push.md +0 -0
  121. {workbench-0.8.168 → workbench-0.8.170}/docs/admin/images/dashboard_secret_click.png +0 -0
  122. {workbench-0.8.168 → workbench-0.8.170}/docs/admin/images/serverless_quotas.png +0 -0
  123. {workbench-0.8.168 → workbench-0.8.170}/docs/admin/images/status_showing_S3_path.png +0 -0
  124. {workbench-0.8.168 → workbench-0.8.170}/docs/admin/pypi_release.md +0 -0
  125. {workbench-0.8.168 → workbench-0.8.170}/docs/admin/workbench_docker_for_lambdas.md +0 -0
  126. {workbench-0.8.168 → workbench-0.8.170}/docs/api_classes/data_source.md +0 -0
  127. {workbench-0.8.168 → workbench-0.8.170}/docs/api_classes/df_store.md +0 -0
  128. {workbench-0.8.168 → workbench-0.8.170}/docs/api_classes/endpoint.md +0 -0
  129. {workbench-0.8.168 → workbench-0.8.170}/docs/api_classes/feature_set.md +0 -0
  130. {workbench-0.8.168 → workbench-0.8.170}/docs/api_classes/meta.md +0 -0
  131. {workbench-0.8.168 → workbench-0.8.170}/docs/api_classes/model.md +0 -0
  132. {workbench-0.8.168 → workbench-0.8.170}/docs/api_classes/monitor.md +0 -0
  133. {workbench-0.8.168 → workbench-0.8.170}/docs/api_classes/overview.md +0 -0
  134. {workbench-0.8.168 → workbench-0.8.170}/docs/api_classes/parameter_store.md +0 -0
  135. {workbench-0.8.168 → workbench-0.8.170}/docs/api_classes/pipelines.md +0 -0
  136. {workbench-0.8.168 → workbench-0.8.170}/docs/api_classes/views.md +0 -0
  137. {workbench-0.8.168 → workbench-0.8.170}/docs/aws_setup/aws_access_management.md +0 -0
  138. {workbench-0.8.168 → workbench-0.8.170}/docs/aws_setup/aws_client_vpn.md +0 -0
  139. {workbench-0.8.168 → workbench-0.8.170}/docs/aws_setup/aws_setup.md +0 -0
  140. {workbench-0.8.168 → workbench-0.8.170}/docs/aws_setup/aws_tips_and_tricks.md +0 -0
  141. {workbench-0.8.168 → workbench-0.8.170}/docs/aws_setup/dashboard_stack.md +0 -0
  142. {workbench-0.8.168 → workbench-0.8.170}/docs/aws_setup/domain_cert_setup.md +0 -0
  143. {workbench-0.8.168 → workbench-0.8.170}/docs/aws_setup/full_pipeline.md +0 -0
  144. {workbench-0.8.168 → workbench-0.8.170}/docs/aws_setup/iam_assume_role.md +0 -0
  145. {workbench-0.8.168 → workbench-0.8.170}/docs/aws_setup/sso_assume_role.md +0 -0
  146. {workbench-0.8.168 → workbench-0.8.170}/docs/blogs/aws_credentials_lock.md +0 -0
  147. {workbench-0.8.168 → workbench-0.8.170}/docs/blogs/canonicalization_and_tautomerization.md +0 -0
  148. {workbench-0.8.168 → workbench-0.8.170}/docs/blogs/compound_etl.md +0 -0
  149. {workbench-0.8.168 → workbench-0.8.170}/docs/blogs/compound_explorer.md +0 -0
  150. {workbench-0.8.168 → workbench-0.8.170}/docs/blogs/descriptor_drilldown.md +0 -0
  151. {workbench-0.8.168 → workbench-0.8.170}/docs/blogs/eda.md +0 -0
  152. {workbench-0.8.168 → workbench-0.8.170}/docs/blogs/feature_importances.md +0 -0
  153. {workbench-0.8.168 → workbench-0.8.170}/docs/blogs/fun_with_workbench/fun_with_endpoints.md +0 -0
  154. {workbench-0.8.168 → workbench-0.8.170}/docs/blogs/htg.md +0 -0
  155. {workbench-0.8.168 → workbench-0.8.170}/docs/blogs/index.md +0 -0
  156. {workbench-0.8.168 → workbench-0.8.170}/docs/blogs/model_monitoring.md +0 -0
  157. {workbench-0.8.168 → workbench-0.8.170}/docs/blogs/residual_analysis.md +0 -0
  158. {workbench-0.8.168 → workbench-0.8.170}/docs/cached/cached_data_source.md +0 -0
  159. {workbench-0.8.168 → workbench-0.8.170}/docs/cached/cached_endpoint.md +0 -0
  160. {workbench-0.8.168 → workbench-0.8.170}/docs/cached/cached_feature_set.md +0 -0
  161. {workbench-0.8.168 → workbench-0.8.170}/docs/cached/cached_meta.md +0 -0
  162. {workbench-0.8.168 → workbench-0.8.170}/docs/cached/cached_model.md +0 -0
  163. {workbench-0.8.168 → workbench-0.8.170}/docs/cached/overview.md +0 -0
  164. {workbench-0.8.168 → workbench-0.8.170}/docs/chem_utils/index.md +0 -0
  165. {workbench-0.8.168 → workbench-0.8.170}/docs/cloudwatch/index.md +0 -0
  166. {workbench-0.8.168 → workbench-0.8.170}/docs/comparisons/workbench_vs_databricks.md +0 -0
  167. {workbench-0.8.168 → workbench-0.8.170}/docs/compound_explorer/tox21.md +0 -0
  168. {workbench-0.8.168 → workbench-0.8.170}/docs/compound_explorer/toxicity_modeling.md +0 -0
  169. {workbench-0.8.168 → workbench-0.8.170}/docs/core_classes/artifacts/artifact.md +0 -0
  170. {workbench-0.8.168 → workbench-0.8.170}/docs/core_classes/artifacts/athena_source.md +0 -0
  171. {workbench-0.8.168 → workbench-0.8.170}/docs/core_classes/artifacts/data_source_abstract.md +0 -0
  172. {workbench-0.8.168 → workbench-0.8.170}/docs/core_classes/artifacts/endpoint_core.md +0 -0
  173. {workbench-0.8.168 → workbench-0.8.170}/docs/core_classes/artifacts/feature_set_core.md +0 -0
  174. {workbench-0.8.168 → workbench-0.8.170}/docs/core_classes/artifacts/model_core.md +0 -0
  175. {workbench-0.8.168 → workbench-0.8.170}/docs/core_classes/artifacts/monitor_core.md +0 -0
  176. {workbench-0.8.168 → workbench-0.8.170}/docs/core_classes/artifacts/overview.md +0 -0
  177. {workbench-0.8.168 → workbench-0.8.170}/docs/core_classes/overview.md +0 -0
  178. {workbench-0.8.168 → workbench-0.8.170}/docs/core_classes/transforms/data_loaders_heavy.md +0 -0
  179. {workbench-0.8.168 → workbench-0.8.170}/docs/core_classes/transforms/data_loaders_light.md +0 -0
  180. {workbench-0.8.168 → workbench-0.8.170}/docs/core_classes/transforms/data_to_features.md +0 -0
  181. {workbench-0.8.168 → workbench-0.8.170}/docs/core_classes/transforms/features_to_model.md +0 -0
  182. {workbench-0.8.168 → workbench-0.8.170}/docs/core_classes/transforms/model_to_endpoint.md +0 -0
  183. {workbench-0.8.168 → workbench-0.8.170}/docs/core_classes/transforms/overview.md +0 -0
  184. {workbench-0.8.168 → workbench-0.8.170}/docs/core_classes/transforms/pandas_transforms.md +0 -0
  185. {workbench-0.8.168 → workbench-0.8.170}/docs/core_classes/transforms/transform.md +0 -0
  186. {workbench-0.8.168 → workbench-0.8.170}/docs/core_classes/views/computation_view.md +0 -0
  187. {workbench-0.8.168 → workbench-0.8.170}/docs/core_classes/views/display_view.md +0 -0
  188. {workbench-0.8.168 → workbench-0.8.170}/docs/core_classes/views/inference_view.md +0 -0
  189. {workbench-0.8.168 → workbench-0.8.170}/docs/core_classes/views/overview.md +0 -0
  190. {workbench-0.8.168 → workbench-0.8.170}/docs/core_classes/views/training_view.md +0 -0
  191. {workbench-0.8.168 → workbench-0.8.170}/docs/data_algorithms/dataframes/overview.md +0 -0
  192. {workbench-0.8.168 → workbench-0.8.170}/docs/data_algorithms/graphs/overview.md +0 -0
  193. {workbench-0.8.168 → workbench-0.8.170}/docs/data_algorithms/overview.md +0 -0
  194. {workbench-0.8.168 → workbench-0.8.170}/docs/data_algorithms/spark/overview.md +0 -0
  195. {workbench-0.8.168 → workbench-0.8.170}/docs/data_algorithms/sql/overview.md +0 -0
  196. {workbench-0.8.168 → workbench-0.8.170}/docs/enterprise/index.md +0 -0
  197. {workbench-0.8.168 → workbench-0.8.170}/docs/enterprise/private_saas.md +0 -0
  198. {workbench-0.8.168 → workbench-0.8.170}/docs/enterprise/project_branding.md +0 -0
  199. {workbench-0.8.168 → workbench-0.8.170}/docs/enterprise/themes.md +0 -0
  200. {workbench-0.8.168 → workbench-0.8.170}/docs/getting_started/index.md +0 -0
  201. {workbench-0.8.168 → workbench-0.8.170}/docs/glue/index.md +0 -0
  202. {workbench-0.8.168 → workbench-0.8.170}/docs/images/big_spider.png +0 -0
  203. {workbench-0.8.168 → workbench-0.8.170}/docs/images/graph_representation.png +0 -0
  204. {workbench-0.8.168 → workbench-0.8.170}/docs/images/powered_aws_dark_blue.png +0 -0
  205. {workbench-0.8.168 → workbench-0.8.170}/docs/images/powered_aws_transparent.png +0 -0
  206. {workbench-0.8.168 → workbench-0.8.170}/docs/images/powered_aws_white.png +0 -0
  207. {workbench-0.8.168 → workbench-0.8.170}/docs/images/powered_aws_with_tm_grey.png +0 -0
  208. {workbench-0.8.168 → workbench-0.8.170}/docs/images/scp.png +0 -0
  209. {workbench-0.8.168 → workbench-0.8.170}/docs/images/scp_labs.png +0 -0
  210. {workbench-0.8.168 → workbench-0.8.170}/docs/images/small_spider.png +0 -0
  211. {workbench-0.8.168 → workbench-0.8.170}/docs/images/workbench_concepts.png +0 -0
  212. {workbench-0.8.168 → workbench-0.8.170}/docs/index.md +0 -0
  213. {workbench-0.8.168 → workbench-0.8.170}/docs/lambda_layer/index.md +0 -0
  214. {workbench-0.8.168 → workbench-0.8.170}/docs/misc/faq.md +0 -0
  215. {workbench-0.8.168 → workbench-0.8.170}/docs/misc/general_info.md +0 -0
  216. {workbench-0.8.168 → workbench-0.8.170}/docs/misc/scp_consulting.md +0 -0
  217. {workbench-0.8.168 → workbench-0.8.170}/docs/misc/workbench_classes_concepts.md +0 -0
  218. {workbench-0.8.168 → workbench-0.8.170}/docs/model_utils/index.md +0 -0
  219. {workbench-0.8.168 → workbench-0.8.170}/docs/plugins/index.md +0 -0
  220. {workbench-0.8.168 → workbench-0.8.170}/docs/presentations/index.md +0 -0
  221. {workbench-0.8.168 → workbench-0.8.170}/docs/release_notes/0_8_106.md +0 -0
  222. {workbench-0.8.168 → workbench-0.8.170}/docs/release_notes/0_8_158.md +0 -0
  223. {workbench-0.8.168 → workbench-0.8.170}/docs/release_notes/0_8_50.md +0 -0
  224. {workbench-0.8.168 → workbench-0.8.170}/docs/release_notes/0_8_55.md +0 -0
  225. {workbench-0.8.168 → workbench-0.8.170}/docs/release_notes/0_8_58.md +0 -0
  226. {workbench-0.8.168 → workbench-0.8.170}/docs/release_notes/0_8_60.md +0 -0
  227. {workbench-0.8.168 → workbench-0.8.170}/docs/release_notes/0_8_71.md +0 -0
  228. {workbench-0.8.168 → workbench-0.8.170}/docs/release_notes/0_8_74.md +0 -0
  229. {workbench-0.8.168 → workbench-0.8.170}/docs/release_notes/0_8_78.md +0 -0
  230. {workbench-0.8.168 → workbench-0.8.170}/docs/release_notes/archived/0_7_8.md +0 -0
  231. {workbench-0.8.168 → workbench-0.8.170}/docs/release_notes/archived/0_8_11.md +0 -0
  232. {workbench-0.8.168 → workbench-0.8.170}/docs/release_notes/archived/0_8_20.md +0 -0
  233. {workbench-0.8.168 → workbench-0.8.170}/docs/release_notes/archived/0_8_22.md +0 -0
  234. {workbench-0.8.168 → workbench-0.8.170}/docs/release_notes/archived/0_8_23.md +0 -0
  235. {workbench-0.8.168 → workbench-0.8.170}/docs/release_notes/archived/0_8_27.md +0 -0
  236. {workbench-0.8.168 → workbench-0.8.170}/docs/release_notes/archived/0_8_29.md +0 -0
  237. {workbench-0.8.168 → workbench-0.8.170}/docs/release_notes/archived/0_8_33.md +0 -0
  238. {workbench-0.8.168 → workbench-0.8.170}/docs/release_notes/archived/0_8_35.md +0 -0
  239. {workbench-0.8.168 → workbench-0.8.170}/docs/release_notes/archived/0_8_36.md +0 -0
  240. {workbench-0.8.168 → workbench-0.8.170}/docs/release_notes/archived/0_8_39.md +0 -0
  241. {workbench-0.8.168 → workbench-0.8.170}/docs/release_notes/archived/0_8_42.md +0 -0
  242. {workbench-0.8.168 → workbench-0.8.170}/docs/release_notes/archived/0_8_46.md +0 -0
  243. {workbench-0.8.168 → workbench-0.8.170}/docs/release_notes/archived/0_8_6.md +0 -0
  244. {workbench-0.8.168 → workbench-0.8.170}/docs/release_notes/archived/0_8_8.md +0 -0
  245. {workbench-0.8.168 → workbench-0.8.170}/docs/repl/index.md +0 -0
  246. {workbench-0.8.168 → workbench-0.8.170}/docs/road_maps/0_9_0.md +0 -0
  247. {workbench-0.8.168 → workbench-0.8.170}/docs/road_maps/0_9_5.md +0 -0
  248. {workbench-0.8.168 → workbench-0.8.170}/docs/themes/details.md +0 -0
  249. {workbench-0.8.168 → workbench-0.8.170}/docs/themes/index.md +0 -0
  250. {workbench-0.8.168 → workbench-0.8.170}/examples/ag-grid/hello_world.py +0 -0
  251. {workbench-0.8.168 → workbench-0.8.170}/examples/chem_utils/canonicalize_smiles.py +0 -0
  252. {workbench-0.8.168 → workbench-0.8.170}/examples/chem_utils/tautomerize_smiles.py +0 -0
  253. {workbench-0.8.168 → workbench-0.8.170}/examples/datasource/datasource_from_df.py +0 -0
  254. {workbench-0.8.168 → workbench-0.8.170}/examples/datasource/datasource_from_s3.py +0 -0
  255. {workbench-0.8.168 → workbench-0.8.170}/examples/datasource/datasource_query.py +0 -0
  256. {workbench-0.8.168 → workbench-0.8.170}/examples/datasource/datasource_stats.py +0 -0
  257. {workbench-0.8.168 → workbench-0.8.170}/examples/datasource/datasource_to_featureset.py +0 -0
  258. {workbench-0.8.168 → workbench-0.8.170}/examples/endpoint/endpoint_details.py +0 -0
  259. {workbench-0.8.168 → workbench-0.8.170}/examples/endpoint/endpoint_inference.py +0 -0
  260. {workbench-0.8.168 → workbench-0.8.170}/examples/endpoint/endpoint_metrics.py +0 -0
  261. {workbench-0.8.168 → workbench-0.8.170}/examples/featureset/featureset_eda.py +0 -0
  262. {workbench-0.8.168 → workbench-0.8.170}/examples/featureset/featureset_query.py +0 -0
  263. {workbench-0.8.168 → workbench-0.8.170}/examples/full_ml_pipeline.py +0 -0
  264. {workbench-0.8.168 → workbench-0.8.170}/examples/glue_jobs/glue_example_1.py +0 -0
  265. {workbench-0.8.168 → workbench-0.8.170}/examples/glue_jobs/glue_example_2.py +0 -0
  266. {workbench-0.8.168 → workbench-0.8.170}/examples/glue_jobs/glue_example_3.py +0 -0
  267. {workbench-0.8.168 → workbench-0.8.170}/examples/glue_jobs/glue_launcher_examples/example_1.py +0 -0
  268. {workbench-0.8.168 → workbench-0.8.170}/examples/glue_jobs/glue_launcher_examples/example_2.py +0 -0
  269. {workbench-0.8.168 → workbench-0.8.170}/examples/meta/meta_list_endpoints.py +0 -0
  270. {workbench-0.8.168 → workbench-0.8.170}/examples/meta/meta_list_models.py +0 -0
  271. {workbench-0.8.168 → workbench-0.8.170}/examples/meta/meta_model_metrics.py +0 -0
  272. {workbench-0.8.168 → workbench-0.8.170}/examples/model_utils/model_metrics.py +0 -0
  273. {workbench-0.8.168 → workbench-0.8.170}/examples/model_utils/model_to_endpoint.py +0 -0
  274. {workbench-0.8.168 → workbench-0.8.170}/examples/model_utils/onboard_model.py +0 -0
  275. {workbench-0.8.168 → workbench-0.8.170}/examples/models/custom_model.py +0 -0
  276. {workbench-0.8.168 → workbench-0.8.170}/examples/models/dbscan.py +0 -0
  277. {workbench-0.8.168 → workbench-0.8.170}/examples/models/knn.py +0 -0
  278. {workbench-0.8.168 → workbench-0.8.170}/examples/models/pytorch.py +0 -0
  279. {workbench-0.8.168 → workbench-0.8.170}/examples/models/random_forest.py +0 -0
  280. {workbench-0.8.168 → workbench-0.8.170}/examples/models/uq/bayesian_ridge.py +0 -0
  281. {workbench-0.8.168 → workbench-0.8.170}/examples/models/uq/ensemble_xgb.py +0 -0
  282. {workbench-0.8.168 → workbench-0.8.170}/examples/models/uq/gaussian_process.py +0 -0
  283. {workbench-0.8.168 → workbench-0.8.170}/examples/models/uq/mapie_xgb.py +0 -0
  284. {workbench-0.8.168 → workbench-0.8.170}/examples/models/uq/meta_uq.py +0 -0
  285. {workbench-0.8.168 → workbench-0.8.170}/examples/models/uq/ngboost.py +0 -0
  286. {workbench-0.8.168 → workbench-0.8.170}/examples/models/uq/quant_xgb.py +0 -0
  287. {workbench-0.8.168 → workbench-0.8.170}/examples/monitor/monitor_setup.py +0 -0
  288. {workbench-0.8.168 → workbench-0.8.170}/examples/monitor/monitor_usage.py +0 -0
  289. {workbench-0.8.168 → workbench-0.8.170}/examples/plugins/branding/Readme.md +0 -0
  290. {workbench-0.8.168 → workbench-0.8.170}/examples/plugins/branding/scp.json +0 -0
  291. {workbench-0.8.168 → workbench-0.8.170}/examples/plugins/components/custom_plugin.py +0 -0
  292. {workbench-0.8.168 → workbench-0.8.170}/examples/plugins/components/endpoint_plugin.py +0 -0
  293. {workbench-0.8.168 → workbench-0.8.170}/examples/plugins/components/endpoint_turbo.py +0 -0
  294. {workbench-0.8.168 → workbench-0.8.170}/examples/plugins/components/model_markdown.py +0 -0
  295. {workbench-0.8.168 → workbench-0.8.170}/examples/plugins/components/model_plugin.py +0 -0
  296. {workbench-0.8.168 → workbench-0.8.170}/examples/plugins/packages/my_plugin_utils/__init__.py +0 -0
  297. {workbench-0.8.168 → workbench-0.8.170}/examples/plugins/packages/my_plugin_utils/assets/foo.json +0 -0
  298. {workbench-0.8.168 → workbench-0.8.170}/examples/plugins/packages/my_plugin_utils/cool_stuff.py +0 -0
  299. {workbench-0.8.168 → workbench-0.8.170}/examples/plugins/pages/plugin_page_1.py +0 -0
  300. {workbench-0.8.168 → workbench-0.8.170}/examples/plugins/pages/plugin_page_2.py +0 -0
  301. {workbench-0.8.168 → workbench-0.8.170}/examples/plugins/pages/plugin_page_3.py +0 -0
  302. {workbench-0.8.168 → workbench-0.8.170}/examples/plugins/templates/Readme.md +0 -0
  303. {workbench-0.8.168 → workbench-0.8.170}/examples/plugins/views/model_plugin_view.py +0 -0
  304. {workbench-0.8.168 → workbench-0.8.170}/examples/plugins/views/my_view_plugin.py +0 -0
  305. {workbench-0.8.168 → workbench-0.8.170}/examples/storage/data_to_data.py +0 -0
  306. {workbench-0.8.168 → workbench-0.8.170}/examples/storage/data_to_features.py +0 -0
  307. {workbench-0.8.168 → workbench-0.8.170}/examples/storage/endpoint_inference.py +0 -0
  308. {workbench-0.8.168 → workbench-0.8.170}/examples/storage/hello_world_pipeline.py +0 -0
  309. {workbench-0.8.168 → workbench-0.8.170}/examples/storage/plugin_page_example.py +0 -0
  310. {workbench-0.8.168 → workbench-0.8.170}/examples/storage/sagemaker_pipelines/all_steps.py +0 -0
  311. {workbench-0.8.168 → workbench-0.8.170}/examples/storage/sagemaker_pipelines/hello.py +0 -0
  312. {workbench-0.8.168 → workbench-0.8.170}/examples/storage/sagemaker_pipelines/ml_pipeline.py +0 -0
  313. {workbench-0.8.168 → workbench-0.8.170}/examples/storage/sagemaker_pipelines/storage/full_pipeline_experiment/data_source.py +0 -0
  314. {workbench-0.8.168 → workbench-0.8.170}/examples/storage/sagemaker_pipelines/storage/full_pipeline_experiment/endpoint.py +0 -0
  315. {workbench-0.8.168 → workbench-0.8.170}/examples/storage/sagemaker_pipelines/storage/full_pipeline_experiment/feature_set.py +0 -0
  316. {workbench-0.8.168 → workbench-0.8.170}/examples/storage/sagemaker_pipelines/storage/full_pipeline_experiment/ml_pipeline.py +0 -0
  317. {workbench-0.8.168 → workbench-0.8.170}/examples/storage/sagemaker_pipelines/storage/full_pipeline_experiment/model.py +0 -0
  318. {workbench-0.8.168 → workbench-0.8.170}/experiments/chem_info/bulk_sims.py +0 -0
  319. {workbench-0.8.168 → workbench-0.8.170}/experiments/chem_info/knn_sims.py +0 -0
  320. {workbench-0.8.168 → workbench-0.8.170}/experiments/confidence_roc_curve.py +0 -0
  321. {workbench-0.8.168 → workbench-0.8.170}/experiments/coverage_probability.py +0 -0
  322. {workbench-0.8.168 → workbench-0.8.170}/experiments/log_testing.py +0 -0
  323. {workbench-0.8.168 → workbench-0.8.170}/experiments/neighbor_outliers.py +0 -0
  324. {workbench-0.8.168 → workbench-0.8.170}/experiments/networkx_id.py +0 -0
  325. {workbench-0.8.168 → workbench-0.8.170}/experiments/prediction_intervals.py +0 -0
  326. {workbench-0.8.168 → workbench-0.8.170}/experiments/pytorch_model.py +0 -0
  327. {workbench-0.8.168 → workbench-0.8.170}/experiments/quantile_regression.py +0 -0
  328. {workbench-0.8.168 → workbench-0.8.170}/experiments/quantile_regression_2.py +0 -0
  329. {workbench-0.8.168 → workbench-0.8.170}/experiments/regression_confidence.py +0 -0
  330. {workbench-0.8.168 → workbench-0.8.170}/experiments/residual_analysis.py +0 -0
  331. {workbench-0.8.168 → workbench-0.8.170}/experiments/rocauc_testing.py +0 -0
  332. {workbench-0.8.168 → workbench-0.8.170}/experiments/scatter_zoom_issue.py +0 -0
  333. {workbench-0.8.168 → workbench-0.8.170}/experiments/sol_pipeline.py +0 -0
  334. {workbench-0.8.168 → workbench-0.8.170}/glue_jobs/create_glue_workflow_with_trigger.py +0 -0
  335. {workbench-0.8.168 → workbench-0.8.170}/glue_jobs/example_glue_job.py +0 -0
  336. {workbench-0.8.168 → workbench-0.8.170}/glue_jobs/glue_job_pipeline.py +0 -0
  337. {workbench-0.8.168 → workbench-0.8.170}/glue_jobs/glue_mixed_case.py +0 -0
  338. {workbench-0.8.168 → workbench-0.8.170}/mkdocs.yml +0 -0
  339. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/Readme.md +0 -0
  340. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/inference/Dockerfile +0 -0
  341. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/inference/main.py +0 -0
  342. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/inference/requirements.txt +0 -0
  343. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/inference/serve +0 -0
  344. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/meta_endpoint/Dockerfile +0 -0
  345. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/meta_endpoint/main.py +0 -0
  346. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/meta_endpoint/requirements.txt +0 -0
  347. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/meta_endpoint/serve +0 -0
  348. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/ml_pipelines/Dockerfile +0 -0
  349. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/ml_pipelines/requirements.txt +0 -0
  350. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/pytorch_inference/Dockerfile +0 -0
  351. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/pytorch_inference/main.py +0 -0
  352. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/pytorch_inference/requirements.txt +0 -0
  353. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/pytorch_inference/serve +0 -0
  354. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/pytorch_training/Dockerfile +0 -0
  355. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/pytorch_training/requirements.txt +0 -0
  356. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/pytorch_training/sagemaker_entrypoint.py +0 -0
  357. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/scripts/build_deploy.sh +0 -0
  358. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/tests/data/abalone_sm.csv +0 -0
  359. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/tests/example_model_script.py +0 -0
  360. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/tests/run_tests.sh +0 -0
  361. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/tests/test_inference.py +0 -0
  362. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/tests/test_training.py +0 -0
  363. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/training/Dockerfile +0 -0
  364. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/training/requirements.txt +0 -0
  365. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/training/sagemaker_entrypoint.py +0 -0
  366. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/workbench_inference/Dockerfile +0 -0
  367. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/workbench_inference/main.py +0 -0
  368. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/workbench_inference/requirements.txt +0 -0
  369. {workbench-0.8.168 → workbench-0.8.170}/model_docker_images/workbench_inference/serve +0 -0
  370. {workbench-0.8.168 → workbench-0.8.170}/notebooks/Inference_On_Legacy_Models.ipynb +0 -0
  371. {workbench-0.8.168 → workbench-0.8.170}/notebooks/ML_Pipeline_with_Workbench.ipynb +0 -0
  372. {workbench-0.8.168 → workbench-0.8.170}/notebooks/ML_Pipeline_with_Workbench_2.ipynb +0 -0
  373. {workbench-0.8.168 → workbench-0.8.170}/notebooks/Outliers_in_Workbench.ipynb +0 -0
  374. {workbench-0.8.168 → workbench-0.8.170}/notebooks/Regression_Confidence_Experiments.ipynb +0 -0
  375. {workbench-0.8.168 → workbench-0.8.170}/notebooks/Residual_Analysis.ipynb +0 -0
  376. {workbench-0.8.168 → workbench-0.8.170}/notebooks/images/athena_query_aqsol.png +0 -0
  377. {workbench-0.8.168 → workbench-0.8.170}/notebooks/images/aws_dashboard_aqsol.png +0 -0
  378. {workbench-0.8.168 → workbench-0.8.170}/notebooks/images/dashboard_aqsol_features.png +0 -0
  379. {workbench-0.8.168 → workbench-0.8.170}/notebooks/images/model_screenshot.png +0 -0
  380. {workbench-0.8.168 → workbench-0.8.170}/notebooks/images/scp_labs.png +0 -0
  381. {workbench-0.8.168 → workbench-0.8.170}/presentations/README.md +0 -0
  382. {workbench-0.8.168 → workbench-0.8.170}/pyproject.toml +0 -0
  383. {workbench-0.8.168 → workbench-0.8.170}/scripts/active_logs.sh +0 -0
  384. {workbench-0.8.168 → workbench-0.8.170}/scripts/admin/athena_ddl_mixed_case.py +0 -0
  385. {workbench-0.8.168 → workbench-0.8.170}/scripts/admin/check_all_glue_tables.py +0 -0
  386. {workbench-0.8.168 → workbench-0.8.170}/scripts/admin/db_scan_test.py +0 -0
  387. {workbench-0.8.168 → workbench-0.8.170}/scripts/admin/delete_invalid_views.py +0 -0
  388. {workbench-0.8.168 → workbench-0.8.170}/scripts/admin/delete_redis_keys.py +0 -0
  389. {workbench-0.8.168 → workbench-0.8.170}/scripts/admin/list_datacatalog.py +0 -0
  390. {workbench-0.8.168 → workbench-0.8.170}/scripts/admin/migration/copy_glue_database.py +0 -0
  391. {workbench-0.8.168 → workbench-0.8.170}/scripts/admin/migration/delete_sageworks_glue_database.sh +0 -0
  392. {workbench-0.8.168 → workbench-0.8.170}/scripts/admin/migration/ds_migrate.py +0 -0
  393. {workbench-0.8.168 → workbench-0.8.170}/scripts/admin/migration/endpoint_migrate.py +0 -0
  394. {workbench-0.8.168 → workbench-0.8.170}/scripts/admin/migration/fs_migrate.py +0 -0
  395. {workbench-0.8.168 → workbench-0.8.170}/scripts/admin/migration/model_migrate.py +0 -0
  396. {workbench-0.8.168 → workbench-0.8.170}/scripts/admin/pull_image_digest.py +0 -0
  397. {workbench-0.8.168 → workbench-0.8.170}/scripts/admin/redis_reaper.py +0 -0
  398. {workbench-0.8.168 → workbench-0.8.170}/scripts/admin/spam_list_tags.py +0 -0
  399. {workbench-0.8.168 → workbench-0.8.170}/scripts/admin/storage/convert_training_views.py +0 -0
  400. {workbench-0.8.168 → workbench-0.8.170}/scripts/admin/storage/migrate_data_source_via_df.py +0 -0
  401. {workbench-0.8.168 → workbench-0.8.170}/scripts/admin/storage/migrate_ds_meta.py +0 -0
  402. {workbench-0.8.168 → workbench-0.8.170}/scripts/ag_table_row_selection.py +0 -0
  403. {workbench-0.8.168 → workbench-0.8.170}/scripts/compare_dataframes.py +0 -0
  404. {workbench-0.8.168 → workbench-0.8.170}/scripts/compare_model_packages.py +0 -0
  405. {workbench-0.8.168 → workbench-0.8.170}/scripts/endpoint_inference_launch.py +0 -0
  406. {workbench-0.8.168 → workbench-0.8.170}/scripts/endpoint_timing/endpoint_timing.py +0 -0
  407. {workbench-0.8.168 → workbench-0.8.170}/scripts/endpoint_timing/endpoint_timing_old.py +0 -0
  408. {workbench-0.8.168 → workbench-0.8.170}/scripts/endpoint_timing/timing_plot.py +0 -0
  409. {workbench-0.8.168 → workbench-0.8.170}/scripts/find_smiles_issues.py +0 -0
  410. {workbench-0.8.168 → workbench-0.8.170}/scripts/get_tags.py +0 -0
  411. {workbench-0.8.168 → workbench-0.8.170}/scripts/instantiation_timings.py +0 -0
  412. {workbench-0.8.168 → workbench-0.8.170}/scripts/llm_deploys/deepseek_deploy.py +0 -0
  413. {workbench-0.8.168 → workbench-0.8.170}/scripts/model_cache_refresh.py +0 -0
  414. {workbench-0.8.168 → workbench-0.8.170}/scripts/model_endpoint_sanity_check.py +0 -0
  415. {workbench-0.8.168 → workbench-0.8.170}/scripts/model_to_endpoint_debugging.py +0 -0
  416. {workbench-0.8.168 → workbench-0.8.170}/scripts/monitor_event_bridge.py +0 -0
  417. {workbench-0.8.168 → workbench-0.8.170}/scripts/onboard_endpoints.py +0 -0
  418. {workbench-0.8.168 → workbench-0.8.170}/scripts/onboard_models.py +0 -0
  419. {workbench-0.8.168 → workbench-0.8.170}/scripts/pipeline_model_endpoint.py +0 -0
  420. {workbench-0.8.168 → workbench-0.8.170}/scripts/pubchem/pubchem_example.py +0 -0
  421. {workbench-0.8.168 → workbench-0.8.170}/scripts/pubchem/pubchem_query.py +0 -0
  422. {workbench-0.8.168 → workbench-0.8.170}/scripts/pubchem/pubchem_query_with_cid.py +0 -0
  423. {workbench-0.8.168 → workbench-0.8.170}/scripts/seaborn_to_plotly.py +0 -0
  424. {workbench-0.8.168 → workbench-0.8.170}/scripts/storage/dns_data_to_features.py +0 -0
  425. {workbench-0.8.168 → workbench-0.8.170}/scripts/storage/generate_jsonl_data.py +0 -0
  426. {workbench-0.8.168 → workbench-0.8.170}/scripts/test_feature_resolution.py +0 -0
  427. {workbench-0.8.168 → workbench-0.8.170}/scripts/test_no_workbench_config.py +0 -0
  428. {workbench-0.8.168 → workbench-0.8.170}/scripts/tox21/test_tox_heuristic.py +0 -0
  429. {workbench-0.8.168 → workbench-0.8.170}/scripts/tox21/tox21_to_df_store.py +0 -0
  430. {workbench-0.8.168 → workbench-0.8.170}/setup.cfg +0 -0
  431. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/__init__.py +0 -0
  432. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/__init__.py +0 -0
  433. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/dataframe/Readme.md +0 -0
  434. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/dataframe/__init__.py +0 -0
  435. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/dataframe/data_source_eda.py +0 -0
  436. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/dataframe/feature_space_proximity.py +0 -0
  437. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/dataframe/fingerprint_proximity.py +0 -0
  438. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/dataframe/projection_2d.py +0 -0
  439. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/dataframe/proximity.py +0 -0
  440. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/dataframe/storage/aggregation.py +0 -0
  441. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/dataframe/storage/feature_resolution.py +0 -0
  442. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/dataframe/storage/feature_spider.py +0 -0
  443. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/dataframe/storage/residuals_calculator.py +0 -0
  444. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/dataframe/storage/row_tagger.py +0 -0
  445. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/dataframe/storage/target_gradients.py +0 -0
  446. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/graph/__init__.py +0 -0
  447. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/graph/heavy/Readme.md +0 -0
  448. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/graph/light/Readme.md +0 -0
  449. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/graph/light/__init__.py +0 -0
  450. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/graph/light/proximity_graph.py +0 -0
  451. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/spark/Readme.md +0 -0
  452. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/sql/Readme.md +0 -0
  453. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/sql/__init__.py +0 -0
  454. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/sql/column_stats.py +0 -0
  455. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/sql/correlations.py +0 -0
  456. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/sql/descriptive_stats.py +0 -0
  457. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/sql/outliers.py +0 -0
  458. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/sql/sample_rows.py +0 -0
  459. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/algorithms/sql/value_counts.py +0 -0
  460. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/api/__init__.py +0 -0
  461. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/api/compound.py +0 -0
  462. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/api/data_source.py +0 -0
  463. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/api/df_store.py +0 -0
  464. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/api/endpoint.py +0 -0
  465. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/api/feature_set.py +0 -0
  466. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/api/graph_store.py +0 -0
  467. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/api/meta.py +0 -0
  468. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/api/monitor.py +0 -0
  469. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/api/parameter_store.py +0 -0
  470. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/api/pipeline.py +0 -0
  471. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/cached/__init__.py +0 -0
  472. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/cached/cached_data_source.py +0 -0
  473. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/cached/cached_endpoint.py +0 -0
  474. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/cached/cached_feature_set.py +0 -0
  475. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/cached/cached_meta.py +0 -0
  476. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/cached/cached_model.py +0 -0
  477. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/cached/cached_pipeline.py +0 -0
  478. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/__init__.py +0 -0
  479. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/artifacts/__init__.py +0 -0
  480. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/artifacts/artifact.py +0 -0
  481. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/artifacts/athena_source.py +0 -0
  482. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/artifacts/cached_artifact_mixin.py +0 -0
  483. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/artifacts/data_source_abstract.py +0 -0
  484. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/artifacts/data_source_factory.py +0 -0
  485. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/artifacts/feature_set_core.py +0 -0
  486. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/artifacts/model_core.py +0 -0
  487. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/cloud_platform/aws/README.md +0 -0
  488. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/cloud_platform/aws/aws_account_clamp.py +0 -0
  489. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/cloud_platform/aws/aws_df_store.py +0 -0
  490. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/cloud_platform/aws/aws_graph_store.py +0 -0
  491. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/cloud_platform/aws/aws_meta.py +0 -0
  492. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/cloud_platform/aws/aws_parameter_store.py +0 -0
  493. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/cloud_platform/aws/aws_secrets_manager.py +0 -0
  494. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/cloud_platform/aws/aws_session.py +0 -0
  495. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/cloud_platform/aws/cache_dataframe.py +0 -0
  496. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/cloud_platform/azure/README.md +0 -0
  497. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/cloud_platform/cloud_meta.py +0 -0
  498. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/cloud_platform/gcp/README.md +0 -0
  499. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/pipelines/pipeline_executor.py +0 -0
  500. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/Readme.md +0 -0
  501. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/__init__.py +0 -0
  502. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/data_loaders/__init__.py +0 -0
  503. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/data_loaders/heavy/__init__.py +0 -0
  504. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/data_loaders/heavy/s3_heavy_to_data_source.py +0 -0
  505. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/data_loaders/light/__init__.py +0 -0
  506. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/data_loaders/light/csv_to_data_source.py +0 -0
  507. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/data_loaders/light/json_to_data_source.py +0 -0
  508. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/data_loaders/light/s3_to_data_source_light.py +0 -0
  509. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/data_to_data/__init__.py +0 -0
  510. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/data_to_data/heavy/__init__.py +0 -0
  511. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/data_to_data/heavy/emr/Readme.md +0 -0
  512. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/data_to_data/heavy/glue/Readme.md +0 -0
  513. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/data_to_data/light/__init__.py +0 -0
  514. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/data_to_data/light/clean_data.py +0 -0
  515. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/data_to_data/light/data_to_data_light.py +0 -0
  516. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/data_to_features/__init__.py +0 -0
  517. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/data_to_features/heavy/__init__.py +0 -0
  518. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/data_to_features/heavy/chunk/__init__.py +0 -0
  519. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/data_to_features/heavy/chunk/data_to_features_chunk.py +0 -0
  520. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/data_to_features/heavy/emr/Readme.md +0 -0
  521. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/data_to_features/heavy/glue/Readme.md +0 -0
  522. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/data_to_features/heavy/storage/data_to_features_heavy_old.py +0 -0
  523. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/data_to_features/light/__init__.py +0 -0
  524. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/data_to_features/light/data_to_features_light.py +0 -0
  525. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/data_to_features/light/molecular_descriptors.py +0 -0
  526. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/features_to_features/__init__.py +0 -0
  527. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/features_to_features/heavy/emr/Readme.md +0 -0
  528. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/features_to_features/heavy/glue/Readme.md +0 -0
  529. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/features_to_model/__init__.py +0 -0
  530. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/features_to_model/features_to_model.py +0 -0
  531. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/model_to_endpoint/__init__.py +0 -0
  532. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/pandas_transforms/__init__.py +0 -0
  533. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/pandas_transforms/data_to_pandas.py +0 -0
  534. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/pandas_transforms/features_to_pandas.py +0 -0
  535. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/pandas_transforms/pandas_to_data.py +0 -0
  536. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/pandas_transforms/pandas_to_features.py +0 -0
  537. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/pandas_transforms/pandas_to_features_chunked.py +0 -0
  538. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/transforms/transform.py +0 -0
  539. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/views/__init__.py +0 -0
  540. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/views/column_subset_view.py +0 -0
  541. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/views/computation_view.py +0 -0
  542. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/views/create_view.py +0 -0
  543. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/views/display_view.py +0 -0
  544. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/views/inference_view.py +0 -0
  545. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/views/pandas_to_view.py +0 -0
  546. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/views/storage/mdq_view.py +0 -0
  547. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/views/training_view.py +0 -0
  548. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/views/view.py +0 -0
  549. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/core/views/view_utils.py +0 -0
  550. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/custom_models/chem_info/Readme.md +0 -0
  551. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/custom_models/chem_info/local_utils.py +0 -0
  552. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/custom_models/chem_info/molecular_descriptors.py +0 -0
  553. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/custom_models/chem_info/morgan_fingerprints.py +0 -0
  554. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/custom_models/chem_info/requirements.txt +0 -0
  555. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/custom_models/chem_info/tautomerize.py +0 -0
  556. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/custom_models/meta_endpoints/example.py +0 -0
  557. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/custom_models/network_security/Readme.md +0 -0
  558. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/custom_models/proximity/Readme.md +0 -0
  559. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/custom_models/proximity/feature_space_proximity.template +0 -0
  560. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/custom_models/proximity/generated_model_script.py +0 -0
  561. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/custom_models/proximity/proximity.py +0 -0
  562. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/custom_models/proximity/requirements.txt +0 -0
  563. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/custom_models/uq_models/Readme.md +0 -0
  564. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/custom_models/uq_models/bayesian_ridge.template +0 -0
  565. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/custom_models/uq_models/ensemble_xgb.template +0 -0
  566. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/custom_models/uq_models/gaussian_process.template +0 -0
  567. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/custom_models/uq_models/generated_model_script.py +0 -0
  568. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/custom_models/uq_models/mapie_xgb.template +0 -0
  569. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/custom_models/uq_models/meta_uq.template +0 -0
  570. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/custom_models/uq_models/ngboost.template +0 -0
  571. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/custom_models/uq_models/proximity.py +0 -0
  572. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/custom_models/uq_models/requirements.txt +0 -0
  573. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/custom_script_example/custom_model_script.py +0 -0
  574. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/custom_script_example/requirements.txt +0 -0
  575. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/ensemble_xgb/ensemble_xgb.template +0 -0
  576. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/ensemble_xgb/generated_model_script.py +0 -0
  577. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/ensemble_xgb/requirements.txt +0 -0
  578. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/pytorch_model/generated_model_script.py +0 -0
  579. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/pytorch_model/pytorch.template +0 -0
  580. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/pytorch_model/requirements.txt +0 -0
  581. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/quant_regression/quant_regression.template +0 -0
  582. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/quant_regression/requirements.txt +0 -0
  583. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/scikit_learn/generated_model_script.py +0 -0
  584. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/scikit_learn/requirements.txt +0 -0
  585. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/scikit_learn/scikit_learn.template +0 -0
  586. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/script_generation.py +0 -0
  587. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/xgb_model/generated_model_script.py +0 -0
  588. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/xgb_model/requirements.txt +0 -0
  589. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/model_scripts/xgb_model/xgb_model.template +0 -0
  590. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/repl/__init__.py +0 -0
  591. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/repl/workbench_shell.py +0 -0
  592. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/resources/open_source_api.key +0 -0
  593. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/resources/signature_verify_pub.pem +0 -0
  594. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/scripts/check_double_bond_stereo.py +0 -0
  595. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/scripts/glue_launcher.py +0 -0
  596. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/scripts/monitor_cloud_watch.py +0 -0
  597. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/scripts/redis_expire.py +0 -0
  598. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/scripts/redis_report.py +0 -0
  599. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/scripts/show_config.py +0 -0
  600. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/themes/dark/base_css.url +0 -0
  601. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/themes/dark/custom.css +0 -0
  602. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/themes/dark/plotly.json +0 -0
  603. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/themes/light/base_css.url +0 -0
  604. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/themes/light/branding.json +0 -0
  605. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/themes/light/custom.css +0 -0
  606. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/themes/light/plotly.json +0 -0
  607. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/themes/midnight_blue/base_css.url +0 -0
  608. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/themes/midnight_blue/branding.json +0 -0
  609. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/themes/midnight_blue/custom.css +0 -0
  610. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/themes/midnight_blue/plotly.json +0 -0
  611. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/themes/quartz/base_css.url +0 -0
  612. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/themes/quartz/custom.css +0 -0
  613. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/themes/quartz/plotly.json +0 -0
  614. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/themes/quartz_dark/base_css.url +0 -0
  615. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/themes/quartz_dark/custom.css +0 -0
  616. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/themes/quartz_dark/plotly.json +0 -0
  617. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/__init__.py +0 -0
  618. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/ai_compound_generator.py +0 -0
  619. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/ai_summary.py +0 -0
  620. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/ai_synth.py +0 -0
  621. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/athena_utils.py +0 -0
  622. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/aws_utils.py +0 -0
  623. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/bulk_utils.py +0 -0
  624. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/cache.py +0 -0
  625. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/chem_utils.py +0 -0
  626. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/cloudwatch_handler.py +0 -0
  627. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/cloudwatch_utils.py +0 -0
  628. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/color_utils.py +0 -0
  629. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/config_manager.py +0 -0
  630. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/dashboard_metrics.py +0 -0
  631. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/datetime_utils.py +0 -0
  632. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/deprecated_utils.py +0 -0
  633. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/df_to_endpoint.py +0 -0
  634. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/ecs_info.py +0 -0
  635. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/endpoint_metrics.py +0 -0
  636. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/endpoint_utils.py +0 -0
  637. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/extract_model_artifact.py +0 -0
  638. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/fast_inference.py +0 -0
  639. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/glue_utils.py +0 -0
  640. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/graph_utils.py +0 -0
  641. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/ipython_utils.py +0 -0
  642. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/json_utils.py +0 -0
  643. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/lambda_utils.py +0 -0
  644. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/license_manager.py +0 -0
  645. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/log_utils.py +0 -0
  646. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/markdown_utils.py +0 -0
  647. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/model_utils.py +0 -0
  648. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/monitor_utils.py +0 -0
  649. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/pandas_utils.py +0 -0
  650. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/performance_utils.py +0 -0
  651. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/pipeline_utils.py +0 -0
  652. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/plot_utils.py +0 -0
  653. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/plugin_manager.py +0 -0
  654. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/prox_utils.py +0 -0
  655. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/redis_cache.py +0 -0
  656. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/repl_utils.py +0 -0
  657. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/resource_utils.py +0 -0
  658. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/s3_utils.py +0 -0
  659. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/shap_utils.py +0 -0
  660. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/shapley_values.py +0 -0
  661. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/symbols.py +0 -0
  662. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/test_data_generator.py +0 -0
  663. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/theme_manager.py +0 -0
  664. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/trace_calls.py +0 -0
  665. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/type_abbrev.py +0 -0
  666. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/workbench_cache.py +0 -0
  667. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/workbench_event_bridge.py +0 -0
  668. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/workbench_logging.py +0 -0
  669. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/workbench_sqs.py +0 -0
  670. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/utils/xgboost_model_utils.py +0 -0
  671. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/component_interface.py +0 -0
  672. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/correlation_matrix.py +0 -0
  673. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/data_details_markdown.py +0 -0
  674. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/endpoint_metric_plots.py +0 -0
  675. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/experiments/dashboard_metric_plots.py +0 -0
  676. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/experiments/outlier_plot.py +0 -0
  677. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/model_plot.py +0 -0
  678. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/plugin_interface.py +0 -0
  679. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/plugin_unit_test.py +0 -0
  680. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/plugins/ag_table.py +0 -0
  681. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/plugins/confusion_matrix.py +0 -0
  682. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/plugins/dashboard_status.py +0 -0
  683. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/plugins/data_details.py +0 -0
  684. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/plugins/endpoint_details.py +0 -0
  685. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/plugins/generated_compounds.py +0 -0
  686. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/plugins/graph_plot.py +0 -0
  687. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/plugins/license_details.py +0 -0
  688. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/plugins/model_details.py +0 -0
  689. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/plugins/molecule_panel.py +0 -0
  690. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/plugins/molecule_viewer.py +0 -0
  691. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/plugins/pipeline_details.py +0 -0
  692. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/plugins/proximity_mini_graph.py +0 -0
  693. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/plugins/scatter_plot.py +0 -0
  694. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/plugins/shap_summary_plot.py +0 -0
  695. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/regression_plot.py +0 -0
  696. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/components/violin_plots.py +0 -0
  697. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/page_views/data_sources_page_view.py +0 -0
  698. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/page_views/endpoints_page_view.py +0 -0
  699. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/page_views/feature_sets_page_view.py +0 -0
  700. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/page_views/main_page.py +0 -0
  701. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/page_views/models_page_view.py +0 -0
  702. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/page_views/page_view.py +0 -0
  703. {workbench-0.8.168 → workbench-0.8.170}/src/workbench/web_interface/page_views/pipelines_page_view.py +0 -0
  704. {workbench-0.8.168 → workbench-0.8.170}/src/workbench.egg-info/dependency_links.txt +0 -0
  705. {workbench-0.8.168 → workbench-0.8.170}/src/workbench.egg-info/entry_points.txt +0 -0
  706. {workbench-0.8.168 → workbench-0.8.170}/src/workbench.egg-info/requires.txt +0 -0
  707. {workbench-0.8.168 → workbench-0.8.170}/src/workbench.egg-info/top_level.txt +0 -0
  708. {workbench-0.8.168 → workbench-0.8.170}/tests/README.md +0 -0
  709. {workbench-0.8.168 → workbench-0.8.170}/tests/artifacts/data_source_tests.py +0 -0
  710. {workbench-0.8.168 → workbench-0.8.170}/tests/artifacts/empty_model_group.py +0 -0
  711. {workbench-0.8.168 → workbench-0.8.170}/tests/artifacts/endpoint_tests.py +0 -0
  712. {workbench-0.8.168 → workbench-0.8.170}/tests/artifacts/featureset_ingest_boundaries.py +0 -0
  713. {workbench-0.8.168 → workbench-0.8.170}/tests/artifacts/featureset_tests.py +0 -0
  714. {workbench-0.8.168 → workbench-0.8.170}/tests/artifacts/graph_tests.py +0 -0
  715. {workbench-0.8.168 → workbench-0.8.170}/tests/artifacts/model_metrics_tests.py +0 -0
  716. {workbench-0.8.168 → workbench-0.8.170}/tests/artifacts/model_tests.py +0 -0
  717. {workbench-0.8.168 → workbench-0.8.170}/tests/aws_account/aws_account_clamp_tests.py +0 -0
  718. {workbench-0.8.168 → workbench-0.8.170}/tests/cached/cached_artifact_tests.py +0 -0
  719. {workbench-0.8.168 → workbench-0.8.170}/tests/chem_info/test_canonicalize.py +0 -0
  720. {workbench-0.8.168 → workbench-0.8.170}/tests/chem_info/test_tautomerization.py +0 -0
  721. {workbench-0.8.168 → workbench-0.8.170}/tests/corner_cases/end_to_end.py +0 -0
  722. {workbench-0.8.168 → workbench-0.8.170}/tests/create_test_artifacts/100_percent_models.py +0 -0
  723. {workbench-0.8.168 → workbench-0.8.170}/tests/create_test_artifacts/create_aqsol_artifacts.py +0 -0
  724. {workbench-0.8.168 → workbench-0.8.170}/tests/create_test_artifacts/create_aqsol_rt_artifacts.py +0 -0
  725. {workbench-0.8.168 → workbench-0.8.170}/tests/create_test_artifacts/create_aqsol_uq_artifacts.py +0 -0
  726. {workbench-0.8.168 → workbench-0.8.170}/tests/create_test_artifacts/create_basic_test_artifacts.py +0 -0
  727. {workbench-0.8.168 → workbench-0.8.170}/tests/create_test_artifacts/create_copy_artifacts.py +0 -0
  728. {workbench-0.8.168 → workbench-0.8.170}/tests/create_test_artifacts/create_empty_model_group.py +0 -0
  729. {workbench-0.8.168 → workbench-0.8.170}/tests/create_test_artifacts/create_endpoints_for_timing.py +0 -0
  730. {workbench-0.8.168 → workbench-0.8.170}/tests/create_test_artifacts/create_graph_artifacts.py +0 -0
  731. {workbench-0.8.168 → workbench-0.8.170}/tests/create_test_artifacts/create_knn_artifacts.py +0 -0
  732. {workbench-0.8.168 → workbench-0.8.170}/tests/create_test_artifacts/create_meta_endpoints.py +0 -0
  733. {workbench-0.8.168 → workbench-0.8.170}/tests/create_test_artifacts/create_pipeline_model.py +0 -0
  734. {workbench-0.8.168 → workbench-0.8.170}/tests/create_test_artifacts/create_proximity_models.py +0 -0
  735. {workbench-0.8.168 → workbench-0.8.170}/tests/create_test_artifacts/create_quant_regression_artifacts.py +0 -0
  736. {workbench-0.8.168 → workbench-0.8.170}/tests/create_test_artifacts/create_realtime_endpoint.py +0 -0
  737. {workbench-0.8.168 → workbench-0.8.170}/tests/create_test_artifacts/create_training_adjusted_artifacts.py +0 -0
  738. {workbench-0.8.168 → workbench-0.8.170}/tests/create_test_artifacts/create_wine_artifacts.py +0 -0
  739. {workbench-0.8.168 → workbench-0.8.170}/tests/create_test_artifacts/delete_stress_test_artifacts.py +0 -0
  740. {workbench-0.8.168 → workbench-0.8.170}/tests/create_test_artifacts/delete_test_artifacts.py +0 -0
  741. {workbench-0.8.168 → workbench-0.8.170}/tests/create_test_artifacts/regression_ensemble.py +0 -0
  742. {workbench-0.8.168 → workbench-0.8.170}/tests/create_test_artifacts/stress_test_aws.py +0 -0
  743. {workbench-0.8.168 → workbench-0.8.170}/tests/df_store/df_store_tests.py +0 -0
  744. {workbench-0.8.168 → workbench-0.8.170}/tests/lambda/decompress_layers.py +0 -0
  745. {workbench-0.8.168 → workbench-0.8.170}/tests/pandas_tests/test_drift.py +0 -0
  746. {workbench-0.8.168 → workbench-0.8.170}/tests/parameter_store/param_store_tests.py +0 -0
  747. {workbench-0.8.168 → workbench-0.8.170}/tests/plugin_tests/crashing_plugin.py +0 -0
  748. {workbench-0.8.168 → workbench-0.8.170}/tests/pytorch/pytorch_hello.py +0 -0
  749. {workbench-0.8.168 → workbench-0.8.170}/tests/requirements-dev.txt +0 -0
  750. {workbench-0.8.168 → workbench-0.8.170}/tests/specific/capital_tests.py +0 -0
  751. {workbench-0.8.168 → workbench-0.8.170}/tests/specific/column_changes.py +0 -0
  752. {workbench-0.8.168 → workbench-0.8.170}/tests/specific/config_manager.py +0 -0
  753. {workbench-0.8.168 → workbench-0.8.170}/tests/specific/deletion_tests.py +0 -0
  754. {workbench-0.8.168 → workbench-0.8.170}/tests/specific/shap_tests.py +0 -0
  755. {workbench-0.8.168 → workbench-0.8.170}/tests/transforms/data_to_data_tests.py +0 -0
  756. {workbench-0.8.168 → workbench-0.8.170}/tests/transforms/data_to_features_tests.py +0 -0
  757. {workbench-0.8.168 → workbench-0.8.170}/tests/transforms/features_to_model_tests.py +0 -0
  758. {workbench-0.8.168 → workbench-0.8.170}/tests/transforms/model_to_endpoint_tests.py +0 -0
  759. {workbench-0.8.168 → workbench-0.8.170}/tests/transforms/pandas_to_data_tests.py +0 -0
  760. {workbench-0.8.168 → workbench-0.8.170}/tests/transforms/pandas_to_features_test.py +0 -0
  761. {workbench-0.8.168 → workbench-0.8.170}/tests/views/view_tests.py +0 -0
  762. {workbench-0.8.168 → workbench-0.8.170}/tests/views/view_tests_complex.py +0 -0
  763. {workbench-0.8.168 → workbench-0.8.170}/tests/web_components/confusion_matrix_test.py +0 -0
  764. {workbench-0.8.168 → workbench-0.8.170}/tests/web_components/correlation_matrix_test.py +0 -0
  765. {workbench-0.8.168 → workbench-0.8.170}/tests/web_components/graph_plot_test.py +0 -0
  766. {workbench-0.8.168 → workbench-0.8.170}/tests/web_components/plugin_interface_test.py +0 -0
  767. {workbench-0.8.168 → workbench-0.8.170}/tests/web_components/scatter_plot_test.py +0 -0
  768. {workbench-0.8.168 → workbench-0.8.170}/tox.ini +0 -0
  769. {workbench-0.8.168 → workbench-0.8.170}/ui_testing/assets/custom.css +0 -0
  770. {workbench-0.8.168 → workbench-0.8.170}/ui_testing/table_comparison.py +0 -0
  771. {workbench-0.8.168 → workbench-0.8.170}/ui_testing/theme_switching.py +0 -0
  772. {workbench-0.8.168 → workbench-0.8.170}/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.168
3
+ Version: 0.8.170
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-Expression: MIT
@@ -31,7 +31,12 @@ workbench_bucket = (cm and cm.get_config("WORKBENCH_BUCKET")) or os.getenv("WORK
31
31
  if not workbench_bucket:
32
32
  print("Error: WORKBENCH_BUCKET is required but not found in config or environment variables.")
33
33
  exit(1)
34
- sso_group = (cm and cm.get_config("WORKBENCH_SSO_GROUP")) or os.getenv("WORKBENCH_SSO_GROUP")
34
+
35
+ # SSO Groups (Groups that can assume the Workbench roles)
36
+ sso_groups_str = (cm and cm.get_config("WORKBENCH_SSO_GROUPS")) or os.getenv("WORKBENCH_SSO_GROUPS", "")
37
+ sso_groups = [group.strip() for group in sso_groups_str.split(",") if group.strip()] if sso_groups_str else []
38
+
39
+ # Additional Buckets (Extra S3 buckets to grant access to)
35
40
  additional_buckets_str = (cm and cm.get_config("WORKBENCH_ADDITIONAL_BUCKETS")) or os.getenv(
36
41
  "WORKBENCH_ADDITIONAL_BUCKETS", ""
37
42
  )
@@ -44,7 +49,7 @@ subnet_ids = (cm and cm.get_config("WORKBENCH_SUBNET_IDS")) or os.getenv("WORKBE
44
49
  # Log the configuration for transparency
45
50
  print("Configuration:")
46
51
  print(f" WORKBENCH_BUCKET: {workbench_bucket}")
47
- print(f" WORKBENCH_SSO_GROUP: {sso_group}")
52
+ print(f" WORKBENCH_SSO_GROUPS: {sso_groups}")
48
53
  print(f" WORKBENCH_ADDITIONAL_BUCKETS: {additional_buckets}")
49
54
  print(f" WORKBENCH_VPC_ID: {existing_vpc_id}")
50
55
  print(f" WORKBENCH_SUBNET_IDS: {subnet_ids}")
@@ -60,7 +65,7 @@ sandbox_stack = WorkbenchCoreStack(
60
65
  env=env,
61
66
  props=WorkbenchCoreStackProps(
62
67
  workbench_bucket=workbench_bucket,
63
- sso_group=sso_group,
68
+ sso_groups=sso_groups,
64
69
  additional_buckets=additional_buckets,
65
70
  existing_vpc_id=existing_vpc_id,
66
71
  subnet_ids=subnet_ids,
@@ -4,18 +4,22 @@ from aws_cdk import (
4
4
  aws_iam as iam,
5
5
  aws_logs as logs,
6
6
  aws_ec2 as ec2,
7
+ aws_ecs as ecs,
7
8
  aws_batch as batch,
8
9
  RemovalPolicy,
10
+ Duration,
11
+ Size,
9
12
  )
10
13
  from constructs import Construct
11
14
  from typing import Any, List
12
15
  from dataclasses import dataclass, field
16
+ from typing import Dict
13
17
 
14
18
 
15
19
  @dataclass
16
20
  class WorkbenchCoreStackProps:
17
21
  workbench_bucket: str
18
- sso_group: str
22
+ sso_groups: List[str] = field(default_factory=list)
19
23
  additional_buckets: List[str] = field(default_factory=list)
20
24
  existing_vpc_id: str = None
21
25
  subnet_ids: List[str] = field(default_factory=list) # Optional subnets ids for the Batch compute environment
@@ -39,7 +43,7 @@ class WorkbenchCoreStack(Stack):
39
43
 
40
44
  # Grab our properties
41
45
  self.workbench_bucket = props.workbench_bucket
42
- self.sso_group = props.sso_group
46
+ self.sso_groups = props.sso_groups
43
47
  self.additional_buckets = props.additional_buckets
44
48
  self.existing_vpc_id = props.existing_vpc_id
45
49
  self.subnet_ids = props.subnet_ids
@@ -75,7 +79,7 @@ class WorkbenchCoreStack(Stack):
75
79
  self.model_policy = self.workbench_model_policy()
76
80
  self.endpoint_read_policy = self.workbench_endpoint_read_policy()
77
81
  self.endpoint_policy = self.workbench_endpoint_policy()
78
- self.pipeline_policy = self.workbench_pipeline_policy()
82
+ # self.sagemaker_pipeline_full_policy = self.sagemaker_pipeline_full_policy() # Not currently used
79
83
  self.dataframe_store_read_policy = self.workbench_dataframe_store_read_policy()
80
84
  self.dataframe_store_full_policy = self.workbench_dataframe_store_full_policy()
81
85
  self.parameter_store_read_policy = self.workbench_parameter_store_read_policy()
@@ -97,6 +101,7 @@ class WorkbenchCoreStack(Stack):
97
101
  # Batch Compute Environment and Job Queue
98
102
  self.batch_compute_environment = self.create_batch_compute_environment()
99
103
  self.batch_job_queue = self.create_batch_job_queue()
104
+ self.batch_job_definitions = self.create_batch_job_definitions()
100
105
 
101
106
  ####################
102
107
  # S3 Buckets #
@@ -230,6 +235,16 @@ class WorkbenchCoreStack(Stack):
230
235
  #####################
231
236
  # Glue Jobs #
232
237
  #####################
238
+ def glue_jobs_s3_read(self) -> iam.PolicyStatement:
239
+ """S3 Read for Glue Jobs default script location"""
240
+ return iam.PolicyStatement(
241
+ actions=["s3:GetObject", "s3:GetBucketLocation", "s3:ListBucket"],
242
+ resources=[
243
+ f"arn:aws:s3:::aws-glue-assets-{self.account}-{self.region}",
244
+ f"arn:aws:s3:::aws-glue-assets-{self.account}-{self.region}/*",
245
+ ],
246
+ )
247
+
233
248
  def glue_job_logs(self) -> iam.PolicyStatement:
234
249
  """Create a policy statement for Glue job CloudWatch logs.
235
250
 
@@ -405,7 +420,6 @@ class WorkbenchCoreStack(Stack):
405
420
  compute_environment_name="workbench-compute-env",
406
421
  vpc=vpc,
407
422
  vpc_subnets=vpc_subnets,
408
- replace_compute_environment=True,
409
423
  )
410
424
 
411
425
  def create_batch_job_queue(self) -> batch.JobQueue:
@@ -419,6 +433,40 @@ class WorkbenchCoreStack(Stack):
419
433
  ],
420
434
  )
421
435
 
436
+ def create_batch_job_definitions(self) -> Dict[str, batch.EcsJobDefinition]:
437
+ """Create ML pipeline job definitions in small/medium/large tiers."""
438
+
439
+ ecr_image_uri = f"507740646243.dkr.ecr.{self.region}.amazonaws.com/aws-ml-images/py312-ml-pipelines:0.1"
440
+ tiers = {
441
+ "small": (2, 4096), # 2 vCPU, 4GB RAM
442
+ "medium": (4, 8192), # 4 vCPU, 8GB RAM
443
+ "large": (8, 16384), # 8 vCPU, 16GB RAM
444
+ }
445
+
446
+ job_definitions = {}
447
+ for size, (cpu, memory_mib) in tiers.items():
448
+ job_definitions[size] = batch.EcsJobDefinition(
449
+ self,
450
+ f"JobDef{size.capitalize()}",
451
+ job_definition_name=f"workbench-ml-pipeline-{size}",
452
+ container=batch.EcsFargateContainerDefinition(
453
+ self,
454
+ f"Container{size.capitalize()}",
455
+ cpu=cpu,
456
+ memory=Size.mebibytes(memory_mib),
457
+ image=ecs.ContainerImage.from_registry(ecr_image_uri),
458
+ job_role=self.workbench_batch_role,
459
+ execution_role=self.workbench_batch_role,
460
+ environment={
461
+ "WORKBENCH_BUCKET": self.workbench_bucket,
462
+ "PYTHONUNBUFFERED": "1",
463
+ },
464
+ ),
465
+ timeout=Duration.hours(3),
466
+ )
467
+
468
+ return job_definitions
469
+
422
470
  #####################
423
471
  # DataFrame Store #
424
472
  #####################
@@ -445,11 +493,13 @@ class WorkbenchCoreStack(Stack):
445
493
  #####################
446
494
  # Inference Store #
447
495
  #####################
448
- def inference_store_read(self) -> iam.PolicyStatement:
496
+ def glue_database_read_just_inference_store(self) -> iam.PolicyStatement:
449
497
  """Create a policy statement for reading from the Parameter Store.
450
498
 
499
+ Note: This is basically glue_databases_read but scoped to just the inference_store database.
500
+
451
501
  Returns:
452
- iam.PolicyStatement: The policy statement for reading from the Parameter Store.
502
+ iam.PolicyStatement: The policy statement for reading from the Inference Store.
453
503
  """
454
504
  return iam.PolicyStatement(
455
505
  actions=[
@@ -462,13 +512,15 @@ class WorkbenchCoreStack(Stack):
462
512
  resources=self._inference_database_arns(),
463
513
  )
464
514
 
465
- def inference_store_full(self) -> iam.PolicyStatement:
515
+ def glue_database_full_just_inference_store(self) -> iam.PolicyStatement:
466
516
  """Create a policy statement for full access to the Inference Store.
467
517
 
518
+ Note: This is basically glue_databases_full but scoped to just the inference_store database.
519
+
468
520
  Returns:
469
521
  iam.PolicyStatement: The policy statement for full access to the Inference Store.
470
522
  """
471
- read_statement = self.inference_store_read()
523
+ read_statement = self.glue_database_read_just_inference_store()
472
524
  return iam.PolicyStatement(
473
525
  actions=read_statement.actions
474
526
  + [
@@ -476,7 +528,19 @@ class WorkbenchCoreStack(Stack):
476
528
  "glue:UpdateTable",
477
529
  "glue:DeleteTable",
478
530
  ],
479
- resources=self._inference_database_arns(),
531
+ resources=read_statement.resources,
532
+ )
533
+
534
+ def s3_full_just_inference_store(self) -> iam.PolicyStatement:
535
+ """S3 write permissions for inference store data only."""
536
+ return iam.PolicyStatement(
537
+ actions=[
538
+ "s3:PutObject", # Write inference store data
539
+ "s3:DeleteObject", # Delete inference store data
540
+ ],
541
+ resources=[
542
+ f"arn:aws:s3:::{self.workbench_bucket}/athena/inference_store/inference_store/*",
543
+ ],
480
544
  )
481
545
 
482
546
  ####################
@@ -540,6 +604,20 @@ class WorkbenchCoreStack(Stack):
540
604
  resources=["*"],
541
605
  )
542
606
 
607
+ def athena_query_results_s3(self) -> iam.PolicyStatement:
608
+ """S3 permissions for Athena query results bucket."""
609
+ return iam.PolicyStatement(
610
+ actions=[
611
+ "s3:PutObject", # Required: Athena writes query results even for SELECT queries
612
+ "s3:GetObject", # Needed to retrieve results later
613
+ "s3:ListBucket", # Needed for bucket operations
614
+ ],
615
+ resources=[
616
+ f"arn:aws:s3:::aws-athena-query-results-{self.account}-{self.region}",
617
+ f"arn:aws:s3:::aws-athena-query-results-{self.account}-{self.region}/*",
618
+ ],
619
+ )
620
+
543
621
  ######################
544
622
  # FeatureStore #
545
623
  ######################
@@ -813,7 +891,7 @@ class WorkbenchCoreStack(Stack):
813
891
  )
814
892
 
815
893
  @staticmethod
816
- def pipeline_list_policy_statement() -> iam.PolicyStatement:
894
+ def pipeline_list() -> iam.PolicyStatement:
817
895
  """Create a policy statement for listing SageMaker pipelines.
818
896
 
819
897
  Returns:
@@ -826,7 +904,7 @@ class WorkbenchCoreStack(Stack):
826
904
  resources=["*"], # Broad permission necessary for listing operations
827
905
  )
828
906
 
829
- def pipeline_policy_statement(self) -> iam.PolicyStatement:
907
+ def pipeline_full(self) -> iam.PolicyStatement:
830
908
  """Create a policy statement for inspecting and running SageMaker Pipelines.
831
909
 
832
910
  Returns:
@@ -860,7 +938,8 @@ class WorkbenchCoreStack(Stack):
860
938
  ],
861
939
  )
862
940
 
863
- def ecr_policy_statement(self) -> iam.PolicyStatement:
941
+ @staticmethod
942
+ def ecr_policy_statement() -> iam.PolicyStatement:
864
943
  """Create a policy statement for pulling ECR Images.
865
944
 
866
945
  Returns:
@@ -950,7 +1029,8 @@ class WorkbenchCoreStack(Stack):
950
1029
  ##########################
951
1030
  # Workbench Dashboard #
952
1031
  ##########################
953
- def dashboard_policy_statement(self) -> iam.PolicyStatement:
1032
+ @staticmethod
1033
+ def dashboard_policy_statement() -> iam.PolicyStatement:
954
1034
  """Create a policy statement for additional permissions needed by Workbench Dashboard.
955
1035
 
956
1036
  Returns:
@@ -1191,22 +1271,27 @@ class WorkbenchCoreStack(Stack):
1191
1271
  managed_policy_name="WorkbenchEndpointPolicy",
1192
1272
  )
1193
1273
 
1194
- def workbench_pipeline_policy(self) -> iam.ManagedPolicy:
1195
- """Create a managed policy for the Workbench Pipelines"""
1274
+ def sagemaker_full_policy(self) -> iam.ManagedPolicy:
1275
+ """Create a managed policy for the Workbench Pipelines (FULL)"""
1196
1276
  policy_statements = [
1197
- self.pipeline_list_policy_statement(),
1198
- self.pipeline_policy_statement(),
1277
+ self.pipeline_list(),
1278
+ self.pipeline_full(),
1199
1279
  ]
1200
1280
  return iam.ManagedPolicy(
1201
1281
  self,
1202
- id="WorkbenchPipelinePolicy",
1282
+ id="WorkbenchSagemakerPipelineFullPolicy",
1203
1283
  statements=policy_statements,
1204
- managed_policy_name="WorkbenchPipelinePolicy",
1284
+ managed_policy_name="WorkbenchSagemakerPipelineFullPolicy",
1205
1285
  )
1206
1286
 
1207
1287
  def workbench_dataframe_store_read_policy(self) -> iam.ManagedPolicy:
1208
1288
  """Create a managed policy for the Workbench DataFrame Store (READ-ONLY)"""
1209
1289
  policy_statements = [
1290
+ self.s3_read(),
1291
+ self.glue_jobs_s3_read(),
1292
+ self.glue_job_logs(),
1293
+ self.cloudwatch_logs(),
1294
+ self.parameter_store_read(), # Get Workbench Bucket from Parameter Store
1210
1295
  self.dataframe_store_read(),
1211
1296
  ]
1212
1297
 
@@ -1220,6 +1305,11 @@ class WorkbenchCoreStack(Stack):
1220
1305
  def workbench_dataframe_store_full_policy(self) -> iam.ManagedPolicy:
1221
1306
  """Create a managed policy for the Workbench DataFrame Store (FULL)"""
1222
1307
  policy_statements = [
1308
+ self.s3_read(),
1309
+ self.glue_jobs_s3_read(),
1310
+ self.glue_job_logs(),
1311
+ self.cloudwatch_logs(),
1312
+ self.parameter_store_read(), # Get Workbench Bucket from Parameter Store
1223
1313
  self.dataframe_store_full(),
1224
1314
  ]
1225
1315
 
@@ -1227,12 +1317,16 @@ class WorkbenchCoreStack(Stack):
1227
1317
  self,
1228
1318
  id="WorkbenchDFStoreFullPolicy",
1229
1319
  statements=policy_statements,
1230
- managed_policy_name="WorkbenchDFStorePolicy",
1320
+ managed_policy_name="WorkbenchDFStoreFullPolicy",
1231
1321
  )
1232
1322
 
1233
1323
  def workbench_parameter_store_read_policy(self) -> iam.ManagedPolicy:
1234
1324
  """Create a managed policy for the Workbench Parameter Store (READ-ONLY)"""
1235
1325
  policy_statements = [
1326
+ self.s3_read(),
1327
+ self.glue_jobs_s3_read(),
1328
+ self.glue_job_logs(),
1329
+ self.cloudwatch_logs(),
1236
1330
  self.parameter_store_discover(),
1237
1331
  self.parameter_store_read(),
1238
1332
  ]
@@ -1247,6 +1341,10 @@ class WorkbenchCoreStack(Stack):
1247
1341
  def workbench_parameter_store_full_policy(self) -> iam.ManagedPolicy:
1248
1342
  """Create a managed policy for the Workbench Parameter Store (FULL)"""
1249
1343
  policy_statements = [
1344
+ self.s3_read(),
1345
+ self.glue_jobs_s3_read(),
1346
+ self.glue_job_logs(),
1347
+ self.cloudwatch_logs(),
1250
1348
  self.parameter_store_discover(),
1251
1349
  self.parameter_store_full(),
1252
1350
  ]
@@ -1255,13 +1353,20 @@ class WorkbenchCoreStack(Stack):
1255
1353
  self,
1256
1354
  id="WorkbenchParameterStoreFullPolicy",
1257
1355
  statements=policy_statements,
1258
- managed_policy_name="WorkbenchParameterStorePolicy",
1356
+ managed_policy_name="WorkbenchParameterStoreFullPolicy",
1259
1357
  )
1260
1358
 
1261
1359
  def workbench_inference_store_read_policy(self) -> iam.ManagedPolicy:
1262
1360
  """Create a managed policy for the Workbench Inference Store (READ-ONLY)"""
1263
1361
  policy_statements = [
1264
- self.inference_store_read(),
1362
+ self.s3_read(),
1363
+ self.glue_jobs_s3_read(),
1364
+ self.athena_query_results_s3(),
1365
+ self.glue_job_logs(),
1366
+ self.cloudwatch_logs(),
1367
+ self.glue_catalog_read(),
1368
+ self.glue_database_read_just_inference_store(),
1369
+ self.athena_read(),
1265
1370
  ]
1266
1371
 
1267
1372
  return iam.ManagedPolicy(
@@ -1274,14 +1379,23 @@ class WorkbenchCoreStack(Stack):
1274
1379
  def workbench_inference_store_full_policy(self) -> iam.ManagedPolicy:
1275
1380
  """Create a managed policy for the Workbench Inference Store (FULL)"""
1276
1381
  policy_statements = [
1277
- self.inference_store_full(),
1382
+ self.s3_read(),
1383
+ self.glue_jobs_s3_read(),
1384
+ self.s3_full_just_inference_store(),
1385
+ self.athena_query_results_s3(),
1386
+ self.glue_job_logs(),
1387
+ self.cloudwatch_logs(),
1388
+ self.glue_catalog_read(),
1389
+ self.glue_database_full_just_inference_store(),
1390
+ self.athena_read(),
1391
+ self.parameter_store_read(), # Get Workbench Bucket from Parameter Store
1278
1392
  ]
1279
1393
 
1280
1394
  return iam.ManagedPolicy(
1281
1395
  self,
1282
1396
  id="WorkbenchInferenceStoreFullPolicy",
1283
1397
  statements=policy_statements,
1284
- managed_policy_name="WorkbenchInferenceStorePolicy",
1398
+ managed_policy_name="WorkbenchInferenceStoreFullPolicy",
1285
1399
  )
1286
1400
 
1287
1401
  def create_execution_role(self) -> iam.Role:
@@ -1313,12 +1427,12 @@ class WorkbenchCoreStack(Stack):
1313
1427
  api_execution_role.add_to_policy(self.batch_pass_role())
1314
1428
  api_execution_role.add_to_policy(self.parameter_store_discover())
1315
1429
  api_execution_role.add_to_policy(self.parameter_store_full())
1430
+ api_execution_role.add_to_policy(self.cloudwatch_logs())
1316
1431
  api_execution_role.add_to_policy(self.cloudwatch_monitor())
1317
1432
  api_execution_role.add_managed_policy(self.datasource_policy)
1318
1433
  api_execution_role.add_managed_policy(self.featureset_policy)
1319
1434
  api_execution_role.add_managed_policy(self.model_policy)
1320
1435
  api_execution_role.add_managed_policy(self.endpoint_policy)
1321
- api_execution_role.add_managed_policy(self.pipeline_policy)
1322
1436
  return api_execution_role
1323
1437
 
1324
1438
  def create_readonly_role(self) -> iam.Role:
@@ -1343,6 +1457,7 @@ class WorkbenchCoreStack(Stack):
1343
1457
  readonly_role.add_to_policy(self.glue_jobs_read())
1344
1458
  readonly_role.add_to_policy(self.parameter_store_discover())
1345
1459
  readonly_role.add_to_policy(self.parameter_store_read())
1460
+ readonly_role.add_to_policy(self.cloudwatch_logs())
1346
1461
  readonly_role.add_managed_policy(self.datasource_read_policy)
1347
1462
  readonly_role.add_managed_policy(self.featureset_read_policy)
1348
1463
  readonly_role.add_managed_policy(self.model_read_policy)
@@ -1361,11 +1476,11 @@ class WorkbenchCoreStack(Stack):
1361
1476
 
1362
1477
  # Add a subset of policies for the Lambda Role
1363
1478
  lambda_role.add_to_policy(self.parameter_store_full())
1479
+ lambda_role.add_to_policy(self.cloudwatch_logs())
1364
1480
  lambda_role.add_managed_policy(self.datasource_policy)
1365
1481
  lambda_role.add_managed_policy(self.featureset_policy)
1366
1482
  lambda_role.add_managed_policy(self.model_policy)
1367
1483
  lambda_role.add_managed_policy(self.endpoint_policy)
1368
- lambda_role.add_managed_policy(self.pipeline_policy)
1369
1484
  return lambda_role
1370
1485
 
1371
1486
  def create_glue_role(self) -> iam.Role:
@@ -1381,6 +1496,7 @@ class WorkbenchCoreStack(Stack):
1381
1496
  # Add a subset of policies for the Glue Role
1382
1497
  glue_role.add_to_policy(self.glue_job_logs())
1383
1498
  glue_role.add_to_policy(self.glue_connections())
1499
+ glue_role.add_to_policy(self.cloudwatch_logs())
1384
1500
  glue_role.add_to_policy(self.vpc_discovery())
1385
1501
  glue_role.add_to_policy(self.vpc_network_interface_management())
1386
1502
  glue_role.add_to_policy(self.parameter_store_full())
@@ -1388,7 +1504,6 @@ class WorkbenchCoreStack(Stack):
1388
1504
  glue_role.add_managed_policy(self.featureset_policy)
1389
1505
  glue_role.add_managed_policy(self.model_policy)
1390
1506
  glue_role.add_managed_policy(self.endpoint_policy)
1391
- glue_role.add_managed_policy(self.pipeline_policy)
1392
1507
  return glue_role
1393
1508
 
1394
1509
  def create_batch_role(self) -> iam.Role:
@@ -1403,13 +1518,13 @@ class WorkbenchCoreStack(Stack):
1403
1518
 
1404
1519
  # Add policies for the Batch Role
1405
1520
  batch_role.add_to_policy(self.batch_job_logs())
1521
+ batch_role.add_to_policy(self.cloudwatch_logs())
1406
1522
  batch_role.add_to_policy(self.parameter_store_full())
1407
1523
  batch_role.add_to_policy(self.dataframe_store_full())
1408
1524
  batch_role.add_managed_policy(self.datasource_policy)
1409
1525
  batch_role.add_managed_policy(self.featureset_policy)
1410
1526
  batch_role.add_managed_policy(self.model_policy)
1411
1527
  batch_role.add_managed_policy(self.endpoint_policy)
1412
- batch_role.add_managed_policy(self.pipeline_policy)
1413
1528
  return batch_role
1414
1529
 
1415
1530
  def _create_sso_principals(self, base_principals: iam.CompositePrincipal = None) -> iam.CompositePrincipal:
@@ -1424,26 +1539,36 @@ class WorkbenchCoreStack(Stack):
1424
1539
  """
1425
1540
  assumed_by = base_principals or iam.CompositePrincipal()
1426
1541
 
1427
- # If sso_group is provided, configure trust relationship for AWS SSO integration
1542
+ # If sso_groups are provided, configure trust relationship for AWS SSO integration
1428
1543
  # AWS SSO creates roles with two different ARN patterns depending on configuration:
1429
- if self.sso_group:
1430
-
1431
- # Pattern 1: Direct group-based SSO role (no permission set in path)
1432
- # Used when SSO groups are mapped directly to roles
1433
- sso_group_arn_1 = (
1434
- f"arn:aws:iam::{self.account}:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_{self.sso_group}_*"
1435
- )
1436
-
1437
- # Pattern 2: Permission set-based SSO role (includes permission set ID in path)
1438
- # Used when SSO groups are assigned via permission sets (more common in enterprise setups)
1439
- # The middle wildcard (*) represents the permission set identifier
1440
- sso_group_arn_2 = (
1441
- f"arn:aws:iam::{self.account}:role/aws-reserved/sso.amazonaws.com/*/AWSReservedSSO_{self.sso_group}_*"
1442
- )
1443
-
1544
+ if self.sso_groups:
1545
+ # Build lists to hold all ARN patterns for all groups
1546
+ sso_group_arns_pattern_1 = []
1547
+ sso_group_arns_pattern_2 = []
1548
+
1549
+ # Generate ARN patterns for each SSO group
1550
+ for sso_group in self.sso_groups:
1551
+ # Pattern 1: Direct group-based SSO role (no permission set in path)
1552
+ # Used when SSO groups are mapped directly to roles
1553
+ sso_group_arn_1 = (
1554
+ f"arn:aws:iam::{self.account}:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_{sso_group}_*"
1555
+ )
1556
+ sso_group_arns_pattern_1.append(sso_group_arn_1)
1557
+
1558
+ # Pattern 2: Permission set-based SSO role (includes permission set ID in path)
1559
+ # Used when SSO groups are assigned via permission sets (more common in enterprise setups)
1560
+ # The middle wildcard (*) represents the permission set identifier
1561
+ sso_group_arn_2 = (
1562
+ f"arn:aws:iam::{self.account}:role/aws-reserved/sso.amazonaws.com/*/AWSReservedSSO_{sso_group}_*"
1563
+ )
1564
+ sso_group_arns_pattern_2.append(sso_group_arn_2)
1565
+
1566
+ # Combine both patterns into a single list for the condition
1444
1567
  # Both patterns are required for maximum compatibility across different SSO configurations
1445
1568
  # This is particularly important for Lake Formation and enterprise SSO integrations
1446
- condition = {"ArnLike": {"aws:PrincipalArn": [sso_group_arn_1, sso_group_arn_2]}}
1569
+ all_sso_arns = sso_group_arns_pattern_1 + sso_group_arns_pattern_2
1570
+
1571
+ condition = {"ArnLike": {"aws:PrincipalArn": all_sso_arns}}
1447
1572
  assumed_by.add_principals(iam.AccountPrincipal(self.account).with_conditions(condition))
1448
1573
  else:
1449
1574
  # Fallback: Allow any principal in the account to assume this role
@@ -50,7 +50,7 @@ You'll need to set some environmental vars before deploying the stack.
50
50
 
51
51
  ```
52
52
  export WORKBENCH_BUCKET=name-of-workbench-bucket
53
- export WORKBENCH_SSO_GROUP=DataScientist (or whatever)
53
+ export WORKBENCH_SSO_GROUPS=DataScientists,DataEngineers (no spaces between commas)
54
54
  ```
55
55
 
56
56
  **Optional ENV Vars**
@@ -0,0 +1,14 @@
1
+ import time
2
+ import logging
3
+ from workbench.api import Meta
4
+
5
+ log = logging.getLogger("workbench")
6
+
7
+ # List all the models in AWS
8
+ meta = Meta()
9
+ models = meta.models()
10
+ log.info(f"Found {len(models)} models in AWS")
11
+ log.info(models)
12
+
13
+ # Test out the ml launcher disconnect
14
+ time.sleep(120)
@@ -51,14 +51,16 @@ def main():
51
51
  log.error("ML_PIPELINE_S3_PATH environment variable not set")
52
52
  sys.exit(1)
53
53
 
54
- # Extract script name for local file
54
+ # Construct filename for local download
55
55
  script_name = os.path.basename(ml_pipeline_s3_path)
56
56
  local_script_path = f"/tmp/{script_name}"
57
57
  try:
58
58
  # Download the ML pipeline script from S3
59
59
  download_ml_pipeline_from_s3(ml_pipeline_s3_path, local_script_path)
60
+
60
61
  # Execute the ML pipeline
61
62
  exit_code = run_ml_pipeline(local_script_path)
63
+
62
64
  # Clean up
63
65
  os.remove(local_script_path)
64
66
  sys.exit(exit_code)
@@ -40,6 +40,7 @@ class Model(ModelCore):
40
40
  mem_size: int = 2048,
41
41
  max_concurrency: int = 5,
42
42
  instance: str = "ml.t2.medium",
43
+ data_capture: bool = False,
43
44
  ) -> Endpoint:
44
45
  """Create an Endpoint from the Model.
45
46
 
@@ -50,6 +51,7 @@ class Model(ModelCore):
50
51
  mem_size (int): The memory size for the Endpoint in MB (default: 2048)
51
52
  max_concurrency (int): The maximum concurrency for the Endpoint (default: 5)
52
53
  instance (str): The instance type to use for Realtime(serverless=False) Endpoints (default: "ml.t2.medium")
54
+ data_capture (bool): Enable data capture for the Endpoint (default: False)
53
55
 
54
56
  Returns:
55
57
  Endpoint: The Endpoint created from the Model
@@ -73,6 +75,7 @@ class Model(ModelCore):
73
75
  model_to_endpoint.transform(
74
76
  mem_size=mem_size,
75
77
  max_concurrency=max_concurrency,
78
+ data_capture=data_capture,
76
79
  )
77
80
 
78
81
  # Set the Endpoint Owner and Return the Endpoint
@@ -972,12 +972,23 @@ class EndpointCore(Artifact):
972
972
  cls.log.info(f"Deleting Monitoring Schedule {schedule['MonitoringScheduleName']}...")
973
973
  cls.sm_client.delete_monitoring_schedule(MonitoringScheduleName=schedule["MonitoringScheduleName"])
974
974
 
975
- # Recursively delete all endpoint S3 artifacts (inference, data capture, monitoring, etc)
975
+ # Recursively delete all endpoint S3 artifacts (inference, etc)
976
+ # Note: We do not want to delete the data_capture/ files since these
977
+ # might be used for collection and data drift analysis
976
978
  base_endpoint_path = f"{cls.endpoints_s3_path}/{endpoint_name}"
977
- s3_objects = wr.s3.list_objects(base_endpoint_path, boto3_session=cls.boto3_session)
978
- cls.log.info(f"Deleting S3 Objects at {base_endpoint_path}...")
979
- cls.log.info(f"{s3_objects}")
980
- wr.s3.delete_objects(s3_objects, boto3_session=cls.boto3_session)
979
+ all_s3_objects = wr.s3.list_objects(base_endpoint_path, boto3_session=cls.boto3_session)
980
+
981
+ # Filter out objects that contain 'data_capture/' in their path
982
+ s3_objects_to_delete = [obj for obj in all_s3_objects if "/data_capture/" not in obj]
983
+ cls.log.info(f"Found {len(all_s3_objects)} total objects at {base_endpoint_path}")
984
+ cls.log.info(f"Filtering out data_capture files, will delete {len(s3_objects_to_delete)} objects...")
985
+ cls.log.info(f"Objects to delete: {s3_objects_to_delete}")
986
+
987
+ if s3_objects_to_delete:
988
+ wr.s3.delete_objects(s3_objects_to_delete, boto3_session=cls.boto3_session)
989
+ cls.log.info(f"Successfully deleted {len(s3_objects_to_delete)} objects")
990
+ else:
991
+ cls.log.info("No objects to delete (only data_capture files found)")
981
992
 
982
993
  # Delete any dataframes that were stored in the Dataframe Cache
983
994
  cls.log.info("Deleting Dataframe Cache...")
@@ -186,11 +186,11 @@ class MonitorCore:
186
186
 
187
187
  # Log the data capture operation
188
188
  self.log.important(f"Enabling Data Capture for {self.endpoint_name} --> {self.data_capture_path}")
189
- self.log.important("This normally redeploys the endpoint...")
189
+ self.log.important("This will redeploy the endpoint...")
190
190
 
191
191
  # Create and apply the data capture configuration
192
192
  data_capture_config = DataCaptureConfig(
193
- enable_capture=True, # Required parameter
193
+ enable_capture=True,
194
194
  sampling_percentage=capture_percentage,
195
195
  destination_s3_uri=self.data_capture_path,
196
196
  )