From be3ab88c88b120bdf144b7ab56c95799ad4e6867 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Tue, 12 Mar 2024 00:26:14 -0700 Subject: [PATCH 01/11] fix: error handling --- backend/apps/ollama/main.py | 17 +++++++++++++---- backend/constants.py | 1 + 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/backend/apps/ollama/main.py b/backend/apps/ollama/main.py index 5ecbaa297..039c570b5 100644 --- a/backend/apps/ollama/main.py +++ b/backend/apps/ollama/main.py @@ -123,6 +123,7 @@ async def get_all_models(): map(lambda response: response["models"], responses) ) } + app.state.MODELS = {model["model"]: model for model in models["models"]} return models @@ -181,11 +182,19 @@ async def get_ollama_versions(url_idx: Optional[int] = None): responses = await asyncio.gather(*tasks) responses = list(filter(lambda x: x is not None, responses)) - lowest_version = min( - responses, key=lambda x: tuple(map(int, x["version"].split("."))) - ) + print(responses) - return {"version": lowest_version["version"]} + if len(responses) > 0: + lowest_version = min( + responses, key=lambda x: tuple(map(int, x["version"].split("."))) + ) + + return {"version": lowest_version["version"]} + else: + raise HTTPException( + status_code=500, + detail=ERROR_MESSAGES.OLLAMA_NOT_FOUND, + ) else: url = app.state.OLLAMA_BASE_URLS[url_idx] try: diff --git a/backend/constants.py b/backend/constants.py index eacf8a20f..05bdebc54 100644 --- a/backend/constants.py +++ b/backend/constants.py @@ -52,3 +52,4 @@ class ERROR_MESSAGES(str, Enum): MODEL_NOT_FOUND = lambda name="": f"Model '{name}' was not found" OPENAI_NOT_FOUND = lambda name="": f"OpenAI API was not found" + OLLAMA_NOT_FOUND = "WebUI could not connect to Ollama" From 26a187f5ac2ebc28849f90127d2b96b6935ae56f Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Tue, 12 Mar 2024 00:26:53 -0700 Subject: [PATCH 02/11] refac: print removed --- backend/apps/ollama/main.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/backend/apps/ollama/main.py b/backend/apps/ollama/main.py index 039c570b5..2e236f343 100644 --- a/backend/apps/ollama/main.py +++ b/backend/apps/ollama/main.py @@ -182,8 +182,6 @@ async def get_ollama_versions(url_idx: Optional[int] = None): responses = await asyncio.gather(*tasks) responses = list(filter(lambda x: x is not None, responses)) - print(responses) - if len(responses) > 0: lowest_version = min( responses, key=lambda x: tuple(map(int, x["version"].split("."))) From 97842d037ee537478a345ee53e7c97cc16c83fb3 Mon Sep 17 00:00:00 2001 From: Silentoplayz <50341825+Silentoplayz@users.noreply.github.com> Date: Tue, 12 Mar 2024 05:34:00 -0400 Subject: [PATCH 03/11] Update tailwind.css - Combined font-family declaration: Instead of repeating the font-family declaration for both `html` and `pre`, it's combined into one declaration to save space and avoid repetition. - Removed unnecessary `pre` styling: The `pre` styling for `font-family` is removed as the font-family is already defined in the `html` rule. The code is more concise and easier to read. --- src/tailwind.css | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/tailwind.css b/src/tailwind.css index 60b6b04c4..6c69643d5 100644 --- a/src/tailwind.css +++ b/src/tailwind.css @@ -3,16 +3,13 @@ @tailwind utilities; @layer base { - html { - font-family: -apple-system, 'Arimo', ui-sans-serif, system-ui, 'Segoe UI', Roboto, Ubuntu, - Cantarell, 'Noto Sans', sans-serif, 'Helvetica Neue', Arial, 'Apple Color Emoji', - 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; - } + html, pre { + font-family: -apple-system, 'Arimo', ui-sans-serif, system-ui, 'Segoe UI', Roboto, Ubuntu, + Cantarell, 'Noto Sans', sans-serif, 'Helvetica Neue', Arial, 'Apple Color Emoji', + 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; + } - pre { - font-family: -apple-system, 'Arimo', ui-sans-serif, system-ui, 'Segoe UI', Roboto, Ubuntu, - Cantarell, 'Noto Sans', sans-serif, 'Helvetica Neue', Arial, 'Apple Color Emoji', - 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; - white-space: pre-wrap; - } + pre { + white-space: pre-wrap; + } } From cc4b82a3f3df323d3103341c1533a24661b841b0 Mon Sep 17 00:00:00 2001 From: Silentoplayz <50341825+Silentoplayz@users.noreply.github.com> Date: Tue, 12 Mar 2024 06:08:03 -0400 Subject: [PATCH 04/11] Update tailwind.css Fix spacing --- src/tailwind.css | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/tailwind.css b/src/tailwind.css index 6c69643d5..10aca3482 100644 --- a/src/tailwind.css +++ b/src/tailwind.css @@ -3,11 +3,11 @@ @tailwind utilities; @layer base { - html, pre { - font-family: -apple-system, 'Arimo', ui-sans-serif, system-ui, 'Segoe UI', Roboto, Ubuntu, - Cantarell, 'Noto Sans', sans-serif, 'Helvetica Neue', Arial, 'Apple Color Emoji', - 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; - } + html, pre { + font-family: -apple-system, 'Arimo', ui-sans-serif, system-ui, 'Segoe UI', Roboto, Ubuntu, + Cantarell, 'Noto Sans', sans-serif, 'Helvetica Neue', Arial, 'Apple Color Emoji', + 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; + } pre { white-space: pre-wrap; From 7f78e584883994c7b8bb12d0d8ec88289074def7 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Tue, 12 Mar 2024 13:35:30 -0700 Subject: [PATCH 05/11] refac: image generation error handling --- backend/apps/images/main.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/backend/apps/images/main.py b/backend/apps/images/main.py index 31bfc0f5d..e14b0f6a7 100644 --- a/backend/apps/images/main.py +++ b/backend/apps/images/main.py @@ -293,6 +293,7 @@ def generate_image( "size": form_data.size if form_data.size else app.state.IMAGE_SIZE, "response_format": "b64_json", } + r = requests.post( url=f"https://api.openai.com/v1/images/generations", json=data, @@ -300,7 +301,6 @@ def generate_image( ) r.raise_for_status() - res = r.json() images = [] @@ -356,7 +356,10 @@ def generate_image( return images except Exception as e: - print(e) - if r: - print(r.json()) - raise HTTPException(status_code=400, detail=ERROR_MESSAGES.DEFAULT(e)) + error = e + + if r != None: + data = r.json() + if "error" in data: + error = data["error"]["message"] + raise HTTPException(status_code=400, detail=ERROR_MESSAGES.DEFAULT(error)) From 5a567ce4d0cd2fe65316000f935764d4e63a4c4b Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Tue, 12 Mar 2024 13:43:49 -0700 Subject: [PATCH 06/11] fix: message after image generation --- src/routes/(app)/+page.svelte | 5 +++-- src/routes/(app)/c/[id]/+page.svelte | 12 +++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/routes/(app)/+page.svelte b/src/routes/(app)/+page.svelte index 07fcc1768..924d0c5bd 100644 --- a/src/routes/(app)/+page.svelte +++ b/src/routes/(app)/+page.svelte @@ -308,7 +308,7 @@ .map((file) => file.url.slice(file.url.indexOf(',') + 1)); // Add images array only if it contains elements - if (imageUrls && imageUrls.length > 0) { + if (imageUrls && imageUrls.length > 0 && message.role === 'user') { baseMessage.images = imageUrls; } @@ -532,7 +532,8 @@ .filter((message) => message) .map((message, idx, arr) => ({ role: message.role, - ...(message.files?.filter((file) => file.type === 'image').length > 0 ?? false + ...((message.files?.filter((file) => file.type === 'image').length > 0 ?? false) && + message.role === 'user' ? { content: [ { diff --git a/src/routes/(app)/c/[id]/+page.svelte b/src/routes/(app)/c/[id]/+page.svelte index 4bc6acfa2..56bd2f89b 100644 --- a/src/routes/(app)/c/[id]/+page.svelte +++ b/src/routes/(app)/c/[id]/+page.svelte @@ -321,7 +321,7 @@ .map((file) => file.url.slice(file.url.indexOf(',') + 1)); // Add images array only if it contains elements - if (imageUrls && imageUrls.length > 0) { + if (imageUrls && imageUrls.length > 0 && message.role === 'user') { baseMessage.images = imageUrls; } @@ -545,7 +545,8 @@ .filter((message) => message) .map((message, idx, arr) => ({ role: message.role, - ...(message.files?.filter((file) => file.type === 'image').length > 0 ?? false + ...((message.files?.filter((file) => file.type === 'image').length > 0 ?? false) && + message.role === 'user' ? { content: [ { @@ -688,7 +689,12 @@ if (messages.length == 2) { window.history.replaceState(history.state, '', `/c/${_chatId}`); - await setChatTitle(_chatId, userPrompt); + + if ($settings?.titleAutoGenerateModel) { + await generateChatTitle(_chatId, userPrompt); + } else { + await setChatTitle(_chatId, userPrompt); + } } }; From 3790790a18f565f64df090ba911e3f04781fa332 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Tue, 12 Mar 2024 13:47:49 -0700 Subject: [PATCH 07/11] fix: possible fix for #1139 --- src/routes/(app)/+page.svelte | 4 +++- src/routes/(app)/c/[id]/+page.svelte | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/routes/(app)/+page.svelte b/src/routes/(app)/+page.svelte index 924d0c5bd..926681b14 100644 --- a/src/routes/(app)/+page.svelte +++ b/src/routes/(app)/+page.svelte @@ -140,7 +140,9 @@ }; const scrollToBottom = () => { - messagesContainerElement.scrollTop = messagesContainerElement.scrollHeight; + if (messagesContainerElement) { + messagesContainerElement.scrollTop = messagesContainerElement.scrollHeight; + } }; ////////////////////////// diff --git a/src/routes/(app)/c/[id]/+page.svelte b/src/routes/(app)/c/[id]/+page.svelte index 56bd2f89b..081dac761 100644 --- a/src/routes/(app)/c/[id]/+page.svelte +++ b/src/routes/(app)/c/[id]/+page.svelte @@ -160,7 +160,9 @@ }; const scrollToBottom = () => { - messagesContainerElement.scrollTop = messagesContainerElement.scrollHeight; + if (messagesContainerElement) { + messagesContainerElement.scrollTop = messagesContainerElement.scrollHeight; + } }; ////////////////////////// From 9ee0feae3249644327b0f350c4af04319a2f5764 Mon Sep 17 00:00:00 2001 From: Joseph C Wang Date: Thu, 14 Mar 2024 17:17:52 +0800 Subject: [PATCH 08/11] fix typo in uploading blob to ollama --- backend/apps/web/routers/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/apps/web/routers/utils.py b/backend/apps/web/routers/utils.py index fbb350cf2..0d34b0405 100644 --- a/backend/apps/web/routers/utils.py +++ b/backend/apps/web/routers/utils.py @@ -75,7 +75,7 @@ async def download_file_stream(url, file_path, file_name, chunk_size=1024 * 1024 hashed = calculate_sha256(file) file.seek(0) - url = f"{OLLAMA_BASE_URLS[0]}/blobs/sha256:{hashed}" + url = f"{OLLAMA_BASE_URLS[0]}/api/blobs/sha256:{hashed}" response = requests.post(url, data=file) if response.ok: From cd92cf0da5302bf3bc7694866e76b811f35b1ab0 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Fri, 15 Mar 2024 02:40:44 -0700 Subject: [PATCH 09/11] fix: image settings save issue --- src/lib/components/chat/Settings/Images.svelte | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/lib/components/chat/Settings/Images.svelte b/src/lib/components/chat/Settings/Images.svelte index a6463691f..8f75c0c92 100644 --- a/src/lib/components/chat/Settings/Images.svelte +++ b/src/lib/components/chat/Settings/Images.svelte @@ -116,11 +116,13 @@ class="flex flex-col h-full justify-between space-y-3 text-sm" on:submit|preventDefault={async () => { loading = true; - await updateOpenAIKey(localStorage.token, OPENAI_API_KEY); + + if (imageGenerationEngine === 'openai') { + await updateOpenAIKey(localStorage.token, OPENAI_API_KEY); + } await updateDefaultImageGenerationModel(localStorage.token, selectedModel); - await updateDefaultImageGenerationModel(localStorage.token, selectedModel); await updateImageSize(localStorage.token, imageSize).catch((error) => { toast.error(error); return null; From 072b499a50a8ec2387b5215e27afb3b3fe3b8123 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Fri, 15 Mar 2024 13:34:52 -0700 Subject: [PATCH 10/11] fix: backslash rag content issue --- backend/apps/rag/utils.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/backend/apps/rag/utils.py b/backend/apps/rag/utils.py index b2da7d90c..a3537d4d3 100644 --- a/backend/apps/rag/utils.py +++ b/backend/apps/rag/utils.py @@ -91,9 +91,8 @@ def query_collection( def rag_template(template: str, context: str, query: str): - template = re.sub(r"\[context\]", context, template) - template = re.sub(r"\[query\]", query, template) - + template = template.replace("[context]", context) + template = template.replace("[query]", query) return template From 51ef5cfa45b8595ed3130d8da82751bdb1716a6c Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Fri, 15 Mar 2024 13:46:43 -0700 Subject: [PATCH 11/11] doc: changelog --- CHANGELOG.md | 8 ++++++++ package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d57ba400c..638417b98 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.1.112] - 2024-03-15 + +### Fixed + +- 🗨️ Resolved chat malfunction after image generation. +- 🎨 Fixed various RAG issues. +- 🧪 Rectified experimental broken GGUF upload logic. + ## [0.1.111] - 2024-03-10 ### Added diff --git a/package.json b/package.json index 572443a54..d7be99999 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "open-webui", - "version": "0.1.111", + "version": "0.1.112", "private": true, "scripts": { "dev": "vite dev --host",