Skip to content

webui: point every catalog entry at the package it installs - #428

Open
CryptVenture wants to merge 1 commit into
0xShug0:mainfrom
CryptVenture:pr/catalog-entry-fixes
Open

webui: point every catalog entry at the package it installs#428
CryptVenture wants to merge 1 commit into
0xShug0:mainfrom
CryptVenture:pr/catalog-entry-fixes

Conversation

@CryptVenture

@CryptVenture CryptVenture commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Rebased on current main. The voxcpm1 download_id fixed in #424 is kept as it is.

The problem

65 of the 90 catalog entries do not describe a package that exists:

  • 51 name a download_id that is not a packages[].id in any model_specs/*.json.
  • 14 name a path that is not models/<target_directory> of the package they point at.

This corrects the 60 that can be corrected. The five breeze_tts, cosyvoice3 and chatterbox_turbo entries added recently are left alone: those families have no model_specs/*.json yet, so there is no package id to point them at. They fix themselves when those specs land.

They resolve only through a compatibility shim in catalog.ts that strips precision suffixes and guesses. Where the guess fails, the entry offers no install button at all.

The change

Each entry names the package it already meant, and the directory that package installs into.

  • download_id becomes an exact packages[].id from the entry's own family. A stem (omnivoice, chatterbox) becomes the family's recommended package; a variant (qwen3_tts_1_7b_custom_voice, dots_tts_mf_q8_0) keeps the variant and only has its spelling corrected to the published id.
  • path becomes models/<target_directory> of that package. 40 entries pointed at pre-GGUF directories no package writes (models/chatterboxmodels/Chatterbox-GGUF); several pointed at one .gguf file inside the directory, which only resolves while that exact filename ships.
  • Three entries resolved to safetensors packages the native manager cannot install, so they had no install choice at all; they now use their family's recommended GGUF package.

No entry is added, removed or retasked. Display names, tasks, modes and min_vram_gb are untouched. 60 lines changed, 60 replaced.

Verification

entries whose download_id is not a packages[].id       51 -> 5   (the 5 have no spec yet)
entries whose path is not the package target_directory 14 -> 0
paths targeted by more than one download_id             0
tools/check_loader_catalog_sync.py                      ok, loaders/model_specs/model_manager_v2 in sync

No path is claimed by two packages, so a catalog install leaves one package per directory.

Directory paths load exactly as the file paths they replace — same server, same input, audiosr registered twice:

models/AudioSR-GGUF                          200  ["audio","channels","sample_rate","timing"]
models/AudioSR-GGUF/audiosr-basic-f32.gguf   200  identical

The one entry where this matters most is minimax-h3, which moves from models/MiniMax-H3-Q4-GGUF/dit.gguf to the directory: load_minimax_h3_assets takes either, and the directory is the spec-driven path that reaches the whole component package rather than the DiT alone.

65 of the 90 catalog entries name a download_id that is not a packages[].id, a
path no package installs into, or both: 51 unresolvable ids and 14 paths that
are not the package's target_directory. This corrects the 60 that can be
corrected. They resolve only through a
compatibility shim in catalog.ts that strips precision suffixes and guesses;
where the guess fails the entry offers no install button at all.

Each entry now names the package that entry already meant and the directory
that package installs into:

  - download_id is an exact packages[].id from the entry's own family. Where
    the old id was a stem ("omnivoice", "chatterbox"), it becomes the family's
    recommended package. Where it named a variant ("qwen3_tts_1_7b_custom_
    voice", "dots_tts_mf_q8_0"), the variant is preserved and only the
    spelling is corrected to the published id.
  - path is models/<target_directory> of that package. 40 entries pointed at
    pre-GGUF directories that no package writes ("models/chatterbox" ->
    "models/Chatterbox-GGUF"), and several pointed at a single .gguf file
    inside the directory, which only resolves when that exact filename ships.
  - Three entries resolved to safetensors packages the native manager cannot
    install, so they had no install choice; they now use their family's
    recommended GGUF package.

No entry is added, removed or retasked here, and display names, tasks, modes
and min_vram_gb are untouched. The voxcpm1 download_id fixed in 0xShug0#424 is left
as it is.

The five breeze_tts, cosyvoice3 and chatterbox_turbo entries added since are
left alone: those families have no model_specs/*.json yet, so their package
ids exist nowhere to point at. They are the 5 that remain unresolvable below,
and they resolve themselves once those specs land.

Validation:
  - Entries whose download_id is not a packages[].id, or whose path is not
    that package's target_directory: 65 before, 5 after -- the 5 being the
    new families that have no spec yet.
  - No path is targeted by more than one download_id, so a catalog install
    leaves one package per directory.
  - tools/check_loader_catalog_sync.py reports loaders, model_specs and
    model_manager_v2 in sync.
  - Directory paths load exactly as the file paths they replace. Same server,
    same input, audiosr registered twice:
      models/AudioSR-GGUF                        200
      models/AudioSR-GGUF/audiosr-basic-f32.gguf 200
    identical response fields from both.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@CryptVenture
CryptVenture force-pushed the pr/catalog-entry-fixes branch from 7756a2d to a67483d Compare September 4, 2026 18:32
@CryptVenture

Copy link
Copy Markdown
Contributor Author

Rebased on current main after the Breeze/CosyVoice3/Chatterbox-Turbo catalog additions. No entry is touched by both sides, so nothing needed adjudicating.

Those five new entries are deliberately left alone: breeze_tts, cosyvoice3 and chatterbox_turbo have no model_specs/*.json yet, so there is no packages[].id to point them at. They are the 5 that still do not resolve after this change, and they fix themselves once those specs land. Counts updated in the description: 51 unresolvable download_ids and 14 wrong paths before, 5 and 0 after.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant