runledger-cli 0.1.4__tar.gz → 0.1.6__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 (23) hide show
  1. runledger_cli-0.1.6/LICENSE +23 -0
  2. runledger_cli-0.1.6/PKG-INFO +126 -0
  3. runledger_cli-0.1.6/README.md +114 -0
  4. {runledger_cli-0.1.4 → runledger_cli-0.1.6}/cli/ledger.py +3 -3
  5. {runledger_cli-0.1.4 → runledger_cli-0.1.6}/pyproject.toml +5 -1
  6. runledger_cli-0.1.6/runledger_cli.egg-info/PKG-INFO +126 -0
  7. {runledger_cli-0.1.4 → runledger_cli-0.1.6}/runledger_cli.egg-info/SOURCES.txt +1 -0
  8. runledger_cli-0.1.4/PKG-INFO +0 -90
  9. runledger_cli-0.1.4/README.md +0 -81
  10. runledger_cli-0.1.4/runledger_cli.egg-info/PKG-INFO +0 -90
  11. {runledger_cli-0.1.4 → runledger_cli-0.1.6}/cli/__init__.py +0 -0
  12. {runledger_cli-0.1.4 → runledger_cli-0.1.6}/cli/docker-compose.yml +0 -0
  13. {runledger_cli-0.1.4 → runledger_cli-0.1.6}/cli/guided.py +0 -0
  14. {runledger_cli-0.1.4 → runledger_cli-0.1.6}/cli/tests/__init__.py +0 -0
  15. {runledger_cli-0.1.4 → runledger_cli-0.1.6}/cli/tests/test_data_features.py +0 -0
  16. {runledger_cli-0.1.4 → runledger_cli-0.1.6}/cli/tests/test_integration.py +0 -0
  17. {runledger_cli-0.1.4 → runledger_cli-0.1.6}/cli/tests/test_ledger.py +0 -0
  18. {runledger_cli-0.1.4 → runledger_cli-0.1.6}/cli/tests/test_real_results.py +0 -0
  19. {runledger_cli-0.1.4 → runledger_cli-0.1.6}/runledger_cli.egg-info/dependency_links.txt +0 -0
  20. {runledger_cli-0.1.4 → runledger_cli-0.1.6}/runledger_cli.egg-info/entry_points.txt +0 -0
  21. {runledger_cli-0.1.4 → runledger_cli-0.1.6}/runledger_cli.egg-info/requires.txt +0 -0
  22. {runledger_cli-0.1.4 → runledger_cli-0.1.6}/runledger_cli.egg-info/top_level.txt +0 -0
  23. {runledger_cli-0.1.4 → runledger_cli-0.1.6}/setup.cfg +0 -0
@@ -0,0 +1,23 @@
1
+ @"
2
+ MIT License
3
+
4
+ Copyright (c) $(Get-Date -Format "yyyy") [Ahmed Rafat]
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
23
+ "@ | Out-File -FilePath LICENSE -Encoding utf8
@@ -0,0 +1,126 @@
1
+ Metadata-Version: 2.4
2
+ Name: runledger-cli
3
+ Version: 0.1.6
4
+ Summary: Zero‑instrumentation experiment registry CLI
5
+ Project-URL: Repository, https://github.com/ahmedrafatcse/run-ledger
6
+ Requires-Python: >=3.10
7
+ Description-Content-Type: text/markdown
8
+ License-File: LICENSE
9
+ Requires-Dist: requests
10
+ Requires-Dist: rich
11
+ Dynamic: license-file
12
+
13
+ # RunLedger
14
+
15
+ [![PyPI version](https://img.shields.io/pypi/v/runledger-cli)](https://pypi.org/project/runledger-cli/)
16
+ [![Docker Pulls](https://img.shields.io/docker/pulls/ahmedrafatdev/runledger)](https://hub.docker.com/r/ahmedrafatdev/runledger)
17
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
18
+
19
+ **A zero‑instrumentation experiment registry.**
20
+ Point RunLedger at a folder of JSON experiment files and search, filter, aggregate, diff, and export the results — no SDK, no code changes, no cloud.
21
+
22
+ Most experiment trackers make you instrument your training code before they can help you. RunLedger reads the JSON you're already writing (no `wandb.init()`, no `mlflow.log_metric()`) and indexes it in real PostgreSQL, giving you full relational search: structured comparisons, full‑text, fuzzy matching, and exact array‑element lookups, from one CLI command.
23
+
24
+ Backed by Postgres, served by a Spring Boot API, fronted by a Python CLI.
25
+
26
+ ---
27
+
28
+ ## Install
29
+
30
+ ```bash
31
+ pip install runledger-cli
32
+ ```
33
+
34
+ **You need Docker** — the only required dependency beyond Python. The backend (Postgres + the Java API) runs entirely inside Docker containers. `runledger` starts and stops them automatically; you never touch a database, a server, or a config file. If Docker isn't installed, the CLI detects that on first run and links you straight to the installer.
35
+
36
+ ### Troubleshooting: command not found
37
+
38
+ <details>
39
+ <summary>Windows – `runledger` not recognized</summary>
40
+
41
+ On some Windows systems the Python Scripts folder is not automatically added to PATH. Two options:
42
+
43
+ 1. **Add the Scripts folder to PATH permanently** (recommended):
44
+ - Find the install location: `pip show runledger-cli | findstr Location`
45
+ - Navigate to that folder, then up one level to the `Scripts` directory.
46
+ - Add that `Scripts` path to your system PATH via **System Properties > Environment Variables**.
47
+ - Restart your terminal.
48
+
49
+ 2. **Use the Python module fallback** (works immediately, no PATH changes):
50
+ ```bash
51
+ python -m cli.ledger
52
+ ```
53
+ All subcommands and the guided wizard work exactly the same way.
54
+
55
+ Once PATH is configured, `runledger` works as shown in the examples below.
56
+ </details>
57
+
58
+ <details>
59
+ <summary>Fedora / RHEL – Backend can't reach PostgreSQL (UnknownHostException)</summary>
60
+
61
+ Fedora's `firewalld` can block Docker's internal bridge networking, causing the app container to fail DNS resolution for `postgres`. Fix:
62
+
63
+ ```bash
64
+ sudo firewall-cmd --zone=trusted --add-interface=docker0 --permanent
65
+ sudo firewall-cmd --reload
66
+ sudo systemctl restart docker
67
+ ```
68
+
69
+ Then try `runledger guided` again. If you still see a port conflict (`port is already allocated`), check if another process is using port 5432 (`sudo ss -tulpn | grep 5432`) and either stop it or change the host port mapping in the CLI's compose file.
70
+ </details>
71
+
72
+ <details>
73
+ <summary>Installing from source</summary>
74
+
75
+ ```bash
76
+ git clone https://github.com/ahmedrafatcse/run-ledger.git
77
+ cd run-ledger
78
+ docker compose up -d
79
+ pip install -e .
80
+ ```
81
+ </details>
82
+
83
+ ---
84
+
85
+ ## Quick start
86
+
87
+ ```bash
88
+ runledger scan ~/experiments --batch my-sweep
89
+ runledger search --metric accuracy --op gt --value 0.9 --batch my-sweep
90
+ runledger aggregate --metric accuracy --agg AVG --group-by experiment --batch my-sweep
91
+ ```
92
+
93
+ New here? Run `runledger` with no arguments, the guided wizard walks you through your first scan and search.
94
+
95
+ > **Tip:** you can also use `python -m cli.ledger` interchangeably with `runledger` on any platform.
96
+
97
+ ---
98
+
99
+ ## Features
100
+
101
+ - **Search any field, no schema required** — structured comparisons (`gt`, `lt`, `eq`…), full‑text with stemming, and fuzzy matching for typos, all on arbitrary dot‑paths, including fields nested inside arrays (`results[].sst2_cacc`).
102
+ - **Compound AND/OR** across multiple conditions in one query.
103
+ - **Exact match pointers** — array searches tell you exactly which element(s) matched (`results[3].sst2_cacc = 0.933`), not just that the run did.
104
+ - **Aggregates & group‑by** — `AVG` / `MAX` / `MIN` / `SUM` / `COUNT`, straight from the CLI.
105
+ - **Safe re‑scanning** — ingestion is idempotent; a changed file gets a new version, and `diff --history` shows you what changed and when.
106
+ - **Run diff, saved searches, JSONL ingestion, block‑depth control** — see [docs/examples.md](docs/examples.md) for each in action.
107
+ - **Self‑hosted, local‑first** — your data never leaves your machine.
108
+
109
+ ---
110
+
111
+ ## Metric paths
112
+
113
+ Address any value with a dot‑path — `accuracy`, `metrics.loss`, `results[].sst2_cacc`. Shorthand (`cacc`) resolves automatically when unambiguous. Run `runledger metrics --batch <batch>` to see everything discovered in a scan, or add `--verbose` for full paths.
114
+
115
+ ---
116
+
117
+ ## Docs
118
+
119
+ - [API reference](docs/api.md)
120
+ - [Usage examples](docs/examples.md)
121
+
122
+ ---
123
+
124
+ ## License
125
+
126
+ MIT
@@ -0,0 +1,114 @@
1
+ # RunLedger
2
+
3
+ [![PyPI version](https://img.shields.io/pypi/v/runledger-cli)](https://pypi.org/project/runledger-cli/)
4
+ [![Docker Pulls](https://img.shields.io/docker/pulls/ahmedrafatdev/runledger)](https://hub.docker.com/r/ahmedrafatdev/runledger)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
6
+
7
+ **A zero‑instrumentation experiment registry.**
8
+ Point RunLedger at a folder of JSON experiment files and search, filter, aggregate, diff, and export the results — no SDK, no code changes, no cloud.
9
+
10
+ Most experiment trackers make you instrument your training code before they can help you. RunLedger reads the JSON you're already writing (no `wandb.init()`, no `mlflow.log_metric()`) and indexes it in real PostgreSQL, giving you full relational search: structured comparisons, full‑text, fuzzy matching, and exact array‑element lookups, from one CLI command.
11
+
12
+ Backed by Postgres, served by a Spring Boot API, fronted by a Python CLI.
13
+
14
+ ---
15
+
16
+ ## Install
17
+
18
+ ```bash
19
+ pip install runledger-cli
20
+ ```
21
+
22
+ **You need Docker** — the only required dependency beyond Python. The backend (Postgres + the Java API) runs entirely inside Docker containers. `runledger` starts and stops them automatically; you never touch a database, a server, or a config file. If Docker isn't installed, the CLI detects that on first run and links you straight to the installer.
23
+
24
+ ### Troubleshooting: command not found
25
+
26
+ <details>
27
+ <summary>Windows – `runledger` not recognized</summary>
28
+
29
+ On some Windows systems the Python Scripts folder is not automatically added to PATH. Two options:
30
+
31
+ 1. **Add the Scripts folder to PATH permanently** (recommended):
32
+ - Find the install location: `pip show runledger-cli | findstr Location`
33
+ - Navigate to that folder, then up one level to the `Scripts` directory.
34
+ - Add that `Scripts` path to your system PATH via **System Properties > Environment Variables**.
35
+ - Restart your terminal.
36
+
37
+ 2. **Use the Python module fallback** (works immediately, no PATH changes):
38
+ ```bash
39
+ python -m cli.ledger
40
+ ```
41
+ All subcommands and the guided wizard work exactly the same way.
42
+
43
+ Once PATH is configured, `runledger` works as shown in the examples below.
44
+ </details>
45
+
46
+ <details>
47
+ <summary>Fedora / RHEL – Backend can't reach PostgreSQL (UnknownHostException)</summary>
48
+
49
+ Fedora's `firewalld` can block Docker's internal bridge networking, causing the app container to fail DNS resolution for `postgres`. Fix:
50
+
51
+ ```bash
52
+ sudo firewall-cmd --zone=trusted --add-interface=docker0 --permanent
53
+ sudo firewall-cmd --reload
54
+ sudo systemctl restart docker
55
+ ```
56
+
57
+ Then try `runledger guided` again. If you still see a port conflict (`port is already allocated`), check if another process is using port 5432 (`sudo ss -tulpn | grep 5432`) and either stop it or change the host port mapping in the CLI's compose file.
58
+ </details>
59
+
60
+ <details>
61
+ <summary>Installing from source</summary>
62
+
63
+ ```bash
64
+ git clone https://github.com/ahmedrafatcse/run-ledger.git
65
+ cd run-ledger
66
+ docker compose up -d
67
+ pip install -e .
68
+ ```
69
+ </details>
70
+
71
+ ---
72
+
73
+ ## Quick start
74
+
75
+ ```bash
76
+ runledger scan ~/experiments --batch my-sweep
77
+ runledger search --metric accuracy --op gt --value 0.9 --batch my-sweep
78
+ runledger aggregate --metric accuracy --agg AVG --group-by experiment --batch my-sweep
79
+ ```
80
+
81
+ New here? Run `runledger` with no arguments, the guided wizard walks you through your first scan and search.
82
+
83
+ > **Tip:** you can also use `python -m cli.ledger` interchangeably with `runledger` on any platform.
84
+
85
+ ---
86
+
87
+ ## Features
88
+
89
+ - **Search any field, no schema required** — structured comparisons (`gt`, `lt`, `eq`…), full‑text with stemming, and fuzzy matching for typos, all on arbitrary dot‑paths, including fields nested inside arrays (`results[].sst2_cacc`).
90
+ - **Compound AND/OR** across multiple conditions in one query.
91
+ - **Exact match pointers** — array searches tell you exactly which element(s) matched (`results[3].sst2_cacc = 0.933`), not just that the run did.
92
+ - **Aggregates & group‑by** — `AVG` / `MAX` / `MIN` / `SUM` / `COUNT`, straight from the CLI.
93
+ - **Safe re‑scanning** — ingestion is idempotent; a changed file gets a new version, and `diff --history` shows you what changed and when.
94
+ - **Run diff, saved searches, JSONL ingestion, block‑depth control** — see [docs/examples.md](docs/examples.md) for each in action.
95
+ - **Self‑hosted, local‑first** — your data never leaves your machine.
96
+
97
+ ---
98
+
99
+ ## Metric paths
100
+
101
+ Address any value with a dot‑path — `accuracy`, `metrics.loss`, `results[].sst2_cacc`. Shorthand (`cacc`) resolves automatically when unambiguous. Run `runledger metrics --batch <batch>` to see everything discovered in a scan, or add `--verbose` for full paths.
102
+
103
+ ---
104
+
105
+ ## Docs
106
+
107
+ - [API reference](docs/api.md)
108
+ - [Usage examples](docs/examples.md)
109
+
110
+ ---
111
+
112
+ ## License
113
+
114
+ MIT
@@ -59,7 +59,7 @@ console = Console()
59
59
  # Helpers
60
60
  # ------------------------------------------------------------
61
61
  def check_docker():
62
- result = subprocess.run("docker version", shell=True,
62
+ result = subprocess.run(["docker", "version"],
63
63
  capture_output=True, text=True)
64
64
  if result.returncode != 0:
65
65
  console.print("[bold red]Docker is not installed or not reachable.[/bold red]")
@@ -94,7 +94,7 @@ def start_backend():
94
94
  console.print("Starting RunLedger backend...")
95
95
  subprocess.run(
96
96
  ["docker", "compose", "-f", compose_file, "-p", "runledger", "up", "-d"],
97
- shell=True, check=True
97
+ check=True
98
98
  )
99
99
  if wait_for_backend():
100
100
  console.print("[green]RunLedger backend is running.[/green]")
@@ -107,7 +107,7 @@ def stop_backend():
107
107
  if os.path.exists(compose_file):
108
108
  subprocess.run(
109
109
  ["docker", "compose", "-f", compose_file, "-p", "runledger", "down"],
110
- shell=True, check=True
110
+ check=True
111
111
  )
112
112
  console.print("RunLedger backend stopped.")
113
113
  else:
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "runledger-cli"
7
- version = "0.1.4"
7
+ version = "0.1.6"
8
8
  description = "Zero‑instrumentation experiment registry CLI"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -12,6 +12,10 @@ dependencies = [
12
12
  "requests",
13
13
  "rich",
14
14
  ]
15
+
16
+ [project.urls]
17
+ Repository = "https://github.com/ahmedrafatcse/run-ledger"
18
+
15
19
  [project.scripts]
16
20
  runledger = "cli.ledger:main"
17
21
 
@@ -0,0 +1,126 @@
1
+ Metadata-Version: 2.4
2
+ Name: runledger-cli
3
+ Version: 0.1.6
4
+ Summary: Zero‑instrumentation experiment registry CLI
5
+ Project-URL: Repository, https://github.com/ahmedrafatcse/run-ledger
6
+ Requires-Python: >=3.10
7
+ Description-Content-Type: text/markdown
8
+ License-File: LICENSE
9
+ Requires-Dist: requests
10
+ Requires-Dist: rich
11
+ Dynamic: license-file
12
+
13
+ # RunLedger
14
+
15
+ [![PyPI version](https://img.shields.io/pypi/v/runledger-cli)](https://pypi.org/project/runledger-cli/)
16
+ [![Docker Pulls](https://img.shields.io/docker/pulls/ahmedrafatdev/runledger)](https://hub.docker.com/r/ahmedrafatdev/runledger)
17
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
18
+
19
+ **A zero‑instrumentation experiment registry.**
20
+ Point RunLedger at a folder of JSON experiment files and search, filter, aggregate, diff, and export the results — no SDK, no code changes, no cloud.
21
+
22
+ Most experiment trackers make you instrument your training code before they can help you. RunLedger reads the JSON you're already writing (no `wandb.init()`, no `mlflow.log_metric()`) and indexes it in real PostgreSQL, giving you full relational search: structured comparisons, full‑text, fuzzy matching, and exact array‑element lookups, from one CLI command.
23
+
24
+ Backed by Postgres, served by a Spring Boot API, fronted by a Python CLI.
25
+
26
+ ---
27
+
28
+ ## Install
29
+
30
+ ```bash
31
+ pip install runledger-cli
32
+ ```
33
+
34
+ **You need Docker** — the only required dependency beyond Python. The backend (Postgres + the Java API) runs entirely inside Docker containers. `runledger` starts and stops them automatically; you never touch a database, a server, or a config file. If Docker isn't installed, the CLI detects that on first run and links you straight to the installer.
35
+
36
+ ### Troubleshooting: command not found
37
+
38
+ <details>
39
+ <summary>Windows – `runledger` not recognized</summary>
40
+
41
+ On some Windows systems the Python Scripts folder is not automatically added to PATH. Two options:
42
+
43
+ 1. **Add the Scripts folder to PATH permanently** (recommended):
44
+ - Find the install location: `pip show runledger-cli | findstr Location`
45
+ - Navigate to that folder, then up one level to the `Scripts` directory.
46
+ - Add that `Scripts` path to your system PATH via **System Properties > Environment Variables**.
47
+ - Restart your terminal.
48
+
49
+ 2. **Use the Python module fallback** (works immediately, no PATH changes):
50
+ ```bash
51
+ python -m cli.ledger
52
+ ```
53
+ All subcommands and the guided wizard work exactly the same way.
54
+
55
+ Once PATH is configured, `runledger` works as shown in the examples below.
56
+ </details>
57
+
58
+ <details>
59
+ <summary>Fedora / RHEL – Backend can't reach PostgreSQL (UnknownHostException)</summary>
60
+
61
+ Fedora's `firewalld` can block Docker's internal bridge networking, causing the app container to fail DNS resolution for `postgres`. Fix:
62
+
63
+ ```bash
64
+ sudo firewall-cmd --zone=trusted --add-interface=docker0 --permanent
65
+ sudo firewall-cmd --reload
66
+ sudo systemctl restart docker
67
+ ```
68
+
69
+ Then try `runledger guided` again. If you still see a port conflict (`port is already allocated`), check if another process is using port 5432 (`sudo ss -tulpn | grep 5432`) and either stop it or change the host port mapping in the CLI's compose file.
70
+ </details>
71
+
72
+ <details>
73
+ <summary>Installing from source</summary>
74
+
75
+ ```bash
76
+ git clone https://github.com/ahmedrafatcse/run-ledger.git
77
+ cd run-ledger
78
+ docker compose up -d
79
+ pip install -e .
80
+ ```
81
+ </details>
82
+
83
+ ---
84
+
85
+ ## Quick start
86
+
87
+ ```bash
88
+ runledger scan ~/experiments --batch my-sweep
89
+ runledger search --metric accuracy --op gt --value 0.9 --batch my-sweep
90
+ runledger aggregate --metric accuracy --agg AVG --group-by experiment --batch my-sweep
91
+ ```
92
+
93
+ New here? Run `runledger` with no arguments, the guided wizard walks you through your first scan and search.
94
+
95
+ > **Tip:** you can also use `python -m cli.ledger` interchangeably with `runledger` on any platform.
96
+
97
+ ---
98
+
99
+ ## Features
100
+
101
+ - **Search any field, no schema required** — structured comparisons (`gt`, `lt`, `eq`…), full‑text with stemming, and fuzzy matching for typos, all on arbitrary dot‑paths, including fields nested inside arrays (`results[].sst2_cacc`).
102
+ - **Compound AND/OR** across multiple conditions in one query.
103
+ - **Exact match pointers** — array searches tell you exactly which element(s) matched (`results[3].sst2_cacc = 0.933`), not just that the run did.
104
+ - **Aggregates & group‑by** — `AVG` / `MAX` / `MIN` / `SUM` / `COUNT`, straight from the CLI.
105
+ - **Safe re‑scanning** — ingestion is idempotent; a changed file gets a new version, and `diff --history` shows you what changed and when.
106
+ - **Run diff, saved searches, JSONL ingestion, block‑depth control** — see [docs/examples.md](docs/examples.md) for each in action.
107
+ - **Self‑hosted, local‑first** — your data never leaves your machine.
108
+
109
+ ---
110
+
111
+ ## Metric paths
112
+
113
+ Address any value with a dot‑path — `accuracy`, `metrics.loss`, `results[].sst2_cacc`. Shorthand (`cacc`) resolves automatically when unambiguous. Run `runledger metrics --batch <batch>` to see everything discovered in a scan, or add `--verbose` for full paths.
114
+
115
+ ---
116
+
117
+ ## Docs
118
+
119
+ - [API reference](docs/api.md)
120
+ - [Usage examples](docs/examples.md)
121
+
122
+ ---
123
+
124
+ ## License
125
+
126
+ MIT
@@ -1,3 +1,4 @@
1
+ LICENSE
1
2
  README.md
2
3
  pyproject.toml
3
4
  cli/__init__.py
@@ -1,90 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: runledger-cli
3
- Version: 0.1.4
4
- Summary: Zero‑instrumentation experiment registry CLI
5
- Requires-Python: >=3.10
6
- Description-Content-Type: text/markdown
7
- Requires-Dist: requests
8
- Requires-Dist: rich
9
-
10
- Here’s the updated README with the troubleshooting note added right after the installation instructions. The primary command remains `runledger`, but users who hit the Windows PATH issue now have a clear fallback.
11
-
12
- ---
13
-
14
- # RunLedger
15
-
16
- **A zero-instrumentation experiment registry.** Point RunLedger at a folder of JSON experiment files and search, filter, aggregate, diff, and export the results; no SDK, no code changes, no cloud.
17
-
18
- Most experiment trackers make you instrument your training code before they can help you. RunLedger reads the JSON you're already writing, no `wandb.init()`, no `mlflow.log_metric()`, and indexes it in real Postgres, giving you full relational search: structured comparisons, full-text, fuzzy matching, and exact array-element lookups, from one CLI command.
19
-
20
- Backed by Postgres, served by a Spring Boot API, and fronted by a Python CLI.
21
-
22
- ## Install
23
-
24
- ```bash
25
- pip install runledger-cli
26
- ```
27
-
28
- Requires Docker. If it's not installed, `runledger` detects that on first run and links you straight to the installer; everything else (Postgres, the backend) is managed for you.
29
-
30
- ### Troubleshooting: `runledger` command not found (Windows)
31
-
32
- On some Windows systems, the Python Scripts folder is not automatically added to your PATH. If `runledger` is not recognized after installation, you have two options:
33
-
34
- 1. **Add the Scripts folder to your PATH permanently** (recommended):
35
- - Find where `runledger` was installed: `pip show runledger-cli | findstr Location`
36
- - Navigate to that folder, then up one level to the `Scripts` directory.
37
- - Add that `Scripts` path to your system PATH via **System Properties > Environment Variables**.
38
- - Restart your terminal.
39
-
40
- 2. **Use the Python module fallback** (works immediately, no PATH changes):
41
- ```bash
42
- python -m cli.ledger
43
- ```
44
- All subcommands and the guided wizard work exactly the same way; just prefix every command with `python -m cli.ledger`.
45
-
46
- Once the PATH is configured, `runledger` will work as shown in the examples below.
47
-
48
- <details>
49
- <summary>Installing from source</summary>
50
-
51
- ```bash
52
- git clone https://github.com/yourusername/run-ledger.git
53
- cd run-ledger
54
- docker compose up -d
55
- pip install -e .
56
- ```
57
- </details>
58
-
59
- ## Quick start
60
-
61
- ```bash
62
- runledger scan ~/experiments --batch my-sweep
63
- runledger search --metric accuracy --op gt --value 0.9 --batch my-sweep
64
- runledger aggregate --metric accuracy --agg AVG --group-by experiment --batch my-sweep
65
- ```
66
-
67
- New here? Run `runledger` with no arguments — the guided wizard walks you through your first scan and search.
68
-
69
- ## What you get
70
-
71
- - **Search any field, no schema required** — structured comparisons (`gt`, `lt`, `eq`...), full-text with stemming, and fuzzy matching for typos, all on arbitrary dot-paths, including fields nested inside arrays (`results[].sst2_cacc`).
72
- - **Compound AND/OR** across multiple conditions in one query.
73
- - **Exact match pointers** — array searches tell you exactly which element(s) matched (`results[3].sst2_cacc = 0.933`), not just that the run did.
74
- - **Aggregates & group-by** — `AVG` / `MAX` / `MIN` / `SUM` / `COUNT`, straight from the CLI.
75
- - **Safe re-scanning** — ingestion is idempotent; a changed file gets a new version, and `diff --history` shows you what changed and when.
76
- - **Run diff, saved searches, JSONL ingestion, block-depth control** — see [docs/examples.md](docs/examples.md) for each in action.
77
- - **Self-hosted, local-first** — your data never leaves your machine.
78
-
79
- ## Metric paths
80
-
81
- Address any value with a dot-path — `accuracy`, `metrics.loss`, `results[].sst2_cacc`. Shorthand (`cacc`) resolves automatically when it's unambiguous. Run `runledger metrics --batch <batch>` to see everything discovered in a scan, or add `--verbose` for full paths.
82
-
83
- ## Docs
84
-
85
- - [API reference](docs/api.md)
86
- - [Usage examples](docs/examples.md)
87
-
88
- ## License
89
-
90
- MIT
@@ -1,81 +0,0 @@
1
- Here’s the updated README with the troubleshooting note added right after the installation instructions. The primary command remains `runledger`, but users who hit the Windows PATH issue now have a clear fallback.
2
-
3
- ---
4
-
5
- # RunLedger
6
-
7
- **A zero-instrumentation experiment registry.** Point RunLedger at a folder of JSON experiment files and search, filter, aggregate, diff, and export the results; no SDK, no code changes, no cloud.
8
-
9
- Most experiment trackers make you instrument your training code before they can help you. RunLedger reads the JSON you're already writing, no `wandb.init()`, no `mlflow.log_metric()`, and indexes it in real Postgres, giving you full relational search: structured comparisons, full-text, fuzzy matching, and exact array-element lookups, from one CLI command.
10
-
11
- Backed by Postgres, served by a Spring Boot API, and fronted by a Python CLI.
12
-
13
- ## Install
14
-
15
- ```bash
16
- pip install runledger-cli
17
- ```
18
-
19
- Requires Docker. If it's not installed, `runledger` detects that on first run and links you straight to the installer; everything else (Postgres, the backend) is managed for you.
20
-
21
- ### Troubleshooting: `runledger` command not found (Windows)
22
-
23
- On some Windows systems, the Python Scripts folder is not automatically added to your PATH. If `runledger` is not recognized after installation, you have two options:
24
-
25
- 1. **Add the Scripts folder to your PATH permanently** (recommended):
26
- - Find where `runledger` was installed: `pip show runledger-cli | findstr Location`
27
- - Navigate to that folder, then up one level to the `Scripts` directory.
28
- - Add that `Scripts` path to your system PATH via **System Properties > Environment Variables**.
29
- - Restart your terminal.
30
-
31
- 2. **Use the Python module fallback** (works immediately, no PATH changes):
32
- ```bash
33
- python -m cli.ledger
34
- ```
35
- All subcommands and the guided wizard work exactly the same way; just prefix every command with `python -m cli.ledger`.
36
-
37
- Once the PATH is configured, `runledger` will work as shown in the examples below.
38
-
39
- <details>
40
- <summary>Installing from source</summary>
41
-
42
- ```bash
43
- git clone https://github.com/yourusername/run-ledger.git
44
- cd run-ledger
45
- docker compose up -d
46
- pip install -e .
47
- ```
48
- </details>
49
-
50
- ## Quick start
51
-
52
- ```bash
53
- runledger scan ~/experiments --batch my-sweep
54
- runledger search --metric accuracy --op gt --value 0.9 --batch my-sweep
55
- runledger aggregate --metric accuracy --agg AVG --group-by experiment --batch my-sweep
56
- ```
57
-
58
- New here? Run `runledger` with no arguments — the guided wizard walks you through your first scan and search.
59
-
60
- ## What you get
61
-
62
- - **Search any field, no schema required** — structured comparisons (`gt`, `lt`, `eq`...), full-text with stemming, and fuzzy matching for typos, all on arbitrary dot-paths, including fields nested inside arrays (`results[].sst2_cacc`).
63
- - **Compound AND/OR** across multiple conditions in one query.
64
- - **Exact match pointers** — array searches tell you exactly which element(s) matched (`results[3].sst2_cacc = 0.933`), not just that the run did.
65
- - **Aggregates & group-by** — `AVG` / `MAX` / `MIN` / `SUM` / `COUNT`, straight from the CLI.
66
- - **Safe re-scanning** — ingestion is idempotent; a changed file gets a new version, and `diff --history` shows you what changed and when.
67
- - **Run diff, saved searches, JSONL ingestion, block-depth control** — see [docs/examples.md](docs/examples.md) for each in action.
68
- - **Self-hosted, local-first** — your data never leaves your machine.
69
-
70
- ## Metric paths
71
-
72
- Address any value with a dot-path — `accuracy`, `metrics.loss`, `results[].sst2_cacc`. Shorthand (`cacc`) resolves automatically when it's unambiguous. Run `runledger metrics --batch <batch>` to see everything discovered in a scan, or add `--verbose` for full paths.
73
-
74
- ## Docs
75
-
76
- - [API reference](docs/api.md)
77
- - [Usage examples](docs/examples.md)
78
-
79
- ## License
80
-
81
- MIT
@@ -1,90 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: runledger-cli
3
- Version: 0.1.4
4
- Summary: Zero‑instrumentation experiment registry CLI
5
- Requires-Python: >=3.10
6
- Description-Content-Type: text/markdown
7
- Requires-Dist: requests
8
- Requires-Dist: rich
9
-
10
- Here’s the updated README with the troubleshooting note added right after the installation instructions. The primary command remains `runledger`, but users who hit the Windows PATH issue now have a clear fallback.
11
-
12
- ---
13
-
14
- # RunLedger
15
-
16
- **A zero-instrumentation experiment registry.** Point RunLedger at a folder of JSON experiment files and search, filter, aggregate, diff, and export the results; no SDK, no code changes, no cloud.
17
-
18
- Most experiment trackers make you instrument your training code before they can help you. RunLedger reads the JSON you're already writing, no `wandb.init()`, no `mlflow.log_metric()`, and indexes it in real Postgres, giving you full relational search: structured comparisons, full-text, fuzzy matching, and exact array-element lookups, from one CLI command.
19
-
20
- Backed by Postgres, served by a Spring Boot API, and fronted by a Python CLI.
21
-
22
- ## Install
23
-
24
- ```bash
25
- pip install runledger-cli
26
- ```
27
-
28
- Requires Docker. If it's not installed, `runledger` detects that on first run and links you straight to the installer; everything else (Postgres, the backend) is managed for you.
29
-
30
- ### Troubleshooting: `runledger` command not found (Windows)
31
-
32
- On some Windows systems, the Python Scripts folder is not automatically added to your PATH. If `runledger` is not recognized after installation, you have two options:
33
-
34
- 1. **Add the Scripts folder to your PATH permanently** (recommended):
35
- - Find where `runledger` was installed: `pip show runledger-cli | findstr Location`
36
- - Navigate to that folder, then up one level to the `Scripts` directory.
37
- - Add that `Scripts` path to your system PATH via **System Properties > Environment Variables**.
38
- - Restart your terminal.
39
-
40
- 2. **Use the Python module fallback** (works immediately, no PATH changes):
41
- ```bash
42
- python -m cli.ledger
43
- ```
44
- All subcommands and the guided wizard work exactly the same way; just prefix every command with `python -m cli.ledger`.
45
-
46
- Once the PATH is configured, `runledger` will work as shown in the examples below.
47
-
48
- <details>
49
- <summary>Installing from source</summary>
50
-
51
- ```bash
52
- git clone https://github.com/yourusername/run-ledger.git
53
- cd run-ledger
54
- docker compose up -d
55
- pip install -e .
56
- ```
57
- </details>
58
-
59
- ## Quick start
60
-
61
- ```bash
62
- runledger scan ~/experiments --batch my-sweep
63
- runledger search --metric accuracy --op gt --value 0.9 --batch my-sweep
64
- runledger aggregate --metric accuracy --agg AVG --group-by experiment --batch my-sweep
65
- ```
66
-
67
- New here? Run `runledger` with no arguments — the guided wizard walks you through your first scan and search.
68
-
69
- ## What you get
70
-
71
- - **Search any field, no schema required** — structured comparisons (`gt`, `lt`, `eq`...), full-text with stemming, and fuzzy matching for typos, all on arbitrary dot-paths, including fields nested inside arrays (`results[].sst2_cacc`).
72
- - **Compound AND/OR** across multiple conditions in one query.
73
- - **Exact match pointers** — array searches tell you exactly which element(s) matched (`results[3].sst2_cacc = 0.933`), not just that the run did.
74
- - **Aggregates & group-by** — `AVG` / `MAX` / `MIN` / `SUM` / `COUNT`, straight from the CLI.
75
- - **Safe re-scanning** — ingestion is idempotent; a changed file gets a new version, and `diff --history` shows you what changed and when.
76
- - **Run diff, saved searches, JSONL ingestion, block-depth control** — see [docs/examples.md](docs/examples.md) for each in action.
77
- - **Self-hosted, local-first** — your data never leaves your machine.
78
-
79
- ## Metric paths
80
-
81
- Address any value with a dot-path — `accuracy`, `metrics.loss`, `results[].sst2_cacc`. Shorthand (`cacc`) resolves automatically when it's unambiguous. Run `runledger metrics --batch <batch>` to see everything discovered in a scan, or add `--verbose` for full paths.
82
-
83
- ## Docs
84
-
85
- - [API reference](docs/api.md)
86
- - [Usage examples](docs/examples.md)
87
-
88
- ## License
89
-
90
- MIT
File without changes