diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index 304c88fefe..5b70c68eed 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -13,6 +13,7 @@ import { get, type Unsubscriber, type Writable } from 'svelte/store'; import type { i18n as i18nType } from 'i18next'; import { WEBUI_BASE_URL } from '$lib/constants'; + import equal from 'fast-deep-equal'; import { chatId, @@ -277,7 +278,7 @@ }; let oldSelectedModelIds = ['']; - $: if (JSON.stringify(selectedModelIds) !== JSON.stringify(oldSelectedModelIds)) { + $: if (!equal(selectedModelIds, oldSelectedModelIds)) { onSelectedModelIdsChange(); } @@ -674,7 +675,7 @@ if ( $selectedFolder && selectedModels.filter((modelId) => modelId !== '').length > 0 && - JSON.stringify($selectedFolder?.data?.model_ids) !== JSON.stringify(selectedModels) + !equal($selectedFolder?.data?.model_ids, selectedModels) ) { const res = await updateFolderById(localStorage.token, $selectedFolder.id, { data: { @@ -758,7 +759,7 @@ await tick(); if ( folder?.data?.model_ids && - JSON.stringify(selectedModels) !== JSON.stringify(folder.data.model_ids) + !equal(selectedModels, folder.data.model_ids) ) { selectedModels = folder.data.model_ids; @@ -1836,7 +1837,7 @@ chatFiles = chatFiles.filter( // Remove duplicates (item, index, array) => - array.findIndex((i) => JSON.stringify(i) === JSON.stringify(item)) === index + array.findIndex((i) => equal(i, item)) === index ); // Create user message @@ -1880,7 +1881,7 @@ $models.map((m) => m.id).includes(modelId) ? modelId : '' ); - if (JSON.stringify(selectedModels) !== JSON.stringify(_selectedModels)) { + if (!equal(selectedModels, _selectedModels)) { selectedModels = _selectedModels; } @@ -2177,7 +2178,7 @@ // Remove duplicates files = files.filter( (item, index, array) => - array.findIndex((i) => JSON.stringify(i) === JSON.stringify(item)) === index + array.findIndex((i) => equal(i, item)) === index ); scrollToBottom(); diff --git a/src/lib/components/chat/Messages/CodeBlock.svelte b/src/lib/components/chat/Messages/CodeBlock.svelte index 8bcd241e8e..7e38592533 100644 --- a/src/lib/components/chat/Messages/CodeBlock.svelte +++ b/src/lib/components/chat/Messages/CodeBlock.svelte @@ -15,6 +15,7 @@ } from '$lib/utils'; import 'highlight.js/styles/github-dark.min.css'; + import equal from 'fast-deep-equal'; import CodeEditor from '$lib/components/common/CodeEditor.svelte'; import SvgPanZoom from '$lib/components/common/SVGPanZoom.svelte'; @@ -391,7 +392,7 @@ $: if (token) { if (token.text !== _token?.text || token.raw !== _token?.raw) { _token = token; - } else if (JSON.stringify(token) !== JSON.stringify(_token)) { + } else if (!equal(token, _token)) { _token = token; } } diff --git a/src/lib/components/chat/ModelSelector.svelte b/src/lib/components/chat/ModelSelector.svelte index 588352e725..bd609b344f 100644 --- a/src/lib/components/chat/ModelSelector.svelte +++ b/src/lib/components/chat/ModelSelector.svelte @@ -6,6 +6,7 @@ import Tooltip from '../common/Tooltip.svelte'; import { updateUserSettings } from '$lib/apis/users'; + import equal from 'fast-deep-equal'; const i18n = getContext('i18n'); export let selectedModels = ['']; @@ -43,7 +44,7 @@ $models.map((m) => m.id).includes(model) ? model : '' ); - if (JSON.stringify(_selectedModels) !== JSON.stringify(selectedModels)) { + if (!equal(_selectedModels, selectedModels)) { selectedModels = _selectedModels; } } diff --git a/src/lib/components/common/RichTextInput.svelte b/src/lib/components/common/RichTextInput.svelte index 673e651c79..8c4006d280 100644 --- a/src/lib/components/common/RichTextInput.svelte +++ b/src/lib/components/common/RichTextInput.svelte @@ -1,6 +1,7 @@