diff --git a/backend/open_webui/utils/chat_importer.py b/backend/open_webui/utils/chat_importer.py new file mode 100644 index 0000000000..33efddc44a Binary files /dev/null and b/backend/open_webui/utils/chat_importer.py differ diff --git a/backend/open_webui/utils/summary.py b/backend/open_webui/utils/summary.py index 9ac493a1b3..bb1b923421 100644 Binary files a/backend/open_webui/utils/summary.py and b/backend/open_webui/utils/summary.py differ diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index cabba95262..fbf31eac73 100644 Binary files a/src/lib/components/chat/Chat.svelte and b/src/lib/components/chat/Chat.svelte differ diff --git a/src/lib/utils/index.ts b/src/lib/utils/index.ts index 72eb54ee42..2857eeabb1 100644 --- a/src/lib/utils/index.ts +++ b/src/lib/utils/index.ts @@ -1,4 +1,4 @@ -import { v4 as uuidv4 } from 'uuid'; +import { v4 as uuidv4 } from 'uuid'; import sha256 from 'js-sha256'; import { WEBUI_BASE_URL } from '$lib/constants'; @@ -213,6 +213,10 @@ export const convertMessagesToHistory = (messages) => { currentId: null }; + if (!messages || !Array.isArray(messages)) { + return history; + } + let parentMessageId = null; let messageId = null; @@ -699,7 +703,7 @@ export const getUserPosition = async (raw = false) => { } }; -const convertOpenAIMessages = (convo) => { +export const convertOpenAIMessages = (convo) => { // Parse OpenAI chat messages and create chat dictionary for creating new chats const mapping = convo['mapping']; const messages = []; @@ -765,7 +769,7 @@ const fragmentsToContent = (fragments: any) => { .join('\n\n'); }; -const convertDeepseekMessages = (convo) => { +export const convertDeepseekMessages = (convo) => { // Parse DeepSeek chat messages (mapping + fragments) into chat dictionary const mapping = convo['mapping']; const messages = [];