File size: 1,688 Bytes
dd6cefc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""Tests for LoRA merge helper tooling."""

from __future__ import annotations

import json
import tempfile
import unittest
from pathlib import Path

from scripts.merge_lora_adapter import plan_merge, validate_adapter_source


class MergeLoraAdapterTest(unittest.TestCase):
    def test_validate_local_adapter_requires_config_and_weights(self) -> None:
        with tempfile.TemporaryDirectory() as tmp_dir:
            adapter_dir = Path(tmp_dir)
            (adapter_dir / "adapter_config.json").write_text("{}", encoding="utf-8")

            with self.assertRaises(ValueError):
                validate_adapter_source(adapter_dir, base_model="Qwen/Qwen2.5-1.5B-Instruct")

    def test_plan_merge_dry_run_returns_summary_without_loading_model(self) -> None:
        with tempfile.TemporaryDirectory() as tmp_dir:
            adapter_dir = Path(tmp_dir) / "adapter"
            adapter_dir.mkdir()
            (adapter_dir / "adapter_config.json").write_text(
                json.dumps({"base_model_name_or_path": "Qwen/Qwen2.5-1.5B-Instruct"}),
                encoding="utf-8",
            )
            (adapter_dir / "adapter_model.safetensors").write_text("fake", encoding="utf-8")

            summary = plan_merge(
                base_model="Qwen/Qwen2.5-1.5B-Instruct",
                adapter=adapter_dir,
                output=Path(tmp_dir) / "merged",
                dry_run=True,
            )

        self.assertTrue(summary["dry_run"])
        self.assertFalse(summary["merged"])
        self.assertEqual(summary["base_model"], "Qwen/Qwen2.5-1.5B-Instruct")
        self.assertEqual(summary["adapter_type"], "local")


if __name__ == "__main__":
    unittest.main()