From 230f787da1c193725a9a1aefcd0c87a8f445607e Mon Sep 17 00:00:00 2001 From: Jannik Streidl Date: Thu, 22 Feb 2024 11:54:55 +0100 Subject: [PATCH 01/22] first draft --- bun.lockb | Bin 123491 -> 124169 bytes .../components/chat/Settings/Interface.svelte | 29 ++++++- .../components/chat/WhatsChangedModal.svelte | 76 ++++++++++++++++++ src/lib/components/common/Modal.svelte | 6 +- src/lib/components/layout/Sidebar.svelte | 2 + src/lib/constants.ts | 24 +++++- src/lib/stores/index.ts | 13 +++ src/routes/(app)/+page.svelte | 5 ++ 8 files changed, 149 insertions(+), 6 deletions(-) create mode 100644 src/lib/components/chat/WhatsChangedModal.svelte diff --git a/bun.lockb b/bun.lockb index 7768741dc9fe75dcded806c170b1592d228e62ac..e0a038da06fc8f3a52efc9e870fa86124ec5ad14 100755 GIT binary patch delta 23913 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 delta 23691 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�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 R_4vCT&o%f1ecwm({|kQh9F+h7 diff --git a/src/lib/components/chat/Settings/Interface.svelte b/src/lib/components/chat/Settings/Interface.svelte index f2dfac5c..c4c3c063 100644 --- a/src/lib/components/chat/Settings/Interface.svelte +++ b/src/lib/components/chat/Settings/Interface.svelte @@ -1,7 +1,7 @@ + + +
+
+
{WEBUI_NAME}
+ + +
+
+ +
Release Notes
+
+ +
+ {$config && $config.version ? $config.version : WEB_UI_VERSION} +
+
+
+
+ {#if RELEASE_NOTES.length === 0} +
There are no notes given.
+ +
+ Check + + Open WebUI on GitHub for more information. +
+ {:else} + {#each RELEASE_NOTES as { title, description }} +
+
{title}
+
{description}
+
+ {/each} + {/if} +
+
+ +
+
+ + + diff --git a/src/lib/components/common/Modal.svelte b/src/lib/components/common/Modal.svelte index 52c6a6ee..7a4a9478 100644 --- a/src/lib/components/common/Modal.svelte +++ b/src/lib/components/common/Modal.svelte @@ -1,6 +1,6 @@
+ {#if $showWhatsChanged && !['pending'].includes($user.role) && $settings.enableWhatsChanged} + + {/if} 0} {initNewChat} {tags} {addTag} {deleteTag} />
Date: Thu, 22 Feb 2024 12:03:45 +0100 Subject: [PATCH 02/22] styling fix --- .../components/chat/Settings/Interface.svelte | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/src/lib/components/chat/Settings/Interface.svelte b/src/lib/components/chat/Settings/Interface.svelte index c4c3c063..4af5c0bf 100644 --- a/src/lib/components/chat/Settings/Interface.svelte +++ b/src/lib/components/chat/Settings/Interface.svelte @@ -184,25 +184,24 @@
-
+
+
+
Show "WhatsChanged" Modal on Startup
-
-
-
Show "WhatsChanged" Modal on Startup
- - + +
From e1e1cb9fd4b5e879e66195f913a0106b2eabc8fa Mon Sep 17 00:00:00 2001 From: Jannik Streidl Date: Thu, 22 Feb 2024 12:16:10 +0100 Subject: [PATCH 03/22] removed comments --- src/lib/components/chat/WhatsChangedModal.svelte | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/lib/components/chat/WhatsChangedModal.svelte b/src/lib/components/chat/WhatsChangedModal.svelte index 48ca07b5..372bb8b5 100644 --- a/src/lib/components/chat/WhatsChangedModal.svelte +++ b/src/lib/components/chat/WhatsChangedModal.svelte @@ -14,9 +14,7 @@
{WEBUI_NAME}
-
-
Release Notes
-
{$config && $config.version ? $config.version : WEB_UI_VERSION}
From 4bb5b3db0a7bfce5d7bdcf1688481e7a3f9ba0a8 Mon Sep 17 00:00:00 2001 From: Jannik Streidl Date: Thu, 22 Feb 2024 15:20:48 +0100 Subject: [PATCH 04/22] added animations --- package-lock.json | 21 +++++++++++++++-- package.json | 3 ++- .../components/chat/WhatsChangedModal.svelte | 11 ++++----- src/lib/components/common/Modal.svelte | 23 ++++++++++++++++--- 4 files changed, 46 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index ded65c9a..9fdfdb8a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "open-webui", - "version": "0.0.1", + "version": "v1.0.0-alpha.101", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "open-webui", - "version": "0.0.1", + "version": "v1.0.0-alpha.101", "dependencies": { "@sveltejs/adapter-node": "^1.3.1", "async": "^3.2.5", @@ -38,6 +38,7 @@ "prettier-plugin-svelte": "^2.10.1", "svelte": "^4.0.5", "svelte-check": "^3.4.3", + "svelte-confetti": "^1.3.2", "tailwindcss": "^3.3.3", "tslib": "^2.4.1", "typescript": "^5.0.0", @@ -3174,6 +3175,15 @@ "svelte": "^3.55.0 || ^4.0.0-next.0 || ^4.0.0" } }, + "node_modules/svelte-confetti": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svelte-confetti/-/svelte-confetti-1.3.2.tgz", + "integrity": "sha512-R+JwFTC7hIgWVA/OuXrkj384B7CMoceb0t9VacyW6dORTQg0pWojVBB8Bo3tM30cLEQE48Fekzqgx+XSzHESMA==", + "dev": true, + "peerDependencies": { + "svelte": "^4.0.0" + } + }, "node_modules/svelte-eslint-parser": { "version": "0.33.1", "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.33.1.tgz", @@ -5852,6 +5862,13 @@ "typescript": "^5.0.3" } }, + "svelte-confetti": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svelte-confetti/-/svelte-confetti-1.3.2.tgz", + "integrity": "sha512-R+JwFTC7hIgWVA/OuXrkj384B7CMoceb0t9VacyW6dORTQg0pWojVBB8Bo3tM30cLEQE48Fekzqgx+XSzHESMA==", + "dev": true, + "requires": {} + }, "svelte-eslint-parser": { "version": "0.33.1", "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.33.1.tgz", diff --git a/package.json b/package.json index edc4762f..ba5d2089 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "prettier-plugin-svelte": "^2.10.1", "svelte": "^4.0.5", "svelte-check": "^3.4.3", + "svelte-confetti": "^1.3.2", "tailwindcss": "^3.3.3", "tslib": "^2.4.1", "typescript": "^5.0.0", @@ -52,4 +53,4 @@ "tippy.js": "^6.3.7", "uuid": "^9.0.1" } -} \ No newline at end of file +} diff --git a/src/lib/components/chat/WhatsChangedModal.svelte b/src/lib/components/chat/WhatsChangedModal.svelte index 372bb8b5..85f5ef98 100644 --- a/src/lib/components/chat/WhatsChangedModal.svelte +++ b/src/lib/components/chat/WhatsChangedModal.svelte @@ -1,10 +1,9 @@ - +
{WEBUI_NAME}
-

- {#if RELEASE_NOTES.length === 0} + {#if !hasValidNotes}
There are no notes given.
From 9f950aea9c91cef87ed19293e7718bcc27e825c0 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Fri, 23 Feb 2024 00:30:26 -0800 Subject: [PATCH 07/22] feat: changelog.md --- CHANGELOG.md | 33 +++++++ backend/config.py | 8 ++ backend/main.py | 77 +++++++++++++++- package.json | 4 +- src/lib/apis/index.ts | 22 +++++ src/lib/components/ChangelogModal.svelte | 90 +++++++++++++++++++ .../components/chat/Settings/Interface.svelte | 31 +------ .../components/chat/WhatsChangedModal.svelte | 79 ---------------- src/lib/constants.ts | 23 ----- src/lib/stores/index.ts | 13 --- src/routes/(app)/+layout.svelte | 3 + src/routes/(app)/+page.svelte | 5 -- vite.config.ts | 3 +- 13 files changed, 237 insertions(+), 154 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 src/lib/components/ChangelogModal.svelte delete mode 100644 src/lib/components/chat/WhatsChangedModal.svelte diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..86e83fbd --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,33 @@ +# Changelog + +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.102] - 2024-02-22 + +### Added + +- **🖼️ Image Generation**: Generate Images using the stable-difusion-webui API. You can set this up in settings -> images. +- **📝 Change title generation prompt**: Change the promt used to generate titles for your chats. You can set this up in the settings -> interface. +- **🤖 Change embedding model**: Change the embedding model used to generate embeddings for your chats in the Dockerfile. Use any sentence transformer model from huggingface.co. +- **📢 CHANGELOG.md/Popup**: This popup will show you the latest changes. You can edit it in the constants.ts file. + +### Fixed + +- X, Y, and Z + +### Changed + +- X, Y, and Z + +### Removed + +- X, Y, and Z + +## [0.1.101] - 2024-02-21 + +### Added + +- X, Y, and Z diff --git a/backend/config.py b/backend/config.py index caf2cc45..51416b34 100644 --- a/backend/config.py +++ b/backend/config.py @@ -23,6 +23,14 @@ except ImportError: ENV = os.environ.get("ENV", "dev") +try: + with open(f"../package.json", "r") as f: + PACKAGE_DATA = json.load(f) +except: + PACKAGE_DATA = {"version": "0.0.0"} + +VERSION = PACKAGE_DATA["version"] + #################################### # DATA/FRONTEND BUILD DIR #################################### diff --git a/backend/main.py b/backend/main.py index d1fb0c20..9e4da784 100644 --- a/backend/main.py +++ b/backend/main.py @@ -1,5 +1,9 @@ +from bs4 import BeautifulSoup +import json +import markdown import time + from fastapi import FastAPI, Request from fastapi.staticfiles import StaticFiles from fastapi import HTTPException @@ -16,7 +20,7 @@ from apps.rag.main import app as rag_app from apps.web.main import app as webui_app -from config import ENV, FRONTEND_BUILD_DIR +from config import ENV, VERSION, FRONTEND_BUILD_DIR class SPAStaticFiles(StaticFiles): @@ -65,14 +69,85 @@ app.mount("/rag/api/v1", rag_app) @app.get("/api/config") async def get_app_config(): + return { "status": True, + "version": VERSION, "images": images_app.state.ENABLED, "default_models": webui_app.state.DEFAULT_MODELS, "default_prompt_suggestions": webui_app.state.DEFAULT_PROMPT_SUGGESTIONS, } +# Function to parse each section +def parse_section(section): + items = [] + for li in section.find_all("li"): + # Extract raw HTML string + raw_html = str(li) + + # Extract text without HTML tags + text = li.get_text(separator=" ", strip=True) + + # Split into title and content + parts = text.split(": ", 1) + title = parts[0].strip() if len(parts) > 1 else "" + content = parts[1].strip() if len(parts) > 1 else text + + items.append({"title": title, "content": content, "raw": raw_html}) + return items + + +@app.get("/api/changelog") +async def get_app_changelog(): + try: + with open("../CHANGELOG.md", "r") as file: + changelog_content = file.read() + # Convert markdown content to HTML + html_content = markdown.markdown(changelog_content) + + # Parse the HTML content + soup = BeautifulSoup(html_content, "html.parser") + + print(soup) + # Initialize JSON structure + changelog_json = {} + + # Iterate over each version + for version in soup.find_all("h2"): + version_number = ( + version.get_text().strip().split(" - ")[0][1:-1] + ) # Remove brackets + date = version.get_text().strip().split(" - ")[1] + + version_data = {"date": date} + + # Find the next sibling that is a h3 tag (section title) + current = version.find_next_sibling() + + print(current) + + while current and current.name != "h2": + if current.name == "h3": + section_title = current.get_text().lower() # e.g., "added", "fixed" + section_items = parse_section(current.find_next_sibling("ul")) + version_data[section_title] = section_items + + # Move to the next element + current = current.find_next_sibling() + + changelog_json[version_number] = version_data + + # print(changelog_json) + + # Return content as JSON string + return changelog_json + except FileNotFoundError: + return {"error": "readme.md not found"} + except Exception as e: + return {"error": f"An error occurred: {e}"} + + app.mount( "/", SPAStaticFiles(directory=FRONTEND_BUILD_DIR, html=True), diff --git a/package.json b/package.json index ba5d2089..30549fdd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "open-webui", - "version": "v1.0.0-alpha.101", + "version": "0.1.102", "private": true, "scripts": { "dev": "vite dev --host", @@ -53,4 +53,4 @@ "tippy.js": "^6.3.7", "uuid": "^9.0.1" } -} +} \ No newline at end of file diff --git a/src/lib/apis/index.ts b/src/lib/apis/index.ts index c20107ce..db29e548 100644 --- a/src/lib/apis/index.ts +++ b/src/lib/apis/index.ts @@ -21,3 +21,25 @@ export const getBackendConfig = async () => { return res; }; + +export const getChangelog = async () => { + let error = null; + + const res = await fetch(`${WEBUI_BASE_URL}/api/changelog`, { + method: 'GET', + headers: { + 'Content-Type': 'application/json' + } + }) + .then(async (res) => { + if (!res.ok) throw await res.json(); + return res.json(); + }) + .catch((err) => { + console.log(err); + error = err; + return null; + }); + + return res; +}; diff --git a/src/lib/components/ChangelogModal.svelte b/src/lib/components/ChangelogModal.svelte new file mode 100644 index 00000000..a20f4e69 --- /dev/null +++ b/src/lib/components/ChangelogModal.svelte @@ -0,0 +1,90 @@ + + + +
+
+
+ {WEBUI_NAME} + +
+ +
+
+
Release Notes
+
+
+ v{WEB_UI_VERSION} +
+
+
+
+
+ {#if changelog} + {#each Object.keys(changelog) as version} +
+ v{version} - {changelog[version].date} +
+ + {#each Object.keys(changelog[version]).filter((section) => section !== 'date') as section} +
+
{section}
+ +
+ {#each Object.keys(changelog[version][section]) as item} +
+
+ {changelog[version][section][item].title} +
+
{changelog[version][section][item].content}
+
+ {/each} +
+
+ {/each} + {/each} + {/if} +
+
+
+ +
+
+ diff --git a/src/lib/components/chat/Settings/Interface.svelte b/src/lib/components/chat/Settings/Interface.svelte index 8ddb0133..f2dfac5c 100644 --- a/src/lib/components/chat/Settings/Interface.svelte +++ b/src/lib/components/chat/Settings/Interface.svelte @@ -1,7 +1,7 @@ - - -
-
-
- {WEBUI_NAME} - -
- -
-
-
Release Notes
-
-
- {$config && $config.version ? $config.version : WEB_UI_VERSION} -
-
-
-
- {#if !hasValidNotes} -
There are no notes given.
- -
- Check - - Open WebUI on GitHub for more information. -
- {:else} - {#each RELEASE_NOTES as { title, description }} -
-
{title}
-
{description}
-
- {/each} - {/if} -
-
- -
-
- diff --git a/src/lib/constants.ts b/src/lib/constants.ts index ac5faed6..698f021f 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -12,29 +12,6 @@ export const IMAGES_API_BASE_URL = `${WEBUI_BASE_URL}/images/api/v1`; export const RAG_API_BASE_URL = `${WEBUI_BASE_URL}/rag/api/v1`; export const WEB_UI_VERSION = APP_VERSION; -export const RELEASE_NOTES = [ - { - title: ' 🖼️ Image Generation', - description: - 'Generate Images using the stable-difusion-webui API. You can set this up in settings -> images.' - }, - { - title: ' 📝 Change title generation prompt', - description: - 'Change the promt used to generate titles for your chats. You can set this up in the settings -> interface.' - }, - { - title: ' 🤖 Change embedding model', - description: - 'Change the embedding model used to generate embeddings for your chats in the Dockerfile. Use any sentence transformer model from huggingface.co.' - }, - { - title: ' 📢 This Whats Changed Popup', - description: - 'This popup will show you the latest changes. You can edit it in the constants.ts file.' - } - //... -]; export const REQUIRED_OLLAMA_VERSION = '0.1.16'; export const SUPPORTED_FILE_TYPE = [ diff --git a/src/lib/stores/index.ts b/src/lib/stores/index.ts index d9814368..7880235c 100644 --- a/src/lib/stores/index.ts +++ b/src/lib/stores/index.ts @@ -32,16 +32,3 @@ export const documents = writable([ export const settings = writable({}); export const showSettings = writable(false); -function createLocalStorageStore(key, startValue) { - const storedValue = localStorage.getItem(key); - const initialValue = storedValue ? JSON.parse(storedValue) : startValue; - - const store = writable(initialValue); - - store.subscribe((value) => { - localStorage.setItem(key, JSON.stringify(value)); - }); - - return store; -} -export const showWhatsChanged = createLocalStorageStore('showWhatsChanged', true); diff --git a/src/routes/(app)/+layout.svelte b/src/routes/(app)/+layout.svelte index af3bb31c..8ef8991d 100644 --- a/src/routes/(app)/+layout.svelte +++ b/src/routes/(app)/+layout.svelte @@ -31,6 +31,7 @@ import ShortcutsModal from '$lib/components/chat/ShortcutsModal.svelte'; import { getDocs } from '$lib/apis/documents'; import { getAllChatTags } from '$lib/apis/chats'; + import ChangelogModal from '$lib/components/ChangelogModal.svelte'; let ollamaVersion = ''; let loaded = false; @@ -348,6 +349,8 @@
+ {:else} + {/if}
- {#if $showWhatsChanged && !['pending'].includes($user.role) && $settings.enableWhatsChanged} - - {/if} 0} {initNewChat} {tags} {addTag} {deleteTag} />
Date: Fri, 23 Feb 2024 00:32:43 -0800 Subject: [PATCH 08/22] Update Modal.svelte --- src/lib/components/common/Modal.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/components/common/Modal.svelte b/src/lib/components/common/Modal.svelte index 8da1473d..bc46b608 100644 --- a/src/lib/components/common/Modal.svelte +++ b/src/lib/components/common/Modal.svelte @@ -35,13 +35,13 @@