Files
wehub-resource-sync 770d92cb1f
Lint / lint (push) Has been cancelled
Build Docs / Deploy Docs (push) Has been cancelled
Windows CI / Windows (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:23:58 +08:00

151 lines
5.1 KiB
Python

import json
import os
import tempfile
from pathlib import Path
import pytest
from mlc_llm.support import logging
from mlc_llm.support.auto_weight import detect_weight
logging.enable_logging()
# test category "unittest"
pytestmark = [pytest.mark.unittest]
def _create_json_file(json_path, data):
with open(json_path, "w", encoding="utf-8") as i_f:
json.dump(data, i_f)
@pytest.mark.parametrize(
"weight_format, index_filename, result",
[
("huggingface-torch", "pytorch_model.bin.index.json", "huggingface-torch"),
(
"huggingface-safetensor",
"model.safetensors.index.json",
"huggingface-safetensor",
),
("auto", "pytorch_model.bin.index.json", "huggingface-torch"),
("auto", "model.safetensors.index.json", "huggingface-safetensor"),
],
)
def test_detect_weight(weight_format, index_filename, result):
with tempfile.TemporaryDirectory() as tmpdir:
base_path = Path(tmpdir)
if index_filename is not None:
weight_index_file = base_path / index_filename
_create_json_file(weight_index_file, {})
assert detect_weight(base_path, None, weight_format) == (
weight_index_file,
result,
)
@pytest.mark.parametrize(
"weight_format, index_filename, result",
[
("huggingface-torch", "pytorch_model.bin.index.json", "huggingface-torch"),
(
"huggingface-safetensor",
"model.safetensors.index.json",
"huggingface-safetensor",
),
("auto", "pytorch_model.bin.index.json", "huggingface-torch"),
("auto", "model.safetensors.index.json", "huggingface-safetensor"),
],
)
def test_detect_weight_in_config_json(weight_format, index_filename, result):
with (
tempfile.TemporaryDirectory() as config_dir,
tempfile.TemporaryDirectory() as weight_dir,
):
config_path = Path(config_dir)
weight_path = Path(weight_dir)
config_json_path = config_path / "config.json"
_create_json_file(config_json_path, {"weight_path": weight_dir})
if index_filename is not None:
weight_index_file = weight_path / index_filename
_create_json_file(weight_index_file, {})
assert detect_weight(None, config_json_path, weight_format) == (
weight_index_file,
result,
)
@pytest.mark.parametrize(
"weight_format, index_filename, result",
[
("huggingface-torch", "pytorch_model.bin.index.json", "huggingface-torch"),
(
"huggingface-safetensor",
"model.safetensors.index.json",
"huggingface-safetensor",
),
("auto", "pytorch_model.bin.index.json", "huggingface-torch"),
("auto", "model.safetensors.index.json", "huggingface-safetensor"),
],
)
def test_detect_weight_same_dir_config_json(weight_format, index_filename, result):
with tempfile.TemporaryDirectory() as tmpdir:
base_path = Path(tmpdir)
config_json_path = base_path / "config.json"
_create_json_file(config_json_path, {})
if index_filename is not None:
weight_index_file = Path(os.path.join(tmpdir, index_filename))
_create_json_file(weight_index_file, {})
assert detect_weight(None, config_json_path, weight_format) == (
weight_index_file,
result,
)
def test_find_weight_fail():
with tempfile.TemporaryDirectory() as tmpdir:
base_path = Path(tmpdir)
with pytest.raises(ValueError):
detect_weight(Path("do/not/exist"), base_path, "awq")
with pytest.raises(AssertionError):
detect_weight(None, Path("do/not/exist"), "awq")
if __name__ == "__main__":
test_detect_weight("huggingface-torch", "pytorch_model.bin.index.json", "huggingface-torch")
test_detect_weight(
"huggingface-safetensor",
"model.safetensors.index.json",
"huggingface-safetensor",
)
test_detect_weight("auto", "pytorch_model.bin.index.json", "huggingface-torch")
test_detect_weight("auto", "model.safetensors.index.json", "huggingface-safetensor")
test_detect_weight_in_config_json(
"huggingface-torch", "pytorch_model.bin.index.json", "huggingface-torch"
)
test_detect_weight_in_config_json(
"huggingface-safetensor",
"model.safetensors.index.json",
"huggingface-safetensor",
)
test_detect_weight_in_config_json("auto", "pytorch_model.bin.index.json", "huggingface-torch")
test_detect_weight_in_config_json(
"auto", "model.safetensors.index.json", "huggingface-safetensor"
)
test_detect_weight_same_dir_config_json(
"huggingface-torch", "pytorch_model.bin.index.json", "huggingface-torch"
)
test_detect_weight_same_dir_config_json(
"huggingface-safetensor",
"model.safetensors.index.json",
"huggingface-safetensor",
)
test_detect_weight_same_dir_config_json(
"auto", "pytorch_model.bin.index.json", "huggingface-torch"
)
test_detect_weight_same_dir_config_json(
"auto", "model.safetensors.index.json", "huggingface-safetensor"
)
test_find_weight_fail()