ob-metaflow-extensions 1.1.156__tar.gz → 1.1.158__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.
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/PKG-INFO +1 -1
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/nim/nim_manager.py +77 -16
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/ollama/__init__.py +32 -13
- ob-metaflow-extensions-1.1.158/metaflow_extensions/outerbounds/plugins/ollama/constants.py +1 -0
- ob-metaflow-extensions-1.1.158/metaflow_extensions/outerbounds/plugins/ollama/exceptions.py +22 -0
- ob-metaflow-extensions-1.1.158/metaflow_extensions/outerbounds/plugins/ollama/ollama.py +813 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/ob_metaflow_extensions.egg-info/PKG-INFO +1 -1
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/ob_metaflow_extensions.egg-info/SOURCES.txt +2 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/setup.py +1 -1
- ob-metaflow-extensions-1.1.156/metaflow_extensions/outerbounds/plugins/ollama/ollama.py +0 -328
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/README.md +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/config/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/apps/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/apps/app_utils.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/apps/consts.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/apps/deploy_decorator.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/apps/supervisord_utils.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/auth_server.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/card_utilities/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/card_utilities/async_cards.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/card_utilities/extra_components.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/card_utilities/injector.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/checkpoint_datastores/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/checkpoint_datastores/coreweave.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/checkpoint_datastores/nebius.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/fast_bakery/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/fast_bakery/docker_environment.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/fast_bakery/fast_bakery.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/fast_bakery/fast_bakery_cli.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/fast_bakery/fast_bakery_decorator.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/kubernetes/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/kubernetes/kubernetes_client.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/nim/card.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/nim/nim_decorator.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/nim/utils.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/nvcf/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/nvcf/constants.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/nvcf/exceptions.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/nvcf/heartbeat_store.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/nvcf/nvcf.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/nvcf/nvcf_cli.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/nvcf/nvcf_decorator.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/nvcf/utils.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/nvct/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/nvct/exceptions.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/nvct/nvct.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/nvct/nvct_cli.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/nvct/nvct_decorator.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/nvct/nvct_runner.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/nvct/utils.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/perimeters.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/profilers/deco_injector.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/profilers/gpu_profile_decorator.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/secrets/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/secrets/secrets.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/snowflake/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/snowflake/snowflake.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/snowpark/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_cli.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_client.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_decorator.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_exceptions.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_job.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_service_spec.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/plugins/tensorboard/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/profilers/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/profilers/gpu.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/remote_config.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/toplevel/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/toplevel/global_aliases_for_metaflow_package.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/toplevel/plugins/azure/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/toplevel/plugins/gcp/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/toplevel/plugins/kubernetes/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/toplevel/plugins/ollama/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/metaflow_extensions/outerbounds/toplevel/plugins/snowflake/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/ob_metaflow_extensions.egg-info/dependency_links.txt +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/ob_metaflow_extensions.egg-info/requires.txt +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/ob_metaflow_extensions.egg-info/top_level.txt +0 -0
- {ob-metaflow-extensions-1.1.156 → ob-metaflow-extensions-1.1.158}/setup.cfg +0 -0
|
@@ -186,18 +186,61 @@ class NimManager(object):
|
|
|
186
186
|
]
|
|
187
187
|
self.models = {}
|
|
188
188
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
189
|
+
# Convert models to a standard format
|
|
190
|
+
standardized_models = []
|
|
191
|
+
# If models is a single string, convert it to a list with a dict
|
|
192
|
+
if isinstance(models, str):
|
|
193
|
+
standardized_models = [{"name": models}]
|
|
194
|
+
# If models is a list, process each item
|
|
195
|
+
elif isinstance(models, list):
|
|
196
|
+
for model_item in models:
|
|
197
|
+
# If the item is a string, convert it to a dict
|
|
198
|
+
if isinstance(model_item, str):
|
|
199
|
+
standardized_models.append({"name": model_item})
|
|
200
|
+
# If it's already a dict, use it as is
|
|
201
|
+
elif isinstance(model_item, dict):
|
|
202
|
+
standardized_models.append(model_item)
|
|
203
|
+
else:
|
|
204
|
+
raise ValueError(
|
|
205
|
+
f"Model specification must be a string or dictionary, got {type(model_item)}"
|
|
206
|
+
)
|
|
207
|
+
else:
|
|
208
|
+
raise ValueError(
|
|
209
|
+
f"Models must be a string or a list of strings/dictionaries, got {type(models)}"
|
|
210
|
+
)
|
|
211
|
+
|
|
212
|
+
# Process each standardized model
|
|
213
|
+
for each_model_dict in standardized_models:
|
|
214
|
+
model_name = each_model_dict.get("name", "")
|
|
215
|
+
nvcf_id = each_model_dict.get("nvcf_id", "")
|
|
216
|
+
nvcf_version = each_model_dict.get("nvcf_version", "")
|
|
217
|
+
|
|
218
|
+
if model_name and not (nvcf_id and nvcf_version):
|
|
219
|
+
if model_name in nvcf_models:
|
|
220
|
+
self.models[model_name] = NimChatCompletion(
|
|
221
|
+
model=model_name,
|
|
222
|
+
nvcf_id=nvcf_id,
|
|
223
|
+
nvcf_version=nvcf_version,
|
|
224
|
+
nim_metadata=nim_metadata,
|
|
225
|
+
monitor=monitor,
|
|
226
|
+
)
|
|
227
|
+
else:
|
|
228
|
+
raise ValueError(
|
|
229
|
+
f"Model {model_name} not supported by the Outerbounds @nim offering."
|
|
230
|
+
f"\nYou can choose from these options: {nvcf_models}\n\n"
|
|
231
|
+
"Reach out to Outerbounds if there are other models you'd like supported."
|
|
232
|
+
)
|
|
233
|
+
elif nvcf_id and nvcf_version:
|
|
234
|
+
self.models[model_name] = NimChatCompletion(
|
|
235
|
+
model=model_name,
|
|
236
|
+
nvcf_id=nvcf_id,
|
|
237
|
+
nvcf_version=nvcf_version,
|
|
193
238
|
nim_metadata=nim_metadata,
|
|
194
239
|
monitor=monitor,
|
|
195
240
|
)
|
|
196
241
|
else:
|
|
197
242
|
raise ValueError(
|
|
198
|
-
|
|
199
|
-
f"\nYou can choose from these options: {nvcf_models}\n\n"
|
|
200
|
-
"Reach out to Outerbounds if there are other models you'd like supported."
|
|
243
|
+
"You must provide either a valid 'name' or a custom 'name' along with both 'nvcf_id' and 'nvcf_version'."
|
|
201
244
|
)
|
|
202
245
|
|
|
203
246
|
|
|
@@ -205,6 +248,8 @@ class NimChatCompletion(object):
|
|
|
205
248
|
def __init__(
|
|
206
249
|
self,
|
|
207
250
|
model: str = "meta/llama3-8b-instruct",
|
|
251
|
+
nvcf_id: str = "",
|
|
252
|
+
nvcf_version: str = "",
|
|
208
253
|
nim_metadata: NimMetadata = None,
|
|
209
254
|
monitor: bool = False,
|
|
210
255
|
**kwargs,
|
|
@@ -217,18 +262,34 @@ class NimChatCompletion(object):
|
|
|
217
262
|
self.model_name = model
|
|
218
263
|
self.nim_metadata = nim_metadata
|
|
219
264
|
self.monitor = monitor
|
|
220
|
-
|
|
221
265
|
all_nvcf_models = self.nim_metadata.get_nvcf_chat_completion_models()
|
|
222
|
-
all_nvcf_model_names = [m["name"] for m in all_nvcf_models]
|
|
223
266
|
|
|
224
|
-
if
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
267
|
+
if nvcf_id and nvcf_version:
|
|
268
|
+
matching_models = [
|
|
269
|
+
m
|
|
270
|
+
for m in all_nvcf_models
|
|
271
|
+
if m["function-id"] == nvcf_id and m["version-id"] == nvcf_version
|
|
272
|
+
]
|
|
273
|
+
if matching_models:
|
|
274
|
+
self.model = matching_models[0]
|
|
275
|
+
self.function_id = self.model["function-id"]
|
|
276
|
+
self.version_id = self.model["version-id"]
|
|
277
|
+
self.model_name = self.model["name"]
|
|
278
|
+
else:
|
|
279
|
+
raise ValueError(
|
|
280
|
+
f"Function {self.function_id} with version {self.version_id} not found on NVCF"
|
|
281
|
+
)
|
|
282
|
+
else:
|
|
283
|
+
all_nvcf_model_names = [m["name"] for m in all_nvcf_models]
|
|
284
|
+
|
|
285
|
+
if self.model_name not in all_nvcf_model_names:
|
|
286
|
+
raise ValueError(
|
|
287
|
+
f"Model {self.model_name} not found in available NVCF models"
|
|
288
|
+
)
|
|
228
289
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
290
|
+
self.model = all_nvcf_models[all_nvcf_model_names.index(self.model_name)]
|
|
291
|
+
self.function_id = self.model["function-id"]
|
|
292
|
+
self.version_id = self.model["version-id"]
|
|
232
293
|
|
|
233
294
|
self.first_request = True
|
|
234
295
|
|
|
@@ -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=[
|
|
19
|
-
|
|
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
|
-
|
|
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[
|
|
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 = {
|
|
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
|
-
|
|
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 @@
|
|
|
1
|
+
OLLAMA_SUFFIX = "mf.ollama"
|
|
@@ -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)
|