From acf5c938ef5268c7775590b4c26c5399f74599e6 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Fri, 16 Feb 2024 23:04:37 -0800 Subject: [PATCH] feat: rename to open-webui --- README.md | 21 ++++++++---------- .../chat/Messages/Placeholder.svelte | 2 +- src/lib/components/chat/ShareChatModal.svelte | 2 +- src/lib/components/layout/Navbar.svelte | 4 ++-- src/lib/constants.ts | 2 +- src/routes/(app)/modelfiles/+page.svelte | 8 +++---- .../(app)/modelfiles/create/+page.svelte | 12 ++++++---- src/routes/(app)/prompts/+page.svelte | 8 +++---- src/routes/(app)/prompts/create/+page.svelte | 10 ++++++--- static/favicon.png | Bin 7170 -> 6161 bytes 10 files changed, 37 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 56b9167e..0be411e9 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Ollama Web UI: A User-Friendly Web Interface for Chat Interactions 👋 +# Open Web UI (Formerly Ollama WebUI) 👋 ![GitHub stars](https://img.shields.io/github/stars/ollama-webui/ollama-webui?style=social) ![GitHub forks](https://img.shields.io/github/forks/ollama-webui/ollama-webui?style=social) @@ -13,11 +13,9 @@ ChatGPT-Style Web Interface for Ollama 🦙 -**Disclaimer:** _ollama-webui is a community-driven project and is not affiliated with the Ollama team in any way. This initiative is independent, and any inquiries or feedback should be directed to [our community on Discord](https://discord.gg/5rJgQTnV4s). We kindly request users to refrain from contacting or harassing the Ollama team regarding this project._ +![Open Web UI Demo](./demo.gif) -![Ollama Web UI Demo](./demo.gif) - -Also check our sibling project, [OllamaHub](https://ollamahub.com/), where you can discover, download, and explore customized Modelfiles for Ollama! 🦙🔍 +Also check our sibling project, [Open WebUI Community](https://openwebui.com/), where you can discover, download, and explore customized Modelfiles for Ollama! 🦙🔍 ## Features ⭐ @@ -37,7 +35,7 @@ Also check our sibling project, [OllamaHub](https://ollamahub.com/), where you c - 🌐 **Web Browsing Capability**: Seamlessly integrate websites into your chat experience using the `#` command followed by the URL. This feature allows you to incorporate web content directly into your conversations, enhancing the richness and depth of your interactions. -- 📜 **Prompt Preset Support**: Instantly access preset prompts using the `/` command in the chat input. Load predefined conversation starters effortlessly and expedite your interactions. Effortlessly import prompts through [OllamaHub](https://ollamahub.com/) integration. +- 📜 **Prompt Preset Support**: Instantly access preset prompts using the `/` command in the chat input. Load predefined conversation starters effortlessly and expedite your interactions. Effortlessly import prompts through [Open WebUI Community](https://openwebui.com/) integration. - 👍👎 **RLHF Annotation**: Empower your messages by rating them with thumbs up and thumbs down, facilitating the creation of datasets for Reinforcement Learning from Human Feedback (RLHF). Utilize your messages to train or fine-tune models, all while ensuring the confidentiality of locally saved data. @@ -51,7 +49,7 @@ Also check our sibling project, [OllamaHub](https://ollamahub.com/), where you c - 🔄 **Multi-Modal Support**: Seamlessly engage with models that support multimodal interactions, including images (e.g., LLava). -- 🧩 **Modelfile Builder**: Easily create Ollama modelfiles via the web UI. Create and add characters/agents, customize chat elements, and import modelfiles effortlessly through [OllamaHub](https://ollamahub.com/) integration. +- 🧩 **Modelfile Builder**: Easily create Ollama modelfiles via the web UI. Create and add characters/agents, customize chat elements, and import modelfiles effortlessly through [Open WebUI Community](https://openwebui.com/) integration. - ⚙️ **Many Models Conversations**: Effortlessly engage with various models simultaneously, harnessing their unique strengths for optimal responses. Enhance your experience by leveraging a diverse set of models in parallel. @@ -77,9 +75,9 @@ Also check our sibling project, [OllamaHub](https://ollamahub.com/), where you c - 🌟 **Continuous Updates**: We are committed to improving Ollama Web UI with regular updates and new features. -## 🔗 Also Check Out OllamaHub! +## 🔗 Also Check Out Open WebUI Community! -Don't forget to explore our sibling project, [OllamaHub](https://ollamahub.com/), where you can discover, download, and explore customized Modelfiles. OllamaHub offers a wide range of exciting possibilities for enhancing your chat interactions with Ollama! 🚀 +Don't forget to explore our sibling project, [Open WebUI Community](https://openwebui.com/), where you can discover, download, and explore customized Modelfiles. Open WebUI Community offers a wide range of exciting possibilities for enhancing your chat interactions with Ollama! 🚀 ## How to Install 🚀 @@ -308,9 +306,8 @@ This project is licensed under the [MIT License](LICENSE) - see the [LICENSE](LI ## Support 💬 If you have any questions, suggestions, or need assistance, please open an issue or join our -[Ollama Web UI Discord community](https://discord.gg/5rJgQTnV4s) or -[Ollama Discord community](https://discord.gg/ollama) to connect with us! 🤝 +[Open WebUI Discord community](https://discord.gg/5rJgQTnV4s) to connect with us! 🤝 --- -Created by [Timothy J. Baek](https://github.com/tjbck) - Let's make Ollama Web UI even more amazing together! 💪 +Created by [Timothy J. Baek](https://github.com/tjbck) - Let's make Open Web UI even more amazing together! 💪 diff --git a/src/lib/components/chat/Messages/Placeholder.svelte b/src/lib/components/chat/Messages/Placeholder.svelte index 39abf6c5..ae9ced14 100644 --- a/src/lib/components/chat/Messages/Placeholder.svelte +++ b/src/lib/components/chat/Messages/Placeholder.svelte @@ -54,7 +54,7 @@ {#if modelfile.user}
- By {modelfile.user.name ? modelfile.user.name : `@${modelfile.user.username}`}
diff --git a/src/lib/components/chat/ShareChatModal.svelte b/src/lib/components/chat/ShareChatModal.svelte index b6c10df3..ba9144f9 100644 --- a/src/lib/components/chat/ShareChatModal.svelte +++ b/src/lib/components/chat/ShareChatModal.svelte @@ -17,7 +17,7 @@ show = false; }} > - Share to OllamaHub + Share to OpenWebUI Community
diff --git a/src/lib/components/layout/Navbar.svelte b/src/lib/components/layout/Navbar.svelte index 529f136d..05a6468f 100644 --- a/src/lib/components/layout/Navbar.svelte +++ b/src/lib/components/layout/Navbar.svelte @@ -27,8 +27,8 @@ const chat = (await getChatById(localStorage.token, $chatId)).chat; console.log('share', chat); - toast.success('Redirecting you to OllamaHub'); - const url = 'https://ollamahub.com'; + toast.success('Redirecting you to OpenWebUI Community'); + const url = 'https://openwebui.com'; // const url = 'http://localhost:5173'; const tab = await window.open(`${url}/chats/upload`, '_blank'); diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 3200ad44..070b1f8b 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -1,6 +1,6 @@ import { dev } from '$app/environment'; -export const WEBUI_NAME = 'Ollama Web UI'; +export const WEBUI_NAME = 'Open Web UI'; export const WEBUI_BASE_URL = dev ? `http://${location.hostname}:8080` : ``; export const WEBUI_API_BASE_URL = `${WEBUI_BASE_URL}/api/v1`; diff --git a/src/routes/(app)/modelfiles/+page.svelte b/src/routes/(app)/modelfiles/+page.svelte index 823782ee..cd5dbacb 100644 --- a/src/routes/(app)/modelfiles/+page.svelte +++ b/src/routes/(app)/modelfiles/+page.svelte @@ -35,9 +35,9 @@ }; const shareModelfile = async (modelfile) => { - toast.success('Redirecting you to OllamaHub'); + toast.success('Redirecting you to OpenWebUI Community'); - const url = 'https://ollamahub.com'; + const url = 'https://openwebui.com'; const tab = await window.open(`${url}/modelfiles/create`, '_blank'); window.addEventListener( @@ -348,11 +348,11 @@
-
Made by OllamaHub Community
+
Made by OpenWebUI Community
-
Made by OllamaHub Community
+
Made by OpenWebUI Community
diff --git a/src/routes/(app)/prompts/create/+page.svelte b/src/routes/(app)/prompts/create/+page.svelte index f384e762..c03fac3c 100644 --- a/src/routes/(app)/prompts/create/+page.svelte +++ b/src/routes/(app)/prompts/create/+page.svelte @@ -53,9 +53,13 @@ onMount(() => { window.addEventListener('message', async (event) => { if ( - !['https://ollamahub.com', 'https://www.ollamahub.com', 'http://localhost:5173'].includes( - event.origin - ) + ![ + 'https://ollamahub.com', + 'https://www.ollamahub.com', + 'https://openwebui.com', + 'https://www.openwebui.com', + 'http://localhost:5173' + ].includes(event.origin) ) return; const prompt = JSON.parse(event.data); diff --git a/static/favicon.png b/static/favicon.png index 4ca6ec00570bbcff95a2b2bd8a1ff4a934310ffa..519af1db620dbf4de3694660dae7abd7392f0b3c 100644 GIT binary patch literal 6161 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 literal 7170 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