Skip to main content

A domain-agnostic pipeline framework with provenance tracking

Project description

Artisan

PyPI Python Docs License Ruff

A Python framework for building computational pipelines with automatic provenance tracking.

Artisan is a set of protocols for composable, scalable, and reproducible computation. Operations declare a contract (typed inputs, typed outputs, parameters) and the framework uses that contract to wire things together, track what produced what, and store results as content-addressed artifacts. The computation inside each operation is a black box: wrap whatever tools you're already using.

Because the contract is explicit and structured, caching, lineage queries, and portability across environments come for free. The same pipeline runs on a laptop or an HPC cluster without changes to the operations themselves.

Status: This project is in early development. APIs may change between releases.


Why Artisan?

Simple — Define steps, connect outputs to inputs, run. No boilerplate, plain Python.

Extensible — Wrap any tool as an OperationDefinition. Declare inputs and outputs, implement three methods, and the framework handles the rest.

Reproducible — Artifacts are content-addressed and provenance is tracked automatically. Same content, same identity. Every result traces back to the inputs and parameters that produced it.

Scale-invariant — The same pipeline code runs on a laptop or an HPC cluster. Switch from local to SLURM execution with a single parameter.

Queryable — Artifacts, metrics, and provenance live in a single store, accessible as dataframes. No log parsing, no directory archaeology.


Quick Start

Prerequisites: Python 3.12+, Pixi

# Install Pixi (if needed)
curl -fsSL https://pixi.sh/install.sh | bash

# Clone and install
git clone https://github.com/dexterity-systems/artisan.git
cd artisan

pixi install

# Verify
pixi run python -c "import artisan; print('Artisan installed successfully')"

Getting Started guide for detailed setup, Prefect setup, your first pipeline, and the mental model behind the framework.


Quick Example

from artisan.orchestration import PipelineManager
from artisan.operations.examples import DataGenerator, DataTransformer, MetricCalculator
from artisan.operations.curator import Filter

pipeline = PipelineManager.create(
    name="my_pipeline",
    delta_root="runs/delta",
    staging_root="runs/staging",
    working_root="runs/working",
)
output = pipeline.output

# Generate datasets -> transform -> compute metrics -> filter by score
pipeline.run(operation=DataGenerator, name="generate", params={"count": 5, "seed": 42})
pipeline.run(
    operation=DataTransformer,
    name="transform",
    inputs={"dataset": output("generate", "datasets")},
    params={"scale_factor": 2.0},
)
pipeline.run(
    operation=MetricCalculator,
    name="score",
    inputs={"dataset": output("transform", "dataset")},
)
pipeline.run(
    operation=Filter,
    name="filter",
    inputs={"passthrough": output("transform", "dataset")},
    params={
        "criteria": [
            {"metric": "distribution.median", "operator": "gt", "value": 0.5},
        ]
    },
)

result = pipeline.finalize()

:::{note} This example requires a running Prefect server. See the Getting Started guide for setup instructions. :::

Development Setup

Environments

Pixi manages three environments, all sharing a single dependency solve:

Environment Activate with Purpose
default pixi run … Core runtime — everything needed to run pipelines
dev pixi run -e dev … Testing, linting, formatting, notebooks
docs pixi run -e docs … Documentation building (Jupyter Book 2)

Running Tests

pixi run -e dev test              # Unit (sequential) + integration (parallel)
pixi run -e dev test-unit         # Unit tests only
pixi run -e dev test-integration  # Integration tests only (parallel)
pixi run -e dev test-seq          # All tests sequentially (for debugging)

Formatting and Linting

pixi run -e dev fmt               # Ruff format + lint with auto-fix

Shell Completions

Enable tab-completion for pixi commands and tasks:

# Bash — add to ~/.bashrc
echo 'eval "$(pixi completion --shell bash)"' >> ~/.bashrc

# Zsh — add to ~/.zshrc
echo 'eval "$(pixi completion --shell zsh)"' >> ~/.zshrc

Restart your shell or source the file to activate.


Documentation

pixi run -e docs docs-build       # Build HTML docs
pixi run -e docs docs-serve       # Serve locally at http://localhost:8000
pixi run -e docs docs-clean       # Remove build artifacts
  • Getting Started — Installation and first steps
  • Tutorials — Interactive notebooks from first steps through advanced patterns
  • How-to Guides — Task-oriented guides for building pipelines, writing operations, and more
  • Concepts — Architecture, design principles, and system internals
  • Reference — API reference and coding conventions

Claude Code Integration

Artisan includes a Claude Code plugin with skills for scaffolding operations, pipelines, and documentation.

Skill Description
/write-operation Scaffold or review an OperationDefinition subclass
/write-composite Scaffold or review a CompositeDefinition subclass
/write-pipeline Scaffold a pipeline script composing operations
/write-docs Write or edit documentation pages, tutorials, and guides

The plugin is included in the repository and activates automatically. Downstream repos can install it by pointing their settings to this repo. See Using Claude Code for details.


Architecture

Artisan is a domain-agnostic pipeline framework. It handles execution, orchestration, storage, provenance tracking, and the base operation interface. Domain-specific operations extend it by subclassing OperationDefinition.

See Architecture Overview for details.


Contributing

Contributions are welcome! See CONTRIBUTING.md for guidelines.

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

dexterity_artisan-0.1.2a3.tar.gz (749.1 kB view details)

Uploaded Source

Built Distribution

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

dexterity_artisan-0.1.2a3-py3-none-any.whl (248.7 kB view details)

Uploaded Python 3

File details

Details for the file dexterity_artisan-0.1.2a3.tar.gz.

File metadata

  • Download URL: dexterity_artisan-0.1.2a3.tar.gz
  • Upload date:
  • Size: 749.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for dexterity_artisan-0.1.2a3.tar.gz
Algorithm Hash digest
SHA256 71a900966b00df098c9e6b38f8aaaf031dec9d5531955aee3662357a1bbef13b
MD5 6df3936efe05bc2dfb1910226cdfa159
BLAKE2b-256 dd0f524b3a4774ad1adabf6d6f621687fe8e98e0fb4b6e7075b2340a3b8a949b

See more details on using hashes here.

Provenance

The following attestation bundles were made for dexterity_artisan-0.1.2a3.tar.gz:

Publisher: release.yml on dexterity-systems/artisan

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

File details

Details for the file dexterity_artisan-0.1.2a3-py3-none-any.whl.

File metadata

File hashes

Hashes for dexterity_artisan-0.1.2a3-py3-none-any.whl
Algorithm Hash digest
SHA256 f00c2c6ff8e33b7a4fcd615e797d89e48c44743cca5fdaac2d13e2fe2b0e907f
MD5 8c4d2286d66db290f774c7871a242516
BLAKE2b-256 2d9d4a607ab9f1212f39d49c8918f3958802b242aaca2466c9b2dba39b44df78

See more details on using hashes here.

Provenance

The following attestation bundles were made for dexterity_artisan-0.1.2a3-py3-none-any.whl:

Publisher: release.yml on dexterity-systems/artisan

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