Skip to main content

Truthlocks MLflow integration

Build structured, hash-addressed evidence from MLflow metadata for your application's audit workflow.

Package: mlflow-maip · Python: 3.9+ · License: Apache-2.0

Developer documentation · Console

Install

python -m pip install mlflow-maip

Use a virtual environment and lock compatible framework versions with your application. The local example below needs no hosted credentials and makes no external requests.

Quickstart: create local evidence

from types import SimpleNamespace
from mlflow_maip import MAIPConfig, generate_receipt_from_run, hash_receipt_payload

run = SimpleNamespace(
    info=SimpleNamespace(run_id="demo-run", experiment_id="demo-experiment",
                         artifact_uri="./artifacts", start_time=1700000000000,
                         end_time=1700000001000, status="FINISHED"),
    data=SimpleNamespace(metrics={"accuracy": 0.95}, params={"epochs": "3"}, tags={}),
)
receipt = generate_receipt_from_run(run, config=MAIPConfig(auto_receipt=False))
assert receipt.payload_hash == hash_receipt_payload(receipt)
print(receipt.model_dump_json(indent=2))

Connect real data

Replace the demonstration object with a Run returned by your MLflow tracking client. Configure MLflow credentials separately. The builder extracts run metadata; it does not download or verify artifact contents.

Available interfaces

generate_receipt_from_run creates local run evidence and hash_receipt_payload recomputes its digest. The plugin module is a separate integration surface and must be explicitly configured.

Configuration

Setting Meaning
auto_receipt=False Disable automatic hosted submission in integration hooks.
agent_id Registered agent in the authenticated workspace, used for signing.
tenant_id Workspace metadata; does not authorize API access.
api_key, api_url Hosted transport configuration, separate from framework credentials.
timeout HTTP timeout in seconds; default 30.
verify_ssl TLS verification; keep enabled.

Evidence and delivery guarantees

The local result is a Pydantic model with a payload_hash. Save it using model_dump_json() and retain the metadata needed to reproduce it. Recomputing the hash checks consistency of that local representation; it does not validate a server signature, establish a trusted identity, or confirm transparency-log inclusion.

Metrics, parameters and artifact URI come from the supplied run. An artifact URI is not a hash of the artifact or proof of its availability.

Submit and verify hosted evidence (1.1.0+)

Register a machine identity in your workspace before submission. Set MAIP_AGENT_ID to its identifier and MAIP_API_KEY to a workspace API key with access to machine identities and receipts. Provider keys are separate. A tl_test_ key selects the sandbox host unless MAIP_API_URL overrides it; production defaults to https://api.truthlocks.com/v1. Do not use a tenant header as authentication.

This example submits the local receipt created above only when credentials are set:

import asyncio
import os
from maip_ai_connectors.client import MAIPClient
from maip_ai_connectors.config import MAIPConfig

async def submit_and_verify(local_receipt):
    config = MAIPConfig(agent_id=os.environ["MAIP_AGENT_ID"],
                        api_key=os.environ["MAIP_API_KEY"])
    async with MAIPClient(config) as client:
        stored = await client.create_receipt(local_receipt)
        check = await client.verify_receipt(stored.receipt_id)
        if not check.valid or not check.signature_verified:
            raise RuntimeError(check.reason or check.verdict)
        print(stored.receipt_id, check.verdict)

if os.environ.get("MAIP_API_KEY") and os.environ.get("MAIP_AGENT_ID"):
    asyncio.run(submit_and_verify(receipt))

The server stores integration metadata in a signed MAIP action receipt. Its receipt_id differs from the local payload_hash. Verification checks the signature and current lifecycle state; it does not establish transparency-log inclusion. Old receipts whose signing key was lost return UNVERIFIABLE.

For automatic hooks, enable auto_receipt=True. In synchronous code delivery is confirmed before the hook returns. In asynchronous code, call await wrapper.flush() and await wrapper.aclose() before shutdown; inspect get_submitted_receipts() for server responses. These lifecycle methods apply to AI wrappers/callbacks; data clients use their async context manager or create_receipt_sync() instead. Read retries are bounded; writes are never automatically replayed. After a timeout, check the agent's receipts before retrying. Listing returns up to the latest 100 receipts for one agent, with integration filters applied to that page.

Troubleshooting

Problem Next step
Missing optional dependency Install the framework/provider extra in the interpreter running your app.
Validation error Supply the documented fields and types; do not substitute a whole response for one metadata object.
Hash changes Compare serialized fields, including timestamps and identifiers.
Nothing appears in Console Local builders do not submit records; configure a registered agent and await confirmed delivery.

For support, share package and Python versions plus a sanitized example. Do not include keys, customer data or full authentication headers. No automatic compliance certification or fixed processing-latency guarantee is implied.

Automatic MLflow tracking

Version 1.1.0 registers the maip tracking-store scheme. To use a local SQLite backend, set MLFLOW_TRACKING_URI=maip:sqlite:///mlflow.db, MAIP_API_KEY and MAIP_AGENT_ID before starting your application. Configure an ordinary artifact location for your experiment. Terminal runs receive a maip.receipt_id tag only after receipt delivery succeeds. A failed submission keeps the MLflow run and sets maip.receipt_status=delivery_failed; inspect logs before retrying.

A file URI such as maip:///absolute/path/mlruns is also supported. Recent MLflow versions require explicit MLFLOW_ALLOW_FILE_STORE=true; SQLite is preferred. The hook tracks run completion metadata, not every model-registry or tracing event.

Metadata

Release files for mlflow-maip 1.1.0

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

Source distribution (sdist)

Source distribution for mlflow-maip 1.1.0
File Size Uploaded
mlflow_maip-1.1.0.tar.gz 13.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mlflow-maip 1.1.0
File Interpreter ABI Platform
mlflow_maip-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 26.1 kB

Release files / mlflow_maip-1.1.0.tar.gz

Download URL mlflow_maip-1.1.0.tar.gz
Size 13.6 kB
Tags Source
SHA-256 checksum
How to use checksums
86c47a85f3fd32d8a074a9e5274f65d6d7a7f68343bfc57db6b5ca0e588b303b
BLAKE2b-256 checksum
How to use checksums
1cb9371e93679386d66f29fb476e2c529ee9eaf24dedac48ef7d717dd0159828
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.15

Release files / mlflow_maip-1.1.0-py3-none-any.whl

Download URL mlflow_maip-1.1.0-py3-none-any.whl
Size 12.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2c1c880b0fa6ef1e48fdb847fbe82c8ce28551b49be0c498605b0c6ff65797b3
BLAKE2b-256 checksum
How to use checksums
6f7fad6f4ef883e3ba6fcc7fa8a2487c611b797983994a550dfe7ae5c9c2967b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.15

Release history Release notifications | RSS feed

This release

1.1.0 This release

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