From 86620f7f4260d7c681723fd86578a89107a3e6d9 Mon Sep 17 00:00:00 2001 From: Lily Delalande Date: Tue, 1 Apr 2025 22:53:22 -0400 Subject: [PATCH 1/3] fix radio button selection --- .../settings_v2/models/model_list/BaseModelsList.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ui/desktop/src/components/settings_v2/models/model_list/BaseModelsList.tsx b/ui/desktop/src/components/settings_v2/models/model_list/BaseModelsList.tsx index 789a9bc2ac0e..2bf90e3e563c 100644 --- a/ui/desktop/src/components/settings_v2/models/model_list/BaseModelsList.tsx +++ b/ui/desktop/src/components/settings_v2/models/model_list/BaseModelsList.tsx @@ -41,17 +41,23 @@ export function BaseModelsList({ try { const result = await getCurrentModelAndProvider({ readFromConfig: read }); if (isMounted) { + console.log(modelList); + console.log(result); // try to look up the model in the modelList let currentModel: Model; const match = modelList.find( (model) => model.name == result.model && model.provider == result.provider ); + console.log(match); // no matches so just create a model object (maybe user updated config.yaml from CLI usage, manual editing etc) if (!match) { + console.log('no match'); currentModel = { name: result.model, provider: result.provider }; } else { + console.log('found match'); currentModel = match; } + console.log('setting current model as', currentModel); setSelectedModel(currentModel); setIsInitialized(true); } From e36a19b51dbd078265419904c9edeec9b9cd6d40 Mon Sep 17 00:00:00 2001 From: Lily Delalande Date: Tue, 1 Apr 2025 23:09:29 -0400 Subject: [PATCH 2/3] refresh model after changing --- .../settings_v2/models/ModelsSection.tsx | 79 ++++++++----------- 1 file changed, 33 insertions(+), 46 deletions(-) diff --git a/ui/desktop/src/components/settings_v2/models/ModelsSection.tsx b/ui/desktop/src/components/settings_v2/models/ModelsSection.tsx index 7aa9f1a0af78..94b1a6ee5529 100644 --- a/ui/desktop/src/components/settings_v2/models/ModelsSection.tsx +++ b/ui/desktop/src/components/settings_v2/models/ModelsSection.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useRef, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import type { View } from '../../../App'; import ModelSettingsButtons from './subcomponents/ModelSettingsButtons'; import { useConfig } from '../../ConfigContext'; @@ -15,59 +15,46 @@ export default function ModelsSection({ setView }: ModelsSectionProps) { const [model, setModel] = useState(''); const { read, getProviders } = useConfig(); - // Use a ref to prevent multiple loads - const isLoadingRef = useRef(false); - const isLoadedRef = useRef(false); + // Function to load model data + const loadModelData = async () => { + try { + const gooseModel = (await read('GOOSE_MODEL', false)) as string; + const gooseProvider = (await read('GOOSE_PROVIDER', false)) as string; + const providers = await getProviders(true); - useEffect(() => { - // Prevent the effect from running again if it's already loading or loaded - if (isLoadingRef.current || isLoadedRef.current) return; - - // Mark as loading - isLoadingRef.current = true; - - const loadModelData = async () => { - try { - const gooseModel = (await read('GOOSE_MODEL', false)) as string; - const gooseProvider = (await read('GOOSE_PROVIDER', false)) as string; - const providers = await getProviders(true); - - // lookup display name - const providerDetailsList = providers.filter((provider) => provider.name === gooseProvider); - - if (providerDetailsList.length != 1) { - toastError({ - title: UNKNOWN_PROVIDER_TITLE, - msg: UNKNOWN_PROVIDER_MSG, - }); - setModel(gooseModel); - setProvider(gooseProvider); - } else { - const providerDisplayName = providerDetailsList[0].metadata.display_name; - setModel(gooseModel); - setProvider(providerDisplayName); - } + // lookup display name + const providerDetailsList = providers.filter((provider) => provider.name === gooseProvider); - // Mark as loaded and not loading - isLoadedRef.current = true; - isLoadingRef.current = false; - } catch (error) { - console.error('Error loading model data:', error); - isLoadingRef.current = false; + if (providerDetailsList.length != 1) { + toastError({ + title: UNKNOWN_PROVIDER_TITLE, + msg: UNKNOWN_PROVIDER_MSG, + }); + setModel(gooseModel); + setProvider(gooseProvider); + } else { + const providerDisplayName = providerDetailsList[0].metadata.display_name; + setModel(gooseModel); + setProvider(providerDisplayName); } - }; + } catch (error) { + console.error('Error loading model data:', error); + } + }; + useEffect(() => { + // Initial load loadModelData(); - // Clean up function + // Set up polling interval to check for changes + const interval = setInterval(() => { + loadModelData(); + }, 1000); // Check every second + + // Clean up interval on unmount return () => { - isLoadingRef.current = false; - isLoadedRef.current = false; + clearInterval(interval); }; - - // Run this effect only once when the component mounts - // We're using refs to control the actual execution, so we don't need dependencies - // eslint-disable-next-line react-hooks/exhaustive-deps }, []); return ( From b7ce612cb2605e62ffcd282d8d64f82aa37f62da Mon Sep 17 00:00:00 2001 From: Lily Delalande Date: Wed, 2 Apr 2025 09:03:42 -0400 Subject: [PATCH 3/3] remove logs --- .../settings_v2/models/model_list/BaseModelsList.tsx | 6 ------ 1 file changed, 6 deletions(-) diff --git a/ui/desktop/src/components/settings_v2/models/model_list/BaseModelsList.tsx b/ui/desktop/src/components/settings_v2/models/model_list/BaseModelsList.tsx index 2bf90e3e563c..789a9bc2ac0e 100644 --- a/ui/desktop/src/components/settings_v2/models/model_list/BaseModelsList.tsx +++ b/ui/desktop/src/components/settings_v2/models/model_list/BaseModelsList.tsx @@ -41,23 +41,17 @@ export function BaseModelsList({ try { const result = await getCurrentModelAndProvider({ readFromConfig: read }); if (isMounted) { - console.log(modelList); - console.log(result); // try to look up the model in the modelList let currentModel: Model; const match = modelList.find( (model) => model.name == result.model && model.provider == result.provider ); - console.log(match); // no matches so just create a model object (maybe user updated config.yaml from CLI usage, manual editing etc) if (!match) { - console.log('no match'); currentModel = { name: result.model, provider: result.provider }; } else { - console.log('found match'); currentModel = match; } - console.log('setting current model as', currentModel); setSelectedModel(currentModel); setIsInitialized(true); }