Explorar o código

feat: model_ids per folder

Timothy Jaeryang Baek hai 6 días
pai
achega
e2ca7b8632

+ 54 - 15
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));
 		}
 

+ 3 - 6
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(() => {});
 </script>
 
 <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
 					folder={$selectedFolder}
 					onUpdate={async (folder) => {
-						selectedFolder.set(folder);
-
 						await chats.set(await getChatList(localStorage.token, $currentChatPage));
 						currentChatPage.set(1);
 					}}

+ 17 - 5
src/lib/components/chat/Placeholder/FolderTitle.svelte

@@ -11,7 +11,7 @@
 
 	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 FolderModal from '$lib/components/layout/Sidebar/Folders/FolderModal.svelte';
@@ -61,8 +61,14 @@
 			}
 
 			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 };
 
 			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);
 		}
 	};
 

+ 0 - 6
src/lib/components/common/RichTextInput.svelte

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

+ 5 - 5
src/lib/components/layout/Sidebar/RecursiveFolder.svelte

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