feat: model_ids per folder

This commit is contained in:
Timothy Jaeryang Baek 2025-10-01 20:50:04 -05:00
parent 557367cf48
commit e2ca7b8632
5 changed files with 79 additions and 37 deletions

View file

@ -91,6 +91,7 @@
import Sidebar from '../icons/Sidebar.svelte'; import Sidebar from '../icons/Sidebar.svelte';
import { getFunctions } from '$lib/apis/functions'; import { getFunctions } from '$lib/apis/functions';
import Image from '../common/Image.svelte'; import Image from '../common/Image.svelte';
import { updateFolderById } from '$lib/apis/folders';
export let chatIdProp = ''; 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 pageSubscribe = null;
let showControlsSubscribe = null;
let selectedFolderSubscribe = null;
onMount(async () => { onMount(async () => {
loading = true; loading = true;
console.log('mounted'); console.log('mounted');
@ -548,7 +566,7 @@
} catch (e) {} } catch (e) {}
} }
showControls.subscribe(async (value) => { showControlsSubscribe = showControls.subscribe(async (value) => {
if (controlPane && !$mobile) { if (controlPane && !$mobile) {
try { try {
if (value) { 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'); const chatInput = document.getElementById('chat-input');
chatInput?.focus(); chatInput?.focus();
chats.subscribe(() => {});
}); });
onDestroy(() => { onDestroy(() => {
try {
pageSubscribe(); pageSubscribe();
showControlsSubscribe();
selectedFolderSubscribe();
chatIdUnsubscriber?.(); chatIdUnsubscriber?.();
window.removeEventListener('message', onMessageHandler); window.removeEventListener('message', onMessageHandler);
$socket?.off('chat-events', chatEventHandler); $socket?.off('chat-events', chatEventHandler);
} catch (e) {
console.error(e);
}
}); });
// File upload functions // File upload functions
@ -780,6 +813,7 @@
////////////////////////// //////////////////////////
const initNewChat = async () => { const initNewChat = async () => {
console.log('initNewChat');
if ($user?.role !== 'admin' && $user?.permissions?.chat?.temporary_enforced) { if ($user?.role !== 'admin' && $user?.permissions?.chat?.temporary_enforced) {
await temporaryChatEnabled.set(true); await temporaryChatEnabled.set(true);
} }
@ -829,6 +863,9 @@
selectedModels = selectedModels.filter((modelId) => selectedModels = selectedModels.filter((modelId) =>
$models.map((m) => m.id).includes(modelId) $models.map((m) => m.id).includes(modelId)
); );
} else {
if ($selectedFolder?.data?.model_ids) {
selectedModels = $selectedFolder?.data?.model_ids;
} else { } else {
if (sessionStorage.selectedModels) { if (sessionStorage.selectedModels) {
selectedModels = JSON.parse(sessionStorage.selectedModels); selectedModels = JSON.parse(sessionStorage.selectedModels);
@ -841,6 +878,8 @@
selectedModels = $config?.default_models.split(','); selectedModels = $config?.default_models.split(',');
} }
} }
}
selectedModels = selectedModels.filter((modelId) => availableModels.includes(modelId)); selectedModels = selectedModels.filter((modelId) => availableModels.includes(modelId));
} }

View file

@ -7,6 +7,9 @@
const dispatch = createEventDispatcher(); const dispatch = createEventDispatcher();
import { getChatList } from '$lib/apis/chats';
import { updateFolderById } from '$lib/apis/folders';
import { import {
config, config,
user, user,
@ -25,7 +28,6 @@
import MessageInput from './MessageInput.svelte'; import MessageInput from './MessageInput.svelte';
import FolderPlaceholder from './Placeholder/FolderPlaceholder.svelte'; import FolderPlaceholder from './Placeholder/FolderPlaceholder.svelte';
import FolderTitle from './Placeholder/FolderTitle.svelte'; import FolderTitle from './Placeholder/FolderTitle.svelte';
import { getChatList } from '$lib/apis/chats';
const i18n = getContext('i18n'); const i18n = getContext('i18n');
@ -58,7 +60,6 @@
export let toolServers = []; export let toolServers = [];
let models = []; let models = [];
let selectedModelIdx = 0; let selectedModelIdx = 0;
$: if (selectedModels.length > 0) { $: if (selectedModels.length > 0) {
@ -66,8 +67,6 @@
} }
$: models = selectedModels.map((id) => $_models.find((m) => m.id === id)); $: models = selectedModels.map((id) => $_models.find((m) => m.id === id));
onMount(() => {});
</script> </script>
<div class="m-auto w-full max-w-6xl px-2 @2xl:px-20 translate-y-6 py-24 text-center"> <div class="m-auto w-full max-w-6xl px-2 @2xl:px-20 translate-y-6 py-24 text-center">
@ -91,8 +90,6 @@
<FolderTitle <FolderTitle
folder={$selectedFolder} folder={$selectedFolder}
onUpdate={async (folder) => { onUpdate={async (folder) => {
selectedFolder.set(folder);
await chats.set(await getChatList(localStorage.token, $currentChatPage)); await chats.set(await getChatList(localStorage.token, $currentChatPage));
currentChatPage.set(1); currentChatPage.set(1);
}} }}

View file

@ -11,7 +11,7 @@
import { selectedFolder } from '$lib/stores'; import { selectedFolder } from '$lib/stores';
import { deleteFolderById, updateFolderById } from '$lib/apis/folders'; import { deleteFolderById, getFolderById, updateFolderById } from '$lib/apis/folders';
import { getChatsByFolderId } from '$lib/apis/chats'; import { getChatsByFolderId } from '$lib/apis/chats';
import FolderModal from '$lib/components/layout/Sidebar/Folders/FolderModal.svelte'; import FolderModal from '$lib/components/layout/Sidebar/Folders/FolderModal.svelte';
@ -61,8 +61,14 @@
} }
toast.success($i18n.t('Folder updated successfully')); toast.success($i18n.t('Folder updated successfully'));
selectedFolder.set(folder);
onUpdate(folder); const _folder = await getFolderById(localStorage.token, folder.id).catch((error) => {
toast.error(`${error}`);
return null;
});
await selectedFolder.set(_folder);
onUpdate(_folder);
} }
}; };
@ -80,8 +86,14 @@
folder.meta = { ...folder.meta, icon: iconName }; folder.meta = { ...folder.meta, icon: iconName };
toast.success($i18n.t('Folder updated successfully')); toast.success($i18n.t('Folder updated successfully'));
selectedFolder.set(folder);
onUpdate(folder); const _folder = await getFolderById(localStorage.token, folder.id).catch((error) => {
toast.error(`${error}`);
return null;
});
await selectedFolder.set(_folder);
onUpdate(_folder);
} }
}; };

View file

@ -672,16 +672,10 @@
} }
} }
console.log('content', content);
if (collaboration && documentId && socket && user) { if (collaboration && documentId && socket && user) {
const { SocketIOCollaborationProvider } = await import('./RichTextInput/Collaboration'); const { SocketIOCollaborationProvider } = await import('./RichTextInput/Collaboration');
provider = new SocketIOCollaborationProvider(documentId, socket, user, content); provider = new SocketIOCollaborationProvider(documentId, socket, user, content);
} }
console.log(bubbleMenuElement, floatingMenuElement);
console.log(suggestions);
editor = new Editor({ editor = new Editor({
element: element, element: element,
extensions: [ extensions: [

View file

@ -335,7 +335,7 @@
}); });
if (folder) { if (folder) {
selectedFolder.set(folder); await selectedFolder.set(folder);
} }
} }
dispatch('update'); dispatch('update');
@ -376,7 +376,7 @@
}); });
if (folder) { if (folder) {
selectedFolder.set(folder); await selectedFolder.set(folder);
} }
} }
} else { } else {
@ -488,17 +488,17 @@
} }
clickTimer = setTimeout(async () => { clickTimer = setTimeout(async () => {
await goto('/');
const folder = await getFolderById(localStorage.token, folderId).catch((error) => { const folder = await getFolderById(localStorage.token, folderId).catch((error) => {
toast.error(`${error}`); toast.error(`${error}`);
return null; return null;
}); });
if (folder) { if (folder) {
selectedFolder.set(folder); await selectedFolder.set(folder);
} }
await goto('/');
if ($mobile) { if ($mobile) {
showSidebar.set(!$showSidebar); showSidebar.set(!$showSidebar);
} }