import pytest
import sys


@pytest.mark.skipif(sys.platform == "win32", reason="EmptyInitOnDevice on CPU not working for Windows.")
@pytest.mark.parametrize("model_size", ["7B", "13B", "30B", "65B"])
def test_config_identical(model_size, lit_llama):
    import torch.nn as nn
    import lit_llama.adapter as llama_adapter
    from lit_llama.adapter_v2 import adapter_v2_linear_with_bias_and_scale
    import lit_llama.model as llama
    from lit_llama.utils import EmptyInitOnDevice

    with EmptyInitOnDevice():
        llama_model = llama.LLaMA.from_name(model_size)
        adapter_model = llama_adapter.LLaMA.from_name(model_size)

        for module in adapter_model.modules():
            if isinstance(module, nn.Linear):
                adapter_v2_linear_with_bias_and_scale(module)

        print(adapter_model.transformer.h[2].attn.c_attn.adapter_bias)
        assert not hasattr(llama_model.transformer.h[2].attn.c_attn, 'adapter_bias')
        assert not hasattr(llama_model.transformer.h[2].attn.c_attn, 'adapter_scale')
        assert hasattr(adapter_model.transformer.h[2].attn.c_attn, 'adapter_bias')
        assert hasattr(adapter_model.transformer.h[2].attn.c_attn, 'adapter_scale')