Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Universal Model Runtime (Python)

The tracdap-runtime is a lightweight package for building portable, production-grade Python models. Models created with the runtime can be executed anywhere, from local development environments to enterprise production systems.

The runtime can be used independently of the trac platform and provides a simple framework in which to build, ship, and share models.

Each model defines its parameters, inputs and outputs, and the runtime provides the execution context, ensuring that models always receive valid data and parameters. Taking responsibility for data access, marshalling and formatting out of the model code allows developers to focus on model logic, safe in the knowledge that the model will behave consistently across environments.

For a complete guide to writing models in the trac framework, see the online documentation.

📦 Requirements

  • Python : 3.10 or later
  • Tools : Any popular IDE (PyCharm, VS Code, etc.)
  • Pandas : Version 1.3 and later are supported
  • Polars : Version 1.0 and later are supported

Some 3rd party libraries may have additional version constraints, for example, Pandas 1.5 is not available for Python 3.12 or later.

🚀 Quick start

tracdap-runtime can be added to a new or existing Python project using pip:

$ pip install tracdap-runtime

You will also need to install a data framework (Pandas or Polars) and any other libraries that the model uses.

Here is a minimum working example of a TRAC model that performs aggregation on a dataset:

import tracdap.rt.api as trac

class QuickStartModel(trac.TracModel):

    def define_parameters(self):

        # Define any parameters the model will use
        return trac.define_parameters(
            trac.P("exchange_rate", trac.FLOAT, "EUR / GBP exchange rate")
        )

    def define_inputs(self):

        # Define an input table with the columns and data types that the model needs
        customer_loans = trac.define_input_table(
            trac.F("id", trac.STRING, label="Customer account ID", business_key=True),
            trac.F("region", trac.STRING, label="Customer home region", categorical=True),
            trac.F("loan_amount", trac.FLOAT, label="Principal loan amount (EUR)"),
            label="Customer loans data")

        return {"customer_loans": customer_loans}

    def define_outputs(self):

        # Define an output table with the columns and data types that the model will produce
        loans_by_region = trac.define_output_table(
            trac.F("region", trac.STRING, label="Customer home region", categorical=True),
            trac.F("total_lending", trac.FLOAT, label="Total lending (GBP)"),
            label="Loans by region")

        return {"loans_by_region": loans_by_region}

    def run_model(self, ctx: trac.TracContext):

        # Parameters and inputs are loaded and validated by the runtime
        exchange_rate = ctx.get_parameter("exchange_rate")
        customer_loans = ctx.get_pandas_table("customer_loans")

        # Model code is regular Python
        customer_loans["loan_amount_gbp"] = customer_loans["loan_amount"] * exchange_rate

        loans_by_region = customer_loans \
            .groupby("region", observed=True, as_index=False) \
            .aggregate(total_lending=("loan_amount_gbp", "sum"))

        # Logs written to ctx.log are captured by the platform
        ctx.log().info("Aggregated loans for %d regions", len(loans_by_region))

        # Outputs are handed back to the runtime for validation and saving
        ctx.put_pandas_table("loans_by_region", loans_by_region)

# Use the desktop launcher to run, test and debug models locally
if __name__ == "__main__":
    import tracdap.rt.launch as launch
    launch.launch_model(QuickStartModel, "config/quick_start.yaml", "config/sys_config.yaml")

The model needs two config files in order to run: A job config file and a system config file. By convention, for local development these are kept in a config folder.

The system config file defines the resources that are available for models to use. As a minimum the default storage location must be specified.

sys_config.yaml

properties:

  storage.default.location: example_data
  storage.default.format: CSV

resources:

  example_data:
    resourceType: INTERNAL_STORAGE
    protocol: LOCAL
    properties:
      rootPath: C:\path\to\your\data

The job config file supplies the model with the parameters, inputs and outputs that it needs to run. The default data location from sys_config.yaml is used to load input data and save output data. The runtime checks the types and schemas of every parameter and input dataset, types are cast automatically where it is safe to do so, otherwise the runtime will raise an error if the inputs are not valid.

quick_start.yaml

job:
  runModel:
    
    parameters:
      exchange_rate: 0.865
    
    inputs:
      customer_loans: "inputs/customer_loans_data.csv"

    outputs:
      loans_by_region: "outputs/example_model/loans_by_region.csv"

You can run the model from your IDE (right click the model file and choose "Run", or look for the "Play" button). You will see the model logs, and an output file will be created inside your data folder.

📖 Documentation

See the online documentation for a complete guide to writing models in the trac framework, including tutorials and the full Model API.

✋ Contributing

If you'd like to contribute a feature or a fix then we'd love to hear from you! Please raise an issue on our issue tracker to discuss your suggestion before working on a PR.

Contributions are governed according to the contribution guidelines and the FINOS code of conduct.

📜 License

The TRAC model runtime is maintained by Fintrac Limited in association with the Fintech Open Source Foundation (FINOS) and distributed under the terms of the Apache License, Version 2.0.

SPDX-License-Identifier: Apache-2.0

For more information including copyright history, see the NOTICE file.

🏢 Enterprise

Professional support for the trac platform is available from Fintrac Limited, for more information about this please contact us.

Release files for tracdap-runtime 0.11.0b1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tracdap-runtime 0.11.0b1
File Size Uploaded
tracdap_runtime-0.11.0b1.tar.gz 239.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tracdap-runtime 0.11.0b1
File Interpreter ABI Platform
tracdap_runtime-0.11.0b1-py3-none-any.whl Python 3 none any Details

Total release size: 557.8 kB

Release files / tracdap_runtime-0.11.0b1.tar.gz

Download URL tracdap_runtime-0.11.0b1.tar.gz
Size 239.2 kB
Tags Source
SHA-256 checksum
How to use checksums
8567795956df3e10499915c695786b3b371fb2fd9fdae046097c063371680e1a
BLAKE2b-256 checksum
How to use checksums
1913b0b266432aaade9fc54afe0a3d89a6bfe0b7f1d6a977cb84c8d65f6d3c86
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release files / tracdap_runtime-0.11.0b1-py3-none-any.whl

Download URL tracdap_runtime-0.11.0b1-py3-none-any.whl
Size 318.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c88d53f18f228f39a12cbdb509ccf7d63caab45a7d2921845be1ffb83e91cf94
BLAKE2b-256 checksum
How to use checksums
756b84feb7e89d53b5efe39d99c99bf00310ca0aa0110037d1102a4dddb52db3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.11.0b1 This release

2 release files

0.10.1

2 release files

0.10.0

2 release files

0.9.3

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.6

2 release files

0.6.5

2 release files

0.6.4

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.28

2 release files

0.5.27

2 release files

0.5.25

2 release files

0.5.24

2 release files

0.5.23

2 release files

0.5.22

2 release files

0.5.21

2 release files

0.5.14

2 release files

0.5.13

2 release files

0.5.12

2 release files

0.5.11

2 release files

0.5.10

2 release files

0.5.9

2 release files

0.5.8

2 release files

0.5.7

2 release files

0.5.6

2 release files

0.5.5

2 release files

0.5.4

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.9

2 release files

0.4.8

2 release files

0.4.7

2 release files

0.4.6

2 release files

0.4.5

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page