ob-metaflow-extensions 1.1.171rc1__py2.py3-none-any.whl → 1.4.39__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/__init__.py +6 -3
- metaflow_extensions/outerbounds/plugins/apps/app_cli.py +0 -29
- metaflow_extensions/outerbounds/plugins/apps/app_deploy_decorator.py +146 -0
- metaflow_extensions/outerbounds/plugins/apps/core/__init__.py +10 -0
- metaflow_extensions/outerbounds/plugins/apps/core/_state_machine.py +506 -0
- metaflow_extensions/outerbounds/plugins/apps/core/_vendor/__init__.py +0 -0
- metaflow_extensions/outerbounds/plugins/apps/core/_vendor/spinner/__init__.py +4 -0
- metaflow_extensions/outerbounds/plugins/apps/core/_vendor/spinner/spinners.py +478 -0
- metaflow_extensions/outerbounds/plugins/apps/core/app_cli.py +1200 -0
- metaflow_extensions/outerbounds/plugins/apps/core/app_config.py +146 -0
- metaflow_extensions/outerbounds/plugins/apps/core/artifacts.py +0 -0
- metaflow_extensions/outerbounds/plugins/apps/core/capsule.py +958 -0
- metaflow_extensions/outerbounds/plugins/apps/core/click_importer.py +24 -0
- metaflow_extensions/outerbounds/plugins/apps/core/code_package/__init__.py +3 -0
- metaflow_extensions/outerbounds/plugins/apps/core/code_package/code_packager.py +618 -0
- metaflow_extensions/outerbounds/plugins/apps/core/code_package/examples.py +125 -0
- metaflow_extensions/outerbounds/plugins/apps/core/config/__init__.py +12 -0
- metaflow_extensions/outerbounds/plugins/apps/core/config/cli_generator.py +161 -0
- metaflow_extensions/outerbounds/plugins/apps/core/config/config_utils.py +868 -0
- metaflow_extensions/outerbounds/plugins/apps/core/config/schema_export.py +288 -0
- metaflow_extensions/outerbounds/plugins/apps/core/config/typed_configs.py +139 -0
- metaflow_extensions/outerbounds/plugins/apps/core/config/typed_init_generator.py +398 -0
- metaflow_extensions/outerbounds/plugins/apps/core/config/unified_config.py +1088 -0
- metaflow_extensions/outerbounds/plugins/apps/core/config_schema.yaml +337 -0
- metaflow_extensions/outerbounds/plugins/apps/core/dependencies.py +115 -0
- metaflow_extensions/outerbounds/plugins/apps/core/deployer.py +303 -0
- metaflow_extensions/outerbounds/plugins/apps/core/experimental/__init__.py +89 -0
- metaflow_extensions/outerbounds/plugins/apps/core/perimeters.py +87 -0
- metaflow_extensions/outerbounds/plugins/apps/core/secrets.py +164 -0
- metaflow_extensions/outerbounds/plugins/apps/core/utils.py +233 -0
- metaflow_extensions/outerbounds/plugins/apps/core/validations.py +17 -0
- metaflow_extensions/outerbounds/plugins/aws/assume_role_decorator.py +68 -15
- metaflow_extensions/outerbounds/plugins/checkpoint_datastores/coreweave.py +9 -77
- metaflow_extensions/outerbounds/plugins/checkpoint_datastores/external_chckpt.py +85 -0
- metaflow_extensions/outerbounds/plugins/checkpoint_datastores/nebius.py +7 -78
- metaflow_extensions/outerbounds/plugins/fast_bakery/docker_environment.py +6 -2
- metaflow_extensions/outerbounds/plugins/fast_bakery/fast_bakery.py +1 -0
- metaflow_extensions/outerbounds/plugins/nvct/nvct_decorator.py +8 -8
- metaflow_extensions/outerbounds/plugins/optuna/__init__.py +48 -0
- metaflow_extensions/outerbounds/plugins/profilers/simple_card_decorator.py +96 -0
- metaflow_extensions/outerbounds/plugins/s3_proxy/__init__.py +7 -0
- metaflow_extensions/outerbounds/plugins/s3_proxy/binary_caller.py +132 -0
- metaflow_extensions/outerbounds/plugins/s3_proxy/constants.py +11 -0
- metaflow_extensions/outerbounds/plugins/s3_proxy/exceptions.py +13 -0
- metaflow_extensions/outerbounds/plugins/s3_proxy/proxy_bootstrap.py +59 -0
- metaflow_extensions/outerbounds/plugins/s3_proxy/s3_proxy_api.py +93 -0
- metaflow_extensions/outerbounds/plugins/s3_proxy/s3_proxy_decorator.py +250 -0
- metaflow_extensions/outerbounds/plugins/s3_proxy/s3_proxy_manager.py +225 -0
- metaflow_extensions/outerbounds/plugins/snowflake/snowflake.py +37 -7
- metaflow_extensions/outerbounds/plugins/snowpark/snowpark.py +18 -8
- metaflow_extensions/outerbounds/plugins/snowpark/snowpark_cli.py +6 -0
- metaflow_extensions/outerbounds/plugins/snowpark/snowpark_client.py +45 -18
- metaflow_extensions/outerbounds/plugins/snowpark/snowpark_decorator.py +18 -9
- metaflow_extensions/outerbounds/plugins/snowpark/snowpark_job.py +10 -4
- metaflow_extensions/outerbounds/plugins/torchtune/__init__.py +4 -0
- metaflow_extensions/outerbounds/plugins/vllm/__init__.py +173 -95
- metaflow_extensions/outerbounds/plugins/vllm/status_card.py +9 -9
- metaflow_extensions/outerbounds/plugins/vllm/vllm_manager.py +159 -9
- metaflow_extensions/outerbounds/remote_config.py +8 -3
- metaflow_extensions/outerbounds/toplevel/global_aliases_for_metaflow_package.py +62 -1
- metaflow_extensions/outerbounds/toplevel/ob_internal.py +2 -0
- metaflow_extensions/outerbounds/toplevel/plugins/optuna/__init__.py +1 -0
- metaflow_extensions/outerbounds/toplevel/s3_proxy.py +88 -0
- {ob_metaflow_extensions-1.1.171rc1.dist-info → ob_metaflow_extensions-1.4.39.dist-info}/METADATA +2 -2
- {ob_metaflow_extensions-1.1.171rc1.dist-info → ob_metaflow_extensions-1.4.39.dist-info}/RECORD +67 -25
- {ob_metaflow_extensions-1.1.171rc1.dist-info → ob_metaflow_extensions-1.4.39.dist-info}/WHEEL +0 -0
- {ob_metaflow_extensions-1.1.171rc1.dist-info → ob_metaflow_extensions-1.4.39.dist-info}/top_level.txt +0 -0
|
@@ -4,10 +4,7 @@ import time
|
|
|
4
4
|
import socket
|
|
5
5
|
import sys
|
|
6
6
|
import os
|
|
7
|
-
import functools
|
|
8
|
-
import json
|
|
9
7
|
import requests
|
|
10
|
-
from enum import Enum
|
|
11
8
|
import threading
|
|
12
9
|
from datetime import datetime
|
|
13
10
|
|
|
@@ -20,7 +17,147 @@ class ProcessStatus:
|
|
|
20
17
|
SUCCESSFUL = "SUCCESSFUL"
|
|
21
18
|
|
|
22
19
|
|
|
23
|
-
class
|
|
20
|
+
class VLLMPyManager:
|
|
21
|
+
"""
|
|
22
|
+
A native vLLM engine manager that provides direct access to the vLLM LLM class.
|
|
23
|
+
This replaces the subprocess-based API server approach with direct Python API access.
|
|
24
|
+
|
|
25
|
+
Example usage:
|
|
26
|
+
from vllm.sampling_params import SamplingParams, GuidedDecodingParams
|
|
27
|
+
|
|
28
|
+
engine = current.vllm.engine
|
|
29
|
+
sampling_params = SamplingParams(temperature=0.7, max_tokens=150)
|
|
30
|
+
outputs = engine.generate(["Hello, world!"], sampling_params)
|
|
31
|
+
|
|
32
|
+
# Structured outputs
|
|
33
|
+
guided_params = GuidedDecodingParams(json=my_schema)
|
|
34
|
+
sampling_params = SamplingParams(guided_decoding=guided_params)
|
|
35
|
+
outputs = engine.generate(prompts, sampling_params)
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
def __init__(
|
|
39
|
+
self,
|
|
40
|
+
model,
|
|
41
|
+
debug=False,
|
|
42
|
+
**engine_args,
|
|
43
|
+
):
|
|
44
|
+
if isinstance(model, list):
|
|
45
|
+
if len(model) != 1:
|
|
46
|
+
raise ValueError(
|
|
47
|
+
f"vLLM native engine can only serve one model per instance. "
|
|
48
|
+
f"Got {len(model)} models: {model}. "
|
|
49
|
+
f"Please specify a single model or create multiple @vllm decorators."
|
|
50
|
+
)
|
|
51
|
+
self.model = model[0]
|
|
52
|
+
else:
|
|
53
|
+
self.model = model
|
|
54
|
+
|
|
55
|
+
self.debug = debug
|
|
56
|
+
self.engine_args = engine_args
|
|
57
|
+
self.engine = None
|
|
58
|
+
self.initialization_start = time.time()
|
|
59
|
+
|
|
60
|
+
if self.debug:
|
|
61
|
+
print(
|
|
62
|
+
f"[@vllm-native] Initializing native vLLM engine for model: {self.model}"
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
self._validate_vllm_installation()
|
|
66
|
+
self._initialize_engine()
|
|
67
|
+
|
|
68
|
+
total_init_time = time.time() - self.initialization_start
|
|
69
|
+
if self.debug:
|
|
70
|
+
print(
|
|
71
|
+
f"[@vllm-native] Native engine initialization completed in {total_init_time:.1f}s"
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
def _validate_vllm_installation(self):
|
|
75
|
+
"""Validate that vLLM is properly installed"""
|
|
76
|
+
try:
|
|
77
|
+
import vllm
|
|
78
|
+
|
|
79
|
+
if self.debug:
|
|
80
|
+
print(f"[@vllm-native] vLLM {vllm.__version__} is available")
|
|
81
|
+
except ImportError as e:
|
|
82
|
+
raise ImportError(
|
|
83
|
+
"vLLM not installed. Please add vLLM to your environment."
|
|
84
|
+
) from e
|
|
85
|
+
|
|
86
|
+
def _map_engine_args(self, engine_args):
|
|
87
|
+
"""
|
|
88
|
+
Map CLI-style engine_args to LLM constructor parameters.
|
|
89
|
+
Most parameters map directly from the API server CLI args to LLM constructor.
|
|
90
|
+
"""
|
|
91
|
+
llm_params = {}
|
|
92
|
+
|
|
93
|
+
# Direct mappings (parameter names are the same)
|
|
94
|
+
direct_mapping = [
|
|
95
|
+
"tensor_parallel_size",
|
|
96
|
+
"max_model_len",
|
|
97
|
+
"gpu_memory_utilization",
|
|
98
|
+
"swap_space",
|
|
99
|
+
"dtype",
|
|
100
|
+
"quantization",
|
|
101
|
+
"seed",
|
|
102
|
+
"trust_remote_code",
|
|
103
|
+
"revision",
|
|
104
|
+
"tokenizer_revision",
|
|
105
|
+
"enforce_eager",
|
|
106
|
+
"max_seq_len_to_capture",
|
|
107
|
+
"disable_custom_all_reduce",
|
|
108
|
+
]
|
|
109
|
+
|
|
110
|
+
for param in direct_mapping:
|
|
111
|
+
if param in engine_args:
|
|
112
|
+
llm_params[param] = engine_args[param]
|
|
113
|
+
|
|
114
|
+
# Handle special mappings if needed
|
|
115
|
+
# (Most/all vLLM CLI args map directly to LLM constructor args)
|
|
116
|
+
|
|
117
|
+
return llm_params
|
|
118
|
+
|
|
119
|
+
def _initialize_engine(self):
|
|
120
|
+
"""Initialize the native vLLM LLM engine"""
|
|
121
|
+
try:
|
|
122
|
+
from vllm import LLM
|
|
123
|
+
|
|
124
|
+
# Map engine args to LLM constructor parameters
|
|
125
|
+
llm_params = self._map_engine_args(self.engine_args)
|
|
126
|
+
|
|
127
|
+
if self.debug:
|
|
128
|
+
print(f"[@vllm] Initializing LLM with params: {llm_params}")
|
|
129
|
+
|
|
130
|
+
# Initialize the native vLLM engine
|
|
131
|
+
self.engine = LLM(model=self.model, **llm_params)
|
|
132
|
+
|
|
133
|
+
if self.debug:
|
|
134
|
+
print(f"[@vllm] LLM engine initialized successfully")
|
|
135
|
+
|
|
136
|
+
except Exception as e:
|
|
137
|
+
error_msg = f"Failed to initialize vLLM engine: {str(e)}"
|
|
138
|
+
if self.debug:
|
|
139
|
+
print(f"[@vllm-native] ERROR: {error_msg}")
|
|
140
|
+
raise RuntimeError(error_msg) from e
|
|
141
|
+
|
|
142
|
+
def terminate_engine(self):
|
|
143
|
+
"""
|
|
144
|
+
Clean up the native engine.
|
|
145
|
+
The LLM class handles cleanup automatically when the object is destroyed.
|
|
146
|
+
"""
|
|
147
|
+
if self.debug:
|
|
148
|
+
print("[@vllm-] Cleaning up vLLM engine")
|
|
149
|
+
|
|
150
|
+
# The vLLM LLM class handles cleanup automatically
|
|
151
|
+
# We just need to clear our reference
|
|
152
|
+
if self.engine:
|
|
153
|
+
del self.engine
|
|
154
|
+
self.engine = None
|
|
155
|
+
|
|
156
|
+
if self.debug:
|
|
157
|
+
print("[@vllm] Engine cleanup completed")
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
class VLLMOpenAIManager:
|
|
24
161
|
"""
|
|
25
162
|
A process manager for vLLM runtimes.
|
|
26
163
|
Implements interface @vllm(model=..., ...) to provide a local backend.
|
|
@@ -55,6 +192,8 @@ class VLLMManager:
|
|
|
55
192
|
port=8000,
|
|
56
193
|
host="127.0.0.1",
|
|
57
194
|
stream_logs_to_card=False,
|
|
195
|
+
max_retries=60,
|
|
196
|
+
retry_alert_frequency=5,
|
|
58
197
|
**vllm_args,
|
|
59
198
|
):
|
|
60
199
|
# Validate that only a single model is provided
|
|
@@ -79,6 +218,8 @@ class VLLMManager:
|
|
|
79
218
|
self.status_card = status_card
|
|
80
219
|
self.initialization_start = time.time()
|
|
81
220
|
self.server_process = None
|
|
221
|
+
self.max_retries = max_retries
|
|
222
|
+
self.retry_alert_frequency = retry_alert_frequency
|
|
82
223
|
self.vllm_args = vllm_args
|
|
83
224
|
|
|
84
225
|
if backend != "local":
|
|
@@ -211,6 +352,13 @@ class VLLMManager:
|
|
|
211
352
|
f"[@vllm] Starting vLLM OpenAI-compatible server for model: {self.model}"
|
|
212
353
|
)
|
|
213
354
|
|
|
355
|
+
### NOTE: This is not the only way to start the vLLM server.
|
|
356
|
+
# https://docs.vllm.ai/en/v0.9.0/api/vllm/entrypoints/openai/api_server.html
|
|
357
|
+
|
|
358
|
+
# There are other APIs we should consider using in a future extension:
|
|
359
|
+
# https://docs.vllm.ai/en/stable/api/vllm/entrypoints/openai/run_batch.html#vllm.entrypoints.openai.run_batch
|
|
360
|
+
# https://docs.vllm.ai/en/v0.9.0/api/vllm/entrypoints/openai/serving_embedding.html
|
|
361
|
+
# MANY MORE!!! Wait for some feedback and we can add more.
|
|
214
362
|
cmd = [
|
|
215
363
|
sys.executable,
|
|
216
364
|
"-m",
|
|
@@ -226,6 +374,8 @@ class VLLMManager:
|
|
|
226
374
|
vllm_args_copy = self.vllm_args.copy()
|
|
227
375
|
if self.debug or self.stream_logs_to_card:
|
|
228
376
|
# Note: This is an undocumented argument for the vLLM OpenAI server entrypoint.
|
|
377
|
+
# It was useful for debugging the vLLM server startup,
|
|
378
|
+
# likely more confusion potential than its worth for end user.
|
|
229
379
|
vllm_args_copy.setdefault("uvicorn_log_level", "debug")
|
|
230
380
|
|
|
231
381
|
for key, value in vllm_args_copy.items():
|
|
@@ -281,16 +431,15 @@ class VLLMManager:
|
|
|
281
431
|
print(f"[@vllm] Started vLLM server process with PID {process.pid}")
|
|
282
432
|
|
|
283
433
|
retries = 0
|
|
284
|
-
max_retries = 240
|
|
285
434
|
while (
|
|
286
435
|
not self._is_port_open(self.host, self.port, timeout=2)
|
|
287
|
-
and retries < max_retries
|
|
436
|
+
and retries < self.max_retries
|
|
288
437
|
):
|
|
289
438
|
if retries == 0:
|
|
290
439
|
print("[@vllm] Waiting for server to be ready...")
|
|
291
|
-
elif retries %
|
|
440
|
+
elif retries % self.retry_alert_frequency == 0:
|
|
292
441
|
print(
|
|
293
|
-
f"[@vllm] Still waiting for server... ({retries}/{max_retries})"
|
|
442
|
+
f"[@vllm] Still waiting for server... ({retries}/{self.max_retries})"
|
|
294
443
|
)
|
|
295
444
|
|
|
296
445
|
returncode = process.poll()
|
|
@@ -322,7 +471,7 @@ class VLLMManager:
|
|
|
322
471
|
retries += 1
|
|
323
472
|
|
|
324
473
|
if not self._is_port_open(self.host, self.port, timeout=2):
|
|
325
|
-
error_details = f"vLLM server did not start listening on {self.host}:{self.port} after {max_retries*2}s"
|
|
474
|
+
error_details = f"vLLM server did not start listening on {self.host}:{self.port} after {self.max_retries*2}s"
|
|
326
475
|
self.processes[process.pid]["properties"][
|
|
327
476
|
"error_details"
|
|
328
477
|
] = error_details
|
|
@@ -342,6 +491,7 @@ class VLLMManager:
|
|
|
342
491
|
"Running", uptime_start=datetime.now(), model=self.model
|
|
343
492
|
)
|
|
344
493
|
self._log_event("success", "vLLM server is ready and listening")
|
|
494
|
+
print(f"[@vllm] Server ready!")
|
|
345
495
|
|
|
346
496
|
self._update_model_status(self.model, status="Ready")
|
|
347
497
|
|
|
@@ -11,6 +11,11 @@ from metaflow_extensions.outerbounds.plugins.perimeters import (
|
|
|
11
11
|
get_perimeter_config_url_if_set_in_ob_config,
|
|
12
12
|
)
|
|
13
13
|
|
|
14
|
+
|
|
15
|
+
class OuterboundsConfigException(MetaflowException):
|
|
16
|
+
_OB_CONFIG_EXCEPTION = True
|
|
17
|
+
|
|
18
|
+
|
|
14
19
|
OBP_REMOTE_CONFIG_KEY = "OBP_METAFLOW_CONFIG_URL"
|
|
15
20
|
HOSTNAME_KEY = "OBP_API_SERVER"
|
|
16
21
|
AUTH_KEY = "METAFLOW_SERVICE_AUTH_KEY"
|
|
@@ -31,7 +36,7 @@ def read_config_from_local() -> Optional[Path]:
|
|
|
31
36
|
|
|
32
37
|
# we should error because the user wants a specific config
|
|
33
38
|
if profile:
|
|
34
|
-
raise
|
|
39
|
+
raise OuterboundsConfigException(
|
|
35
40
|
f"Unable to locate METAFLOW_PROFILE {profile} in {config_path}"
|
|
36
41
|
)
|
|
37
42
|
|
|
@@ -55,7 +60,7 @@ def resolve_config_from_remote(remote_url: str, auth_token: str) -> Dict[str, st
|
|
|
55
60
|
data = response.json()
|
|
56
61
|
return data["config"]
|
|
57
62
|
except HTTPError:
|
|
58
|
-
raise
|
|
63
|
+
raise OuterboundsConfigException(
|
|
59
64
|
"Error fetching resolving configuration. Make sure you have run \
|
|
60
65
|
`outerbounds configure` with the correct value"
|
|
61
66
|
)
|
|
@@ -81,7 +86,7 @@ def init_config() -> Dict[str, str]:
|
|
|
81
86
|
try:
|
|
82
87
|
remote_config = json.loads(config_path.read_text())
|
|
83
88
|
except ValueError:
|
|
84
|
-
raise
|
|
89
|
+
raise OuterboundsConfigException(
|
|
85
90
|
"Error decoding your metaflow config. Please run the `outerbounds configure` \
|
|
86
91
|
command with the string provided in the Outerbounds dashboard"
|
|
87
92
|
)
|
|
@@ -5,6 +5,44 @@
|
|
|
5
5
|
__version__ = "v1"
|
|
6
6
|
__mf_extensions__ = "ob"
|
|
7
7
|
|
|
8
|
+
from metaflow_extensions.outerbounds.toplevel.s3_proxy import (
|
|
9
|
+
get_aws_client_with_s3_proxy,
|
|
10
|
+
get_S3_with_s3_proxy,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
_S3_PROXY_CONFIG = None
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def set_s3_proxy_config(config):
|
|
17
|
+
global _S3_PROXY_CONFIG
|
|
18
|
+
_S3_PROXY_CONFIG = config
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def clear_s3_proxy_config():
|
|
22
|
+
global _S3_PROXY_CONFIG
|
|
23
|
+
_S3_PROXY_CONFIG = None
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def get_s3_proxy_config():
|
|
27
|
+
global _S3_PROXY_CONFIG
|
|
28
|
+
if _S3_PROXY_CONFIG is None:
|
|
29
|
+
set_s3_proxy_config(get_s3_proxy_config_from_env())
|
|
30
|
+
return _S3_PROXY_CONFIG
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
# TODO: Refactor out the _S3_PROXY_CONFIG global variable and instead use the function that
|
|
34
|
+
# extracts it from the environment variables.
|
|
35
|
+
|
|
36
|
+
import os
|
|
37
|
+
import json
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def get_s3_proxy_config_from_env():
|
|
41
|
+
env_conf = os.environ.get("METAFLOW_S3_PROXY_USER_CODE_CONFIG")
|
|
42
|
+
if env_conf:
|
|
43
|
+
return json.loads(env_conf)
|
|
44
|
+
return None
|
|
45
|
+
|
|
8
46
|
|
|
9
47
|
# Must match the signature of metaflow.plugins.aws.aws_client.get_aws_client
|
|
10
48
|
# This function is called by the "userland" code inside tasks. Metaflow internals
|
|
@@ -34,7 +72,17 @@ def get_aws_client(
|
|
|
34
72
|
if decorator_role_arn:
|
|
35
73
|
role_arn = decorator_role_arn
|
|
36
74
|
|
|
37
|
-
|
|
75
|
+
if module == "s3" and get_s3_proxy_config() is not None:
|
|
76
|
+
return get_aws_client_with_s3_proxy(
|
|
77
|
+
module,
|
|
78
|
+
with_error,
|
|
79
|
+
role_arn,
|
|
80
|
+
session_vars,
|
|
81
|
+
client_params,
|
|
82
|
+
get_s3_proxy_config(),
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
client = metaflow.plugins.aws.aws_client.get_aws_client(
|
|
38
86
|
module,
|
|
39
87
|
with_error=with_error,
|
|
40
88
|
role_arn=role_arn or USE_CSPR_ROLE_ARN_IF_SET,
|
|
@@ -42,6 +90,8 @@ def get_aws_client(
|
|
|
42
90
|
client_params=client_params,
|
|
43
91
|
)
|
|
44
92
|
|
|
93
|
+
return client
|
|
94
|
+
|
|
45
95
|
|
|
46
96
|
# This should match the signature of metaflow.plugins.datatools.s3.S3.
|
|
47
97
|
#
|
|
@@ -68,11 +118,22 @@ def S3(*args, **kwargs):
|
|
|
68
118
|
else:
|
|
69
119
|
kwargs["role"] = USE_CSPR_ROLE_ARN_IF_SET
|
|
70
120
|
|
|
121
|
+
# Check if S3 proxy is active using module variable (like CSPR)
|
|
122
|
+
if get_s3_proxy_config() is not None:
|
|
123
|
+
return get_S3_with_s3_proxy(get_s3_proxy_config(), *args, **kwargs)
|
|
124
|
+
|
|
71
125
|
return metaflow.plugins.datatools.s3.S3(*args, **kwargs)
|
|
72
126
|
|
|
73
127
|
|
|
128
|
+
# Setting the S3 client docstring in order to ensure that
|
|
129
|
+
# stubs get generated properly.
|
|
130
|
+
import metaflow.plugins.datatools.s3
|
|
131
|
+
|
|
132
|
+
S3.__doc__ = metaflow.plugins.datatools.s3.S3.__doc__
|
|
133
|
+
|
|
74
134
|
from .. import profilers
|
|
75
135
|
from ..plugins.snowflake import Snowflake
|
|
76
136
|
from ..plugins.checkpoint_datastores import nebius_checkpoints, coreweave_checkpoints
|
|
77
137
|
from ..plugins.aws import assume_role
|
|
78
138
|
from . import ob_internal
|
|
139
|
+
from .ob_internal import AppDeployer
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__mf_promote_submodules__ = ["plugins.optuna"]
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
from metaflow_extensions.outerbounds.plugins import USE_CSPR_ROLE_ARN_IF_SET
|
|
2
|
+
from metaflow.metaflow_config import AWS_SECRETS_MANAGER_DEFAULT_REGION
|
|
3
|
+
from metaflow_extensions.outerbounds.plugins.s3_proxy.constants import (
|
|
4
|
+
DEFAULT_PROXY_HOST,
|
|
5
|
+
DEFAULT_PROXY_PORT,
|
|
6
|
+
)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def get_aws_client_with_s3_proxy(
|
|
10
|
+
module,
|
|
11
|
+
with_error=False,
|
|
12
|
+
role_arn=None,
|
|
13
|
+
session_vars=None,
|
|
14
|
+
client_params=None,
|
|
15
|
+
s3_config=None,
|
|
16
|
+
):
|
|
17
|
+
if not client_params:
|
|
18
|
+
client_params = {}
|
|
19
|
+
|
|
20
|
+
client_params["region_name"] = client_params.get(
|
|
21
|
+
"region_name", s3_config.get("region")
|
|
22
|
+
)
|
|
23
|
+
client_params["endpoint_url"] = s3_config.get(
|
|
24
|
+
"endpoint_url", f"http://{DEFAULT_PROXY_HOST}:{DEFAULT_PROXY_PORT}"
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
import metaflow.plugins.aws.aws_client
|
|
28
|
+
|
|
29
|
+
client = metaflow.plugins.aws.aws_client.get_aws_client(
|
|
30
|
+
module,
|
|
31
|
+
with_error=with_error,
|
|
32
|
+
role_arn=role_arn or USE_CSPR_ROLE_ARN_IF_SET,
|
|
33
|
+
session_vars=session_vars,
|
|
34
|
+
client_params=client_params,
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
def override_s3_proxy_host_header(request, **kwargs):
|
|
38
|
+
region = kwargs["region_name"]
|
|
39
|
+
request.headers["Host"] = f"s3.{region}.amazonaws.com"
|
|
40
|
+
if "x-ob-write-to" not in request.headers and "write_mode" in s3_config:
|
|
41
|
+
request.headers["x-ob-write-to"] = s3_config.get("write_mode")
|
|
42
|
+
|
|
43
|
+
client.meta.events.register("before-sign", override_s3_proxy_host_header)
|
|
44
|
+
|
|
45
|
+
return client
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def get_S3_with_s3_proxy(s3_config, *args, **kwargs):
|
|
49
|
+
if "region_name" not in kwargs:
|
|
50
|
+
kwargs["region_name"] = s3_config.get(
|
|
51
|
+
"region", AWS_SECRETS_MANAGER_DEFAULT_REGION
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
kwargs["endpoint_url"] = s3_config.get(
|
|
55
|
+
"endpoint_url", f"http://{DEFAULT_PROXY_HOST}:{DEFAULT_PROXY_PORT}"
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
import metaflow.plugins.datatools.s3
|
|
59
|
+
|
|
60
|
+
mf_s3 = metaflow.plugins.datatools.s3.S3(*args, **kwargs)
|
|
61
|
+
|
|
62
|
+
# Override reset_client to ensure proxy endpoint is preserved
|
|
63
|
+
original_reset_client = mf_s3._s3_client.reset_client
|
|
64
|
+
|
|
65
|
+
def proxy_reset_client():
|
|
66
|
+
original_reset_client()
|
|
67
|
+
import boto3
|
|
68
|
+
|
|
69
|
+
proxy_client = boto3.client(
|
|
70
|
+
"s3",
|
|
71
|
+
region_name=kwargs.get("region_name", s3_config.get("region")),
|
|
72
|
+
endpoint_url=s3_config.get("endpoint_url"),
|
|
73
|
+
)
|
|
74
|
+
mf_s3._s3_client._s3_client = proxy_client
|
|
75
|
+
|
|
76
|
+
mf_s3._s3_client.reset_client = proxy_reset_client
|
|
77
|
+
mf_s3._s3_client.reset_client()
|
|
78
|
+
|
|
79
|
+
def override_s3_proxy_host_header(request, **kwargs):
|
|
80
|
+
region = kwargs["region_name"]
|
|
81
|
+
request.headers["Host"] = f"s3.{region}.amazonaws.com"
|
|
82
|
+
if "x-ob-write-to" not in request.headers and "write_mode" in s3_config:
|
|
83
|
+
request.headers["x-ob-write-to"] = s3_config.get("write_mode")
|
|
84
|
+
|
|
85
|
+
mf_s3._s3_client._s3_client.meta.events.register(
|
|
86
|
+
"before-sign", override_s3_proxy_host_header
|
|
87
|
+
)
|
|
88
|
+
return mf_s3
|
{ob_metaflow_extensions-1.1.171rc1.dist-info → ob_metaflow_extensions-1.4.39.dist-info}/METADATA
RENAMED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ob-metaflow-extensions
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.4.39
|
|
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.15.
|
|
10
|
+
Requires-Dist: ob-metaflow (==2.19.15.1)
|
|
11
11
|
|
|
12
12
|
# Outerbounds platform package
|
|
13
13
|
|
{ob_metaflow_extensions-1.1.171rc1.dist-info → ob_metaflow_extensions-1.4.39.dist-info}/RECORD
RENAMED
|
@@ -1,29 +1,59 @@
|
|
|
1
1
|
metaflow_extensions/outerbounds/__init__.py,sha256=Gb8u06s9ClQsA_vzxmkCzuMnigPy7kKcDnLfb7eB-64,514
|
|
2
|
-
metaflow_extensions/outerbounds/remote_config.py,sha256=
|
|
2
|
+
metaflow_extensions/outerbounds/remote_config.py,sha256=NIKiq-hrThOll7RLw2JfSN7K5Wz0QtjtRb5AVlHZ1vA,4787
|
|
3
3
|
metaflow_extensions/outerbounds/config/__init__.py,sha256=JsQGRuGFz28fQWjUvxUgR8EKBLGRdLUIk_buPLJplJY,1225
|
|
4
|
-
metaflow_extensions/outerbounds/plugins/__init__.py,sha256=
|
|
4
|
+
metaflow_extensions/outerbounds/plugins/__init__.py,sha256=nrsobix6XPIn5Uyg6yTSOtNwr6yaV2-gGbU83hjnbIM,14038
|
|
5
5
|
metaflow_extensions/outerbounds/plugins/auth_server.py,sha256=_Q9_2EL0Xy77bCRphkwT1aSu8gQXRDOH-Z-RxTUO8N4,2202
|
|
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
|
-
metaflow_extensions/outerbounds/plugins/apps/app_cli.py,sha256=
|
|
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=WWFvyl0EDUbp_UwmWjXBqlLfPEZ-lq98NJ5F5skBDKU,4901
|
|
9
10
|
metaflow_extensions/outerbounds/plugins/apps/app_utils.py,sha256=sw9whU17lAzlD2K2kEDNjlk1Ib-2xE2UNhJkmzD8Qv8,8543
|
|
10
11
|
metaflow_extensions/outerbounds/plugins/apps/consts.py,sha256=iHsyqbUg9k-rgswCs1Jxf5QZIxR1V-peCDRjgr9kdBM,177
|
|
11
12
|
metaflow_extensions/outerbounds/plugins/apps/deploy_decorator.py,sha256=VkmiMdNYHhNdt-Qm9AVv7aE2LWFsIFEc16YcOYjwF6Q,8568
|
|
12
13
|
metaflow_extensions/outerbounds/plugins/apps/supervisord_utils.py,sha256=GQoN2gyPClcpR9cLldJmbCfqXnoAHxp8xUnY7vzaYtY,9026
|
|
14
|
+
metaflow_extensions/outerbounds/plugins/apps/core/__init__.py,sha256=c6uCgKlgEkTmM9BVdAO-m3vZvUpK2KW_AZZ2236now4,237
|
|
15
|
+
metaflow_extensions/outerbounds/plugins/apps/core/_state_machine.py,sha256=al907t2C86BPf4V1V03PLTJRJMOc8gdl1CxLLbklnDU,20281
|
|
16
|
+
metaflow_extensions/outerbounds/plugins/apps/core/app_cli.py,sha256=rD7oimnkEm___K2Ttiwe12B-Xzqi76tk4_HyFQArBQs,42736
|
|
17
|
+
metaflow_extensions/outerbounds/plugins/apps/core/app_config.py,sha256=MDOWrLuLK3CsbO6SRuidRmoB_g0SGrdC-8sTdE5kWLs,4226
|
|
18
|
+
metaflow_extensions/outerbounds/plugins/apps/core/artifacts.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
19
|
+
metaflow_extensions/outerbounds/plugins/apps/core/capsule.py,sha256=MneFa7qna90Gg_GVP7t5jUkQ_VLwT0jGJmLL9toevyk,37063
|
|
20
|
+
metaflow_extensions/outerbounds/plugins/apps/core/click_importer.py,sha256=kgoPQmK_-8PSSTc3QMSaynCLQ5VWTkKFOC69FPURyXA,998
|
|
21
|
+
metaflow_extensions/outerbounds/plugins/apps/core/config_schema.yaml,sha256=vpvhpZOiPvqu-9mSoYk38vZ5wnFdeSA5DAPGVxFSoWA,10176
|
|
22
|
+
metaflow_extensions/outerbounds/plugins/apps/core/dependencies.py,sha256=JlWT9f27yzZeJPlqTQk134WDfQgOdyxC5iaw3pLlhqY,4006
|
|
23
|
+
metaflow_extensions/outerbounds/plugins/apps/core/deployer.py,sha256=dNKlDu6n8SufEd5NKmsErl1RYhQXuEe_DgtA0mk7awg,9472
|
|
24
|
+
metaflow_extensions/outerbounds/plugins/apps/core/perimeters.py,sha256=ETlqTkHDvVaWusrbNncFf7pcGJarj0r-5qodC4gZWQM,3068
|
|
25
|
+
metaflow_extensions/outerbounds/plugins/apps/core/secrets.py,sha256=sgDiAmpSC8Y5xjlaOEp79F6m0S3x4RONf_vJ5PUAfu8,6127
|
|
26
|
+
metaflow_extensions/outerbounds/plugins/apps/core/utils.py,sha256=2M2zU8DhbAlJee8P0xKXINAku81PcUylS3sVCSb0TUs,7896
|
|
27
|
+
metaflow_extensions/outerbounds/plugins/apps/core/validations.py,sha256=Inr9AJDe-L3PMMMxcJPH1zulh9_SynqITb2BzGseLh4,471
|
|
28
|
+
metaflow_extensions/outerbounds/plugins/apps/core/_vendor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
29
|
+
metaflow_extensions/outerbounds/plugins/apps/core/_vendor/spinner/__init__.py,sha256=gTm0NdQGTRxmghye1CYkhRtodji0MezsqAWs9OrLLRc,102
|
|
30
|
+
metaflow_extensions/outerbounds/plugins/apps/core/_vendor/spinner/spinners.py,sha256=0Hl1dskTzfibHPM5dfHV3no1maFduOCJ48r8mr3tgr0,15786
|
|
31
|
+
metaflow_extensions/outerbounds/plugins/apps/core/code_package/__init__.py,sha256=8McF7pgx8ghvjRnazp2Qktlxi9yYwNiwESSQrk-2oW8,68
|
|
32
|
+
metaflow_extensions/outerbounds/plugins/apps/core/code_package/code_packager.py,sha256=QHlF94T7ZGSOJH5Xeg4mI_CJvCrbaikiIOTnkFgE83g,23228
|
|
33
|
+
metaflow_extensions/outerbounds/plugins/apps/core/code_package/examples.py,sha256=aF8qKIJxCVv_ugcShQjqUsXKKKMsm1oMkQIl8w3QKuw,4016
|
|
34
|
+
metaflow_extensions/outerbounds/plugins/apps/core/config/__init__.py,sha256=ZgC9U4NFu7TNngUuUMzt69PmjMENXb6eUK2HCSroIDo,393
|
|
35
|
+
metaflow_extensions/outerbounds/plugins/apps/core/config/cli_generator.py,sha256=0R0-wy7RxAMR9doVRvuluRYxAYgyjZXlTIkOeYGyz7M,5350
|
|
36
|
+
metaflow_extensions/outerbounds/plugins/apps/core/config/config_utils.py,sha256=bozzUR8rbfOnb5M532RZxB5QNvVgEC1gnVjfCvQ82Yk,34053
|
|
37
|
+
metaflow_extensions/outerbounds/plugins/apps/core/config/schema_export.py,sha256=vfmoSXGRocXryOQOGHbh-zIboEP3ty0BVucOza6uzXU,9614
|
|
38
|
+
metaflow_extensions/outerbounds/plugins/apps/core/config/typed_configs.py,sha256=9FWdp_F_jBsoxxQf40sRcNgvba8RBYkn2Q5HjXHg_6Y,4733
|
|
39
|
+
metaflow_extensions/outerbounds/plugins/apps/core/config/typed_init_generator.py,sha256=KiJ1eiwtBR5eWdBzWqvO6KlqJ2qzjJvl3w4c1uJ3g0Y,13419
|
|
40
|
+
metaflow_extensions/outerbounds/plugins/apps/core/config/unified_config.py,sha256=gqf8p2OYvUWtslEDPsvgZKl13RMhfKeIaq3bGrIjGqs,38990
|
|
41
|
+
metaflow_extensions/outerbounds/plugins/apps/core/experimental/__init__.py,sha256=_OT0RsbQdYerT-fjG_vcu85ava6sHbCsGBpLcGcrlX8,3043
|
|
13
42
|
metaflow_extensions/outerbounds/plugins/aws/__init__.py,sha256=VBGdjNKeFLXGZuqh4jVk8cFtO1AWof73a6k_cnbAOYA,145
|
|
14
43
|
metaflow_extensions/outerbounds/plugins/aws/assume_role.py,sha256=mBewNlnSYsR2rFXFkX-DUH6ku01h2yOcMcLHoCL7eyI,161
|
|
15
|
-
metaflow_extensions/outerbounds/plugins/aws/assume_role_decorator.py,sha256=
|
|
44
|
+
metaflow_extensions/outerbounds/plugins/aws/assume_role_decorator.py,sha256=cZg2zUcyvehpjE-a12HTP6vpwPG2MAJuK5KSywBk8xs,4638
|
|
16
45
|
metaflow_extensions/outerbounds/plugins/card_utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
46
|
metaflow_extensions/outerbounds/plugins/card_utilities/async_cards.py,sha256=6rQhtZXK5DenXPfCRS1ul0jvLJYd48jrJAlnodID21w,4347
|
|
18
47
|
metaflow_extensions/outerbounds/plugins/card_utilities/extra_components.py,sha256=D8rgCaSc7PuLD0MHJjqsjN0g0PQMN1H-ySOJqi5uIOE,19111
|
|
19
48
|
metaflow_extensions/outerbounds/plugins/card_utilities/injector.py,sha256=UQtHrviFs7Z5LBh0nbaIv8aEnHnyXFjs9TiGCjtcIWc,2452
|
|
20
49
|
metaflow_extensions/outerbounds/plugins/checkpoint_datastores/__init__.py,sha256=H96Bdv2XKTewKIU587sjNbU538SKMZOYWQ2qCp1JaNU,84
|
|
21
|
-
metaflow_extensions/outerbounds/plugins/checkpoint_datastores/coreweave.py,sha256=
|
|
22
|
-
metaflow_extensions/outerbounds/plugins/checkpoint_datastores/
|
|
50
|
+
metaflow_extensions/outerbounds/plugins/checkpoint_datastores/coreweave.py,sha256=_SKSs0qfRt864rmz3gcm87zEPEh16_ai-MJ-D47v15Y,2340
|
|
51
|
+
metaflow_extensions/outerbounds/plugins/checkpoint_datastores/external_chckpt.py,sha256=BRigyuyYYv5H1CxfifFJPPvgMdQeCNIT8Hm0j1xo-YA,3025
|
|
52
|
+
metaflow_extensions/outerbounds/plugins/checkpoint_datastores/nebius.py,sha256=xFGdSxlHcwZwgTSKj8efEv6ydCWYqRGrreGqXhf02ko,2321
|
|
23
53
|
metaflow_extensions/outerbounds/plugins/fast_bakery/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
54
|
metaflow_extensions/outerbounds/plugins/fast_bakery/baker.py,sha256=ShE5omFBr83wkvEhL_ptRFvDNMs6wefg4BjaafQjTcM,3602
|
|
25
|
-
metaflow_extensions/outerbounds/plugins/fast_bakery/docker_environment.py,sha256=
|
|
26
|
-
metaflow_extensions/outerbounds/plugins/fast_bakery/fast_bakery.py,sha256=
|
|
55
|
+
metaflow_extensions/outerbounds/plugins/fast_bakery/docker_environment.py,sha256=vKN3Waz0SgbOALVTRcf_8MCGhxdRueRFZJ7JmWbRJRM,15487
|
|
56
|
+
metaflow_extensions/outerbounds/plugins/fast_bakery/fast_bakery.py,sha256=9iqIBowKk95vUYvnMrFNWmmSuK-whKnqJwcCmEcRjTU,5727
|
|
27
57
|
metaflow_extensions/outerbounds/plugins/fast_bakery/fast_bakery_cli.py,sha256=kqFyu2bJSnc9_9aYfBpz5xK6L6luWFZK_NMuh8f1eVk,1494
|
|
28
58
|
metaflow_extensions/outerbounds/plugins/fast_bakery/fast_bakery_decorator.py,sha256=MXSIp05-jvt8Q2uGaLKjtuM_ToLeRLxhtMbfHc9Kcko,1515
|
|
29
59
|
metaflow_extensions/outerbounds/plugins/kubernetes/__init__.py,sha256=5zG8gShSj8m7rgF4xgWBZFuY3GDP5n1T0ktjRpGJLHA,69
|
|
@@ -45,7 +75,7 @@ metaflow_extensions/outerbounds/plugins/nvct/__init__.py,sha256=47DEQpj8HBSa-_TI
|
|
|
45
75
|
metaflow_extensions/outerbounds/plugins/nvct/exceptions.py,sha256=1PiV6FdH36CvkmHh5jtsfrsoe3Q_Fo1NomHw5wvgoDM,2886
|
|
46
76
|
metaflow_extensions/outerbounds/plugins/nvct/nvct.py,sha256=Z2ZPWGuHe58au_d6GfHiw6Nl5d8INdLDI5exlsPEOSA,3564
|
|
47
77
|
metaflow_extensions/outerbounds/plugins/nvct/nvct_cli.py,sha256=bB9AURhRep9PV_-b-qLHpgw_GPG_xFoq1PeHEgFP1mQ,10104
|
|
48
|
-
metaflow_extensions/outerbounds/plugins/nvct/nvct_decorator.py,sha256=
|
|
78
|
+
metaflow_extensions/outerbounds/plugins/nvct/nvct_decorator.py,sha256=RRGSDTziEA_wf8Ck8zePwAHTHc3VPbinnIU49PBM60c,9477
|
|
49
79
|
metaflow_extensions/outerbounds/plugins/nvct/nvct_runner.py,sha256=8IPkdvuTZNIqgAAt75gVNn-ydr-Zz2sKC8UX_6pNEKI,7091
|
|
50
80
|
metaflow_extensions/outerbounds/plugins/nvct/utils.py,sha256=U4_Fu8H94j_Bbox7mmMhNnlRhlYHqnK28R5w_TMWEFM,1029
|
|
51
81
|
metaflow_extensions/outerbounds/plugins/ollama/__init__.py,sha256=4T8LQqAuh8flSMvYztw6-OPoDoAorcBWhC-vPuuQPbc,9234
|
|
@@ -53,40 +83,52 @@ metaflow_extensions/outerbounds/plugins/ollama/constants.py,sha256=hxkTpWEJp1pKH
|
|
|
53
83
|
metaflow_extensions/outerbounds/plugins/ollama/exceptions.py,sha256=8Ss296_MGZl1wXAoDNwpH-hsPe6iYLe90Ji1pczNocU,668
|
|
54
84
|
metaflow_extensions/outerbounds/plugins/ollama/ollama.py,sha256=C-6Hz8OxsJiB14AAxmunq3P4k7DrmVHsSOxE0xsP-nY,79780
|
|
55
85
|
metaflow_extensions/outerbounds/plugins/ollama/status_card.py,sha256=F5e4McDl28lhtjeUyInkl03bqjr1lgLxWoau8Q9xwBE,10994
|
|
86
|
+
metaflow_extensions/outerbounds/plugins/optuna/__init__.py,sha256=iFNDFNtWOfqwXi8bhMoItM8it-bATETbx8PGK66UbHI,1615
|
|
56
87
|
metaflow_extensions/outerbounds/plugins/profilers/deco_injector.py,sha256=oI_C3c64XBm7n88FILqHwn-Nnc5DeT_68I67lM9rXaI,2434
|
|
57
88
|
metaflow_extensions/outerbounds/plugins/profilers/gpu_profile_decorator.py,sha256=gDHQ2sMIp4NuZSzUspbSd8RGdFAoO5mgZAyFcZ2a51Y,2619
|
|
89
|
+
metaflow_extensions/outerbounds/plugins/profilers/simple_card_decorator.py,sha256=4W9tLGCmkFx-4XYLa1xF6qMiaWOBYYFx_RclZDKej30,3259
|
|
90
|
+
metaflow_extensions/outerbounds/plugins/s3_proxy/__init__.py,sha256=9Kw86B331pQJAzkfBMPIDoPrJsW0LVRHXBYikbcc2xk,204
|
|
91
|
+
metaflow_extensions/outerbounds/plugins/s3_proxy/binary_caller.py,sha256=NxgyDF6KBH7VB2-Lqg9XvLjcHHVBeNJaTw66GXe6q5I,4253
|
|
92
|
+
metaflow_extensions/outerbounds/plugins/s3_proxy/constants.py,sha256=ugjVUv_C2JW5Dy6hAunaivxS4rlOvCMiwVCe8gyQ_FI,321
|
|
93
|
+
metaflow_extensions/outerbounds/plugins/s3_proxy/exceptions.py,sha256=IkPqDvSeYQukNeu0aIVCmfQWTvUHsTs-qv7nvry2KjM,305
|
|
94
|
+
metaflow_extensions/outerbounds/plugins/s3_proxy/proxy_bootstrap.py,sha256=xtYoyydd-JV7l6YxR7UwrErXT9HvRSPGjJQAoV83rgE,1507
|
|
95
|
+
metaflow_extensions/outerbounds/plugins/s3_proxy/s3_proxy_api.py,sha256=WjpprW0tCICLOihFywEtgJbCnx-OFmwuT_hR27ACl2A,3007
|
|
96
|
+
metaflow_extensions/outerbounds/plugins/s3_proxy/s3_proxy_decorator.py,sha256=kbsAAY8gnE6F9kSzKCliUhw3h-ol-_v8qdv8meC4JBA,9206
|
|
97
|
+
metaflow_extensions/outerbounds/plugins/s3_proxy/s3_proxy_manager.py,sha256=Grl7eLqH5iV0RPgSUl7v0BMRLkTvYpMiwKhPHeZqJ3M,8600
|
|
58
98
|
metaflow_extensions/outerbounds/plugins/secrets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
59
99
|
metaflow_extensions/outerbounds/plugins/secrets/secrets.py,sha256=3s98hO_twKkM22tKyDdcUjGQNfYpSXW_jLKISV9ju_U,8433
|
|
60
100
|
metaflow_extensions/outerbounds/plugins/snowflake/__init__.py,sha256=RG4ixt3jwqcK1_tt0QxLcUbNmf7wWAMnZhBx-ZMGgLk,114
|
|
61
|
-
metaflow_extensions/outerbounds/plugins/snowflake/snowflake.py,sha256=
|
|
101
|
+
metaflow_extensions/outerbounds/plugins/snowflake/snowflake.py,sha256=_ULhLrKZ4rOVcJFb_EmMGi7GFDN6Vtawz8o86mLBMq8,14756
|
|
62
102
|
metaflow_extensions/outerbounds/plugins/snowpark/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
63
|
-
metaflow_extensions/outerbounds/plugins/snowpark/snowpark.py,sha256=
|
|
64
|
-
metaflow_extensions/outerbounds/plugins/snowpark/snowpark_cli.py,sha256=
|
|
65
|
-
metaflow_extensions/outerbounds/plugins/snowpark/snowpark_client.py,sha256=
|
|
66
|
-
metaflow_extensions/outerbounds/plugins/snowpark/snowpark_decorator.py,sha256=
|
|
103
|
+
metaflow_extensions/outerbounds/plugins/snowpark/snowpark.py,sha256=tVpSOizbVjoXp-iMWuzJgE41hUstMrPC8O_eCKY9Mg4,11083
|
|
104
|
+
metaflow_extensions/outerbounds/plugins/snowpark/snowpark_cli.py,sha256=aesXYZGoEF8UtAIvCDJNLTSc9pM62KuOqd9Za95HjZ4,8997
|
|
105
|
+
metaflow_extensions/outerbounds/plugins/snowpark/snowpark_client.py,sha256=6U1sdXx0pdhNdkGba8DaE7GabQTc5fyJI3LpPsPQt0s,5463
|
|
106
|
+
metaflow_extensions/outerbounds/plugins/snowpark/snowpark_decorator.py,sha256=EN-XQafl14uQ3oVGgrkNII5PCYq2lWOt3t2d-JGPeBk,10430
|
|
67
107
|
metaflow_extensions/outerbounds/plugins/snowpark/snowpark_exceptions.py,sha256=FTfYlJu-sn9DkPOs2R1V1ChWb1vZthOgeq0BZdT1ucY,296
|
|
68
|
-
metaflow_extensions/outerbounds/plugins/snowpark/snowpark_job.py,sha256=
|
|
108
|
+
metaflow_extensions/outerbounds/plugins/snowpark/snowpark_job.py,sha256=KcbAYZdInAlS10IAZWdqtWAJXY4I6N2ebCTXzAmT72o,7070
|
|
69
109
|
metaflow_extensions/outerbounds/plugins/snowpark/snowpark_service_spec.py,sha256=AI_kcm1hZV3JRxJkookcH6twiGnAYjk9Dx-MeoYz60Y,8511
|
|
70
110
|
metaflow_extensions/outerbounds/plugins/tensorboard/__init__.py,sha256=9lUM4Cqi5RjrHBRfG6AQMRz8-R96eZC8Ih0KD2lv22Y,1858
|
|
71
|
-
metaflow_extensions/outerbounds/plugins/torchtune/__init__.py,sha256=
|
|
72
|
-
metaflow_extensions/outerbounds/plugins/vllm/__init__.py,sha256=
|
|
111
|
+
metaflow_extensions/outerbounds/plugins/torchtune/__init__.py,sha256=Psj2ybj_E1qp5KK2inon9e4ZecaRxnPtW3ngcirbO2g,6094
|
|
112
|
+
metaflow_extensions/outerbounds/plugins/vllm/__init__.py,sha256=H56xR3un5Ed39A-85ZzzVk9hmhEYBdzR5ydiDrtSAVc,9298
|
|
73
113
|
metaflow_extensions/outerbounds/plugins/vllm/constants.py,sha256=ODX_uM5iYrzpVltsAdSf9Jo0DAOMiZ3647DcKdCnlS0,24
|
|
74
114
|
metaflow_extensions/outerbounds/plugins/vllm/exceptions.py,sha256=8m65k2L17zXgSkgU299DWqxr1wGUMsZgSJw0hBRizJ0,49
|
|
75
|
-
metaflow_extensions/outerbounds/plugins/vllm/status_card.py,sha256=
|
|
76
|
-
metaflow_extensions/outerbounds/plugins/vllm/vllm_manager.py,sha256=
|
|
115
|
+
metaflow_extensions/outerbounds/plugins/vllm/status_card.py,sha256=TkBbRcrwgW2RMwac-Vo3OUDofDQ05Qy4U1SGRvij2to,12949
|
|
116
|
+
metaflow_extensions/outerbounds/plugins/vllm/vllm_manager.py,sha256=sp_TX2SrImJGgu5kp0A458VhytC6F0PNM-vGN7Zsrf4,23921
|
|
77
117
|
metaflow_extensions/outerbounds/profilers/__init__.py,sha256=wa_jhnCBr82TBxoS0e8b6_6sLyZX0fdHicuGJZNTqKw,29
|
|
78
118
|
metaflow_extensions/outerbounds/profilers/gpu.py,sha256=3Er8uKQzfm_082uadg4yn_D4Y-iSCgzUfFmguYxZsz4,27485
|
|
79
119
|
metaflow_extensions/outerbounds/toplevel/__init__.py,sha256=qWUJSv_r5hXJ7jV_On4nEasKIfUCm6_UjkjXWA_A1Ts,90
|
|
80
|
-
metaflow_extensions/outerbounds/toplevel/global_aliases_for_metaflow_package.py,sha256=
|
|
81
|
-
metaflow_extensions/outerbounds/toplevel/ob_internal.py,sha256=
|
|
120
|
+
metaflow_extensions/outerbounds/toplevel/global_aliases_for_metaflow_package.py,sha256=EQbWEatFfsJah7kEiUVrCC2rNTj2UeISJB9N7gtGitc,4546
|
|
121
|
+
metaflow_extensions/outerbounds/toplevel/ob_internal.py,sha256=DXCaAtLzlE-bFIiVWEv-iV2JKIWsoSGaUeH4jIQZ9gs,193
|
|
122
|
+
metaflow_extensions/outerbounds/toplevel/s3_proxy.py,sha256=zdqG7Z12cGuoYYCi2P4kqC3WsgL3xfdJGIb7ejecHH4,2862
|
|
82
123
|
metaflow_extensions/outerbounds/toplevel/plugins/azure/__init__.py,sha256=WUuhz2YQfI4fz7nIcipwwWq781eaoHEk7n4GAn1npDg,63
|
|
83
124
|
metaflow_extensions/outerbounds/toplevel/plugins/gcp/__init__.py,sha256=BbZiaH3uILlEZ6ntBLKeNyqn3If8nIXZFq_Apd7Dhco,70
|
|
84
125
|
metaflow_extensions/outerbounds/toplevel/plugins/kubernetes/__init__.py,sha256=5zG8gShSj8m7rgF4xgWBZFuY3GDP5n1T0ktjRpGJLHA,69
|
|
85
126
|
metaflow_extensions/outerbounds/toplevel/plugins/ollama/__init__.py,sha256=GRSz2zwqkvlmFS6bcfYD_CX6CMko9DHQokMaH1iBshA,47
|
|
127
|
+
metaflow_extensions/outerbounds/toplevel/plugins/optuna/__init__.py,sha256=6D1wLVSHvwEC_ed1r3VcvNGqOhKgyBt22AoDjVTkiFY,47
|
|
86
128
|
metaflow_extensions/outerbounds/toplevel/plugins/snowflake/__init__.py,sha256=LptpH-ziXHrednMYUjIaosS1SXD3sOtF_9_eRqd8SJw,50
|
|
87
129
|
metaflow_extensions/outerbounds/toplevel/plugins/torchtune/__init__.py,sha256=uTVkdSk3xZ7hEKYfdlyVteWj5KeDwaM1hU9WT-_YKfI,50
|
|
88
130
|
metaflow_extensions/outerbounds/toplevel/plugins/vllm/__init__.py,sha256=ekcgD3KVydf-a0xMI60P4uy6ePkSEoFHiGnDq1JM940,45
|
|
89
|
-
ob_metaflow_extensions-1.
|
|
90
|
-
ob_metaflow_extensions-1.
|
|
91
|
-
ob_metaflow_extensions-1.
|
|
92
|
-
ob_metaflow_extensions-1.
|
|
131
|
+
ob_metaflow_extensions-1.4.39.dist-info/METADATA,sha256=Zfm2ymOc5lvyeuNPZUNpmCHylRjYHRKGQVhyL_YduBw,520
|
|
132
|
+
ob_metaflow_extensions-1.4.39.dist-info/WHEEL,sha256=bb2Ot9scclHKMOLDEHY6B2sicWOgugjFKaJsT7vwMQo,110
|
|
133
|
+
ob_metaflow_extensions-1.4.39.dist-info/top_level.txt,sha256=NwG0ukwjygtanDETyp_BUdtYtqIA_lOjzFFh1TsnxvI,20
|
|
134
|
+
ob_metaflow_extensions-1.4.39.dist-info/RECORD,,
|
{ob_metaflow_extensions-1.1.171rc1.dist-info → ob_metaflow_extensions-1.4.39.dist-info}/WHEEL
RENAMED
|
File without changes
|
|
File without changes
|