ob-metaflow-extensions 1.1.157__tar.gz → 1.1.159__tar.gz

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.

Files changed (84) hide show
  1. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/PKG-INFO +1 -1
  2. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/__init__.py +1 -1
  3. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/ollama/__init__.py +32 -13
  4. ob-metaflow-extensions-1.1.159/metaflow_extensions/outerbounds/plugins/ollama/constants.py +1 -0
  5. ob-metaflow-extensions-1.1.159/metaflow_extensions/outerbounds/plugins/ollama/exceptions.py +22 -0
  6. ob-metaflow-extensions-1.1.159/metaflow_extensions/outerbounds/plugins/ollama/ollama.py +813 -0
  7. ob-metaflow-extensions-1.1.159/metaflow_extensions/outerbounds/plugins/torchtune/__init__.py +159 -0
  8. ob-metaflow-extensions-1.1.159/metaflow_extensions/outerbounds/toplevel/plugins/torchtune/__init__.py +1 -0
  9. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/ob_metaflow_extensions.egg-info/PKG-INFO +1 -1
  10. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/ob_metaflow_extensions.egg-info/SOURCES.txt +4 -0
  11. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/setup.py +1 -1
  12. ob-metaflow-extensions-1.1.157/metaflow_extensions/outerbounds/plugins/ollama/ollama.py +0 -328
  13. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/README.md +0 -0
  14. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/__init__.py +0 -0
  15. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/config/__init__.py +0 -0
  16. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/apps/__init__.py +0 -0
  17. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/apps/app_utils.py +0 -0
  18. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/apps/consts.py +0 -0
  19. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/apps/deploy_decorator.py +0 -0
  20. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/apps/supervisord_utils.py +0 -0
  21. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/auth_server.py +0 -0
  22. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/card_utilities/__init__.py +0 -0
  23. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/card_utilities/async_cards.py +0 -0
  24. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/card_utilities/extra_components.py +0 -0
  25. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/card_utilities/injector.py +0 -0
  26. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/checkpoint_datastores/__init__.py +0 -0
  27. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/checkpoint_datastores/coreweave.py +0 -0
  28. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/checkpoint_datastores/nebius.py +0 -0
  29. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/fast_bakery/__init__.py +0 -0
  30. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/fast_bakery/docker_environment.py +0 -0
  31. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/fast_bakery/fast_bakery.py +0 -0
  32. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/fast_bakery/fast_bakery_cli.py +0 -0
  33. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/fast_bakery/fast_bakery_decorator.py +0 -0
  34. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/kubernetes/__init__.py +0 -0
  35. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/kubernetes/kubernetes_client.py +0 -0
  36. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/nim/card.py +0 -0
  37. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/nim/nim_decorator.py +0 -0
  38. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/nim/nim_manager.py +0 -0
  39. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/nim/utils.py +0 -0
  40. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/nvcf/__init__.py +0 -0
  41. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/nvcf/constants.py +0 -0
  42. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/nvcf/exceptions.py +0 -0
  43. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/nvcf/heartbeat_store.py +0 -0
  44. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/nvcf/nvcf.py +0 -0
  45. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/nvcf/nvcf_cli.py +0 -0
  46. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/nvcf/nvcf_decorator.py +0 -0
  47. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/nvcf/utils.py +0 -0
  48. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/nvct/__init__.py +0 -0
  49. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/nvct/exceptions.py +0 -0
  50. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/nvct/nvct.py +0 -0
  51. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/nvct/nvct_cli.py +0 -0
  52. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/nvct/nvct_decorator.py +0 -0
  53. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/nvct/nvct_runner.py +0 -0
  54. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/nvct/utils.py +0 -0
  55. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/perimeters.py +0 -0
  56. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/profilers/deco_injector.py +0 -0
  57. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/profilers/gpu_profile_decorator.py +0 -0
  58. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/secrets/__init__.py +0 -0
  59. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/secrets/secrets.py +0 -0
  60. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/snowflake/__init__.py +0 -0
  61. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/snowflake/snowflake.py +0 -0
  62. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/snowpark/__init__.py +0 -0
  63. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark.py +0 -0
  64. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_cli.py +0 -0
  65. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_client.py +0 -0
  66. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_decorator.py +0 -0
  67. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_exceptions.py +0 -0
  68. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_job.py +0 -0
  69. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_service_spec.py +0 -0
  70. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/plugins/tensorboard/__init__.py +0 -0
  71. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/profilers/__init__.py +0 -0
  72. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/profilers/gpu.py +0 -0
  73. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/remote_config.py +0 -0
  74. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/toplevel/__init__.py +0 -0
  75. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/toplevel/global_aliases_for_metaflow_package.py +0 -0
  76. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/toplevel/plugins/azure/__init__.py +0 -0
  77. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/toplevel/plugins/gcp/__init__.py +0 -0
  78. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/toplevel/plugins/kubernetes/__init__.py +0 -0
  79. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/toplevel/plugins/ollama/__init__.py +0 -0
  80. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/metaflow_extensions/outerbounds/toplevel/plugins/snowflake/__init__.py +0 -0
  81. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/ob_metaflow_extensions.egg-info/dependency_links.txt +0 -0
  82. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/ob_metaflow_extensions.egg-info/requires.txt +0 -0
  83. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/ob_metaflow_extensions.egg-info/top_level.txt +0 -0
  84. {ob-metaflow-extensions-1.1.157 → ob-metaflow-extensions-1.1.159}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ob-metaflow-extensions
3
- Version: 1.1.157
3
+ Version: 1.1.159
4
4
  Summary: Outerbounds Platform Extensions for Metaflow
5
5
  Author: Outerbounds, Inc.
6
6
  License: Commercial
@@ -347,4 +347,4 @@ SECRETS_PROVIDERS_DESC = [
347
347
  ("outerbounds", ".secrets.secrets.OuterboundsSecretsProvider"),
348
348
  ]
349
349
  # Adding an override here so the library can be imported at the metaflow.plugins level
350
- __mf_promote_submodules__ = ["snowflake", "ollama"]
350
+ __mf_promote_submodules__ = ["snowflake", "ollama", "torchtune"]
@@ -1,6 +1,7 @@
1
1
  from metaflow.decorators import StepDecorator
2
2
  from metaflow import current
3
3
  import functools
4
+ import os
4
5
 
5
6
  from .ollama import OllamaManager
6
7
  from ..card_utilities.injector import CardDecoratorInjector
@@ -13,10 +14,10 @@ class OllamaDecorator(StepDecorator, CardDecoratorInjector):
13
14
  This decorator is used to run Ollama APIs as Metaflow task sidecars.
14
15
 
15
16
  User code call
16
- -----------
17
+ --------------
17
18
  @ollama(
18
- models=['meta/llama3-8b-instruct', 'meta/llama3-70b-instruct'],
19
- backend='local'
19
+ models=[...],
20
+ ...
20
21
  )
21
22
 
22
23
  Valid backend options
@@ -26,21 +27,39 @@ class OllamaDecorator(StepDecorator, CardDecoratorInjector):
26
27
  - (TODO) 'remote': Spin up separate instance to serve Ollama models.
27
28
 
28
29
  Valid model options
29
- ----------------
30
- - 'llama3.2'
31
- - 'llama3.3'
32
- - any model here https://ollama.com/search
30
+ -------------------
31
+ Any model here https://ollama.com/search, e.g. 'llama3.2', 'llama3.3'
33
32
 
34
33
  Parameters
35
34
  ----------
36
- models: list[Ollama]
35
+ models: list[str]
37
36
  List of Ollama containers running models in sidecars.
38
37
  backend: str
39
38
  Determines where and how to run the Ollama process.
39
+ force_pull: bool
40
+ Whether to run `ollama pull` no matter what, or first check the remote cache in Metaflow datastore for this model key.
41
+ skip_push_check: bool
42
+ Whether to skip the check that populates/overwrites remote cache on terminating an ollama model.
43
+ debug: bool
44
+ Whether to turn on verbose debugging logs.
40
45
  """
41
46
 
42
47
  name = "ollama"
43
- defaults = {"models": [], "backend": "local", "debug": False}
48
+ defaults = {
49
+ "models": [],
50
+ "backend": "local",
51
+ "force_pull": False,
52
+ "skip_push_check": False,
53
+ "debug": False,
54
+ }
55
+
56
+ def step_init(
57
+ self, flow, graph, step_name, decorators, environment, flow_datastore, logger
58
+ ):
59
+ super().step_init(
60
+ flow, graph, step_name, decorators, environment, flow_datastore, logger
61
+ )
62
+ self.flow_datastore_backend = flow_datastore._storage_impl
44
63
 
45
64
  def task_decorate(
46
65
  self, step_func, flow, graph, retry_count, max_user_code_retries, ubf_context
@@ -51,6 +70,9 @@ class OllamaDecorator(StepDecorator, CardDecoratorInjector):
51
70
  self.ollama_manager = OllamaManager(
52
71
  models=self.attributes["models"],
53
72
  backend=self.attributes["backend"],
73
+ flow_datastore_backend=self.flow_datastore_backend,
74
+ force_pull=self.attributes["force_pull"],
75
+ skip_push_check=self.attributes["skip_push_check"],
54
76
  debug=self.attributes["debug"],
55
77
  )
56
78
  except Exception as e:
@@ -59,10 +81,7 @@ class OllamaDecorator(StepDecorator, CardDecoratorInjector):
59
81
  try:
60
82
  step_func()
61
83
  finally:
62
- try:
63
- self.ollama_manager.terminate_models()
64
- except Exception as term_e:
65
- print(f"[@ollama] Error during sidecar termination: {term_e}")
84
+ self.ollama_manager.terminate_models()
66
85
  if self.attributes["debug"]:
67
86
  print(f"[@ollama] process statuses: {self.ollama_manager.processes}")
68
87
  print(f"[@ollama] process runtime stats: {self.ollama_manager.stats}")
@@ -0,0 +1,22 @@
1
+ from metaflow.exception import MetaflowException
2
+
3
+
4
+ class UnspecifiedRemoteStorageRootException(MetaflowException):
5
+ headline = "Storage root not specified."
6
+
7
+ def __init__(self, message):
8
+ super(UnspecifiedRemoteStorageRootException, self).__init__(message)
9
+
10
+
11
+ class EmptyOllamaManifestCacheException(MetaflowException):
12
+ headline = "Model not found."
13
+
14
+ def __init__(self, message):
15
+ super(EmptyOllamaManifestCacheException, self).__init__(message)
16
+
17
+
18
+ class EmptyOllamaBlobCacheException(MetaflowException):
19
+ headline = "Blob not found."
20
+
21
+ def __init__(self, message):
22
+ super(EmptyOllamaBlobCacheException, self).__init__(message)