from scripts.quant.recipes import METHOD_SPECS, method_names, vllm_serve_args


def test_all_seven_methods_present():
    assert method_names() == ["bf16", "fp8", "int8", "awq", "gptq", "bnb8", "bnb4"]


def test_t4_flags():
    assert METHOD_SPECS["fp8"]["t4_deployable"] is False
    assert METHOD_SPECS["awq"]["t4_deployable"] is True
    assert METHOD_SPECS["bnb8"]["t4_deployable"] is True


def test_baseline_serves_base_model():
    args = vllm_serve_args("bf16", model_path="/m/base", base_model="/m/base", port=8001)
    assert "--model" in args and "/m/base" in args
    assert "--quantization" not in args
    assert args[args.index("--port") + 1] == "8001"


def test_fp8_uses_online_quantization_on_base():
    args = vllm_serve_args("fp8", model_path="/m/base", base_model="/m/base", port=8001)
    assert args[args.index("--quantization") + 1] == "fp8"
    assert "/m/base" in args


def test_compressor_serves_built_path_without_quant_flag():
    args = vllm_serve_args("awq", model_path="/m/awq", base_model="/m/base", port=8001)
    assert "/m/awq" in args
    assert "--quantization" not in args  # quant config travels with the compressed checkpoint


def test_bnb_uses_bitsandbytes_flags():
    args = vllm_serve_args("bnb4", model_path="/m/bnb4", base_model="/m/base", port=8001)
    assert args[args.index("--quantization") + 1] == "bitsandbytes"
    assert args[args.index("--load-format") + 1] == "bitsandbytes"
    assert "/m/bnb4" in args
