From 5ef15ee2cefbe73be07b6781530afd246a6fa5f5 Mon Sep 17 00:00:00 2001 From: Aleksander Grygier Date: Tue, 1 Sep 2026 00:21:23 +0200 Subject: [PATCH] ui : merge download options and terminal commands into one panel The quant and draft sidecar buttons become a multiple toggle group (selecting which files to download, not download triggers), and below the panel the terminal llama serve command updates live to reflect the selection, with a download CTA that fires the downloads for the selected entries (main + optional draft sidecar). Adds the shadcn-svelte toggle-group component. Assisted-by: pi --- tools/ui/package-lock.json | 13 +- tools/ui/package.json | 2 +- .../ModelsDiscoverModelDetails.svelte | 36 +-- .../ModelsDiscoverModelDetailsCommands.svelte | 124 -------- ...DiscoverModelDetailsDownloadOptions.svelte | 284 +++++++++++++----- .../components/app/models/discover/index.ts | 7 - .../lib/components/ui/toggle-group/index.ts | 10 + .../ui/toggle-group/toggle-group-item.svelte | 35 +++ .../ui/toggle-group/toggle-group.svelte | 75 +++++ .../ui/src/lib/components/ui/toggle/index.ts | 13 + .../lib/components/ui/toggle/toggle.svelte | 52 ++++ .../ModelsDiscoverModelDetails.stories.svelte | 21 -- 12 files changed, 407 insertions(+), 265 deletions(-) delete mode 100644 tools/ui/src/lib/components/app/models/discover/ModelsDiscoverModelDetailsCommands.svelte create mode 100644 tools/ui/src/lib/components/ui/toggle-group/index.ts create mode 100644 tools/ui/src/lib/components/ui/toggle-group/toggle-group-item.svelte create mode 100644 tools/ui/src/lib/components/ui/toggle-group/toggle-group.svelte create mode 100644 tools/ui/src/lib/components/ui/toggle/index.ts create mode 100644 tools/ui/src/lib/components/ui/toggle/toggle.svelte diff --git a/tools/ui/package-lock.json b/tools/ui/package-lock.json index f9b793b29f..a6667cb33c 100644 --- a/tools/ui/package-lock.json +++ b/tools/ui/package-lock.json @@ -71,7 +71,7 @@ "svelte-check": "4.6.0", "svelte-sonner": "1.1.1", "tailwind-merge": "3.6.0", - "tailwind-variants": "3.2.2", + "tailwind-variants": "^3.3.1", "tailwindcss": "4.3.0", "tw-animate-css": "1.4.0", "typescript": "5.9.3", @@ -16048,13 +16048,13 @@ } }, "node_modules/tailwind-variants": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-3.2.2.tgz", - "integrity": "sha512-Mi4kHeMTLvKlM98XPnK+7HoBPmf4gygdFmqQPaDivc3DpYS6aIY6KiG/PgThrGvii5YZJqRsPz0aPyhoFzmZgg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-3.3.1.tgz", + "integrity": "sha512-4pAvwUtM4HKBiRZftncAbpn6V9Hhwoa5Fl7O2u5zbp7Z5Cvu+/o/6+176WY3WCEES209543quG8zFIcXCsc5Jw==", "dev": true, "license": "MIT", "engines": { - "node": ">=16.x", + "node": ">=16.9.x", "pnpm": ">=7.x" }, "peerDependencies": { @@ -16064,6 +16064,9 @@ "peerDependenciesMeta": { "tailwind-merge": { "optional": true + }, + "tailwindcss": { + "optional": true } } }, diff --git a/tools/ui/package.json b/tools/ui/package.json index 3c4f24a755..f44287af33 100644 --- a/tools/ui/package.json +++ b/tools/ui/package.json @@ -91,7 +91,7 @@ "svelte-check": "4.6.0", "svelte-sonner": "1.1.1", "tailwind-merge": "3.6.0", - "tailwind-variants": "3.2.2", + "tailwind-variants": "^3.3.1", "tailwindcss": "4.3.0", "tw-animate-css": "1.4.0", "typescript": "5.9.3", diff --git a/tools/ui/src/lib/components/app/models/discover/ModelsDiscoverModelDetails.svelte b/tools/ui/src/lib/components/app/models/discover/ModelsDiscoverModelDetails.svelte index 6e3d8370d4..27834dc17d 100644 --- a/tools/ui/src/lib/components/app/models/discover/ModelsDiscoverModelDetails.svelte +++ b/tools/ui/src/lib/components/app/models/discover/ModelsDiscoverModelDetails.svelte @@ -1,13 +1,12 @@ - -
-
- Quant - - - - {#if sidecars.length} - Draft - - - {/if} -
- - {#each boxes as box, i (box.title)} -
-
- - - {box.title} -
- -
- {box.command} - - -
-
- {/each} -
diff --git a/tools/ui/src/lib/components/app/models/discover/ModelsDiscoverModelDetailsDownloadOptions.svelte b/tools/ui/src/lib/components/app/models/discover/ModelsDiscoverModelDetailsDownloadOptions.svelte index 2f0caf5a66..0a87622461 100644 --- a/tools/ui/src/lib/components/app/models/discover/ModelsDiscoverModelDetailsDownloadOptions.svelte +++ b/tools/ui/src/lib/components/app/models/discover/ModelsDiscoverModelDetailsDownloadOptions.svelte @@ -1,14 +1,14 @@ {#if bitDepthRows.length} -
-
+
+

Downloadable options

+ + {#if selectedPaths.length} + {selected.length} selected + {/if}
-
+ {#each bitDepthRows as row (row.bitDepth)} -
+
{#if row.bitDepth === 99} Other @@ -113,58 +227,55 @@ : isDownloaded ? `Already downloaded: ${file.path}` : isFailed - ? `Last attempt failed: ${file.path}. Click to retry.` + ? `Last attempt failed: ${file.path}` : `Download ${file.path} (requires ~${memoryGb} GB of memory)`} - { - pendingDownload = { - filePath: file.path, - quant: meta?.quant ?? null, - sidecar: meta?.sidecar ?? null, - sizeBytes: file.size ?? null - }; - }} - type="button" - > - {#if isFailed && !isDownloading && !isDownloaded} - - Failed - - {/if} - - {#if meta?.sidecar && !isAuxSidecar(meta.sidecar)} - - {meta.sidecar} - - {/if} - - {label} + - - - - - {#if isDownloading && progress && progress.totalBytes > 0} - {Math.round((progress.downloadedBytes / progress.totalBytes) * 100)}% - {:else} - {HuggingFaceService.formatFileSize(file.size ?? 0)} + {#if isFailed && !isDownloading && !isDownloaded} + + Failed + {/if} - - {#if isDownloading && progress} - - {/if} + {#if meta?.sidecar && !isAuxSidecar(meta.sidecar)} + + {meta.sidecar} + + {/if} + + {label} + + + + + {#if isDownloading && progress && progress.totalBytes > 0} + {Math.round((progress.downloadedBytes / progress.totalBytes) * 100)}% + {:else} + {HuggingFaceService.formatFileSize(file.size ?? 0)} + {/if} + + + {#if isDownloading && progress} + + {/if} + @@ -175,25 +286,44 @@
{/each} + + + +
+
+ {serveCommand} + + +
+ +
{/if} - -{#if pendingDownload} - pendingDownload !== null, - (v) => { - if (!v) pendingDownload = null; - } - } - filePath={pendingDownload.filePath} - formattedSize={pendingDownload.sizeBytes != null - ? HuggingFaceService.formatFileSize(pendingDownload.sizeBytes) - : undefined} - onClose={() => (pendingDownload = null)} - quant={pendingDownload.quant} - repoId={modelId} - sidecar={pendingDownload.sidecar} - /> -{/if} diff --git a/tools/ui/src/lib/components/app/models/discover/index.ts b/tools/ui/src/lib/components/app/models/discover/index.ts index a37c5b0eda..b64eb67a8e 100644 --- a/tools/ui/src/lib/components/app/models/discover/index.ts +++ b/tools/ui/src/lib/components/app/models/discover/index.ts @@ -84,13 +84,6 @@ export { default as ModelsDiscoverChatTemplateDialog } from './ModelsDiscoverCha */ export { default as ModelsDiscoverModelDetailsReadme } from './ModelsDiscoverModelDetailsReadme.svelte'; -/** - * **TerminalCommands** - Terminal command block - * - * Shows the `llama serve` / `llama cli` commands for a model with copy buttons. - */ -export { default as ModelsDiscoverModelDetailsCommands } from './ModelsDiscoverModelDetailsCommands.svelte'; - /** * **DialogModelDownload** - Download confirmation / progress dialog * diff --git a/tools/ui/src/lib/components/ui/toggle-group/index.ts b/tools/ui/src/lib/components/ui/toggle-group/index.ts new file mode 100644 index 0000000000..73160fc4c3 --- /dev/null +++ b/tools/ui/src/lib/components/ui/toggle-group/index.ts @@ -0,0 +1,10 @@ +import Root from './toggle-group.svelte'; +import Item from './toggle-group-item.svelte'; + +export { + Root, + Item, + // + Root as ToggleGroup, + Item as ToggleGroupItem +}; diff --git a/tools/ui/src/lib/components/ui/toggle-group/toggle-group-item.svelte b/tools/ui/src/lib/components/ui/toggle-group/toggle-group-item.svelte new file mode 100644 index 0000000000..c7b3e46423 --- /dev/null +++ b/tools/ui/src/lib/components/ui/toggle-group/toggle-group-item.svelte @@ -0,0 +1,35 @@ + + + diff --git a/tools/ui/src/lib/components/ui/toggle-group/toggle-group.svelte b/tools/ui/src/lib/components/ui/toggle-group/toggle-group.svelte new file mode 100644 index 0000000000..26480759e9 --- /dev/null +++ b/tools/ui/src/lib/components/ui/toggle-group/toggle-group.svelte @@ -0,0 +1,75 @@ + + + + + + diff --git a/tools/ui/src/lib/components/ui/toggle/index.ts b/tools/ui/src/lib/components/ui/toggle/index.ts new file mode 100644 index 0000000000..0f18d3be84 --- /dev/null +++ b/tools/ui/src/lib/components/ui/toggle/index.ts @@ -0,0 +1,13 @@ +import Root from './toggle.svelte'; +export { + toggleVariants, + type ToggleSize, + type ToggleVariant, + type ToggleVariants +} from './toggle.svelte'; + +export { + Root, + // + Root as Toggle +}; diff --git a/tools/ui/src/lib/components/ui/toggle/toggle.svelte b/tools/ui/src/lib/components/ui/toggle/toggle.svelte new file mode 100644 index 0000000000..657181165e --- /dev/null +++ b/tools/ui/src/lib/components/ui/toggle/toggle.svelte @@ -0,0 +1,52 @@ + + + + + diff --git a/tools/ui/tests/stories/ModelsDiscoverModelDetails.stories.svelte b/tools/ui/tests/stories/ModelsDiscoverModelDetails.stories.svelte index c228349c47..09e8dc74fb 100644 --- a/tools/ui/tests/stories/ModelsDiscoverModelDetails.stories.svelte +++ b/tools/ui/tests/stories/ModelsDiscoverModelDetails.stories.svelte @@ -3,11 +3,9 @@ import { defineMeta } from '@storybook/addon-svelte-csf'; import ModelsDiscoverChatTemplateDialog from '$lib/components/app/models/discover/ModelsDiscoverChatTemplateDialog.svelte'; import ModelsDiscoverModelDetails from '$lib/components/app/models/discover/ModelsDiscoverModelDetails.svelte'; - import ModelsDiscoverModelDetailsCommands from '$lib/components/app/models/discover/ModelsDiscoverModelDetailsCommands.svelte'; import ModelsDiscoverModelDetailsDownloadOptions from '$lib/components/app/models/discover/ModelsDiscoverModelDetailsDownloadOptions.svelte'; import ModelsDiscoverModelDetailsHeader from '$lib/components/app/models/discover/ModelsDiscoverModelDetailsHeader.svelte'; import ModelsDiscoverModelDetailsReadme from '$lib/components/app/models/discover/ModelsDiscoverModelDetailsReadme.svelte'; - import { ModelDraftSidecar } from '$lib/enums'; import type { HfModelSibling } from '$lib/types'; const { Story } = defineMeta({ @@ -72,25 +70,6 @@
- -
- -
-
- - -
- -
-
-