fix: remove FP4 Mistral starter, fix model rename validation, limit Z-Image to Qwen3 4B encoders - #9587
Open
Pfannkuchensack wants to merge 4 commits into
Open
fix: remove FP4 Mistral starter, fix model rename validation, limit Z-Image to Qwen3 4B encoders#9587Pfannkuchensack wants to merge 4 commits into
Pfannkuchensack wants to merge 4 commits into
Conversation
The loader has no FP4 support, so the 12.3 GB download failed with a shape mismatch at the first generation. Also drop FP4 from the recommended encoders in the 40-layer Mistral warning. Closes invoke-ai#9565
… clearing the name The name validator required more than 3 characters while its message says "at least 3". Save was gated on the error count, which could stay stale after clearing and retyping the name; gate it on isValid instead. Adopted from invoke-ai#9419. Closes invoke-ai#9364 Co-authored-by: leepokai <109857817+leepokai@users.noreply.github.com>
Z-Image consumes 2560-wide embeddings, but the encoder picker, the auto-default on model switch and metadata recall all accepted Klein 9B's 8B encoder (4096 wide), which fails at the first denoise step. Narrow all three to qwen3_4b, and add a readiness reason for a slot that still holds an 8B encoder from before this change - the picker no longer shows it, so the slot would otherwise look valid. Closes invoke-ai#9526
Pfannkuchensack
requested review from
JPPhoto,
blessedcoolant,
dunkeroni and
lstein
as code owners
September 13, 2026 21:13
The auto-default on switching to Z-Image dispatched only key, name and base. The reducer parses with zModelIdentifierField, which requires hash and type, so it dropped the payload and the encoder slot stayed empty. Send the full identifier like the VAE and Anima defaults do, and type the reducer's payload as ModelIdentifierField so the compiler catches this shape.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Three small, independent fixes, one commit each.
1. Remove the FLUX.2 [dev] FP4 Mistral encoder starter model (#9565)
The Mistral loader has no FP4 support. Users downloaded 12.3 GB and got a shape mismatch at the first generation. This removes the starter entry and drops FP4 from the recommended encoders in the loader's 40-layer Mistral warning. The GGUF and FP8/BF16 variants are unaffected.
2. Model rename: accept 3-character names and re-enable Save (#9364)
Adopted from #9419 by @leepokai, who closed it because they could not follow up. The change is unmodified and they are credited as co-author.
length > 3while its message says "at least 3 characters". It now uses>= 3.formState.errors, which could stay stale after clearing and retyping the name. It is now gated on!formState.isValid, the same patternSystemPromptFormuses.3. Only offer Qwen3 4B encoders for Z-Image (#9526)
Z-Image consumes 2560-wide embeddings. Three places also accepted Klein 9B's 8B encoder (4096 wide), which fails at the first denoise step:
useQwen3EncoderModels)selectQwen3EncoderModels)isQwen3EncoderModelConfig)All three now use a new
isZImageQwen3EncoderModelConfigguard (variant === 'qwen3_4b'), with a matching hook and selector.variantis required on all Qwen3 encoder configs, so no installed encoder is hidden by mistake.Users who already have an 8B encoder in the Z-Image slot would see an empty picker while generation still fails. For them, readiness now reports "Selected Qwen3 Encoder is incompatible with Z-Image". The slot's config is resolved in the caller, following the existing
wanWiredConfigspattern. The now unusedselectQwen3EncoderModelsexport is removed. The new i18n key is added toen.jsononly.Related Issues / Discussions
Closes #9565
Closes #9364
Closes #9526
Supersedes #9419
QA Instructions
Automated (run locally):
tsc --noEmit,eslint,prettier --check,knip: cleanvitestonreadiness.test.ts,parsing.test.tsx,modelSelected.test.ts: 226/226 passing. New tests:ZImageQwen3EncoderModelrejects an 8B encoderruff checkandruff format --checkon the two Python files: clean. The starter list imports with no dangling reference.I have not tested these changes manually in the running app. Suggested manual checks:
Merge Plan
No special considerations. The redux state shape is unchanged (no slice or migration changes). A slot that still holds an 8B encoder keeps its value and is only flagged by readiness.
Checklist
What's Newcopy (if doing a release after this PR)