mirror of
https://github.com/khoaliber/khoj.git
synced 2026-03-09 21:29:11 +00:00
Prevent infinite loops in model selection logic by configuring an initial model state
This commit is contained in:
@@ -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]);
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user