diff --git a/web/src/pages/agent/form/agent-form/index.tsx b/web/src/pages/agent/form/agent-form/index.tsx index 940ab36562..349b8e7ced 100644 --- a/web/src/pages/agent/form/agent-form/index.tsx +++ b/web/src/pages/agent/form/agent-form/index.tsx @@ -161,7 +161,7 @@ function AgentForm({ node }: INextOperatorForm) { {findLlmByUuid(llmId)?.model_type?.includes('vision') && ( )} diff --git a/web/src/pages/user-setting/setting-model/layout/system-setting.tsx b/web/src/pages/user-setting/setting-model/layout/system-setting.tsx index b05abaa589..8217928ab0 100644 --- a/web/src/pages/user-setting/setting-model/layout/system-setting.tsx +++ b/web/src/pages/user-setting/setting-model/layout/system-setting.tsx @@ -27,9 +27,7 @@ import { useSetDefaultModel, } from '@/hooks/use-llm-request'; import { CircleQuestionMark } from 'lucide-react'; -import { useCallback, useEffect, useMemo, useState } from 'react'; - -const STORAGE_KEY = 'ragflow-system-model-settings'; +import { useCallback, useMemo } from 'react'; interface ModelFieldItemProps { id: string; @@ -40,25 +38,6 @@ interface ModelFieldItemProps { onChange: (id: string, value: string) => void; } -/** Read persisted model selections from localStorage */ -function loadPersistedValues(): Record { - try { - const raw = localStorage.getItem(STORAGE_KEY); - return raw ? JSON.parse(raw) : {}; - } catch { - return {}; - } -} - -/** Persist model selections to localStorage */ -function savePersistedValues(values: Record) { - try { - localStorage.setItem(STORAGE_KEY, JSON.stringify(values)); - } catch { - // Silently fail if storage is full/disabled - } -} - function ModelFieldItem({ label, value, @@ -105,90 +84,57 @@ function SystemSetting() { const defaultModelDictionary = useFetchDefaultModelDictionary(); const { setDefaultModel } = useSetDefaultModel(); - // Local state synced with localStorage for persistence across page refreshes. - // This handles the case where the Go backend hasn't been rebuilt yet and - // doesn't return TTS/ASR/VLM defaults from the API (same pattern as ASR/VLM). - const [persistedValues, setPersistedValues] = - useState>(loadPersistedValues); - - // Sync localStorage whenever persistedValues changes - useEffect(() => { - savePersistedValues(persistedValues); - }, [persistedValues]); - const handleFieldChange = useCallback( async (field: string, value: string) => { - // Update local state immediately so selection shows right away and persists - setPersistedValues((prev) => ({ ...prev, [field]: value || '' })); - const modelType = FieldToModelType[field]; if (!modelType) return; - if (!value) { - await setDefaultModel({ - model_id: '', - model_type: modelType, - }); - } else { - // const parsed = parseModelValue(value); - // if (!parsed) return; - await setDefaultModel({ model_id: value, model_type: modelType }); - } + await setDefaultModel({ model_id: value, model_type: modelType }); }, [setDefaultModel], ); - // Resolution order (same for ALL model types including ASR/VLM/TTS): - // 1. localStorage (user's latest selection, survives refresh) - // 2. API response (from Go backend GET /api/v1/models/default) - // 3. empty string (fallback) - const getValue = useCallback( - (field: string) => - persistedValues[field] || defaultModelDictionary[field] || '', - [persistedValues, defaultModelDictionary], - ); - const llmList = useMemo(() => { return [ { id: 'llm_id', label: t('chatModel'), isRequired: true, - value: getValue('llm_id'), + value: defaultModelDictionary.llm_id ?? '', tooltip: t('chatModelTip'), }, { id: 'embd_id', label: t('embeddingModel'), - value: getValue('embd_id'), + value: defaultModelDictionary.embd_id ?? '', tooltip: t('embeddingModelTip'), }, { id: 'img2txt_id', label: t('img2txtModel'), - value: getValue('img2txt_id'), + value: defaultModelDictionary.img2txt_id ?? '', tooltip: t('img2txtModelTip'), }, { id: 'asr_id', label: t('sequence2txtModel'), - value: getValue('asr_id'), + value: defaultModelDictionary.asr_id ?? '', tooltip: t('sequence2txtModelTip'), }, { id: 'rerank_id', label: t('rerankModel'), - value: getValue('rerank_id'), + value: defaultModelDictionary.rerank_id ?? '', tooltip: t('rerankModelTip'), }, { id: 'tts_id', label: t('ttsModel'), - value: getValue('tts_id'), + value: defaultModelDictionary.tts_id ?? '', tooltip: t('ttsModelTip'), }, ]; - }, [getValue, t]); + }, [defaultModelDictionary, t]); return (