fix(downloads): close routing gaps and map CivitAI ModelType.UNet to the checkpoint branch

Cross-checked both baseModel lists against CivitAI's official
baseModelRecords (packages/civitai-shared src/basemodel.constants.ts):

- CHECKPOINT_BASE_MODELS gains SD 2.0/2.1 768, SD 2.1 Unclip, SDXL 0.9 /
  1.0 LCM / Turbo / Distilled, Playground v2 and Stable Cascade
  (unCLIP-style but CheckpointLoader-loaded).
- DIFFUSION_MODEL_BASE_MODELS gains SVD XT, LTXV 2.5, Flux 3 Video,
  Wan Image 2.7, Wan Video 2.7 / 3.0, HiDream-O1, Boogu and the Ming
  Image Design families. API-only (Kling/Sora/Veo/Imagen...), 3D and
  audio baseModels are intentionally skipped.
- Pony V7 exclusion now backed by live-API evidence (model 1901521 is
  AuraFlow-architecture shipping .gguf variants).

CivitAI has no model-level diffusion ModelType: DiT models are uploaded
as "Checkpoint" or "UNet", with only uploader-chosen file types to tell
them apart. model.type "unet" previously fell through type derivation
and failed with 'not supported for download'; it now goes through the
checkpoint branch in both the download manager and the download routing
endpoint, so the standard chain (file type -> baseModel lists -> unknown
default) applies.
This commit is contained in:
Will Miao
2026-10-02 10:34:59 +08:00
parent 3aa32120df
commit 7b2a108596
6 changed files with 122 additions and 5 deletions
+22 -1
View File
@@ -20,6 +20,15 @@ def test_base_model_fallback_routes_to_unet():
)
@pytest.mark.parametrize("base_model", ["SVD XT", "Boogu", "Wan Video 3.0", "Flux 3 Video"])
def test_new_diffusion_families_route_to_unet(base_model):
"""DiT families from CivitAI's official baseModel list that plain
"Model"-typed files must not strand on the checkpoint roots."""
assert is_diffusion_model_download(
"checkpoint", file_types=["Model"], base_model=base_model
)
def test_minimax_h3_routes_to_unet():
"""CivitAI model 2877206: type "Checkpoint", baseModel "MiniMax H3",
all file entries typed "Model"."""
@@ -28,7 +37,19 @@ def test_minimax_h3_routes_to_unet():
)
@pytest.mark.parametrize("base_model", ["SDXL 1.0", "Illustrious", "SD 1.5", "SD 3.5 Large"])
@pytest.mark.parametrize(
"base_model",
[
"SDXL 1.0",
"Illustrious",
"SD 1.5",
"SD 2.1 768",
"SD 3.5 Large",
"SDXL Turbo",
"Playground v2",
"Stable Cascade",
],
)
def test_known_checkpoint_base_models_stay_on_checkpoint_roots(base_model):
"""CHECKPOINT_BASE_MODELS members never route to unet, even when the
unknown-base-model default is diffusion."""