From dda6a1db6348384133a9d4fa154384db0991cc8b Mon Sep 17 00:00:00 2001 From: Daniel Han Date: Fri, 17 Jul 2026 13:08:53 +0000 Subject: [PATCH] Surface HiDream I1 in the image model catalog One catalog group with the three official bf16 pipelines (Full, plus the Dev and Fast distillations as labeled artifacts) at their ~63 GB resident size, so auto-routing keeps this a datacenter-GPU pick. city96's GGUF is deliberately not wired: the GGUF path would need the same Llama TE4 assembly for very small demand. Images-page defaults mirror the backend table with the variant keys ahead of the generic hidream key. --- .../model-selector/model-catalog.check.ts | 16 +++++++++++++ .../model-selector/model-catalog.ts | 23 +++++++++++++++++++ .../src/features/images/images-page.tsx | 5 ++++ 3 files changed, 44 insertions(+) diff --git a/studio/frontend/src/components/assistant-ui/model-selector/model-catalog.check.ts b/studio/frontend/src/components/assistant-ui/model-selector/model-catalog.check.ts index 4c98115703..71e6586b7e 100644 --- a/studio/frontend/src/components/assistant-ui/model-selector/model-catalog.check.ts +++ b/studio/frontend/src/components/assistant-ui/model-selector/model-catalog.check.ts @@ -399,6 +399,22 @@ assert.equal( "bf16", ); assert.equal(groupForRepoId("QuantStack/HunyuanImage-2.1-GGUF", IMAGE_CATALOG), hyimage); +// HiDream I1: all three variants group together; a datacenter GPU auto-routes to the +// Full bf16 (catalog order wins among equal sizes), and the group is hidden by the fit +// filter on a 24 GB card (no GGUF artifact, 63 GB everywhere). +const hidream = groupForRepoId("HiDream-ai/HiDream-I1-Full", IMAGE_CATALOG); +assert.ok(hidream); +assert.equal(groupForRepoId("HiDream-ai/HiDream-I1-Dev", IMAGE_CATALOG), hidream); +assert.equal(groupForRepoId("HiDream-ai/HiDream-I1-Fast", IMAGE_CATALOG), hidream); +assert.equal( + pickDefaultArtifact(hidream, { gpuGb: 141, systemRamGb: 128, isDownloaded: notDownloaded }) + .repoId, + "HiDream-ai/HiDream-I1-Full", +); +assert.equal( + catalogGroupFitsDevice(hidream, { gpuGb: 24, systemRamGb: 32 }, notDownloaded), + false, +); // FLUX.1-schnell is Apache-2.0 (not gated): its BF16 IS auto-routed on a GPU that fits it. const fluxSchnellRoute = groupForRepoId("unsloth/FLUX.1-schnell", IMAGE_CATALOG); assert.ok(fluxSchnellRoute); diff --git a/studio/frontend/src/components/assistant-ui/model-selector/model-catalog.ts b/studio/frontend/src/components/assistant-ui/model-selector/model-catalog.ts index 5374a07678..0c568bc345 100644 --- a/studio/frontend/src/components/assistant-ui/model-selector/model-catalog.ts +++ b/studio/frontend/src/components/assistant-ui/model-selector/model-catalog.ts @@ -276,6 +276,29 @@ export const IMAGE_CATALOG: CatalogGroup[] = [ gguf("QuantStack/HunyuanImage-2.1-GGUF"), ], }, + { + // 17B MoE DiT + four text encoders. The repos are open (MIT weights) but ship no + // Llama text_encoder_4; the backend assembles it from the open unsloth mirror at + // load time, adding ~16 GB: ~63 GB bf16-resident total, so this stays a + // datacenter-GPU pick. Full is the undistilled base; Dev and Fast are its + // guidance-free distillations with their own step defaults. city96's GGUF is not + // wired: the GGUF path would need the same TE4 assembly for tiny demand. + canonicalId: "HiDream-ai/HiDream-I1-Full", + displayName: "HiDream I1", + description: "Text-to-image", + scope: "image", + artifacts: [ + bf16Pipeline("HiDream-ai/HiDream-I1-Full", 63), + bf16Pipeline("HiDream-ai/HiDream-I1-Dev", 63, { + label: "BF16 - Dev (distilled)", + keywords: ["bf16", "dev", "distilled"], + }), + bf16Pipeline("HiDream-ai/HiDream-I1-Fast", 63, { + label: "BF16 - Fast (distilled)", + keywords: ["bf16", "fast", "distilled"], + }), + ], + }, { // No bf16 repo exists for Ideogram 4: -fp8 stores its two DiTs as raw // float8 (~46 GB resident after the bf16 cast); -nf4-diffusers is the diff --git a/studio/frontend/src/features/images/images-page.tsx b/studio/frontend/src/features/images/images-page.tsx index ee2df72ea7..9ab6c3f74c 100644 --- a/studio/frontend/src/features/images/images-page.tsx +++ b/studio/frontend/src/features/images/images-page.tsx @@ -173,6 +173,11 @@ const MODEL_DEFAULTS: Array<{ match: string; steps: number; guidance: number }> // HunyuanImage 2.1: 50 steps; the guidance value feeds distilled_guidance_scale // (default 3.25), real CFG runs inside the repo's guider components. { match: "hunyuanimage", steps: 50, guidance: 3.25 }, + // HiDream-I1: Full runs 50 steps at guidance 5; the Dev/Fast distillations are + // guidance-free. Specific keys before the generic "hidream" (Full + fallback). + { match: "hidream-i1-dev", steps: 28, guidance: 0 }, + { match: "hidream-i1-fast", steps: 16, guidance: 0 }, + { match: "hidream", steps: 50, guidance: 5 }, // SDXL: Turbo is distilled (few steps, no CFG); base/full SDXL wants ~30 steps and // real CFG (~7). "sdxl-turbo" must precede the generic "sdxl" substring match. { match: "sdxl-turbo", steps: 3, guidance: 0 },