metaflow 2.18.10__py2.py3-none-any.whl → 2.18.11__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.
@@ -2,7 +2,7 @@ import base64
2
2
  import json
3
3
  import os
4
4
  from .card import MetaflowCard, MetaflowCardComponent, with_default_component_id
5
- from .convert_to_native_type import TaskToDict
5
+ from .convert_to_native_type import TaskToDict, MAX_ARTIFACT_SIZE
6
6
  import uuid
7
7
  import inspect
8
8
 
@@ -376,9 +376,14 @@ class TaskInfoComponent(MetaflowCardComponent):
376
376
  components=[],
377
377
  runtime=False,
378
378
  flow=None,
379
+ max_artifact_size=None,
379
380
  ):
380
381
  self._task = task
381
382
  self._only_repr = only_repr
383
+ # Use the global MAX_ARTIFACT_SIZE constant if not specified
384
+ self._max_artifact_size = (
385
+ max_artifact_size if max_artifact_size is not None else MAX_ARTIFACT_SIZE
386
+ )
382
387
  self._graph = graph
383
388
  self._components = components
384
389
  self._page_title = page_title
@@ -394,9 +399,9 @@ class TaskInfoComponent(MetaflowCardComponent):
394
399
  a dictionary of form:
395
400
  dict(metadata = {},components= [])
396
401
  """
397
- task_data_dict = TaskToDict(only_repr=self._only_repr)(
398
- self._task, graph=self._graph
399
- )
402
+ task_data_dict = TaskToDict(
403
+ only_repr=self._only_repr, max_artifact_size=self._max_artifact_size
404
+ )(self._task, graph=self._graph)
400
405
  # ignore the name as an artifact
401
406
  if "name" in task_data_dict["data"]:
402
407
  del task_data_dict["data"]["name"]
@@ -693,10 +698,14 @@ class DefaultCard(MetaflowCard):
693
698
  **kwargs
694
699
  ):
695
700
  self._only_repr = True
701
+ # Default max artifact size uses the global MAX_ARTIFACT_SIZE constant (200MB)
702
+ self._max_artifact_size = MAX_ARTIFACT_SIZE
696
703
  self._graph = None if graph is None else transform_flow_graph(graph)
697
704
  self._flow = flow
698
705
  if "only_repr" in options:
699
706
  self._only_repr = options["only_repr"]
707
+ if "max_artifact_size" in options:
708
+ self._max_artifact_size = options["max_artifact_size"]
700
709
  self._components = components
701
710
 
702
711
  def render(self, task, runtime=False):
@@ -710,6 +719,7 @@ class DefaultCard(MetaflowCard):
710
719
  components=self._components,
711
720
  runtime=runtime,
712
721
  flow=self._flow,
722
+ max_artifact_size=self._max_artifact_size,
713
723
  ).render()
714
724
  pt = self._get_mustache()
715
725
  data_dict = dict(
@@ -8,7 +8,9 @@ TypeResolvedObject = namedtuple("TypeResolvedObject", ["data", "is_image", "is_t
8
8
 
9
9
 
10
10
  TIME_FORMAT = "%Y-%m-%d %I:%M:%S %p"
11
- MAX_ARTIFACT_SIZE = 1 # in 1 MB
11
+ # Maximum artifact size to render in cards: 200MB (in bytes)
12
+ # Artifacts larger than this will be skipped during card rendering to avoid memory issues
13
+ MAX_ARTIFACT_SIZE = 256 * 1024 * 1024 # 256 MB = 268435456 bytes
12
14
 
13
15
 
14
16
  def _get_object_size(obj, seen=None):
@@ -44,7 +46,7 @@ def _full_classname(obj):
44
46
 
45
47
 
46
48
  class TaskToDict:
47
- def __init__(self, only_repr=False, runtime=False):
49
+ def __init__(self, only_repr=False, runtime=False, max_artifact_size=None):
48
50
  # this dictionary holds all the supported functions
49
51
  import reprlib
50
52
  import pprint
@@ -61,6 +63,10 @@ class TaskToDict:
61
63
  self._repr = r
62
64
  self._runtime = runtime
63
65
  self._only_repr = only_repr
66
+ # Use the global MAX_ARTIFACT_SIZE constant if not specified
67
+ self._max_artifact_size = (
68
+ max_artifact_size if max_artifact_size is not None else MAX_ARTIFACT_SIZE
69
+ )
64
70
  self._supported_types = {
65
71
  "tuple": self._parse_tuple,
66
72
  "NoneType": self._parse_nonetype,
@@ -110,6 +116,19 @@ class TaskToDict:
110
116
  task_data_dict = {}
111
117
  type_inferred_objects = {"images": {}, "tables": {}}
112
118
  for data in task:
119
+ # Check if artifact size exceeds the maximum allowed size
120
+ if data.size > self._max_artifact_size:
121
+ # Skip artifacts that are too large
122
+ task_data_dict[data.id] = dict(
123
+ type="skipped",
124
+ data=f"<artifact too large: {data.size} bytes, max: {self._max_artifact_size} bytes>",
125
+ large_object=True,
126
+ supported_type=False,
127
+ only_repr=self._only_repr,
128
+ name=data.id,
129
+ )
130
+ continue
131
+
113
132
  try:
114
133
  data_object = data.data
115
134
  task_data_dict[data.id] = self._convert_to_native_type(data_object)
@@ -241,7 +260,8 @@ class TaskToDict:
241
260
  supported_type = True
242
261
  type_parsing_func = self._supported_types[obj_type_name]
243
262
  data_obj = type_parsing_func(data_object)
244
- if _get_object_size(data_obj) * 1e-6 > MAX_ARTIFACT_SIZE:
263
+ # Secondary check: if the in-memory object size exceeds our limit, use repr instead
264
+ if _get_object_size(data_obj) > self._max_artifact_size:
245
265
  data_obj = rep.repr(data_obj)
246
266
  large_object = True
247
267
  else:
metaflow/version.py CHANGED
@@ -1 +1 @@
1
- metaflow_version = "2.18.10"
1
+ metaflow_version = "2.18.11"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: metaflow
3
- Version: 2.18.10
3
+ Version: 2.18.11
4
4
  Summary: Metaflow: More AI and ML, Less Engineering
5
5
  Author: Metaflow Developers
6
6
  Author-email: help@metaflow.org
@@ -26,7 +26,7 @@ License-File: LICENSE
26
26
  Requires-Dist: requests
27
27
  Requires-Dist: boto3
28
28
  Provides-Extra: stubs
29
- Requires-Dist: metaflow-stubs==2.18.10; extra == "stubs"
29
+ Requires-Dist: metaflow-stubs==2.18.11; extra == "stubs"
30
30
  Dynamic: author
31
31
  Dynamic: author-email
32
32
  Dynamic: classifier
@@ -36,7 +36,7 @@ metaflow/tuple_util.py,sha256=_G5YIEhuugwJ_f6rrZoelMFak3DqAR2tt_5CapS1XTY,830
36
36
  metaflow/unbounded_foreach.py,sha256=p184WMbrMJ3xKYHwewj27ZhRUsSj_kw1jlye5gA9xJk,387
37
37
  metaflow/util.py,sha256=g2SOU_CRzJLgDM_UGF9QDMANMAIHAsDRXE6S76_YzsY,14594
38
38
  metaflow/vendor.py,sha256=A82CGHfStZGDP5pQ5XzRjFkbN1ZC-vFmghXIrzMDDNg,5868
39
- metaflow/version.py,sha256=fm3PVktu1KSNr7dMY4-BletucOknAbjiLAaLr9y1JkU,29
39
+ metaflow/version.py,sha256=q3OkFrD1pVtgUDvcF5KfpBd3SSEX2AEsbdqVS9ReFy4,29
40
40
  metaflow/_vendor/__init__.py,sha256=y_CiwUD3l4eAKvTVDZeqgVujMy31cAM1qjAB-HfI-9s,353
41
41
  metaflow/_vendor/typing_extensions.py,sha256=q9zxWa6p6CzF1zZvSkygSlklduHf_b3K7MCxGz7MJRc,134519
42
42
  metaflow/_vendor/zipp.py,sha256=ajztOH-9I7KA_4wqDYygtHa6xUBVZgFpmZ8FE74HHHI,8425
@@ -284,11 +284,11 @@ metaflow/plugins/cards/exception.py,sha256=2UqlNb-Kxpg6cuLu2sBEIPTIElwlVBsSpeCgD
284
284
  metaflow/plugins/cards/metadata.py,sha256=tACaw7_XNAICZ4A25celIbgxUF0CxHh7BBpFzKrMLTo,487
285
285
  metaflow/plugins/cards/card_modules/__init__.py,sha256=WI2IAsFiKGyqPrHtO9S9-MbyVtUTgWJNL4xjJaBErRo,3437
286
286
  metaflow/plugins/cards/card_modules/base.html,sha256=Y208ZKIZqEWWUcoBFTLTdWKAG0C8xH5lmyCRSjaN2FY,21004
287
- metaflow/plugins/cards/card_modules/basic.py,sha256=b6aBg7800CjjkQb0J_TOd3JujVR10X2QoXYdwiXFbkE,25831
287
+ metaflow/plugins/cards/card_modules/basic.py,sha256=bKU_b_Wfs2OC6me6kPp1Jm_SLvaJ4dkUCMAt2VLampk,26430
288
288
  metaflow/plugins/cards/card_modules/bundle.css,sha256=zlYjv5rt7lMqiQzd_OAe4QdQeM3J3YbwljnEghlbTaU,28052
289
289
  metaflow/plugins/cards/card_modules/card.py,sha256=6sbqP5mwf7QWvQvX2N_bC78H9ixuI5sQ8612Q5islys,4627
290
290
  metaflow/plugins/cards/card_modules/components.py,sha256=hF204MUyJ2DZXSPhEt7d23isjdEf4TGK8pzmVkmXyQ0,45574
291
- metaflow/plugins/cards/card_modules/convert_to_native_type.py,sha256=Vcjqn5rfC0kVMdhqDwsYEjknXTbkG_ppraQrQGaQY_E,16245
291
+ metaflow/plugins/cards/card_modules/convert_to_native_type.py,sha256=opjGOvWg7trOqzhTRZ7h1cFlYrNj68Wn3_EyDTIKEvw,17320
292
292
  metaflow/plugins/cards/card_modules/json_viewer.py,sha256=DWOcQPk6DXbeGuYEqv1gGrQW1eMVYlCXv3kMsVLnhNc,7113
293
293
  metaflow/plugins/cards/card_modules/main.css,sha256=avu7BTB9qj0M8LvqNLUhikUFQhmAJhQQ7REcUgh9zMw,11725
294
294
  metaflow/plugins/cards/card_modules/main.js,sha256=wT4PhcwoFwVNOGVZYBkjqfYKROuPSPWGjS-zCQZErz8,1075727
@@ -430,12 +430,12 @@ metaflow/user_decorators/mutable_flow.py,sha256=EywKTN3cnXPQF_s62wQaC4a4aH14j8oe
430
430
  metaflow/user_decorators/mutable_step.py,sha256=-BY0UDXf_RCAEnC5JlLzEXGdiw1KD9oSrSxS_SWaB9Y,16791
431
431
  metaflow/user_decorators/user_flow_decorator.py,sha256=2yDwZq9QGv9W-7kEuKwa8o4ZkTvuHJ5ESz7VVrGViAI,9890
432
432
  metaflow/user_decorators/user_step_decorator.py,sha256=4558NR8RJtN22OyTwCXO80bAMhMTaRGMoX12b1GMcPc,27232
433
- metaflow-2.18.10.data/data/share/metaflow/devtools/Makefile,sha256=TT4TCq8ALSfqYyGqDPocN5oPcZe2FqoCZxmGO1LmyCc,13760
434
- metaflow-2.18.10.data/data/share/metaflow/devtools/Tiltfile,sha256=b6l_fjDO0wtxOkO85lFvuf3HDa6wnzHhhBG8yv1kQqk,23949
435
- metaflow-2.18.10.data/data/share/metaflow/devtools/pick_services.sh,sha256=PGjQeDIigFHeoQ0asmYNdYDPIOdeYy1UYvkw2wdN4zg,2209
436
- metaflow-2.18.10.dist-info/licenses/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
437
- metaflow-2.18.10.dist-info/METADATA,sha256=EpxLRWGGk1VpW6VbbCa0CGQnVsoaTy4kXEPib4uCsNU,6743
438
- metaflow-2.18.10.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
439
- metaflow-2.18.10.dist-info/entry_points.txt,sha256=RvEq8VFlgGe_FfqGOZi0D7ze1hLD0pAtXeNyGfzc_Yc,103
440
- metaflow-2.18.10.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
441
- metaflow-2.18.10.dist-info/RECORD,,
433
+ metaflow-2.18.11.data/data/share/metaflow/devtools/Makefile,sha256=TT4TCq8ALSfqYyGqDPocN5oPcZe2FqoCZxmGO1LmyCc,13760
434
+ metaflow-2.18.11.data/data/share/metaflow/devtools/Tiltfile,sha256=b6l_fjDO0wtxOkO85lFvuf3HDa6wnzHhhBG8yv1kQqk,23949
435
+ metaflow-2.18.11.data/data/share/metaflow/devtools/pick_services.sh,sha256=PGjQeDIigFHeoQ0asmYNdYDPIOdeYy1UYvkw2wdN4zg,2209
436
+ metaflow-2.18.11.dist-info/licenses/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
437
+ metaflow-2.18.11.dist-info/METADATA,sha256=7lnNSVzLGJoGR8_RscIBX2R55lbQPIU1QqUOlUuWiUo,6743
438
+ metaflow-2.18.11.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
439
+ metaflow-2.18.11.dist-info/entry_points.txt,sha256=RvEq8VFlgGe_FfqGOZi0D7ze1hLD0pAtXeNyGfzc_Yc,103
440
+ metaflow-2.18.11.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
441
+ metaflow-2.18.11.dist-info/RECORD,,