mirror of
https://github.com/open-webui/open-webui.git
synced 2025-12-13 04:45:19 +00:00
feat: model_ids per folder
This commit is contained in:
parent
557367cf48
commit
e2ca7b8632
5 changed files with 79 additions and 37 deletions
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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: [
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue