Registering Models

This example demonstrates semantic versioning for ML models.

Running the Example

cargo run --example model_versioning

Semantic Versioning for ML

Pacha uses semantic versioning adapted for machine learning:

VersionWhen to BumpExample
MAJORArchitecture change (incompatible inputs/outputs)Logistic → Transformer
MINORRetraining with new data (backward compatible)Q2 → Q3 data
PATCHBug fixes, quantization, optimizationINT8 quantization

Version Examples

Initial Release (1.0.0)

let card = ModelCard::builder()
    .description("Initial fraud detector - logistic regression")
    .metrics([("auc", 0.85)])
    .build();

registry.register_model(
    "fraud-detector",
    &ModelVersion::new(1, 0, 0),
    model_weights,
    card,
)?;

Patch Version (1.0.1) - Quantization

registry.register_model(
    "fraud-detector",
    &ModelVersion::new(1, 0, 1),
    quantized_weights,
    card,
)?;

Minor Version (1.1.0) - Retrained

registry.register_model(
    "fraud-detector",
    &ModelVersion::new(1, 1, 0),
    retrained_weights,
    card,
)?;

Major Version (2.0.0) - New Architecture

registry.register_model(
    "fraud-detector",
    &ModelVersion::new(2, 0, 0),
    transformer_weights,
    card,
)?;

Version Comparison

let v1 = ModelVersion::new(1, 0, 0);
let v1_1 = ModelVersion::new(1, 1, 0);
let v2 = ModelVersion::new(2, 0, 0);

assert!(v1 < v1_1);   // Minor version is higher
assert!(v1_1 < v2);   // Major version is higher

Pre-release Versions

let beta = ModelVersion::new(2, 1, 0).with_prerelease("beta.1");
println!("{}", beta);             // "2.1.0-beta.1"
println!("{}", beta.is_stable()); // false