Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
chenpangpang
open-webui
Commits
9e287262
Unverified
Commit
9e287262
authored
Feb 23, 2024
by
Timothy Jaeryang Baek
Committed by
GitHub
Feb 23, 2024
Browse files
Merge pull request #880 from open-webui/custom-name
feat: sponsor custom name support
parents
fc330a1e
62f67bed
Changes
17
Show whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
94 additions
and
44 deletions
+94
-44
backend/config.py
backend/config.py
+35
-4
backend/main.py
backend/main.py
+5
-1
backend/static/favicon.png
backend/static/favicon.png
+0
-0
src/lib/components/ChangelogModal.svelte
src/lib/components/ChangelogModal.svelte
+4
-4
src/lib/components/chat/Messages/Placeholder.svelte
src/lib/components/chat/Messages/Placeholder.svelte
+5
-2
src/lib/components/chat/Messages/ResponseMessage.svelte
src/lib/components/chat/Messages/ResponseMessage.svelte
+3
-1
src/lib/components/chat/Settings/About.svelte
src/lib/components/chat/Settings/About.svelte
+4
-4
src/lib/components/chat/Settings/Models.svelte
src/lib/components/chat/Settings/Models.svelte
+4
-4
src/lib/components/layout/Navbar.svelte
src/lib/components/layout/Navbar.svelte
+3
-4
src/lib/components/layout/Sidebar.svelte
src/lib/components/layout/Sidebar.svelte
+6
-1
src/lib/constants.ts
src/lib/constants.ts
+2
-2
src/lib/stores/index.ts
src/lib/stores/index.ts
+2
-0
src/routes/(app)/+page.svelte
src/routes/(app)/+page.svelte
+5
-4
src/routes/(app)/c/[id]/+page.svelte
src/routes/(app)/c/[id]/+page.svelte
+3
-2
src/routes/+layout.svelte
src/routes/+layout.svelte
+6
-3
src/routes/auth/+page.svelte
src/routes/auth/+page.svelte
+5
-5
src/routes/error/+page.svelte
src/routes/error/+page.svelte
+2
-3
No files found.
backend/config.py
View file @
9e287262
import
os
import
chromadb
from
chromadb
import
Settings
from
secrets
import
token_bytes
from
base64
import
b64encode
from
constants
import
ERROR_MESSAGES
from
bs4
import
BeautifulSoup
from
pathlib
import
Path
import
json
import
markdown
from
bs4
import
BeautifulSoup
import
requests
import
shutil
from
secrets
import
token_bytes
from
constants
import
ERROR_MESSAGES
try
:
...
...
@@ -17,6 +21,8 @@ try:
except
ImportError
:
print
(
"dotenv not installed, skipping..."
)
WEBUI_NAME
=
"Open WebUI"
####################################
# ENV (dev,test,prod)
...
...
@@ -24,7 +30,6 @@ except ImportError:
ENV
=
os
.
environ
.
get
(
"ENV"
,
"dev"
)
try
:
with
open
(
f
"../package.json"
,
"r"
)
as
f
:
PACKAGE_DATA
=
json
.
load
(
f
)
...
...
@@ -94,6 +99,32 @@ for version in soup.find_all("h2"):
CHANGELOG
=
changelog_json
####################################
# CUSTOM_NAME
####################################
CUSTOM_NAME
=
os
.
environ
.
get
(
"CUSTOM_NAME"
,
""
)
if
CUSTOM_NAME
:
r
=
requests
.
get
(
f
"https://api.openwebui.com/api/v1/custom/
{
CUSTOM_NAME
}
"
)
data
=
r
.
json
()
if
"logo"
in
data
:
url
=
(
f
"https://api.openwebui.com
{
data
[
'logo'
]
}
"
if
data
[
"logo"
][
0
]
==
"/"
else
data
[
"logo"
]
)
r
=
requests
.
get
(
url
,
stream
=
True
)
if
r
.
status_code
==
200
:
with
open
(
"./static/favicon.png"
,
"wb"
)
as
f
:
r
.
raw
.
decode_content
=
True
shutil
.
copyfileobj
(
r
.
raw
,
f
)
WEBUI_NAME
=
data
[
"name"
]
####################################
# DATA/FRONTEND BUILD DIR
####################################
...
...
backend/main.py
View file @
9e287262
...
...
@@ -20,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
,
VERSION
,
CHANGELOG
,
FRONTEND_BUILD_DIR
from
config
import
WEBUI_NAME
,
ENV
,
VERSION
,
CHANGELOG
,
FRONTEND_BUILD_DIR
class
SPAStaticFiles
(
StaticFiles
):
...
...
@@ -72,6 +72,7 @@ async def get_app_config():
return
{
"status"
:
True
,
"name"
:
WEBUI_NAME
,
"version"
:
VERSION
,
"images"
:
images_app
.
state
.
ENABLED
,
"default_models"
:
webui_app
.
state
.
DEFAULT_MODELS
,
...
...
@@ -84,6 +85,9 @@ async def get_app_changelog():
return
CHANGELOG
app
.
mount
(
"/static"
,
StaticFiles
(
directory
=
"static"
),
name
=
"static"
)
app
.
mount
(
"/"
,
SPAStaticFiles
(
directory
=
FRONTEND_BUILD_DIR
,
html
=
True
),
...
...
backend/static/favicon.png
0 → 100644
View file @
9e287262
6.02 KB
src/lib/components/ChangelogModal.svelte
View file @
9e287262
...
...
@@ -2,9 +2,9 @@
import { onMount } from 'svelte';
import { Confetti } from 'svelte-confetti';
import { config } from '$lib/stores';
import {
WEBUI_NAME,
config } from '$lib/stores';
import { WEBUI_
NAME, WEB_UI_
VERSION } from '$lib/constants';
import { WEBUI_VERSION } from '$lib/constants';
import { getChangelog } from '$lib/apis';
import Modal from './common/Modal.svelte';
...
...
@@ -23,7 +23,7 @@
<div class="px-5 py-4 dark:text-gray-300">
<div class="flex justify-between items-start">
<div class="text-xl font-bold">
What’s New in {WEBUI_NAME}
What’s New in {
$
WEBUI_NAME}
<Confetti x={[-1, -0.25]} y={[0, 0.5]} />
</div>
<button
...
...
@@ -48,7 +48,7 @@
<div class="text-sm dark:text-gray-200">Release Notes</div>
<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-200 dark:bg-gray-700" />
<div class="text-sm dark:text-gray-200">
v{WEB
_
UI_VERSION}
v{WEBUI_VERSION}
</div>
</div>
</div>
...
...
src/lib/components/chat/Messages/Placeholder.svelte
View file @
9e287262
<script lang="ts">
import { WEBUI_BASE_URL } from '$lib/constants';
import { onMount } from 'svelte';
export let models = [];
...
...
@@ -27,14 +28,16 @@
>
{#if model in modelfiles}
<img
src={modelfiles[model]?.imageUrl ??
'.
/favicon.png
'
}
src={modelfiles[model]?.imageUrl ??
`${WEBUI_BASE_URL}/static
/favicon.png
`
}
alt="modelfile"
class=" w-14 rounded-full border-[1px] border-gray-200 dark:border-none"
draggable="false"
/>
{:else}
<img
src={models.length === 1 ? '/favicon.png' : '/favicon.png'}
src={models.length === 1
? `${WEBUI_BASE_URL}/static/favicon.png`
: `${WEBUI_BASE_URL}/static/favicon.png`}
class=" w-14 rounded-full border-[1px] border-gray-200 dark:border-none"
alt="logo"
draggable="false"
...
...
src/lib/components/chat/Messages/ResponseMessage.svelte
View file @
9e287262
...
...
@@ -298,7 +298,9 @@
{#key message.id}
<div class=" flex w-full message-{message.id}">
<ProfileImage src={modelfiles[message.model]?.imageUrl ?? '/favicon.png'} />
<ProfileImage
src={modelfiles[message.model]?.imageUrl ?? `${WEBUI_BASE_URL}/static/favicon.png`}
/>
<div class="w-full overflow-hidden">
<Name>
...
...
src/lib/components/chat/Settings/About.svelte
View file @
9e287262
<script lang="ts">
import { getOllamaVersion } from '$lib/apis/ollama';
import { WEBUI_
NAME, WEB_UI_
VERSION } from '$lib/constants';
import { config, showChangelog } from '$lib/stores';
import { WEBUI_VERSION } from '$lib/constants';
import {
WEBUI_NAME,
config, showChangelog } from '$lib/stores';
import { onMount } from 'svelte';
let ollamaVersion = '';
...
...
@@ -17,13 +17,13 @@
<div>
<div class=" mb-2.5 text-sm font-medium flex space-x-2 items-center">
<div>
{WEBUI_NAME} Version
{
$
WEBUI_NAME} Version
</div>
</div>
<div class="flex w-full">
<div class="flex-1 text-xs text-gray-700 dark:text-gray-200 flex space-x-1.5 items-center">
<div>
v{WEB
_
UI_VERSION}
v{WEBUI_VERSION}
</div>
<button
...
...
src/lib/components/chat/Settings/Models.svelte
View file @
9e287262
...
...
@@ -3,8 +3,8 @@
import toast from 'svelte-french-toast';
import { createModel, deleteModel, pullModel } from '$lib/apis/ollama';
import { WEBUI_API_BASE_URL, WEBUI_
NAME
} from '$lib/constants';
import { models, user } from '$lib/stores';
import { WEBUI_API_BASE_URL, WEBUI_
BASE_URL
} from '$lib/constants';
import {
WEBUI_NAME,
models, user } from '$lib/stores';
import { splitStream } from '$lib/utils';
export let getModels: Function;
...
...
@@ -59,9 +59,9 @@
} else {
toast.success(`Model '${modelName}' has been successfully downloaded.`);
const notification = new Notification(WEBUI_NAME, {
const notification = new Notification(
$
WEBUI_NAME, {
body: `Model '${modelName}' has been successfully downloaded.`,
icon:
'
/favicon.png
'
icon:
`${WEBUI_BASE_URL}/static
/favicon.png
`
});
models.set(await getModels());
...
...
src/lib/components/layout/Navbar.svelte
View file @
9e287262
...
...
@@ -4,14 +4,13 @@
const { saveAs } = fileSaver;
import { getChatById } from '$lib/apis/chats';
import { chatId, modelfiles, settings } from '$lib/stores';
import {
WEBUI_NAME,
chatId, modelfiles, settings } from '$lib/stores';
import ShareChatModal from '../chat/ShareChatModal.svelte';
import TagInput from '../common/Tags/TagInput.svelte';
import Tags from '../common/Tags.svelte';
import { WEBUI_NAME } from '$lib/constants';
export let initNewChat: Function;
export let title: string = WEBUI_NAME;
export let title: string =
$
WEBUI_NAME;
export let shareEnabled: boolean = false;
export let tags = [];
...
...
@@ -102,7 +101,7 @@
</div>
<div class=" flex-1 self-center font-medium line-clamp-1">
<div>
{title != '' ? title : WEBUI_NAME}
{title != '' ? title :
$
WEBUI_NAME}
</div>
</div>
...
...
src/lib/components/layout/Sidebar.svelte
View file @
9e287262
...
...
@@ -17,6 +17,7 @@
} from '$lib/apis/chats';
import toast from 'svelte-french-toast';
import { slide } from 'svelte/transition';
import { WEBUI_BASE_URL } from '$lib/constants';
let show = false;
let navElement;
...
...
@@ -114,7 +115,11 @@
>
<div class="flex self-center">
<div class="self-center mr-1.5">
<img src="/favicon.png" class=" w-7 -translate-x-1.5 rounded-full" alt="logo" />
<img
src="{WEBUI_BASE_URL}/static/favicon.png"
class=" w-7 -translate-x-1.5 rounded-full"
alt="logo"
/>
</div>
<div class=" self-center font-medium text-sm">New Chat</div>
...
...
src/lib/constants.ts
View file @
9e287262
import
{
dev
}
from
'
$app/environment
'
;
// import { version } from '../../package.json';
export
const
WEBUI
_NAME
=
'
Open WebUI
'
;
export
const
APP
_NAME
=
'
Open WebUI
'
;
export
const
WEBUI_BASE_URL
=
dev
?
`http://
${
location
.
hostname
}
:8080`
:
``
;
export
const
WEBUI_API_BASE_URL
=
`
${
WEBUI_BASE_URL
}
/api/v1`
;
...
...
@@ -11,7 +11,7 @@ export const AUDIO_API_BASE_URL = `${WEBUI_BASE_URL}/audio/api/v1`;
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
WEBUI_VERSION
=
APP_VERSION
;
export
const
REQUIRED_OLLAMA_VERSION
=
'
0.1.16
'
;
export
const
SUPPORTED_FILE_TYPE
=
[
...
...
src/lib/stores/index.ts
View file @
9e287262
import
{
APP_NAME
}
from
'
$lib/constants
'
;
import
{
writable
}
from
'
svelte/store
'
;
// Backend
export
const
WEBUI_NAME
=
writable
(
APP_NAME
);
export
const
config
=
writable
(
undefined
);
export
const
user
=
writable
(
undefined
);
...
...
src/routes/(app)/+page.svelte
View file @
9e287262
...
...
@@ -36,6 +36,7 @@
import ModelSelector from '$lib/components/chat/ModelSelector.svelte';
import Navbar from '$lib/components/layout/Navbar.svelte';
import { RAGTemplate } from '$lib/utils/rag';
import { WEBUI_BASE_URL } from '$lib/constants';
let stopResponseFlag = false;
let autoScroll = true;
...
...
@@ -334,7 +335,7 @@
content: $settings.system
}
: undefined,
...messages.filter(message => !message.deleted)
...messages.filter(
(
message
)
=> !message.deleted)
]
.filter((message) => message)
.map((message, idx, arr) => ({
...
...
@@ -452,7 +453,7 @@
: `${model}`,
{
body: responseMessage.content,
icon: selectedModelfile?.imageUrl ??
'
/favicon.png
'
icon: selectedModelfile?.imageUrl ??
`${WEBUI_BASE_URL}/static
/favicon.png
`
}
);
}
...
...
@@ -540,7 +541,7 @@
content: $settings.system
}
: undefined,
...messages.filter(message => !message.deleted)
...messages.filter(
(
message
)
=> !message.deleted)
]
.filter((message) => message)
.map((message, idx, arr) => ({
...
...
@@ -622,7 +623,7 @@
if ($settings.notificationEnabled && !document.hasFocus()) {
const notification = new Notification(`OpenAI ${model}`, {
body: responseMessage.content,
icon:
'
/favicon.png
'
icon:
`${WEBUI_BASE_URL}/static
/favicon.png
`
});
}
...
...
src/routes/(app)/c/[id]/+page.svelte
View file @
9e287262
...
...
@@ -37,6 +37,7 @@
import ModelSelector from '$lib/components/chat/ModelSelector.svelte';
import Navbar from '$lib/components/layout/Navbar.svelte';
import { RAGTemplate } from '$lib/utils/rag';
import { WEBUI_BASE_URL } from '$lib/constants';
let loaded = false;
...
...
@@ -466,7 +467,7 @@
: `${model}`,
{
body: responseMessage.content,
icon: selectedModelfile?.imageUrl ??
'
/favicon.png
'
icon: selectedModelfile?.imageUrl ??
`${WEBUI_BASE_URL}/static
/favicon.png
`
}
);
}
...
...
@@ -637,7 +638,7 @@
if ($settings.notificationEnabled && !document.hasFocus()) {
const notification = new Notification(`OpenAI ${model}`, {
body: responseMessage.content,
icon:
'
/favicon.png
'
icon:
`${WEBUI_BASE_URL}/static
/favicon.png
`
});
}
...
...
src/routes/+layout.svelte
View file @
9e287262
<script>
import { onMount, tick } from 'svelte';
import { config, user, theme } from '$lib/stores';
import { config, user, theme
, WEBUI_NAME
} from '$lib/stores';
import { goto } from '$app/navigation';
import toast, { Toaster } from 'svelte-french-toast';
...
...
@@ -10,7 +10,7 @@
import '../app.css';
import '../tailwind.css';
import 'tippy.js/dist/tippy.css';
import { WEBUI_
NAME
} from '$lib/constants';
import { WEBUI_
BASE_URL
} from '$lib/constants';
let loaded = false;
...
...
@@ -22,6 +22,8 @@
if (backendConfig) {
// Save Backend Status to Store
await config.set(backendConfig);
await WEBUI_NAME.set(backendConfig.name);
console.log(backendConfig);
if ($config) {
...
...
@@ -55,7 +57,8 @@
</script>
<svelte:head>
<title>{WEBUI_NAME}</title>
<title>{$WEBUI_NAME}</title>
<link rel="icon" href="{WEBUI_BASE_URL}/static/favicon.png" />
<link rel="stylesheet" type="text/css" href="/themes/rosepine.css" />
<link rel="stylesheet" type="text/css" href="/themes/rosepine-dawn.css" />
...
...
src/routes/auth/+page.svelte
View file @
9e287262
<script>
import { goto } from '$app/navigation';
import { userSignIn, userSignUp } from '$lib/apis/auths';
import { WEBUI_API_BASE_URL, WEBUI_
NAME
} from '$lib/constants';
import { config, user } from '$lib/stores';
import { WEBUI_API_BASE_URL, WEBUI_
BASE_URL
} from '$lib/constants';
import {
WEBUI_NAME,
config, user } from '$lib/stores';
import { onMount } from 'svelte';
import toast from 'svelte-french-toast';
...
...
@@ -61,7 +61,7 @@
<div class="fixed m-10 z-50">
<div class="flex space-x-2">
<div class=" self-center">
<img src="/favicon.png" class=" w-8 rounded-full" alt="logo" />
<img src="
{WEBUI_BASE_URL}/static
/favicon.png" class=" w-8 rounded-full" alt="logo" />
</div>
</div>
</div>
...
...
@@ -90,12 +90,12 @@
}}
>
<div class=" text-xl md:text-2xl font-bold">
{mode === 'signin' ? 'Sign in' : 'Sign up'} to {WEBUI_NAME}
{mode === 'signin' ? 'Sign in' : 'Sign up'} to {
$
WEBUI_NAME}
</div>
{#if mode === 'signup'}
<div class=" mt-1 text-xs font-medium text-gray-500">
ⓘ {WEBUI_NAME} does not make any external connections, and your data stays securely on
ⓘ {
$
WEBUI_NAME} does not make any external connections, and your data stays securely on
your locally hosted server.
</div>
{/if}
...
...
src/routes/error/+page.svelte
View file @
9e287262
<script>
import { goto } from '$app/navigation';
import { WEBUI_NAME } from '$lib/constants';
import { config } from '$lib/stores';
import { WEBUI_NAME, config } from '$lib/stores';
import { onMount } from 'svelte';
let loaded = false;
...
...
@@ -20,7 +19,7 @@
<div class="absolute rounded-xl w-full h-full backdrop-blur flex justify-center">
<div class="m-auto pb-44 flex flex-col justify-center">
<div class="max-w-md">
<div class="text-center text-2xl font-medium z-50">{WEBUI_NAME} Backend Required</div>
<div class="text-center text-2xl font-medium z-50">{
$
WEBUI_NAME} Backend Required</div>
<div class=" mt-4 text-center text-sm w-full">
Oops! You're using an unsupported method (frontend only). Please serve the WebUI from
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment