From 9dc4f786bdc2f486dc371848a7d00e77a32cfbe5 Mon Sep 17 00:00:00 2001 From: ciaranbor <81697641+ciaranbor@users.noreply.github.com> Date: Sat, 7 Feb 2026 00:08:57 +0000 Subject: [PATCH] Ciaran/image model listing (#1417) ## Motivation Image models (FLUX, Qwen Image) had no family grouping or quantization metadata in the dashboard ## Changes - Added family, quantization, base_model, and capabilities fields to all 18 image model TOML cards (FLUX.1 variants + Qwen Image variants) - Added FLUX and Qwen Image SVG logos to FamilyLogos.svelte - Added "flux" and "qwen-image" families to the sidebar and family sort order - Added "Image Gen" and "Image Edit" capability filters in ModelFilterPopover.svelte - Added image edit icon/badge to ModelPickerGroup.svelte - Made the model category sidebar scrollable to accommodate the new entries - Hidden scrollbars on model list panels ## Why It Works Reuses the existing family/quantization grouping infrastructure that LLMs already use, extending it to image models with appropriate metadata and icons ## Test Plan ### Manual Testing Verified image models behave like text models in the model list dialog --------- Co-authored-by: Alex Cheema <41707476+AlexCheema@users.noreply.github.com> --- .../src/lib/components/FamilyLogos.svelte | 12 ++++++ .../src/lib/components/FamilySidebar.svelte | 4 +- .../lib/components/ModelFilterPopover.svelte | 41 +++++++++++++++++++ .../lib/components/ModelPickerGroup.svelte | 37 ++++++++++++++++- .../lib/components/ModelPickerModal.svelte | 6 ++- .../exolabs--FLUX.1-Kontext-dev-4bit.toml | 4 ++ .../exolabs--FLUX.1-Kontext-dev-8bit.toml | 4 ++ .../exolabs--FLUX.1-Kontext-dev.toml | 4 ++ .../exolabs--FLUX.1-Krea-dev-4bit.toml | 4 ++ .../exolabs--FLUX.1-Krea-dev-8bit.toml | 4 ++ .../exolabs--FLUX.1-Krea-dev.toml | 4 ++ .../exolabs--FLUX.1-dev-4bit.toml | 4 ++ .../exolabs--FLUX.1-dev-8bit.toml | 4 ++ .../exolabs--FLUX.1-dev.toml | 4 ++ .../exolabs--FLUX.1-schnell-4bit.toml | 4 ++ .../exolabs--FLUX.1-schnell-8bit.toml | 4 ++ .../exolabs--FLUX.1-schnell.toml | 4 ++ .../exolabs--Qwen-Image-4bit.toml | 4 ++ .../exolabs--Qwen-Image-8bit.toml | 4 ++ .../exolabs--Qwen-Image-Edit-2509-4bit.toml | 4 ++ .../exolabs--Qwen-Image-Edit-2509-8bit.toml | 4 ++ .../exolabs--Qwen-Image-Edit-2509.toml | 4 ++ .../exolabs--Qwen-Image.toml | 4 ++ 23 files changed, 167 insertions(+), 5 deletions(-) diff --git a/dashboard/src/lib/components/FamilyLogos.svelte b/dashboard/src/lib/components/FamilyLogos.svelte index 8e2919fe..e4bd0458 100644 --- a/dashboard/src/lib/components/FamilyLogos.svelte +++ b/dashboard/src/lib/components/FamilyLogos.svelte @@ -58,6 +58,18 @@ d="M17.962 1.844h-4.326l-3.425 7.81H5.369V1.878H1.5V22h3.87v-8.477h6.824a3.025 3.025 0 002.743-1.75V22h3.87v-8.477a3.87 3.87 0 00-3.588-3.86v-.01h-2.125a3.94 3.94 0 002.323-2.12l2.545-5.689z" /> +{:else if family === "flux"} + + + +{:else if family === "qwen-image"} + + + {:else if family === "huggingface"}
diff --git a/dashboard/src/lib/components/ModelPickerGroup.svelte b/dashboard/src/lib/components/ModelPickerGroup.svelte index 86155ea5..cb4d7536 100644 --- a/dashboard/src/lib/components/ModelPickerGroup.svelte +++ b/dashboard/src/lib/components/ModelPickerGroup.svelte @@ -200,9 +200,42 @@ stroke-width="1.5" title="Supports image generation" > - + - + + + {:else if cap === "image_edit"} + + + {/if} {/each} diff --git a/dashboard/src/lib/components/ModelPickerModal.svelte b/dashboard/src/lib/components/ModelPickerModal.svelte index 562f1b81..f32ce002 100644 --- a/dashboard/src/lib/components/ModelPickerModal.svelte +++ b/dashboard/src/lib/components/ModelPickerModal.svelte @@ -363,6 +363,8 @@ "deepseek", "gpt-oss", "llama", + "flux", + "qwen-image", ]; return Array.from(families).sort((a, b) => { const aIdx = familyOrder.indexOf(a); @@ -606,7 +608,7 @@ /> -
+
{#if selectedFamily === "huggingface"}
@@ -624,7 +626,7 @@
-
+
{#if hfIsLoadingTrending && hfTrendingModels.length === 0}