diff --git a/src/lib/components/Ai/Chat.svelte b/src/lib/components/Ai/Chat.svelte index acb98fe..51d1591 100644 --- a/src/lib/components/Ai/Chat.svelte +++ b/src/lib/components/Ai/Chat.svelte @@ -8,6 +8,7 @@ import Stop from '$lib/icons/Stop.svelte'; import { getTextFromElement, transform } from '$lib/markdown'; import type { Table } from '$lib/olap-engine'; + import { onMount } from 'svelte'; import ChangeModelBox from './ChangeModelBox.svelte'; import DatasetsBox from './DatasetsBox.svelte'; import Loader from './Loader.svelte'; @@ -42,8 +43,8 @@ let datasetSelectbox = $state>(); let textarea = $state(); let abortController: AbortController | undefined; - let chatMessages = $derived(messages.filter((m) => m.role === 'user' || m.role === 'assistant')); let modelSelectbox = $state>(); + let form = $state(); const uid = $props.id(); function getContextFromTable(table: Table): string { @@ -55,6 +56,8 @@ dataset ??= datasets?.at(0); }); + onMount(() => form?.dispatchEvent(new SubmitEvent('submit'))); + const client = $derived(new OpenAIClient(selectedModel.baseURL)); async function handleSubmit( @@ -62,14 +65,18 @@ ) { event.preventDefault(); - const data = new FormData(event.currentTarget); - let content = data.get('message'); - if (!content || typeof content !== 'string') return; - content = content.trim(); - if (!content.length) return; + const lastMessage = messages.at(-1); + if (lastMessage?.role !== 'user') { + const data = new FormData(event.currentTarget); + let content = data.get('message'); + if (!content || typeof content !== 'string') return; + content = content.trim(); + if (!content.length) return; + + message = ''; + messages = messages.concat({ role: 'user', content }); + } - message = ''; - messages = messages.concat({ content, role: 'user' }); loading = true; try { @@ -139,7 +146,7 @@ role="presentation" onclick={(e) => e.target === e.currentTarget && textarea?.focus()} > - {#each chatMessages as { role, content }, index} + {#each messages as { role, content }, index}

{#if role === 'user'} @@ -162,8 +169,8 @@ {:else}

You

- {#if chatMessages.length === 0 && dataset}{@render context(dataset)}{/if} -
+ {#if messages.length === 0 && dataset}{@render context(dataset)}{/if} +