ml-dash 0.6.15__tar.gz → 0.6.17__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.6.15 → ml_dash-0.6.17}/PKG-INFO +2 -2
- {ml_dash-0.6.15 → ml_dash-0.6.17}/pyproject.toml +2 -2
- ml_dash-0.6.17/src/ml_dash/__init__.py +121 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/experiment.py +6 -1
- ml_dash-0.6.15/src/ml_dash/__init__.py +0 -107
- {ml_dash-0.6.15 → ml_dash-0.6.17}/LICENSE +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/README.md +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/auth/__init__.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/auth/constants.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/auth/device_flow.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/auth/device_secret.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/auth/exceptions.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/auth/token_storage.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/auto_start.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/buffer.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/cli.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/cli_commands/__init__.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/cli_commands/api.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/cli_commands/create.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/cli_commands/download.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/cli_commands/list.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/cli_commands/login.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/cli_commands/logout.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/cli_commands/profile.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/cli_commands/remove.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/cli_commands/upload.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/client.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/config.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/files.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/log.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/metric.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/params.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/py.typed +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/remote_auto_start.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/run.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/snowflake.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/storage.py +0 -0
- {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/track.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: ml-dash
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.17
|
|
4
4
|
Summary: ML experiment tracking and data storage
|
|
5
5
|
Keywords: machine-learning,experiment-tracking,mlops,data-storage
|
|
6
6
|
Author: Ge Yang, Tom Tao
|
|
@@ -43,7 +43,7 @@ Requires-Dist: imageio-ffmpeg>=0.4.9
|
|
|
43
43
|
Requires-Dist: scikit-image>=0.21.0
|
|
44
44
|
Requires-Dist: rich>=13.0.0
|
|
45
45
|
Requires-Dist: cryptography>=42.0.0
|
|
46
|
-
Requires-Dist: params-proto>=3.0.0
|
|
46
|
+
Requires-Dist: params-proto>=3.0.0,<3.2.0
|
|
47
47
|
Requires-Dist: keyring>=25.0.0 ; extra == 'auth'
|
|
48
48
|
Requires-Dist: qrcode>=8.0.0 ; extra == 'auth'
|
|
49
49
|
Requires-Dist: pytest>=8.0.0 ; extra == 'dev'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "ml-dash"
|
|
3
|
-
version = "0.6.
|
|
3
|
+
version = "0.6.17"
|
|
4
4
|
description = "ML experiment tracking and data storage"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.9"
|
|
@@ -31,7 +31,7 @@ dependencies = [
|
|
|
31
31
|
"scikit-image>=0.21.0",
|
|
32
32
|
"rich>=13.0.0",
|
|
33
33
|
"cryptography>=42.0.0",
|
|
34
|
-
"params-proto>=3.0.0",
|
|
34
|
+
"params-proto>=3.0.0,<3.2.0",
|
|
35
35
|
]
|
|
36
36
|
|
|
37
37
|
[project.scripts]
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"""
|
|
2
|
+
ML-Dash Python SDK
|
|
3
|
+
|
|
4
|
+
A simple and flexible SDK for ML experiment metricing and data storage.
|
|
5
|
+
|
|
6
|
+
Prefix format: {owner}/{project}/path.../[name]
|
|
7
|
+
- owner: First segment (e.g., your username)
|
|
8
|
+
- project: Second segment (e.g., project name)
|
|
9
|
+
- path: Remaining segments form the folder structure
|
|
10
|
+
- name: Derived from last segment (may be a seed/id)
|
|
11
|
+
|
|
12
|
+
Usage:
|
|
13
|
+
|
|
14
|
+
from ml_dash import Experiment
|
|
15
|
+
|
|
16
|
+
# Local mode - explicit configuration
|
|
17
|
+
with Experiment(
|
|
18
|
+
prefix="ge/my-project/experiments/exp1",
|
|
19
|
+
dash_root=".dash"
|
|
20
|
+
).run as exp:
|
|
21
|
+
exp.log("Training started")
|
|
22
|
+
exp.params.set(lr=0.001)
|
|
23
|
+
exp.metrics("train").log(loss=0.5, step=0)
|
|
24
|
+
|
|
25
|
+
# Default: Remote mode (defaults to https://api.dash.ml)
|
|
26
|
+
with Experiment(prefix="ge/my-project/experiments/exp1").run as exp:
|
|
27
|
+
exp.log("Training started")
|
|
28
|
+
exp.params.set(lr=0.001)
|
|
29
|
+
exp.metrics("train").log(loss=0.5, step=0)
|
|
30
|
+
|
|
31
|
+
# Decorator style
|
|
32
|
+
from ml_dash import ml_dash_experiment
|
|
33
|
+
|
|
34
|
+
@ml_dash_experiment(prefix="ge/my-project/experiments/exp1")
|
|
35
|
+
def train_model(exp):
|
|
36
|
+
exp.log("Training started")
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
from .client import RemoteClient, userinfo
|
|
40
|
+
from .experiment import Experiment, OperationMode, ml_dash_experiment
|
|
41
|
+
from .log import LogBuilder, LogLevel
|
|
42
|
+
from .params import ParametersBuilder
|
|
43
|
+
from .run import RUN
|
|
44
|
+
from .storage import LocalStorage
|
|
45
|
+
|
|
46
|
+
__version__ = "0.6.17"
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def _check_version_compatibility():
|
|
50
|
+
"""
|
|
51
|
+
Enforce strict version requirement by checking against PyPI.
|
|
52
|
+
|
|
53
|
+
Raises ImportError if installed version is older than the latest on PyPI.
|
|
54
|
+
This ensures all users are on the latest version with newest features and bug fixes.
|
|
55
|
+
"""
|
|
56
|
+
try:
|
|
57
|
+
from packaging import version
|
|
58
|
+
import httpx
|
|
59
|
+
except ImportError:
|
|
60
|
+
# If packaging or httpx not available, skip check
|
|
61
|
+
return
|
|
62
|
+
|
|
63
|
+
try:
|
|
64
|
+
# Check PyPI for latest version (with short timeout)
|
|
65
|
+
response = httpx.get(
|
|
66
|
+
"https://pypi.org/pypi/ml-dash/json",
|
|
67
|
+
timeout=2.0,
|
|
68
|
+
follow_redirects=True
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
if response.status_code == 200:
|
|
72
|
+
latest_version = response.json()["info"]["version"]
|
|
73
|
+
current = version.parse(__version__)
|
|
74
|
+
latest = version.parse(latest_version)
|
|
75
|
+
|
|
76
|
+
if current < latest:
|
|
77
|
+
raise ImportError(
|
|
78
|
+
f"\n"
|
|
79
|
+
f"{'=' * 80}\n"
|
|
80
|
+
f"ERROR: ml-dash version {__version__} is outdated!\n"
|
|
81
|
+
f"{'=' * 80}\n"
|
|
82
|
+
f"\n"
|
|
83
|
+
f"Your installed version ({__version__}) is no longer supported.\n"
|
|
84
|
+
f"Latest version on PyPI: {latest_version}\n"
|
|
85
|
+
f"\n"
|
|
86
|
+
f"Please upgrade to the latest version:\n"
|
|
87
|
+
f"\n"
|
|
88
|
+
f" pip install --upgrade ml-dash\n"
|
|
89
|
+
f"\n"
|
|
90
|
+
f"Or with uv:\n"
|
|
91
|
+
f"\n"
|
|
92
|
+
f" uv pip install --upgrade ml-dash\n"
|
|
93
|
+
f" uv sync --upgrade-package ml-dash\n"
|
|
94
|
+
f"\n"
|
|
95
|
+
f"{'=' * 80}\n"
|
|
96
|
+
)
|
|
97
|
+
except (httpx.TimeoutException, httpx.ConnectError, KeyError):
|
|
98
|
+
# Silently skip check if PyPI is unreachable or response is malformed
|
|
99
|
+
# Don't block users due to network issues
|
|
100
|
+
pass
|
|
101
|
+
except Exception:
|
|
102
|
+
# Catch any other errors and silently continue
|
|
103
|
+
# Better to let users work than block on unexpected errors
|
|
104
|
+
pass
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
# Enforce version check on import
|
|
108
|
+
_check_version_compatibility()
|
|
109
|
+
|
|
110
|
+
__all__ = [
|
|
111
|
+
"Experiment",
|
|
112
|
+
"ml_dash_experiment",
|
|
113
|
+
"OperationMode",
|
|
114
|
+
"RemoteClient",
|
|
115
|
+
"LocalStorage",
|
|
116
|
+
"LogLevel",
|
|
117
|
+
"LogBuilder",
|
|
118
|
+
"ParametersBuilder",
|
|
119
|
+
"RUN",
|
|
120
|
+
"userinfo",
|
|
121
|
+
]
|
|
@@ -381,6 +381,7 @@ class Experiment:
|
|
|
381
381
|
|
|
382
382
|
try:
|
|
383
383
|
from rich.console import Console
|
|
384
|
+
from ml_dash import __version__
|
|
384
385
|
|
|
385
386
|
console = Console()
|
|
386
387
|
experiment_url = f"https://dash.ml/{self.run.prefix}"
|
|
@@ -388,15 +389,19 @@ class Experiment:
|
|
|
388
389
|
f"[{status_color}]{status_emoji} Experiment {status.lower()}: "
|
|
389
390
|
f"[bold]{self.run.name}[/bold] (project: {self.run.project})[/{status_color}]\n"
|
|
390
391
|
f"[dim]View results, statistics, and plots online at:[/dim] "
|
|
391
|
-
f"[link={experiment_url}]{experiment_url}[/link]"
|
|
392
|
+
f"[link={experiment_url}]{experiment_url}[/link]\n"
|
|
393
|
+
f"[dim]ml-dash version: {__version__}[/dim]"
|
|
392
394
|
)
|
|
393
395
|
except ImportError:
|
|
394
396
|
# Fallback if rich is not available
|
|
397
|
+
from ml_dash import __version__
|
|
398
|
+
|
|
395
399
|
experiment_url = f"https://dash.ml/{self.run.prefix}"
|
|
396
400
|
print(
|
|
397
401
|
f"{status_emoji} Experiment {status.lower()}: {self.run.name} (project: {self.run.project})"
|
|
398
402
|
)
|
|
399
403
|
print(f"View results at: {experiment_url}")
|
|
404
|
+
print(f"ml-dash version: {__version__}")
|
|
400
405
|
|
|
401
406
|
except Exception as e:
|
|
402
407
|
# Raise on status update failure
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
ML-Dash Python SDK
|
|
3
|
-
|
|
4
|
-
A simple and flexible SDK for ML experiment metricing and data storage.
|
|
5
|
-
|
|
6
|
-
Prefix format: {owner}/{project}/path.../[name]
|
|
7
|
-
- owner: First segment (e.g., your username)
|
|
8
|
-
- project: Second segment (e.g., project name)
|
|
9
|
-
- path: Remaining segments form the folder structure
|
|
10
|
-
- name: Derived from last segment (may be a seed/id)
|
|
11
|
-
|
|
12
|
-
Usage:
|
|
13
|
-
|
|
14
|
-
from ml_dash import Experiment
|
|
15
|
-
|
|
16
|
-
# Local mode - explicit configuration
|
|
17
|
-
with Experiment(
|
|
18
|
-
prefix="ge/my-project/experiments/exp1",
|
|
19
|
-
dash_root=".dash"
|
|
20
|
-
).run as exp:
|
|
21
|
-
exp.log("Training started")
|
|
22
|
-
exp.params.set(lr=0.001)
|
|
23
|
-
exp.metrics("train").log(loss=0.5, step=0)
|
|
24
|
-
|
|
25
|
-
# Default: Remote mode (defaults to https://api.dash.ml)
|
|
26
|
-
with Experiment(prefix="ge/my-project/experiments/exp1").run as exp:
|
|
27
|
-
exp.log("Training started")
|
|
28
|
-
exp.params.set(lr=0.001)
|
|
29
|
-
exp.metrics("train").log(loss=0.5, step=0)
|
|
30
|
-
|
|
31
|
-
# Decorator style
|
|
32
|
-
from ml_dash import ml_dash_experiment
|
|
33
|
-
|
|
34
|
-
@ml_dash_experiment(prefix="ge/my-project/experiments/exp1")
|
|
35
|
-
def train_model(exp):
|
|
36
|
-
exp.log("Training started")
|
|
37
|
-
"""
|
|
38
|
-
|
|
39
|
-
from .client import RemoteClient, userinfo
|
|
40
|
-
from .experiment import Experiment, OperationMode, ml_dash_experiment
|
|
41
|
-
from .log import LogBuilder, LogLevel
|
|
42
|
-
from .params import ParametersBuilder
|
|
43
|
-
from .run import RUN
|
|
44
|
-
from .storage import LocalStorage
|
|
45
|
-
|
|
46
|
-
__version__ = "0.6.14"
|
|
47
|
-
|
|
48
|
-
# Required version - MUST match exactly (blocks all older versions)
|
|
49
|
-
# Update this with EVERY release to force users to upgrade
|
|
50
|
-
REQUIRED_VERSION = "0.6.14"
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
def _check_version_compatibility():
|
|
54
|
-
"""
|
|
55
|
-
Enforce strict version requirement.
|
|
56
|
-
|
|
57
|
-
Raises ImportError if installed version doesn't match the required version.
|
|
58
|
-
This ensures all users are on the latest version with newest features and bug fixes.
|
|
59
|
-
"""
|
|
60
|
-
try:
|
|
61
|
-
from packaging import version
|
|
62
|
-
except ImportError:
|
|
63
|
-
# If packaging is not available, skip check
|
|
64
|
-
# (unlikely since it's a common dependency)
|
|
65
|
-
return
|
|
66
|
-
|
|
67
|
-
current = version.parse(__version__)
|
|
68
|
-
required = version.parse(REQUIRED_VERSION)
|
|
69
|
-
|
|
70
|
-
if current < required:
|
|
71
|
-
raise ImportError(
|
|
72
|
-
f"\n"
|
|
73
|
-
f"{'=' * 80}\n"
|
|
74
|
-
f"ERROR: ml-dash version {__version__} is outdated!\n"
|
|
75
|
-
f"{'=' * 80}\n"
|
|
76
|
-
f"\n"
|
|
77
|
-
f"Your installed version ({__version__}) is no longer supported.\n"
|
|
78
|
-
f"Required version: {REQUIRED_VERSION}\n"
|
|
79
|
-
f"\n"
|
|
80
|
-
f"Please upgrade to the latest version:\n"
|
|
81
|
-
f"\n"
|
|
82
|
-
f" pip install --upgrade ml-dash\n"
|
|
83
|
-
f"\n"
|
|
84
|
-
f"Or with uv:\n"
|
|
85
|
-
f"\n"
|
|
86
|
-
f" uv pip install --upgrade ml-dash\n"
|
|
87
|
-
f" uv sync --upgrade-package ml-dash\n"
|
|
88
|
-
f"\n"
|
|
89
|
-
f"{'=' * 80}\n"
|
|
90
|
-
)
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
# Enforce version check on import
|
|
94
|
-
_check_version_compatibility()
|
|
95
|
-
|
|
96
|
-
__all__ = [
|
|
97
|
-
"Experiment",
|
|
98
|
-
"ml_dash_experiment",
|
|
99
|
-
"OperationMode",
|
|
100
|
-
"RemoteClient",
|
|
101
|
-
"LocalStorage",
|
|
102
|
-
"LogLevel",
|
|
103
|
-
"LogBuilder",
|
|
104
|
-
"ParametersBuilder",
|
|
105
|
-
"RUN",
|
|
106
|
-
"userinfo",
|
|
107
|
-
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|