"""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()