ob-metaflow-extensions 1.4.13__py2.py3-none-any.whl → 1.4.14rc0__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 +0 -1
- metaflow_extensions/outerbounds/plugins/apps/core/__init__.py +1 -1
- metaflow_extensions/outerbounds/plugins/apps/core/deployer.py +54 -16
- 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.13.dist-info → ob_metaflow_extensions-1.4.14rc0.dist-info}/METADATA +1 -1
- {ob_metaflow_extensions-1.4.13.dist-info → ob_metaflow_extensions-1.4.14rc0.dist-info}/RECORD +9 -9
- {ob_metaflow_extensions-1.4.13.dist-info → ob_metaflow_extensions-1.4.14rc0.dist-info}/WHEEL +0 -0
- {ob_metaflow_extensions-1.4.13.dist-info → ob_metaflow_extensions-1.4.14rc0.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, AuthType
|
|
7
|
+
from .capsule import CapsuleDeployer, list_and_filter_capsules, _format_url_string
|
|
8
8
|
from functools import partial
|
|
9
9
|
import sys
|
|
10
10
|
import uuid
|
|
@@ -37,6 +37,16 @@ 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
|
+
|
|
40
50
|
# Things that need to be set before deploy
|
|
41
51
|
@classmethod
|
|
42
52
|
def _set_state(
|
|
@@ -47,7 +57,6 @@ class AppDeployer(TypedCoreConfig):
|
|
|
47
57
|
code_package_key: str = None,
|
|
48
58
|
name_prefix: str = None,
|
|
49
59
|
image: str = None,
|
|
50
|
-
max_entropy: int = 4,
|
|
51
60
|
default_tags: List[Dict[str, str]] = None,
|
|
52
61
|
project: str = None,
|
|
53
62
|
branch: str = None,
|
|
@@ -58,15 +67,10 @@ class AppDeployer(TypedCoreConfig):
|
|
|
58
67
|
cls._state["code_package_key"] = code_package_key
|
|
59
68
|
cls._state["name_prefix"] = name_prefix
|
|
60
69
|
cls._state["image"] = image
|
|
61
|
-
cls._state["max_entropy"] = max_entropy
|
|
62
70
|
cls._state["default_tags"] = default_tags
|
|
63
71
|
cls._state["project"] = project
|
|
64
72
|
cls._state["branch"] = branch
|
|
65
73
|
|
|
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
|
-
|
|
70
74
|
def deploy(
|
|
71
75
|
self,
|
|
72
76
|
readiness_condition=DEPLOYMENT_READY_CONDITIONS.ATLEAST_ONE_RUNNING,
|
|
@@ -78,13 +82,7 @@ class AppDeployer(TypedCoreConfig):
|
|
|
78
82
|
**kwargs,
|
|
79
83
|
) -> "DeployedApp":
|
|
80
84
|
|
|
81
|
-
|
|
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}"
|
|
85
|
+
self._set_perimenter_and_api_server()
|
|
88
86
|
|
|
89
87
|
if len(self._state["default_tags"]) > 0:
|
|
90
88
|
self._deploy_config._core_config.tags = (
|
|
@@ -174,10 +172,41 @@ class DeployedApp:
|
|
|
174
172
|
self._deployed_version = deployed_version
|
|
175
173
|
self._deployed_at = deployed_at
|
|
176
174
|
|
|
177
|
-
|
|
175
|
+
@classmethod
|
|
176
|
+
def _get_capsule_api(cls) -> CapsuleApi:
|
|
178
177
|
perimeter, api_server = PerimeterExtractor.during_metaflow_execution()
|
|
179
178
|
return CapsuleApi(api_server, perimeter)
|
|
180
179
|
|
|
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
|
+
|
|
181
210
|
def logs(self, previous=False) -> Dict[str, List[LogLine]]:
|
|
182
211
|
"""
|
|
183
212
|
Returns a dictionary of worker_id to logs.
|
|
@@ -285,6 +314,15 @@ class DeployedApp:
|
|
|
285
314
|
f"deployed_version='{self._deployed_version}')"
|
|
286
315
|
)
|
|
287
316
|
|
|
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
|
+
|
|
288
326
|
|
|
289
327
|
class apps:
|
|
290
328
|
|
|
@@ -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, DeployedApp
|
{ob_metaflow_extensions-1.4.13.dist-info → ob_metaflow_extensions-1.4.14rc0.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=Skk4UjTw3h355JYOnsKr86U4oqpn9qchM1I9uG5MeSA,4859
|
|
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=bfvH1wZpSZq4-Lu25U9MlsZmwqkP8_MH7QLxKwRfXXU,250
|
|
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=5WBV-VXaqWymhteLsq13uwWzoTsMc-R1v55Ap_yhypk,10660
|
|
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=mWJkV_uHFJoKYfkcPRBocXBMVF-wW1rf_QqNHLvIH30,3836
|
|
119
|
+
metaflow_extensions/outerbounds/toplevel/ob_internal.py,sha256=jYuv_RV3zerO8oVSDqyW-IDT--xTV4GLPirZ6vOiv80,206
|
|
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.14rc0.dist-info/METADATA,sha256=uK2AjSt-xmcbORtNU9FBkyiNr5aDoB7Mfgr_CQuqRUA,522
|
|
130
|
+
ob_metaflow_extensions-1.4.14rc0.dist-info/WHEEL,sha256=bb2Ot9scclHKMOLDEHY6B2sicWOgugjFKaJsT7vwMQo,110
|
|
131
|
+
ob_metaflow_extensions-1.4.14rc0.dist-info/top_level.txt,sha256=NwG0ukwjygtanDETyp_BUdtYtqIA_lOjzFFh1TsnxvI,20
|
|
132
|
+
ob_metaflow_extensions-1.4.14rc0.dist-info/RECORD,,
|
{ob_metaflow_extensions-1.4.13.dist-info → ob_metaflow_extensions-1.4.14rc0.dist-info}/WHEEL
RENAMED
|
File without changes
|
{ob_metaflow_extensions-1.4.13.dist-info → ob_metaflow_extensions-1.4.14rc0.dist-info}/top_level.txt
RENAMED
|
File without changes
|