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 { 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));
}

View file

@ -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);
}}

View file

@ -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);
}
};

View file

@ -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: [

View file

@ -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);
}