Skip to main content

ML and data service modules built on servicekit - config, artifacts, tasks, and ML workflows

Project description

Chapkit

CI PyPI version codecov Python 3.13+ License: AGPL v3 Documentation

ML service modules built on servicekit - config, artifact, task, and ML workflows

Chapkit provides domain-specific modules for building machine learning services on top of servicekit's core framework. Includes artifact storage, task execution, configuration management, and ML train/predict workflows.

Features

  • Artifact Module: Hierarchical storage for models, data, and experiment tracking with parent-child relationships
  • Task Module: Reusable command templates for shell and Python task execution with parameter injection
  • Config Module: Key-value configuration with JSON data and Pydantic validation
  • ML Module: Train/predict workflows with artifact-based model storage and timing metadata
  • Config-Artifact Linking: Connect configurations to artifact hierarchies for experiment tracking

Installation

Using uv (recommended):

uv add chapkit

Or using pip:

pip install chapkit

Chapkit automatically installs servicekit as a dependency.

Optional Dependencies

For DataFrame conversions to/from pandas, polars, or xarray, install the extras you need:

uv add chapkit[pandas]    # pandas support
uv add chapkit[polars]    # polars support
uv add chapkit[xarray]    # xarray support (includes pandas)
uv add chapkit[dataframe] # all of the above

CLI Usage

Quickly scaffold a new ML service project using uvx:

uvx chapkit init <project-name>

Example:

uvx chapkit init my-ml-service

Options:

  • --path <directory> - Target directory (default: current directory)
  • --with-monitoring - Include Prometheus and Grafana monitoring stack
  • --template <type> - Template type: ml (default), ml-shell, or task

This creates a ready-to-run service with configuration, artifacts, and API endpoints pre-configured.

Template Types:

  • ml: Define training/prediction as Python functions in main.py (simpler, best for Python-only ML workflows)
  • ml-shell: Use external scripts for training/prediction (language-agnostic, supports Python/R/Julia/etc.)
  • task: General-purpose task execution with Python functions and shell commands (not ML-specific)

Quick Start

from chapkit import ArtifactHierarchy, BaseConfig
from chapkit.api import ServiceBuilder, ServiceInfo

class MyConfig(BaseConfig):
    model_name: str
    threshold: float

app = (
    ServiceBuilder(info=ServiceInfo(display_name="ML Service"))
    .with_health()
    .with_config(MyConfig)
    .with_artifacts(hierarchy=ArtifactHierarchy(name="ml", level_labels={0: "ml_training_workspace", 1: "ml_prediction"}))
    .with_jobs()
    .build()
)

Modules

Config

Key-value configuration storage with Pydantic schema validation:

from chapkit import BaseConfig, ConfigManager

class AppConfig(BaseConfig):
    api_url: str
    timeout: int = 30

# Automatic validation and CRUD endpoints
app.with_config(AppConfig)

Artifacts

Hierarchical storage for models, data, and experiment tracking:

from chapkit import ArtifactHierarchy, ArtifactManager, ArtifactIn

hierarchy = ArtifactHierarchy(
    name="ml_pipeline",
    level_labels={0: "experiment", 1: "model", 2: "evaluation"}
)

# Store pandas DataFrames, models, any Python object
artifact = await artifact_manager.save(
    ArtifactIn(data=trained_model, parent_id=experiment_id)
)

ML

Train and predict workflows with automatic model storage:

from chapkit.data import DataFrame
from chapkit.ml import FunctionalModelRunner


async def train_model(config: MyConfig, data: DataFrame, geo=None) -> dict:
    """Train your model - returns trained model object."""
    df = data.to_pandas()
    # Your training logic here
    return {"trained": True}


async def predict(config: MyConfig, model: dict, historic: DataFrame, future: DataFrame, geo=None) -> DataFrame:
    """Make predictions - returns DataFrame with predictions."""
    future_df = future.to_pandas()
    future_df["sample_0"] = 0.0  # Your predictions here
    return DataFrame.from_pandas(future_df)


# Wrap functions in runner
runner = FunctionalModelRunner(on_train=train_model, on_predict=predict)
app.with_ml(runner=runner)

Architecture

chapkit/
├── config/           # Configuration management with Pydantic validation
├── artifact/         # Hierarchical storage for models and data
├── task/             # Reusable task templates (Python functions, shell commands)
├── ml/               # ML train/predict workflows
├── cli/              # CLI scaffolding tools
├── scheduler.py      # Job scheduling integration
└── api/              # ServiceBuilder with ML integration
    └── service_builder.py  # .with_config(), .with_artifacts(), .with_ml()

Chapkit extends servicekit's BaseServiceBuilder with ML-specific features and domain modules for configuration, artifacts, tasks, and ML workflows.

Examples

See the examples/ directory for complete working examples:

  • quickstart/ - Complete ML service with config, artifacts, and ML endpoints
  • config_artifact/ - Config with artifact linking
  • ml_functional/, ml_class/, ml_shell/ - ML workflow patterns (ML template, class-based, ML-shell template)
  • ml_pipeline/ - Multi-stage ML pipeline with hierarchical artifacts
  • artifact/ - Read-only artifact API with hierarchical storage
  • task_execution/ - Task execution with Python functions and shell commands
  • full_featured/ - Comprehensive example with monitoring, custom routers, and hooks
  • library_usage/ - Using chapkit as a library with custom models
  • custom_migrations/ - Database migrations with custom models

Documentation

See docs/guides/ for comprehensive guides:

Full documentation: https://dhis2-chap.github.io/chapkit/

Testing

make test      # Run tests
make lint      # Run linter
make coverage  # Test coverage

License

AGPL-3.0-or-later

Related Projects

  • servicekit - Core framework foundation (FastAPI, SQLAlchemy, CRUD, auth, etc.) (docs)

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

chapkit-0.14.0.tar.gz (74.6 kB view details)

Uploaded Source

Built Distribution

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

chapkit-0.14.0-py3-none-any.whl (102.6 kB view details)

Uploaded Python 3

File details

Details for the file chapkit-0.14.0.tar.gz.

File metadata

  • Download URL: chapkit-0.14.0.tar.gz
  • Upload date:
  • Size: 74.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.22 {"installer":{"name":"uv","version":"0.9.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for chapkit-0.14.0.tar.gz
Algorithm Hash digest
SHA256 f3ce1a033651203c773d93e68d7795e3900a84190c6668cc2eb9cccab0f737f5
MD5 30121b97a65c220aa183f475b5374318
BLAKE2b-256 e29c17fabe12bad3f4096875cfd3483b66e3c3451670b6574509a892edb3b1a0

See more details on using hashes here.

File details

Details for the file chapkit-0.14.0-py3-none-any.whl.

File metadata

  • Download URL: chapkit-0.14.0-py3-none-any.whl
  • Upload date:
  • Size: 102.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.22 {"installer":{"name":"uv","version":"0.9.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for chapkit-0.14.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1305203bc61629e5d5879198159ad0f6c4d33ed782cff75752f132fdc6b89175
MD5 5fdff52cef221859b5e30e557f55e575
BLAKE2b-256 4fdf99cb36be3330525c7ba0b7c24edbcb8b237e89e447b0f3c3f219c4db56bc

See more details on using hashes here.

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