Update GeneralSettings.jsx to conditionally load model catalog and handle panel changes

This commit is contained in:
2026-04-17 09:00:44 +02:00
parent 8c5b8c404c
commit 8091b054c1

View File

@@ -98,14 +98,11 @@ export default function GeneralSettings({
} }
setBackendApiUrl(resolveBackendApiUrl(settings)); setBackendApiUrl(resolveBackendApiUrl(settings));
setOllamaApiUrl(settings.ollamaApiUrl || DEFAULT_OLLAMA_API_URL);
setEmbedModel(settings.embedModel || DEFAULT_EMBED_MODEL); setEmbedModel(settings.embedModel || DEFAULT_EMBED_MODEL);
setRerankModel(settings.rerankModel || settings.embedModel || DEFAULT_EMBED_MODEL); setRerankModel(settings.rerankModel || settings.embedModel || DEFAULT_EMBED_MODEL);
setSelectedModel(settings.chatModel || ''); setSelectedModel(settings.chatModel || '');
setVisionModel(settings.visionModel || settings.chatModel || ''); setVisionModel(settings.visionModel || settings.chatModel || '');
setTranscriptionModel(settings.transcriptionModel || DEFAULT_TRANSCRIPTION_MODEL); setTranscriptionModel(settings.transcriptionModel || DEFAULT_TRANSCRIPTION_MODEL);
setStreamOutput(settings.streamOutput || false);
setAudioInputEnabled(settings.audioInputEnabled === true);
setAudioInputDeviceId( setAudioInputDeviceId(
typeof settings.audioInputDeviceId === 'string' typeof settings.audioInputDeviceId === 'string'
? settings.audioInputDeviceId ? settings.audioInputDeviceId
@@ -129,6 +126,10 @@ export default function GeneralSettings({
}, []); }, []);
useEffect(() => { useEffect(() => {
if (panel !== 'AI Models') {
setIsLoadingModelCatalog(false);
return () => {};
}
if (!backendApiUrl) { if (!backendApiUrl) {
setIsLoadingModelCatalog(false); setIsLoadingModelCatalog(false);
return () => {}; return () => {};
@@ -163,9 +164,12 @@ export default function GeneralSettings({
return () => { return () => {
cancelled = true; cancelled = true;
}; };
}, [backendApiUrl, ollamaApiUrl]); }, [backendApiUrl, panel]);
useEffect(() => { useEffect(() => {
if (panel !== 'AI Models') {
return;
}
if (!settingsHydrated) { if (!settingsHydrated) {
return; return;
} }
@@ -183,9 +187,12 @@ export default function GeneralSettings({
if (onModelChange) { if (onModelChange) {
onModelChange(nextModel); onModelChange(nextModel);
} }
}, [chatModels, selectedModel, onModelChange, settingsHydrated]); }, [chatModels, selectedModel, onModelChange, panel, settingsHydrated]);
useEffect(() => { useEffect(() => {
if (panel !== 'AI Models') {
return;
}
if (!settingsHydrated) { if (!settingsHydrated) {
return; return;
} }
@@ -203,9 +210,12 @@ export default function GeneralSettings({
if (onVisionModelChange) { if (onVisionModelChange) {
onVisionModelChange(nextModel); onVisionModelChange(nextModel);
} }
}, [visionModels, visionModel, onVisionModelChange, settingsHydrated]); }, [visionModels, visionModel, onVisionModelChange, panel, settingsHydrated]);
useEffect(() => { useEffect(() => {
if (panel !== 'AI Models') {
return;
}
if (!settingsHydrated) { if (!settingsHydrated) {
return; return;
} }
@@ -216,9 +226,12 @@ export default function GeneralSettings({
const nextModel = embeddingModels[0] || DEFAULT_EMBED_MODEL; const nextModel = embeddingModels[0] || DEFAULT_EMBED_MODEL;
setEmbedModel(nextModel); setEmbedModel(nextModel);
window.electronAPI.setSetting(EMBED_MODEL_KEY, nextModel); window.electronAPI.setSetting(EMBED_MODEL_KEY, nextModel);
}, [embeddingModels, embedModel, settingsHydrated]); }, [embeddingModels, embedModel, panel, settingsHydrated]);
useEffect(() => { useEffect(() => {
if (panel !== 'AI Models') {
return;
}
if (!settingsHydrated) { if (!settingsHydrated) {
return; return;
} }
@@ -229,9 +242,12 @@ export default function GeneralSettings({
const nextModel = embedModel || rerankingModels[0] || DEFAULT_EMBED_MODEL; const nextModel = embedModel || rerankingModels[0] || DEFAULT_EMBED_MODEL;
setRerankModel(nextModel); setRerankModel(nextModel);
window.electronAPI.setSetting(RERANK_MODEL_KEY, nextModel); window.electronAPI.setSetting(RERANK_MODEL_KEY, nextModel);
}, [rerankingModels, rerankModel, embedModel, settingsHydrated]); }, [rerankingModels, rerankModel, embedModel, panel, settingsHydrated]);
useEffect(() => { useEffect(() => {
if (panel !== 'AI Models') {
return;
}
if (!settingsHydrated) { if (!settingsHydrated) {
return; return;
} }
@@ -245,9 +261,12 @@ export default function GeneralSettings({
if (onTranscriptionModelChange) { if (onTranscriptionModelChange) {
onTranscriptionModelChange(nextModel); onTranscriptionModelChange(nextModel);
} }
}, [whisperModels, transcriptionModel, onTranscriptionModelChange, settingsHydrated]); }, [whisperModels, transcriptionModel, onTranscriptionModelChange, panel, settingsHydrated]);
useEffect(() => { useEffect(() => {
if (panel !== 'Microphone') {
return () => {};
}
if (!audioInputSupported) { if (!audioInputSupported) {
setAudioInputStatus({ setAudioInputStatus({
tone: 'warning', tone: 'warning',
@@ -303,7 +322,7 @@ export default function GeneralSettings({
mediaDevices.removeEventListener('devicechange', refreshDevices); mediaDevices.removeEventListener('devicechange', refreshDevices);
} }
}; };
}, [audioInputSupported]); }, [audioInputSupported, panel]);
const handleBackendUrlChange = (event) => { const handleBackendUrlChange = (event) => {
const newUrl = event.target.value; const newUrl = event.target.value;