diff --git a/src/lib/components/chat/Messages/UserMessage.svelte b/src/lib/components/chat/Messages/UserMessage.svelte
index db1d31548..7a2134cc2 100644
--- a/src/lib/components/chat/Messages/UserMessage.svelte
+++ b/src/lib/components/chat/Messages/UserMessage.svelte
@@ -13,8 +13,10 @@
import FileItem from '$lib/components/common/FileItem.svelte';
import Markdown from './Markdown.svelte';
import Image from '$lib/components/common/Image.svelte';
+ import localizedFormat from 'dayjs/plugin/localizedFormat';
const i18n = getContext('i18n');
+ dayjs.extend(localizedFormat);
export let user;
@@ -112,7 +114,7 @@
-
+
{formatDate(message.timestamp * 1000)}
diff --git a/src/lib/components/chat/Placeholder.svelte b/src/lib/components/chat/Placeholder.svelte
index 336e3002c..56916a8e5 100644
--- a/src/lib/components/chat/Placeholder.svelte
+++ b/src/lib/components/chat/Placeholder.svelte
@@ -35,6 +35,7 @@
export let selectedToolIds = [];
export let imageGenerationEnabled = false;
+ export let codeInterpreterEnabled = false;
export let webSearchEnabled = false;
let models = [];
@@ -196,6 +197,7 @@
bind:autoScroll
bind:selectedToolIds
bind:imageGenerationEnabled
+ bind:codeInterpreterEnabled
bind:webSearchEnabled
bind:atSelectedModel
{transparentBackground}
diff --git a/src/lib/components/chat/Settings/Audio.svelte b/src/lib/components/chat/Settings/Audio.svelte
index e56fe056a..3f9fa9335 100644
--- a/src/lib/components/chat/Settings/Audio.svelte
+++ b/src/lib/components/chat/Settings/Audio.svelte
@@ -39,7 +39,7 @@
}, 100);
} else {
const res = await _getVoices(localStorage.token).catch((e) => {
- toast.error(e);
+ toast.error(`${e}`);
});
if (res) {
diff --git a/src/lib/components/chat/Settings/Personalization/ManageModal.svelte b/src/lib/components/chat/Settings/Personalization/ManageModal.svelte
index e4613b5fe..d45d92288 100644
--- a/src/lib/components/chat/Settings/Personalization/ManageModal.svelte
+++ b/src/lib/components/chat/Settings/Personalization/ManageModal.svelte
@@ -11,8 +11,10 @@
import Tooltip from '$lib/components/common/Tooltip.svelte';
import { error } from '@sveltejs/kit';
import EditMemoryModal from './EditMemoryModal.svelte';
+ import localizedFormat from 'dayjs/plugin/localizedFormat';
const i18n = getContext('i18n');
+ dayjs.extend(localizedFormat);
export let show = false;
@@ -84,9 +86,7 @@
- {dayjs(memory.updated_at * 1000).format(
- $i18n.t('MMMM DD, YYYY hh:mm:ss A')
- )}
+ {dayjs(memory.updated_at * 1000).format('LLL')}
|
diff --git a/src/lib/components/common/Collapsible.svelte b/src/lib/components/common/Collapsible.svelte
index 0e0c0a4df..4f6b1ea95 100644
--- a/src/lib/components/common/Collapsible.svelte
+++ b/src/lib/components/common/Collapsible.svelte
@@ -80,6 +80,12 @@
{:else}
{$i18n.t('Thinking...')}
{/if}
+ {:else if attributes?.type === 'code_interpreter'}
+ {#if attributes?.done === 'true'}
+ {$i18n.t('Analyzed')}
+ {:else}
+ {$i18n.t('Analyzing...')}
+ {/if}
{:else}
{title}
{/if}
diff --git a/src/lib/components/common/Textarea.svelte b/src/lib/components/common/Textarea.svelte
index bcd5b4d75..227834d4a 100644
--- a/src/lib/components/common/Textarea.svelte
+++ b/src/lib/components/common/Textarea.svelte
@@ -3,68 +3,49 @@
export let value = '';
export let placeholder = '';
+ export let rows = 1;
+ export let required = false;
export let className =
- 'w-full rounded-lg px-3 py-2 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-none resize-none h-full';
-
- export let onKeydown: Function = () => {};
+ 'w-full rounded-lg px-3 py-2 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-none h-full';
let textareaElement;
- $: if (textareaElement) {
- if (textareaElement.innerText !== value && value !== '') {
- textareaElement.innerText = value ?? '';
- }
- }
-
// Adjust height on mount and after setting the element.
onMount(async () => {
await tick();
+ resize();
+
+ requestAnimationFrame(() => {
+ // setInterveal to cehck until textareaElement is set
+ const interval = setInterval(() => {
+ if (textareaElement) {
+ clearInterval(interval);
+ resize();
+ }
+ }, 100);
+ });
});
- // Handle paste event to ensure only plaintext is pasted
- function handlePaste(event: ClipboardEvent) {
- event.preventDefault(); // Prevent the default paste action
- const clipboardData = event.clipboardData?.getData('text/plain'); // Get plaintext from clipboard
-
- // Insert plaintext into the textarea
- document.execCommand('insertText', false, clipboardData);
- }
+ const resize = () => {
+ if (textareaElement) {
+ textareaElement.style.height = '';
+ textareaElement.style.height = `${textareaElement.scrollHeight}px`;
+ }
+ };
- {
- const text = textareaElement.innerText;
- if (text === '\n') {
- value = '';
- return;
- }
-
- value = text;
+ bind:value
+ {placeholder}
+ class={className}
+ style="field-sizing: content;"
+ {rows}
+ {required}
+ on:input={(e) => {
+ resize();
+ }}
+ on:focus={() => {
+ resize();
}}
- on:paste={handlePaste}
- on:keydown={onKeydown}
- data-placeholder={placeholder}
/>
-
-
diff --git a/src/lib/components/icons/CommandLineSolid.svelte b/src/lib/components/icons/CommandLineSolid.svelte
new file mode 100644
index 000000000..e25eba99c
--- /dev/null
+++ b/src/lib/components/icons/CommandLineSolid.svelte
@@ -0,0 +1,11 @@
+
+
+
diff --git a/src/lib/components/layout/Sidebar/ArchivedChatsModal.svelte b/src/lib/components/layout/Sidebar/ArchivedChatsModal.svelte
index 6626cfed7..e0af4e1c2 100644
--- a/src/lib/components/layout/Sidebar/ArchivedChatsModal.svelte
+++ b/src/lib/components/layout/Sidebar/ArchivedChatsModal.svelte
@@ -4,6 +4,9 @@
import { toast } from 'svelte-sonner';
import dayjs from 'dayjs';
import { getContext, createEventDispatcher } from 'svelte';
+ import localizedFormat from 'dayjs/plugin/localizedFormat';
+
+ dayjs.extend(localizedFormat);
const dispatch = createEventDispatcher();
@@ -159,7 +162,7 @@
- {dayjs(chat.created_at * 1000).format($i18n.t('MMMM DD, YYYY HH:mm'))}
+ {dayjs(chat.created_at * 1000).format('LLL')}
|
diff --git a/src/lib/components/layout/Sidebar/ChatItem.svelte b/src/lib/components/layout/Sidebar/ChatItem.svelte
index 748e1adb9..1e9224093 100644
--- a/src/lib/components/layout/Sidebar/ChatItem.svelte
+++ b/src/lib/components/layout/Sidebar/ChatItem.svelte
@@ -87,7 +87,13 @@
};
const cloneChatHandler = async (id) => {
- const res = await cloneChatById(localStorage.token, id).catch((error) => {
+ const res = await cloneChatById(
+ localStorage.token,
+ id,
+ $i18n.t('Clone of {{TITLE}}', {
+ TITLE: title
+ })
+ ).catch((error) => {
toast.error(`${error}`);
return null;
});
diff --git a/src/lib/components/playground/Chat.svelte b/src/lib/components/playground/Chat.svelte
index 5b89003c8..08a293f5b 100644
--- a/src/lib/components/playground/Chat.svelte
+++ b/src/lib/components/playground/Chat.svelte
@@ -33,6 +33,7 @@
let loading = false;
let stopResponseFlag = false;
+ let systemTextareaElement: HTMLTextAreaElement;
let messagesContainerElement: HTMLDivElement;
let showSystem = false;
@@ -58,8 +59,29 @@
console.log('stopResponse');
};
+ const resizeSystemTextarea = async () => {
+ await tick();
+ if (systemTextareaElement) {
+ systemTextareaElement.style.height = '';
+ systemTextareaElement.style.height = Math.min(systemTextareaElement.scrollHeight, 555) + 'px';
+ }
+ };
+
+ $: if (showSystem) {
+ resizeSystemTextarea();
+ }
+
const chatCompletionHandler = async () => {
+ if (selectedModelId === '') {
+ toast.error($i18n.t('Please select a model.'));
+ return;
+ }
+
const model = $models.find((model) => model.id === selectedModelId);
+ if (!model) {
+ selectedModelId = '';
+ return;
+ }
const [res, controller] = await chatCompletion(
localStorage.token,
@@ -258,10 +280,13 @@
diff --git a/src/lib/components/playground/Chat/Message.svelte b/src/lib/components/playground/Chat/Message.svelte
new file mode 100644
index 000000000..875e78d49
--- /dev/null
+++ b/src/lib/components/playground/Chat/Message.svelte
@@ -0,0 +1,76 @@
+
+
+
+
+
+ {$i18n.t(message.role)}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/lib/components/playground/Chat/Messages.svelte b/src/lib/components/playground/Chat/Messages.svelte
index 69574632f..97bc32469 100644
--- a/src/lib/components/playground/Chat/Messages.svelte
+++ b/src/lib/components/playground/Chat/Messages.svelte
@@ -1,77 +1,20 @@
{#each messages as message, idx}
-
-
-
- {$i18n.t(message.role)}
-
-
-
-
-
-
-
-
-
-
-
-
+ {
+ messages = messages.filter((message, messageIdx) => messageIdx !== idx);
+ }}
+ />
{/each}
diff --git a/src/lib/components/workspace/Knowledge.svelte b/src/lib/components/workspace/Knowledge.svelte
index c5ea4ad7f..ff6cea219 100644
--- a/src/lib/components/workspace/Knowledge.svelte
+++ b/src/lib/components/workspace/Knowledge.svelte
@@ -54,7 +54,7 @@
const deleteHandler = async (item) => {
const res = await deleteKnowledgeById(localStorage.token, item.id).catch((e) => {
- toast.error(e);
+ toast.error(`${e}`);
});
if (res) {
diff --git a/src/lib/components/workspace/Knowledge/CreateKnowledgeBase.svelte b/src/lib/components/workspace/Knowledge/CreateKnowledgeBase.svelte
index 5d1e79808..cb75c1cbf 100644
--- a/src/lib/components/workspace/Knowledge/CreateKnowledgeBase.svelte
+++ b/src/lib/components/workspace/Knowledge/CreateKnowledgeBase.svelte
@@ -31,7 +31,7 @@
description,
accessControl
).catch((e) => {
- toast.error(e);
+ toast.error(`${e}`);
});
if (res) {
@@ -112,7 +112,7 @@
diff --git a/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte b/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte
index 96bdacc31..5b1833450 100644
--- a/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte
+++ b/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte
@@ -149,7 +149,7 @@
try {
const uploadedFile = await uploadFile(localStorage.token, file).catch((e) => {
- toast.error(e);
+ toast.error(`${e}`);
return null;
});
@@ -169,7 +169,7 @@
toast.error($i18n.t('Failed to upload file.'));
}
} catch (e) {
- toast.error(e);
+ toast.error(`${e}`);
}
};
@@ -339,7 +339,7 @@
const syncDirectoryHandler = async () => {
if ((knowledge?.files ?? []).length > 0) {
const res = await resetKnowledgeById(localStorage.token, id).catch((e) => {
- toast.error(e);
+ toast.error(`${e}`);
});
if (res) {
@@ -357,7 +357,7 @@
const addFileHandler = async (fileId) => {
const updatedKnowledge = await addFileToKnowledgeById(localStorage.token, id, fileId).catch(
(e) => {
- toast.error(e);
+ toast.error(`${e}`);
return null;
}
);
@@ -386,7 +386,7 @@
}
} catch (e) {
console.error('Error in deleteFileHandler:', e);
- toast.error(e);
+ toast.error(`${e}`);
}
};
@@ -395,7 +395,7 @@
const content = selectedFile.data.content;
const res = updateFileDataContentById(localStorage.token, fileId, content).catch((e) => {
- toast.error(e);
+ toast.error(`${e}`);
});
const updatedKnowledge = await updateFileFromKnowledgeById(
@@ -403,7 +403,7 @@
id,
fileId
).catch((e) => {
- toast.error(e);
+ toast.error(`${e}`);
});
if (res && updatedKnowledge) {
@@ -430,7 +430,7 @@
description: knowledge.description,
access_control: knowledge.access_control
}).catch((e) => {
- toast.error(e);
+ toast.error(`${e}`);
});
if (res) {
@@ -522,7 +522,7 @@
id = $page.params.id;
const res = await getKnowledgeById(localStorage.token, id).catch((e) => {
- toast.error(e);
+ toast.error(`${e}`);
return null;
});
diff --git a/src/lib/components/workspace/Models.svelte b/src/lib/components/workspace/Models.svelte
index f7d7061dd..d2f54eb0c 100644
--- a/src/lib/components/workspace/Models.svelte
+++ b/src/lib/components/workspace/Models.svelte
@@ -60,7 +60,7 @@
const deleteModelHandler = async (model) => {
const res = await deleteModelById(localStorage.token, model.id).catch((e) => {
- toast.error(e);
+ toast.error(`${e}`);
return null;
});
diff --git a/src/lib/components/workspace/Models/ModelEditor.svelte b/src/lib/components/workspace/Models/ModelEditor.svelte
index 58628f0d1..785238498 100644
--- a/src/lib/components/workspace/Models/ModelEditor.svelte
+++ b/src/lib/components/workspace/Models/ModelEditor.svelte
@@ -531,7 +531,7 @@
diff --git a/src/lib/components/workspace/common/ValvesModal.svelte b/src/lib/components/workspace/common/ValvesModal.svelte
index 1d022f3d9..712a96f8d 100644
--- a/src/lib/components/workspace/common/ValvesModal.svelte
+++ b/src/lib/components/workspace/common/ValvesModal.svelte
@@ -136,7 +136,7 @@
|