diff --git a/backend/open_webui/config.py b/backend/open_webui/config.py index d3b7c9314c..8f12ca68e2 100644 --- a/backend/open_webui/config.py +++ b/backend/open_webui/config.py @@ -1659,6 +1659,12 @@ ENABLE_AUTOCOMPLETE_GENERATION = PersistentConfig( os.environ.get("ENABLE_AUTOCOMPLETE_GENERATION", "False").lower() == "true", ) +TRANSLATION_LANGUAGES = PersistentConfig( + "TRANSLATION_LANGUAGES", + "translation_languages", + os.getenv("TRANSLATION_LANGUAGES", "en").split(","), +) + AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH = PersistentConfig( "AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH", "task.autocomplete.input_max_length", diff --git a/backend/open_webui/main.py b/backend/open_webui/main.py index cbaefe1f3e..290a1e7dda 100644 --- a/backend/open_webui/main.py +++ b/backend/open_webui/main.py @@ -397,6 +397,7 @@ from open_webui.config import ( QUERY_GENERATION_PROMPT_TEMPLATE, AUTOCOMPLETE_GENERATION_PROMPT_TEMPLATE, AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH, + TRANSLATION_LANGUAGES, AppConfig, reset_config, ) @@ -1099,6 +1100,7 @@ app.state.config.ENABLE_AUTOCOMPLETE_GENERATION = ENABLE_AUTOCOMPLETE_GENERATION app.state.config.ENABLE_TAGS_GENERATION = ENABLE_TAGS_GENERATION app.state.config.ENABLE_TITLE_GENERATION = ENABLE_TITLE_GENERATION app.state.config.ENABLE_FOLLOW_UP_GENERATION = ENABLE_FOLLOW_UP_GENERATION +app.state.config.TRANSLATION_LANGUAGES = TRANSLATION_LANGUAGES app.state.config.TITLE_GENERATION_PROMPT_TEMPLATE = TITLE_GENERATION_PROMPT_TEMPLATE @@ -1695,6 +1697,7 @@ async def get_app_config(request: Request): "enable_admin_chat_access": ENABLE_ADMIN_CHAT_ACCESS, "enable_google_drive_integration": app.state.config.ENABLE_GOOGLE_DRIVE_INTEGRATION, "enable_onedrive_integration": app.state.config.ENABLE_ONEDRIVE_INTEGRATION, + "translation_languages": app.state.config.TRANSLATION_LANGUAGES, } if user is not None else {} diff --git a/backend/open_webui/routers/tasks.py b/backend/open_webui/routers/tasks.py index e49602094f..73296afb18 100644 --- a/backend/open_webui/routers/tasks.py +++ b/backend/open_webui/routers/tasks.py @@ -2,7 +2,7 @@ from fastapi import APIRouter, Depends, HTTPException, Response, status, Request from fastapi.responses import JSONResponse, RedirectResponse from pydantic import BaseModel -from typing import Optional +from typing import Optional, List import logging import re @@ -68,6 +68,7 @@ async def get_task_config(request: Request, user=Depends(get_verified_user)): "ENABLE_RETRIEVAL_QUERY_GENERATION": request.app.state.config.ENABLE_RETRIEVAL_QUERY_GENERATION, "QUERY_GENERATION_PROMPT_TEMPLATE": request.app.state.config.QUERY_GENERATION_PROMPT_TEMPLATE, "TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE": request.app.state.config.TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE, + "TRANSLATION_LANGUAGES": request.app.state.config.TRANSLATION_LANGUAGES, } @@ -87,6 +88,7 @@ class TaskConfigForm(BaseModel): ENABLE_RETRIEVAL_QUERY_GENERATION: bool QUERY_GENERATION_PROMPT_TEMPLATE: str TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE: str + TRANSLATION_LANGUAGES: Optional[List[str]] = [] @router.post("/config/update") @@ -135,6 +137,10 @@ async def update_task_config( request.app.state.config.TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE = ( form_data.TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE ) + + request.app.state.config.TRANSLATION_LANGUAGES = ( + form_data.TRANSLATION_LANGUAGES + ) return { "TASK_MODEL": request.app.state.config.TASK_MODEL, @@ -152,6 +158,7 @@ async def update_task_config( "ENABLE_RETRIEVAL_QUERY_GENERATION": request.app.state.config.ENABLE_RETRIEVAL_QUERY_GENERATION, "QUERY_GENERATION_PROMPT_TEMPLATE": request.app.state.config.QUERY_GENERATION_PROMPT_TEMPLATE, "TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE": request.app.state.config.TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE, + "TRANSLATION_LANGUAGES": request.app.state.config.TRANSLATION_LANGUAGES, } diff --git a/src/lib/components/admin/Settings/Interface.svelte b/src/lib/components/admin/Settings/Interface.svelte index 3114bea688..86507f7c08 100644 --- a/src/lib/components/admin/Settings/Interface.svelte +++ b/src/lib/components/admin/Settings/Interface.svelte @@ -22,6 +22,8 @@ import Spinner from '$lib/components/common/Spinner.svelte'; import Banners from './Interface/Banners.svelte'; + import LangPicker from './LangPicker.svelte'; + const dispatch = createEventDispatcher(); const i18n = getContext('i18n'); @@ -41,7 +43,8 @@ ENABLE_SEARCH_QUERY_GENERATION: true, ENABLE_RETRIEVAL_QUERY_GENERATION: true, QUERY_GENERATION_PROMPT_TEMPLATE: '', - TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE: '' + TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE: '', + TRANSLATION_LANGUAGES: [] }; let promptSuggestions = []; @@ -430,6 +433,12 @@ {#if $user?.role === 'admin'} +