diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index 8b45ee6b22..2be7b0b1a9 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -91,6 +91,7 @@ import Sidebar from '../icons/Sidebar.svelte'; import { getFunctions } from '$lib/apis/functions'; import Image from '../common/Image.svelte'; + import { updateFolderById } from '$lib/apis/folders'; export let chatIdProp = ''; @@ -499,7 +500,24 @@ } }; + const savedModelIds = async () => { + if ($selectedFolder && $selectedFolder?.data?.model_ids !== selectedModels) { + const res = await updateFolderById(localStorage.token, $selectedFolder.id, { + data: { + model_ids: selectedModels + } + }); + } + }; + + $: if (selectedModels !== null) { + savedModelIds(); + } + let pageSubscribe = null; + let showControlsSubscribe = null; + let selectedFolderSubscribe = null; + onMount(async () => { loading = true; console.log('mounted'); @@ -548,7 +566,7 @@ } catch (e) {} } - showControls.subscribe(async (value) => { + showControlsSubscribe = showControls.subscribe(async (value) => { if (controlPane && !$mobile) { try { if (value) { @@ -569,17 +587,32 @@ } }); + selectedFolderSubscribe = selectedFolder.subscribe(async (folder) => { + if ( + folder?.data?.model_ids && + JSON.stringify(selectedModels) !== JSON.stringify(folder.data.model_ids) + ) { + selectedModels = folder.data.model_ids; + + console.log('Set selectedModels from folder data:', selectedModels); + } + }); + const chatInput = document.getElementById('chat-input'); chatInput?.focus(); - - chats.subscribe(() => {}); }); onDestroy(() => { - pageSubscribe(); - chatIdUnsubscriber?.(); - window.removeEventListener('message', onMessageHandler); - $socket?.off('chat-events', chatEventHandler); + try { + pageSubscribe(); + showControlsSubscribe(); + selectedFolderSubscribe(); + chatIdUnsubscriber?.(); + window.removeEventListener('message', onMessageHandler); + $socket?.off('chat-events', chatEventHandler); + } catch (e) { + console.error(e); + } }); // File upload functions @@ -780,6 +813,7 @@ ////////////////////////// const initNewChat = async () => { + console.log('initNewChat'); if ($user?.role !== 'admin' && $user?.permissions?.chat?.temporary_enforced) { await temporaryChatEnabled.set(true); } @@ -830,17 +864,22 @@ $models.map((m) => m.id).includes(modelId) ); } else { - if (sessionStorage.selectedModels) { - selectedModels = JSON.parse(sessionStorage.selectedModels); - sessionStorage.removeItem('selectedModels'); + if ($selectedFolder?.data?.model_ids) { + selectedModels = $selectedFolder?.data?.model_ids; } else { - if ($settings?.models) { - selectedModels = $settings?.models; - } else if ($config?.default_models) { - console.log($config?.default_models.split(',') ?? ''); - selectedModels = $config?.default_models.split(','); + if (sessionStorage.selectedModels) { + selectedModels = JSON.parse(sessionStorage.selectedModels); + sessionStorage.removeItem('selectedModels'); + } else { + if ($settings?.models) { + selectedModels = $settings?.models; + } else if ($config?.default_models) { + console.log($config?.default_models.split(',') ?? ''); + selectedModels = $config?.default_models.split(','); + } } } + selectedModels = selectedModels.filter((modelId) => availableModels.includes(modelId)); } diff --git a/src/lib/components/chat/Placeholder.svelte b/src/lib/components/chat/Placeholder.svelte index bf4986c590..509ef9f2ba 100644 --- a/src/lib/components/chat/Placeholder.svelte +++ b/src/lib/components/chat/Placeholder.svelte @@ -7,6 +7,9 @@ const dispatch = createEventDispatcher(); + import { getChatList } from '$lib/apis/chats'; + import { updateFolderById } from '$lib/apis/folders'; + import { config, user, @@ -25,7 +28,6 @@ import MessageInput from './MessageInput.svelte'; import FolderPlaceholder from './Placeholder/FolderPlaceholder.svelte'; import FolderTitle from './Placeholder/FolderTitle.svelte'; - import { getChatList } from '$lib/apis/chats'; const i18n = getContext('i18n'); @@ -58,7 +60,6 @@ export let toolServers = []; let models = []; - let selectedModelIdx = 0; $: if (selectedModels.length > 0) { @@ -66,8 +67,6 @@ } $: models = selectedModels.map((id) => $_models.find((m) => m.id === id)); - - onMount(() => {});