ob-metaflow-extensions 1.3.1__py2.py3-none-any.whl → 1.4.0__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/core/_state_machine.py +7 -1
- metaflow_extensions/outerbounds/plugins/apps/core/capsule.py +9 -2
- metaflow_extensions/outerbounds/plugins/apps/core/config/schema_export.py +3 -0
- metaflow_extensions/outerbounds/plugins/apps/core/config/typed_configs.py +5 -0
- metaflow_extensions/outerbounds/plugins/apps/core/config/unified_config.py +34 -0
- metaflow_extensions/outerbounds/plugins/apps/core/config_schema.yaml +46 -0
- metaflow_extensions/outerbounds/plugins/apps/core/deployer.py +4 -10
- {ob_metaflow_extensions-1.3.1.dist-info → ob_metaflow_extensions-1.4.0.dist-info}/METADATA +2 -2
- {ob_metaflow_extensions-1.3.1.dist-info → ob_metaflow_extensions-1.4.0.dist-info}/RECORD +11 -11
- {ob_metaflow_extensions-1.3.1.dist-info → ob_metaflow_extensions-1.4.0.dist-info}/WHEEL +0 -0
- {ob_metaflow_extensions-1.3.1.dist-info → ob_metaflow_extensions-1.4.0.dist-info}/top_level.txt +0 -0
|
@@ -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:
|
|
@@ -276,6 +276,9 @@ def _get_field_schema(field_info) -> Dict[str, Any]:
|
|
|
276
276
|
if field_info.behavior:
|
|
277
277
|
field_schema["mutation_behavior"] = field_info.behavior
|
|
278
278
|
|
|
279
|
+
if field_info.cli_meta is not None:
|
|
280
|
+
field_schema["cli_option"] = field_info.cli_meta.cli_option_str
|
|
281
|
+
|
|
279
282
|
# Handle validation from CLI metadata
|
|
280
283
|
if field_info.cli_meta and field_info.validation_fn:
|
|
281
284
|
# Add validation hints in description
|
|
@@ -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
|
|
@@ -17,27 +17,32 @@ properties:
|
|
|
17
17
|
type: string
|
|
18
18
|
example: myapp
|
|
19
19
|
mutation_behavior: union
|
|
20
|
+
cli_option: --name
|
|
20
21
|
port:
|
|
21
22
|
description: |-
|
|
22
23
|
Port where the app is hosted. When deployed this will be port on which we will deploy the app. (validation applied)
|
|
23
24
|
type: integer
|
|
24
25
|
example: 8000
|
|
25
26
|
mutation_behavior: union
|
|
27
|
+
cli_option: --port
|
|
26
28
|
description:
|
|
27
29
|
description: The description of the app to deploy.
|
|
28
30
|
type: string
|
|
29
31
|
example: This is a description of my app.
|
|
30
32
|
mutation_behavior: union
|
|
33
|
+
cli_option: --description
|
|
31
34
|
app_type:
|
|
32
35
|
description: The User defined type of app to deploy. Its only used for bookkeeping purposes.
|
|
33
36
|
type: string
|
|
34
37
|
example: MyCustomAgent
|
|
35
38
|
mutation_behavior: union
|
|
39
|
+
cli_option: --app-type
|
|
36
40
|
image:
|
|
37
41
|
description: The Docker image to deploy with the App.
|
|
38
42
|
type: string
|
|
39
43
|
example: python:3.10-slim
|
|
40
44
|
mutation_behavior: union
|
|
45
|
+
cli_option: --image
|
|
41
46
|
tags:
|
|
42
47
|
description: The tags of the app to deploy. (validation applied)
|
|
43
48
|
type: array
|
|
@@ -47,6 +52,7 @@ properties:
|
|
|
47
52
|
- foo: bar
|
|
48
53
|
- x: y
|
|
49
54
|
mutation_behavior: union
|
|
55
|
+
cli_option: --tag
|
|
50
56
|
secrets:
|
|
51
57
|
description: |-
|
|
52
58
|
Outerbounds integrations to attach to the app. You can use the value you set in the `@secrets` decorator in your code. (validation applied)
|
|
@@ -56,6 +62,7 @@ properties:
|
|
|
56
62
|
example:
|
|
57
63
|
- hf-token
|
|
58
64
|
mutation_behavior: union
|
|
65
|
+
cli_option: --secret
|
|
59
66
|
compute_pools:
|
|
60
67
|
description: A list of compute pools to deploy the app to.
|
|
61
68
|
type: array
|
|
@@ -65,6 +72,7 @@ properties:
|
|
|
65
72
|
- default
|
|
66
73
|
- large
|
|
67
74
|
mutation_behavior: union
|
|
75
|
+
cli_option: --compute-pools
|
|
68
76
|
environment:
|
|
69
77
|
description: Environment variables to deploy with the App.
|
|
70
78
|
type: object
|
|
@@ -78,6 +86,7 @@ properties:
|
|
|
78
86
|
- http://localhost:3000
|
|
79
87
|
- https://myapp.com
|
|
80
88
|
mutation_behavior: union
|
|
89
|
+
cli_option: --env
|
|
81
90
|
commands:
|
|
82
91
|
description: A list of commands to run the app with.
|
|
83
92
|
type: array
|
|
@@ -99,23 +108,27 @@ properties:
|
|
|
99
108
|
default: '1'
|
|
100
109
|
example: 500m
|
|
101
110
|
mutation_behavior: union
|
|
111
|
+
cli_option: --cpu
|
|
102
112
|
memory:
|
|
103
113
|
description: Memory resource request and limit. (validation applied)
|
|
104
114
|
type: string
|
|
105
115
|
default: 4Gi
|
|
106
116
|
example: 512Mi
|
|
107
117
|
mutation_behavior: union
|
|
118
|
+
cli_option: --memory
|
|
108
119
|
gpu:
|
|
109
120
|
description: GPU resource request and limit. (validation applied)
|
|
110
121
|
type: string
|
|
111
122
|
example: '1'
|
|
112
123
|
mutation_behavior: union
|
|
124
|
+
cli_option: --gpu
|
|
113
125
|
disk:
|
|
114
126
|
description: Storage resource request and limit. (validation applied)
|
|
115
127
|
type: string
|
|
116
128
|
default: 20Gi
|
|
117
129
|
example: 1Gi
|
|
118
130
|
mutation_behavior: union
|
|
131
|
+
cli_option: --disk
|
|
119
132
|
mutation_behavior: union
|
|
120
133
|
auth:
|
|
121
134
|
title: AuthConfig
|
|
@@ -132,12 +145,14 @@ properties:
|
|
|
132
145
|
- API
|
|
133
146
|
example: Browser
|
|
134
147
|
mutation_behavior: union
|
|
148
|
+
cli_option: --auth-type
|
|
135
149
|
public:
|
|
136
150
|
description: Whether the app is public or not.
|
|
137
151
|
type: boolean
|
|
138
152
|
default: true
|
|
139
153
|
example: true
|
|
140
154
|
mutation_behavior: union
|
|
155
|
+
cli_option: --public-access/--private-access
|
|
141
156
|
mutation_behavior: union
|
|
142
157
|
replicas:
|
|
143
158
|
title: ReplicaConfig
|
|
@@ -151,16 +166,35 @@ properties:
|
|
|
151
166
|
type: integer
|
|
152
167
|
example: 1
|
|
153
168
|
mutation_behavior: union
|
|
169
|
+
cli_option: --fixed-replicas
|
|
154
170
|
min:
|
|
155
171
|
description: The minimum number of replicas to deploy the app with.
|
|
156
172
|
type: integer
|
|
157
173
|
example: 1
|
|
158
174
|
mutation_behavior: union
|
|
175
|
+
cli_option: --min-replicas
|
|
159
176
|
max:
|
|
160
177
|
description: The maximum number of replicas to deploy the app with.
|
|
161
178
|
type: integer
|
|
162
179
|
example: 10
|
|
163
180
|
mutation_behavior: union
|
|
181
|
+
cli_option: --max-replicas
|
|
182
|
+
scaling_policy:
|
|
183
|
+
title: ScalingPolicyConfig
|
|
184
|
+
description: |-
|
|
185
|
+
Policies for autoscaling replicas. Available policies:
|
|
186
|
+
- Request based Autoscaling (rpm)
|
|
187
|
+
type: object
|
|
188
|
+
required: []
|
|
189
|
+
properties:
|
|
190
|
+
rpm:
|
|
191
|
+
description: |-
|
|
192
|
+
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.
|
|
193
|
+
type: integer
|
|
194
|
+
default: 60
|
|
195
|
+
mutation_behavior: union
|
|
196
|
+
cli_option: --scaling-rpm
|
|
197
|
+
mutation_behavior: union
|
|
164
198
|
mutation_behavior: union
|
|
165
199
|
dependencies:
|
|
166
200
|
title: DependencyConfig
|
|
@@ -173,16 +207,19 @@ properties:
|
|
|
173
207
|
type: string
|
|
174
208
|
example: requirements.txt
|
|
175
209
|
mutation_behavior: not_allowed
|
|
210
|
+
cli_option: --dep-from-requirements
|
|
176
211
|
from_pyproject_toml:
|
|
177
212
|
description: The path to the pyproject.toml file to attach to the app.
|
|
178
213
|
type: string
|
|
179
214
|
example: pyproject.toml
|
|
180
215
|
mutation_behavior: not_allowed
|
|
216
|
+
cli_option: --dep-from-pyproject
|
|
181
217
|
python:
|
|
182
218
|
description: The Python version to use for the app.
|
|
183
219
|
type: string
|
|
184
220
|
example: '3.10'
|
|
185
221
|
mutation_behavior: not_allowed
|
|
222
|
+
cli_option: --python
|
|
186
223
|
pypi:
|
|
187
224
|
description: |-
|
|
188
225
|
A dictionary of pypi dependencies to attach to the app. The key is the package name and the value is the version.
|
|
@@ -192,6 +229,7 @@ properties:
|
|
|
192
229
|
numpy: 1.23.0
|
|
193
230
|
pandas: ''
|
|
194
231
|
mutation_behavior: not_allowed
|
|
232
|
+
cli_option: --pypi
|
|
195
233
|
conda:
|
|
196
234
|
description: |-
|
|
197
235
|
A dictionary of conda dependencies to attach to the app. The key is the package name and the value is the version.
|
|
@@ -201,6 +239,7 @@ properties:
|
|
|
201
239
|
numpy: 1.23.0
|
|
202
240
|
pandas: ''
|
|
203
241
|
mutation_behavior: not_allowed
|
|
242
|
+
cli_option: --conda
|
|
204
243
|
mutation_behavior: union
|
|
205
244
|
package:
|
|
206
245
|
title: PackageConfig
|
|
@@ -213,6 +252,7 @@ properties:
|
|
|
213
252
|
type: string
|
|
214
253
|
example: ./
|
|
215
254
|
mutation_behavior: union
|
|
255
|
+
cli_option: --package-src-path
|
|
216
256
|
suffixes:
|
|
217
257
|
description: A list of suffixes to add to the source code to deploy with the App.
|
|
218
258
|
type: array
|
|
@@ -222,17 +262,20 @@ properties:
|
|
|
222
262
|
- .py
|
|
223
263
|
- .ipynb
|
|
224
264
|
mutation_behavior: union
|
|
265
|
+
cli_option: --package-suffixes
|
|
225
266
|
mutation_behavior: union
|
|
226
267
|
no_deps:
|
|
227
268
|
description: Do not bake any dependencies. Directly used the image provided
|
|
228
269
|
type: boolean
|
|
229
270
|
default: false
|
|
230
271
|
mutation_behavior: union
|
|
272
|
+
cli_option: --no-deps
|
|
231
273
|
force_upgrade:
|
|
232
274
|
description: Force upgrade the app even if it is currently being upgraded.
|
|
233
275
|
type: boolean
|
|
234
276
|
default: false
|
|
235
277
|
mutation_behavior: union
|
|
278
|
+
cli_option: --force-upgrade
|
|
236
279
|
persistence:
|
|
237
280
|
description: The persistence mode to deploy the app with. (validation applied)
|
|
238
281
|
type: string
|
|
@@ -243,18 +286,21 @@ properties:
|
|
|
243
286
|
example: postgres
|
|
244
287
|
experimental: true
|
|
245
288
|
mutation_behavior: union
|
|
289
|
+
cli_option: --persistence
|
|
246
290
|
project:
|
|
247
291
|
description: The project name to deploy the app to.
|
|
248
292
|
type: string
|
|
249
293
|
example: my-project
|
|
250
294
|
experimental: true
|
|
251
295
|
mutation_behavior: union
|
|
296
|
+
cli_option: --project
|
|
252
297
|
branch:
|
|
253
298
|
description: The branch name to deploy the app to.
|
|
254
299
|
type: string
|
|
255
300
|
example: main
|
|
256
301
|
experimental: true
|
|
257
302
|
mutation_behavior: union
|
|
303
|
+
cli_option: --branch
|
|
258
304
|
models:
|
|
259
305
|
type: array
|
|
260
306
|
items:
|
|
@@ -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,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ob-metaflow-extensions
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.4.0
|
|
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.
|
|
10
|
+
Requires-Dist: ob-metaflow (==2.17.0.1)
|
|
11
11
|
|
|
12
12
|
# Outerbounds platform package
|
|
13
13
|
|
|
@@ -12,15 +12,15 @@ metaflow_extensions/outerbounds/plugins/apps/consts.py,sha256=iHsyqbUg9k-rgswCs1
|
|
|
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
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=
|
|
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=V0Ki_VwjVIyIa2sgXPC7miOPLYWLrsHvzMpTfQypU2U,42169
|
|
17
17
|
metaflow_extensions/outerbounds/plugins/apps/core/app_config.py,sha256=PHt-HdNfTHIuhY-eB5vkRMp1RKQNWJ4DKdgZWyYgUuc,4167
|
|
18
18
|
metaflow_extensions/outerbounds/plugins/apps/core/artifacts.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
19
|
-
metaflow_extensions/outerbounds/plugins/apps/core/capsule.py,sha256=
|
|
19
|
+
metaflow_extensions/outerbounds/plugins/apps/core/capsule.py,sha256=VpCmq8R13GNex6aTJnOCswkLnc8acgsQQ9Da6KBh2sQ,34732
|
|
20
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=
|
|
21
|
+
metaflow_extensions/outerbounds/plugins/apps/core/config_schema.yaml,sha256=POxm1S9lZB6tO_g9w9gbvna133H5iGYvpVHe247gISY,9697
|
|
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=jeFGAUnFQkBFiOMp_Ls7Ofb80Qogh509suam5sMucYU,3030
|
|
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
|
|
@@ -34,10 +34,10 @@ metaflow_extensions/outerbounds/plugins/apps/core/code_package/examples.py,sha25
|
|
|
34
34
|
metaflow_extensions/outerbounds/plugins/apps/core/config/__init__.py,sha256=ZgC9U4NFu7TNngUuUMzt69PmjMENXb6eUK2HCSroIDo,393
|
|
35
35
|
metaflow_extensions/outerbounds/plugins/apps/core/config/cli_generator.py,sha256=0R0-wy7RxAMR9doVRvuluRYxAYgyjZXlTIkOeYGyz7M,5350
|
|
36
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=
|
|
38
|
-
metaflow_extensions/outerbounds/plugins/apps/core/config/typed_configs.py,sha256=
|
|
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=euoS1Ap4yvHC20Aaj5YQWMgxixkxujVeiJ7C4DcAFhQ,4590
|
|
39
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=
|
|
40
|
+
metaflow_extensions/outerbounds/plugins/apps/core/config/unified_config.py,sha256=bO-g_6mv7xciVcDf4Jn-qioPUUvg9Y3fMM5fcraN2Sk,37018
|
|
41
41
|
metaflow_extensions/outerbounds/plugins/apps/core/experimental/__init__.py,sha256=rd4qGTkHndKYfJmoAKZWiY0KK4j5BK6RBrtle-it1Mg,2746
|
|
42
42
|
metaflow_extensions/outerbounds/plugins/aws/__init__.py,sha256=VBGdjNKeFLXGZuqh4jVk8cFtO1AWof73a6k_cnbAOYA,145
|
|
43
43
|
metaflow_extensions/outerbounds/plugins/aws/assume_role.py,sha256=mBewNlnSYsR2rFXFkX-DUH6ku01h2yOcMcLHoCL7eyI,161
|
|
@@ -124,7 +124,7 @@ metaflow_extensions/outerbounds/toplevel/plugins/ollama/__init__.py,sha256=GRSz2
|
|
|
124
124
|
metaflow_extensions/outerbounds/toplevel/plugins/snowflake/__init__.py,sha256=LptpH-ziXHrednMYUjIaosS1SXD3sOtF_9_eRqd8SJw,50
|
|
125
125
|
metaflow_extensions/outerbounds/toplevel/plugins/torchtune/__init__.py,sha256=uTVkdSk3xZ7hEKYfdlyVteWj5KeDwaM1hU9WT-_YKfI,50
|
|
126
126
|
metaflow_extensions/outerbounds/toplevel/plugins/vllm/__init__.py,sha256=ekcgD3KVydf-a0xMI60P4uy6ePkSEoFHiGnDq1JM940,45
|
|
127
|
-
ob_metaflow_extensions-1.
|
|
128
|
-
ob_metaflow_extensions-1.
|
|
129
|
-
ob_metaflow_extensions-1.
|
|
130
|
-
ob_metaflow_extensions-1.
|
|
127
|
+
ob_metaflow_extensions-1.4.0.dist-info/METADATA,sha256=2BzNOav9XSB5ff7cKCT-z-H_E72u4f3TTFRDws9h8C0,518
|
|
128
|
+
ob_metaflow_extensions-1.4.0.dist-info/WHEEL,sha256=bb2Ot9scclHKMOLDEHY6B2sicWOgugjFKaJsT7vwMQo,110
|
|
129
|
+
ob_metaflow_extensions-1.4.0.dist-info/top_level.txt,sha256=NwG0ukwjygtanDETyp_BUdtYtqIA_lOjzFFh1TsnxvI,20
|
|
130
|
+
ob_metaflow_extensions-1.4.0.dist-info/RECORD,,
|
|
File without changes
|
{ob_metaflow_extensions-1.3.1.dist-info → ob_metaflow_extensions-1.4.0.dist-info}/top_level.txt
RENAMED
|
File without changes
|