From 83b5d3006f669dff5f9853bf0bd48b66ec4a8857 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 8 Feb 2026 02:23:12 +0000 Subject: [PATCH 1/3] Initial plan From 2271a445c02af1a5146b4d92ced81900d35b0f5d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 8 Feb 2026 02:26:31 +0000 Subject: [PATCH 2/3] Fix BYOK status indicator to reflect validation state Co-authored-by: lightaime <23632352+lightaime@users.noreply.github.com> --- src/pages/Setting/Models.tsx | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/pages/Setting/Models.tsx b/src/pages/Setting/Models.tsx index 07bf78982..bd45fcee0 100644 --- a/src/pages/Setting/Models.tsx +++ b/src/pages/Setting/Models.tsx @@ -471,6 +471,12 @@ export default function SettingModels() { ), closeButton: true, }); + // Update is_valid to true when validation succeeds + setForm((prev) => { + const next = [...prev]; + next[idx] = { ...next[idx], is_valid: true }; + return next; + }); } else { console.log('failed', res.message); // Surface error inline on API Key input @@ -480,6 +486,12 @@ export default function SettingModels() { next[idx].apiKey = getValidateMessage(res); return next; }); + // Update is_valid to false when validation fails + setForm((prev) => { + const next = [...prev]; + next[idx] = { ...next[idx], is_valid: false }; + return next; + }); return; } console.log(res); @@ -492,6 +504,12 @@ export default function SettingModels() { next[idx].apiKey = getValidateMessage(e); return next; }); + // Update is_valid to false when validation fails + setForm((prev) => { + const next = [...prev]; + next[idx] = { ...next[idx], is_valid: false }; + return next; + }); return; } finally { setLoading(null); @@ -1580,7 +1598,7 @@ export default function SettingModels() { {items.map((item, idx) => { - const isConfigured = !!form[idx]?.provider_id; + const isConfigured = !!form[idx]?.provider_id && form[idx]?.is_valid; const isPreferred = form[idx]?.prefer; const modelImage = getModelImage(item.id); @@ -1738,7 +1756,7 @@ export default function SettingModels() { item.id, selectedTab === `byok-${item.id}`, true, - !!form[idx].provider_id + !!form[idx].provider_id && form[idx].is_valid ) )} From 16e5e49e32869e84208832d57f096770fcd732ce Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 9 Feb 2026 09:53:15 +0000 Subject: [PATCH 3/3] Fix green dot missing - handle legacy configurations Co-authored-by: lightaime <23632352+lightaime@users.noreply.github.com> --- src/pages/Setting/Models.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/Setting/Models.tsx b/src/pages/Setting/Models.tsx index bd45fcee0..23d213a3a 100644 --- a/src/pages/Setting/Models.tsx +++ b/src/pages/Setting/Models.tsx @@ -1598,7 +1598,7 @@ export default function SettingModels() { {items.map((item, idx) => { - const isConfigured = !!form[idx]?.provider_id && form[idx]?.is_valid; + const isConfigured = !!form[idx]?.provider_id && form[idx]?.is_valid !== false; const isPreferred = form[idx]?.prefer; const modelImage = getModelImage(item.id); @@ -1756,7 +1756,7 @@ export default function SettingModels() { item.id, selectedTab === `byok-${item.id}`, true, - !!form[idx].provider_id && form[idx].is_valid + !!form[idx].provider_id && form[idx].is_valid !== false ) )}