Metadata-Version: 2.4
Name: juniper-canopy
Version: 0.6.0
Summary: Real-time monitoring dashboard for Cascade Correlation Neural Network
Author-email: Paul Calnon <paul.calnon@gmail.com>
License: MIT
Project-URL: Homepage, https://github.com/pcalnon/juniper-canopy
Project-URL: Documentation, https://github.com/pcalnon/juniper-canopy#readme
Project-URL: Repository, https://github.com/pcalnon/juniper-canopy
Project-URL: Issues, https://github.com/pcalnon/juniper-canopy/issues
Keywords: neural-network,visualization,monitoring,dashboard,cascade-correlation
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Scientific/Engineering :: Visualization
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: dash>=3.0.0
Requires-Dist: dash-bootstrap-components>=2.0.0
Requires-Dist: fastapi>=0.100.0
Requires-Dist: uvicorn[standard]>=0.20.0
Requires-Dist: plotly>=5.0.0
Requires-Dist: numpy>=1.24.0
Requires-Dist: scipy>=1.10.0
Requires-Dist: PyYAML>=6.0
Requires-Dist: pydantic>=2.0.0
Requires-Dist: pydantic-settings>=2.0.0
Requires-Dist: websockets>=12.0
Requires-Dist: nest-asyncio>=1.5.0
Requires-Dist: requests>=2.28.0
Requires-Dist: httpx>=0.27
Requires-Dist: a2wsgi>=1.10.0
Requires-Dist: colorama>=0.4.6
Requires-Dist: networkx>=3.0
Requires-Dist: psutil>=5.9.0
Requires-Dist: python-multipart>=0.0.6
Requires-Dist: juniper-observability>=0.4.0
Requires-Dist: juniper-service-core>=0.5.0
Requires-Dist: juniper-cascor-protocol>=0.1.0
Requires-Dist: prometheus-client>=0.20.0
Provides-Extra: juniper-data
Requires-Dist: juniper-data-client>=0.4.1; extra == "juniper-data"
Requires-Dist: requests>=2.28.0; extra == "juniper-data"
Provides-Extra: juniper-cascor
Requires-Dist: juniper-cascor-client>=0.7.0; extra == "juniper-cascor"
Provides-Extra: observability
Requires-Dist: sentry-sdk>=2.0.0; extra == "observability"
Provides-Extra: ui-test
Requires-Dist: pytest-playwright>=0.5; extra == "ui-test"
Requires-Dist: playwright>=1.45; extra == "ui-test"
Provides-Extra: demo
Requires-Dist: torch>=2.10.0; extra == "demo"
Provides-Extra: dev
Requires-Dist: juniper-canopy[demo,juniper-cascor,juniper-data,observability]; extra == "dev"
Requires-Dist: pytest>=8.0; extra == "dev"
Requires-Dist: pytest-cov>=5.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
Requires-Dist: bandit[sarif]>=1.7; extra == "dev"
Requires-Dist: pip-audit>=2.7; extra == "dev"
Dynamic: license-file

# juniper-canopy

[![PyPI](https://img.shields.io/pypi/v/juniper-canopy)](https://pypi.org/project/juniper-canopy/)
[![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue)](https://www.python.org/)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](./LICENSE)

**A real-time dashboard to watch and steer Cascade-Correlation training as it happens.**

`juniper-canopy` is a Dash + FastAPI dashboard that renders Juniper training dynamics live: it pulls
metrics and network topology from [juniper-cascor](https://github.com/pcalnon/juniper-cascor) over
REST and WebSocket and visualises loss, accuracy, and unit recruitment as the network grows. It draws
dataset context from [juniper-data](https://github.com/pcalnon/juniper-data) and exposes a WebSocket
control surface to pause, resume, and step a run from the browser. A demo mode runs the whole UI
against simulated data with no backend.

> **Part of the Juniper platform.** juniper-canopy is the real-time monitoring dashboard of
> [Juniper](https://github.com/pcalnon/juniper-ml) — a multi-package ML research platform built around
> constructive (Cascade-Correlation) and recurrent neural networks. It reads from juniper-cascor and
> juniper-data over HTTP.

## Install

```bash
pip install juniper-canopy
```

## Run

Demo mode — no backend required, simulated training:

```bash
./demo                                 # then open http://localhost:8050
```

Service mode — against live juniper-cascor + juniper-data instances:

```bash
export JUNIPER_CANOPY_CASCOR_SERVICE_URL=http://<cascor-host>:8200
export JUNIPER_DATA_URL=http://<data-host>:8100
python src/main.py                     # dashboard on http://localhost:8050
```

API docs are served at `/docs` (Swagger) and `/redoc`.

## Configuration

Settings load from the `JUNIPER_CANOPY_` environment namespace (`src/settings.py`):

| Variable | Default | Purpose |
|----------|---------|---------|
| `JUNIPER_CANOPY_CASCOR_SERVICE_URL` | — | URL of the juniper-cascor service (required for service mode). |
| `JUNIPER_DATA_URL` | `http://localhost:8100` | URL of the juniper-data service. |
| `JUNIPER_CANOPY_DEMO_MODE` | `false` | Set `1` to run the UI against simulated data (no backend). |
| `JUNIPER_CANOPY_SERVER__HOST` / `JUNIPER_CANOPY_SERVER__PORT` | `127.0.0.1` / `8050` | Bind address / port. A non-loopback host requires a perimeter attestation (`JUNIPER_CANOPY_LOOPBACK_PUBLISH_ATTESTED` or `JUNIPER_CANOPY_AUTH_PROXY_ATTESTED`); otherwise startup fail-closes (SEC-F22). |
| `JUNIPER_DATA_API_KEY` | — | API key for juniper-data when its auth is enabled. |
| `JUNIPER_CANOPY_LOG_LEVEL` | `INFO` | Logging verbosity. |

## Docker

```bash
docker build -t juniper-canopy:latest .
docker run --rm -p 8050:8050 juniper-canopy:latest                # demo mode (image default)

docker run --rm -p 8050:8050 \
  -e JUNIPER_CANOPY_DEMO_MODE=0 \
  -e JUNIPER_CANOPY_CASCOR_SERVICE_URL=http://host.docker.internal:8200 \
  -e JUNIPER_DATA_URL=http://host.docker.internal:8100 \
  juniper-canopy:latest                                           # service mode
```

For the orchestrated full stack, see [`juniper-deploy`](https://github.com/pcalnon/juniper-deploy).

## Status

**Beta** on PyPI. The current version is shown by the badge above; see [`CHANGELOG.md`](CHANGELOG.md).
Supports Python 3.11–3.14.

## Documentation

- [`docs/QUICK_START.md`](docs/QUICK_START.md) — five-minute startup guide
- [`docs/USER_MANUAL.md`](docs/USER_MANUAL.md) — comprehensive usage guide
- [`docs/ENVIRONMENT_SETUP.md`](docs/ENVIRONMENT_SETUP.md) — environment configuration
- [`docs/DOCUMENTATION_OVERVIEW.md`](docs/DOCUMENTATION_OVERVIEW.md) — documentation index

## License

MIT — see [LICENSE](./LICENSE).
