From 6cc74595e3959d882868eac8d2ab010917132c45 Mon Sep 17 00:00:00 2001 From: Ayaan Zaidi Date: Sun, 26 Apr 2026 11:20:17 +0530 Subject: [PATCH] refactor(configure): distill fallback selection merge --- src/flows/model-picker.ts | 49 +++++++++------------------------------ 1 file changed, 11 insertions(+), 38 deletions(-) diff --git a/src/flows/model-picker.ts b/src/flows/model-picker.ts index 7bb6d951392..bc3e7d7274e 100644 --- a/src/flows/model-picker.ts +++ b/src/flows/model-picker.ts @@ -933,16 +933,14 @@ export function applyModelFallbacksFromSelection( scopeKeySet && !includesResolvedPrimary ? rawSelectedFallbacks.filter((key) => existingFallbackSet.has(key)) : rawSelectedFallbacks; - const fallbacks = scopeKeySet - ? mergeScopedFallbackSelection({ - existingFallbacks, - selectedFallbacks, - scopeKeySet, - }) - : mergeUnscopedFallbackSelection({ - existingFallbacks, - selectedFallbacks, - }); + const preserveExistingFallback = scopeKeySet + ? (fallback: string) => !scopeKeySet.has(fallback) + : (fallback: string) => !isModelPickerVisibleModelRef(fallback); + const fallbacks = mergeFallbackSelection({ + existingFallbacks, + selectedFallbacks, + preserveExistingFallback, + }); const nextModel = { ...preservedModelFields, ...(existingPrimary != null ? { primary: existingPrimary } : {}), @@ -973,15 +971,15 @@ export function applyModelFallbacksFromSelection( }; } -function mergeScopedFallbackSelection(params: { +function mergeFallbackSelection(params: { existingFallbacks: string[]; selectedFallbacks: string[]; - scopeKeySet: Set; + preserveExistingFallback: (fallback: string) => boolean; }): string[] { const selected = new Set(params.selectedFallbacks); const fallbacks: string[] = []; for (const fallback of params.existingFallbacks) { - if (!params.scopeKeySet.has(fallback)) { + if (params.preserveExistingFallback(fallback)) { fallbacks.push(fallback); continue; } @@ -996,28 +994,3 @@ function mergeScopedFallbackSelection(params: { } return fallbacks; } - -function mergeUnscopedFallbackSelection(params: { - existingFallbacks: string[]; - selectedFallbacks: string[]; -}): string[] { - const selected = new Set(params.selectedFallbacks); - const fallbacks: string[] = []; - for (const fallback of params.existingFallbacks) { - if (!isModelPickerVisibleModelRef(fallback)) { - fallbacks.push(fallback); - // Defensive: future callers may pass a hidden fallback in the selected list. - selected.delete(fallback); - continue; - } - if (selected.delete(fallback)) { - fallbacks.push(fallback); - } - } - for (const fallback of params.selectedFallbacks) { - if (selected.has(fallback)) { - fallbacks.push(fallback); - } - } - return fallbacks; -}