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.2.0.tar.gz (31.6 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.2.0-py3-none-any.whl (29.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: juniper_model_core-0.2.0.tar.gz
  • Upload date:
  • Size: 31.6 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.2.0.tar.gz
Algorithm Hash digest
SHA256 7cf79c38ea5cbdc34ffde259ceb105fda5075a699c08ea0b3a8f9fec10b24048
MD5 14228afcf5ca1f4f7ed348efb2c967c4
BLAKE2b-256 97a89d4aa7cbcb4aaedbc673056dbb48f1c5803e916585121a0f60b487886ca9

See more details on using hashes here.

Provenance

The following attestation bundles were made for juniper_model_core-0.2.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.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for juniper_model_core-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9bc6091151f7f43504046dc008b3a966c6452a6d1fc5f52ebb4338e2caab8691
MD5 ccd54b5eddaf5d867b3c6b88fbf3ee3c
BLAKE2b-256 9d068c1472af44b9c8645f3cd541eab19ae7de80c49940b058a213985687c354

See more details on using hashes here.

Provenance

The following attestation bundles were made for juniper_model_core-0.2.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