Python · 1439 bytes Raw Blame History
1 """v3 → v4 migrator: additive `training.adapters` block (identity)."""
2
3 from __future__ import annotations
4
5 from typing import Any
6
7 from dlm.doc.migrations.v3 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_v3_cpt_block_preserved(self) -> None:
21 raw: dict[str, Any] = {
22 "training": {
23 "cpt": {"schedule": "dapt", "embed_warmup_steps": 100},
24 },
25 }
26 out = migrate(raw)
27 assert out == raw
28
29 def test_v3_preference_block_preserved(self) -> None:
30 raw: dict[str, Any] = {
31 "training": {
32 "preference": {
33 "method": "orpo",
34 "hyperparams": {"alpha": 0.2},
35 },
36 },
37 }
38 out = migrate(raw)
39 assert out == raw
40
41
42 class TestValidatesAsV4:
43 def test_migrated_doc_validates_without_adapters_block(self) -> None:
44 raw: dict[str, Any] = {
45 "dlm_id": VALID_ULID,
46 "base_model": "smollm2-135m",
47 "dlm_version": 3,
48 }
49 out = migrate(raw)
50 out["dlm_version"] = 4
51 fm = DlmFrontmatter.model_validate(out)
52 assert fm.training.adapters is None