fix(model): align rename extension detection

This commit is contained in:
Will Miao
2025-11-19 11:20:09 +08:00
parent 963f6b1383
commit 51b5261f40
2 changed files with 43 additions and 1 deletions

View File

@@ -339,7 +339,7 @@ class ModelLifecycleService:
return suffix
basename = os.path.basename(filename)
dot_index = basename.find(".")
dot_index = basename.rfind(".")
if dot_index != -1:
return basename[dot_index:]

View File

@@ -243,6 +243,48 @@ async def test_rename_model_preserves_extension(tmp_path: Path):
assert payload["file_name"] == new_name
@pytest.mark.asyncio
async def test_rename_model_with_dotted_basename(tmp_path: Path):
old_name = "model.v1"
old_extension = ".gguf"
new_name = "renamed-model"
model_path = tmp_path / f"{old_name}{old_extension}"
model_path.write_bytes(b"content")
metadata_path = tmp_path / f"{old_name}.metadata.json"
metadata_payload = {
"file_name": old_name,
"file_path": model_path.as_posix(),
}
metadata_path.write_text(json.dumps(metadata_payload))
async def metadata_loader(path: str):
with open(path, "r", encoding="utf-8") as handle:
return json.load(handle)
scanner = DummyScanner()
metadata_manager = PassthroughMetadataManager()
service = ModelLifecycleService(
scanner=scanner,
metadata_manager=metadata_manager,
metadata_loader=metadata_loader,
)
result = await service.rename_model(
file_path=model_path.as_posix(),
new_file_name=new_name,
)
expected_main = tmp_path / f"{new_name}{old_extension}"
assert expected_main.exists()
assert result["new_file_path"] == expected_main.as_posix()
assert any(p.endswith(f"{new_name}{old_extension}") for p in result["renamed_files"])
saved_metadata = json.loads((tmp_path / f"{new_name}.metadata.json").read_text())
assert saved_metadata["file_name"] == new_name
assert saved_metadata["file_path"].endswith(f"{new_name}{old_extension}")
@pytest.mark.asyncio
async def test_delete_model_removes_gguf_file(tmp_path: Path):
model_path = tmp_path / "model.gguf"