Spaces:
Sleeping
Sleeping
File size: 2,098 Bytes
9e00302 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | """
utils/model_versioning.py
SecureLens — Model Version Manager
Tracks and manages different model versions.
"""
import os, json
from datetime import datetime
MODELS_DIR = os.path.join(
os.path.dirname(__file__), "..", "cloud_server", "models")
VERSION_FILE = os.path.join(MODELS_DIR, "model_versions.json")
def register_model(
version: str,
accuracy: float,
notes: str = "",
):
"""Registers a trained model version."""
versions = _load_versions()
versions[version] = {
"version" : version,
"accuracy" : accuracy,
"registered" : datetime.utcnow().isoformat() + "Z",
"notes" : notes,
"files" : [
"best_model.pth",
"feature_weights.json",
"linear_weights.json",
"first_weights.json",
],
"ckks_params" : {
"poly_modulus_degree": 8192,
"global_scale" : "2^40",
"security_bits" : 128,
}
}
_save_versions(versions)
print(f"[Versioning] Registered model v{version} "
f"(accuracy={accuracy}%)")
return versions[version]
def get_current_version():
"""Returns the current active model version."""
versions = _load_versions()
if not versions:
return None
latest = sorted(versions.keys())[-1]
return versions[latest]
def list_versions():
"""Lists all registered model versions."""
return _load_versions()
def _load_versions():
if not os.path.exists(VERSION_FILE):
return {}
with open(VERSION_FILE) as f:
return json.load(f)
def _save_versions(versions):
with open(VERSION_FILE, "w") as f:
json.dump(versions, f, indent=2)
if __name__ == "__main__":
register_model(
version="1.0.0",
accuracy=89.42,
notes="ResNet-18 transfer learning, 20 epochs, "
"128x128 input, CKKS 128-bit"
)
v = get_current_version()
print(f"\nCurrent model: v{v['version']} "
f"({v['accuracy']}% accuracy)")
print("✅ Model versioning working.") |