ob-metaflow-extensions 1.4.14rc0__py2.py3-none-any.whl → 1.4.16__py2.py3-none-any.whl
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.
- metaflow_extensions/outerbounds/plugins/apps/app_deploy_decorator.py +1 -0
- metaflow_extensions/outerbounds/plugins/apps/core/__init__.py +1 -1
- metaflow_extensions/outerbounds/plugins/apps/core/deployer.py +16 -54
- metaflow_extensions/outerbounds/toplevel/global_aliases_for_metaflow_package.py +1 -1
- metaflow_extensions/outerbounds/toplevel/ob_internal.py +1 -1
- {ob_metaflow_extensions-1.4.14rc0.dist-info → ob_metaflow_extensions-1.4.16.dist-info}/METADATA +2 -2
- {ob_metaflow_extensions-1.4.14rc0.dist-info → ob_metaflow_extensions-1.4.16.dist-info}/RECORD +9 -9
- {ob_metaflow_extensions-1.4.14rc0.dist-info → ob_metaflow_extensions-1.4.16.dist-info}/WHEEL +0 -0
- {ob_metaflow_extensions-1.4.14rc0.dist-info → ob_metaflow_extensions-1.4.16.dist-info}/top_level.txt +0 -0
|
@@ -3,8 +3,8 @@ from .perimeters import PerimeterExtractor
|
|
|
3
3
|
from .capsule import CapsuleApi
|
|
4
4
|
import json
|
|
5
5
|
from ._state_machine import DEPLOYMENT_READY_CONDITIONS, LogLine
|
|
6
|
-
from .app_config import AppConfig, AppConfigError
|
|
7
|
-
from .capsule import CapsuleDeployer, list_and_filter_capsules
|
|
6
|
+
from .app_config import AppConfig, AppConfigError
|
|
7
|
+
from .capsule import CapsuleDeployer, list_and_filter_capsules
|
|
8
8
|
from functools import partial
|
|
9
9
|
import sys
|
|
10
10
|
import uuid
|
|
@@ -37,16 +37,6 @@ class AppDeployer(TypedCoreConfig):
|
|
|
37
37
|
self._app_config = AppConfig(self._config)
|
|
38
38
|
return self._app_config
|
|
39
39
|
|
|
40
|
-
def _set_perimenter_and_api_server(self):
|
|
41
|
-
if self._state["perimeter"] is None:
|
|
42
|
-
perimeter, api_server = PerimeterExtractor.during_metaflow_execution()
|
|
43
|
-
if perimeter is None or api_server is None:
|
|
44
|
-
raise RuntimeError(
|
|
45
|
-
"Perimeter not found in metaflow config or environment variables"
|
|
46
|
-
)
|
|
47
|
-
self._state["perimeter"] = perimeter
|
|
48
|
-
self._state["api_url"] = api_server
|
|
49
|
-
|
|
50
40
|
# Things that need to be set before deploy
|
|
51
41
|
@classmethod
|
|
52
42
|
def _set_state(
|
|
@@ -57,6 +47,7 @@ class AppDeployer(TypedCoreConfig):
|
|
|
57
47
|
code_package_key: str = None,
|
|
58
48
|
name_prefix: str = None,
|
|
59
49
|
image: str = None,
|
|
50
|
+
max_entropy: int = 4,
|
|
60
51
|
default_tags: List[Dict[str, str]] = None,
|
|
61
52
|
project: str = None,
|
|
62
53
|
branch: str = None,
|
|
@@ -67,10 +58,15 @@ class AppDeployer(TypedCoreConfig):
|
|
|
67
58
|
cls._state["code_package_key"] = code_package_key
|
|
68
59
|
cls._state["name_prefix"] = name_prefix
|
|
69
60
|
cls._state["image"] = image
|
|
61
|
+
cls._state["max_entropy"] = max_entropy
|
|
70
62
|
cls._state["default_tags"] = default_tags
|
|
71
63
|
cls._state["project"] = project
|
|
72
64
|
cls._state["branch"] = branch
|
|
73
65
|
|
|
66
|
+
assert (
|
|
67
|
+
max_entropy > 0
|
|
68
|
+
), "max_entropy must be greater than 0. Since AppDeployer's deploy fn can be called many time inside a step itself."
|
|
69
|
+
|
|
74
70
|
def deploy(
|
|
75
71
|
self,
|
|
76
72
|
readiness_condition=DEPLOYMENT_READY_CONDITIONS.ATLEAST_ONE_RUNNING,
|
|
@@ -82,7 +78,13 @@ class AppDeployer(TypedCoreConfig):
|
|
|
82
78
|
**kwargs,
|
|
83
79
|
) -> "DeployedApp":
|
|
84
80
|
|
|
85
|
-
|
|
81
|
+
# Name setting from top level if none is set in the code
|
|
82
|
+
if self._deploy_config._core_config.name is None:
|
|
83
|
+
name = self._state[
|
|
84
|
+
"name_prefix"
|
|
85
|
+
] # for now the name-prefix cannot be very large.
|
|
86
|
+
entropy = uuid.uuid4().hex[: self._state["max_entropy"]]
|
|
87
|
+
self._deploy_config._core_config.name = f"{name}-{entropy}"
|
|
86
88
|
|
|
87
89
|
if len(self._state["default_tags"]) > 0:
|
|
88
90
|
self._deploy_config._core_config.tags = (
|
|
@@ -172,41 +174,10 @@ class DeployedApp:
|
|
|
172
174
|
self._deployed_version = deployed_version
|
|
173
175
|
self._deployed_at = deployed_at
|
|
174
176
|
|
|
175
|
-
|
|
176
|
-
def _get_capsule_api(cls) -> CapsuleApi:
|
|
177
|
+
def _get_capsule_api(self) -> CapsuleApi:
|
|
177
178
|
perimeter, api_server = PerimeterExtractor.during_metaflow_execution()
|
|
178
179
|
return CapsuleApi(api_server, perimeter)
|
|
179
180
|
|
|
180
|
-
@classmethod
|
|
181
|
-
def from_capsule_id(cls, capsule_id: str) -> "DeployedApp":
|
|
182
|
-
capsule_api = cls._get_capsule_api()
|
|
183
|
-
capsule = capsule_api.get(capsule_id)
|
|
184
|
-
capsule_type = (
|
|
185
|
-
capsule.get("spec", {}).get("authConfig", {}).get("authType", None)
|
|
186
|
-
)
|
|
187
|
-
public_url = (
|
|
188
|
-
capsule.get("status", {}).get("accessInfo", {}).get("outOfClusterURL", None)
|
|
189
|
-
)
|
|
190
|
-
name = capsule.get("spec", {}).get(
|
|
191
|
-
"displayName",
|
|
192
|
-
)
|
|
193
|
-
deployed_version = capsule.get(
|
|
194
|
-
"version",
|
|
195
|
-
)
|
|
196
|
-
deployed_at = capsule.get("metadata", {}).get(
|
|
197
|
-
"createdAt",
|
|
198
|
-
)
|
|
199
|
-
if any(i is None for i in [capsule_type, public_url, name]):
|
|
200
|
-
raise ValueError(f"Invalid capsule id: {capsule_id}")
|
|
201
|
-
return cls(
|
|
202
|
-
capsule_id,
|
|
203
|
-
capsule_type,
|
|
204
|
-
_format_url_string(public_url),
|
|
205
|
-
name,
|
|
206
|
-
deployed_version,
|
|
207
|
-
deployed_at,
|
|
208
|
-
)
|
|
209
|
-
|
|
210
181
|
def logs(self, previous=False) -> Dict[str, List[LogLine]]:
|
|
211
182
|
"""
|
|
212
183
|
Returns a dictionary of worker_id to logs.
|
|
@@ -314,15 +285,6 @@ class DeployedApp:
|
|
|
314
285
|
f"deployed_version='{self._deployed_version}')"
|
|
315
286
|
)
|
|
316
287
|
|
|
317
|
-
def auth(self):
|
|
318
|
-
if self.auth_style != AuthType.API:
|
|
319
|
-
raise ValueError(
|
|
320
|
-
"Only API auth style is supported for accessing auth headers"
|
|
321
|
-
)
|
|
322
|
-
from metaflow.metaflow_config import SERVICE_HEADERS
|
|
323
|
-
|
|
324
|
-
return SERVICE_HEADERS
|
|
325
|
-
|
|
326
288
|
|
|
327
289
|
class apps:
|
|
328
290
|
|
|
@@ -108,4 +108,4 @@ from ..plugins.snowflake import Snowflake
|
|
|
108
108
|
from ..plugins.checkpoint_datastores import nebius_checkpoints, coreweave_checkpoints
|
|
109
109
|
from ..plugins.aws import assume_role
|
|
110
110
|
from . import ob_internal
|
|
111
|
-
from .ob_internal import AppDeployer
|
|
111
|
+
from .ob_internal import AppDeployer
|
{ob_metaflow_extensions-1.4.14rc0.dist-info → ob_metaflow_extensions-1.4.16.dist-info}/METADATA
RENAMED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ob-metaflow-extensions
|
|
3
|
-
Version: 1.4.
|
|
3
|
+
Version: 1.4.16
|
|
4
4
|
Summary: Outerbounds Platform Extensions for Metaflow
|
|
5
5
|
Author: Outerbounds, Inc.
|
|
6
6
|
License: Commercial
|
|
7
7
|
Description-Content-Type: text/markdown
|
|
8
8
|
Requires-Dist: boto3
|
|
9
9
|
Requires-Dist: kubernetes
|
|
10
|
-
Requires-Dist: ob-metaflow (==2.18.
|
|
10
|
+
Requires-Dist: ob-metaflow (==2.18.7.2)
|
|
11
11
|
|
|
12
12
|
# Outerbounds platform package
|
|
13
13
|
|
{ob_metaflow_extensions-1.4.14rc0.dist-info → ob_metaflow_extensions-1.4.16.dist-info}/RECORD
RENAMED
|
@@ -6,12 +6,12 @@ metaflow_extensions/outerbounds/plugins/auth_server.py,sha256=_Q9_2EL0Xy77bCRphk
|
|
|
6
6
|
metaflow_extensions/outerbounds/plugins/perimeters.py,sha256=QXh3SFP7GQbS-RAIxUOPbhPzQ7KDFVxZkTdKqFKgXjI,2697
|
|
7
7
|
metaflow_extensions/outerbounds/plugins/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
8
|
metaflow_extensions/outerbounds/plugins/apps/app_cli.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
-
metaflow_extensions/outerbounds/plugins/apps/app_deploy_decorator.py,sha256=
|
|
9
|
+
metaflow_extensions/outerbounds/plugins/apps/app_deploy_decorator.py,sha256=WWFvyl0EDUbp_UwmWjXBqlLfPEZ-lq98NJ5F5skBDKU,4901
|
|
10
10
|
metaflow_extensions/outerbounds/plugins/apps/app_utils.py,sha256=sw9whU17lAzlD2K2kEDNjlk1Ib-2xE2UNhJkmzD8Qv8,8543
|
|
11
11
|
metaflow_extensions/outerbounds/plugins/apps/consts.py,sha256=iHsyqbUg9k-rgswCs1Jxf5QZIxR1V-peCDRjgr9kdBM,177
|
|
12
12
|
metaflow_extensions/outerbounds/plugins/apps/deploy_decorator.py,sha256=VkmiMdNYHhNdt-Qm9AVv7aE2LWFsIFEc16YcOYjwF6Q,8568
|
|
13
13
|
metaflow_extensions/outerbounds/plugins/apps/supervisord_utils.py,sha256=GQoN2gyPClcpR9cLldJmbCfqXnoAHxp8xUnY7vzaYtY,9026
|
|
14
|
-
metaflow_extensions/outerbounds/plugins/apps/core/__init__.py,sha256=
|
|
14
|
+
metaflow_extensions/outerbounds/plugins/apps/core/__init__.py,sha256=c6uCgKlgEkTmM9BVdAO-m3vZvUpK2KW_AZZ2236now4,237
|
|
15
15
|
metaflow_extensions/outerbounds/plugins/apps/core/_state_machine.py,sha256=al907t2C86BPf4V1V03PLTJRJMOc8gdl1CxLLbklnDU,20281
|
|
16
16
|
metaflow_extensions/outerbounds/plugins/apps/core/app_cli.py,sha256=rD7oimnkEm___K2Ttiwe12B-Xzqi76tk4_HyFQArBQs,42736
|
|
17
17
|
metaflow_extensions/outerbounds/plugins/apps/core/app_config.py,sha256=PHt-HdNfTHIuhY-eB5vkRMp1RKQNWJ4DKdgZWyYgUuc,4167
|
|
@@ -20,7 +20,7 @@ metaflow_extensions/outerbounds/plugins/apps/core/capsule.py,sha256=sIlnmBZYf38S
|
|
|
20
20
|
metaflow_extensions/outerbounds/plugins/apps/core/click_importer.py,sha256=kgoPQmK_-8PSSTc3QMSaynCLQ5VWTkKFOC69FPURyXA,998
|
|
21
21
|
metaflow_extensions/outerbounds/plugins/apps/core/config_schema.yaml,sha256=zLZiDpg1OvZQyZmx2Y4j38B6f206eamOS2zH0dZmCcg,9955
|
|
22
22
|
metaflow_extensions/outerbounds/plugins/apps/core/dependencies.py,sha256=JlWT9f27yzZeJPlqTQk134WDfQgOdyxC5iaw3pLlhqY,4006
|
|
23
|
-
metaflow_extensions/outerbounds/plugins/apps/core/deployer.py,sha256=
|
|
23
|
+
metaflow_extensions/outerbounds/plugins/apps/core/deployer.py,sha256=dNKlDu6n8SufEd5NKmsErl1RYhQXuEe_DgtA0mk7awg,9472
|
|
24
24
|
metaflow_extensions/outerbounds/plugins/apps/core/perimeters.py,sha256=ETlqTkHDvVaWusrbNncFf7pcGJarj0r-5qodC4gZWQM,3068
|
|
25
25
|
metaflow_extensions/outerbounds/plugins/apps/core/secrets.py,sha256=sgDiAmpSC8Y5xjlaOEp79F6m0S3x4RONf_vJ5PUAfu8,6127
|
|
26
26
|
metaflow_extensions/outerbounds/plugins/apps/core/utils.py,sha256=2M2zU8DhbAlJee8P0xKXINAku81PcUylS3sVCSb0TUs,7896
|
|
@@ -115,8 +115,8 @@ metaflow_extensions/outerbounds/plugins/vllm/vllm_manager.py,sha256=sp_TX2SrImJG
|
|
|
115
115
|
metaflow_extensions/outerbounds/profilers/__init__.py,sha256=wa_jhnCBr82TBxoS0e8b6_6sLyZX0fdHicuGJZNTqKw,29
|
|
116
116
|
metaflow_extensions/outerbounds/profilers/gpu.py,sha256=3Er8uKQzfm_082uadg4yn_D4Y-iSCgzUfFmguYxZsz4,27485
|
|
117
117
|
metaflow_extensions/outerbounds/toplevel/__init__.py,sha256=qWUJSv_r5hXJ7jV_On4nEasKIfUCm6_UjkjXWA_A1Ts,90
|
|
118
|
-
metaflow_extensions/outerbounds/toplevel/global_aliases_for_metaflow_package.py,sha256=
|
|
119
|
-
metaflow_extensions/outerbounds/toplevel/ob_internal.py,sha256=
|
|
118
|
+
metaflow_extensions/outerbounds/toplevel/global_aliases_for_metaflow_package.py,sha256=StTRMBHjuxfxe-wQs8ikoAZc4xnhlceY0R4avaJ1Ps8,3823
|
|
119
|
+
metaflow_extensions/outerbounds/toplevel/ob_internal.py,sha256=DXCaAtLzlE-bFIiVWEv-iV2JKIWsoSGaUeH4jIQZ9gs,193
|
|
120
120
|
metaflow_extensions/outerbounds/toplevel/s3_proxy.py,sha256=zdqG7Z12cGuoYYCi2P4kqC3WsgL3xfdJGIb7ejecHH4,2862
|
|
121
121
|
metaflow_extensions/outerbounds/toplevel/plugins/azure/__init__.py,sha256=WUuhz2YQfI4fz7nIcipwwWq781eaoHEk7n4GAn1npDg,63
|
|
122
122
|
metaflow_extensions/outerbounds/toplevel/plugins/gcp/__init__.py,sha256=BbZiaH3uILlEZ6ntBLKeNyqn3If8nIXZFq_Apd7Dhco,70
|
|
@@ -126,7 +126,7 @@ metaflow_extensions/outerbounds/toplevel/plugins/optuna/__init__.py,sha256=6D1wL
|
|
|
126
126
|
metaflow_extensions/outerbounds/toplevel/plugins/snowflake/__init__.py,sha256=LptpH-ziXHrednMYUjIaosS1SXD3sOtF_9_eRqd8SJw,50
|
|
127
127
|
metaflow_extensions/outerbounds/toplevel/plugins/torchtune/__init__.py,sha256=uTVkdSk3xZ7hEKYfdlyVteWj5KeDwaM1hU9WT-_YKfI,50
|
|
128
128
|
metaflow_extensions/outerbounds/toplevel/plugins/vllm/__init__.py,sha256=ekcgD3KVydf-a0xMI60P4uy6ePkSEoFHiGnDq1JM940,45
|
|
129
|
-
ob_metaflow_extensions-1.4.
|
|
130
|
-
ob_metaflow_extensions-1.4.
|
|
131
|
-
ob_metaflow_extensions-1.4.
|
|
132
|
-
ob_metaflow_extensions-1.4.
|
|
129
|
+
ob_metaflow_extensions-1.4.16.dist-info/METADATA,sha256=viP1ayHyldSpcjOPmhQ7YUFmb5OdfSQZT7sTi_kTs6w,519
|
|
130
|
+
ob_metaflow_extensions-1.4.16.dist-info/WHEEL,sha256=bb2Ot9scclHKMOLDEHY6B2sicWOgugjFKaJsT7vwMQo,110
|
|
131
|
+
ob_metaflow_extensions-1.4.16.dist-info/top_level.txt,sha256=NwG0ukwjygtanDETyp_BUdtYtqIA_lOjzFFh1TsnxvI,20
|
|
132
|
+
ob_metaflow_extensions-1.4.16.dist-info/RECORD,,
|
{ob_metaflow_extensions-1.4.14rc0.dist-info → ob_metaflow_extensions-1.4.16.dist-info}/WHEEL
RENAMED
|
File without changes
|
{ob_metaflow_extensions-1.4.14rc0.dist-info → ob_metaflow_extensions-1.4.16.dist-info}/top_level.txt
RENAMED
|
File without changes
|