diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c976a7a..d61e40c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,23 @@ 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.107] - 2024-03-01 + +### Added + +- **🚀 Makefile and LLM Update Script**: Included Makefile and a script for LLM updates in the repository. + +### Fixed + +- Corrected issue where links in the settings modal didn't appear clickable (#960). +- Fixed problem with web UI port not taking effect due to incorrect environment variable name in run-compose.sh (#996). +- Enhanced user experience by displaying chat in browser title and enabling automatic scrolling to the bottom (#992). + +### Changed + +- Upgraded toast library from `svelte-french-toast` to `svelte-sonner` for a more polished UI. +- Enhanced accessibility with the addition of dark mode on the authentication page. + ## [0.1.106] - 2024-02-27 ### Added diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..cbcc41d9 --- /dev/null +++ b/Makefile @@ -0,0 +1,25 @@ +install: + @docker-compose up -d + +remove: + @chmod +x confirm_remove.sh + @./confirm_remove.sh + + +start: + @docker-compose start + +stop: + @docker-compose stop + +update: + # Calls the LLM update script + chmod +x update_ollama_models.sh + @./update_ollama_models.sh + @git pull + @docker-compose down + # Make sure the ollama-webui container is stopped before rebuilding + @docker stop open-webui || true + @docker-compose up --build -d + @docker-compose start + diff --git a/confirm_remove.sh b/confirm_remove.sh new file mode 100755 index 00000000..729c2507 --- /dev/null +++ b/confirm_remove.sh @@ -0,0 +1,8 @@ +#!/bin/bash +echo "Warning: This will remove all containers and volumes, including persistent data. Do you want to continue? [Y/N]" +read ans +if [ "$ans" == "Y" ] || [ "$ans" == "y" ]; then + docker-compose down -v +else + echo "Operation cancelled." +fi diff --git a/package-lock.json b/package-lock.json index 9fdfdb8a..43deeace 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "open-webui", - "version": "v1.0.0-alpha.101", + "version": "0.1.106", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "open-webui", - "version": "v1.0.0-alpha.101", + "version": "0.1.106", "dependencies": { "@sveltejs/adapter-node": "^1.3.1", "async": "^3.2.5", @@ -17,7 +17,7 @@ "js-sha256": "^0.10.1", "katex": "^0.16.9", "marked": "^9.1.0", - "svelte-french-toast": "^1.2.0", + "svelte-sonner": "^0.3.19", "tippy.js": "^6.3.7", "uuid": "^9.0.1" }, @@ -3211,17 +3211,6 @@ } } }, - "node_modules/svelte-french-toast": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/svelte-french-toast/-/svelte-french-toast-1.2.0.tgz", - "integrity": "sha512-5PW+6RFX3xQPbR44CngYAP1Sd9oCq9P2FOox4FZffzJuZI2mHOB7q5gJBVnOiLF5y3moVGZ7u2bYt7+yPAgcEQ==", - "dependencies": { - "svelte-writable-derived": "^3.1.0" - }, - "peerDependencies": { - "svelte": "^3.57.0 || ^4.0.0" - } - }, "node_modules/svelte-hmr": { "version": "0.15.3", "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz", @@ -3307,15 +3296,12 @@ "node": ">=12" } }, - "node_modules/svelte-writable-derived": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/svelte-writable-derived/-/svelte-writable-derived-3.1.0.tgz", - "integrity": "sha512-cTvaVFNIJ036vSDIyPxJYivKC7ZLtcFOPm1Iq6qWBDo1fOHzfk6ZSbwaKrxhjgy52Rbl5IHzRcWgos6Zqn9/rg==", - "funding": { - "url": "https://ko-fi.com/pixievoltno1" - }, + "node_modules/svelte-sonner": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/svelte-sonner/-/svelte-sonner-0.3.19.tgz", + "integrity": "sha512-jpPOgLtHwRaB6Vqo2dUQMv15/yUV/BQWTjKpEqQ11uqRSHKjAYUKZyGrHB2cQsGmyjR0JUzBD58btpgNqINQ/Q==", "peerDependencies": { - "svelte": "^3.2.1 || ^4.0.0-next.1" + "svelte": ">=3 <5" } }, "node_modules/tailwindcss": { @@ -5882,14 +5868,6 @@ "postcss-scss": "^4.0.8" } }, - "svelte-french-toast": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/svelte-french-toast/-/svelte-french-toast-1.2.0.tgz", - "integrity": "sha512-5PW+6RFX3xQPbR44CngYAP1Sd9oCq9P2FOox4FZffzJuZI2mHOB7q5gJBVnOiLF5y3moVGZ7u2bYt7+yPAgcEQ==", - "requires": { - "svelte-writable-derived": "^3.1.0" - } - }, "svelte-hmr": { "version": "0.15.3", "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz", @@ -5920,10 +5898,10 @@ } } }, - "svelte-writable-derived": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/svelte-writable-derived/-/svelte-writable-derived-3.1.0.tgz", - "integrity": "sha512-cTvaVFNIJ036vSDIyPxJYivKC7ZLtcFOPm1Iq6qWBDo1fOHzfk6ZSbwaKrxhjgy52Rbl5IHzRcWgos6Zqn9/rg==", + "svelte-sonner": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/svelte-sonner/-/svelte-sonner-0.3.19.tgz", + "integrity": "sha512-jpPOgLtHwRaB6Vqo2dUQMv15/yUV/BQWTjKpEqQ11uqRSHKjAYUKZyGrHB2cQsGmyjR0JUzBD58btpgNqINQ/Q==", "requires": {} }, "tailwindcss": { diff --git a/package.json b/package.json index 2ce66e78..0e95102d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "open-webui", - "version": "0.1.106", + "version": "0.1.107", "private": true, "scripts": { "dev": "vite dev --host", @@ -49,7 +49,7 @@ "js-sha256": "^0.10.1", "katex": "^0.16.9", "marked": "^9.1.0", - "svelte-french-toast": "^1.2.0", + "svelte-sonner": "^0.3.19", "tippy.js": "^6.3.7", "uuid": "^9.0.1" } diff --git a/run-compose.sh b/run-compose.sh index 7b0f8d2b..08fba272 100755 --- a/run-compose.sh +++ b/run-compose.sh @@ -182,7 +182,7 @@ else export OLLAMA_DATA_DIR=$data_dir # Set OLLAMA_DATA_DIR environment variable fi if [[ -n $webui_port ]]; then - export OLLAMA_WEBUI_PORT=$webui_port # Set OLLAMA_WEBUI_PORT environment variable + export OPEN_WEBUI_PORT=$webui_port # Set OPEN_WEBUI_PORT environment variable fi DEFAULT_COMPOSE_COMMAND+=" up -d" DEFAULT_COMPOSE_COMMAND+=" --remove-orphans" diff --git a/src/lib/components/admin/EditUserModal.svelte b/src/lib/components/admin/EditUserModal.svelte index 09005b30..d8ceb145 100644 --- a/src/lib/components/admin/EditUserModal.svelte +++ b/src/lib/components/admin/EditUserModal.svelte @@ -1,5 +1,5 @@ + + + {title + ? `${title.length > 30 ? `${title.slice(0, 30)}...` : title} | ${$WEBUI_NAME}` + : `${$WEBUI_NAME}`} + + +
0} {initNewChat} {tags} {addTag} {deleteTag} />
diff --git a/src/routes/(app)/admin/+page.svelte b/src/routes/(app)/admin/+page.svelte index b1169709..fcb22a6a 100644 --- a/src/routes/(app)/admin/+page.svelte +++ b/src/routes/(app)/admin/+page.svelte @@ -1,10 +1,10 @@ + + + {`Admin Panel | ${$WEBUI_NAME}`} + + + {#key selectedUser} import { v4 as uuidv4 } from 'uuid'; - import toast from 'svelte-french-toast'; + import { toast } from 'svelte-sonner'; import { onMount, tick } from 'svelte'; import { goto } from '$app/navigation'; @@ -14,6 +14,7 @@ chats, chatId, config, + WEBUI_NAME, tags as _tags } from '$lib/stores'; import { copyToClipboard, splitStream, convertMessagesToHistory } from '$lib/utils'; @@ -100,6 +101,7 @@ await tick(); loaded = true; + window.setTimeout(() => scrollToBottom(), 0); const chatInput = document.getElementById('chat-textarea'); chatInput?.focus(); } else { @@ -823,6 +825,14 @@ }); + + + {title + ? `${title.length > 30 ? `${title.slice(0, 30)}...` : title} | ${$WEBUI_NAME}` + : `${$WEBUI_NAME}`} + + + {#if loaded}
- import toast from 'svelte-french-toast'; + import { toast } from 'svelte-sonner'; import fileSaver from 'file-saver'; const { saveAs } = fileSaver; import { onMount } from 'svelte'; - import { documents } from '$lib/stores'; + import { WEBUI_NAME, documents } from '$lib/stores'; import { createNewDoc, deleteDocByName, getDocs } from '$lib/apis/documents'; import { SUPPORTED_FILE_TYPE, SUPPORTED_FILE_EXTENSIONS } from '$lib/constants'; @@ -148,6 +148,12 @@ ); + + + {`Documents | ${$WEBUI_NAME}`} + + + {#if dragged}
- import toast from 'svelte-french-toast'; + import { toast } from 'svelte-sonner'; import fileSaver from 'file-saver'; const { saveAs } = fileSaver; import { onMount } from 'svelte'; - import { modelfiles, settings, user } from '$lib/stores'; + import { WEBUI_NAME, modelfiles, settings, user } from '$lib/stores'; import { createModel, deleteModel } from '$lib/apis/ollama'; import { createNewModelfile, @@ -69,6 +69,12 @@ }); + + + {`Modelfiles | ${$WEBUI_NAME}`} + + +
diff --git a/src/routes/(app)/modelfiles/create/+page.svelte b/src/routes/(app)/modelfiles/create/+page.svelte index 12ffe063..d54e9709 100644 --- a/src/routes/(app)/modelfiles/create/+page.svelte +++ b/src/routes/(app)/modelfiles/create/+page.svelte @@ -1,6 +1,6 @@ + + + {`Prompts | ${$WEBUI_NAME}`} + + +
diff --git a/src/routes/(app)/prompts/create/+page.svelte b/src/routes/(app)/prompts/create/+page.svelte index 4dad5795..548aa431 100644 --- a/src/routes/(app)/prompts/create/+page.svelte +++ b/src/routes/(app)/prompts/create/+page.svelte @@ -1,5 +1,5 @@ + + + {`${$WEBUI_NAME}`} + + + {#if loaded}
@@ -66,7 +72,7 @@
-
+
-
+
{ submitHandler(); }} > -
+
{mode === 'signin' ? 'Sign in' : 'Sign up'} to {$WEBUI_NAME}
diff --git a/update_ollama_models.sh b/update_ollama_models.sh new file mode 100644 index 00000000..bde11b4b --- /dev/null +++ b/update_ollama_models.sh @@ -0,0 +1,10 @@ +#!/bin/bash +# update_llm.sh + +# Retrieves the list of LLMs installed in the Docker container +llm_list=$(docker exec ollama ollama list | tail -n +2 | awk '{print $1}') + +# Loop over each LLM to update it +for llm in $llm_list; do + docker exec ollama ollama pull $llm +done