From 385fd528a062c25261435d8cfaf6fa6f507022be Mon Sep 17 00:00:00 2001 From: Luis A Lastras Date: Fri, 15 May 2026 15:00:04 -0400 Subject: [PATCH 1/3] Add library quick-add buttons to adapter composer Add toggle buttons for RAG, Core, and Guardian libraries in the cart panel so users can add/remove an entire library in one click. Buttons show three visual states: ghost (none selected), outlined with count (partial), and filled with checkmark (fully added). --- docs/adapter_catalog.html | 105 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) diff --git a/docs/adapter_catalog.html b/docs/adapter_catalog.html index 6404cfd..c658150 100644 --- a/docs/adapter_catalog.html +++ b/docs/adapter_catalog.html @@ -202,6 +202,53 @@ } .copy-btn:hover { background: #0353e9; } .copy-btn.copied { background: #24a148; } + + /* ── Library quick-add buttons ── */ + .cart-library-row { + display: flex; + gap: 0.5rem; + padding: 0.75rem 1.25rem; + border-bottom: 1px solid #e0e0e0; + } + + .lib-btn { + font-family: inherit; + font-size: 0.8rem; + font-weight: 500; + padding: 0.35rem 0.75rem; + border-radius: 0.25rem; + cursor: pointer; + transition: background 0.15s, border-color 0.15s, color 0.15s; + } + + .lib-btn--none { + background: #fff; + border: 1px solid #8d8d8d; + color: #525252; + } + .lib-btn--none:hover { + background: #e8e8e8; + border-color: #525252; + } + + .lib-btn--partial { + background: #fff; + border: 1px solid #0f62fe; + color: #0f62fe; + } + .lib-btn--partial:hover { + background: #edf5ff; + } + + .lib-btn--full { + background: #0f62fe; + border: 1px solid #0f62fe; + color: #fff; + } + .lib-btn--full:hover { + background: #0353e9; + border-color: #0353e9; + } @@ -249,6 +296,7 @@

Granite Switch — Adapter Composer

+
@@ -694,6 +742,61 @@

Granite Switch — Adapter Composer

}); } +// ── Library quick-add helpers ───────────────────────────────────────────────── + +function getLibraryAdapterIds(library) { + return Object.keys(ADAPTERS).filter(id => ADAPTERS[id].library === library); +} + +function getLibraryState(library) { + const ids = getLibraryAdapterIds(library); + const inCart = ids.filter(id => cart.has(id)).length; + if (inCart === 0) return 'none'; + if (inCart === ids.length) return 'full'; + return 'partial'; +} + +function toggleLibrary(library) { + const ids = getLibraryAdapterIds(library); + const state = getLibraryState(library); + if (state === 'full') { + ids.forEach(id => cart.delete(id)); + } else { + ids.forEach(id => cart.add(id)); + } + // Update the current panel's add button if it was affected + const btn = document.getElementById('add-btn'); + if (btn && ADAPTERS[currentId]) { + const inCart = cart.has(currentId); + btn.setAttribute('kind', inCart ? 'primary' : 'tertiary'); + btn.textContent = inCart ? '✓ Added' : '+ Add to composition'; + } + renderCart(); +} + +function renderLibraryButtons() { + const container = document.getElementById('cart-library-buttons'); + if (!container) return; + + container.innerHTML = LIBRARY_ORDER.map(lib => { + const ids = getLibraryAdapterIds(lib); + const state = getLibraryState(lib); + let label, cssClass; + if (state === 'full') { + label = `✓ ${lib} Library`; + cssClass = 'lib-btn--full'; + } else if (state === 'partial') { + const inCart = ids.filter(id => cart.has(id)).length; + label = `${lib} (${inCart}/${ids.length})`; + cssClass = 'lib-btn--partial'; + } else { + label = `+ ${lib} Library`; + cssClass = 'lib-btn--none'; + } + return ``; + }).join(''); +} + function renderCart() { const countEl = document.getElementById('cart-count'); const clearBtn = document.getElementById('cart-clear-btn'); @@ -702,6 +805,8 @@

Granite Switch — Adapter Composer

if (countEl) countEl.textContent = cart.size > 0 ? ` (${cart.size})` : ''; if (clearBtn) clearBtn.style.display = cart.size > 0 ? '' : 'none'; + renderLibraryButtons(); + if (cart.size === 0) { bodyEl.innerHTML = '

Add adapters from the browser above to generate your compose command.

'; From 50d8a1eb617974b9b2b32b32f5b12fc9588c46b4 Mon Sep 17 00:00:00 2001 From: Luis A Lastras Date: Fri, 15 May 2026 15:19:07 -0400 Subject: [PATCH 2/3] Fix --include-adapters omission logic for full library selections Previously --include-adapters was only omitted when all 12 adapters were selected. Now it is omitted whenever every involved library is fully selected (e.g., selecting all 5 RAG adapters produces a clean command without the filter, since the entire RAG library is pulled). --- docs/adapter_catalog.html | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/adapter_catalog.html b/docs/adapter_catalog.html index c658150..db31bc4 100644 --- a/docs/adapter_catalog.html +++ b/docs/adapter_catalog.html @@ -701,14 +701,17 @@

Granite Switch — Adapter Composer

.filter(lib => libSet.has(lib)) .map(lib => LIBRARY_REPOS[lib]); - const allSelected = cart.size === Object.keys(ADAPTERS).length; + // Omit --include-adapters when every involved library is fully selected + const allLibsFullySelected = [...libSet].every(lib => + getLibraryAdapterIds(lib).every(id => cart.has(id)) + ); const lines = [ 'python -m granite_switch.composer.compose_granite_switch \\', ` --base-model ${selectedModel} \\`, ` --adapters ${libs.join(' ')} \\`, ]; - if (!allSelected) { + if (!allLibsFullySelected) { lines.push(` --include-adapters ${includeNames.join(' ')} \\`); } if (selectedBuildType === 'all-lora') { From a0d5771839fad186e1bc27a6263e12ff0a552e21 Mon Sep 17 00:00:00 2001 From: Luis A Lastras Date: Fri, 15 May 2026 15:22:30 -0400 Subject: [PATCH 3/3] =?UTF-8?q?Rename=20page=20to=20"Granite=20Switch=20Co?= =?UTF-8?q?mposer=20=E2=80=94=20models=20=C3=A0=20la=20carte"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/adapter_catalog.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/adapter_catalog.html b/docs/adapter_catalog.html index db31bc4..5abe181 100644 --- a/docs/adapter_catalog.html +++ b/docs/adapter_catalog.html @@ -3,7 +3,7 @@ - Granite Switch — Adapter Composer + Granite Switch Composer — models à la carte @@ -254,7 +254,7 @@
-

Granite Switch — Adapter Composer

+

Granite Switch Composer — models à la carte

Browse the 12 Granite Libraries adapters, compare benchmarks, and generate your compose_granite_switch command.