Skip to content

FlowyML Native Plugin System

FlowyML provides a powerful, extensible plugin system that allows you to integrate with external tools without requiring any framework dependencies. Simply install the plugin you need, and FlowyML handles the rest.

Quick Start

# List available plugins
flowyml plugin list

# Install a plugin (installs underlying packages directly)
flowyml plugin install mlflow

# Show plugin info
flowyml plugin info mlflow
# Use in Python
from flowyml.plugins import get_plugin

# Get a pre-configured tracker
tracker = get_plugin("mlflow", tracking_uri="http://localhost:5000")

# Start tracking
tracker.start_run("my_experiment")
tracker.log_params({"learning_rate": 0.001})
tracker.log_metrics({"accuracy": 0.95})
tracker.end_run()

Key Benefits

Feature FlowyML Plugins
No framework overhead Install only what you need
Direct integration Uses underlying tools directly (mlflow, boto3, etc.)
Full control FlowyML's own clean interfaces
Easy to extend Create your own plugins
Community support Install plugins from git

Available Plugins

Experiment Trackers

Plugin Description Packages
mlflow MLflow experiment tracking & model registry mlflow
wandb Weights & Biases tracking wandb
neptune Neptune.ai tracking neptune
tensorboard TensorBoard visualization tensorboard

Artifact Stores

Plugin Description Packages
s3 AWS S3 storage boto3, s3fs
gcs Google Cloud Storage google-cloud-storage, gcsfs
azure_blob Azure Blob Storage azure-storage-blob, adlfs

Orchestrators

Plugin Description Packages
kubernetes Kubernetes orchestration kubernetes
airflow Apache Airflow DAGs apache-airflow
kubeflow Kubeflow Pipelines kfp
ray Ray distributed computing ray

Container Registries

Plugin Description Packages
docker Local Docker registry docker
ecr AWS Elastic Container Registry boto3
gcr Google Container Registry google-cloud-artifact-registry
acr Azure Container Registry azure-mgmt-containerregistry

Feature Stores

Plugin Description Packages
feast Feast feature store feast

Data Validators

Plugin Description Packages
great_expectations Great Expectations validation great_expectations
pandera Pandera DataFrame validation pandera

Alerters

Plugin Description Packages
slack Slack notifications slack-sdk
discord Discord webhooks discord-webhook
pagerduty PagerDuty incidents pdpyras

Model Registries

Plugin Description Packages
vertex_model_registry Vertex AI Model Registry google-cloud-aiplatform
sagemaker_model_registry SageMaker Model Registry boto3, sagemaker

Model Deployers

Plugin Description Packages
vertex_endpoint Vertex AI Endpoints google-cloud-aiplatform
sagemaker_endpoint SageMaker Endpoints boto3

Plugin Usage Examples

MLflow Experiment Tracking

from flowyml.plugins import install, get_plugin

# Install MLflow (one-time)
install("mlflow")

# Create tracker
tracker = get_plugin("mlflow",
    tracking_uri="http://localhost:5000",
    experiment_name="my_experiments"
)

# Track an experiment
tracker.start_run("training_v1")
tracker.log_params({
    "model_type": "random_forest",
    "n_estimators": 100,
    "max_depth": 10,
})

# Log metrics during training
for epoch in range(10):
    tracker.log_metrics({
        "train_loss": 0.5 - (epoch * 0.04),
        "val_accuracy": 0.7 + (epoch * 0.02),
    }, step=epoch)

# Log model
tracker.log_model(model, "models/classifier", model_type="sklearn")

tracker.end_run()

S3 Artifact Storage

from flowyml.plugins import install, get_plugin

# Install S3 plugin (one-time)
install("s3")

# Create store
store = get_plugin("s3",
    bucket="my-ml-artifacts",
    prefix="experiments/run_001/",
    region="us-east-1"
)

# Save artifacts
store.save({"accuracy": 0.95, "f1": 0.92}, "metrics.json")
store.save(model, "model.pkl")
store.save_file("./results/report.html", "reports/report.html")

# Load artifacts
metrics = store.load("metrics.json")
model = store.load("model.pkl")

# List artifacts
artifacts = store.list()  # Returns all artifacts in prefix

Using Multiple Plugins Together

from flowyml.plugins import get_plugin

# Get plugins
tracker = get_plugin("mlflow", tracking_uri="http://localhost:5000")
store = get_plugin("s3", bucket="my-artifacts")

# Run experiment with tracking and storage
tracker.start_run("experiment_001")

# Train model...
tracker.log_params(model_params)
tracker.log_metrics(evaluation_results)

# Save to S3
model_uri = store.save(model, "models/latest.pkl")
tracker.set_tag("model_uri", model_uri)

tracker.end_run()

CLI Commands

# List all available plugins
flowyml plugin list

# List only installed plugins
flowyml plugin list --installed

# Filter by type
flowyml plugin list --type experiment_tracker

# Install a plugin
flowyml plugin install mlflow
flowyml plugin install s3

# Upgrade a plugin
flowyml plugin install mlflow --upgrade

# Show plugin details
flowyml plugin info mlflow

# Uninstall a plugin
flowyml plugin uninstall mlflow

# Install from git (community plugins)
flowyml plugin install-git https://github.com/user/flowyml-custom-plugin.git

Creating Custom Plugins

You can create your own plugins by extending the base classes:

from flowyml.plugins.base import ExperimentTracker, PluginMetadata, PluginType

class MyCustomTracker(ExperimentTracker):
    """My custom experiment tracker."""

    METADATA = PluginMetadata(
        name="my_tracker",
        description="My custom tracking solution",
        plugin_type=PluginType.EXPERIMENT_TRACKER,
        packages=["my-tracking-lib>=1.0"],
    )

    def __init__(self, api_key: str, **kwargs):
        super().__init__(**kwargs)
        self._api_key = api_key

    def start_run(self, run_name: str, experiment_name: str = None, tags: dict = None) -> str:
        # Your implementation
        ...

    def end_run(self, status: str = "FINISHED") -> None:
        # Your implementation
        ...

    def log_params(self, params: dict) -> None:
        # Your implementation
        ...

    def log_metrics(self, metrics: dict, step: int = None) -> None:
        # Your implementation
        ...

Publishing Community Plugins

To make your plugin discoverable, add an entry point in your pyproject.toml:

[project.entry-points."flowyml.plugins"]
my_tracker = "my_package.plugins:MyCustomTracker"

When users install your package, FlowyML will automatically discover it:

pip install my-flowyml-plugin
flowyml plugin list --installed  # Shows your plugin

Need Help?