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.
Files changed (38) hide show
  1. {ml_dash-0.6.15 → ml_dash-0.6.17}/PKG-INFO +2 -2
  2. {ml_dash-0.6.15 → ml_dash-0.6.17}/pyproject.toml +2 -2
  3. ml_dash-0.6.17/src/ml_dash/__init__.py +121 -0
  4. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/experiment.py +6 -1
  5. ml_dash-0.6.15/src/ml_dash/__init__.py +0 -107
  6. {ml_dash-0.6.15 → ml_dash-0.6.17}/LICENSE +0 -0
  7. {ml_dash-0.6.15 → ml_dash-0.6.17}/README.md +0 -0
  8. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/auth/__init__.py +0 -0
  9. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/auth/constants.py +0 -0
  10. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/auth/device_flow.py +0 -0
  11. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/auth/device_secret.py +0 -0
  12. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/auth/exceptions.py +0 -0
  13. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/auth/token_storage.py +0 -0
  14. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/auto_start.py +0 -0
  15. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/buffer.py +0 -0
  16. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/cli.py +0 -0
  17. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/cli_commands/__init__.py +0 -0
  18. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/cli_commands/api.py +0 -0
  19. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/cli_commands/create.py +0 -0
  20. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/cli_commands/download.py +0 -0
  21. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/cli_commands/list.py +0 -0
  22. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/cli_commands/login.py +0 -0
  23. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/cli_commands/logout.py +0 -0
  24. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/cli_commands/profile.py +0 -0
  25. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/cli_commands/remove.py +0 -0
  26. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/cli_commands/upload.py +0 -0
  27. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/client.py +0 -0
  28. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/config.py +0 -0
  29. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/files.py +0 -0
  30. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/log.py +0 -0
  31. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/metric.py +0 -0
  32. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/params.py +0 -0
  33. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/py.typed +0 -0
  34. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/remote_auto_start.py +0 -0
  35. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/run.py +0 -0
  36. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/snowflake.py +0 -0
  37. {ml_dash-0.6.15 → ml_dash-0.6.17}/src/ml_dash/storage.py +0 -0
  38. {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.15
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.15"
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