juniper-data-client 0.4.0__tar.gz → 0.4.2__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 (36) hide show
  1. juniper_data_client-0.4.2/PKG-INFO +194 -0
  2. juniper_data_client-0.4.2/README.md +149 -0
  3. {juniper_data_client-0.4.0 → juniper_data_client-0.4.2}/juniper_data_client/__init__.py +7 -2
  4. juniper_data_client-0.4.2/juniper_data_client/client.py +736 -0
  5. juniper_data_client-0.4.2/juniper_data_client/constants.py +277 -0
  6. juniper_data_client-0.4.2/juniper_data_client/contract.py +125 -0
  7. {juniper_data_client-0.4.0 → juniper_data_client-0.4.2}/juniper_data_client/testing/fake_client.py +192 -70
  8. {juniper_data_client-0.4.0 → juniper_data_client-0.4.2}/juniper_data_client/testing/generators.py +54 -26
  9. juniper_data_client-0.4.2/juniper_data_client.egg-info/PKG-INFO +194 -0
  10. {juniper_data_client-0.4.0 → juniper_data_client-0.4.2}/juniper_data_client.egg-info/SOURCES.txt +11 -1
  11. {juniper_data_client-0.4.0 → juniper_data_client-0.4.2}/juniper_data_client.egg-info/requires.txt +4 -0
  12. {juniper_data_client-0.4.0 → juniper_data_client-0.4.2}/pyproject.toml +14 -1
  13. {juniper_data_client-0.4.0 → juniper_data_client-0.4.2}/tests/test_client.py +28 -1
  14. juniper_data_client-0.4.2/tests/test_contract.py +116 -0
  15. juniper_data_client-0.4.2/tests/test_create_dataset_tags_ttl.py +140 -0
  16. {juniper_data_client-0.4.0 → juniper_data_client-0.4.2}/tests/test_fake_client.py +38 -10
  17. {juniper_data_client-0.4.0 → juniper_data_client-0.4.2}/tests/test_fake_client_batch.py +3 -3
  18. juniper_data_client-0.4.2/tests/test_generator_parity.py +135 -0
  19. juniper_data_client-0.4.2/tests/test_malformed_json_response.py +72 -0
  20. juniper_data_client-0.4.2/tests/test_npzfile_resource_lifecycle.py +138 -0
  21. juniper_data_client-0.4.2/tests/test_on_request_hook.py +210 -0
  22. {juniper_data_client-0.4.0 → juniper_data_client-0.4.2}/tests/test_performance.py +7 -7
  23. juniper_data_client-0.4.2/tests/test_retry_policy.py +54 -0
  24. {juniper_data_client-0.4.0 → juniper_data_client-0.4.2}/tests/test_versioning.py +2 -2
  25. juniper_data_client-0.4.2/tests/test_x_request_id_propagation.py +119 -0
  26. juniper_data_client-0.4.0/PKG-INFO +0 -268
  27. juniper_data_client-0.4.0/README.md +0 -226
  28. juniper_data_client-0.4.0/juniper_data_client/client.py +0 -518
  29. juniper_data_client-0.4.0/juniper_data_client.egg-info/PKG-INFO +0 -268
  30. {juniper_data_client-0.4.0 → juniper_data_client-0.4.2}/LICENSE +0 -0
  31. {juniper_data_client-0.4.0 → juniper_data_client-0.4.2}/juniper_data_client/exceptions.py +0 -0
  32. {juniper_data_client-0.4.0 → juniper_data_client-0.4.2}/juniper_data_client/py.typed +0 -0
  33. {juniper_data_client-0.4.0 → juniper_data_client-0.4.2}/juniper_data_client/testing/__init__.py +0 -0
  34. {juniper_data_client-0.4.0 → juniper_data_client-0.4.2}/juniper_data_client.egg-info/dependency_links.txt +0 -0
  35. {juniper_data_client-0.4.0 → juniper_data_client-0.4.2}/juniper_data_client.egg-info/top_level.txt +0 -0
  36. {juniper_data_client-0.4.0 → juniper_data_client-0.4.2}/setup.cfg +0 -0
@@ -0,0 +1,194 @@
1
+ Metadata-Version: 2.4
2
+ Name: juniper-data-client
3
+ Version: 0.4.2
4
+ Summary: HTTP client for the JuniperData dataset generation service
5
+ Author: Paul Calnon
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/pcalnon/juniper-data-client
8
+ Project-URL: Repository, https://github.com/pcalnon/juniper-data-client
9
+ Project-URL: Documentation, https://github.com/pcalnon/juniper-data-client#readme
10
+ Project-URL: Issues, https://github.com/pcalnon/juniper-data-client/issues
11
+ Keywords: juniper,juniper-ml,juniper-ai,artificial-intelligence,dataset,machine-learning,api-client
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Programming Language :: Python :: 3.14
20
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
21
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
22
+ Classifier: Typing :: Typed
23
+ Requires-Python: >=3.12
24
+ Description-Content-Type: text/markdown
25
+ License-File: LICENSE
26
+ Requires-Dist: numpy>=1.24.0
27
+ Requires-Dist: requests>=2.28.0
28
+ Requires-Dist: urllib3>=2.0.0
29
+ Provides-Extra: test
30
+ Requires-Dist: pytest>=7.0.0; extra == "test"
31
+ Requires-Dist: pytest-cov>=4.0.0; extra == "test"
32
+ Requires-Dist: pytest-timeout>=2.2.0; extra == "test"
33
+ Requires-Dist: responses>=0.23.0; extra == "test"
34
+ Requires-Dist: juniper-observability>=0.1.1; extra == "test"
35
+ Provides-Extra: observability
36
+ Requires-Dist: juniper-observability>=0.1.1; extra == "observability"
37
+ Provides-Extra: dev
38
+ Requires-Dist: juniper-data-client[test]; extra == "dev"
39
+ Requires-Dist: black>=23.0.0; extra == "dev"
40
+ Requires-Dist: isort>=5.12.0; extra == "dev"
41
+ Requires-Dist: mypy>=1.0.0; extra == "dev"
42
+ Requires-Dist: flake8>=7.0.0; extra == "dev"
43
+ Requires-Dist: types-requests>=2.28.0; extra == "dev"
44
+ Dynamic: license-file
45
+
46
+ <!-- markdownlint-disable MD013 MD033 MD041 -->
47
+ <!--
48
+ MD013 (line-length): README contains prose paragraphs that intentionally
49
+ exceed the 512-char ecosystem limit (canonical
50
+ §4 layout). Wrapping harms PyPI rendering.
51
+ MD033 (no-inline-html): The right-aligned logo + spacing rely on HTML.
52
+ MD041 (first-line-heading): The HTML logo is the first line by design.
53
+ Mirrors juniper-ml #283, juniper-cascor #276, juniper-cascor-worker #71.
54
+ -->
55
+ <div align="right" width="150px" height="150px" align="right" valign="top"> <img src="images/Juniper_Logo_150px.png" alt="Juniper" align="right" valign="top" width="150px" /></div>
56
+ <br /> <br /> <br /> <br />
57
+
58
+ # Juniper: Dynamic Neural Network Research Platform
59
+
60
+ Juniper is an AI/ML research platform for investigating dynamic neural network architectures and novel learning paradigms. The project emphasizes ground-up implementations from primary literature, enabling a more transparent exploration of fundamental algorithms.
61
+
62
+ ## Juniper Data Client
63
+
64
+ `juniper-data-client` is the **Python HTTP client library** for the `juniper-data` dataset-generation service. The package exposes a single `JuniperDataClient` class whose methods correspond to the REST surface of `juniper-data`: generator schemas, dataset creation, tag-based filtering, batch operations, the named-version registry, and download of the resulting NPZ artifacts as ready-to-train `numpy` arrays. It is the canonical dataset-fetch interface used by both `juniper-cascor` (for training) and `juniper-canopy` (for visualisation), and it serializes the platform's shared `X_train` / `y_train` / `X_test` / `y_test` / `X_full` / `y_full` NPZ schema (all `float32`).
65
+
66
+ ## Distribution
67
+
68
+ `juniper-data-client` is published on PyPI as **[`juniper-data-client`](https://pypi.org/project/juniper-data-client/)**.
69
+ The package is also surfaced through the platform meta-distribution
70
+ **[`juniper-ml`](https://pypi.org/project/juniper-ml/)**, which installs
71
+ the full client stack via `pip install juniper-ml[all]`.
72
+
73
+ ```bash
74
+ pip install juniper-data-client
75
+ ```
76
+
77
+ ## Ecosystem Compatibility
78
+
79
+ This client library is part of the [Juniper](https://github.com/pcalnon/juniper-ml) ecosystem.
80
+ Verified compatible versions:
81
+
82
+ | juniper-data | juniper-cascor | juniper-canopy | data-client | cascor-client | cascor-worker |
83
+ |--------------|----------------|----------------|-------------|---------------|---------------|
84
+ | 0.6.x | 0.5.x | 0.5.x | >=0.4.1 | >=0.4.0 | >=0.4.0 |
85
+
86
+ For full-stack Docker deployment and integration tests, see [`juniper-deploy`](https://github.com/pcalnon/juniper-deploy).
87
+
88
+ ## Architecture
89
+
90
+ `juniper-data-client` is a thin synchronous HTTP client. It does not embed any dataset-generation logic of its own: every call resolves to an HTTP request against a `juniper-data` instance, and every NPZ artifact returned has been produced server-side.
91
+
92
+ ```text
93
+ ┌────────────────────────┐ ┌──────────────────┐
94
+ │ Caller (e.g. │ HTTP (requests + │ juniper-data │
95
+ │ juniper-cascor / │ urllib3 Retry) │ REST service │
96
+ │ juniper-canopy / │ ──────────────────► │ Port 8100 │
97
+ │ research notebook) │ ◄────────────────── │ /v1/... │
98
+ └──────────┬─────────────┘ JSON + NPZ └──────────────────┘
99
+ │ uses
100
+ ▼
101
+ ┌────────────────────────┐
102
+ │ juniper-data-client │
103
+ │ JuniperDataClient │
104
+ │ (this package) │
105
+ └────────────────────────┘
106
+ ```
107
+
108
+ The client retries idempotent verbs (GET) on transient failures via `urllib3.Retry` with exponential backoff; mutating verbs (POST, PATCH, DELETE) are **not** auto-retried, to avoid duplicate-side-effect bugs against the dataset registry. Optional `X-Request-ID` propagation and a `RequestHook` instrumentation surface are available for callers that integrate with the platform's observability stack.
109
+
110
+ ## Related Services
111
+
112
+ | Service | Relationship | Notes |
113
+ |---------|-------------|-------|
114
+ | [juniper-data](https://github.com/pcalnon/juniper-data) | The HTTP service this client targets | Set `base_url` to the service's URL (default `http://localhost:8100`) |
115
+ | [juniper-cascor](https://github.com/pcalnon/juniper-cascor) | Primary consumer; uses this client to fetch training datasets | Reads `JUNIPER_DATA_URL` |
116
+ | [juniper-canopy](https://github.com/pcalnon/juniper-canopy) | Secondary consumer; uses this client to fetch visualisation data | Reads `JUNIPER_DATA_URL` |
117
+
118
+ ## Active Research Components
119
+
120
+ `juniper-data-client` does not host research components of its own; it is the surface through which other components of the Juniper platform reach the research components hosted by `juniper-data`. Through this client, callers access the **ARC-AGI dataset families** (ARC-AGI-1 and ARC-AGI-2), the **named-version dataset registry** (`list_versions`, `get_latest`), the **batch dataset operations** (`batch_create`, `batch_delete`, `batch_update_tags`, `batch_export`), and the **NPZ artifact contract** that the rest of the platform consumes. Treating these as research artifacts is appropriate: each is a stable interface around which comparative experiments are composed.
121
+
122
+ ## Quick Start Guide
123
+
124
+ ### Prerequisites
125
+
126
+ - Python ≥ 3.12
127
+ - A running `juniper-data` instance reachable at the URL passed as `base_url` (typically `http://localhost:8100`)
128
+
129
+ ### Installation
130
+
131
+ ```bash
132
+ pip install juniper-data-client
133
+ ```
134
+
135
+ Optional extras: `[observability]` enables `X-Request-ID` propagation through `juniper-observability`; `[test]` installs the testing dependencies; `[dev]` adds linting and type-checking tools.
136
+
137
+ ### Verification
138
+
139
+ ```python
140
+ from juniper_data_client import JuniperDataClient
141
+
142
+ with JuniperDataClient("http://localhost:8100") as client:
143
+ health = client.health_check()
144
+ print(f"Service status: {health['status']}")
145
+
146
+ result = client.create_spiral_dataset(
147
+ n_spirals=2,
148
+ n_points_per_spiral=100,
149
+ noise=0.1,
150
+ seed=42,
151
+ )
152
+ arrays = client.download_artifact_npz(result["dataset_id"])
153
+
154
+ print(f"Training samples: {len(arrays['X_train'])}")
155
+ print(f"Test samples: {len(arrays['X_test'])}")
156
+ ```
157
+
158
+ For PyTorch consumers, the returned arrays convert directly with `torch.from_numpy`:
159
+
160
+ ```python
161
+ import torch
162
+ X_train = torch.from_numpy(arrays["X_train"]) # torch.float32
163
+ y_train = torch.from_numpy(arrays["y_train"]) # torch.float32
164
+ ```
165
+
166
+ ### Next Steps
167
+
168
+ - [`docs/QUICK_START.md`](docs/QUICK_START.md) — complete installation and verification guide
169
+ - [`docs/REFERENCE.md`](docs/REFERENCE.md) — full API reference, configuration, and error model
170
+ - [`docs/DEVELOPER_CHEATSHEET.md`](docs/DEVELOPER_CHEATSHEET.md) — quick-reference card for development tasks
171
+ - [`juniper-data`](https://github.com/pcalnon/juniper-data) — the upstream dataset service
172
+ - [`juniper-ml`](https://pypi.org/project/juniper-ml/) — platform meta-package on PyPI
173
+
174
+ ## Research Philosophy
175
+
176
+ The Juniper platform exists to study learning algorithms whose network architecture is not fixed in advance. Its initial anchor is the Cascade-Correlation algorithm of Fahlman and Lebiere (1990), implemented from the primary literature without recourse to higher-level abstractions that elide the algorithm's operational detail. The organising commitment is that algorithm implementations remain inspectable at the level at which they were originally specified: candidate units, correlation objectives, weight-freezing semantics, and the structural events that grow the network are first-class artifacts of the codebase rather than internal details of a library wrapper. This permits comparative work — across algorithms, datasets, and hyperparameter regimes — to be conducted on a known and reproducible substrate.
177
+
178
+ The current platform comprises a Cascade-Correlation training service exposing a REST and WebSocket interface, a dataset-generation service with a named-version registry that includes the ARC-AGI families, a real-time monitoring dashboard for inspecting training dynamics as they occur, and a distributed worker that parallelises candidate-unit training across hosts. Near-term work extends the architectural-growth catalogue beyond Cascade-Correlation, introduces multi-network orchestration for comparative experiments at the level of network populations rather than individual runs, and tightens the dataset–training–monitoring loop into a reproducible research workbench. The longer-term direction is the systematic empirical study of constructive and architecture-growing learning algorithms, with first-class infrastructure for the ablation, comparison, and replication that such a study requires.
179
+
180
+ Within this programme, `juniper-data-client` is the canonical integration boundary between the training and data services. Its contract is the dataset-fetch interface used by every training-side consumer; changes to its surface are therefore changes to the platform's shared dataset semantics.
181
+
182
+ ## Documentation
183
+
184
+ | Document | Purpose |
185
+ |----------|---------|
186
+ | [`docs/DOCUMENTATION_OVERVIEW.md`](docs/DOCUMENTATION_OVERVIEW.md) | Navigation index for all `juniper-data-client` documentation |
187
+ | [`docs/QUICK_START.md`](docs/QUICK_START.md) | Complete installation and verification guide |
188
+ | [`docs/REFERENCE.md`](docs/REFERENCE.md) | Full API reference, configuration, error model, and NPZ schema |
189
+ | [`docs/DEVELOPER_CHEATSHEET.md`](docs/DEVELOPER_CHEATSHEET.md) | Quick-reference card for development tasks |
190
+ | [`CHANGELOG.md`](CHANGELOG.md) | Version history |
191
+
192
+ ## License
193
+
194
+ MIT License — see [`LICENSE`](LICENSE) for details.
@@ -0,0 +1,149 @@
1
+ <!-- markdownlint-disable MD013 MD033 MD041 -->
2
+ <!--
3
+ MD013 (line-length): README contains prose paragraphs that intentionally
4
+ exceed the 512-char ecosystem limit (canonical
5
+ §4 layout). Wrapping harms PyPI rendering.
6
+ MD033 (no-inline-html): The right-aligned logo + spacing rely on HTML.
7
+ MD041 (first-line-heading): The HTML logo is the first line by design.
8
+ Mirrors juniper-ml #283, juniper-cascor #276, juniper-cascor-worker #71.
9
+ -->
10
+ <div align="right" width="150px" height="150px" align="right" valign="top"> <img src="images/Juniper_Logo_150px.png" alt="Juniper" align="right" valign="top" width="150px" /></div>
11
+ <br /> <br /> <br /> <br />
12
+
13
+ # Juniper: Dynamic Neural Network Research Platform
14
+
15
+ Juniper is an AI/ML research platform for investigating dynamic neural network architectures and novel learning paradigms. The project emphasizes ground-up implementations from primary literature, enabling a more transparent exploration of fundamental algorithms.
16
+
17
+ ## Juniper Data Client
18
+
19
+ `juniper-data-client` is the **Python HTTP client library** for the `juniper-data` dataset-generation service. The package exposes a single `JuniperDataClient` class whose methods correspond to the REST surface of `juniper-data`: generator schemas, dataset creation, tag-based filtering, batch operations, the named-version registry, and download of the resulting NPZ artifacts as ready-to-train `numpy` arrays. It is the canonical dataset-fetch interface used by both `juniper-cascor` (for training) and `juniper-canopy` (for visualisation), and it serializes the platform's shared `X_train` / `y_train` / `X_test` / `y_test` / `X_full` / `y_full` NPZ schema (all `float32`).
20
+
21
+ ## Distribution
22
+
23
+ `juniper-data-client` is published on PyPI as **[`juniper-data-client`](https://pypi.org/project/juniper-data-client/)**.
24
+ The package is also surfaced through the platform meta-distribution
25
+ **[`juniper-ml`](https://pypi.org/project/juniper-ml/)**, which installs
26
+ the full client stack via `pip install juniper-ml[all]`.
27
+
28
+ ```bash
29
+ pip install juniper-data-client
30
+ ```
31
+
32
+ ## Ecosystem Compatibility
33
+
34
+ This client library is part of the [Juniper](https://github.com/pcalnon/juniper-ml) ecosystem.
35
+ Verified compatible versions:
36
+
37
+ | juniper-data | juniper-cascor | juniper-canopy | data-client | cascor-client | cascor-worker |
38
+ |--------------|----------------|----------------|-------------|---------------|---------------|
39
+ | 0.6.x | 0.5.x | 0.5.x | >=0.4.1 | >=0.4.0 | >=0.4.0 |
40
+
41
+ For full-stack Docker deployment and integration tests, see [`juniper-deploy`](https://github.com/pcalnon/juniper-deploy).
42
+
43
+ ## Architecture
44
+
45
+ `juniper-data-client` is a thin synchronous HTTP client. It does not embed any dataset-generation logic of its own: every call resolves to an HTTP request against a `juniper-data` instance, and every NPZ artifact returned has been produced server-side.
46
+
47
+ ```text
48
+ ┌────────────────────────┐ ┌──────────────────┐
49
+ │ Caller (e.g. │ HTTP (requests + │ juniper-data │
50
+ │ juniper-cascor / │ urllib3 Retry) │ REST service │
51
+ │ juniper-canopy / │ ──────────────────► │ Port 8100 │
52
+ │ research notebook) │ ◄────────────────── │ /v1/... │
53
+ └──────────┬─────────────┘ JSON + NPZ └──────────────────┘
54
+ │ uses
55
+ ▼
56
+ ┌────────────────────────┐
57
+ │ juniper-data-client │
58
+ │ JuniperDataClient │
59
+ │ (this package) │
60
+ └────────────────────────┘
61
+ ```
62
+
63
+ The client retries idempotent verbs (GET) on transient failures via `urllib3.Retry` with exponential backoff; mutating verbs (POST, PATCH, DELETE) are **not** auto-retried, to avoid duplicate-side-effect bugs against the dataset registry. Optional `X-Request-ID` propagation and a `RequestHook` instrumentation surface are available for callers that integrate with the platform's observability stack.
64
+
65
+ ## Related Services
66
+
67
+ | Service | Relationship | Notes |
68
+ |---------|-------------|-------|
69
+ | [juniper-data](https://github.com/pcalnon/juniper-data) | The HTTP service this client targets | Set `base_url` to the service's URL (default `http://localhost:8100`) |
70
+ | [juniper-cascor](https://github.com/pcalnon/juniper-cascor) | Primary consumer; uses this client to fetch training datasets | Reads `JUNIPER_DATA_URL` |
71
+ | [juniper-canopy](https://github.com/pcalnon/juniper-canopy) | Secondary consumer; uses this client to fetch visualisation data | Reads `JUNIPER_DATA_URL` |
72
+
73
+ ## Active Research Components
74
+
75
+ `juniper-data-client` does not host research components of its own; it is the surface through which other components of the Juniper platform reach the research components hosted by `juniper-data`. Through this client, callers access the **ARC-AGI dataset families** (ARC-AGI-1 and ARC-AGI-2), the **named-version dataset registry** (`list_versions`, `get_latest`), the **batch dataset operations** (`batch_create`, `batch_delete`, `batch_update_tags`, `batch_export`), and the **NPZ artifact contract** that the rest of the platform consumes. Treating these as research artifacts is appropriate: each is a stable interface around which comparative experiments are composed.
76
+
77
+ ## Quick Start Guide
78
+
79
+ ### Prerequisites
80
+
81
+ - Python ≥ 3.12
82
+ - A running `juniper-data` instance reachable at the URL passed as `base_url` (typically `http://localhost:8100`)
83
+
84
+ ### Installation
85
+
86
+ ```bash
87
+ pip install juniper-data-client
88
+ ```
89
+
90
+ Optional extras: `[observability]` enables `X-Request-ID` propagation through `juniper-observability`; `[test]` installs the testing dependencies; `[dev]` adds linting and type-checking tools.
91
+
92
+ ### Verification
93
+
94
+ ```python
95
+ from juniper_data_client import JuniperDataClient
96
+
97
+ with JuniperDataClient("http://localhost:8100") as client:
98
+ health = client.health_check()
99
+ print(f"Service status: {health['status']}")
100
+
101
+ result = client.create_spiral_dataset(
102
+ n_spirals=2,
103
+ n_points_per_spiral=100,
104
+ noise=0.1,
105
+ seed=42,
106
+ )
107
+ arrays = client.download_artifact_npz(result["dataset_id"])
108
+
109
+ print(f"Training samples: {len(arrays['X_train'])}")
110
+ print(f"Test samples: {len(arrays['X_test'])}")
111
+ ```
112
+
113
+ For PyTorch consumers, the returned arrays convert directly with `torch.from_numpy`:
114
+
115
+ ```python
116
+ import torch
117
+ X_train = torch.from_numpy(arrays["X_train"]) # torch.float32
118
+ y_train = torch.from_numpy(arrays["y_train"]) # torch.float32
119
+ ```
120
+
121
+ ### Next Steps
122
+
123
+ - [`docs/QUICK_START.md`](docs/QUICK_START.md) — complete installation and verification guide
124
+ - [`docs/REFERENCE.md`](docs/REFERENCE.md) — full API reference, configuration, and error model
125
+ - [`docs/DEVELOPER_CHEATSHEET.md`](docs/DEVELOPER_CHEATSHEET.md) — quick-reference card for development tasks
126
+ - [`juniper-data`](https://github.com/pcalnon/juniper-data) — the upstream dataset service
127
+ - [`juniper-ml`](https://pypi.org/project/juniper-ml/) — platform meta-package on PyPI
128
+
129
+ ## Research Philosophy
130
+
131
+ The Juniper platform exists to study learning algorithms whose network architecture is not fixed in advance. Its initial anchor is the Cascade-Correlation algorithm of Fahlman and Lebiere (1990), implemented from the primary literature without recourse to higher-level abstractions that elide the algorithm's operational detail. The organising commitment is that algorithm implementations remain inspectable at the level at which they were originally specified: candidate units, correlation objectives, weight-freezing semantics, and the structural events that grow the network are first-class artifacts of the codebase rather than internal details of a library wrapper. This permits comparative work — across algorithms, datasets, and hyperparameter regimes — to be conducted on a known and reproducible substrate.
132
+
133
+ The current platform comprises a Cascade-Correlation training service exposing a REST and WebSocket interface, a dataset-generation service with a named-version registry that includes the ARC-AGI families, a real-time monitoring dashboard for inspecting training dynamics as they occur, and a distributed worker that parallelises candidate-unit training across hosts. Near-term work extends the architectural-growth catalogue beyond Cascade-Correlation, introduces multi-network orchestration for comparative experiments at the level of network populations rather than individual runs, and tightens the dataset–training–monitoring loop into a reproducible research workbench. The longer-term direction is the systematic empirical study of constructive and architecture-growing learning algorithms, with first-class infrastructure for the ablation, comparison, and replication that such a study requires.
134
+
135
+ Within this programme, `juniper-data-client` is the canonical integration boundary between the training and data services. Its contract is the dataset-fetch interface used by every training-side consumer; changes to its surface are therefore changes to the platform's shared dataset semantics.
136
+
137
+ ## Documentation
138
+
139
+ | Document | Purpose |
140
+ |----------|---------|
141
+ | [`docs/DOCUMENTATION_OVERVIEW.md`](docs/DOCUMENTATION_OVERVIEW.md) | Navigation index for all `juniper-data-client` documentation |
142
+ | [`docs/QUICK_START.md`](docs/QUICK_START.md) | Complete installation and verification guide |
143
+ | [`docs/REFERENCE.md`](docs/REFERENCE.md) | Full API reference, configuration, error model, and NPZ schema |
144
+ | [`docs/DEVELOPER_CHEATSHEET.md`](docs/DEVELOPER_CHEATSHEET.md) | Quick-reference card for development tasks |
145
+ | [`CHANGELOG.md`](CHANGELOG.md) | Version history |
146
+
147
+ ## License
148
+
149
+ MIT License — see [`LICENSE`](LICENSE) for details.
@@ -4,18 +4,23 @@ This package provides a simple, robust client for interacting with the JuniperDa
4
4
  dataset generation service, used by both JuniperCascor and juniper-canopy.
5
5
  """
6
6
 
7
- from juniper_data_client.client import JuniperDataClient
7
+ from juniper_data_client.client import JuniperDataClient, RequestHook
8
+ from juniper_data_client.contract import validate_npz_contract
8
9
  from juniper_data_client.exceptions import JuniperDataClientError, JuniperDataConfigurationError, JuniperDataConnectionError, JuniperDataNotFoundError, JuniperDataTimeoutError, JuniperDataValidationError
9
10
 
10
- __version__ = "0.4.0"
11
+ __version__ = "0.4.2"
11
12
 
12
13
  __all__ = [
13
14
  "JuniperDataClient",
15
+ "validate_npz_contract",
14
16
  "JuniperDataClientError",
15
17
  "JuniperDataConfigurationError",
16
18
  "JuniperDataConnectionError",
17
19
  "JuniperDataNotFoundError",
18
20
  "JuniperDataTimeoutError",
19
21
  "JuniperDataValidationError",
22
+ # METRICS-MON R4.3 / seed-13: instrumentation hook type alias
23
+ # exported so consumers can type their hook closures.
24
+ "RequestHook",
20
25
  "__version__",
21
26
  ]