ob-metaflow-extensions 1.4.33__py2.py3-none-any.whl → 1.6.2__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.
- metaflow_extensions/outerbounds/plugins/__init__.py +8 -1
- metaflow_extensions/outerbounds/plugins/apps/core/__init__.py +8 -2
- metaflow_extensions/outerbounds/plugins/apps/core/_state_machine.py +6 -6
- metaflow_extensions/outerbounds/plugins/apps/core/app_config.py +1 -19
- metaflow_extensions/outerbounds/plugins/apps/core/app_deploy_decorator.py +333 -0
- metaflow_extensions/outerbounds/plugins/apps/core/capsule.py +150 -79
- metaflow_extensions/outerbounds/plugins/apps/core/config/__init__.py +4 -1
- metaflow_extensions/outerbounds/plugins/apps/core/config/cli_generator.py +4 -0
- metaflow_extensions/outerbounds/plugins/apps/core/config/config_utils.py +103 -5
- metaflow_extensions/outerbounds/plugins/apps/core/config/schema_export.py +12 -1
- metaflow_extensions/outerbounds/plugins/apps/core/config/typed_configs.py +100 -6
- metaflow_extensions/outerbounds/plugins/apps/core/config/typed_init_generator.py +141 -2
- metaflow_extensions/outerbounds/plugins/apps/core/config/unified_config.py +74 -37
- metaflow_extensions/outerbounds/plugins/apps/core/config_schema.yaml +6 -6
- metaflow_extensions/outerbounds/plugins/apps/core/dependencies.py +2 -2
- metaflow_extensions/outerbounds/plugins/apps/core/deployer.py +1102 -105
- metaflow_extensions/outerbounds/plugins/apps/core/exceptions.py +341 -0
- metaflow_extensions/outerbounds/plugins/apps/core/perimeters.py +42 -6
- metaflow_extensions/outerbounds/plugins/aws/assume_role_decorator.py +43 -3
- metaflow_extensions/outerbounds/plugins/fast_bakery/baker.py +10 -1
- metaflow_extensions/outerbounds/plugins/optuna/__init__.py +2 -1
- 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 +39 -15
- metaflow_extensions/outerbounds/plugins/snowpark/snowpark_decorator.py +5 -2
- metaflow_extensions/outerbounds/plugins/snowpark/snowpark_job.py +2 -2
- metaflow_extensions/outerbounds/remote_config.py +20 -7
- metaflow_extensions/outerbounds/toplevel/apps/__init__.py +9 -0
- metaflow_extensions/outerbounds/toplevel/apps/exceptions.py +11 -0
- 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.33.dist-info → ob_metaflow_extensions-1.6.2.dist-info}/METADATA +2 -2
- {ob_metaflow_extensions-1.4.33.dist-info → ob_metaflow_extensions-1.6.2.dist-info}/RECORD +36 -34
- metaflow_extensions/outerbounds/plugins/apps/app_deploy_decorator.py +0 -146
- metaflow_extensions/outerbounds/plugins/apps/core/app_cli.py +0 -1200
- {ob_metaflow_extensions-1.4.33.dist-info → ob_metaflow_extensions-1.6.2.dist-info}/WHEEL +0 -0
- {ob_metaflow_extensions-1.4.33.dist-info → ob_metaflow_extensions-1.6.2.dist-info}/top_level.txt +0 -0
|
@@ -15,6 +15,7 @@ from typing import Any, Dict, List, Optional, Union, Type
|
|
|
15
15
|
import re
|
|
16
16
|
|
|
17
17
|
from .config_utils import (
|
|
18
|
+
ConfigFieldContext,
|
|
18
19
|
ConfigField,
|
|
19
20
|
ConfigMeta,
|
|
20
21
|
JsonFriendlyKeyValuePairType,
|
|
@@ -32,12 +33,38 @@ from .config_utils import (
|
|
|
32
33
|
commit_owner_names_across_tree,
|
|
33
34
|
)
|
|
34
35
|
|
|
36
|
+
from collections import namedtuple
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# Result of image baking operation
|
|
40
|
+
# - image: The fully qualified Docker image URL
|
|
41
|
+
# - python_path: Path to the Python executable in the baked image
|
|
42
|
+
BakedImage = namedtuple("BakedImage", ["image", "python_path"])
|
|
43
|
+
|
|
44
|
+
# Result of code packaging operation
|
|
45
|
+
# - url: The package URL in object storage
|
|
46
|
+
# - key: Unique content-addressed key identifying this package
|
|
47
|
+
PackagedCode = namedtuple("PackagedCode", ["url", "key"])
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class classproperty(property):
|
|
51
|
+
def __get__(self, owner_self, owner_cls):
|
|
52
|
+
return self.fget(owner_cls)
|
|
53
|
+
|
|
35
54
|
|
|
36
55
|
class AuthType:
|
|
37
56
|
BROWSER = "Browser"
|
|
38
57
|
API = "API"
|
|
39
58
|
BROWSER_AND_API = "BrowserAndApi"
|
|
40
59
|
|
|
60
|
+
@classmethod
|
|
61
|
+
def enums(cls):
|
|
62
|
+
return [cls.BROWSER, cls.API, cls.BROWSER_AND_API]
|
|
63
|
+
|
|
64
|
+
@classproperty
|
|
65
|
+
def default(cls):
|
|
66
|
+
return cls.BROWSER
|
|
67
|
+
|
|
41
68
|
@classmethod
|
|
42
69
|
def choices(cls):
|
|
43
70
|
return [cls.BROWSER, cls.API, cls.BROWSER_AND_API]
|
|
@@ -180,9 +207,9 @@ class ResourceConfig(metaclass=ConfigMeta):
|
|
|
180
207
|
cli_meta=CLIOption(
|
|
181
208
|
name="cpu",
|
|
182
209
|
cli_option_str="--cpu",
|
|
183
|
-
help="CPU resource request and limit.",
|
|
184
210
|
),
|
|
185
211
|
field_type=str,
|
|
212
|
+
help="CPU requests",
|
|
186
213
|
example="500m",
|
|
187
214
|
validation_fn=UnitParser.validation_wrapper_fn("cpu"),
|
|
188
215
|
parsing_fn=UnitParser("cpu").parse,
|
|
@@ -192,9 +219,9 @@ class ResourceConfig(metaclass=ConfigMeta):
|
|
|
192
219
|
cli_meta=CLIOption(
|
|
193
220
|
name="memory",
|
|
194
221
|
cli_option_str="--memory",
|
|
195
|
-
help="Memory resource request and limit.",
|
|
196
222
|
),
|
|
197
223
|
field_type=str,
|
|
224
|
+
help="Memory requests",
|
|
198
225
|
example="512Mi",
|
|
199
226
|
validation_fn=UnitParser.validation_wrapper_fn("memory"),
|
|
200
227
|
parsing_fn=UnitParser("memory").parse,
|
|
@@ -203,9 +230,9 @@ class ResourceConfig(metaclass=ConfigMeta):
|
|
|
203
230
|
cli_meta=CLIOption(
|
|
204
231
|
name="gpu",
|
|
205
232
|
cli_option_str="--gpu",
|
|
206
|
-
help="GPU resource request and limit.",
|
|
207
233
|
),
|
|
208
234
|
field_type=str,
|
|
235
|
+
help="GPU requests",
|
|
209
236
|
example="1",
|
|
210
237
|
validation_fn=UnitParser.validation_wrapper_fn("gpu"),
|
|
211
238
|
parsing_fn=UnitParser("gpu").parse,
|
|
@@ -215,9 +242,9 @@ class ResourceConfig(metaclass=ConfigMeta):
|
|
|
215
242
|
cli_meta=CLIOption(
|
|
216
243
|
name="disk",
|
|
217
244
|
cli_option_str="--disk",
|
|
218
|
-
help="Storage resource request and limit.",
|
|
219
245
|
),
|
|
220
246
|
field_type=str,
|
|
247
|
+
help="Storage disk size.",
|
|
221
248
|
example="1Gi",
|
|
222
249
|
validation_fn=UnitParser.validation_wrapper_fn("disk"),
|
|
223
250
|
parsing_fn=UnitParser("disk").parse,
|
|
@@ -227,9 +254,9 @@ class ResourceConfig(metaclass=ConfigMeta):
|
|
|
227
254
|
cli_meta=CLIOption(
|
|
228
255
|
name="shared_memory",
|
|
229
256
|
cli_option_str="--shared-memory",
|
|
230
|
-
help="Shared memory resource request and limit.",
|
|
231
257
|
),
|
|
232
258
|
field_type=str,
|
|
259
|
+
help="Shared memory",
|
|
233
260
|
example="1Gi",
|
|
234
261
|
validation_fn=UnitParser.validation_wrapper_fn("memory"),
|
|
235
262
|
parsing_fn=UnitParser("memory").parse,
|
|
@@ -244,37 +271,37 @@ class HealthCheckConfig(metaclass=ConfigMeta):
|
|
|
244
271
|
cli_meta=CLIOption(
|
|
245
272
|
name="health_check_enabled",
|
|
246
273
|
cli_option_str="--health-check-enabled",
|
|
247
|
-
help="Whether to enable health checks.",
|
|
248
274
|
is_flag=True,
|
|
249
275
|
),
|
|
250
276
|
field_type=bool,
|
|
277
|
+
help="Whether to enable health checks.",
|
|
251
278
|
example=True,
|
|
252
279
|
)
|
|
253
280
|
path = ConfigField(
|
|
254
281
|
cli_meta=CLIOption(
|
|
255
282
|
name="health_check_path",
|
|
256
283
|
cli_option_str="--health-check-path",
|
|
257
|
-
help="The path for health checks.",
|
|
258
284
|
),
|
|
259
285
|
field_type=str,
|
|
286
|
+
help="The path for health checks.",
|
|
260
287
|
example="/health",
|
|
261
288
|
)
|
|
262
289
|
initial_delay_seconds = ConfigField(
|
|
263
290
|
cli_meta=CLIOption(
|
|
264
291
|
name="health_check_initial_delay",
|
|
265
292
|
cli_option_str="--health-check-initial-delay",
|
|
266
|
-
help="Number of seconds to wait before performing the first health check.",
|
|
267
293
|
),
|
|
268
294
|
field_type=int,
|
|
295
|
+
help="Number of seconds to wait before performing the first health check.",
|
|
269
296
|
example=10,
|
|
270
297
|
)
|
|
271
298
|
period_seconds = ConfigField(
|
|
272
299
|
cli_meta=CLIOption(
|
|
273
300
|
name="health_check_period",
|
|
274
301
|
cli_option_str="--health-check-period",
|
|
275
|
-
help="How often to perform the health check.",
|
|
276
302
|
),
|
|
277
303
|
field_type=int,
|
|
304
|
+
help="How often to perform the health check.",
|
|
278
305
|
example=30,
|
|
279
306
|
)
|
|
280
307
|
|
|
@@ -287,10 +314,10 @@ class AuthConfig(metaclass=ConfigMeta):
|
|
|
287
314
|
cli_meta=CLIOption(
|
|
288
315
|
name="auth_type",
|
|
289
316
|
cli_option_str="--auth-type",
|
|
290
|
-
help="The type of authentication to use for the app.",
|
|
291
317
|
choices=AuthType.choices(),
|
|
292
318
|
),
|
|
293
319
|
field_type=str,
|
|
320
|
+
help="The type of authentication to use for the app.",
|
|
294
321
|
example="Browser",
|
|
295
322
|
)
|
|
296
323
|
public = ConfigField(
|
|
@@ -298,10 +325,10 @@ class AuthConfig(metaclass=ConfigMeta):
|
|
|
298
325
|
cli_meta=CLIOption(
|
|
299
326
|
name="auth_public",
|
|
300
327
|
cli_option_str="--public-access/--private-access",
|
|
301
|
-
help="Whether the app is public or not.",
|
|
302
328
|
is_flag=True,
|
|
303
329
|
),
|
|
304
330
|
field_type=bool,
|
|
331
|
+
help="Whether the app is public or not.",
|
|
305
332
|
example=True,
|
|
306
333
|
)
|
|
307
334
|
|
|
@@ -323,15 +350,14 @@ class ScalingPolicyConfig(metaclass=ConfigMeta):
|
|
|
323
350
|
# TODO Change the defaulting if we have more autoscaling policies.
|
|
324
351
|
rpm = ConfigField(
|
|
325
352
|
field_type=int,
|
|
326
|
-
# TODO: Add a little more to the docstring where we explain the behavior.
|
|
327
353
|
cli_meta=CLIOption(
|
|
328
354
|
name="scaling_rpm",
|
|
329
355
|
cli_option_str="--scaling-rpm",
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
356
|
+
),
|
|
357
|
+
help=(
|
|
358
|
+
"Scale up replicas when the requests per minute crosses this threshold. "
|
|
359
|
+
"If nothing is provided and the replicas.max and replicas.min is set then "
|
|
360
|
+
"the default rpm would be 60."
|
|
335
361
|
),
|
|
336
362
|
default=60,
|
|
337
363
|
)
|
|
@@ -344,9 +370,9 @@ class ReplicaConfig(metaclass=ConfigMeta):
|
|
|
344
370
|
cli_meta=CLIOption(
|
|
345
371
|
name="fixed_replicas",
|
|
346
372
|
cli_option_str="--fixed-replicas",
|
|
347
|
-
help="The fixed number of replicas to deploy the app with. If min and max are set, this will raise an error.",
|
|
348
373
|
),
|
|
349
374
|
field_type=int,
|
|
375
|
+
help="The fixed number of replicas to deploy the app with. If min and max are set, this will raise an error.",
|
|
350
376
|
example=1,
|
|
351
377
|
)
|
|
352
378
|
|
|
@@ -354,18 +380,18 @@ class ReplicaConfig(metaclass=ConfigMeta):
|
|
|
354
380
|
cli_meta=CLIOption(
|
|
355
381
|
name="min_replicas",
|
|
356
382
|
cli_option_str="--min-replicas",
|
|
357
|
-
help="The minimum number of replicas to deploy the app with.",
|
|
358
383
|
),
|
|
359
384
|
field_type=int,
|
|
385
|
+
help="The minimum number of replicas to deploy the app with.",
|
|
360
386
|
example=1,
|
|
361
387
|
)
|
|
362
388
|
max = ConfigField(
|
|
363
389
|
cli_meta=CLIOption(
|
|
364
390
|
name="max_replicas",
|
|
365
391
|
cli_option_str="--max-replicas",
|
|
366
|
-
help="The maximum number of replicas to deploy the app with.",
|
|
367
392
|
),
|
|
368
393
|
field_type=int,
|
|
394
|
+
help="The maximum number of replicas to deploy the app with.",
|
|
369
395
|
example=10,
|
|
370
396
|
)
|
|
371
397
|
|
|
@@ -470,9 +496,9 @@ class DependencyConfig(metaclass=ConfigMeta):
|
|
|
470
496
|
cli_meta=CLIOption(
|
|
471
497
|
name="dep_from_requirements",
|
|
472
498
|
cli_option_str="--dep-from-requirements",
|
|
473
|
-
help="The path to the requirements.txt file to attach to the app.",
|
|
474
499
|
),
|
|
475
500
|
field_type=str,
|
|
501
|
+
help="The path to the requirements.txt file to attach to the app.",
|
|
476
502
|
behavior=FieldBehavior.NOT_ALLOWED,
|
|
477
503
|
example="requirements.txt",
|
|
478
504
|
)
|
|
@@ -480,9 +506,9 @@ class DependencyConfig(metaclass=ConfigMeta):
|
|
|
480
506
|
cli_meta=CLIOption(
|
|
481
507
|
name="dep_from_pyproject",
|
|
482
508
|
cli_option_str="--dep-from-pyproject",
|
|
483
|
-
help="The path to the pyproject.toml file to attach to the app.",
|
|
484
509
|
),
|
|
485
510
|
field_type=str,
|
|
511
|
+
help="The path to the pyproject.toml file to attach to the app.",
|
|
486
512
|
behavior=FieldBehavior.NOT_ALLOWED,
|
|
487
513
|
example="pyproject.toml",
|
|
488
514
|
)
|
|
@@ -490,9 +516,9 @@ class DependencyConfig(metaclass=ConfigMeta):
|
|
|
490
516
|
cli_meta=CLIOption(
|
|
491
517
|
name="python",
|
|
492
518
|
cli_option_str="--python",
|
|
493
|
-
help="The Python version to use for the app.",
|
|
494
519
|
),
|
|
495
520
|
field_type=str,
|
|
521
|
+
help="The Python version to use for the app.",
|
|
496
522
|
behavior=FieldBehavior.UNION,
|
|
497
523
|
example="3.10",
|
|
498
524
|
)
|
|
@@ -500,10 +526,10 @@ class DependencyConfig(metaclass=ConfigMeta):
|
|
|
500
526
|
cli_meta=CLIOption(
|
|
501
527
|
name="pypi", # TODO: Can set CLI meta to None
|
|
502
528
|
cli_option_str="--pypi",
|
|
503
|
-
help="A dictionary of pypi dependencies to attach to the app. The key is the package name and the value is the version.",
|
|
504
529
|
hidden=True, # Complex structure, better handled in config file
|
|
505
530
|
),
|
|
506
531
|
field_type=dict,
|
|
532
|
+
help="A dictionary of pypi dependencies to attach to the app. The key is the package name and the value is the version.",
|
|
507
533
|
behavior=FieldBehavior.NOT_ALLOWED,
|
|
508
534
|
example={"numpy": "1.23.0", "pandas": ""},
|
|
509
535
|
)
|
|
@@ -511,10 +537,10 @@ class DependencyConfig(metaclass=ConfigMeta):
|
|
|
511
537
|
cli_meta=CLIOption( # TODO: Can set CLI meta to None
|
|
512
538
|
name="conda",
|
|
513
539
|
cli_option_str="--conda",
|
|
514
|
-
help="A dictionary of conda dependencies to attach to the app. The key is the package name and the value is the version.",
|
|
515
540
|
hidden=True, # Complex structure, better handled in config file
|
|
516
541
|
),
|
|
517
542
|
field_type=dict,
|
|
543
|
+
help="A dictionary of conda dependencies to attach to the app. The key is the package name and the value is the version.",
|
|
518
544
|
behavior=FieldBehavior.NOT_ALLOWED,
|
|
519
545
|
example={"numpy": "1.23.0", "pandas": ""},
|
|
520
546
|
)
|
|
@@ -559,19 +585,19 @@ class PackageConfig(metaclass=ConfigMeta):
|
|
|
559
585
|
name="package_src_path",
|
|
560
586
|
cli_option_str="--package-src-path",
|
|
561
587
|
multiple=True,
|
|
562
|
-
help="The path to the source code to deploy with the App.",
|
|
563
588
|
click_type=str,
|
|
564
589
|
),
|
|
565
590
|
field_type=list,
|
|
591
|
+
help="The path to the source code to deploy with the App.",
|
|
566
592
|
example=["./"],
|
|
567
593
|
)
|
|
568
594
|
suffixes = ConfigField(
|
|
569
595
|
cli_meta=CLIOption(
|
|
570
596
|
name="package_suffixes",
|
|
571
597
|
cli_option_str="--package-suffixes",
|
|
572
|
-
help="A list of suffixes to add to the source code to deploy with the App.",
|
|
573
598
|
),
|
|
574
599
|
field_type=list,
|
|
600
|
+
help="A list of suffixes to add to the source code to deploy with the App.",
|
|
575
601
|
example=[".py", ".ipynb"],
|
|
576
602
|
)
|
|
577
603
|
|
|
@@ -609,7 +635,7 @@ class BasicAppValidations:
|
|
|
609
635
|
return True
|
|
610
636
|
regex = r"^[a-z0-9-]+$" # Only allow lowercase letters, numbers, and hyphens
|
|
611
637
|
validator = BasicValidations(CoreConfig, "name")
|
|
612
|
-
return validator.length_validation(
|
|
638
|
+
return validator.length_validation(150, name) and validator.regex_validation(
|
|
613
639
|
regex, name
|
|
614
640
|
)
|
|
615
641
|
|
|
@@ -778,27 +804,27 @@ How to read this schema:
|
|
|
778
804
|
cli_meta=CLIOption(
|
|
779
805
|
name="description",
|
|
780
806
|
cli_option_str="--description",
|
|
781
|
-
help="The description of the app to deploy.",
|
|
782
807
|
),
|
|
783
808
|
field_type=str,
|
|
809
|
+
help="The description of the app to deploy.",
|
|
784
810
|
example="This is a description of my app.",
|
|
785
811
|
)
|
|
786
812
|
app_type = ConfigField(
|
|
787
813
|
cli_meta=CLIOption(
|
|
788
814
|
name="app_type",
|
|
789
815
|
cli_option_str="--app-type",
|
|
790
|
-
help="The User defined type of app to deploy. Its only used for bookkeeping purposes.",
|
|
791
816
|
),
|
|
792
817
|
field_type=str,
|
|
818
|
+
help="The User defined type of app to deploy. Its only used for bookkeeping purposes.",
|
|
793
819
|
example="MyCustomAgent",
|
|
794
820
|
)
|
|
795
821
|
image = ConfigField(
|
|
796
822
|
cli_meta=CLIOption(
|
|
797
823
|
name="image",
|
|
798
824
|
cli_option_str="--image",
|
|
799
|
-
help="The Docker image to deploy with the App.",
|
|
800
825
|
),
|
|
801
826
|
field_type=str,
|
|
827
|
+
help="The Docker image to deploy with the App.",
|
|
802
828
|
example="python:3.10-slim",
|
|
803
829
|
)
|
|
804
830
|
|
|
@@ -828,11 +854,11 @@ How to read this schema:
|
|
|
828
854
|
cli_meta=CLIOption(
|
|
829
855
|
name="compute_pools",
|
|
830
856
|
cli_option_str="--compute-pools",
|
|
831
|
-
help="A list of compute pools to deploy the app to.",
|
|
832
857
|
multiple=True,
|
|
833
858
|
click_type=str,
|
|
834
859
|
),
|
|
835
860
|
field_type=list,
|
|
861
|
+
help="A list of compute pools to deploy the app to.",
|
|
836
862
|
example=["default", "large"],
|
|
837
863
|
)
|
|
838
864
|
environment = ConfigField(
|
|
@@ -883,6 +909,7 @@ How to read this schema:
|
|
|
883
909
|
cli_meta=None, # No top-level CLI option, only nested fields have CLI options
|
|
884
910
|
validation_fn=DependencyConfig.validate,
|
|
885
911
|
field_type=DependencyConfig,
|
|
912
|
+
available_in=ConfigFieldContext.CLI,
|
|
886
913
|
help="The dependencies to attach to the app. ",
|
|
887
914
|
)
|
|
888
915
|
package = ConfigField(
|
|
@@ -890,6 +917,16 @@ How to read this schema:
|
|
|
890
917
|
field_type=PackageConfig,
|
|
891
918
|
help="Configurations associated with packaging the app.",
|
|
892
919
|
validation_fn=PackageConfig.validate,
|
|
920
|
+
available_in=ConfigFieldContext.CLI,
|
|
921
|
+
)
|
|
922
|
+
|
|
923
|
+
# Programmatic-only field for pre-packaged code
|
|
924
|
+
code_package = ConfigField(
|
|
925
|
+
cli_meta=None,
|
|
926
|
+
field_type=tuple, # PackagedCode is a namedtuple (tuple subclass)
|
|
927
|
+
strict_types=False, # Accept PackagedCode namedtuple from package_code()
|
|
928
|
+
available_in=ConfigFieldContext.PROGRAMMATIC,
|
|
929
|
+
help="Pre-packaged code from package_code(). A PackagedCode namedtuple containing url and key.",
|
|
893
930
|
)
|
|
894
931
|
|
|
895
932
|
no_deps = ConfigField(
|
|
@@ -899,6 +936,7 @@ How to read this schema:
|
|
|
899
936
|
help="Do not any dependencies. Directly used the image provided",
|
|
900
937
|
is_flag=True,
|
|
901
938
|
),
|
|
939
|
+
available_in=ConfigFieldContext.CLI,
|
|
902
940
|
field_type=bool,
|
|
903
941
|
default=False,
|
|
904
942
|
help="Do not bake any dependencies. Directly used the image provided",
|
|
@@ -925,11 +963,11 @@ How to read this schema:
|
|
|
925
963
|
cli_meta=CLIOption(
|
|
926
964
|
name="persistence",
|
|
927
965
|
cli_option_str="--persistence",
|
|
928
|
-
help="The persistence mode to deploy the app with.",
|
|
929
966
|
choices=["none", "postgres"],
|
|
930
967
|
),
|
|
931
968
|
validation_fn=BasicAppValidations.persistence,
|
|
932
969
|
field_type=str,
|
|
970
|
+
help="The persistence mode to deploy the app with.",
|
|
933
971
|
default="none",
|
|
934
972
|
example="postgres",
|
|
935
973
|
is_experimental=True,
|
|
@@ -939,9 +977,9 @@ How to read this schema:
|
|
|
939
977
|
cli_meta=CLIOption(
|
|
940
978
|
name="project",
|
|
941
979
|
cli_option_str="--project",
|
|
942
|
-
help="The project name to deploy the app to.",
|
|
943
980
|
),
|
|
944
981
|
field_type=str,
|
|
982
|
+
help="The project name to deploy the app to.",
|
|
945
983
|
is_experimental=True,
|
|
946
984
|
example="my-project",
|
|
947
985
|
)
|
|
@@ -949,9 +987,9 @@ How to read this schema:
|
|
|
949
987
|
cli_meta=CLIOption(
|
|
950
988
|
name="branch",
|
|
951
989
|
cli_option_str="--branch",
|
|
952
|
-
help="The branch name to deploy the app to.",
|
|
953
990
|
),
|
|
954
991
|
field_type=str,
|
|
992
|
+
help="The branch name to deploy the app to.",
|
|
955
993
|
is_experimental=True,
|
|
956
994
|
example="main",
|
|
957
995
|
)
|
|
@@ -971,12 +1009,11 @@ How to read this schema:
|
|
|
971
1009
|
cli_meta=CLIOption(
|
|
972
1010
|
name="generate_static_url",
|
|
973
1011
|
cli_option_str="--generate-static-url",
|
|
974
|
-
help="Generate a static URL for the app based on its name.",
|
|
975
1012
|
is_flag=True,
|
|
976
1013
|
),
|
|
977
1014
|
field_type=bool,
|
|
978
|
-
default=False,
|
|
979
1015
|
help="Generate a static URL for the app based on its name.",
|
|
1016
|
+
default=False,
|
|
980
1017
|
)
|
|
981
1018
|
# ------- /Experimental -------------
|
|
982
1019
|
|
|
@@ -103,34 +103,34 @@ properties:
|
|
|
103
103
|
required: []
|
|
104
104
|
properties:
|
|
105
105
|
cpu:
|
|
106
|
-
description: CPU
|
|
106
|
+
description: CPU requests (validation applied)
|
|
107
107
|
type: string
|
|
108
108
|
default: '1'
|
|
109
109
|
example: 500m
|
|
110
110
|
mutation_behavior: union
|
|
111
111
|
cli_option: --cpu
|
|
112
112
|
memory:
|
|
113
|
-
description: Memory
|
|
113
|
+
description: Memory requests (validation applied)
|
|
114
114
|
type: string
|
|
115
115
|
default: 4Gi
|
|
116
116
|
example: 512Mi
|
|
117
117
|
mutation_behavior: union
|
|
118
118
|
cli_option: --memory
|
|
119
119
|
gpu:
|
|
120
|
-
description: GPU
|
|
120
|
+
description: GPU requests (validation applied)
|
|
121
121
|
type: string
|
|
122
122
|
example: '1'
|
|
123
123
|
mutation_behavior: union
|
|
124
124
|
cli_option: --gpu
|
|
125
125
|
disk:
|
|
126
|
-
description: Storage
|
|
126
|
+
description: Storage disk size. (validation applied)
|
|
127
127
|
type: string
|
|
128
128
|
default: 20Gi
|
|
129
129
|
example: 1Gi
|
|
130
130
|
mutation_behavior: union
|
|
131
131
|
cli_option: --disk
|
|
132
132
|
shared_memory:
|
|
133
|
-
description: Shared memory
|
|
133
|
+
description: Shared memory (validation applied)
|
|
134
134
|
type: string
|
|
135
135
|
example: 1Gi
|
|
136
136
|
mutation_behavior: union
|
|
@@ -196,7 +196,7 @@ properties:
|
|
|
196
196
|
properties:
|
|
197
197
|
rpm:
|
|
198
198
|
description: |-
|
|
199
|
-
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
|
|
199
|
+
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.
|
|
200
200
|
type: integer
|
|
201
201
|
default: 60
|
|
202
202
|
mutation_behavior: union
|
|
@@ -43,7 +43,7 @@ def bake_deployment_image(
|
|
|
43
43
|
# 1. When the user has specified something like `pypi`/`conda`
|
|
44
44
|
# 2, When the user has specified something like `from_requirements`/ `from_pyproject`
|
|
45
45
|
# TODO: add parsers for the pyproject/requirements stuff.
|
|
46
|
-
from metaflow.ob_internal import
|
|
46
|
+
from metaflow.ob_internal import internal_bake_image # type: ignore
|
|
47
47
|
from metaflow.plugins.pypi.parsers import (
|
|
48
48
|
requirements_txt_parser,
|
|
49
49
|
pyproject_toml_parser,
|
|
@@ -96,7 +96,7 @@ def bake_deployment_image(
|
|
|
96
96
|
pypi_packages.update(pinned_conda_libs)
|
|
97
97
|
_reference = app_config.get("name", "default")
|
|
98
98
|
# `image` cannot be None. If by chance it is none, FB will fart.
|
|
99
|
-
fb_response =
|
|
99
|
+
fb_response = internal_bake_image(
|
|
100
100
|
cache_file_path=cache_file_path,
|
|
101
101
|
pypi_packages=pypi_packages,
|
|
102
102
|
conda_packages=conda_packages,
|