diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index d14c02eee7..722a554e72 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -36,7 +36,8 @@ chatTitle, showArtifacts, tools, - toolServers + toolServers, + selectedFolder } from '$lib/stores'; import { convertMessagesToHistory, diff --git a/src/lib/components/chat/Placeholder.svelte b/src/lib/components/chat/Placeholder.svelte index 7663604ec5..5854b7f52f 100644 --- a/src/lib/components/chat/Placeholder.svelte +++ b/src/lib/components/chat/Placeholder.svelte @@ -7,7 +7,13 @@ const dispatch = createEventDispatcher(); - import { config, user, models as _models, temporaryChatEnabled } from '$lib/stores'; + import { + config, + user, + models as _models, + temporaryChatEnabled, + selectedFolder + } from '$lib/stores'; import { sanitizeResponseContent, extractCurlyBraceWords } from '$lib/utils'; import { WEBUI_BASE_URL } from '$lib/constants'; @@ -15,6 +21,9 @@ import Tooltip from '$lib/components/common/Tooltip.svelte'; import EyeSlash from '$lib/components/icons/EyeSlash.svelte'; import MessageInput from './MessageInput.svelte'; + import FolderOpen from '../icons/FolderOpen.svelte'; + import XMark from '../icons/XMark.svelte'; + import Folder from '../icons/Folder.svelte'; const i18n = getContext('i18n'); @@ -77,103 +86,129 @@ class="w-full text-3xl text-gray-800 dark:text-gray-100 text-center flex items-center gap-4 font-primary" >
-
-
-
- {#each models as model, modelIdx} - tag.name.toUpperCase()) - .join(', ')} - placement="top" - > - +
+
+ {:else} +
+
+
+ {#each models as model, modelIdx} + tag.name.toUpperCase()) + .join(', ')} + placement="top" > - - + + + {/each} +
+
+ +
+ {#if models[selectedModelIdx]?.name} + + + {models[selectedModelIdx]?.name} + - {/each} + {:else} + {$i18n.t('Hello, {{name}}', { name: $user?.name })} + {/if}
-
- {#if models[selectedModelIdx]?.name} - - - {models[selectedModelIdx]?.name} - - - {:else} - {$i18n.t('Hello, {{name}}', { name: $user?.name })} - {/if} -
-
- -
-
- {#if models[selectedModelIdx]?.info?.meta?.description ?? null} - ') - )} - placement="top" - > -
- {@html marked.parse( +
+
+ {#if models[selectedModelIdx]?.info?.meta?.description ?? null} + ') )} -
- + placement="top" + > +
+ {@html marked.parse( + sanitizeResponseContent( + models[selectedModelIdx]?.info?.meta?.description ?? '' + ).replaceAll('\n', '
') + )} +
+ - {#if models[selectedModelIdx]?.info?.meta?.user} -
- By - {#if models[selectedModelIdx]?.info?.meta?.user.community} - {models[selectedModelIdx]?.info?.meta?.user.name - ? models[selectedModelIdx]?.info?.meta?.user.name - : `@${models[selectedModelIdx]?.info?.meta?.user.username}`} - {:else} - {models[selectedModelIdx]?.info?.meta?.user.name} - {/if} -
+ {#if models[selectedModelIdx]?.info?.meta?.user} +
+ By + {#if models[selectedModelIdx]?.info?.meta?.user.community} + {models[selectedModelIdx]?.info?.meta?.user.name + ? models[selectedModelIdx]?.info?.meta?.user.name + : `@${models[selectedModelIdx]?.info?.meta?.user.username}`} + {:else} + {models[selectedModelIdx]?.info?.meta?.user.name} + {/if} +
+ {/if} {/if} - {/if} +
-
+ {/if}
+ export let className = 'size-4'; + export let strokeWidth = '1.5'; + + + + + diff --git a/src/lib/components/layout/Sidebar.svelte b/src/lib/components/layout/Sidebar.svelte index 327f6e27ac..0a853aa546 100644 --- a/src/lib/components/layout/Sidebar.svelte +++ b/src/lib/components/layout/Sidebar.svelte @@ -22,7 +22,8 @@ socket, config, isApp, - models + models, + selectedFolder } from '$lib/stores'; import { onMount, getContext, tick, onDestroy } from 'svelte'; @@ -494,6 +495,7 @@ draggable="false" on:click={async () => { selectedChatId = null; + selectedFolder.set(null); if ($user?.role !== 'admin' && $user?.permissions?.chat?.temporary_enforced) { await temporaryChatEnabled.set(true); diff --git a/src/lib/components/layout/Sidebar/Folders/FolderMenu.svelte b/src/lib/components/layout/Sidebar/Folders/FolderMenu.svelte index 12baf7796d..00338e01ee 100644 --- a/src/lib/components/layout/Sidebar/Folders/FolderMenu.svelte +++ b/src/lib/components/layout/Sidebar/Folders/FolderMenu.svelte @@ -12,6 +12,10 @@ import Tooltip from '$lib/components/common/Tooltip.svelte'; import Download from '$lib/components/icons/Download.svelte'; + export let onEdit = () => {}; + export let onExport = () => {}; + export let onDelete = () => {}; + let show = false; @@ -38,17 +42,17 @@ { - dispatch('rename'); + onEdit(); }} > -
{$i18n.t('Rename')}
+
{$i18n.t('Edit')}
{ - dispatch('export'); + onExport(); }} > @@ -59,7 +63,7 @@ { - dispatch('delete'); + onDelete(); }} > diff --git a/src/lib/components/layout/Sidebar/RecursiveFolder.svelte b/src/lib/components/layout/Sidebar/RecursiveFolder.svelte index a30a14a4b4..cd6dfb258d 100644 --- a/src/lib/components/layout/Sidebar/RecursiveFolder.svelte +++ b/src/lib/components/layout/Sidebar/RecursiveFolder.svelte @@ -31,6 +31,7 @@ import ChatItem from './ChatItem.svelte'; import FolderMenu from './Folders/FolderMenu.svelte'; import DeleteConfirmDialog from '$lib/components/common/ConfirmDialog.svelte'; + import { selectedFolder } from '$lib/stores'; export let open = false; @@ -38,6 +39,8 @@ export let folderId; export let shiftKey = false; + export let onCreateChat = (e) => {}; + export let className = ''; export let parentDragged = false; @@ -288,6 +291,11 @@ if (res) { folders[folderId].name = name; toast.success($i18n.t('Folder name updated successfully')); + + if ($selectedFolder?.id === folderId) { + selectedFolder.set(folders[folderId]); + } + dispatch('update'); } }; @@ -394,10 +402,16 @@