From 80e2d4d4ee8388d5ea0c4231f711848d2e9389f0 Mon Sep 17 00:00:00 2001 From: Peter De-Ath Date: Sun, 17 Nov 2024 19:53:51 +0000 Subject: [PATCH 01/98] fix: user ID filtering in GroupTable query --- backend/open_webui/apps/webui/models/groups.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/backend/open_webui/apps/webui/models/groups.py b/backend/open_webui/apps/webui/models/groups.py index e687374ea8..3795466bca 100644 --- a/backend/open_webui/apps/webui/models/groups.py +++ b/backend/open_webui/apps/webui/models/groups.py @@ -11,7 +11,7 @@ from open_webui.apps.webui.models.files import FileMetadataResponse from pydantic import BaseModel, ConfigDict -from sqlalchemy import BigInteger, Column, String, Text, JSON +from sqlalchemy import BigInteger, Column, String, Text, JSON, func log = logging.getLogger(__name__) @@ -128,7 +128,8 @@ class GroupTable: return [ GroupModel.model_validate(group) for group in db.query(Group) - .filter(Group.user_ids.contains([user_id])) + .filter(func.json_array_length(Group.user_ids) > 0) # Ensure array exists + .filter(Group.user_ids.cast(String).like(f'%"{user_id}"%')) # String-based check .order_by(Group.updated_at.desc()) .all() ] From 9779bbfd8ed6bc5d561b01c15e778e5cc6481ad8 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Sun, 17 Nov 2024 14:00:37 -0800 Subject: [PATCH 02/98] fix: functions redirect --- src/routes/(app)/admin/functions/create/+page.svelte | 2 +- src/routes/(app)/admin/functions/edit/+page.svelte | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/routes/(app)/admin/functions/create/+page.svelte b/src/routes/(app)/admin/functions/create/+page.svelte index 1cfd9b8735..c3ac6cb061 100644 --- a/src/routes/(app)/admin/functions/create/+page.svelte +++ b/src/routes/(app)/admin/functions/create/+page.svelte @@ -49,7 +49,7 @@ functions.set(await getFunctions(localStorage.token)); models.set(await getModels(localStorage.token)); - await goto('/workspace/functions'); + await goto('/admin/functions'); } }; diff --git a/src/routes/(app)/admin/functions/edit/+page.svelte b/src/routes/(app)/admin/functions/edit/+page.svelte index 49052514fa..26989f9b16 100644 --- a/src/routes/(app)/admin/functions/edit/+page.svelte +++ b/src/routes/(app)/admin/functions/edit/+page.svelte @@ -59,7 +59,7 @@ if (id) { func = await getFunctionById(localStorage.token, id).catch((error) => { toast.error(error); - goto('/workspace/functions'); + goto('/admin/functions'); return null; }); From 6906a0bd2691cd6128cf4fc6b5dca5c3777e6aea Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Sun, 17 Nov 2024 14:03:51 -0800 Subject: [PATCH 03/98] fix: access control --- backend/open_webui/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/open_webui/main.py b/backend/open_webui/main.py index f639b932c0..37c94247a3 100644 --- a/backend/open_webui/main.py +++ b/backend/open_webui/main.py @@ -1147,7 +1147,7 @@ async def generate_chat_completions( # Check if user has access to the model if user.role == "user": model_info = Models.get_model_by_id(model_id) - if not ( + if model_info and not ( user.id == model_info.user_id or has_access( user.id, type="read", access_control=model_info.access_control From 7858be7fda94232d761cd9e6552a2c957f4aadec Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Sun, 17 Nov 2024 15:50:18 -0800 Subject: [PATCH 04/98] refac: admin models setting toast --- src/lib/components/admin/Settings/Models.svelte | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/lib/components/admin/Settings/Models.svelte b/src/lib/components/admin/Settings/Models.svelte index 42ffa238c0..645f3aecaa 100644 --- a/src/lib/components/admin/Settings/Models.svelte +++ b/src/lib/components/admin/Settings/Models.svelte @@ -21,6 +21,7 @@ import Spinner from '$lib/components/common/Spinner.svelte'; import ModelEditor from '$lib/components/workspace/Models/ModelEditor.svelte'; + import { toast } from 'svelte-sonner'; let importFiles; let modelsImportInputElement: HTMLInputElement; @@ -72,13 +73,21 @@ model.base_model_id = null; if (workspaceModels.find((m) => m.id === model.id)) { - await updateModelById(localStorage.token, model.id, model).catch((error) => { + const res = await updateModelById(localStorage.token, model.id, model).catch((error) => { return null; }); + + if (res) { + toast.success($i18n.t('Model updated successfully')); + } } else { - await createNewModel(localStorage.token, model).catch((error) => { + const res = await createNewModel(localStorage.token, model).catch((error) => { return null; }); + + if (res) { + toast.success($i18n.t('Model updated successfully')); + } } _models.set(await getModels(localStorage.token)); From 70c9d6fb86a94c196673c919e3109b8e262076a2 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Sun, 17 Nov 2024 15:51:34 -0800 Subject: [PATCH 05/98] refac: user menu --- src/lib/components/layout/Sidebar/UserMenu.svelte | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lib/components/layout/Sidebar/UserMenu.svelte b/src/lib/components/layout/Sidebar/UserMenu.svelte index 32c0d822c5..bddc211501 100644 --- a/src/lib/components/layout/Sidebar/UserMenu.svelte +++ b/src/lib/components/layout/Sidebar/UserMenu.svelte @@ -90,10 +90,10 @@ {#if role === 'admin'} - + - + {/if}
From 3fa23481c862d22121d391758aa253fc80b721d9 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Sun, 17 Nov 2024 15:58:06 -0800 Subject: [PATCH 06/98] refac --- src/lib/components/workspace/Models/ModelEditor.svelte | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lib/components/workspace/Models/ModelEditor.svelte b/src/lib/components/workspace/Models/ModelEditor.svelte index 55a727f977..c2fb9b6753 100644 --- a/src/lib/components/workspace/Models/ModelEditor.svelte +++ b/src/lib/components/workspace/Models/ModelEditor.svelte @@ -343,7 +343,10 @@
-
+
diff --git a/src/lib/components/workspace/Prompts/PromptEditor.svelte b/src/lib/components/workspace/Prompts/PromptEditor.svelte index 870548f459..9ca0287843 100644 --- a/src/lib/components/workspace/Prompts/PromptEditor.svelte +++ b/src/lib/components/workspace/Prompts/PromptEditor.svelte @@ -96,7 +96,7 @@ required /> -
+
diff --git a/src/lib/components/workspace/Tools/ToolkitEditor.svelte b/src/lib/components/workspace/Tools/ToolkitEditor.svelte index 76fed1534a..603c074ff7 100644 --- a/src/lib/components/workspace/Tools/ToolkitEditor.svelte +++ b/src/lib/components/workspace/Tools/ToolkitEditor.svelte @@ -223,7 +223,7 @@ class Tools:
-
+
From dd8bc65d03ba55e08dce6b8898cf24f5e9a5d2a3 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Sun, 17 Nov 2024 17:30:53 -0800 Subject: [PATCH 09/98] refac --- src/lib/components/workspace/common/AccessControlModal.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/components/workspace/common/AccessControlModal.svelte b/src/lib/components/workspace/common/AccessControlModal.svelte index 8dfc51f3d0..edde237dc8 100644 --- a/src/lib/components/workspace/common/AccessControlModal.svelte +++ b/src/lib/components/workspace/common/AccessControlModal.svelte @@ -15,7 +15,7 @@
- {$i18n.t('Share')} + {$i18n.t('Access Control')}
-{/key} +{/if} From bca9c71ed65dbed0665ffc39f9d4ce8ee3a83b25 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Sun, 17 Nov 2024 22:09:18 -0800 Subject: [PATCH 16/98] refac: styling --- src/lib/components/chat/MessageInput/InputMenu.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/components/chat/MessageInput/InputMenu.svelte b/src/lib/components/chat/MessageInput/InputMenu.svelte index 2929428ca6..c0afa92ec4 100644 --- a/src/lib/components/chat/MessageInput/InputMenu.svelte +++ b/src/lib/components/chat/MessageInput/InputMenu.svelte @@ -104,7 +104,7 @@ {/each}
-
+
{/if} {#if $config?.features?.enable_web_search} @@ -122,7 +122,7 @@ -
+
{/if} Date: Mon, 18 Nov 2024 05:17:35 -0800 Subject: [PATCH 17/98] fix: shared chat not updating --- backend/open_webui/apps/webui/models/chats.py | 21 ++++++++++++------- src/lib/components/chat/ShareChatModal.svelte | 2 +- src/lib/components/common/Modal.svelte | 2 +- src/routes/s/[id]/+page.svelte | 18 +++------------- 4 files changed, 19 insertions(+), 24 deletions(-) diff --git a/backend/open_webui/apps/webui/models/chats.py b/backend/open_webui/apps/webui/models/chats.py index f6a1e45483..21250add82 100644 --- a/backend/open_webui/apps/webui/models/chats.py +++ b/backend/open_webui/apps/webui/models/chats.py @@ -203,15 +203,22 @@ class ChatTable: def update_shared_chat_by_chat_id(self, chat_id: str) -> Optional[ChatModel]: try: with get_db() as db: - print("update_shared_chat_by_id") chat = db.get(Chat, chat_id) - print(chat) - chat.title = chat.title - chat.chat = chat.chat - db.commit() - db.refresh(chat) + shared_chat = ( + db.query(Chat).filter_by(user_id=f"shared-{chat_id}").first() + ) - return self.get_chat_by_id(chat.share_id) + if shared_chat is None: + return self.insert_shared_chat_by_chat_id(chat_id) + + shared_chat.title = chat.title + shared_chat.chat = chat.chat + + shared_chat.updated_at = int(time.time()) + db.commit() + db.refresh(shared_chat) + + return ChatModel.model_validate(shared_chat) except Exception: return None diff --git a/src/lib/components/chat/ShareChatModal.svelte b/src/lib/components/chat/ShareChatModal.svelte index e6ccc1323f..f7cc6d6be5 100644 --- a/src/lib/components/chat/ShareChatModal.svelte +++ b/src/lib/components/chat/ShareChatModal.svelte @@ -80,7 +80,7 @@ } - +
{$i18n.t('Share Chat')}
diff --git a/src/lib/components/common/Modal.svelte b/src/lib/components/common/Modal.svelte index 9d77f9e2f1..795d3d0f19 100644 --- a/src/lib/components/common/Modal.svelte +++ b/src/lib/components/common/Modal.svelte @@ -20,7 +20,7 @@ } else if (size === 'sm') { return 'w-[30rem]'; } else if (size === 'md') { - return 'w-[48rem]'; + return 'w-[42rem]'; } else { return 'w-[56rem]'; } diff --git a/src/routes/s/[id]/+page.svelte b/src/routes/s/[id]/+page.svelte index 8980972727..0d4579838a 100644 --- a/src/routes/s/[id]/+page.svelte +++ b/src/routes/s/[id]/+page.svelte @@ -6,7 +6,7 @@ import dayjs from 'dayjs'; import { settings, chatId, WEBUI_NAME, models } from '$lib/stores'; - import { convertMessagesToHistory } from '$lib/utils'; + import { convertMessagesToHistory, createMessagesList } from '$lib/utils'; import { getChatByShareId } from '$lib/apis/chats'; @@ -40,19 +40,7 @@ currentId: null }; - $: if (history.currentId !== null) { - let _messages = []; - - let currentMessage = history.messages[history.currentId]; - while (currentMessage !== null) { - _messages.unshift({ ...currentMessage }); - currentMessage = - currentMessage.parentId !== null ? history.messages[currentMessage.parentId] : null; - } - messages = _messages; - } else { - messages = []; - } + $: messages = createMessagesList(history, history.currentId); $: if ($page.params.id) { (async () => { @@ -138,7 +126,7 @@
-
+