Python · 1731 bytes Raw Blame History
1 """v4 → v5 migrator: additive `training.precision` override (identity)."""
2
3 from __future__ import annotations
4
5 from typing import Any
6
7 from dlm.doc.migrations.v4 import migrate
8 from dlm.doc.schema import DlmFrontmatter
9
10 VALID_ULID = "01HZ4X7TGZM3J1A2B3C4D5E6F7"
11
12
13 class TestIdentity:
14 def test_empty_passthrough(self) -> None:
15 raw: dict[str, Any] = {}
16 out = migrate(raw)
17 assert out == raw
18 assert out is not raw
19
20 def test_v4_training_block_preserved(self) -> None:
21 raw: dict[str, Any] = {
22 "training": {
23 "lora_r": 16,
24 "adapters": {
25 "knowledge": {"adapter": "lora", "lora_r": 8},
26 },
27 },
28 }
29 out = migrate(raw)
30 assert out == raw
31
32
33 class TestValidatesAsV5:
34 def test_migrated_doc_validates_without_precision(self) -> None:
35 # A v4 doc with no precision override parses as v5 unchanged;
36 # precision defaults to None (let the planner pick).
37 raw: dict[str, Any] = {
38 "dlm_id": VALID_ULID,
39 "base_model": "smollm2-135m",
40 "dlm_version": 4,
41 }
42 out = migrate(raw)
43 out["dlm_version"] = 5
44 fm = DlmFrontmatter.model_validate(out)
45 assert fm.training.precision is None
46
47 def test_migrated_doc_accepts_precision_override(self) -> None:
48 raw: dict[str, Any] = {
49 "dlm_id": VALID_ULID,
50 "base_model": "smollm2-135m",
51 "dlm_version": 4,
52 "training": {"precision": "fp16"},
53 }
54 out = migrate(raw)
55 out["dlm_version"] = 5
56 fm = DlmFrontmatter.model_validate(out)
57 assert fm.training.precision == "fp16"