SGJM / tests /test_mlx_checkpoint.py
adampippert's picture
SGJM 2026.6.5 — code/docs
e51ccda verified
Raw
History Blame Contribute Delete
2.31 kB
from __future__ import annotations
import json
from pathlib import Path
import pytest
mlx = pytest.importorskip("mlx.core")
from sgjm.training.config import TrainingConfig
from sgjm.training.mlx_backend.trainer import train
def _train_and_get_checkpoint(arch: str, tmp_path: Path) -> Path:
cfg = TrainingConfig.smoke()
cfg.arch = arch
cfg.checkpoint_dir = str(tmp_path / arch)
result = train(cfg, "mlx")
assert result.checkpoint_path is not None
return result.checkpoint_path
def test_load_mlx_sgjm_checkpoint(tmp_path):
"""load_mlx_checkpoint correctly reconstructs an SGJM model."""
from sgjm.eval.checkpoint import load_mlx_checkpoint
from sgjm.training.mlx_backend.model import SGJM
ckpt_path = _train_and_get_checkpoint("sgjm", tmp_path)
loaded = load_mlx_checkpoint(ckpt_path)
assert loaded.arch == "sgjm"
assert isinstance(loaded.model, SGJM)
assert loaded.step >= 0
assert loaded.path == ckpt_path
def test_load_mlx_baseline_checkpoint(tmp_path):
"""load_mlx_checkpoint correctly reconstructs a BaselineLM model."""
from sgjm.eval.checkpoint import load_mlx_checkpoint
from sgjm.training.mlx_backend.baseline import BaselineLM
ckpt_path = _train_and_get_checkpoint("baseline", tmp_path)
loaded = load_mlx_checkpoint(ckpt_path)
assert loaded.arch == "baseline"
assert isinstance(loaded.model, BaselineLM)
assert loaded.step >= 0
def test_load_mlx_checkpoint_unknown_arch_raises(tmp_path):
"""load_mlx_checkpoint raises ValueError for unknown arch in meta."""
import mlx.core as mx
from sgjm.eval.checkpoint import load_mlx_checkpoint
from sgjm.training.mlx_backend.model import SGJM
cfg = TrainingConfig.smoke()
cfg.arch = "sgjm"
ckpt_dir = tmp_path / "bad"
ckpt_dir.mkdir()
# write a safetensors with a bad arch in meta
weights_path = ckpt_dir / "final.safetensors"
model = SGJM(cfg.model)
from mlx.utils import tree_flatten
mx.save_safetensors(str(weights_path), dict(tree_flatten(model.parameters())))
meta = {"step": 0, "config": {**cfg.to_dict(), "arch": "unknown_arch"}}
(ckpt_dir / "final.meta.json").write_text(json.dumps(meta))
with pytest.raises(ValueError, match="unknown arch"):
load_mlx_checkpoint(weights_path)