Skip to main content

Shared model-contract interfaces (TrainableModel / GrowableModel ABCs, the TrainingEvent vocabulary, ModelSerializer, the describe_topology() schema) plus a reusable conformance test kit for the Juniper ML platform.

Project description

juniper-model-core

The shared model-contract template for the Juniper ML research platform: the minimal interface the Juniper service layer needs from any learning model, plus a reusable conformance test kit that proves a model is pluggable.

It is the linchpin of the model/middleware refactor — the seam that lets a new neural-network model drop into the ecosystem (data → training → monitoring → serving) without the service layer knowing the model type. The contract is derived from two real implementers — the Cascade-Correlation network (a growable classifier) and the Δt-native Legendre Memory Unit (a fixed-order regressor) — never from one model alone.

Install

pip install juniper-model-core                 # the contract (no third-party runtime deps)
pip install "juniper-model-core[conformance]"  # + numpy/pytest, to run the conformance kit

import juniper_model_core pulls no third-party runtime dependency: the contract references numpy only in type annotations. numpy is needed only to run the conformance kit.

The contract

Element What it is
TrainableModel (ABC) fit / predict / metrics / describe_topology + task_type, input_shape, output_shape. numpy at the boundary; no argmax/accuracy in the generic surface.
GrowableModel(TrainableModel) adds n_units / grow_step / freeze for constructive models (Cascade-Correlation, RCC, Growing-ESN). Fixed-topology models implement only TrainableModel.
TrainingEvent the model-agnostic event vocabulary (training_start/end, epoch_end, unit_added, phase_change) every model maps its native events onto.
ModelSerializer (ABC) a save/load strategy decoupled from the model; round-trips must be lossless.
describe_topology() a model-agnostic {nodes, edges, meta} graph the front-end renders without knowing the model type.
juniper_model_core.conformance the reusable pytest kit any implementer subclasses to prove compliance.

Shared behavior (metric/topology/event validation) lives in juniper_model_core.validation as inspectable free functions — the ABCs themselves are interface-only (first-principles, no black-box base classes).

Using the conformance kit

from juniper_model_core.conformance import TrainableModelConformance, tiny_regression_3d

class TestMyModelConformance(TrainableModelConformance):
    def make_model(self):      return MyModel(task_type="regression")
    def make_dataset(self):    return tiny_regression_3d()
    def make_serializer(self): return MySerializer()

pytest then runs every contract assertion (interface compliance, fit→predict→metrics, task-type-consistent metrics, renderable topology, lossless serialization, legal event order, and — for GrowableModelgrow_step incrementing n_units) against your model.

Design

See notes/JUNIPER_MODEL_CORE_INTERFACE_DESIGN_2026-06-14.md and notes/JUNIPER_MODEL_MIDDLEWARE_REFACTOR_DESIGN_AND_PLAN_2026-05-31.md (§2.3, §3.3) in the juniper-ml repository.

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

juniper_model_core-0.1.0.tar.gz (21.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

juniper_model_core-0.1.0-py3-none-any.whl (21.4 kB view details)

Uploaded Python 3

File details

Details for the file juniper_model_core-0.1.0.tar.gz.

File metadata

  • Download URL: juniper_model_core-0.1.0.tar.gz
  • Upload date:
  • Size: 21.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for juniper_model_core-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e2897312a5b205109a2a54791eefa4a639e2fab7e505569f9c41e024e73f7815
MD5 7fae0a5faa48443765462117c963afcc
BLAKE2b-256 ac889b0af8d4207b1759803be32ae51dfe297515e5f4f288d6535f0bb83791be

See more details on using hashes here.

Provenance

The following attestation bundles were made for juniper_model_core-0.1.0.tar.gz:

Publisher: publish-model-core.yml on pcalnon/juniper-ml

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file juniper_model_core-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for juniper_model_core-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f00e5a9d66bf7f4f4fb078d4fee88df79c999e35343b0cda8681bb52c97ba119
MD5 beec65ddc20fe1804fd509c813fbdd5f
BLAKE2b-256 ff462926db6e1d2263ceb0d36ee27824b55f67575dcefd35ecc9bd793681561d

See more details on using hashes here.

Provenance

The following attestation bundles were made for juniper_model_core-0.1.0-py3-none-any.whl:

Publisher: publish-model-core.yml on pcalnon/juniper-ml

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page