From ef056852b65e026bba2c0dd9c1f7f1aec4d1cd22 Mon Sep 17 00:00:00 2001 From: Aleksander Grygier Date: Thu, 24 Sep 2026 11:57:02 +0200 Subject: [PATCH] ui : lead each manager section with the recently used models Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash --- .../app/models/ModelsManager/ModelsManager.svelte | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tools/ui/src/lib/components/app/models/ModelsManager/ModelsManager.svelte b/tools/ui/src/lib/components/app/models/ModelsManager/ModelsManager.svelte index f8f68965e7..6f842ee4be 100644 --- a/tools/ui/src/lib/components/app/models/ModelsManager/ModelsManager.svelte +++ b/tools/ui/src/lib/components/app/models/ModelsManager/ModelsManager.svelte @@ -54,10 +54,20 @@ return true; }); }); + // recently used models lead their section, the rest keep the server's order + const rank = new SvelteMap(); + + modelsStore.recentModelIds.forEach((id, index) => rank.set(id, index)); + + const rankOf = (entry: ModelQuantGroup) => + Math.min(...entry.quants.map((quant) => rank.get(quant.id) ?? Number.MAX_SAFE_INTEGER)); + const byRecency = (list: ModelQuantGroup[]) => + rank.size === 0 ? list : [...list].sort((a, b) => rankOf(a) - rankOf(b)); + // one entry per repo, so a model with several quants is a single table row; // loaded models lead the table, then favorites, then one block per provider, // and an entry lands in the first group that claims it - let entries = $derived(groupModelQuants(visible)); + let entries = $derived(byRecency(groupModelQuants(visible))); let groups = $derived.by(() => { // only llama-compat servers report a load state const isLlamaCompat = (entry: ModelQuantGroup) =>