ob-metaflow-extensions 1.3.1__tar.gz → 1.3.2__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 ob-metaflow-extensions might be problematic. Click here for more details.

Files changed (136) hide show
  1. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/PKG-INFO +1 -1
  2. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/_state_machine.py +7 -1
  3. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/capsule.py +9 -2
  4. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/config/typed_configs.py +5 -0
  5. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/config/unified_config.py +34 -0
  6. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/config_schema.yaml +15 -0
  7. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/deployer.py +4 -10
  8. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/ob_metaflow_extensions.egg-info/PKG-INFO +1 -1
  9. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/setup.py +1 -1
  10. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/MANIFEST.in +0 -0
  11. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/README.md +0 -0
  12. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/__init__.py +0 -0
  13. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/config/__init__.py +0 -0
  14. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/__init__.py +0 -0
  15. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/__init__.py +0 -0
  16. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/app_cli.py +0 -0
  17. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/app_deploy_decorator.py +0 -0
  18. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/app_utils.py +0 -0
  19. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/consts.py +0 -0
  20. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/__init__.py +0 -0
  21. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/_vendor/__init__.py +0 -0
  22. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/_vendor/spinner/__init__.py +0 -0
  23. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/_vendor/spinner/spinners.py +0 -0
  24. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/app_cli.py +0 -0
  25. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/app_config.py +0 -0
  26. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/artifacts.py +0 -0
  27. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/click_importer.py +0 -0
  28. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/code_package/__init__.py +0 -0
  29. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/code_package/code_packager.py +0 -0
  30. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/code_package/examples.py +0 -0
  31. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/config/__init__.py +0 -0
  32. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/config/cli_generator.py +0 -0
  33. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/config/config_utils.py +0 -0
  34. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/config/schema_export.py +0 -0
  35. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/config/typed_init_generator.py +0 -0
  36. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/dependencies.py +0 -0
  37. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/experimental/__init__.py +0 -0
  38. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/perimeters.py +0 -0
  39. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/secrets.py +0 -0
  40. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/utils.py +0 -0
  41. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/core/validations.py +0 -0
  42. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/deploy_decorator.py +0 -0
  43. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/apps/supervisord_utils.py +0 -0
  44. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/auth_server.py +0 -0
  45. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/aws/__init__.py +0 -0
  46. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/aws/assume_role.py +0 -0
  47. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/aws/assume_role_decorator.py +0 -0
  48. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/card_utilities/__init__.py +0 -0
  49. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/card_utilities/async_cards.py +0 -0
  50. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/card_utilities/extra_components.py +0 -0
  51. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/card_utilities/injector.py +0 -0
  52. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/checkpoint_datastores/__init__.py +0 -0
  53. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/checkpoint_datastores/coreweave.py +0 -0
  54. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/checkpoint_datastores/external_chckpt.py +0 -0
  55. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/checkpoint_datastores/nebius.py +0 -0
  56. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/fast_bakery/__init__.py +0 -0
  57. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/fast_bakery/baker.py +0 -0
  58. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/fast_bakery/docker_environment.py +0 -0
  59. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/fast_bakery/fast_bakery.py +0 -0
  60. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/fast_bakery/fast_bakery_cli.py +0 -0
  61. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/fast_bakery/fast_bakery_decorator.py +0 -0
  62. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/kubernetes/__init__.py +0 -0
  63. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/kubernetes/kubernetes_client.py +0 -0
  64. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/kubernetes/pod_killer.py +0 -0
  65. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/nim/card.py +0 -0
  66. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/nim/nim_decorator.py +0 -0
  67. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/nim/nim_manager.py +0 -0
  68. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/nim/utils.py +0 -0
  69. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/nvcf/__init__.py +0 -0
  70. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/nvcf/constants.py +0 -0
  71. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/nvcf/exceptions.py +0 -0
  72. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/nvcf/heartbeat_store.py +0 -0
  73. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/nvcf/nvcf.py +0 -0
  74. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/nvcf/nvcf_cli.py +0 -0
  75. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/nvcf/nvcf_decorator.py +0 -0
  76. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/nvcf/utils.py +0 -0
  77. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/nvct/__init__.py +0 -0
  78. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/nvct/exceptions.py +0 -0
  79. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/nvct/nvct.py +0 -0
  80. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/nvct/nvct_cli.py +0 -0
  81. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/nvct/nvct_decorator.py +0 -0
  82. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/nvct/nvct_runner.py +0 -0
  83. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/nvct/utils.py +0 -0
  84. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/ollama/__init__.py +0 -0
  85. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/ollama/constants.py +0 -0
  86. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/ollama/exceptions.py +0 -0
  87. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/ollama/ollama.py +0 -0
  88. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/ollama/status_card.py +0 -0
  89. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/perimeters.py +0 -0
  90. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/profilers/deco_injector.py +0 -0
  91. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/profilers/gpu_profile_decorator.py +0 -0
  92. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/profilers/simple_card_decorator.py +0 -0
  93. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/s3_proxy/__init__.py +0 -0
  94. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/s3_proxy/constants.py +0 -0
  95. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/s3_proxy/exceptions.py +0 -0
  96. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/s3_proxy/s3_proxy_api.py +0 -0
  97. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/s3_proxy/s3_proxy_decorator.py +0 -0
  98. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/s3_proxy/s3_proxy_manager.py +0 -0
  99. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/secrets/__init__.py +0 -0
  100. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/secrets/secrets.py +0 -0
  101. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/snowflake/__init__.py +0 -0
  102. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/snowflake/snowflake.py +0 -0
  103. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/snowpark/__init__.py +0 -0
  104. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark.py +0 -0
  105. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_cli.py +0 -0
  106. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_client.py +0 -0
  107. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_decorator.py +0 -0
  108. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_exceptions.py +0 -0
  109. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_job.py +0 -0
  110. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_service_spec.py +0 -0
  111. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/tensorboard/__init__.py +0 -0
  112. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/torchtune/__init__.py +0 -0
  113. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/vllm/__init__.py +0 -0
  114. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/vllm/constants.py +0 -0
  115. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/vllm/exceptions.py +0 -0
  116. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/vllm/status_card.py +0 -0
  117. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/plugins/vllm/vllm_manager.py +0 -0
  118. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/profilers/__init__.py +0 -0
  119. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/profilers/gpu.py +0 -0
  120. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/remote_config.py +0 -0
  121. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/toplevel/__init__.py +0 -0
  122. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/toplevel/global_aliases_for_metaflow_package.py +0 -0
  123. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/toplevel/ob_internal.py +0 -0
  124. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/toplevel/plugins/azure/__init__.py +0 -0
  125. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/toplevel/plugins/gcp/__init__.py +0 -0
  126. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/toplevel/plugins/kubernetes/__init__.py +0 -0
  127. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/toplevel/plugins/ollama/__init__.py +0 -0
  128. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/toplevel/plugins/snowflake/__init__.py +0 -0
  129. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/toplevel/plugins/torchtune/__init__.py +0 -0
  130. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/toplevel/plugins/vllm/__init__.py +0 -0
  131. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/metaflow_extensions/outerbounds/toplevel/s3_proxy.py +0 -0
  132. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/ob_metaflow_extensions.egg-info/SOURCES.txt +0 -0
  133. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/ob_metaflow_extensions.egg-info/dependency_links.txt +0 -0
  134. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/ob_metaflow_extensions.egg-info/requires.txt +0 -0
  135. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/ob_metaflow_extensions.egg-info/top_level.txt +0 -0
  136. {ob_metaflow_extensions-1.3.1 → ob_metaflow_extensions-1.3.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ob_metaflow_extensions
3
- Version: 1.3.1
3
+ Version: 1.3.2
4
4
  Summary: Outerbounds Platform Extensions for Metaflow
5
5
  Author: Outerbounds, Inc.
6
6
  License: Commercial
@@ -180,6 +180,7 @@ class WorkerInfoDict(TypedDict):
180
180
  pending: Dict[str, List[WorkerStatus]]
181
181
  running: Dict[str, List[WorkerStatus]]
182
182
  crashlooping: Dict[str, List[WorkerStatus]]
183
+ failed: Dict[str, List[WorkerStatus]]
183
184
 
184
185
 
185
186
  class CurrentWorkerInfo(TypedDict):
@@ -442,9 +443,11 @@ def _capsule_worker_semantic_status(
442
443
  xx[worker_version].append(w)
443
444
  return xx
444
445
 
446
+ # phases can be Pending, Running, Succeeded, Failed, Unknown, CrashLoopBackOff
445
447
  pending_workers = _make_version_dict(workers, "Pending")
446
448
  running_workers = _make_version_dict(workers, "Running")
447
449
  crashlooping_workers = _make_version_dict(workers, "CrashLoopBackOff")
450
+ failed_workers = _make_version_dict(workers, "Failed")
448
451
 
449
452
  # current_status (formulated basis):
450
453
  # - at least one pods are pending for `_end_state_capsule_version`
@@ -464,7 +467,8 @@ def _capsule_worker_semantic_status(
464
467
  "at_least_one_running": (
465
468
  count_for_version(running_workers) >= min(min_replicas, 1)
466
469
  ),
467
- "at_least_one_crashlooping": count_for_version(crashlooping_workers) > 0,
470
+ "at_least_one_crashlooping": count_for_version(crashlooping_workers) > 0
471
+ or count_for_version(failed_workers) > 0,
468
472
  "none_present": (
469
473
  count_for_version(running_workers) == 0
470
474
  and count_for_version(pending_workers) == 0
@@ -484,6 +488,7 @@ def _capsule_worker_semantic_status(
484
488
  "pending": count_for_version(pending_workers),
485
489
  "running": count_for_version(running_workers),
486
490
  "crashlooping": count_for_version(crashlooping_workers),
491
+ "failed": count_for_version(failed_workers),
487
492
  },
488
493
  }
489
494
 
@@ -491,6 +496,7 @@ def _capsule_worker_semantic_status(
491
496
  "pending": pending_workers,
492
497
  "running": running_workers,
493
498
  "crashlooping": crashlooping_workers,
499
+ "failed": failed_workers,
494
500
  }
495
501
 
496
502
  return {
@@ -255,6 +255,12 @@ class CapsuleInput:
255
255
  replicas.get("min"),
256
256
  replicas.get("max"),
257
257
  )
258
+ rpm = replicas.get("scaling_policy", {}).get("rpm", None)
259
+ autoscaling_config = {}
260
+ if rpm:
261
+ autoscaling_config = {
262
+ "requestRateBasedAutoscalingConfig": {"targetRequestsPerMinute": rpm}
263
+ }
258
264
  if fixed is not None:
259
265
  _min, _max = fixed, fixed
260
266
  gpu_resource = app_config.get_state("resources").get("gpu")
@@ -296,6 +302,7 @@ class CapsuleInput:
296
302
  "autoscalingConfig": {
297
303
  "minReplicas": _min,
298
304
  "maxReplicas": _max,
305
+ **autoscaling_config,
299
306
  },
300
307
  **_scheduling_config,
301
308
  "containerStartupConfig": {
@@ -713,7 +720,7 @@ class CapsuleDeployer:
713
720
  workers_status: List[WorkerStatus],
714
721
  ):
715
722
  for worker in workers_status:
716
- if worker["phase"] == "CrashLoopBackOff":
723
+ if worker["phase"] == "CrashLoopBackOff" or worker["phase"] == "Failed":
717
724
  return worker["workerId"]
718
725
  return None
719
726
 
@@ -851,7 +858,7 @@ class CapsuleDeployer:
851
858
  workers_state_machine.save_debug_info(self._debug_dir)
852
859
  if i % 3 == 0: # Every 3 seconds report the status
853
860
  logger(
854
- f"[debug] 💊 {self.capsule_type} {self.identifier} deployment status: {state_machine.current_status} | worker states: {workers_state_machine.current_status}"
861
+ f"[debug] 💊 {self.capsule_type} {self.identifier} deployment status: {state_machine.current_status} | worker states: {workers_state_machine.current_status} | capsule_ready : {capsule_ready} | further_check_worker_readiness {further_check_worker_readiness}"
855
862
  )
856
863
 
857
864
  # We will only check ready_to_serve_traffic under the following conditions:
@@ -51,6 +51,11 @@ class ReplicaConfigDict(TypedDict, total=False):
51
51
  fixed: Optional[int]
52
52
  min: Optional[int]
53
53
  max: Optional[int]
54
+ scaling_policy: Optional["ScalingPolicyConfigDict"]
55
+
56
+
57
+ class ScalingPolicyConfigDict(TypedDict, total=False):
58
+ rpm: Optional[int]
54
59
 
55
60
 
56
61
  class DependencyConfigDict(TypedDict, total=False):
@@ -301,6 +301,29 @@ class AuthConfig(metaclass=ConfigMeta):
301
301
  )
302
302
 
303
303
 
304
+ class ScalingPolicyConfig(metaclass=ConfigMeta):
305
+ """
306
+ Policies for autoscaling replicas. Available policies:
307
+ - Request based Autoscaling (rpm)
308
+ """
309
+
310
+ # TODO Change the defaulting if we have more autoscaling policies.
311
+ rpm = ConfigField(
312
+ field_type=int,
313
+ # TODO: Add a little more to the docstring where we explain the behavior.
314
+ cli_meta=CLIOption(
315
+ name="scaling_rpm",
316
+ cli_option_str="--scaling-rpm",
317
+ help=(
318
+ "Scale up replicas when the requests per minute crosses this threshold. "
319
+ "If nothing is provided and the replicas.max and replicas.min is set then "
320
+ "the default rpm would be 60."
321
+ ),
322
+ ),
323
+ default=60,
324
+ )
325
+
326
+
304
327
  class ReplicaConfig(metaclass=ConfigMeta):
305
328
  """Replica configuration."""
306
329
 
@@ -333,6 +356,16 @@ class ReplicaConfig(metaclass=ConfigMeta):
333
356
  example=10,
334
357
  )
335
358
 
359
+ scaling_policy = ConfigField(
360
+ cli_meta=None,
361
+ field_type=ScalingPolicyConfig,
362
+ help=(
363
+ "Scaling policy defines the the metric based on which the replicas will horizontally scale. "
364
+ "If min and max replicas are set and are not the same, then a scaling policy will be applied. "
365
+ "Default scaling policies can be 60 rpm (ie 1 rps). "
366
+ ),
367
+ )
368
+
336
369
  @staticmethod
337
370
  def defaults(replica_config: "ReplicaConfig"):
338
371
  if all(
@@ -346,6 +379,7 @@ class ReplicaConfig(metaclass=ConfigMeta):
346
379
  replica_config.fixed = 1
347
380
  elif replica_config.min is not None and replica_config.max is None:
348
381
  replica_config.max = replica_config.min
382
+
349
383
  return
350
384
 
351
385
  @staticmethod
@@ -161,6 +161,21 @@ properties:
161
161
  type: integer
162
162
  example: 10
163
163
  mutation_behavior: union
164
+ scaling_policy:
165
+ title: ScalingPolicyConfig
166
+ description: |-
167
+ Policies for autoscaling replicas. Available policies:
168
+ - Request based Autoscaling (rpm)
169
+ type: object
170
+ required: []
171
+ properties:
172
+ rpm:
173
+ description: |-
174
+ Scale up replicas when the requests per minute crosses this threshold. If nothing is provided and the replicas.max and replicas.min is set then the default rpm would be 60.
175
+ type: integer
176
+ default: 60
177
+ mutation_behavior: union
178
+ mutation_behavior: union
164
179
  mutation_behavior: union
165
180
  dependencies:
166
181
  title: DependencyConfig
@@ -151,7 +151,6 @@ class AppDeployer(TypedCoreConfig):
151
151
  final_status["id"],
152
152
  final_status["auth_type"],
153
153
  final_status["public_url"],
154
- final_status["available_replicas"],
155
154
  final_status["name"],
156
155
  final_status["deployed_version"],
157
156
  final_status["deployed_at"],
@@ -164,7 +163,6 @@ class DeployedApp:
164
163
  _id: str,
165
164
  capsule_type: str,
166
165
  public_url: str,
167
- available_replicas: int,
168
166
  name: str,
169
167
  deployed_version: str,
170
168
  deployed_at: str,
@@ -172,7 +170,6 @@ class DeployedApp:
172
170
  self._id = _id
173
171
  self._capsule_type = capsule_type
174
172
  self._public_url = public_url
175
- self._available_replicas = available_replicas
176
173
  self._name = name
177
174
  self._deployed_version = deployed_version
178
175
  self._deployed_at = deployed_at
@@ -208,6 +205,10 @@ class DeployedApp:
208
205
  capsule = capsule_api.get(self._id)
209
206
  return capsule
210
207
 
208
+ def replicas(self):
209
+ capsule_api = self._get_capsule_api()
210
+ return capsule_api.get_workers(self._id)
211
+
211
212
  def scale_to_zero(self):
212
213
  """
213
214
  Scales the DeployedApp to 0 replicas.
@@ -243,10 +244,6 @@ class DeployedApp:
243
244
  def public_url(self) -> str:
244
245
  return self._public_url
245
246
 
246
- @property
247
- def available_replicas(self) -> int:
248
- return self._available_replicas
249
-
250
247
  @property
251
248
  def name(self) -> str:
252
249
  return self._name
@@ -260,7 +257,6 @@ class DeployedApp:
260
257
  "id": self._id,
261
258
  "auth_style": self.auth_style, # TODO : Fix naming here.
262
259
  "public_url": self._public_url,
263
- "available_replicas": self._available_replicas,
264
260
  "name": self._name,
265
261
  "deployed_version": self._deployed_version,
266
262
  "deployed_at": self._deployed_at,
@@ -272,7 +268,6 @@ class DeployedApp:
272
268
  _id=data["id"],
273
269
  capsule_type=data["capsule_type"],
274
270
  public_url=data["public_url"],
275
- available_replicas=data["available_replicas"],
276
271
  name=data["name"],
277
272
  deployed_version=data["deployed_version"],
278
273
  deployed_at=data["deployed_at"],
@@ -287,7 +282,6 @@ class DeployedApp:
287
282
  f"DeployedApp(id='{self._id}', "
288
283
  f"name='{self._name}', "
289
284
  f"public_url='{self._public_url}', "
290
- f"available_replicas={self._available_replicas}, "
291
285
  f"deployed_version='{self._deployed_version}')"
292
286
  )
293
287
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ob-metaflow-extensions
3
- Version: 1.3.1
3
+ Version: 1.3.2
4
4
  Summary: Outerbounds Platform Extensions for Metaflow
5
5
  Author: Outerbounds, Inc.
6
6
  License: Commercial
@@ -2,7 +2,7 @@ from setuptools import setup, find_namespace_packages
2
2
  from pathlib import Path
3
3
 
4
4
 
5
- version = "1.3.1"
5
+ version = "1.3.2"
6
6
  this_directory = Path(__file__).parent
7
7
  long_description = (this_directory / "README.md").read_text()
8
8