Prevent infinite loops in model selection logic by configuring an initial model state

This commit is contained in:
sabaimran
2025-02-03 18:11:01 -08:00
parent 489fa71143
commit 51874c25d5
2 changed files with 15 additions and 7 deletions

View File

@@ -31,6 +31,7 @@ interface ModelSelectorProps extends PopoverProps {
onSelect: (model: ModelOptions, userModification: boolean) => void; onSelect: (model: ModelOptions, userModification: boolean) => void;
selectedModel?: string; selectedModel?: string;
disabled?: boolean; disabled?: boolean;
initialModel?: string;
} }
export function ModelSelector({ ...props }: ModelSelectorProps) { export function ModelSelector({ ...props }: ModelSelectorProps) {
@@ -46,25 +47,31 @@ export function ModelSelector({ ...props }: ModelSelectorProps) {
if (userConfig) { if (userConfig) {
setModels(userConfig.chat_model_options); setModels(userConfig.chat_model_options);
const selectedChatModelOption = userConfig.chat_model_options.find(model => model.id === userConfig.selected_chat_model_config); if (!props.initialModel) {
setSelectedModel(selectedChatModelOption); const selectedChatModelOption = userConfig.chat_model_options.find(model => model.id === userConfig.selected_chat_model_config);
return; setSelectedModel(selectedChatModelOption);
} else {
const model = userConfig.chat_model_options.find(model => model.name === props.initialModel);
setSelectedModel(model);
}
} else { } else {
setSelectedModel(models[0]); setSelectedModel(models[0]);
} }
}, [models, props.selectedModel, userConfig]); }, [userConfig, props.initialModel, isLoadingUserConfig]);
useEffect(() => { useEffect(() => {
if (props.selectedModel) { if (props.selectedModel && selectedModel && props.selectedModel !== selectedModel.name) {
const model = models.find(model => model.name === props.selectedModel); const model = models.find(model => model.name === props.selectedModel);
setSelectedModel(model); setSelectedModel(model);
} }
}, [props.selectedModel]); }, [props.selectedModel, models]);
useEffect(() => { useEffect(() => {
if (selectedModel) { if (selectedModel) {
const userModification = selectedModel.id !== userConfig?.selected_chat_model_config; const userModification = selectedModel.id !== userConfig?.selected_chat_model_config;
props.onSelect(selectedModel, userModification); if (props.selectedModel !== selectedModel.name) {
props.onSelect(selectedModel, userModification);
}
} }
}, [selectedModel]); }, [selectedModel]);

View File

@@ -266,6 +266,7 @@ function ChatSidebarInternal({ ...props }: ChatSideBarProps) {
<ModelSelector <ModelSelector
disabled={!isEditable || !authenticatedData?.is_active} disabled={!isEditable || !authenticatedData?.is_active}
onSelect={(model, userModification) => handleModelSelect(model.name, userModification)} onSelect={(model, userModification) => handleModelSelect(model.name, userModification)}
initialModel={agentData?.chat_model}
selectedModel={selectedModel} selectedModel={selectedModel}
/> />
</SidebarMenuItem> </SidebarMenuItem>