From d1dbb9a3becdc58518d40f89f75aed09fcfe7f05 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Tue, 17 Sep 2024 22:05:19 +0200 Subject: [PATCH] feat: chat overview --- src/app.css | 4 + src/lib/components/chat/Chat.svelte | 13 +- src/lib/components/chat/ChatControls.svelte | 118 +++++++++------ .../chat/Messages/ProfileImage.svelte | 18 +-- .../chat/Messages/ProfileImageBase.svelte | 21 +++ src/lib/components/chat/Overview.svelte | 143 ++++++++++++++++++ src/lib/components/chat/Overview/Flow.svelte | 25 +++ src/lib/components/chat/Overview/Node.svelte | 40 +++++ src/lib/components/common/Drawer.svelte | 6 + src/lib/components/icons/Clipboard.svelte | 19 +++ src/lib/components/icons/Map.svelte | 19 +++ src/lib/components/layout/Navbar.svelte | 7 +- src/lib/components/layout/Navbar/Menu.svelte | 7 +- src/lib/stores/index.ts | 3 + 14 files changed, 364 insertions(+), 79 deletions(-) create mode 100644 src/lib/components/chat/Messages/ProfileImageBase.svelte create mode 100644 src/lib/components/chat/Overview.svelte create mode 100644 src/lib/components/chat/Overview/Flow.svelte create mode 100644 src/lib/components/chat/Overview/Node.svelte create mode 100644 src/lib/components/icons/Clipboard.svelte create mode 100644 src/lib/components/icons/Map.svelte diff --git a/src/app.css b/src/app.css index 08544d0ba..d745ee492 100644 --- a/src/app.css +++ b/src/app.css @@ -156,3 +156,7 @@ input[type='number'] { font-weight: 600; @apply rounded-md dark:bg-gray-800 bg-gray-100 mx-0.5; } + +.svelte-flow { + background-color: transparent !important; +} diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index c84e8d84b..b4f53664a 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -23,6 +23,7 @@ banners, user, socket, + showControls, showCallOverlay, currentChatPage, temporaryChatEnabled @@ -70,7 +71,6 @@ let loaded = false; const eventTarget = new EventTarget(); - let showControls = false; let stopResponseFlag = false; let autoScroll = true; let processing = ''; @@ -1703,7 +1703,6 @@ {title} bind:selectedModels bind:showModelSelector - bind:showControls shareEnabled={messages.length > 0} {chat} {initNewChat} @@ -1713,7 +1712,7 @@
{#each $banners.filter( (b) => (b.dismissible ? !JSON.parse(localStorage.getItem('dismissedBannerIds') ?? '[]').includes(b.id) : true) ) as banner} @@ -1740,7 +1739,7 @@
-
+
{ - showControls = true; + showControls.set(true); }} />
@@ -1807,7 +1806,7 @@ } return a; }, [])} - bind:show={showControls} + bind:history bind:chatFiles bind:params bind:files diff --git a/src/lib/components/chat/ChatControls.svelte b/src/lib/components/chat/ChatControls.svelte index 4bd46bd17..dc672e195 100644 --- a/src/lib/components/chat/ChatControls.svelte +++ b/src/lib/components/chat/ChatControls.svelte @@ -1,14 +1,17 @@ -{#if !largeScreen} - {#if $showCallOverlay} -
-
- { - show = false; - }} - /> -
-
- {:else if show} - -
- { - show = false; - }} - {models} - bind:chatFiles - bind:params - /> -
-
- {/if} -{:else if show} -
-
-
- {#if $showCallOverlay} + + {#if !largeScreen} + {#if $showCallOverlay} +
+
{ - show = false; + showControls.set(false); }} /> - {:else} +
+
+ {:else if $showControls} + { + showControls.set(false); + }} + > +
{ - show = false; + showControls.set(false); }} {models} bind:chatFiles bind:params /> - {/if} +
+
+ {/if} + {:else if $showControls} +
+
+
+ {#if $showCallOverlay} + { + showControls.set(false); + }} + /> + {:else if $showOverview} + { + showControls.set(false); + }} + /> + {:else} + { + showControls.set(false); + }} + {models} + bind:chatFiles + bind:params + /> + {/if} +
-
-{/if} + {/if} + diff --git a/src/lib/components/chat/Messages/ProfileImage.svelte b/src/lib/components/chat/Messages/ProfileImage.svelte index 9d9f67a8d..7161ef92c 100644 --- a/src/lib/components/chat/Messages/ProfileImage.svelte +++ b/src/lib/components/chat/Messages/ProfileImage.svelte @@ -1,23 +1,11 @@
- profile +
diff --git a/src/lib/components/chat/Messages/ProfileImageBase.svelte b/src/lib/components/chat/Messages/ProfileImageBase.svelte new file mode 100644 index 000000000..dce2385a5 --- /dev/null +++ b/src/lib/components/chat/Messages/ProfileImageBase.svelte @@ -0,0 +1,21 @@ + + +profile diff --git a/src/lib/components/chat/Overview.svelte b/src/lib/components/chat/Overview.svelte new file mode 100644 index 000000000..2054e115b --- /dev/null +++ b/src/lib/components/chat/Overview.svelte @@ -0,0 +1,143 @@ + + +
+
+
{$i18n.t('Chat Overview')}
+ +
+ + {#if $nodes.length > 0} + + {/if} +
diff --git a/src/lib/components/chat/Overview/Flow.svelte b/src/lib/components/chat/Overview/Flow.svelte new file mode 100644 index 000000000..b704775c2 --- /dev/null +++ b/src/lib/components/chat/Overview/Flow.svelte @@ -0,0 +1,25 @@ + + + console.log('on node click', event.detail.node)} + oninit={() => { + console.log('Flow initialized'); + }} +> + + + diff --git a/src/lib/components/chat/Overview/Node.svelte b/src/lib/components/chat/Overview/Node.svelte new file mode 100644 index 000000000..daf4c309c --- /dev/null +++ b/src/lib/components/chat/Overview/Node.svelte @@ -0,0 +1,40 @@ + + +
+ {#if data.message.role === 'user'} +
+ +
+
{data.user.name}
+
{data.message.content}
+
+
+ {:else} +
+ + +
+
{data.model.name}
+
{data.message.content}
+
+
+ {/if} + + +
diff --git a/src/lib/components/common/Drawer.svelte b/src/lib/components/common/Drawer.svelte index 638175ea6..bfa93adf3 100644 --- a/src/lib/components/common/Drawer.svelte +++ b/src/lib/components/common/Drawer.svelte @@ -3,6 +3,8 @@ import { flyAndScale } from '$lib/utils/transitions'; import { fade, fly, slide } from 'svelte/transition'; + const dispatch = createEventDispatcher(); + export let show = false; export let size = 'md'; @@ -47,6 +49,10 @@ document.body.style.overflow = 'unset'; } + $: if (!show) { + dispatch('close'); + } + onDestroy(() => { show = false; if (modalElement) { diff --git a/src/lib/components/icons/Clipboard.svelte b/src/lib/components/icons/Clipboard.svelte new file mode 100644 index 000000000..b1a793a76 --- /dev/null +++ b/src/lib/components/icons/Clipboard.svelte @@ -0,0 +1,19 @@ + + + + + diff --git a/src/lib/components/icons/Map.svelte b/src/lib/components/icons/Map.svelte new file mode 100644 index 000000000..2ae0ce6a8 --- /dev/null +++ b/src/lib/components/icons/Map.svelte @@ -0,0 +1,19 @@ + + + + + diff --git a/src/lib/components/layout/Navbar.svelte b/src/lib/components/layout/Navbar.svelte index 000d7efa5..6b09bf064 100644 --- a/src/lib/components/layout/Navbar.svelte +++ b/src/lib/components/layout/Navbar.svelte @@ -8,7 +8,7 @@ mobile, settings, showArchivedChats, - showSettings, + showControls, showSidebar, user } from '$lib/stores'; @@ -22,6 +22,7 @@ import UserMenu from './Sidebar/UserMenu.svelte'; import MenuLines from '../icons/MenuLines.svelte'; import AdjustmentsHorizontal from '../icons/AdjustmentsHorizontal.svelte'; + import Map from '../icons/Map.svelte'; const i18n = getContext('i18n'); @@ -31,9 +32,7 @@ export let chat; export let selectedModels; - export let showModelSelector = true; - export let showControls = false; let showShareChatModal = false; let showDownloadChatModal = false; @@ -110,7 +109,7 @@