Skip to main content

koios-model-utils

Annotate ONNX models with the metadata the Koios IoT platform needs to run them.

This library is the canonical writer (and reader) of the koios.training and koios.bindings metadata_props blocks Koios consumes when a model is uploaded to its predict engine. Bring your own ONNX file from any framework (Stable-Baselines3, PyTorch, TensorFlow/Keras, scikit-learn); the library only touches metadata.

The wire format is fully documented in docs/CONTRACT.md.

Installation

pip install koios-model-utils

Only runtime dependency is onnx>=1.14. No torch, no SB3, no CLI — this is a metadata library.

Quick start

import onnx
from koios_model_utils import (
    Algorithm,
    InputBinding,
    NormalizationSource,
    NormalizationType,
    OutputBinding,
    TrainingMeta,
    embed_koios_metadata,
)

model = onnx.load("my_model.onnx")

embed_koios_metadata(
    model,
    inputs=[
        InputBinding(name="tank_temperature", description="Tank temperature (C)"),
        InputBinding(name="pressure", description="Vessel pressure (kPa)"),
    ],
    outputs=[
        OutputBinding(
            name="valve_position",
            range_min=0.0,
            range_max=100.0,
            normalization_type=NormalizationType.SYMMETRIC,
            normalization_source=NormalizationSource.CUSTOM,
            custom_minimum=0.0,
            custom_maximum=100.0,
            clamp_output=True,
        ),
    ],
    training=TrainingMeta(
        scenario_name="tank_temperature",
        algorithm=Algorithm.PPO,
        obs_depth=5,
        sample_rate=1.0,
    ),
)

onnx.save(model, "my_model_koios.onnx")

The Koios webapp reads both metadata blocks on upload and uses them to configure model.sample_rate, the input/output bindings, normalization rules, and (for DRL classifiers) the action map.

See examples/ for runnable scripts.

Reading metadata back

The mirror of embed_koios_metadata:

from koios_model_utils import parse_koios_metadata

parsed = parse_koios_metadata(onnx.load("my_model_koios.onnx"))
print(parsed.training)        # TrainingMeta dataclass (or None)
print(parsed.inputs)          # list[InputBinding]
print(parsed.outputs)         # list[OutputBinding]
print(parsed.has_metadata)    # True if any koios.* prop was present

If the JSON has already been pulled out of the ONNX file (e.g. persisted in a database column), use parse_koios_metadata_from_dict and pass {"koios.training": {...}, "koios.bindings": {...}} directly.

Public API

Dataclasses

Class Purpose
InputBinding One observation feature — name, normalization rules, failure bounds
OutputBinding One action / output — name, range, normalization, clamping
TrainingMeta Model-level metadata — algorithm, sample/scan rate, model type, action map
ActionMapEntry One row of a DISCRETE-mode action map (value + label)
ParsedKoiosMetadata Return type of parse_koios_metadata

All dataclasses run their validators in __post_init__, so bad combinations (e.g. Z_SCORE + custom_minimum) raise at construction.

Enums

NormalizationType, NormalizationSource, ModelType, OutputMode, Algorithm, FailureRangeMode — all enum.StrEnum, all uppercase wire values. See enums.py for the members.

Pass enum members rather than raw strings — the dataclasses accept either, but enums catch typos at type-check time.

Functions

Function Purpose
embed_koios_metadata(model, *, inputs, outputs, training=None, output_denormalized=False) Write koios.training + koios.bindings into an ONNX model (in-place)
parse_koios_metadata(model) Parse them back into typed dataclasses
parse_koios_metadata_from_dict(raw) Same, but from an already-decoded dict

Errors

KoiosMetadataError, UnsupportedSchemaVersionError, KoiosMetadataDecodeError — all ValueError subclasses raised by the parser.

sample_rate vs scan_rate

sample_rate is the interval (seconds) the model was trained at. The Koios predict engine resamples historical inputs to this rate.

scan_rate is how often the predict engine executes the model. When omitted (the common case), it inherits sample_rate — forecasting models train and run at the same cadence. Set it explicitly for RL controllers that need to act faster than the simulator step they were trained against (e.g. sample_rate=1.0 history lookback, scan_rate=0.1 control loop).

Discrete (classification / DQN) heads

For models that emit an action index instead of a continuous value, set output_mode and pass an action_map:

from koios_model_utils import (
    ActionMapEntry, OutputMode, TrainingMeta,
)

training = TrainingMeta(
    algorithm="DQN",
    output_mode=OutputMode.DISCRETE,
    action_map=[
        ActionMapEntry(value=-1.0, label="Decrease setpoint"),
        ActionMapEntry(value=0.0, label="Hold"),
        ActionMapEntry(value=1.0, label="Increase setpoint"),
    ],
)

action_map also accepts raw {"value": ..., "label": ...} dicts and coerces them to ActionMapEntry at construction — extra keys are dropped, missing keys raise.

Contract & versioning

The wire format is at schema_version 1. docs/CONTRACT.md is the source of truth for every field, every default, and every server-side policy applied on upload.

The library and the Koios webapp move in lockstep: any wire-format change here requires a coordinated webapp release. The CONTRACT lays out exactly which keys the webapp reads, the forward-compat rules within v1, and when a v2 bump would be needed.

Development

pip install -e ".[dev]"
make test
make lint

License

Apache License 2.0 — see LICENSE.

Download files

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

Source Distribution

koios_model_utils-1.1.1.tar.gz (37.6 kB view details)

Uploaded Source

Built Distribution

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

koios_model_utils-1.1.1-py3-none-any.whl (18.7 kB view details)

Uploaded Python 3

File details

Details for the file koios_model_utils-1.1.1.tar.gz.

File metadata

  • Download URL: koios_model_utils-1.1.1.tar.gz
  • Upload date:
  • Size: 37.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for koios_model_utils-1.1.1.tar.gz
Algorithm Hash digest
SHA256 f555173ef88c5780cb27a697c17b5ebbc4a96697a7648d570d7ec54ac87bd7fd
MD5 fdd7a2a6eefd53125833f94e7e91120c
BLAKE2b-256 050af986f7e276a70da83107005573cf02581a8619d458ed953a504a58a4a965

See more details on using hashes here.

Provenance

The following attestation bundles were made for koios_model_utils-1.1.1.tar.gz:

Publisher: release.yml on Ai-Ops-Inc/koios-model-utils

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

File details

Details for the file koios_model_utils-1.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for koios_model_utils-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 cdd399486bd3e56a11b37b99a5db543227988c6647c574b431a68c9ac949583f
MD5 14e05bcaa12605c4e6e6a7e6222d1b05
BLAKE2b-256 09795541cdb71b0e09472d84a47cee708097d1847cd2bde06c0df07ea4ff1009

See more details on using hashes here.

Provenance

The following attestation bundles were made for koios_model_utils-1.1.1-py3-none-any.whl:

Publisher: release.yml on Ai-Ops-Inc/koios-model-utils

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

Release history Release notifications | RSS feed

This release

1.1.1 This release

2 files

1.1.0

2 files

1.0.0

2 files

Supported by

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