Skip to main content

Run Metaflow flows as Mage pipelines

Project description

metaflow-mage

CI PyPI License Python

Run any Metaflow flow as a Mage pipeline without rewriting your steps.

The problem

Mage is a modern data pipeline tool with a rich UI and flexible block model, but it has no native support for Metaflow's step graph, artifact store, or retry semantics. Teams that want Mage's notebook-style visibility must either re-implement their Metaflow flows as Mage blocks from scratch or give up Metaflow's lineage, versioning, and @retry behavior. There is no ready-made compiler that maps a Metaflow DAG to Mage blocks while keeping the full Metaflow runtime intact.

Quick start

pip install metaflow-mage
python flow.py mage create --mage-host http://localhost:6789
python flow.py mage trigger --mage-host http://localhost:6789
# Compiling HelloFlow to Mage pipeline...
# Pipeline hello_flow deployed successfully.
# Pipeline run started: http://localhost:6789/pipelines/hello_flow/runs/1

Install

pip install metaflow-mage

From source:

git clone https://github.com/npow/metaflow-mage
cd metaflow-mage
pip install -e .

Usage

Deploy and run in one step:

python flow.py mage run \
  --mage-host http://localhost:6789 \
  --mage-project metaflow_project
# Compiling HelloFlow to Mage pipeline...
# Pipeline hello_flow deployed successfully.
# Triggering pipeline run...
# Pipeline run started: http://localhost:6789/pipelines/hello_flow/runs/1
# Pipeline run is running...
# Pipeline run 1 completed successfully.

Deploy once, trigger many times with parameters:

python flow.py mage create --mage-host http://localhost:6789
python flow.py mage trigger --mage-host http://localhost:6789 \
  --run-param message=hello --run-param n=10

Programmatic API:

from metaflow import Deployer

with Deployer("flow.py") as d:
    df = d.mage().create(
        mage_host="http://localhost:6789",
        mage_project="metaflow_project",
    )
    run = df.trigger(message="hello")
    print(run.status)       # RUNNING / SUCCEEDED / FAILED
    print(run.mage_ui)      # http://localhost:6789/pipelines/hello_flow/runs/1
    print(run.run.successful)  # True

Delete a deployed pipeline:

python flow.py mage delete --mage-host http://localhost:6789
# Pipeline hello_flow deleted from Mage.

How it works

Each Metaflow step becomes a Mage Python block. An init block runs first to allocate the Metaflow run ID; subsequent blocks call python flow.py step <step_name> with --run-id, --task-id, and --retry-count threaded through as block outputs. Foreach steps emit a foreach_init block that enumerates items and fans out to per-item body blocks. A Mage API trigger (pipeline schedule) is created or reused on every create, so trigger works immediately without manual Mage UI setup.

Supported graph patterns: linear, branch/join, foreach. @parallel is not supported.

Configuration

CLI option Environment variable Default Description
--mage-host MAGE_HOST http://localhost:6789 Mage server base URL
--mage-project MAGE_PROJECT metaflow_project Mage project name
--max-workers 10 Max concurrent block runs
--branch @project branch name
--production false Deploy to the production project branch
--name derived from class name Override the Mage pipeline UUID

Development

git clone https://github.com/npow/metaflow-mage
cd metaflow-mage
pip install -e ".[dev]"
pytest tests/

Integration tests require a running Mage instance:

docker run -it -p 6789:6789 mageai/mageai mage start metaflow_project
pytest tests/ -m integration

License

Apache 2.0. 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

metaflow_mage-0.2.0.tar.gz (26.0 kB view details)

Uploaded Source

Built Distribution

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

metaflow_mage-0.2.0-py3-none-any.whl (26.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: metaflow_mage-0.2.0.tar.gz
  • Upload date:
  • Size: 26.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for metaflow_mage-0.2.0.tar.gz
Algorithm Hash digest
SHA256 396bcabc40baa2292e95f241dd32aa4286f037260216cb362b5457c9ba3fe9e5
MD5 0e0e84d209acff2044004931c2cbb92f
BLAKE2b-256 f2acd0d81d2d96f7c814a98811eb19bbe2b4811fbdef5c3844d5a7c68aa09f70

See more details on using hashes here.

Provenance

The following attestation bundles were made for metaflow_mage-0.2.0.tar.gz:

Publisher: publish.yml on npow/metaflow-mage

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

File details

Details for the file metaflow_mage-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: metaflow_mage-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 26.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for metaflow_mage-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8e6622d3700d46b1db3e0313a69a1c75ed0a0380a1c1d740092b0bb6bf2676ea
MD5 b56e0b1ee9f91279b52d08a4c888cb14
BLAKE2b-256 0912c3b2d01b2908b04a4b64e52391b7240101801d8cfa0b653d37b886b0ce8a

See more details on using hashes here.

Provenance

The following attestation bundles were made for metaflow_mage-0.2.0-py3-none-any.whl:

Publisher: publish.yml on npow/metaflow-mage

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