mirror of
https://github.com/open-webui/open-webui
synced 2024-12-28 06:42:47 +00:00
enh: webui url
This commit is contained in:
parent
b5bb853c66
commit
c4937cc144
@ -720,6 +720,12 @@ OPENAI_API_BASE_URL = "https://api.openai.com/v1"
|
|||||||
# WEBUI
|
# WEBUI
|
||||||
####################################
|
####################################
|
||||||
|
|
||||||
|
|
||||||
|
WEBUI_URL = PersistentConfig(
|
||||||
|
"WEBUI_URL", "webui.url", os.environ.get("WEBUI_URL", "http://localhost:3000")
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
ENABLE_SIGNUP = PersistentConfig(
|
ENABLE_SIGNUP = PersistentConfig(
|
||||||
"ENABLE_SIGNUP",
|
"ENABLE_SIGNUP",
|
||||||
"ui.enable_signup",
|
"ui.enable_signup",
|
||||||
|
@ -103,8 +103,6 @@ WEBUI_NAME = os.environ.get("WEBUI_NAME", "Open WebUI")
|
|||||||
if WEBUI_NAME != "Open WebUI":
|
if WEBUI_NAME != "Open WebUI":
|
||||||
WEBUI_NAME += " (Open WebUI)"
|
WEBUI_NAME += " (Open WebUI)"
|
||||||
|
|
||||||
WEBUI_URL = os.environ.get("WEBUI_URL", "http://localhost:3000")
|
|
||||||
|
|
||||||
WEBUI_FAVICON_URL = "https://openwebui.com/favicon.png"
|
WEBUI_FAVICON_URL = "https://openwebui.com/favicon.png"
|
||||||
|
|
||||||
|
|
||||||
|
@ -239,6 +239,7 @@ from open_webui.config import (
|
|||||||
CORS_ALLOW_ORIGIN,
|
CORS_ALLOW_ORIGIN,
|
||||||
DEFAULT_LOCALE,
|
DEFAULT_LOCALE,
|
||||||
OAUTH_PROVIDERS,
|
OAUTH_PROVIDERS,
|
||||||
|
WEBUI_URL,
|
||||||
# Admin
|
# Admin
|
||||||
ENABLE_ADMIN_CHAT_ACCESS,
|
ENABLE_ADMIN_CHAT_ACCESS,
|
||||||
ENABLE_ADMIN_EXPORT,
|
ENABLE_ADMIN_EXPORT,
|
||||||
@ -264,7 +265,6 @@ from open_webui.env import (
|
|||||||
SAFE_MODE,
|
SAFE_MODE,
|
||||||
SRC_LOG_LEVELS,
|
SRC_LOG_LEVELS,
|
||||||
VERSION,
|
VERSION,
|
||||||
WEBUI_URL,
|
|
||||||
WEBUI_BUILD_HASH,
|
WEBUI_BUILD_HASH,
|
||||||
WEBUI_SECRET_KEY,
|
WEBUI_SECRET_KEY,
|
||||||
WEBUI_SESSION_COOKIE_SAME_SITE,
|
WEBUI_SESSION_COOKIE_SAME_SITE,
|
||||||
@ -389,6 +389,7 @@ app.state.OPENAI_MODELS = {}
|
|||||||
#
|
#
|
||||||
########################################
|
########################################
|
||||||
|
|
||||||
|
app.state.config.WEBUI_URL = WEBUI_URL
|
||||||
app.state.config.ENABLE_SIGNUP = ENABLE_SIGNUP
|
app.state.config.ENABLE_SIGNUP = ENABLE_SIGNUP
|
||||||
app.state.config.ENABLE_LOGIN_FORM = ENABLE_LOGIN_FORM
|
app.state.config.ENABLE_LOGIN_FORM = ENABLE_LOGIN_FORM
|
||||||
app.state.config.ENABLE_API_KEY = ENABLE_API_KEY
|
app.state.config.ENABLE_API_KEY = ENABLE_API_KEY
|
||||||
@ -1138,9 +1139,9 @@ async def get_opensearch_xml():
|
|||||||
<ShortName>{WEBUI_NAME}</ShortName>
|
<ShortName>{WEBUI_NAME}</ShortName>
|
||||||
<Description>Search {WEBUI_NAME}</Description>
|
<Description>Search {WEBUI_NAME}</Description>
|
||||||
<InputEncoding>UTF-8</InputEncoding>
|
<InputEncoding>UTF-8</InputEncoding>
|
||||||
<Image width="16" height="16" type="image/x-icon">{WEBUI_URL}/static/favicon.png</Image>
|
<Image width="16" height="16" type="image/x-icon">{app.state.config.WEBUI_URL}/static/favicon.png</Image>
|
||||||
<Url type="text/html" method="get" template="{WEBUI_URL}/?q={"{searchTerms}"}"/>
|
<Url type="text/html" method="get" template="{app.state.config.WEBUI_URL}/?q={"{searchTerms}"}"/>
|
||||||
<moz:SearchForm>{WEBUI_URL}</moz:SearchForm>
|
<moz:SearchForm>{app.state.config.WEBUI_URL}</moz:SearchForm>
|
||||||
</OpenSearchDescription>
|
</OpenSearchDescription>
|
||||||
"""
|
"""
|
||||||
return Response(content=xml_content, media_type="application/xml")
|
return Response(content=xml_content, media_type="application/xml")
|
||||||
|
@ -613,6 +613,7 @@ async def get_admin_details(request: Request, user=Depends(get_current_user)):
|
|||||||
async def get_admin_config(request: Request, user=Depends(get_admin_user)):
|
async def get_admin_config(request: Request, user=Depends(get_admin_user)):
|
||||||
return {
|
return {
|
||||||
"SHOW_ADMIN_DETAILS": request.app.state.config.SHOW_ADMIN_DETAILS,
|
"SHOW_ADMIN_DETAILS": request.app.state.config.SHOW_ADMIN_DETAILS,
|
||||||
|
"WEBUI_URL": request.app.state.config.WEBUI_URL,
|
||||||
"ENABLE_SIGNUP": request.app.state.config.ENABLE_SIGNUP,
|
"ENABLE_SIGNUP": request.app.state.config.ENABLE_SIGNUP,
|
||||||
"ENABLE_API_KEY": request.app.state.config.ENABLE_API_KEY,
|
"ENABLE_API_KEY": request.app.state.config.ENABLE_API_KEY,
|
||||||
"ENABLE_CHANNELS": request.app.state.config.ENABLE_CHANNELS,
|
"ENABLE_CHANNELS": request.app.state.config.ENABLE_CHANNELS,
|
||||||
@ -625,6 +626,7 @@ async def get_admin_config(request: Request, user=Depends(get_admin_user)):
|
|||||||
|
|
||||||
class AdminConfig(BaseModel):
|
class AdminConfig(BaseModel):
|
||||||
SHOW_ADMIN_DETAILS: bool
|
SHOW_ADMIN_DETAILS: bool
|
||||||
|
WEBUI_URL: str
|
||||||
ENABLE_SIGNUP: bool
|
ENABLE_SIGNUP: bool
|
||||||
ENABLE_API_KEY: bool
|
ENABLE_API_KEY: bool
|
||||||
ENABLE_CHANNELS: bool
|
ENABLE_CHANNELS: bool
|
||||||
@ -639,6 +641,7 @@ async def update_admin_config(
|
|||||||
request: Request, form_data: AdminConfig, user=Depends(get_admin_user)
|
request: Request, form_data: AdminConfig, user=Depends(get_admin_user)
|
||||||
):
|
):
|
||||||
request.app.state.config.SHOW_ADMIN_DETAILS = form_data.SHOW_ADMIN_DETAILS
|
request.app.state.config.SHOW_ADMIN_DETAILS = form_data.SHOW_ADMIN_DETAILS
|
||||||
|
request.app.state.config.WEBUI_URL = form_data.WEBUI_URL
|
||||||
request.app.state.config.ENABLE_SIGNUP = form_data.ENABLE_SIGNUP
|
request.app.state.config.ENABLE_SIGNUP = form_data.ENABLE_SIGNUP
|
||||||
request.app.state.config.ENABLE_API_KEY = form_data.ENABLE_API_KEY
|
request.app.state.config.ENABLE_API_KEY = form_data.ENABLE_API_KEY
|
||||||
request.app.state.config.ENABLE_CHANNELS = form_data.ENABLE_CHANNELS
|
request.app.state.config.ENABLE_CHANNELS = form_data.ENABLE_CHANNELS
|
||||||
@ -659,8 +662,10 @@ async def update_admin_config(
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
"SHOW_ADMIN_DETAILS": request.app.state.config.SHOW_ADMIN_DETAILS,
|
"SHOW_ADMIN_DETAILS": request.app.state.config.SHOW_ADMIN_DETAILS,
|
||||||
|
"WEBUI_URL": request.app.state.config.WEBUI_URL,
|
||||||
"ENABLE_SIGNUP": request.app.state.config.ENABLE_SIGNUP,
|
"ENABLE_SIGNUP": request.app.state.config.ENABLE_SIGNUP,
|
||||||
"ENABLE_API_KEY": request.app.state.config.ENABLE_API_KEY,
|
"ENABLE_API_KEY": request.app.state.config.ENABLE_API_KEY,
|
||||||
|
"ENABLE_CHANNELS": request.app.state.config.ENABLE_CHANNELS,
|
||||||
"DEFAULT_USER_ROLE": request.app.state.config.DEFAULT_USER_ROLE,
|
"DEFAULT_USER_ROLE": request.app.state.config.DEFAULT_USER_ROLE,
|
||||||
"JWT_EXPIRES_IN": request.app.state.config.JWT_EXPIRES_IN,
|
"JWT_EXPIRES_IN": request.app.state.config.JWT_EXPIRES_IN,
|
||||||
"ENABLE_COMMUNITY_SHARING": request.app.state.config.ENABLE_COMMUNITY_SHARING,
|
"ENABLE_COMMUNITY_SHARING": request.app.state.config.ENABLE_COMMUNITY_SHARING,
|
||||||
|
@ -16,7 +16,7 @@ from open_webui.models.messages import Messages, MessageModel, MessageForm
|
|||||||
|
|
||||||
from open_webui.config import ENABLE_ADMIN_CHAT_ACCESS, ENABLE_ADMIN_EXPORT
|
from open_webui.config import ENABLE_ADMIN_CHAT_ACCESS, ENABLE_ADMIN_EXPORT
|
||||||
from open_webui.constants import ERROR_MESSAGES
|
from open_webui.constants import ERROR_MESSAGES
|
||||||
from open_webui.env import SRC_LOG_LEVELS, WEBUI_URL
|
from open_webui.env import SRC_LOG_LEVELS
|
||||||
|
|
||||||
|
|
||||||
from open_webui.utils.auth import get_admin_user, get_verified_user
|
from open_webui.utils.auth import get_admin_user, get_verified_user
|
||||||
@ -181,7 +181,7 @@ async def get_channel_messages(
|
|||||||
############################
|
############################
|
||||||
|
|
||||||
|
|
||||||
async def send_notification(channel, message, active_user_ids):
|
async def send_notification(webui_url, channel, message, active_user_ids):
|
||||||
users = get_users_with_access("read", channel.access_control)
|
users = get_users_with_access("read", channel.access_control)
|
||||||
|
|
||||||
for user in users:
|
for user in users:
|
||||||
@ -196,18 +196,19 @@ async def send_notification(channel, message, active_user_ids):
|
|||||||
if webhook_url:
|
if webhook_url:
|
||||||
post_webhook(
|
post_webhook(
|
||||||
webhook_url,
|
webhook_url,
|
||||||
f"#{channel.name} - {WEBUI_URL}/channels/{channel.id}\n\n{message.content}",
|
f"#{channel.name} - {webui_url}/channels/{channel.id}\n\n{message.content}",
|
||||||
{
|
{
|
||||||
"action": "channel",
|
"action": "channel",
|
||||||
"message": message.content,
|
"message": message.content,
|
||||||
"title": channel.name,
|
"title": channel.name,
|
||||||
"url": f"{WEBUI_URL}/channels/{channel.id}",
|
"url": f"{webui_url}/channels/{channel.id}",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@router.post("/{id}/messages/post", response_model=Optional[MessageModel])
|
@router.post("/{id}/messages/post", response_model=Optional[MessageModel])
|
||||||
async def post_new_message(
|
async def post_new_message(
|
||||||
|
request: Request,
|
||||||
id: str,
|
id: str,
|
||||||
form_data: MessageForm,
|
form_data: MessageForm,
|
||||||
background_tasks: BackgroundTasks,
|
background_tasks: BackgroundTasks,
|
||||||
@ -253,7 +254,11 @@ async def post_new_message(
|
|||||||
active_user_ids = get_user_ids_from_room(f"channel:{channel.id}")
|
active_user_ids = get_user_ids_from_room(f"channel:{channel.id}")
|
||||||
|
|
||||||
background_tasks.add_task(
|
background_tasks.add_task(
|
||||||
send_notification, channel, message, active_user_ids
|
send_notification,
|
||||||
|
request.app.state.config.WEBUI_URL,
|
||||||
|
channel,
|
||||||
|
message,
|
||||||
|
active_user_ids,
|
||||||
)
|
)
|
||||||
|
|
||||||
return MessageModel(**message.model_dump())
|
return MessageModel(**message.model_dump())
|
||||||
|
@ -65,7 +65,6 @@ from open_webui.env import (
|
|||||||
SRC_LOG_LEVELS,
|
SRC_LOG_LEVELS,
|
||||||
GLOBAL_LOG_LEVEL,
|
GLOBAL_LOG_LEVEL,
|
||||||
BYPASS_MODEL_ACCESS_CONTROL,
|
BYPASS_MODEL_ACCESS_CONTROL,
|
||||||
WEBUI_URL,
|
|
||||||
)
|
)
|
||||||
from open_webui.constants import TASKS
|
from open_webui.constants import TASKS
|
||||||
|
|
||||||
@ -859,12 +858,12 @@ async def process_chat_response(
|
|||||||
if webhook_url:
|
if webhook_url:
|
||||||
post_webhook(
|
post_webhook(
|
||||||
webhook_url,
|
webhook_url,
|
||||||
f"{title} - {WEBUI_URL}/c/{metadata['chat_id']}\n\n{content}",
|
f"{title} - {request.app.state.config.WEBUI_URL}/c/{metadata['chat_id']}\n\n{content}",
|
||||||
{
|
{
|
||||||
"action": "chat",
|
"action": "chat",
|
||||||
"message": content,
|
"message": content,
|
||||||
"title": title,
|
"title": title,
|
||||||
"url": f"{WEBUI_URL}/c/{metadata['chat_id']}",
|
"url": f"{request.app.state.config.WEBUI_URL}/c/{metadata['chat_id']}",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -142,6 +142,29 @@
|
|||||||
|
|
||||||
<hr class=" border-gray-50 dark:border-gray-850 my-2" />
|
<hr class=" border-gray-50 dark:border-gray-850 my-2" />
|
||||||
|
|
||||||
|
<div class=" w-full justify-between">
|
||||||
|
<div class="flex w-full justify-between">
|
||||||
|
<div class=" self-center text-xs font-medium">{$i18n.t('WebUI URL')}</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex mt-2 space-x-2">
|
||||||
|
<input
|
||||||
|
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-none"
|
||||||
|
type="text"
|
||||||
|
placeholder={`e.g.) "http://localhost:3000"`}
|
||||||
|
bind:value={adminConfig.WEBUI_URL}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mt-2 text-xs text-gray-400 dark:text-gray-500">
|
||||||
|
{$i18n.t(
|
||||||
|
'Enter the public URL of your WebUI. This URL will be used to generate links in the notifications.'
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr class=" border-gray-50 dark:border-gray-850 my-2" />
|
||||||
|
|
||||||
<div class=" w-full justify-between">
|
<div class=" w-full justify-between">
|
||||||
<div class="flex w-full justify-between">
|
<div class="flex w-full justify-between">
|
||||||
<div class=" self-center text-xs font-medium">{$i18n.t('JWT Expiration')}</div>
|
<div class=" self-center text-xs font-medium">{$i18n.t('JWT Expiration')}</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user