From cd9fc6312e23decf59ca5c01b70c9f23dae4a2fb Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Wed, 27 Dec 2023 14:12:33 -0800 Subject: [PATCH 01/12] doc: user roles --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index c794c6b1..bde67525 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,11 @@ Don't forget to explore our sibling project, [OllamaHub](https://ollamahub.com/) ## How to Install 🚀 +🌟 **Important Note on User Roles:** + +- **Admin Creation:** The very first account to sign up on the Ollama Web UI will be granted **Administrator privileges**. This account will have comprehensive control over the platform, including user management and system settings. +- **User Registrations:** All subsequent users signing up will initially have their accounts set to **Pending** status by default. These accounts will require approval from the Administrator to gain access to the platform functionalities. + ### Installing Both Ollama and Ollama Web UI Using Docker Compose If you don't have Ollama installed yet, you can use the provided Docker Compose file for a hassle-free installation. Simply run the following command: From c31ff1f679aba108a8d7219543f11304d1038849 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Wed, 27 Dec 2023 19:10:56 -0800 Subject: [PATCH 02/12] fix: save email as lowercase --- backend/apps/web/routers/auths.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/apps/web/routers/auths.py b/backend/apps/web/routers/auths.py index 02b77248..27d6a3b6 100644 --- a/backend/apps/web/routers/auths.py +++ b/backend/apps/web/routers/auths.py @@ -88,7 +88,9 @@ async def signup(form_data: SignupForm): try: role = "admin" if Users.get_num_users() == 0 else "pending" hashed = get_password_hash(form_data.password) - user = Auths.insert_new_auth(form_data.email, hashed, form_data.name, role) + user = Auths.insert_new_auth( + form_data.email.lower(), hashed, form_data.name, role + ) if user: token = create_token(data={"email": user.email}) From a5fbff7313f7ff3a343bb452163198b5b7371855 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Wed, 27 Dec 2023 19:43:25 -0800 Subject: [PATCH 03/12] feat: import modelfiles --- src/routes/(app)/modelfiles/+page.svelte | 176 +++++++++++++++-------- 1 file changed, 116 insertions(+), 60 deletions(-) diff --git a/src/routes/(app)/modelfiles/+page.svelte b/src/routes/(app)/modelfiles/+page.svelte index 41691524..d3c0b098 100644 --- a/src/routes/(app)/modelfiles/+page.svelte +++ b/src/routes/(app)/modelfiles/+page.svelte @@ -15,6 +15,7 @@ } from '$lib/apis/modelfiles'; let localModelfiles = []; + let importFiles; const deleteModelHandler = async (tagName) => { let success = null; @@ -199,78 +200,133 @@ {/each} - {#if localModelfiles.length > 0} -
+
-
-
- {localModelfiles.length} Local Modelfiles Detected -
+
+
+ { + console.log(importFiles); -
- + reader.readAsText(importFiles[0]); + }} + /> - -
+
+ + + +
+
- {/if} + + {#if localModelfiles.length > 0} +
+
+ {localModelfiles.length} Local Modelfiles Detected +
+ +
+ + + +
+
+ {/if} +
Made by OllamaHub Community
From 339c9125a713a2b9f51562cde8de72cb261345a0 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Wed, 27 Dec 2023 19:49:24 -0800 Subject: [PATCH 04/12] fix: sidebar button click register issue --- src/lib/components/layout/Sidebar.svelte | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/lib/components/layout/Sidebar.svelte b/src/lib/components/layout/Sidebar.svelte index 6d7b33bd..8a0a27da 100644 --- a/src/lib/components/layout/Sidebar.svelte +++ b/src/lib/components/layout/Sidebar.svelte @@ -382,11 +382,6 @@ on:click={() => { showDropdown = !showDropdown; }} - on:focusout={() => { - setTimeout(() => { - showDropdown = false; - }, 150); - }} >
{ goto('/admin'); + showDropdown = false; }} >
@@ -470,6 +466,7 @@ on:click={() => { localStorage.removeItem('token'); location.href = '/auth'; + showDropdown = false; }} >
From eb171553fdc18fbd7337fb53661688298648ee1c Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Wed, 27 Dec 2023 20:08:04 -0800 Subject: [PATCH 05/12] doc: troubleshooting command update --- TROUBLESHOOTING.md | 2 +- src/lib/components/layout/Sidebar.svelte | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index 4399ffc5..59f7049b 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -7,7 +7,7 @@ If you're running ollama-webui and have chosen to install webui and ollama separ Here's an example of the command you should run: ```bash -docker run -d --network=host -e OLLAMA_API_BASE_URL=http://127.0.0.1:11434/api --name ollama-webui --restart always ghcr.io/ollama-webui/ollama-webui:main +docker run -d --network=host -v ollama-webui:/app/backend/data -e OLLAMA_API_BASE_URL=http://127.0.0.1:11434/api --name ollama-webui --restart always ghcr.io/ollama-webui/ollama-webui:main ``` ## Connection Errors diff --git a/src/lib/components/layout/Sidebar.svelte b/src/lib/components/layout/Sidebar.svelte index 8a0a27da..ceb7ec82 100644 --- a/src/lib/components/layout/Sidebar.svelte +++ b/src/lib/components/layout/Sidebar.svelte @@ -431,6 +431,7 @@ class="flex py-2.5 px-3.5 w-full hover:bg-gray-800 transition" on:click={async () => { await showSettings.set(true); + showDropdown = false; }} >
From e34133252757a7c2087b0db1b9ea7f1ad1d863a1 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Wed, 27 Dec 2023 20:51:19 -0800 Subject: [PATCH 06/12] fix: stop param to list --- src/lib/components/chat/SettingsModal.svelte | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lib/components/chat/SettingsModal.svelte b/src/lib/components/chat/SettingsModal.svelte index 8ef24d06..6fdff100 100644 --- a/src/lib/components/chat/SettingsModal.svelte +++ b/src/lib/components/chat/SettingsModal.svelte @@ -614,6 +614,7 @@ options.top_p = settings.top_p ?? ''; options.num_ctx = settings.num_ctx ?? ''; options = { ...options, ...settings.options }; + options.stop = (settings?.options?.stop ?? []).join(','); titleAutoGenerate = settings.titleAutoGenerate ?? true; speechAutoSend = settings.speechAutoSend ?? false; @@ -1051,7 +1052,8 @@ saveSettings({ options: { seed: (options.seed !== 0 ? options.seed : undefined) ?? undefined, - stop: options.stop !== '' ? options.stop : undefined, + stop: + options.stop !== '' ? options.stop.split(',').filter((e) => e) : undefined, temperature: options.temperature !== '' ? options.temperature : undefined, repeat_penalty: options.repeat_penalty !== '' ? options.repeat_penalty : undefined, From adb4b5d22ff89d1272db092604e4d3c8c68b4d18 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Wed, 27 Dec 2023 21:13:02 -0800 Subject: [PATCH 07/12] feat: discord badge added to about --- src/lib/components/chat/SettingsModal.svelte | 25 +++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/lib/components/chat/SettingsModal.svelte b/src/lib/components/chat/SettingsModal.svelte index 6fdff100..47c57d99 100644 --- a/src/lib/components/chat/SettingsModal.svelte +++ b/src/lib/components/chat/SettingsModal.svelte @@ -1842,6 +1842,22 @@
+
+ + Discord + + + + Github Repo + +
+
Created by Timothy J. Baek
- -
- - Github Repo - -
{/if} From 1f5bfe67a12e7fb34da2a835bb6bb00fd919fe57 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 28 Dec 2023 02:46:57 -0800 Subject: [PATCH 08/12] feat: keyboard shortcuts --- src/lib/components/chat/Messages.svelte | 3 +- src/lib/components/chat/ShortcutsModal.svelte | 216 ++++++++++++++++++ src/lib/components/layout/Sidebar.svelte | 9 + src/routes/(app)/+layout.svelte | 76 ++++++ 4 files changed, 303 insertions(+), 1 deletion(-) create mode 100644 src/lib/components/chat/ShortcutsModal.svelte diff --git a/src/lib/components/chat/Messages.svelte b/src/lib/components/chat/Messages.svelte index 8516dc40..df8a72b8 100644 --- a/src/lib/components/chat/Messages.svelte +++ b/src/lib/components/chat/Messages.svelte @@ -119,6 +119,7 @@ langDiv.style.fontSize = '0.75rem'; let button = document.createElement('button'); + button.className = 'copy-code-button'; button.textContent = 'Copy Code'; button.style.background = 'none'; button.style.fontSize = '0.75rem'; @@ -832,7 +833,7 @@ +
+
+ +
+
+
+
+
Open new chat
+ +
+
+ Ctrl/⌘ +
+ +
+ Shift +
+ +
+ O +
+
+
+ +
+
Focus chat input
+ +
+
+ Shift +
+ +
+ Esc +
+
+
+ +
+
Copy last code block
+ +
+
+ Ctrl/⌘ +
+ +
+ Shift +
+ +
+ ; +
+
+
+ +
+
Copy last response
+ +
+
+ Ctrl/⌘ +
+ +
+ Shift +
+ +
+ C +
+
+
+
+ +
+
+
Toggle sidebar
+ +
+
+ Ctrl/⌘ +
+ +
+ Shift +
+ +
+ S +
+
+
+ +
+
Delete chat
+ +
+
+ Ctrl/⌘ +
+
+ Shift +
+ +
+ ⌫ +
+
+
+ +
+
Show shortcuts
+ +
+
+ Ctrl/⌘ +
+ +
+ / +
+
+
+
+
+
+
+ + + diff --git a/src/lib/components/layout/Sidebar.svelte b/src/lib/components/layout/Sidebar.svelte index ceb7ec82..18b4f5fb 100644 --- a/src/lib/components/layout/Sidebar.svelte +++ b/src/lib/components/layout/Sidebar.svelte @@ -61,6 +61,7 @@
{:else}
+ +
+ + +
{#if !['user', 'admin'].includes($user.role)}
From 4d3754980dd87bb026dd3cae61f8a6be7c6fbbd4 Mon Sep 17 00:00:00 2001 From: Anuraag Jain Date: Thu, 28 Dec 2023 18:06:17 +0200 Subject: [PATCH 09/12] fix(model-selector): prevent saving empty default model - throw a toast error when user is trying to click on `set as default` without actually choosing the model(s). - feat: added hmr for local development. use `npm run dev` and you get the hmr when debugging. --- src/lib/components/chat/ModelSelector.svelte | 7 ++++++- vite.config.ts | 5 ++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/lib/components/chat/ModelSelector.svelte b/src/lib/components/chat/ModelSelector.svelte index 890be53a..626755e0 100644 --- a/src/lib/components/chat/ModelSelector.svelte +++ b/src/lib/components/chat/ModelSelector.svelte @@ -6,6 +6,11 @@ export let disabled = false; const saveDefaultModel = () => { + const hasEmptyModel = selectedModels.filter(it => it === ''); + if(hasEmptyModel.length){ + toast.error('Choose a model before saving...'); + return; + } settings.set({ ...$settings, models: selectedModels }); localStorage.setItem('settings', JSON.stringify($settings)); toast.success('Default model updated'); @@ -21,7 +26,7 @@ bind:value={selectedModel} {disabled} > - + {#each $models as model} {#if model.name === 'hr'} diff --git a/vite.config.ts b/vite.config.ts index bbf8c7da..c0c600a5 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -2,5 +2,8 @@ import { sveltekit } from '@sveltejs/kit/vite'; import { defineConfig } from 'vite'; export default defineConfig({ - plugins: [sveltekit()] + plugins: [sveltekit()], + server: { + hmr: true + } }); From f70fadd70c4b2211687cc37e8cbb1ccbfbfecdf6 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 28 Dec 2023 09:52:30 -0800 Subject: [PATCH 10/12] fix: https connection issue --- backend/dev.sh | 2 +- backend/start.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/dev.sh b/backend/dev.sh index e4e1aaa1..9d0b5fa4 100644 --- a/backend/dev.sh +++ b/backend/dev.sh @@ -1 +1 @@ -uvicorn main:app --port 8080 --host 0.0.0.0 --reload \ No newline at end of file +uvicorn main:app --port 8080 --host 0.0.0.0 --forwarded-allow-ips '*' --reload \ No newline at end of file diff --git a/backend/start.sh b/backend/start.sh index 2d070299..9fb1f576 100644 --- a/backend/start.sh +++ b/backend/start.sh @@ -1 +1 @@ -uvicorn main:app --host 0.0.0.0 --port 8080 \ No newline at end of file +uvicorn main:app --host 0.0.0.0 --port 8080 --forwarded-allow-ips '*' \ No newline at end of file From bdc131378f1399834c2bf1ad78a90279d905fb7a Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 28 Dec 2023 09:55:54 -0800 Subject: [PATCH 11/12] fix: trailing slash added to api routes --- src/lib/apis/auths/index.ts | 2 +- src/lib/apis/users/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/apis/auths/index.ts b/src/lib/apis/auths/index.ts index 41c397f9..56a4a7a6 100644 --- a/src/lib/apis/auths/index.ts +++ b/src/lib/apis/auths/index.ts @@ -3,7 +3,7 @@ import { WEBUI_API_BASE_URL } from '$lib/constants'; export const getSessionUser = async (token: string) => { let error = null; - const res = await fetch(`${WEBUI_API_BASE_URL}/auths`, { + const res = await fetch(`${WEBUI_API_BASE_URL}/auths/`, { method: 'GET', headers: { 'Content-Type': 'application/json', diff --git a/src/lib/apis/users/index.ts b/src/lib/apis/users/index.ts index 5939d39d..b1f9e5d9 100644 --- a/src/lib/apis/users/index.ts +++ b/src/lib/apis/users/index.ts @@ -34,7 +34,7 @@ export const updateUserRole = async (token: string, id: string, role: string) => export const getUsers = async (token: string) => { let error = null; - const res = await fetch(`${WEBUI_API_BASE_URL}/users`, { + const res = await fetch(`${WEBUI_API_BASE_URL}/users/`, { method: 'GET', headers: { 'Content-Type': 'application/json', From 5ee58e1c7963a1772f2cc0d0dfba8a07b8a28963 Mon Sep 17 00:00:00 2001 From: Anuraag Jain Date: Thu, 28 Dec 2023 20:19:09 +0200 Subject: [PATCH 12/12] revert: vite config, hmr works without it --- vite.config.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/vite.config.ts b/vite.config.ts index c0c600a5..bbf8c7da 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -2,8 +2,5 @@ import { sveltekit } from '@sveltejs/kit/vite'; import { defineConfig } from 'vite'; export default defineConfig({ - plugins: [sveltekit()], - server: { - hmr: true - } + plugins: [sveltekit()] });