Metadata-Version: 2.4
Name: modelzone-sdk
Version: 0.3.0
Summary: Modelzone SDK – a slim model training and serving toolkit
License-Expression: Apache-2.0
Author: Team Enigma
Author-email: enigma@energinet.dk
Requires-Python: >=3.13
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3.13
Provides-Extra: azureml
Provides-Extra: training
Requires-Dist: azure-ai-ml ; extra == "azureml"
Requires-Dist: azure-identity ; extra == "azureml"
Requires-Dist: deltalake (>=1) ; extra == "azureml"
Requires-Dist: deltalake (>=1) ; extra == "training"
Requires-Dist: mlflow (>=3) ; extra == "azureml"
Requires-Dist: pandas (<3) ; extra == "azureml"
Requires-Dist: pandas (<3) ; extra == "training"
Description-Content-Type: text/markdown

# Modelzone SDK

A slim Python SDK for defining, training, and serving machine-learning models.

## Installation

```bash
pip install modelzone-sdk
```

For local training with Delta Lake data access:

```bash
pip install modelzone-sdk[training]
```

For AzureML experiment tracking:

```bash
pip install modelzone-sdk[azureml]
```

## Quick start

Define a model by subclassing `ModelDefinition` and implementing `train` and `predict`:

```python
from modelzone.core import ModelDefinition, PredictContext, ModelArtifact
from modelzone.training import TrainingContext


class MyModel(ModelDefinition):
    def train(self, ctx: TrainingContext) -> ModelArtifact:
        ctx.print("Training started")

        # … your training logic …
        fitted = train_something(seed=ctx.seed)

        ctx.log_metric("accuracy", 0.95)
        return ModelArtifact(model=fitted, features=["feature_a", "feature_b"])

    def predict(self, ctx: PredictContext):
        df = ctx.db.query("input_table", ctx.time_interval)
        return ctx.model.predict(df[ctx.features])
```

### Local training

```python
from modelzone.training import LocalBackend

backend = LocalBackend(root="./runs")
result = backend.run(MyModel(), seed=42, params={"lr": 0.01})
print(result.run_id)
```

### AzureML training

```python
from modelzone.azureml import AzureMLBackend

backend = AzureMLBackend(
    subscription_id="...",
    resource_group="...",
    workspace_name="...",
    experiment_name="my_experiment",
)
result = backend.run(MyModel(), seed=42)
```

### Loading a trained model for prediction

```python
from modelzone.predict import load_model_artifact

model_artifact = load_model_artifact(".model")
print(model_artifact.features)
```

## CLI

```bash
modelzone train my_model_package            # Local training
modelzone train my_model_package --azureml   # AzureML training
modelzone register my_model_package <run_id>
modelzone fetch my_model_package --output-dir .model
```

## Development

```bash
poetry install --with dev,test
pytest
```

