mirror of
https://github.com/open-webui/open-webui.git
synced 2025-12-18 15:25:20 +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 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(() => {
|
||||||
pageSubscribe();
|
try {
|
||||||
chatIdUnsubscriber?.();
|
pageSubscribe();
|
||||||
window.removeEventListener('message', onMessageHandler);
|
showControlsSubscribe();
|
||||||
$socket?.off('chat-events', chatEventHandler);
|
selectedFolderSubscribe();
|
||||||
|
chatIdUnsubscriber?.();
|
||||||
|
window.removeEventListener('message', onMessageHandler);
|
||||||
|
$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);
|
||||||
}
|
}
|
||||||
|
|
@ -830,17 +864,22 @@
|
||||||
$models.map((m) => m.id).includes(modelId)
|
$models.map((m) => m.id).includes(modelId)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
if (sessionStorage.selectedModels) {
|
if ($selectedFolder?.data?.model_ids) {
|
||||||
selectedModels = JSON.parse(sessionStorage.selectedModels);
|
selectedModels = $selectedFolder?.data?.model_ids;
|
||||||
sessionStorage.removeItem('selectedModels');
|
|
||||||
} else {
|
} else {
|
||||||
if ($settings?.models) {
|
if (sessionStorage.selectedModels) {
|
||||||
selectedModels = $settings?.models;
|
selectedModels = JSON.parse(sessionStorage.selectedModels);
|
||||||
} else if ($config?.default_models) {
|
sessionStorage.removeItem('selectedModels');
|
||||||
console.log($config?.default_models.split(',') ?? '');
|
} else {
|
||||||
selectedModels = $config?.default_models.split(',');
|
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));
|
selectedModels = selectedModels.filter((modelId) => availableModels.includes(modelId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}}
|
}}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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: [
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue