Metadata-Version: 2.4
Name: modelzone-sdk
Version: 0.2.0.dev1
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 == "training"
Requires-Dist: mlflow (>=3) ; extra == "azureml"
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 `Model` and implementing `train` and `predict`:

```python
from modelzone.core import Model, PredictContext, TrainedModel
from modelzone.training import TrainingContext


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

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

        ctx.log_metric("accuracy", 0.95)
        return TrainedModel(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

trained_model = load_model(".model")
print(trained_model.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
```

