ml-dash 0.5.3__tar.gz → 0.5.5__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.
- {ml_dash-0.5.3 → ml_dash-0.5.5}/PKG-INFO +1 -1
- {ml_dash-0.5.3 → ml_dash-0.5.5}/pyproject.toml +1 -1
- {ml_dash-0.5.3 → ml_dash-0.5.5}/src/ml_dash/experiment.py +10 -10
- {ml_dash-0.5.3 → ml_dash-0.5.5}/src/ml_dash/files.py +19 -19
- {ml_dash-0.5.3 → ml_dash-0.5.5}/src/ml_dash/metric.py +23 -10
- {ml_dash-0.5.3 → ml_dash-0.5.5}/src/ml_dash/storage.py +10 -6
- {ml_dash-0.5.3 → ml_dash-0.5.5}/LICENSE +0 -0
- {ml_dash-0.5.3 → ml_dash-0.5.5}/README.md +0 -0
- {ml_dash-0.5.3 → ml_dash-0.5.5}/src/ml_dash/__init__.py +0 -0
- {ml_dash-0.5.3 → ml_dash-0.5.5}/src/ml_dash/auto_start.py +0 -0
- {ml_dash-0.5.3 → ml_dash-0.5.5}/src/ml_dash/client.py +0 -0
- {ml_dash-0.5.3 → ml_dash-0.5.5}/src/ml_dash/log.py +0 -0
- {ml_dash-0.5.3 → ml_dash-0.5.5}/src/ml_dash/params.py +0 -0
- {ml_dash-0.5.3 → ml_dash-0.5.5}/src/ml_dash/py.typed +0 -0
|
@@ -460,7 +460,7 @@ class Experiment:
|
|
|
460
460
|
timestamp=log_entry["timestamp"]
|
|
461
461
|
)
|
|
462
462
|
|
|
463
|
-
def
|
|
463
|
+
def files(self, **kwargs) -> FileBuilder:
|
|
464
464
|
"""
|
|
465
465
|
Get a FileBuilder for fluent file operations.
|
|
466
466
|
|
|
@@ -472,17 +472,17 @@ class Experiment:
|
|
|
472
472
|
|
|
473
473
|
Examples:
|
|
474
474
|
# Upload file
|
|
475
|
-
experiment.
|
|
475
|
+
experiment.files(file_path="./model.pt", prefix="/models").save()
|
|
476
476
|
|
|
477
477
|
# List files
|
|
478
|
-
files = experiment.
|
|
479
|
-
files = experiment.
|
|
478
|
+
files = experiment.files().list()
|
|
479
|
+
files = experiment.files(prefix="/models").list()
|
|
480
480
|
|
|
481
481
|
# Download file
|
|
482
|
-
experiment.
|
|
482
|
+
experiment.files(file_id="123").download()
|
|
483
483
|
|
|
484
484
|
# Delete file
|
|
485
|
-
experiment.
|
|
485
|
+
experiment.files(file_id="123").delete()
|
|
486
486
|
"""
|
|
487
487
|
if not self._is_open:
|
|
488
488
|
raise RuntimeError("Experiment not open. Use experiment.open() or context manager.")
|
|
@@ -791,7 +791,7 @@ class Experiment:
|
|
|
791
791
|
|
|
792
792
|
def _append_to_metric(
|
|
793
793
|
self,
|
|
794
|
-
name: str,
|
|
794
|
+
name: Optional[str],
|
|
795
795
|
data: Dict[str, Any],
|
|
796
796
|
description: Optional[str],
|
|
797
797
|
tags: Optional[List[str]],
|
|
@@ -801,7 +801,7 @@ class Experiment:
|
|
|
801
801
|
Internal method to append a single data point to a metric.
|
|
802
802
|
|
|
803
803
|
Args:
|
|
804
|
-
name: Metric name
|
|
804
|
+
name: Metric name (can be None for unnamed metrics)
|
|
805
805
|
data: Data point (flexible schema)
|
|
806
806
|
description: Optional metric description
|
|
807
807
|
tags: Optional tags
|
|
@@ -839,7 +839,7 @@ class Experiment:
|
|
|
839
839
|
|
|
840
840
|
def _append_batch_to_metric(
|
|
841
841
|
self,
|
|
842
|
-
name: str,
|
|
842
|
+
name: Optional[str],
|
|
843
843
|
data_points: List[Dict[str, Any]],
|
|
844
844
|
description: Optional[str],
|
|
845
845
|
tags: Optional[List[str]],
|
|
@@ -849,7 +849,7 @@ class Experiment:
|
|
|
849
849
|
Internal method to append multiple data points to a metric.
|
|
850
850
|
|
|
851
851
|
Args:
|
|
852
|
-
name: Metric name
|
|
852
|
+
name: Metric name (can be None for unnamed metrics)
|
|
853
853
|
data_points: List of data points
|
|
854
854
|
description: Optional metric description
|
|
855
855
|
tags: Optional tags
|
|
@@ -19,18 +19,18 @@ class FileBuilder:
|
|
|
19
19
|
|
|
20
20
|
Usage:
|
|
21
21
|
# Upload file
|
|
22
|
-
experiment.
|
|
22
|
+
experiment.files(file_path="./model.pt", prefix="/models").save()
|
|
23
23
|
|
|
24
24
|
# List files
|
|
25
|
-
files = experiment.
|
|
26
|
-
files = experiment.
|
|
25
|
+
files = experiment.files().list()
|
|
26
|
+
files = experiment.files(prefix="/models").list()
|
|
27
27
|
|
|
28
28
|
# Download file
|
|
29
|
-
experiment.
|
|
30
|
-
experiment.
|
|
29
|
+
experiment.files(file_id="123").download()
|
|
30
|
+
experiment.files(file_id="123", dest_path="./model.pt").download()
|
|
31
31
|
|
|
32
32
|
# Delete file
|
|
33
|
-
experiment.
|
|
33
|
+
experiment.files(file_id="123").delete()
|
|
34
34
|
"""
|
|
35
35
|
|
|
36
36
|
def __init__(self, experiment: 'Experiment', **kwargs):
|
|
@@ -72,7 +72,7 @@ class FileBuilder:
|
|
|
72
72
|
ValueError: If file size exceeds 5GB limit
|
|
73
73
|
|
|
74
74
|
Examples:
|
|
75
|
-
result = experiment.
|
|
75
|
+
result = experiment.files(file_path="./model.pt", prefix="/models").save()
|
|
76
76
|
# Returns: {"id": "123", "path": "/models", "filename": "model.pt", ...}
|
|
77
77
|
"""
|
|
78
78
|
if not self._experiment._is_open:
|
|
@@ -130,9 +130,9 @@ class FileBuilder:
|
|
|
130
130
|
RuntimeError: If experiment is not open
|
|
131
131
|
|
|
132
132
|
Examples:
|
|
133
|
-
files = experiment.
|
|
134
|
-
files = experiment.
|
|
135
|
-
files = experiment.
|
|
133
|
+
files = experiment.files().list() # All files
|
|
134
|
+
files = experiment.files(prefix="/models").list() # Filter by prefix
|
|
135
|
+
files = experiment.files(tags=["checkpoint"]).list() # Filter by tags
|
|
136
136
|
"""
|
|
137
137
|
if not self._experiment._is_open:
|
|
138
138
|
raise RuntimeError("Experiment not open. Use experiment.open() or context manager.")
|
|
@@ -158,10 +158,10 @@ class FileBuilder:
|
|
|
158
158
|
|
|
159
159
|
Examples:
|
|
160
160
|
# Download to current directory with original filename
|
|
161
|
-
path = experiment.
|
|
161
|
+
path = experiment.files(file_id="123").download()
|
|
162
162
|
|
|
163
163
|
# Download to custom path
|
|
164
|
-
path = experiment.
|
|
164
|
+
path = experiment.files(file_id="123", dest_path="./model.pt").download()
|
|
165
165
|
"""
|
|
166
166
|
if not self._experiment._is_open:
|
|
167
167
|
raise RuntimeError("Experiment not open. Use experiment.open() or context manager.")
|
|
@@ -186,7 +186,7 @@ class FileBuilder:
|
|
|
186
186
|
ValueError: If file_id not provided
|
|
187
187
|
|
|
188
188
|
Examples:
|
|
189
|
-
result = experiment.
|
|
189
|
+
result = experiment.files(file_id="123").delete()
|
|
190
190
|
"""
|
|
191
191
|
if not self._experiment._is_open:
|
|
192
192
|
raise RuntimeError("Experiment not open. Use experiment.open() or context manager.")
|
|
@@ -211,7 +211,7 @@ class FileBuilder:
|
|
|
211
211
|
ValueError: If file_id not provided
|
|
212
212
|
|
|
213
213
|
Examples:
|
|
214
|
-
result = experiment.
|
|
214
|
+
result = experiment.files(
|
|
215
215
|
file_id="123",
|
|
216
216
|
description="Updated description",
|
|
217
217
|
tags=["new", "tags"],
|
|
@@ -251,7 +251,7 @@ class FileBuilder:
|
|
|
251
251
|
|
|
252
252
|
Examples:
|
|
253
253
|
config = {"model": "resnet50", "lr": 0.001}
|
|
254
|
-
result = experiment.
|
|
254
|
+
result = experiment.files(prefix="/configs").save_json(config, "config.json")
|
|
255
255
|
"""
|
|
256
256
|
import json
|
|
257
257
|
import tempfile
|
|
@@ -309,10 +309,10 @@ class FileBuilder:
|
|
|
309
309
|
Examples:
|
|
310
310
|
import torch
|
|
311
311
|
model = torch.nn.Linear(10, 5)
|
|
312
|
-
result = experiment.
|
|
312
|
+
result = experiment.files(prefix="/models").save_torch(model, "model.pt")
|
|
313
313
|
|
|
314
314
|
# Or save state dict
|
|
315
|
-
result = experiment.
|
|
315
|
+
result = experiment.files(prefix="/models").save_torch(model.state_dict(), "model.pth")
|
|
316
316
|
"""
|
|
317
317
|
import tempfile
|
|
318
318
|
import os
|
|
@@ -372,10 +372,10 @@ class FileBuilder:
|
|
|
372
372
|
|
|
373
373
|
Examples:
|
|
374
374
|
data = {"model": "resnet50", "weights": np.array([1, 2, 3])}
|
|
375
|
-
result = experiment.
|
|
375
|
+
result = experiment.files(prefix="/data").save_pkl(data, "data.pkl")
|
|
376
376
|
|
|
377
377
|
# Or save any Python object
|
|
378
|
-
result = experiment.
|
|
378
|
+
result = experiment.files(prefix="/models").save_pkl(trained_model, "model.pickle")
|
|
379
379
|
"""
|
|
380
380
|
import pickle
|
|
381
381
|
import tempfile
|
|
@@ -15,16 +15,20 @@ class MetricsManager:
|
|
|
15
15
|
"""
|
|
16
16
|
Manager for metric operations that supports both named and unnamed usage.
|
|
17
17
|
|
|
18
|
-
Supports
|
|
19
|
-
1. Named: experiment.metrics("loss").append(value=0.5, step=1)
|
|
20
|
-
2.
|
|
18
|
+
Supports three usage patterns:
|
|
19
|
+
1. Named via call: experiment.metrics("loss").append(value=0.5, step=1)
|
|
20
|
+
2. Named via argument: experiment.metrics.append(name="loss", value=0.5, step=1)
|
|
21
|
+
3. Unnamed: experiment.metrics.append(value=0.5, step=1) # name=None
|
|
21
22
|
|
|
22
23
|
Usage:
|
|
23
|
-
# With explicit metric name
|
|
24
|
+
# With explicit metric name (via call)
|
|
24
25
|
experiment.metrics("train_loss").append(value=0.5, step=100)
|
|
25
26
|
|
|
26
|
-
#
|
|
27
|
+
# With explicit metric name (via argument)
|
|
27
28
|
experiment.metrics.append(name="train_loss", value=0.5, step=100)
|
|
29
|
+
|
|
30
|
+
# Without name (uses None as metric name)
|
|
31
|
+
experiment.metrics.append(value=0.5, step=100)
|
|
28
32
|
"""
|
|
29
33
|
|
|
30
34
|
def __init__(self, experiment: 'Experiment'):
|
|
@@ -55,12 +59,12 @@ class MetricsManager:
|
|
|
55
59
|
"""
|
|
56
60
|
return MetricBuilder(self._experiment, name, description, tags, metadata)
|
|
57
61
|
|
|
58
|
-
def append(self, name: str, data: Optional[Dict[str, Any]] = None, **kwargs) -> Dict[str, Any]:
|
|
62
|
+
def append(self, name: Optional[str] = None, data: Optional[Dict[str, Any]] = None, **kwargs) -> Dict[str, Any]:
|
|
59
63
|
"""
|
|
60
|
-
Append a data point to a metric (name
|
|
64
|
+
Append a data point to a metric (name can be optional).
|
|
61
65
|
|
|
62
66
|
Args:
|
|
63
|
-
name: Metric name
|
|
67
|
+
name: Metric name (optional, can be None for unnamed metrics)
|
|
64
68
|
data: Data dict (alternative to kwargs)
|
|
65
69
|
**kwargs: Data as keyword arguments
|
|
66
70
|
|
|
@@ -69,13 +73,14 @@ class MetricsManager:
|
|
|
69
73
|
|
|
70
74
|
Examples:
|
|
71
75
|
experiment.metrics.append(name="loss", value=0.5, step=1)
|
|
76
|
+
experiment.metrics.append(value=0.5, step=1) # name=None
|
|
72
77
|
experiment.metrics.append(name="loss", data={"value": 0.5, "step": 1})
|
|
73
78
|
"""
|
|
74
79
|
if data is None:
|
|
75
80
|
data = kwargs
|
|
76
81
|
return self._experiment._append_to_metric(name, data, None, None, None)
|
|
77
82
|
|
|
78
|
-
def append_batch(self, name: str, data_points: List[Dict[str, Any]],
|
|
83
|
+
def append_batch(self, name: Optional[str] = None, data_points: Optional[List[Dict[str, Any]]] = None,
|
|
79
84
|
description: Optional[str] = None,
|
|
80
85
|
tags: Optional[List[str]] = None,
|
|
81
86
|
metadata: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
|
|
@@ -83,7 +88,7 @@ class MetricsManager:
|
|
|
83
88
|
Append multiple data points to a metric.
|
|
84
89
|
|
|
85
90
|
Args:
|
|
86
|
-
name: Metric name
|
|
91
|
+
name: Metric name (optional, can be None for unnamed metrics)
|
|
87
92
|
data_points: List of data point dicts
|
|
88
93
|
description: Optional metric description
|
|
89
94
|
tags: Optional tags for categorization
|
|
@@ -100,7 +105,15 @@ class MetricsManager:
|
|
|
100
105
|
{"value": 0.4, "step": 2}
|
|
101
106
|
]
|
|
102
107
|
)
|
|
108
|
+
experiment.metrics.append_batch(
|
|
109
|
+
data_points=[
|
|
110
|
+
{"value": 0.5, "step": 1},
|
|
111
|
+
{"value": 0.4, "step": 2}
|
|
112
|
+
]
|
|
113
|
+
) # name=None
|
|
103
114
|
"""
|
|
115
|
+
if data_points is None:
|
|
116
|
+
data_points = []
|
|
104
117
|
return self._experiment._append_batch_to_metric(name, data_points, description, tags, metadata)
|
|
105
118
|
|
|
106
119
|
|
|
@@ -636,7 +636,7 @@ class LocalStorage:
|
|
|
636
636
|
self,
|
|
637
637
|
project: str,
|
|
638
638
|
experiment: str,
|
|
639
|
-
metric_name: str,
|
|
639
|
+
metric_name: Optional[str],
|
|
640
640
|
data: Dict[str, Any],
|
|
641
641
|
description: Optional[str] = None,
|
|
642
642
|
tags: Optional[List[str]] = None,
|
|
@@ -653,7 +653,7 @@ class LocalStorage:
|
|
|
653
653
|
Args:
|
|
654
654
|
project: Project name
|
|
655
655
|
experiment: Experiment name
|
|
656
|
-
metric_name: Metric name
|
|
656
|
+
metric_name: Metric name (None for unnamed metrics)
|
|
657
657
|
data: Data point (flexible schema)
|
|
658
658
|
description: Optional metric description
|
|
659
659
|
tags: Optional tags
|
|
@@ -666,7 +666,9 @@ class LocalStorage:
|
|
|
666
666
|
metrics_dir = experiment_dir / "metrics"
|
|
667
667
|
metrics_dir.mkdir(parents=True, exist_ok=True)
|
|
668
668
|
|
|
669
|
-
|
|
669
|
+
# Convert None to string for directory name
|
|
670
|
+
dir_name = str(metric_name) if metric_name is not None else "None"
|
|
671
|
+
metric_dir = metrics_dir / dir_name
|
|
670
672
|
metric_dir.mkdir(exist_ok=True)
|
|
671
673
|
|
|
672
674
|
data_file = metric_dir / "data.jsonl"
|
|
@@ -720,7 +722,7 @@ class LocalStorage:
|
|
|
720
722
|
self,
|
|
721
723
|
project: str,
|
|
722
724
|
experiment: str,
|
|
723
|
-
metric_name: str,
|
|
725
|
+
metric_name: Optional[str],
|
|
724
726
|
data_points: List[Dict[str, Any]],
|
|
725
727
|
description: Optional[str] = None,
|
|
726
728
|
tags: Optional[List[str]] = None,
|
|
@@ -732,7 +734,7 @@ class LocalStorage:
|
|
|
732
734
|
Args:
|
|
733
735
|
project: Project name
|
|
734
736
|
experiment: Experiment name
|
|
735
|
-
metric_name: Metric name
|
|
737
|
+
metric_name: Metric name (None for unnamed metrics)
|
|
736
738
|
data_points: List of data points
|
|
737
739
|
description: Optional metric description
|
|
738
740
|
tags: Optional tags
|
|
@@ -745,7 +747,9 @@ class LocalStorage:
|
|
|
745
747
|
metrics_dir = experiment_dir / "metrics"
|
|
746
748
|
metrics_dir.mkdir(parents=True, exist_ok=True)
|
|
747
749
|
|
|
748
|
-
|
|
750
|
+
# Convert None to string for directory name
|
|
751
|
+
dir_name = str(metric_name) if metric_name is not None else "None"
|
|
752
|
+
metric_dir = metrics_dir / dir_name
|
|
749
753
|
metric_dir.mkdir(exist_ok=True)
|
|
750
754
|
|
|
751
755
|
data_file = metric_dir / "data.jsonl"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|