Juniper: Dynamic Neural Network Research Platform
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.
Juniper Data Client
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).
Distribution
juniper-data-client is published on PyPI as juniper-data-client.
The package is also surfaced through the platform meta-distribution
juniper-ml, which installs
the full client stack via pip install juniper-ml[all].
pip install juniper-data-client
Ecosystem Compatibility
This client library is part of the Juniper ecosystem. Verified compatible versions:
| juniper-data | juniper-cascor | juniper-canopy | data-client | cascor-client | cascor-worker |
|---|---|---|---|---|---|
| 0.6.x | 0.5.x | 0.5.x | >=0.4.1 | >=0.4.0 | >=0.4.0 |
For full-stack Docker deployment and integration tests, see juniper-deploy.
Architecture
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.
┌────────────────────────┐ ┌──────────────────┐
│ Caller (e.g. │ HTTP (requests + │ juniper-data │
│ juniper-cascor / │ urllib3 Retry) │ REST service │
│ juniper-canopy / │ ──────────────────► │ Port 8100 │
│ research notebook) │ ◄────────────────── │ /v1/... │
└──────────┬─────────────┘ JSON + NPZ └──────────────────┘
│ uses
▼
┌────────────────────────┐
│ juniper-data-client │
│ JuniperDataClient │
│ (this package) │
└────────────────────────┘
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.
Related Services
| Service | Relationship | Notes |
|---|---|---|
| juniper-data | The HTTP service this client targets | Set base_url to the service's URL (default http://localhost:8100) |
| juniper-cascor | Primary consumer; uses this client to fetch training datasets | Reads JUNIPER_DATA_URL |
| juniper-canopy | Secondary consumer; uses this client to fetch visualisation data | Reads JUNIPER_DATA_URL |
Active Research Components
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.
Quick Start Guide
Prerequisites
- Python ≥ 3.12
- A running
juniper-datainstance reachable at the URL passed asbase_url(typicallyhttp://localhost:8100)
Installation
pip install juniper-data-client
Optional extras: [observability] enables X-Request-ID propagation through juniper-observability; [test] installs the testing dependencies; [dev] adds linting and type-checking tools.
Verification
from juniper_data_client import JuniperDataClient
with JuniperDataClient("http://localhost:8100") as client:
health = client.health_check()
print(f"Service status: {health['status']}")
result = client.create_spiral_dataset(
n_spirals=2,
n_points_per_spiral=100,
noise=0.1,
seed=42,
)
arrays = client.download_artifact_npz(result["dataset_id"])
print(f"Training samples: {len(arrays['X_train'])}")
print(f"Test samples: {len(arrays['X_test'])}")
For PyTorch consumers, the returned arrays convert directly with torch.from_numpy:
import torch
X_train = torch.from_numpy(arrays["X_train"]) # torch.float32
y_train = torch.from_numpy(arrays["y_train"]) # torch.float32
Next Steps
docs/QUICK_START.md— complete installation and verification guidedocs/REFERENCE.md— full API reference, configuration, and error modeldocs/DEVELOPER_CHEATSHEET.md— quick-reference card for development tasksjuniper-data— the upstream dataset servicejuniper-ml— platform meta-package on PyPI
Research Philosophy
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.
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.
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.
Documentation
| Document | Purpose |
|---|---|
docs/DOCUMENTATION_OVERVIEW.md |
Navigation index for all juniper-data-client documentation |
docs/QUICK_START.md |
Complete installation and verification guide |
docs/REFERENCE.md |
Full API reference, configuration, error model, and NPZ schema |
docs/DEVELOPER_CHEATSHEET.md |
Quick-reference card for development tasks |
CHANGELOG.md |
Version history |
License
MIT License — see LICENSE for details.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file juniper_data_client-0.4.2.tar.gz.
File metadata
- Download URL: juniper_data_client-0.4.2.tar.gz
- Upload date:
- Size: 61.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da0de82d5bb50533446cc16281af7072a6fbfbc3bc43810161ccfa0ef505a500
|
|
| MD5 |
67d44043d8d5d158fed27b74bb4ea628
|
|
| BLAKE2b-256 |
2373b2fa118421bdeeb7bf38886b4d611c04d2ec1be6bf977791b34fee32b1c3
|
Provenance
The following attestation bundles were made for juniper_data_client-0.4.2.tar.gz:
Publisher:
publish.yml on pcalnon/juniper-data-client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
juniper_data_client-0.4.2.tar.gz -
Subject digest:
da0de82d5bb50533446cc16281af7072a6fbfbc3bc43810161ccfa0ef505a500 - Sigstore transparency entry: 1855554145
- Sigstore integration time:
-
Permalink:
pcalnon/juniper-data-client@cec374fadf7e2d090e33ba28760f6ae6507b47df -
Branch / Tag:
refs/tags/v0.4.2 - Owner: https://github.com/pcalnon
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@cec374fadf7e2d090e33ba28760f6ae6507b47df -
Trigger Event:
release
-
Statement type:
File details
Details for the file juniper_data_client-0.4.2-py3-none-any.whl.
File metadata
- Download URL: juniper_data_client-0.4.2-py3-none-any.whl
- Upload date:
- Size: 33.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0be8380d4217d823925a0a5ab6384508f58b3553a98d24cd0015eed5a503359e
|
|
| MD5 |
64758cebb77b41879360efb5f1754b8f
|
|
| BLAKE2b-256 |
d9464bdd3c656780fb1394df57937a99fcc9de4ee96ff93a4c5469e5e7d4c041
|
Provenance
The following attestation bundles were made for juniper_data_client-0.4.2-py3-none-any.whl:
Publisher:
publish.yml on pcalnon/juniper-data-client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
juniper_data_client-0.4.2-py3-none-any.whl -
Subject digest:
0be8380d4217d823925a0a5ab6384508f58b3553a98d24cd0015eed5a503359e - Sigstore transparency entry: 1855554190
- Sigstore integration time:
-
Permalink:
pcalnon/juniper-data-client@cec374fadf7e2d090e33ba28760f6ae6507b47df -
Branch / Tag:
refs/tags/v0.4.2 - Owner: https://github.com/pcalnon
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@cec374fadf7e2d090e33ba28760f6ae6507b47df -
Trigger Event:
release
-
Statement type: