From b4465987f95fe062ef1df3c510ccd9631f58db0e Mon Sep 17 00:00:00 2001 From: Jarrod Lowe Date: Tue, 8 Apr 2025 13:39:00 +1200 Subject: [PATCH 001/161] Environment variable to redirect on logout --- backend/open_webui/env.py | 3 +++ backend/open_webui/main.py | 2 ++ backend/open_webui/routers/auths.py | 7 +++++++ 3 files changed, 12 insertions(+) diff --git a/backend/open_webui/env.py b/backend/open_webui/env.py index e3819fdc5..bcc8a02c3 100644 --- a/backend/open_webui/env.py +++ b/backend/open_webui/env.py @@ -340,6 +340,9 @@ BYPASS_MODEL_ACCESS_CONTROL = ( os.environ.get("BYPASS_MODEL_ACCESS_CONTROL", "False").lower() == "true" ) +SIGNOUT_REDIRECT_URI = os.environ.get("SIGNOUT_REDIRECT_URI", None) + + #################################### # WEBUI_SECRET_KEY #################################### diff --git a/backend/open_webui/main.py b/backend/open_webui/main.py index c9ca059c2..07efa1e5f 100644 --- a/backend/open_webui/main.py +++ b/backend/open_webui/main.py @@ -335,6 +335,7 @@ from open_webui.env import ( WEBUI_SESSION_COOKIE_SECURE, WEBUI_AUTH_TRUSTED_EMAIL_HEADER, WEBUI_AUTH_TRUSTED_NAME_HEADER, + SIGNOUT_REDIRECT_URI, ENABLE_WEBSOCKET_SUPPORT, BYPASS_MODEL_ACCESS_CONTROL, RESET_CONFIG_ON_START, @@ -564,6 +565,7 @@ app.state.config.LDAP_CIPHERS = LDAP_CIPHERS app.state.AUTH_TRUSTED_EMAIL_HEADER = WEBUI_AUTH_TRUSTED_EMAIL_HEADER app.state.AUTH_TRUSTED_NAME_HEADER = WEBUI_AUTH_TRUSTED_NAME_HEADER +app.state.SIGNOUT_REDIRECT_URI = SIGNOUT_REDIRECT_URI app.state.USER_COUNT = None app.state.TOOLS = {} diff --git a/backend/open_webui/routers/auths.py b/backend/open_webui/routers/auths.py index 67c2e9f2a..04e04afbf 100644 --- a/backend/open_webui/routers/auths.py +++ b/backend/open_webui/routers/auths.py @@ -27,6 +27,7 @@ from open_webui.env import ( WEBUI_AUTH_TRUSTED_NAME_HEADER, WEBUI_AUTH_COOKIE_SAME_SITE, WEBUI_AUTH_COOKIE_SECURE, + SIGNOUT_REDIRECT_URI, SRC_LOG_LEVELS, ) from fastapi import APIRouter, Depends, HTTPException, Request, status @@ -555,6 +556,12 @@ async def signout(request: Request, response: Response): detail="Failed to sign out from the OpenID provider.", ) + if SIGNOUT_REDIRECT_URI: + return RedirectResponse( + headers=response.headers, + url=SIGNOUT_REDIRECT_URI, + ) + return {"status": True} From 839ba22c90991dc4d72810aa6f6a527664db80c2 Mon Sep 17 00:00:00 2001 From: tth37 Date: Mon, 14 Apr 2025 01:49:05 +0800 Subject: [PATCH 002/161] feat: Backend for Self-Hosted/External Web Search/Loader Engines --- backend/open_webui/config.py | 23 ++++++++ backend/open_webui/main.py | 8 +++ .../open_webui/retrieval/loaders/external.py | 56 +++++++++++++++++++ backend/open_webui/retrieval/web/external.py | 45 +++++++++++++++ backend/open_webui/retrieval/web/utils.py | 8 +++ backend/open_webui/routers/retrieval.py | 9 +++ 6 files changed, 149 insertions(+) create mode 100644 backend/open_webui/retrieval/loaders/external.py create mode 100644 backend/open_webui/retrieval/web/external.py diff --git a/backend/open_webui/config.py b/backend/open_webui/config.py index bd822d06d..434b6403f 100644 --- a/backend/open_webui/config.py +++ b/backend/open_webui/config.py @@ -2236,6 +2236,29 @@ FIRECRAWL_API_BASE_URL = PersistentConfig( os.environ.get("FIRECRAWL_API_BASE_URL", "https://api.firecrawl.dev"), ) +EXTERNAL_WEB_SEARCH_URL = PersistentConfig( + "EXTERNAL_WEB_SEARCH_URL", + "rag.web.search.external_web_search_url", + os.environ.get("EXTERNAL_WEB_SEARCH_URL", ""), +) + +EXTERNAL_WEB_SEARCH_API_KEY = PersistentConfig( + "EXTERNAL_WEB_SEARCH_API_KEY", + "rag.web.search.external_web_search_api_key", + os.environ.get("EXTERNAL_WEB_SEARCH_API_KEY", ""), +) + +EXTERNAL_WEB_LOADER_URL = PersistentConfig( + "EXTERNAL_WEB_LOADER_URL", + "rag.web.loader.external_web_loader_url", + os.environ.get("EXTERNAL_WEB_LOADER_URL", ""), +) + +EXTERNAL_WEB_LOADER_API_KEY = PersistentConfig( + "EXTERNAL_WEB_LOADER_API_KEY", + "rag.web.loader.external_web_loader_api_key", + os.environ.get("EXTERNAL_WEB_LOADER_API_KEY", ""), +) #################################### # Images diff --git a/backend/open_webui/main.py b/backend/open_webui/main.py index 1d1efc5df..b18313f5c 100644 --- a/backend/open_webui/main.py +++ b/backend/open_webui/main.py @@ -245,6 +245,10 @@ from open_webui.config import ( ENABLE_GOOGLE_DRIVE_INTEGRATION, ENABLE_ONEDRIVE_INTEGRATION, UPLOAD_DIR, + EXTERNAL_WEB_SEARCH_URL, + EXTERNAL_WEB_SEARCH_API_KEY, + EXTERNAL_WEB_LOADER_URL, + EXTERNAL_WEB_LOADER_API_KEY, # WebUI WEBUI_AUTH, WEBUI_NAME, @@ -667,6 +671,10 @@ app.state.config.EXA_API_KEY = EXA_API_KEY app.state.config.PERPLEXITY_API_KEY = PERPLEXITY_API_KEY app.state.config.SOUGOU_API_SID = SOUGOU_API_SID app.state.config.SOUGOU_API_SK = SOUGOU_API_SK +app.state.config.EXTERNAL_WEB_SEARCH_URL = EXTERNAL_WEB_SEARCH_URL +app.state.config.EXTERNAL_WEB_SEARCH_API_KEY = EXTERNAL_WEB_SEARCH_API_KEY +app.state.config.EXTERNAL_WEB_LOADER_URL = EXTERNAL_WEB_LOADER_URL +app.state.config.EXTERNAL_WEB_LOADER_API_KEY = EXTERNAL_WEB_LOADER_API_KEY app.state.config.PLAYWRIGHT_WS_URL = PLAYWRIGHT_WS_URL diff --git a/backend/open_webui/retrieval/loaders/external.py b/backend/open_webui/retrieval/loaders/external.py new file mode 100644 index 000000000..8ff2e617e --- /dev/null +++ b/backend/open_webui/retrieval/loaders/external.py @@ -0,0 +1,56 @@ +import requests +import logging +from typing import Iterator, List, Union + +from langchain_core.document_loaders import BaseLoader +from langchain_core.documents import Document +from open_webui.env import SRC_LOG_LEVELS + +log = logging.getLogger(__name__) +log.setLevel(SRC_LOG_LEVELS["RAG"]) + + +class ExternalLoader(BaseLoader): + def __init__( + self, + web_paths: Union[str, List[str]], + external_url: str, + external_api_key: str, + continue_on_failure: bool = True, + **kwargs, + ) -> None: + if not web_paths: + raise ValueError("At least one URL must be provided.") + + self.external_url = external_url + self.external_api_key = external_api_key + self.urls = web_paths if isinstance(web_paths, list) else [web_paths] + self.continue_on_failure = continue_on_failure + + def lazy_load(self) -> Iterator[Document]: + batch_size = 20 + for i in range(0, len(self.urls), batch_size): + urls = self.urls[i : i + batch_size] + try: + response = requests.get( + self.external_url, + headers={ + "User-Agent": "Open WebUI (https://github.com/open-webui/open-webui) RAG Bot", + "Authorization": f"Bearer {self.external_api_key}", + }, + params={ + "urls": urls, + } + ) + response.raise_for_status() + results = response.json() + for result in results: + yield Document( + page_content=result.get("page_content", ""), + metadata=result.get("metadata", {}), + ) + except Exception as e: + if self.continue_on_failure: + log.error(f"Error extracting content from batch {urls}: {e}") + else: + raise e diff --git a/backend/open_webui/retrieval/web/external.py b/backend/open_webui/retrieval/web/external.py new file mode 100644 index 000000000..29e914f84 --- /dev/null +++ b/backend/open_webui/retrieval/web/external.py @@ -0,0 +1,45 @@ +import logging +from typing import Optional, List + +import requests +from open_webui.retrieval.web.main import SearchResult, get_filtered_results +from open_webui.env import SRC_LOG_LEVELS + +log = logging.getLogger(__name__) +log.setLevel(SRC_LOG_LEVELS["RAG"]) + + +def search_external( + external_url: str, + external_api_key: str, + query: str, + count: int, + filter_list: Optional[List[str]] = None, +) -> List[SearchResult]: + try: + response = requests.get( + external_url, + headers={ + "User-Agent": "Open WebUI (https://github.com/open-webui/open-webui) RAG Bot", + "Authorization": f"Bearer {external_api_key}", + }, + params={ + "query": query, + "count": count, + } + ) + response.raise_for_status() + results = response.json() + if filter_list: + results = get_filtered_results(results, filter_list) + return [ + SearchResult( + link=result.get("link"), + title=result.get("title"), + snippet=result.get("snippet"), + ) + for result in results[:count] + ] + except Exception as e: + log.error(f"Error in External search: {e}") + return [] diff --git a/backend/open_webui/retrieval/web/utils.py b/backend/open_webui/retrieval/web/utils.py index 718cfe52f..fc46d78c4 100644 --- a/backend/open_webui/retrieval/web/utils.py +++ b/backend/open_webui/retrieval/web/utils.py @@ -25,6 +25,7 @@ from langchain_community.document_loaders.firecrawl import FireCrawlLoader from langchain_community.document_loaders.base import BaseLoader from langchain_core.documents import Document from open_webui.retrieval.loaders.tavily import TavilyLoader +from open_webui.retrieval.loaders.external import ExternalLoader from open_webui.constants import ERROR_MESSAGES from open_webui.config import ( ENABLE_RAG_LOCAL_WEB_FETCH, @@ -35,6 +36,8 @@ from open_webui.config import ( FIRECRAWL_API_KEY, TAVILY_API_KEY, TAVILY_EXTRACT_DEPTH, + EXTERNAL_WEB_LOADER_URL, + EXTERNAL_WEB_LOADER_API_KEY, ) from open_webui.env import SRC_LOG_LEVELS @@ -619,6 +622,11 @@ def get_web_loader( web_loader_args["api_key"] = TAVILY_API_KEY.value web_loader_args["extract_depth"] = TAVILY_EXTRACT_DEPTH.value + if WEB_LOADER_ENGINE.value == "external": + WebLoaderClass = ExternalLoader + web_loader_args["external_url"] = EXTERNAL_WEB_LOADER_URL.value + web_loader_args["external_api_key"] = EXTERNAL_WEB_LOADER_API_KEY.value + if WebLoaderClass: web_loader = WebLoaderClass(**web_loader_args) diff --git a/backend/open_webui/routers/retrieval.py b/backend/open_webui/routers/retrieval.py index 8f89351ac..72d10245d 100644 --- a/backend/open_webui/routers/retrieval.py +++ b/backend/open_webui/routers/retrieval.py @@ -61,6 +61,7 @@ from open_webui.retrieval.web.bing import search_bing from open_webui.retrieval.web.exa import search_exa from open_webui.retrieval.web.perplexity import search_perplexity from open_webui.retrieval.web.sougou import search_sougou +from open_webui.retrieval.web.external import search_external from open_webui.retrieval.utils import ( get_embedding_function, @@ -1465,6 +1466,14 @@ def search_web(request: Request, engine: str, query: str) -> list[SearchResult]: raise Exception( "No SOUGOU_API_SID or SOUGOU_API_SK found in environment variables" ) + elif engine == "external": + return search_external( + request.app.state.config.EXTERNAL_WEB_SEARCH_URL, + request.app.state.config.EXTERNAL_WEB_SEARCH_API_KEY, + query, + request.app.state.config.WEB_SEARCH_RESULT_COUNT, + request.app.state.config.WEB_SEARCH_DOMAIN_FILTER_LIST, + ) else: raise Exception("No search engine API key found in environment variables") From 22f0365cef0d366632be48e20b25fbf09330f9ec Mon Sep 17 00:00:00 2001 From: tth37 Date: Mon, 14 Apr 2025 02:05:58 +0800 Subject: [PATCH 003/161] format --- backend/open_webui/retrieval/loaders/external.py | 2 +- backend/open_webui/retrieval/web/external.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/open_webui/retrieval/loaders/external.py b/backend/open_webui/retrieval/loaders/external.py index 8ff2e617e..dd67035fd 100644 --- a/backend/open_webui/retrieval/loaders/external.py +++ b/backend/open_webui/retrieval/loaders/external.py @@ -40,7 +40,7 @@ class ExternalLoader(BaseLoader): }, params={ "urls": urls, - } + }, ) response.raise_for_status() results = response.json() diff --git a/backend/open_webui/retrieval/web/external.py b/backend/open_webui/retrieval/web/external.py index 29e914f84..f0a97fcfd 100644 --- a/backend/open_webui/retrieval/web/external.py +++ b/backend/open_webui/retrieval/web/external.py @@ -26,7 +26,7 @@ def search_external( params={ "query": query, "count": count, - } + }, ) response.raise_for_status() results = response.json() From 008fec80c10b911068205a1782ea28507e3dea6b Mon Sep 17 00:00:00 2001 From: tth37 Date: Mon, 14 Apr 2025 18:17:27 +0800 Subject: [PATCH 004/161] fix: Update external search/loader method to POST --- backend/open_webui/retrieval/loaders/external.py | 7 ++----- backend/open_webui/retrieval/web/external.py | 8 +++++--- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/backend/open_webui/retrieval/loaders/external.py b/backend/open_webui/retrieval/loaders/external.py index dd67035fd..642cfd3a5 100644 --- a/backend/open_webui/retrieval/loaders/external.py +++ b/backend/open_webui/retrieval/loaders/external.py @@ -19,9 +19,6 @@ class ExternalLoader(BaseLoader): continue_on_failure: bool = True, **kwargs, ) -> None: - if not web_paths: - raise ValueError("At least one URL must be provided.") - self.external_url = external_url self.external_api_key = external_api_key self.urls = web_paths if isinstance(web_paths, list) else [web_paths] @@ -32,13 +29,13 @@ class ExternalLoader(BaseLoader): for i in range(0, len(self.urls), batch_size): urls = self.urls[i : i + batch_size] try: - response = requests.get( + response = requests.post( self.external_url, headers={ "User-Agent": "Open WebUI (https://github.com/open-webui/open-webui) RAG Bot", "Authorization": f"Bearer {self.external_api_key}", }, - params={ + json={ "urls": urls, }, ) diff --git a/backend/open_webui/retrieval/web/external.py b/backend/open_webui/retrieval/web/external.py index f0a97fcfd..a5c8003e4 100644 --- a/backend/open_webui/retrieval/web/external.py +++ b/backend/open_webui/retrieval/web/external.py @@ -17,13 +17,13 @@ def search_external( filter_list: Optional[List[str]] = None, ) -> List[SearchResult]: try: - response = requests.get( + response = requests.post( external_url, headers={ "User-Agent": "Open WebUI (https://github.com/open-webui/open-webui) RAG Bot", "Authorization": f"Bearer {external_api_key}", }, - params={ + json={ "query": query, "count": count, }, @@ -32,7 +32,7 @@ def search_external( results = response.json() if filter_list: results = get_filtered_results(results, filter_list) - return [ + results = [ SearchResult( link=result.get("link"), title=result.get("title"), @@ -40,6 +40,8 @@ def search_external( ) for result in results[:count] ] + log.info(f"External search results: {results}") + return results except Exception as e: log.error(f"Error in External search: {e}") return [] From 85f8e91288c201d68cece8f3ec3d08968a6d5fb1 Mon Sep 17 00:00:00 2001 From: tth37 Date: Mon, 14 Apr 2025 18:19:26 +0800 Subject: [PATCH 005/161] feat: Allow admin editing external search/loader settings --- backend/open_webui/routers/retrieval.py | 24 +++++++ .../admin/Settings/WebSearch.svelte | 66 ++++++++++++++++++- 2 files changed, 88 insertions(+), 2 deletions(-) diff --git a/backend/open_webui/routers/retrieval.py b/backend/open_webui/routers/retrieval.py index 72d10245d..91e3fa7ae 100644 --- a/backend/open_webui/routers/retrieval.py +++ b/backend/open_webui/routers/retrieval.py @@ -419,6 +419,10 @@ async def get_rag_config(request: Request, user=Depends(get_admin_user)): "FIRECRAWL_API_KEY": request.app.state.config.FIRECRAWL_API_KEY, "FIRECRAWL_API_BASE_URL": request.app.state.config.FIRECRAWL_API_BASE_URL, "TAVILY_EXTRACT_DEPTH": request.app.state.config.TAVILY_EXTRACT_DEPTH, + "EXTERNAL_WEB_SEARCH_URL": request.app.state.config.EXTERNAL_WEB_SEARCH_URL, + "EXTERNAL_WEB_SEARCH_API_KEY": request.app.state.config.EXTERNAL_WEB_SEARCH_API_KEY, + "EXTERNAL_WEB_LOADER_URL": request.app.state.config.EXTERNAL_WEB_LOADER_URL, + "EXTERNAL_WEB_LOADER_API_KEY": request.app.state.config.EXTERNAL_WEB_LOADER_API_KEY, "YOUTUBE_LOADER_LANGUAGE": request.app.state.config.YOUTUBE_LOADER_LANGUAGE, "YOUTUBE_LOADER_PROXY_URL": request.app.state.config.YOUTUBE_LOADER_PROXY_URL, "YOUTUBE_LOADER_TRANSLATION": request.app.state.YOUTUBE_LOADER_TRANSLATION, @@ -464,6 +468,10 @@ class WebConfig(BaseModel): FIRECRAWL_API_KEY: Optional[str] = None FIRECRAWL_API_BASE_URL: Optional[str] = None TAVILY_EXTRACT_DEPTH: Optional[str] = None + EXTERNAL_WEB_SEARCH_URL: Optional[str] = None + EXTERNAL_WEB_SEARCH_API_KEY: Optional[str] = None + EXTERNAL_WEB_LOADER_URL: Optional[str] = None + EXTERNAL_WEB_LOADER_API_KEY: Optional[str] = None YOUTUBE_LOADER_LANGUAGE: Optional[List[str]] = None YOUTUBE_LOADER_PROXY_URL: Optional[str] = None YOUTUBE_LOADER_TRANSLATION: Optional[str] = None @@ -698,6 +706,18 @@ async def update_rag_config( request.app.state.config.FIRECRAWL_API_BASE_URL = ( form_data.web.FIRECRAWL_API_BASE_URL ) + request.app.state.config.EXTERNAL_WEB_SEARCH_URL = ( + form_data.web.EXTERNAL_WEB_SEARCH_URL + ) + request.app.state.config.EXTERNAL_WEB_SEARCH_API_KEY = ( + form_data.web.EXTERNAL_WEB_SEARCH_API_KEY + ) + request.app.state.config.EXTERNAL_WEB_LOADER_URL = ( + form_data.web.EXTERNAL_WEB_LOADER_URL + ) + request.app.state.config.EXTERNAL_WEB_LOADER_API_KEY = ( + form_data.web.EXTERNAL_WEB_LOADER_API_KEY + ) request.app.state.config.TAVILY_EXTRACT_DEPTH = ( form_data.web.TAVILY_EXTRACT_DEPTH ) @@ -779,6 +799,10 @@ async def update_rag_config( "FIRECRAWL_API_KEY": request.app.state.config.FIRECRAWL_API_KEY, "FIRECRAWL_API_BASE_URL": request.app.state.config.FIRECRAWL_API_BASE_URL, "TAVILY_EXTRACT_DEPTH": request.app.state.config.TAVILY_EXTRACT_DEPTH, + "EXTERNAL_WEB_SEARCH_URL": request.app.state.config.EXTERNAL_WEB_SEARCH_URL, + "EXTERNAL_WEB_SEARCH_API_KEY": request.app.state.config.EXTERNAL_WEB_SEARCH_API_KEY, + "EXTERNAL_WEB_LOADER_URL": request.app.state.config.EXTERNAL_WEB_LOADER_URL, + "EXTERNAL_WEB_LOADER_API_KEY": request.app.state.config.EXTERNAL_WEB_LOADER_API_KEY, "YOUTUBE_LOADER_LANGUAGE": request.app.state.config.YOUTUBE_LOADER_LANGUAGE, "YOUTUBE_LOADER_PROXY_URL": request.app.state.config.YOUTUBE_LOADER_PROXY_URL, "YOUTUBE_LOADER_TRANSLATION": request.app.state.YOUTUBE_LOADER_TRANSLATION, diff --git a/src/lib/components/admin/Settings/WebSearch.svelte b/src/lib/components/admin/Settings/WebSearch.svelte index d9771f835..82bd67814 100644 --- a/src/lib/components/admin/Settings/WebSearch.svelte +++ b/src/lib/components/admin/Settings/WebSearch.svelte @@ -30,9 +30,10 @@ 'bing', 'exa', 'perplexity', - 'sougou' + 'sougou', + 'external' ]; - let webLoaderEngines = ['playwright', 'firecrawl', 'tavily']; + let webLoaderEngines = ['playwright', 'firecrawl', 'tavily', 'external']; let webConfig = null; @@ -431,6 +432,36 @@ /> + {:else if webConfig.WEB_SEARCH_ENGINE === 'external'} +
+
+ {$i18n.t('External Web Search URL')} +
+ +
+
+ +
+
+
+
+
+
+ {$i18n.t('External Web Search API Key')} +
+ + +
+
{/if} {/if} @@ -652,6 +683,37 @@ {/if} + {:else if webConfig.WEB_LOADER_ENGINE === 'external'} +
+
+
+ {$i18n.t('External Web Loader URL')} +
+ +
+
+ +
+
+
+ +
+
+ {$i18n.t('External Web Loader API Key')} +
+ + +
+
{/if}
From dcb3f18e1e4e342c736dc1c86f337467883bc1bb Mon Sep 17 00:00:00 2001 From: tth37 Date: Mon, 14 Apr 2025 18:56:47 +0800 Subject: [PATCH 006/161] refac: styling --- .../admin/Settings/WebSearch.svelte | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/lib/components/admin/Settings/WebSearch.svelte b/src/lib/components/admin/Settings/WebSearch.svelte index 82bd67814..96b887405 100644 --- a/src/lib/components/admin/Settings/WebSearch.svelte +++ b/src/lib/components/admin/Settings/WebSearch.svelte @@ -433,25 +433,26 @@
{:else if webConfig.WEB_SEARCH_ENGINE === 'external'} -
-
- {$i18n.t('External Web Search URL')} -
- -
-
- -
-
-
+
+ {$i18n.t('External Web Search URL')} +
+ +
+
+ +
+
+
+ +
{$i18n.t('External Web Search API Key')}
From 21206bf4b9a194e6a032a273707c9b35e9f02cf5 Mon Sep 17 00:00:00 2001 From: Panda Date: Mon, 14 Apr 2025 14:26:10 +0200 Subject: [PATCH 007/161] i18n: zh-cn fix --- src/lib/i18n/locales/zh-CN/translation.json | 30 ++++++++++----------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index f775849a4..af8211709 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -57,20 +57,20 @@ "All": "全部", "All Documents": "所有文档", "All models deleted successfully": "所有模型删除成功", - "Allow Call": "", - "Allow Chat Controls": "允许对话高级设置", + "Allow Call": "允许通话", + "Allow Chat Controls": "允许使用对话高级设置", "Allow Chat Delete": "允许删除对话记录", "Allow Chat Deletion": "允许删除对话记录", "Allow Chat Edit": "允许编辑对话记录", "Allow File Upload": "允许上传文件", - "Allow Multiple Models in Chat": "", + "Allow Multiple Models in Chat": "允许同时与多个模型聊天", "Allow non-local voices": "允许调用非本地音色", - "Allow Speech to Text": "", + "Allow Speech to Text": "允许语音转文本", "Allow Temporary Chat": "允许临时对话", - "Allow Text to Speech": "", + "Allow Text to Speech": "允许文本转语音", "Allow User Location": "允许获取您的位置", "Allow Voice Interruption in Call": "允许通话中的打断语音", - "Allowed Endpoints": "允许的端点", + "Allowed Endpoints": "允许的 API 端点", "Already have an account?": "已经拥有账号了?", "Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out.": "top_p 的替代方法,旨在确保质量和多样性之间的平衡。参数 p 表示相对于最可能令牌的概率,一个令牌被考虑的最小概率。例如,当 p=0.05 且最可能的令牌概率为 0.9 时,概率值小于 0.045 的词元将被过滤掉。", "Always": "保持", @@ -83,7 +83,7 @@ "and": "和", "and {{COUNT}} more": "还有 {{COUNT}} 个", "and create a new shared link.": "并创建一个新的分享链接。", - "Android": "", + "Android": "Android", "API Base URL": "API 请求地址", "API Key": "API 密钥", "API Key created.": "API 密钥已创建。", @@ -245,7 +245,7 @@ "Copied shared chat URL to clipboard!": "已复制此对话分享链接至剪贴板!", "Copied to clipboard": "已复制到剪贴板", "Copy": "复制", - "Copy Formatted Text": "", + "Copy Formatted Text": "复制格式化文本", "Copy last code block": "复制最后一个代码块中的代码", "Copy last response": "复制最后一次回复内容", "Copy Link": "复制链接", @@ -308,7 +308,7 @@ "Deleted User": "已删除用户", "Describe your knowledge base and objectives": "描述您的知识库和目标", "Description": "描述", - "Detect Artifacts Automatically": "", + "Detect Artifacts Automatically": "自动检测 Artifacts", "Didn't fully follow instructions": "没有完全遵照指示", "Direct": "直接", "Direct Connections": "直接连接", @@ -364,7 +364,7 @@ "e.g. my_filter": "例如:my_filter", "e.g. my_tools": "例如:my_tools", "e.g. Tools for performing various operations": "例如:用于执行各种操作的工具", - "e.g., en-US,ja-JP (leave blank for auto-detect)": "", + "e.g., en-US,ja-JP (leave blank for auto-detect)": "例如,'en-US,ja-JP'(留空以便自动检测)", "Edit": "编辑", "Edit Arena Model": "编辑竞技场模型", "Edit Channel": "编辑频道", @@ -605,8 +605,8 @@ "Hybrid Search": "混合搜索", "I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "我已阅读并理解我的行为所带来的影响,明白执行任意代码所涉及的风险。且我已验证代码来源可信度。", "ID": "ID", - "iframe Sandbox Allow Forms": "", - "iframe Sandbox Allow Same Origin": "", + "iframe Sandbox Allow Forms": "iframe 沙盒允许表单提交", + "iframe Sandbox Allow Same Origin": "iframe 沙盒允许同源访问", "Ignite curiosity": "点燃好奇心", "Image": "图像生成", "Image Compression": "图像压缩", @@ -667,7 +667,7 @@ "Label": "标签", "Landing Page Mode": "默认主页样式", "Language": "语言", - "Language Locales": "", + "Language Locales": "语言环境", "Last Active": "最后在线时间", "Last Modified": "最后修改时间", "Last reply": "最后回复", @@ -902,7 +902,7 @@ "Reindex Knowledge Base Vectors": "重建知识库向量", "Release Notes": "更新日志", "Relevance": "相关性", - "Relevance Threshold": "", + "Relevance Threshold": "相关性阈值", "Remove": "移除", "Remove Model": "移除模型", "Rename": "重命名", @@ -1203,7 +1203,7 @@ "variable": "变量", "variable to have them replaced with clipboard content.": "变量将被剪贴板内容替换。", "Verify Connection": "验证连接", - "Verify SSL Certificate": "", + "Verify SSL Certificate": "验证 SSL 证书", "Version": "版本", "Version {{selectedVersion}} of {{totalVersions}}": "版本 {{selectedVersion}}/{{totalVersions}}", "View Replies": "查看回复", From 5fd794612e2c9627e46386843786c02b691f1cad Mon Sep 17 00:00:00 2001 From: hurxxxx Date: Mon, 14 Apr 2025 22:57:32 +0900 Subject: [PATCH 008/161] add onedrive sub menu --- .../chat/MessageInput/InputMenu.svelte | 146 ++++----- src/lib/utils/onedrive-file-picker.ts | 284 +++++++++++++----- 2 files changed, 273 insertions(+), 157 deletions(-) diff --git a/src/lib/components/chat/MessageInput/InputMenu.svelte b/src/lib/components/chat/MessageInput/InputMenu.svelte index 27fe2cde2..ab455ddeb 100644 --- a/src/lib/components/chat/MessageInput/InputMenu.svelte +++ b/src/lib/components/chat/MessageInput/InputMenu.svelte @@ -229,94 +229,66 @@ {/if} {#if $config?.features?.enable_onedrive_integration} - { - uploadOneDriveHandler(); - }} - > - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{$i18n.t('Microsoft OneDrive')}
+ + + { + uploadOneDriveHandler('personal'); + }} > - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{$i18n.t('OneDrive')}
-
+
{$i18n.t('Microsoft OneDrive (personal)')}
+
+ { + uploadOneDriveHandler('organizations'); + }} + > +
+
{$i18n.t('Microsoft OneDrive (work/school)')}
+
Includes SharePoint
+
+
+ + {/if}
diff --git a/src/lib/utils/onedrive-file-picker.ts b/src/lib/utils/onedrive-file-picker.ts index 60d2bb13c..e7fb80a4c 100644 --- a/src/lib/utils/onedrive-file-picker.ts +++ b/src/lib/utils/onedrive-file-picker.ts @@ -2,70 +2,130 @@ import { PublicClientApplication } from '@azure/msal-browser'; import type { PopupRequest } from '@azure/msal-browser'; import { v4 as uuidv4 } from 'uuid'; -let CLIENT_ID = ''; +class OneDriveConfig { + private static instance: OneDriveConfig; + private clientId: string = ''; + private authorityType: 'personal' | 'organizations' = 'personal'; + private sharepointUrl: string = ''; + private msalInstance: PublicClientApplication | null = null; -async function getCredentials() { - if (CLIENT_ID) return; + private constructor() {} - const response = await fetch('/api/config'); - if (!response.ok) { - throw new Error('Failed to fetch OneDrive credentials'); + public static getInstance(): OneDriveConfig { + if (!OneDriveConfig.instance) { + OneDriveConfig.instance = new OneDriveConfig(); + } + return OneDriveConfig.instance; } - const config = await response.json(); - CLIENT_ID = config.onedrive?.client_id; - if (!CLIENT_ID) { - throw new Error('OneDrive client ID not configured'); + + public async initialize(selectedAuthorityType?: 'personal' | 'organizations'): Promise { + await this.getCredentials(selectedAuthorityType); } -} -let msalInstance: PublicClientApplication | null = null; + public async ensureInitialized(selectedAuthorityType?: 'personal' | 'organizations'): Promise { + await this.initialize(selectedAuthorityType); + } -// Initialize MSAL authentication -async function initializeMsal() { - try { - if (!CLIENT_ID) { - await getCredentials(); + private async getCredentials(selectedAuthorityType?: 'personal' | 'organizations'): Promise { + let response; + if(window.location.hostname === 'localhost') { + response = await fetch('http://localhost:8080/api/config'); + } else { + response = await fetch('/api/config'); + } + + if (!response.ok) { + throw new Error('Failed to fetch OneDrive credentials'); + } + + const config = await response.json(); + + const newClientId = config.onedrive?.client_id; + const newSharepointUrl = config.onedrive?.sharepoint_url; + + if (!newClientId) { + throw new Error('OneDrive configuration is incomplete'); } - const msalParams = { - auth: { - authority: 'https://login.microsoftonline.com/consumers', - clientId: CLIENT_ID - } - }; + // Reset MSAL instance if config changes + if (this.clientId && + (this.clientId !== newClientId || + this.authorityType !== selectedAuthorityType || + this.sharepointUrl !== newSharepointUrl)) { + this.msalInstance = null; + } - if (!msalInstance) { - msalInstance = new PublicClientApplication(msalParams); - if (msalInstance.initialize) { - await msalInstance.initialize(); + this.clientId = newClientId; + this.authorityType = selectedAuthorityType || 'personal'; + this.sharepointUrl = newSharepointUrl; + } + + public async getMsalInstance(): Promise { + await this.ensureInitialized(); + + if (!this.msalInstance) { + const authorityEndpoint = this.authorityType === 'organizations' ? 'common' : 'consumers'; + const msalParams = { + auth: { + authority: `https://login.microsoftonline.com/${authorityEndpoint}`, + clientId: this.clientId + } + }; + + this.msalInstance = new PublicClientApplication(msalParams); + if (this.msalInstance.initialize) { + await this.msalInstance.initialize(); } } - return msalInstance; - } catch (error) { - throw new Error( - 'MSAL initialization failed: ' + (error instanceof Error ? error.message : String(error)) - ); + return this.msalInstance; + } + + public getAuthorityType(): 'personal' | 'organizations' { + return this.authorityType; + } + + public getSharepointUrl(): string { + return this.sharepointUrl; + } + + public getBaseUrl(): string { + if (this.authorityType === 'organizations') { + if (!this.sharepointUrl || this.sharepointUrl === '') { + throw new Error('Sharepoint URL not configured'); + } + + let sharePointBaseUrl = this.sharepointUrl.replace(/^https?:\/\//, ''); + sharePointBaseUrl = sharePointBaseUrl.replace(/\/$/, ''); + + return `https://${sharePointBaseUrl}`; + } else { + return 'https://onedrive.live.com/picker'; + } } } + // Retrieve OneDrive access token -async function getToken(): Promise { - const authParams: PopupRequest = { scopes: ['OneDrive.ReadWrite'] }; - let accessToken = ''; - try { - msalInstance = await initializeMsal(); - if (!msalInstance) { - throw new Error('MSAL not initialized'); - } +async function getToken(resource?: string): Promise { + const config = OneDriveConfig.getInstance(); + await config.ensureInitialized(); + + const authorityType = config.getAuthorityType(); + const scopes = authorityType === 'organizations' + ? [`${resource || config.getBaseUrl()}/.default`] + : ['OneDrive.ReadWrite']; + + const authParams: PopupRequest = { scopes }; + let accessToken = ''; + + try { + const msalInstance = await config.getMsalInstance(); const resp = await msalInstance.acquireTokenSilent(authParams); accessToken = resp.accessToken; } catch (err) { - if (!msalInstance) { - throw new Error('MSAL not initialized'); - } - + const msalInstance = await config.getMsalInstance(); try { const resp = await msalInstance.loginPopup(authParams); msalInstance.setActiveAccount(resp.account); @@ -88,60 +148,129 @@ async function getToken(): Promise { return accessToken; } -const baseUrl = 'https://onedrive.live.com/picker'; -const params = { - sdk: '8.0', +// Get picker parameters based on account type +function getPickerParams(): { + sdk: string; entry: { - oneDrive: { - files: {} - } - }, - authentication: {}, + oneDrive: Record; + }; + authentication: Record; messaging: { - origin: window?.location?.origin, - channelId: uuidv4() - }, + origin: string; + channelId: string; + }; typesAndSources: { - mode: 'files', - pivots: { - oneDrive: true, - recent: true - } + mode: string; + pivots: Record; + }; +} { + const channelId = uuidv4(); + + if (OneDriveConfig.getInstance().getAuthorityType() === 'organizations') { + // Parameters for OneDrive for Business + return { + sdk: '8.0', + entry: { + oneDrive: {} + }, + authentication: {}, + messaging: { + origin: window?.location?.origin || '', + channelId + }, + typesAndSources: { + mode: 'files', + pivots: { + oneDrive: true, + recent: true + } + } + }; + } else { + // Parameters for personal OneDrive + return { + sdk: '8.0', + entry: { + oneDrive: { + files: {} + } + }, + authentication: {}, + messaging: { + origin: window?.location?.origin || '', + channelId + }, + typesAndSources: { + mode: 'files', + pivots: { + oneDrive: true, + recent: true + } + } + }; } -}; +} // Download file from OneDrive -async function downloadOneDriveFile(fileInfo: any): Promise { +async function downloadOneDriveFile(fileInfo: Record): Promise { const accessToken = await getToken(); if (!accessToken) { throw new Error('Unable to retrieve OneDrive access token.'); } + + // The endpoint URL is provided in the file info const fileInfoUrl = `${fileInfo['@sharePoint.endpoint']}/drives/${fileInfo.parentReference.driveId}/items/${fileInfo.id}`; + const response = await fetch(fileInfoUrl, { headers: { Authorization: `Bearer ${accessToken}` } }); + if (!response.ok) { throw new Error('Failed to fetch file information.'); } + const fileData = await response.json(); const downloadUrl = fileData['@content.downloadUrl']; const downloadResponse = await fetch(downloadUrl); + if (!downloadResponse.ok) { throw new Error('Failed to download file.'); } + return await downloadResponse.blob(); } +interface PickerResult { + items?: Array<{ + id: string; + name: string; + parentReference: { + driveId: string; + }; + '@sharePoint.endpoint': string; + [key: string]: any; + }>; + command?: string; + [key: string]: any; +} + // Open OneDrive file picker and return selected file metadata -export async function openOneDrivePicker(): Promise { +export async function openOneDrivePicker(): Promise { if (typeof window === 'undefined') { throw new Error('Not in browser environment'); } + + // Force reinitialization of OneDrive config + const config = OneDriveConfig.getInstance(); + await config.initialize(); + return new Promise((resolve, reject) => { let pickerWindow: Window | null = null; let channelPort: MessagePort | null = null; + const params = getPickerParams(); + const baseUrl = config.getBaseUrl(); const handleWindowMessage = (event: MessageEvent) => { if (event.source !== pickerWindow) return; @@ -166,7 +295,9 @@ export async function openOneDrivePicker(): Promise { switch (command.command) { case 'authenticate': { try { - const newToken = await getToken(); + // Pass the resource from the command for org accounts + const resource = OneDriveConfig.getInstance().getAuthorityType() === 'organizations' ? command.resource : undefined; + const newToken = await getToken(resource); if (newToken) { channelPort?.postMessage({ type: 'result', @@ -178,9 +309,12 @@ export async function openOneDrivePicker(): Promise { } } catch (err) { channelPort?.postMessage({ - result: 'error', - error: { code: 'tokenError', message: 'Failed to get token' }, - isExpected: true + type: 'result', + id: portData.id, + data: { + result: 'error', + error: { code: 'tokenError', message: 'Failed to get token' } + } }); } break; @@ -240,7 +374,14 @@ export async function openOneDrivePicker(): Promise { const queryString = new URLSearchParams({ filePicker: JSON.stringify(params) }); - const url = `${baseUrl}?${queryString.toString()}`; + + let url = ''; + if(OneDriveConfig.getInstance().getAuthorityType() === 'organizations') { + url = baseUrl + `/_layouts/15/FilePicker.aspx?${queryString}`; + }else{ + url = baseUrl + `?${queryString}`; + } + const form = pickerWindow.document.createElement('form'); form.setAttribute('action', url); @@ -268,7 +409,10 @@ export async function openOneDrivePicker(): Promise { } // Pick and download file from OneDrive -export async function pickAndDownloadFile(): Promise<{ blob: Blob; name: string } | null> { +export async function pickAndDownloadFile(authorityType: 'personal' | 'organizations' = 'personal'): Promise<{ blob: Blob; name: string } | null> { + const config = OneDriveConfig.getInstance(); + await config.initialize(authorityType); + const pickerResult = await openOneDrivePicker(); if (!pickerResult || !pickerResult.items || pickerResult.items.length === 0) { @@ -281,4 +425,4 @@ export async function pickAndDownloadFile(): Promise<{ blob: Blob; name: string return { blob, name: selectedFile.name }; } -export { downloadOneDriveFile }; +export { downloadOneDriveFile }; \ No newline at end of file From 2d7062fc993f4d8b06a2356bdeabbe1119da9d97 Mon Sep 17 00:00:00 2001 From: hurxxxx Date: Tue, 15 Apr 2025 00:27:59 +0900 Subject: [PATCH 009/161] fix: onedrive orgs selection --- backend/open_webui/config.py | 7 ++ backend/open_webui/main.py | 7 +- src/lib/components/chat/MessageInput.svelte | 4 +- src/lib/utils/onedrive-file-picker.ts | 72 ++++++++++++--------- 4 files changed, 56 insertions(+), 34 deletions(-) diff --git a/backend/open_webui/config.py b/backend/open_webui/config.py index 3b40977f2..8584fa88d 100644 --- a/backend/open_webui/config.py +++ b/backend/open_webui/config.py @@ -1760,6 +1760,13 @@ ONEDRIVE_CLIENT_ID = PersistentConfig( os.environ.get("ONEDRIVE_CLIENT_ID", ""), ) +ONEDRIVE_SHAREPOINT_URL = PersistentConfig( + "ONEDRIVE_SHAREPOINT_URL", + "onedrive.sharepoint_url", + os.environ.get("ONEDRIVE_SHAREPOINT_URL", ""), +) + + # RAG Content Extraction CONTENT_EXTRACTION_ENGINE = PersistentConfig( "CONTENT_EXTRACTION_ENGINE", diff --git a/backend/open_webui/main.py b/backend/open_webui/main.py index 56ea17fa1..652e0284c 100644 --- a/backend/open_webui/main.py +++ b/backend/open_webui/main.py @@ -100,6 +100,7 @@ from open_webui.config import ( # OpenAI ENABLE_OPENAI_API, ONEDRIVE_CLIENT_ID, + ONEDRIVE_SHAREPOINT_URL, OPENAI_API_BASE_URLS, OPENAI_API_KEYS, OPENAI_API_CONFIGS, @@ -240,6 +241,7 @@ from open_webui.config import ( GOOGLE_DRIVE_CLIENT_ID, GOOGLE_DRIVE_API_KEY, ONEDRIVE_CLIENT_ID, + ONEDRIVE_SHAREPOINT_URL, ENABLE_RAG_HYBRID_SEARCH, ENABLE_RAG_LOCAL_WEB_FETCH, ENABLE_WEB_LOADER_SSL_VERIFICATION, @@ -1327,7 +1329,10 @@ async def get_app_config(request: Request): "client_id": GOOGLE_DRIVE_CLIENT_ID.value, "api_key": GOOGLE_DRIVE_API_KEY.value, }, - "onedrive": {"client_id": ONEDRIVE_CLIENT_ID.value}, + "onedrive": { + "client_id": ONEDRIVE_CLIENT_ID.value, + "sharepoint_url": ONEDRIVE_SHAREPOINT_URL.value, + }, "license_metadata": app.state.LICENSE_METADATA, **( { diff --git a/src/lib/components/chat/MessageInput.svelte b/src/lib/components/chat/MessageInput.svelte index ca6487cf5..b17cabead 100644 --- a/src/lib/components/chat/MessageInput.svelte +++ b/src/lib/components/chat/MessageInput.svelte @@ -1063,9 +1063,9 @@ ); } }} - uploadOneDriveHandler={async () => { + uploadOneDriveHandler={async (authorityType) => { try { - const fileData = await pickAndDownloadFile(); + const fileData = await pickAndDownloadFile(authorityType); if (fileData) { const file = new File([fileData.blob], fileData.name, { type: fileData.blob.type || 'application/octet-stream' diff --git a/src/lib/utils/onedrive-file-picker.ts b/src/lib/utils/onedrive-file-picker.ts index e7fb80a4c..4e27b88f0 100644 --- a/src/lib/utils/onedrive-file-picker.ts +++ b/src/lib/utils/onedrive-file-picker.ts @@ -8,6 +8,7 @@ class OneDriveConfig { private authorityType: 'personal' | 'organizations' = 'personal'; private sharepointUrl: string = ''; private msalInstance: PublicClientApplication | null = null; + private currentAuthorityType: 'personal' | 'organizations' = 'personal'; private constructor() {} @@ -18,20 +19,35 @@ class OneDriveConfig { return OneDriveConfig.instance; } - public async initialize(selectedAuthorityType?: 'personal' | 'organizations'): Promise { - await this.getCredentials(selectedAuthorityType); + public async initialize(authorityType?: 'personal' | 'organizations'): Promise { + if (authorityType && this.currentAuthorityType !== authorityType) { + console.log('Authority type changed, resetting msalInstance'); + this.currentAuthorityType = authorityType; + this.msalInstance = null; + } + await this.getCredentials(); } - public async ensureInitialized(selectedAuthorityType?: 'personal' | 'organizations'): Promise { - await this.initialize(selectedAuthorityType); + public async ensureInitialized(authorityType?: 'personal' | 'organizations'): Promise { + await this.initialize(authorityType); } private async getCredentials(selectedAuthorityType?: 'personal' | 'organizations'): Promise { let response; + const headers: HeadersInit = { + 'Content-Type': 'application/json' + }; + if(window.location.hostname === 'localhost') { - response = await fetch('http://localhost:8080/api/config'); + response = await fetch('http://localhost:8080/api/config', { + headers, + credentials: 'include' + }); } else { - response = await fetch('/api/config'); + response = await fetch('/api/config', { + headers, + credentials: 'include' + }); } if (!response.ok) { @@ -46,25 +62,16 @@ class OneDriveConfig { if (!newClientId) { throw new Error('OneDrive configuration is incomplete'); } - - // Reset MSAL instance if config changes - if (this.clientId && - (this.clientId !== newClientId || - this.authorityType !== selectedAuthorityType || - this.sharepointUrl !== newSharepointUrl)) { - this.msalInstance = null; - } - + this.clientId = newClientId; - this.authorityType = selectedAuthorityType || 'personal'; this.sharepointUrl = newSharepointUrl; } - public async getMsalInstance(): Promise { - await this.ensureInitialized(); + public async getMsalInstance(authorityType?: 'personal' | 'organizations'): Promise { + await this.ensureInitialized(authorityType); if (!this.msalInstance) { - const authorityEndpoint = this.authorityType === 'organizations' ? 'common' : 'consumers'; + const authorityEndpoint = this.currentAuthorityType === 'organizations' ? 'common' : 'consumers'; const msalParams = { auth: { authority: `https://login.microsoftonline.com/${authorityEndpoint}`, @@ -82,7 +89,7 @@ class OneDriveConfig { } public getAuthorityType(): 'personal' | 'organizations' { - return this.authorityType; + return this.currentAuthorityType; } public getSharepointUrl(): string { @@ -90,7 +97,7 @@ class OneDriveConfig { } public getBaseUrl(): string { - if (this.authorityType === 'organizations') { + if (this.currentAuthorityType === 'organizations') { if (!this.sharepointUrl || this.sharepointUrl === '') { throw new Error('Sharepoint URL not configured'); } @@ -107,25 +114,27 @@ class OneDriveConfig { // Retrieve OneDrive access token -async function getToken(resource?: string): Promise { +async function getToken(resource?: string, authorityType?: 'personal' | 'organizations'): Promise { const config = OneDriveConfig.getInstance(); - await config.ensureInitialized(); + await config.ensureInitialized(authorityType); - const authorityType = config.getAuthorityType(); + const currentAuthorityType = config.getAuthorityType(); - const scopes = authorityType === 'organizations' + const scopes = currentAuthorityType === 'organizations' ? [`${resource || config.getBaseUrl()}/.default`] : ['OneDrive.ReadWrite']; + + console.log('scopes', scopes); const authParams: PopupRequest = { scopes }; let accessToken = ''; try { - const msalInstance = await config.getMsalInstance(); + const msalInstance = await config.getMsalInstance(authorityType); const resp = await msalInstance.acquireTokenSilent(authParams); accessToken = resp.accessToken; } catch (err) { - const msalInstance = await config.getMsalInstance(); + const msalInstance = await config.getMsalInstance(authorityType); try { const resp = await msalInstance.loginPopup(authParams); msalInstance.setActiveAccount(resp.account); @@ -212,8 +221,8 @@ function getPickerParams(): { } // Download file from OneDrive -async function downloadOneDriveFile(fileInfo: Record): Promise { - const accessToken = await getToken(); +async function downloadOneDriveFile(fileInfo: Record, authorityType?: 'personal' | 'organizations'): Promise { + const accessToken = await getToken(undefined, authorityType); if (!accessToken) { throw new Error('Unable to retrieve OneDrive access token.'); } @@ -409,7 +418,8 @@ export async function openOneDrivePicker(): Promise { } // Pick and download file from OneDrive -export async function pickAndDownloadFile(authorityType: 'personal' | 'organizations' = 'personal'): Promise<{ blob: Blob; name: string } | null> { +export async function pickAndDownloadFile(authorityType?: 'personal' | 'organizations'): Promise<{ blob: Blob; name: string } | null> { + // Force reinitialization with selected authority type const config = OneDriveConfig.getInstance(); await config.initialize(authorityType); @@ -420,7 +430,7 @@ export async function pickAndDownloadFile(authorityType: 'personal' | 'organizat } const selectedFile = pickerResult.items[0]; - const blob = await downloadOneDriveFile(selectedFile); + const blob = await downloadOneDriveFile(selectedFile, authorityType); return { blob, name: selectedFile.name }; } From 55d077b52a69862321d16e9b190d1191043c9d4d Mon Sep 17 00:00:00 2001 From: hurxxxx Date: Tue, 15 Apr 2025 00:35:18 +0900 Subject: [PATCH 010/161] refactor --- src/lib/utils/onedrive-file-picker.ts | 145 ++++++++++++-------------- 1 file changed, 64 insertions(+), 81 deletions(-) diff --git a/src/lib/utils/onedrive-file-picker.ts b/src/lib/utils/onedrive-file-picker.ts index 4e27b88f0..2771119ae 100644 --- a/src/lib/utils/onedrive-file-picker.ts +++ b/src/lib/utils/onedrive-file-picker.ts @@ -5,7 +5,6 @@ import { v4 as uuidv4 } from 'uuid'; class OneDriveConfig { private static instance: OneDriveConfig; private clientId: string = ''; - private authorityType: 'personal' | 'organizations' = 'personal'; private sharepointUrl: string = ''; private msalInstance: PublicClientApplication | null = null; private currentAuthorityType: 'personal' | 'organizations' = 'personal'; @@ -21,7 +20,6 @@ class OneDriveConfig { public async initialize(authorityType?: 'personal' | 'organizations'): Promise { if (authorityType && this.currentAuthorityType !== authorityType) { - console.log('Authority type changed, resetting msalInstance'); this.currentAuthorityType = authorityType; this.msalInstance = null; } @@ -32,7 +30,7 @@ class OneDriveConfig { await this.initialize(authorityType); } - private async getCredentials(selectedAuthorityType?: 'personal' | 'organizations'): Promise { + private async getCredentials(): Promise { let response; const headers: HeadersInit = { 'Content-Type': 'application/json' @@ -62,7 +60,7 @@ class OneDriveConfig { if (!newClientId) { throw new Error('OneDrive configuration is incomplete'); } - + this.clientId = newClientId; this.sharepointUrl = newSharepointUrl; } @@ -123,8 +121,6 @@ async function getToken(resource?: string, authorityType?: 'personal' | 'organiz const scopes = currentAuthorityType === 'organizations' ? [`${resource || config.getBaseUrl()}/.default`] : ['OneDrive.ReadWrite']; - - console.log('scopes', scopes); const authParams: PopupRequest = { scopes }; let accessToken = ''; @@ -157,8 +153,7 @@ async function getToken(resource?: string, authorityType?: 'personal' | 'organiz return accessToken; } -// Get picker parameters based on account type -function getPickerParams(): { +interface PickerParams { sdk: string; entry: { oneDrive: Record; @@ -172,56 +167,58 @@ function getPickerParams(): { mode: string; pivots: Record; }; -} { +} + +interface PickerResult { + command?: string; + items?: OneDriveFileInfo[]; + [key: string]: any; +} + +// Get picker parameters based on account type +function getPickerParams(): PickerParams { const channelId = uuidv4(); + const config = OneDriveConfig.getInstance(); - if (OneDriveConfig.getInstance().getAuthorityType() === 'organizations') { - // Parameters for OneDrive for Business - return { - sdk: '8.0', - entry: { - oneDrive: {} - }, - authentication: {}, - messaging: { - origin: window?.location?.origin || '', - channelId - }, - typesAndSources: { - mode: 'files', - pivots: { - oneDrive: true, - recent: true - } + const params: PickerParams = { + sdk: '8.0', + entry: { + oneDrive: {} + }, + authentication: {}, + messaging: { + origin: window?.location?.origin || '', + channelId + }, + typesAndSources: { + mode: 'files', + pivots: { + oneDrive: true, + recent: true } - }; - } else { - // Parameters for personal OneDrive - return { - sdk: '8.0', - entry: { - oneDrive: { - files: {} - } - }, - authentication: {}, - messaging: { - origin: window?.location?.origin || '', - channelId - }, - typesAndSources: { - mode: 'files', - pivots: { - oneDrive: true, - recent: true - } - } - }; + } + }; + + // For personal accounts, set files object in oneDrive + if (config.getAuthorityType() !== 'organizations') { + params.entry.oneDrive = { files: {} }; } + + return params; +} + +interface OneDriveFileInfo { + id: string; + name: string; + parentReference: { + driveId: string; + }; + '@sharePoint.endpoint': string; + [key: string]: any; } // Download file from OneDrive -async function downloadOneDriveFile(fileInfo: Record, authorityType?: 'personal' | 'organizations'): Promise { +async function downloadOneDriveFile(fileInfo: OneDriveFileInfo, authorityType?: 'personal' | 'organizations'): Promise { const accessToken = await getToken(undefined, authorityType); if (!accessToken) { throw new Error('Unable to retrieve OneDrive access token.'); @@ -237,43 +234,34 @@ async function downloadOneDriveFile(fileInfo: Record, authorityType }); if (!response.ok) { - throw new Error('Failed to fetch file information.'); + throw new Error(`Failed to fetch file information: ${response.status} ${response.statusText}`); } const fileData = await response.json(); const downloadUrl = fileData['@content.downloadUrl']; + + if (!downloadUrl) { + throw new Error('Download URL not found in file data'); + } + const downloadResponse = await fetch(downloadUrl); if (!downloadResponse.ok) { - throw new Error('Failed to download file.'); + throw new Error(`Failed to download file: ${downloadResponse.status} ${downloadResponse.statusText}`); } return await downloadResponse.blob(); } -interface PickerResult { - items?: Array<{ - id: string; - name: string; - parentReference: { - driveId: string; - }; - '@sharePoint.endpoint': string; - [key: string]: any; - }>; - command?: string; - [key: string]: any; -} - // Open OneDrive file picker and return selected file metadata -export async function openOneDrivePicker(): Promise { +export async function openOneDrivePicker(authorityType?: 'personal' | 'organizations'): Promise { if (typeof window === 'undefined') { throw new Error('Not in browser environment'); } - // Force reinitialization of OneDrive config + // Initialize OneDrive config with the specified authority type const config = OneDriveConfig.getInstance(); - await config.initialize(); + await config.initialize(authorityType); return new Promise((resolve, reject) => { let pickerWindow: Window | null = null; @@ -305,8 +293,8 @@ export async function openOneDrivePicker(): Promise { case 'authenticate': { try { // Pass the resource from the command for org accounts - const resource = OneDriveConfig.getInstance().getAuthorityType() === 'organizations' ? command.resource : undefined; - const newToken = await getToken(resource); + const resource = config.getAuthorityType() === 'organizations' ? command.resource : undefined; + const newToken = await getToken(resource, authorityType); if (newToken) { channelPort?.postMessage({ type: 'result', @@ -370,7 +358,7 @@ export async function openOneDrivePicker(): Promise { const initializePicker = async () => { try { - const authToken = await getToken(); + const authToken = await getToken(undefined, authorityType); if (!authToken) { return reject(new Error('Failed to acquire access token')); } @@ -385,13 +373,12 @@ export async function openOneDrivePicker(): Promise { }); let url = ''; - if(OneDriveConfig.getInstance().getAuthorityType() === 'organizations') { + if(config.getAuthorityType() === 'organizations') { url = baseUrl + `/_layouts/15/FilePicker.aspx?${queryString}`; - }else{ + } else { url = baseUrl + `?${queryString}`; } - const form = pickerWindow.document.createElement('form'); form.setAttribute('action', url); form.setAttribute('method', 'POST'); @@ -419,11 +406,7 @@ export async function openOneDrivePicker(): Promise { // Pick and download file from OneDrive export async function pickAndDownloadFile(authorityType?: 'personal' | 'organizations'): Promise<{ blob: Blob; name: string } | null> { - // Force reinitialization with selected authority type - const config = OneDriveConfig.getInstance(); - await config.initialize(authorityType); - - const pickerResult = await openOneDrivePicker(); + const pickerResult = await openOneDrivePicker(authorityType); if (!pickerResult || !pickerResult.items || pickerResult.items.length === 0) { return null; From a3d950872c050303689d234a6215c6fcbfd74384 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aindri=C3=BA=20Mac=20Giolla=20Eoin?= Date: Mon, 14 Apr 2025 17:14:02 +0100 Subject: [PATCH 011/161] Updated Irish translations - April --- src/lib/i18n/locales/ie-GA/translation.json | 262 ++++++++++---------- 1 file changed, 131 insertions(+), 131 deletions(-) diff --git a/src/lib/i18n/locales/ie-GA/translation.json b/src/lib/i18n/locales/ie-GA/translation.json index 516c68a10..d9ac2e97d 100644 --- a/src/lib/i18n/locales/ie-GA/translation.json +++ b/src/lib/i18n/locales/ie-GA/translation.json @@ -4,10 +4,10 @@ "(e.g. `sh webui.sh --api --api-auth username_password`)": "(m.sh. `sh webui.sh --api --api-auth username_password `)", "(e.g. `sh webui.sh --api`)": "(m.sh. `sh webui.sh --api`)", "(latest)": "(is déanaí)", - "(Ollama)": "", + "(Ollama)": "(Ollama)", "{{ models }}": "{{ models }}", - "{{COUNT}} Available Tools": "", - "{{COUNT}} hidden lines": "", + "{{COUNT}} Available Tools": "{{COUNT}} Uirlisí ar Fáil", + "{{COUNT}} hidden lines": "{{COUNT}} línte folaithe", "{{COUNT}} Replies": "{{COUNT}} Freagra", "{{user}}'s Chats": "Comhráite {{user}}", "{{webUIName}} Backend Required": "{{webUIName}} Ceoldeireadh Riachtanach", @@ -54,28 +54,28 @@ "Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Tá rochtain ag riarthóirí ar gach uirlis i gcónaí; teastaíonn ó úsáideoirí uirlisí a shanntar in aghaidh an mhúnla sa spás oibre.", "Advanced Parameters": "Paraiméadair Casta", "Advanced Params": "Paraiméid Casta", - "All": "", + "All": "Gach", "All Documents": "Gach Doiciméad", "All models deleted successfully": "Scriosadh na múnlaí go léir go rathúil", - "Allow Call": "", + "Allow Call": "Ceadaigh Glao", "Allow Chat Controls": "Ceadaigh Rialuithe Comhrá", "Allow Chat Delete": "Ceadaigh Comhrá a Scriosadh", "Allow Chat Deletion": "Cead Scriosadh Comhrá", "Allow Chat Edit": "Ceadaigh Eagarthóireacht Comhrá", "Allow File Upload": "Ceadaigh Uaslódáil Comhad", - "Allow Multiple Models in Chat": "", + "Allow Multiple Models in Chat": "Ceadaigh Múnlaí Il sa Chomhrá", "Allow non-local voices": "Lig guthanna neamh-áitiúla", - "Allow Speech to Text": "", + "Allow Speech to Text": "Ceadaigh Óráid go Téacs", "Allow Temporary Chat": "Cead Comhrá Sealadach", - "Allow Text to Speech": "", + "Allow Text to Speech": "Ceadaigh Téacs a Chaint", "Allow User Location": "Ceadaigh Suíomh Úsáideora", "Allow Voice Interruption in Call": "Ceadaigh Briseadh Guth i nGlao", "Allowed Endpoints": "Críochphointí Ceadaithe", "Already have an account?": "Tá cuntas agat cheana féin?", - "Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out.": "", + "Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out.": "Rogha eile seachas an top_p, agus tá sé mar aidhm aige cothromaíocht cáilíochta agus éagsúlachta a chinntiú. Léiríonn an paraiméadar p an dóchúlacht íosta go mbreithneofar comhartha, i gcoibhneas le dóchúlacht an chomhartha is dóichí. Mar shampla, le p=0.05 agus dóchúlacht 0.9 ag an comhartha is dóichí, déantar logits le luach níos lú ná 0.045 a scagadh amach.", "Always": "I gcónaí", - "Always Collapse Code Blocks": "", - "Always Expand Details": "", + "Always Collapse Code Blocks": "Laghdaigh Bloic Chóid i gcónaí", + "Always Expand Details": "Leathnaigh Sonraí i gcónaí", "Amazing": "Iontach", "an assistant": "cúntóir", "Analyzed": "Anailísithe", @@ -83,7 +83,7 @@ "and": "agus", "and {{COUNT}} more": "agus {{COUNT}} eile", "and create a new shared link.": "agus cruthaigh nasc nua roinnte.", - "Android": "", + "Android": "Android", "API Base URL": "URL Bonn API", "API Key": "Eochair API", "API Key created.": "Cruthaíodh Eochair API.", @@ -104,7 +104,7 @@ "Are you sure?": "An bhfuil tú cinnte?", "Arena Models": "Múnlaí Airéine", "Artifacts": "Déantáin", - "Ask": "", + "Ask": "Fiafraigh", "Ask a question": "Cuir ceist", "Assistant": "Cúntóir", "Attach file from knowledge": "Ceangail comhad ó eolas", @@ -113,10 +113,10 @@ "Attribute for Username": "Tréith don Ainm Úsáideora", "Audio": "Fuaim", "August": "Lúnasa", - "Auth": "", + "Auth": "Údarú", "Authenticate": "Fíordheimhnigh", "Authentication": "Fíordheimhniú", - "Auto": "", + "Auto": "Uath", "Auto-Copy Response to Clipboard": "Freagra AutoCopy go Gearrthaisce", "Auto-playback response": "Freagra uathsheinm", "Autocomplete Generation": "Giniúint Uathchríochnaithe", @@ -126,7 +126,7 @@ "AUTOMATIC1111 Base URL": "UATHOIBRÍOCH1111 Bun URL", "AUTOMATIC1111 Base URL is required.": "Tá URL bonn UATHOIBRÍOCH1111 ag teastáil.", "Available list": "Liosta atá ar fáil", - "Available Tools": "", + "Available Tools": "Uirlisí ar Fáil", "available!": "ar fáil!", "Awful": "Uafásach", "Azure AI Speech": "Óráid Azure AI", @@ -142,7 +142,7 @@ "Bing Search V7 Endpoint": "Cuardach Bing V7 Críochphointe", "Bing Search V7 Subscription Key": "Eochair Síntiúis Bing Cuardach V7", "Bocha Search API Key": "Eochair API Cuardach Bocha", - "Boosting or penalizing specific tokens for constrained responses. Bias values will be clamped between -100 and 100 (inclusive). (Default: none)": "", + "Boosting or penalizing specific tokens for constrained responses. Bias values will be clamped between -100 and 100 (inclusive). (Default: none)": "Treisiú nó pionós a ghearradh ar chomharthaí sonracha as freagraí srianta. Déanfar luachanna laofachta a chlampáil idir -100 agus 100 (san áireamh). (Réamhshocrú: ceann ar bith)", "Brave Search API Key": "Eochair API Cuardaigh Brave", "By {{name}}": "Le {{name}}", "Bypass Embedding and Retrieval": "Seachbhóthar Leabú agus Aisghabháil", @@ -205,7 +205,7 @@ "Code Interpreter": "Ateangaire Cód", "Code Interpreter Engine": "Inneall Ateangaire Cóid", "Code Interpreter Prompt Template": "Teimpléad Pras Ateangaire Cód", - "Collapse": "", + "Collapse": "Laghdaigh", "Collection": "Bailiúchán", "Color": "Dath", "ComfyUI": "ComfyUI", @@ -223,12 +223,12 @@ "Confirm your action": "Deimhnigh do ghníomh", "Confirm your new password": "Deimhnigh do phasfhocal nua", "Connect to your own OpenAI compatible API endpoints.": "Ceangail le do chríochphointí API atá comhoiriúnach le OpenAI.", - "Connect to your own OpenAPI compatible external tool servers.": "", - "Connection failed": "", - "Connection successful": "", + "Connect to your own OpenAPI compatible external tool servers.": "Ceangail le do fhreastalaithe uirlisí seachtracha atá comhoiriúnach le OpenAPI.", + "Connection failed": "Theip ar an gceangal", + "Connection successful": "Ceangal rathúil", "Connections": "Naisc", - "Connections saved successfully": "", - "Constrains effort on reasoning for reasoning models. Only applicable to reasoning models from specific providers that support reasoning effort.": "", + "Connections saved successfully": "D'éirigh le naisc a shábháil", + "Constrains effort on reasoning for reasoning models. Only applicable to reasoning models from specific providers that support reasoning effort.": "Srianann iarracht ar réasúnaíocht a dhéanamh ar shamhlacha réasúnaíochta. Ní bhaineann ach le samhlacha réasúnaíochta ó sholáthraithe sonracha a thacaíonn le hiarracht réasúnaíochta.", "Contact Admin for WebUI Access": "Déan teagmháil le Riarachán le haghaidh Rochtana WebUI", "Content": "Ábhar", "Content Extraction Engine": "Inneall Eastóscadh Ábhar", @@ -240,12 +240,12 @@ "Control how message text is split for TTS requests. 'Punctuation' splits into sentences, 'paragraphs' splits into paragraphs, and 'none' keeps the message as a single string.": "Rialú conas a roinntear téacs teachtaireachta d'iarratais TTS. Roinneann 'poncaíocht' ina abairtí, scoilteann 'míreanna' i míreanna, agus coinníonn 'aon' an teachtaireacht mar shreang amháin.", "Control the repetition of token sequences in the generated text. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 1.1) will be more lenient. At 1, it is disabled.": "Rialú a dhéanamh ar athrá seichimh chomharthaí sa téacs ginte. Cuirfidh luach níos airde (m.sh., 1.5) pionós níos láidre ar athrá, agus beidh luach níos ísle (m.sh., 1.1) níos boige. Ag 1, tá sé díchumasaithe. (Réamhshocrú: 1.1)", "Controls": "Rialuithe", - "Controls the balance between coherence and diversity of the output. A lower value will result in more focused and coherent text.": "", + "Controls the balance between coherence and diversity of the output. A lower value will result in more focused and coherent text.": "Rialaíonn sé an chothromaíocht idir comhleanúnachas agus éagsúlacht an aschuir. Beidh téacs níos dírithe agus níos soiléire mar thoradh ar luach níos ísle.", "Copied": "Cóipeáladh", "Copied shared chat URL to clipboard!": "Cóipeáladh URL an chomhrá roinnte chuig an ngearrthaisce!", "Copied to clipboard": "Cóipeáilte go gear", "Copy": "Cóipeáil", - "Copy Formatted Text": "", + "Copy Formatted Text": "Cóipeáil Téacs Formáidithe", "Copy last code block": "Cóipeáil bloc cód deireanach", "Copy last response": "Cóipeáil an fhreagairt", "Copy Link": "Cóipeáil Nasc", @@ -266,7 +266,7 @@ "Created At": "Cruthaithe Ag", "Created by": "Cruthaithe ag", "CSV Import": "Iompórtáil CSV", - "Ctrl+Enter to Send": "", + "Ctrl+Enter to Send": "Ctrl+Iontráil chun Seol", "Current Model": "Múnla Reatha", "Current Password": "Pasfhocal Reatha", "Custom": "Saincheaptha", @@ -286,7 +286,7 @@ "Default Prompt Suggestions": "Moltaí Leid Réamhshocraithe", "Default to 389 or 636 if TLS is enabled": "Réamhshocrú go 389 nó 636 má tá TLS cumasaithe", "Default to ALL": "Réamhshocrú do GACH", - "Default to segmented retrieval for focused and relevant content extraction, this is recommended for most cases.": "", + "Default to segmented retrieval for focused and relevant content extraction, this is recommended for most cases.": "Réamhshocrú maidir le haisghabháil deighilte d’eastóscadh ábhar dírithe agus ábhartha, moltar é seo i bhformhór na gcásanna.", "Default User Role": "Ról Úsáideora Réamhshocraithe", "Delete": "Scrios", "Delete a model": "Scrios múnla", @@ -308,13 +308,13 @@ "Deleted User": "Úsáideoir Scriosta", "Describe your knowledge base and objectives": "Déan cur síos ar do bhunachar eolais agus do chuspóirí", "Description": "Cur síos", - "Detect Artifacts Automatically": "", + "Detect Artifacts Automatically": "Déan Déantáin a bhrath go huathoibríoch", "Didn't fully follow instructions": "Níor lean sé treoracha go hiomlán", - "Direct": "", + "Direct": "Díreach", "Direct Connections": "Naisc Dhíreacha", "Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Ligeann Connections Direct d’úsáideoirí ceangal lena gcríochphointí API féin atá comhoiriúnach le OpenAI.", "Direct Connections settings updated": "Nuashonraíodh socruithe Connections Direct", - "Direct Tool Servers": "", + "Direct Tool Servers": "Freastalaithe Uirlisí Díreacha", "Disabled": "Díchumasaithe", "Discover a function": "Faigh amach feidhm", "Discover a model": "Faigh amach múnla", @@ -334,8 +334,8 @@ "Dive into knowledge": "Léim isteach eolas", "Do not install functions from sources you do not fully trust.": "Ná suiteáil feidhmeanna ó fhoinsí nach bhfuil muinín iomlán agat.", "Do not install tools from sources you do not fully trust.": "Ná suiteáil uirlisí ó fhoinsí nach bhfuil muinín iomlán agat.", - "Docling": "", - "Docling Server URL required.": "", + "Docling": "Docling", + "Docling Server URL required.": "URL Freastalaí Doling ag teastáil.", "Document": "Doiciméad", "Document Intelligence": "Faisnéise Doiciméad", "Document Intelligence endpoint and key required.": "Críochphointe Faisnéise Doiciméad agus eochair ag teastáil.", @@ -356,15 +356,15 @@ "Draw": "Tarraing", "Drop any files here to add to the conversation": "Scaoil aon chomhaid anseo le cur leis an gcomhrá", "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "m.sh. '30s', '10m'. Is iad aonaid ama bailí ná 's', 'm', 'h'.", - "e.g. \"json\" or a JSON schema": "", + "e.g. \"json\" or a JSON schema": "m.sh. \"json\" nó scéimre JSON", "e.g. 60": "m.sh. 60", "e.g. A filter to remove profanity from text": "m.h. Scagaire chun profanity a bhaint as téacs", "e.g. My Filter": "m.sh. Mo Scagaire", - "e.g. My Tools": "e.g. Mo Uirlisí", + "e.g. My Tools": "m.sh. Mo Uirlisí", "e.g. my_filter": "m.sh. mo_scagaire", "e.g. my_tools": "m.sh. mo_uirlisí", "e.g. Tools for performing various operations": "m.sh. Uirlisí chun oibríochtaí éagsúla a dhéanamh", - "e.g., en-US,ja-JP (leave blank for auto-detect)": "", + "e.g., en-US,ja-JP (leave blank for auto-detect)": "m.sh., en-US, ja-JP (fág bán le haghaidh uathbhraite)", "Edit": "Cuir in eagar", "Edit Arena Model": "Cuir Samhail Airéine in Eagar", "Edit Channel": "Cuir Cainéal in Eagar", @@ -383,16 +383,16 @@ "Embedding model set to \"{{embedding_model}}\"": "Múnla leabaithe socraithe go \"{{embedding_model}}\"", "Enable API Key": "Cumasaigh Eochair API", "Enable autocomplete generation for chat messages": "Cumasaigh giniúint uathchríochnaithe le haghaidh teachtaireachtaí comhrá", - "Enable Code Execution": "", + "Enable Code Execution": "Cumasaigh Forghníomhú Cód", "Enable Code Interpreter": "Cumasaigh Ateangaire Cóid", "Enable Community Sharing": "Cumasaigh Comhroinnt Pobail", "Enable Memory Locking (mlock) to prevent model data from being swapped out of RAM. This option locks the model's working set of pages into RAM, ensuring that they will not be swapped out to disk. This can help maintain performance by avoiding page faults and ensuring fast data access.": "Cumasaigh Glasáil Cuimhne (mlock) chun sonraí samhaltaithe a chosc ó RAM. Glasálann an rogha seo sraith oibre leathanaigh an mhúnla isteach i RAM, ag cinntiú nach ndéanfar iad a mhalartú go diosca. Is féidir leis seo cabhrú le feidhmíocht a choinneáil trí lochtanna leathanaigh a sheachaint agus rochtain tapa ar shonraí a chinntiú.", "Enable Memory Mapping (mmap) to load model data. This option allows the system to use disk storage as an extension of RAM by treating disk files as if they were in RAM. This can improve model performance by allowing for faster data access. However, it may not work correctly with all systems and can consume a significant amount of disk space.": "Cumasaigh Mapáil Cuimhne (mmap) chun sonraí samhla a lódáil. Ligeann an rogha seo don chóras stóráil diosca a úsáid mar leathnú ar RAM trí chomhaid diosca a chóireáil amhail is dá mba i RAM iad. Is féidir leis seo feidhmíocht na samhla a fheabhsú trí rochtain níos tapúla ar shonraí a cheadú. Mar sin féin, d'fhéadfadh sé nach n-oibreoidh sé i gceart le gach córas agus féadfaidh sé méid suntasach spáis diosca a ithe.", "Enable Message Rating": "Cumasaigh Rátáil Teachtai", - "Enable Mirostat sampling for controlling perplexity.": "", + "Enable Mirostat sampling for controlling perplexity.": "Cumasaigh sampláil Mirostat chun seachrán a rialú.", "Enable New Sign Ups": "Cumasaigh Clárúcháin Nua", "Enabled": "Cumasaithe", - "Enforce Temporary Chat": "", + "Enforce Temporary Chat": "Cuir Comhrá Sealadach i bhfeidhm", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Déan cinnte go bhfuil 4 cholún san ord seo i do chomhad CSV: Ainm, Ríomhphost, Pasfhocal, Ról.", "Enter {{role}} message here": "Cuir isteach teachtaireacht {{role}} anseo", "Enter a detail about yourself for your LLMs to recall": "Cuir isteach mionsonraí fút féin chun do LLManna a mheabhrú", @@ -407,15 +407,15 @@ "Enter CFG Scale (e.g. 7.0)": "Cuir isteach Scála CFG (m.sh. 7.0)", "Enter Chunk Overlap": "Cuir isteach Chunk Forluí", "Enter Chunk Size": "Cuir isteach Méid an Smután", - "Enter comma-seperated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "", + "Enter comma-seperated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "Cuir isteach péirí camóg-scartha \"comhartha:luach laofachta\" (mar shampla: 5432:100, 413:-100)", "Enter description": "Iontráil cur síos", - "Enter Docling Server URL": "", + "Enter Docling Server URL": "Cuir isteach URL Freastalaí Doling", "Enter Document Intelligence Endpoint": "Iontráil Críochphointe Faisnéise Doiciméid", "Enter Document Intelligence Key": "Iontráil Eochair Faisnéise Doiciméad", "Enter domains separated by commas (e.g., example.com,site.org)": "Cuir isteach fearainn atá scartha le camóga (m.sh., example.com,site.org)", "Enter Exa API Key": "Cuir isteach Eochair Exa API", - "Enter Firecrawl API Base URL": "", - "Enter Firecrawl API Key": "", + "Enter Firecrawl API Base URL": "Cuir isteach URL Bonn API Firecrawl", + "Enter Firecrawl API Key": "Cuir isteach Eochair API Firecrawl", "Enter Github Raw URL": "Cuir isteach URL Github Raw", "Enter Google PSE API Key": "Cuir isteach Eochair API Google PSE", "Enter Google PSE Engine Id": "Cuir isteach ID Inneall Google PSE", @@ -425,16 +425,16 @@ "Enter Jupyter Token": "Cuir isteach Jupyter Chomhartha", "Enter Jupyter URL": "Cuir isteach URL Jupyter", "Enter Kagi Search API Key": "Cuir isteach Eochair Kagi Cuardach API", - "Enter Key Behavior": "", + "Enter Key Behavior": "Iontráil Iompar Eochair", "Enter language codes": "Cuir isteach cóid teanga", - "Enter Mistral API Key": "", + "Enter Mistral API Key": "Cuir isteach Eochair API Mistral", "Enter Model ID": "Iontráil ID Mhúnla", "Enter model tag (e.g. {{modelTag}})": "Cuir isteach chlib samhail (m.sh. {{modelTag}})", "Enter Mojeek Search API Key": "Cuir isteach Eochair API Cuardach Mojeek", "Enter Number of Steps (e.g. 50)": "Iontráil Líon na gCéimeanna (m.sh. 50)", - "Enter Perplexity API Key": "", - "Enter Playwright Timeout": "", - "Enter Playwright WebSocket URL": "", + "Enter Perplexity API Key": "Cuir isteach Eochair API Perplexity", + "Enter Playwright Timeout": "Iontráil Teorainn Ama na nDrámadóir", + "Enter Playwright WebSocket URL": "Cuir isteach URL WebSocket Seinmeora", "Enter proxy URL (e.g. https://user:password@host:port)": "Cuir isteach URL seachfhreastalaí (m.sh. https://user:password@host:port)", "Enter reasoning effort": "Cuir isteach iarracht réasúnaíochta", "Enter Sampler (e.g. Euler a)": "Cuir isteach Sampler (m.sh. Euler a)", @@ -452,26 +452,26 @@ "Enter server host": "Cuir isteach óstach freastalaí", "Enter server label": "Cuir isteach lipéad freastalaí", "Enter server port": "Cuir isteach port freastalaí", - "Enter Sougou Search API sID": "", - "Enter Sougou Search API SK": "", + "Enter Sougou Search API sID": "Cuir isteach sID Sougou Search API", + "Enter Sougou Search API SK": "Cuir isteach Sougou Search API SK", "Enter stop sequence": "Cuir isteach seicheamh stad", "Enter system prompt": "Cuir isteach an chóras leid", - "Enter system prompt here": "", + "Enter system prompt here": "Cuir leid córais isteach anseo", "Enter Tavily API Key": "Cuir isteach eochair API Tavily", - "Enter Tavily Extract Depth": "", + "Enter Tavily Extract Depth": "Cuir isteach Doimhneacht Sliocht Tavily", "Enter the public URL of your WebUI. This URL will be used to generate links in the notifications.": "Cuir isteach URL poiblí do WebUI. Bainfear úsáid as an URL seo chun naisc a ghiniúint sna fógraí.", "Enter Tika Server URL": "Cuir isteach URL freastalaí Tika", "Enter timeout in seconds": "Cuir isteach an t-am istigh i soicindí", - "Enter to Send": "", + "Enter to Send": "Iontráil chun Seol", "Enter Top K": "Cuir isteach Barr K", - "Enter Top K Reranker": "", + "Enter Top K Reranker": "Cuir isteach Barr K Reranker", "Enter URL (e.g. http://127.0.0.1:7860/)": "Iontráil URL (m.sh. http://127.0.0.1:7860/)", "Enter URL (e.g. http://localhost:11434)": "Iontráil URL (m.sh. http://localhost:11434)", "Enter your current password": "Cuir isteach do phasfhocal reatha", "Enter Your Email": "Cuir isteach do Ríomhphost", "Enter Your Full Name": "Cuir isteach d'Ainm Iomlán", "Enter your message": "Cuir isteach do theachtaireacht", - "Enter your name": "", + "Enter your name": "Cuir isteach d'ainm", "Enter your new password": "Cuir isteach do phasfhocal nua", "Enter Your Password": "Cuir isteach do phasfhocal", "Enter Your Role": "Cuir isteach do Ról", @@ -488,14 +488,14 @@ "Example: mail": "Sampla: ríomhphost", "Example: ou=users,dc=foo,dc=example": "Sampla: ou=úsáideoirí,dc=foo,dc=sampla", "Example: sAMAccountName or uid or userPrincipalName": "Sampla: sAMAaccountName nó uid nó userPrincipalName", - "Exceeded the number of seats in your license. Please contact support to increase the number of seats.": "", + "Exceeded the number of seats in your license. Please contact support to increase the number of seats.": "Níos mó ná líon na suíochán i do cheadúnas. Déan teagmháil le do thoil le tacaíocht chun líon na suíochán a mhéadú.", "Exclude": "Eisigh", "Execute code for analysis": "Íosluchtaigh cód le haghaidh anailíse", - "Executing **{{NAME}}**...": "", - "Expand": "", + "Executing **{{NAME}}**...": "**{{NAME}}** á rith...", + "Expand": "Leathnaigh", "Experimental": "Turgnamhach", - "Explain": "", - "Explain this section to me in more detail": "", + "Explain": "Mínigh", + "Explain this section to me in more detail": "Mínigh an chuid seo dom níos mine", "Explore the cosmos": "Déan iniúchadh ar an cosmos", "Export": "Easpórtáil", "Export All Archived Chats": "Easpórtáil Gach Comhrá Cartlainne", @@ -509,14 +509,14 @@ "Export Prompts": "Leideanna Easpórtála", "Export to CSV": "Easpórtáil go CSV", "Export Tools": "Uirlisí Easpór", - "External": "", + "External": "Seachtrach", "External Models": "Múnlaí Seachtracha", "Failed to add file.": "Theip ar an gcomhad a chur leis.", - "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to connect to {{URL}} OpenAPI tool server": "Theip ar nascadh le {{URL}} freastalaí uirlisí OpenAPI", "Failed to create API Key.": "Theip ar an eochair API a chruthú.", "Failed to fetch models": "Theip ar shamhlacha a fháil", "Failed to read clipboard contents": "Theip ar ábhar gearrthaisce a lé", - "Failed to save connections": "", + "Failed to save connections": "Theip ar na naisc a shábháil", "Failed to save models configuration": "Theip ar chumraíocht na múnlaí a shábháil", "Failed to update settings": "Theip ar shocruithe a nuashonrú", "Failed to upload file.": "Theip ar uaslódáil an chomhaid.", @@ -539,8 +539,8 @@ "Filter is now globally enabled": "Tá an scagaire cumasaithe go domhanda anois", "Filters": "Scagairí", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Braithíodh spoofing méarloirg: Ní féidir teachlitreacha a úsáid mar avatar. Réamhshocrú ar íomhá próifíle réamhshocraithe.", - "Firecrawl API Base URL": "", - "Firecrawl API Key": "", + "Firecrawl API Base URL": "URL Bunús API Firecrawl", + "Firecrawl API Key": "Eochair API Firecrawl", "Fluidly stream large external response chunks": "Sruthaigh codanna móra freagartha seachtracha go sreabhach", "Focus chat input": "Ionchur comhrá fócas", "Folder deleted successfully": "Scriosadh an fillteán go rathúil", @@ -551,7 +551,7 @@ "Forge new paths": "Déan cosáin nua a chruthú", "Form": "Foirm", "Format your variables using brackets like this:": "Formáidigh na hathróga ag baint úsáide as lúibíní mar seo:", - "Forwards system user session credentials to authenticate": "", + "Forwards system user session credentials to authenticate": "Cuir dintiúir seisiúin úsáideora córais ar aghaidh lena bhfíordheimhniú", "Frequency Penalty": "Pionós Minicíochta", "Full Context Mode": "Mód Comhthéacs Iomlán", "Function": "Feidhm", @@ -573,7 +573,7 @@ "Gemini API Key is required.": "Tá Eochair Gemini API ag teastáil.", "General": "Ginearálta", "Generate an image": "Gin íomhá", - "Generate Image": "Ginigh Íomhá", + "Generate Image": "Gin Íomhá", "Generate prompt pair": "Gin péire pras", "Generating search query": "Giniúint ceist cuardaigh", "Get started": "Cuir tús leis", @@ -597,7 +597,7 @@ "Hex Color": "Dath Heics", "Hex Color - Leave empty for default color": "Dath Heics - Fág folamh don dath réamhshocraithe", "Hide": "Folaigh", - "Hide Model": "", + "Hide Model": "Folaigh Múnla", "Home": "Baile", "Host": "Óstach", "How can I help you today?": "Conas is féidir liom cabhrú leat inniu?", @@ -605,8 +605,8 @@ "Hybrid Search": "Cuardach Hibrideach", "I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Admhaím gur léigh mé agus tuigim impleachtaí mo ghníomhaíochta. Táim ar an eolas faoi na rioscaí a bhaineann le cód treallach a fhorghníomhú agus tá iontaofacht na foinse fíoraithe agam.", "ID": "ID", - "iframe Sandbox Allow Forms": "", - "iframe Sandbox Allow Same Origin": "", + "iframe Sandbox Allow Forms": "iframe Bosca Gainimh Foirmeacha Ceadaithe", + "iframe Sandbox Allow Same Origin": "Bosca Gainimh iframe Ceadaigh an Bunús Céanna", "Ignite curiosity": "Las fiosracht", "Image": "Íomhá", "Image Compression": "Comhbhrú Íomhá", @@ -628,16 +628,16 @@ "Include": "Cuir san áireamh", "Include `--api-auth` flag when running stable-diffusion-webui": "Cuir bratach `--api-auth` san áireamh agus webui stable-diffusion-reatha á rith", "Include `--api` flag when running stable-diffusion-webui": "Cuir bratach `--api` san áireamh agus webui cobhsaí-scaipthe á rith", - "Influences how quickly the algorithm responds to feedback from the generated text. A lower learning rate will result in slower adjustments, while a higher learning rate will make the algorithm more responsive.": "", + "Influences how quickly the algorithm responds to feedback from the generated text. A lower learning rate will result in slower adjustments, while a higher learning rate will make the algorithm more responsive.": "Bíonn tionchar aige ar chomh tapa agus a fhreagraíonn an t-algartam d’aiseolas ón téacs ginte. Beidh coigeartuithe níos moille mar thoradh ar ráta foghlama níos ísle, agus déanfaidh ráta foghlama níos airde an t-algartam níos freagraí.", "Info": "Eolas", - "Inject the entire content as context for comprehensive processing, this is recommended for complex queries.": "", + "Inject the entire content as context for comprehensive processing, this is recommended for complex queries.": "Instealladh an t-ábhar ar fad mar chomhthéacs do phróiseáil chuimsitheach, moltar é seo le haghaidh ceisteanna casta.", "Input commands": "Orduithe ionchuir", "Install from Github URL": "Suiteáil ó Github URL", "Instant Auto-Send After Voice Transcription": "Seoladh Uathoibríoch Láithreach Tar éis", "Integration": "Comhtháthú", "Interface": "Comhéadan", "Invalid file format.": "Formáid comhaid neamhbhailí.", - "Invalid JSON schema": "", + "Invalid JSON schema": "Scéimre JSON neamhbhailí", "Invalid Tag": "Clib neamhbhailí", "is typing...": "ag clóscríobh...", "January": "Eanáir", @@ -645,7 +645,7 @@ "join our Discord for help.": "bí inár Discord chun cabhair a fháil.", "JSON": "JSON", "JSON Preview": "Réamhamharc JSON", - "July": "Lúil", + "July": "Iúil", "June": "Meitheamh", "Jupyter Auth": "Fíordheimhniú Jupyter", "Jupyter URL": "URL Jupyter", @@ -659,7 +659,7 @@ "Knowledge Access": "Rochtain Eolais", "Knowledge created successfully.": "Eolas cruthaithe go rathúil.", "Knowledge deleted successfully.": "D'éirigh leis an eolas a scriosadh.", - "Knowledge Public Sharing": "", + "Knowledge Public Sharing": "Roinnt Faisnéise Poiblí", "Knowledge reset successfully.": "D'éirigh le hathshocrú eolais.", "Knowledge updated successfully": "D'éirigh leis an eolas a nuashonrú", "Kokoro.js (Browser)": "Kokoro.js (Brabhsálaí)", @@ -667,17 +667,17 @@ "Label": "Lipéad", "Landing Page Mode": "Mód Leathanach Tuirlingthe", "Language": "Teanga", - "Language Locales": "", + "Language Locales": "Logánta Teanga", "Last Active": "Gníomhach Deiridh", "Last Modified": "Athraithe Deiridh", "Last reply": "Freagra deiridh", "LDAP": "LDAP", "LDAP server updated": "Nuashonraíodh freastalaí LDAP", "Leaderboard": "An Clár Ceannairí", - "Learn more about OpenAPI tool servers.": "", + "Learn more about OpenAPI tool servers.": "Foghlaim tuilleadh faoi fhreastalaithe uirlisí OpenAPI.", "Leave empty for unlimited": "Fág folamh le haghaidh neamhtheoranta", - "Leave empty to include all models from \"{{url}}/api/tags\" endpoint": "", - "Leave empty to include all models from \"{{url}}/models\" endpoint": "", + "Leave empty to include all models from \"{{url}}/api/tags\" endpoint": "Fág folamh chun gach múnla ó chríochphointe \"{{url}}/api/tags\" a chur san áireamh", + "Leave empty to include all models from \"{{url}}/models\" endpoint": "Fág folamh chun gach múnla ón gcríochphointe \"{{url}}/models\" a chur san áireamh", "Leave empty to include all models or select specific models": "Fág folamh chun gach múnla a chur san áireamh nó roghnaigh múnlaí sonracha", "Leave empty to use the default prompt, or enter a custom prompt": "Fág folamh chun an leid réamhshocraithe a úsáid, nó cuir isteach leid saincheaptha", "Leave model field empty to use the default model.": "Fág réimse an mhúnla folamh chun an tsamhail réamhshocraithe a úsáid.", @@ -691,7 +691,7 @@ "Local": "Áitiúil", "Local Models": "Múnlaí Áitiúla", "Location access not allowed": "Ní cheadaítear rochtain suímh", - "Logit Bias": "", + "Logit Bias": "Bias Logit", "Lost": "Cailleadh", "LTR": "LTR", "Made by Open WebUI Community": "Déanta ag OpenWebUI Community", @@ -704,7 +704,7 @@ "Manage Ollama API Connections": "Bainistigh Naisc API Ollama", "Manage OpenAI API Connections": "Bainistigh Naisc API OpenAI", "Manage Pipelines": "Bainistigh píblín", - "Manage Tool Servers": "", + "Manage Tool Servers": "Bainistigh Freastalaithe Uirlisí", "March": "Márta", "Max Tokens (num_predict)": "Comharthaí Uasta (num_predicate)", "Max Upload Count": "Líon Uaslódála Max", @@ -724,16 +724,16 @@ "Mirostat": "Mirostat", "Mirostat Eta": "Mirostat Eta", "Mirostat Tau": "Mirostat Tau", - "Mistral OCR": "", - "Mistral OCR API Key required.": "", + "Mistral OCR": "OCR Mistral", + "Mistral OCR API Key required.": "Mistral OCR API Eochair ag teastáil.", "Model": "Múnla", "Model '{{modelName}}' has been successfully downloaded.": "Rinneadh an tsamhail '{{modelName}}' a íoslódáil go rathúil.", "Model '{{modelTag}}' is already in queue for downloading.": "Tá múnla ‘{{modelTag}}’ sa scuaine cheana féin le híoslódáil.", "Model {{modelId}} not found": "Múnla {{modelId}} gan aimsiú", "Model {{modelName}} is not vision capable": "Níl samhail {{modelName}} in ann amharc", "Model {{name}} is now {{status}}": "Tá samhail {{name}} {{status}} anois", - "Model {{name}} is now hidden": "", - "Model {{name}} is now visible": "", + "Model {{name}} is now hidden": "Tá múnla {{name}} i bhfolach anois", + "Model {{name}} is now visible": "Tá múnla {{name}} le feiceáil anois", "Model accepts image inputs": "Glacann múnla le hionchuir", "Model created successfully!": "Cruthaíodh múnla go rathúil!", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Fuarthas cosán an múnla. Teastaíonn ainm gearr an mhúnla le haghaidh nuashonraithe, ní féidir leanúint ar aghaidh.", @@ -749,7 +749,7 @@ "Models": "Múnlaí", "Models Access": "Rochtain Múnlaí", "Models configuration saved successfully": "Sábháladh cumraíocht na múnlaí go rathúil", - "Models Public Sharing": "", + "Models Public Sharing": "Múnlaí Comhroinnte Poiblí", "Mojeek Search API Key": "Eochair API Cuardach Mojeek", "more": "níos mó", "More": "Tuilleadh", @@ -812,7 +812,7 @@ "Open file": "Oscail comhad", "Open in full screen": "Oscail i scáileán iomlán", "Open new chat": "Oscail comhrá nua", - "Open WebUI can use tools provided by any OpenAPI server.": "", + "Open WebUI can use tools provided by any OpenAPI server.": "Is féidir le WebUI Oscailte uirlisí a úsáid a sholáthraíonn aon fhreastalaí OpenAPI.", "Open WebUI uses faster-whisper internally.": "Úsáideann Open WebUI cogar níos tapúla go hinmheánach.", "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Úsáideann Open WebUI úsáidí SpeechT5 agus CMU leabaithe cainteoir Artach.", "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Tá leagan WebUI oscailte (v{{OPEN_WEBUI_VERSION}}) níos ísle ná an leagan riachtanach (v{{REQUIRED_VERSION}})", @@ -822,7 +822,7 @@ "OpenAI API Key is required.": "Tá Eochair API OpenAI ag teastáil.", "OpenAI API settings updated": "Nuashonraíodh socruithe OpenAI API", "OpenAI URL/Key required.": "Teastaíonn URL/eochair OpenAI.", - "openapi.json Path": "", + "openapi.json Path": "Conair openapi.json", "or": "nó", "Organize your users": "Eagraigh do chuid úsáideoirí", "Other": "Eile", @@ -839,7 +839,7 @@ "Permission denied when accessing microphone": "Cead diúltaithe agus tú ag rochtain ar", "Permission denied when accessing microphone: {{error}}": "Cead diúltaithe agus tú ag teacht ar mhicreafón: {{error}}", "Permissions": "Ceadanna", - "Perplexity API Key": "", + "Perplexity API Key": "Eochair API Perplexity", "Personalization": "Pearsantú", "Pin": "Bioráin", "Pinned": "Pinneáilte", @@ -851,13 +851,13 @@ "Pipelines Valves": "Comhlaí Píblíne", "Plain text (.txt)": "Téacs simplí (.txt)", "Playground": "Clós súgartha", - "Playwright Timeout (ms)": "", - "Playwright WebSocket URL": "", + "Playwright Timeout (ms)": "Teorainn Ama drámadóra (ms)", + "Playwright WebSocket URL": "URL drámadóir WebSocket", "Please carefully review the following warnings:": "Déan athbhreithniú cúramach ar na rabhaidh seo a leanas le do thoil:", "Please do not close the settings page while loading the model.": "Ná dún leathanach na socruithe agus an tsamhail á luchtú.", "Please enter a prompt": "Cuir isteach leid", - "Please enter a valid path": "", - "Please enter a valid URL": "", + "Please enter a valid path": "Cuir isteach cosán bailí", + "Please enter a valid URL": "Cuir isteach URL bailí", "Please fill in all fields.": "Líon isteach gach réimse le do thoil.", "Please select a model first.": "Roghnaigh munla ar dtús le do thoil.", "Please select a model.": "Roghnaigh múnla le do thoil.", @@ -869,19 +869,19 @@ "Presence Penalty": "Pionós Láithreacht", "Previous 30 days": "30 lá roimhe seo", "Previous 7 days": "7 lá roimhe seo", - "Private": "", + "Private": "Príobháideach", "Profile Image": "Íomhá Próifíl", "Prompt": "Leid", "Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Leid (m.sh. inis dom fíric spraíúil faoin Impireacht Rómhánach)", - "Prompt Autocompletion": "", + "Prompt Autocompletion": "Uathchríochnú Pras", "Prompt Content": "Ábhar Leid", "Prompt created successfully": "Leid cruthaithe go rathúil", "Prompt suggestions": "Moltaí leid", "Prompt updated successfully": "D'éirigh leis an leid a nuashonrú", "Prompts": "Leabhair", "Prompts Access": "Rochtain ar Chuirí", - "Prompts Public Sharing": "", - "Public": "", + "Prompts Public Sharing": "Spreagann Roinnt Phoiblí", + "Public": "Poiblí", "Pull \"{{searchValue}}\" from Ollama.com": "Tarraing \"{{searchValue}}\" ó Ollama.com", "Pull a model from Ollama.com": "Tarraing múnla ó Ollama.com", "Query Generation Prompt": "Cuirí Ginearáil Ceisteanna", @@ -893,16 +893,16 @@ "Reasoning Effort": "Iarracht Réasúnúcháin", "Record voice": "Taifead guth", "Redirecting you to Open WebUI Community": "Tú a atreorú chuig OpenWebUI Community", - "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", + "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Laghdaíonn sé an dóchúlacht go giniúint nonsense. Tabharfaidh luach níos airde (m.sh. 100) freagraí níos éagsúla, agus beidh luach níos ísle (m.sh. 10) níos coimeádaí.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Tagairt duit féin mar \"Úsáideoir\" (m.sh., \"Tá an úsáideoir ag foghlaim Spáinnis\")", "References from": "Tagairtí ó", "Refused when it shouldn't have": "Diúltaíodh nuair nár chóir dó", "Regenerate": "Athghiniúint", - "Reindex": "", - "Reindex Knowledge Base Vectors": "", + "Reindex": "Reindex", + "Reindex Knowledge Base Vectors": "Veicteoirí Bonn Eolais a ath-innéacsú", "Release Notes": "Nótaí Scaoilte", "Relevance": "Ábharthacht", - "Relevance Threshold": "", + "Relevance Threshold": "Tairseach Ábharthaíochta", "Remove": "Bain", "Remove Model": "Bain Múnla", "Rename": "Athainmnigh", @@ -1005,22 +1005,22 @@ "Set the number of worker threads used for computation. This option controls how many threads are used to process incoming requests concurrently. Increasing this value can improve performance under high concurrency workloads but may also consume more CPU resources.": "Socraigh líon na snáitheanna oibrithe a úsáidtear le haghaidh ríomh. Rialaíonn an rogha seo cé mhéad snáithe a úsáidtear chun iarratais a thagann isteach a phróiseáil i gcomhthráth. D'fhéadfadh méadú ar an luach seo feidhmíocht a fheabhsú faoi ualaí oibre comhairgeadra ard ach féadfaidh sé níos mó acmhainní LAP a úsáid freisin.", "Set Voice": "Socraigh Guth", "Set whisper model": "Socraigh múnla cogar", - "Sets a flat bias against tokens that have appeared at least once. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 0.9) will be more lenient. At 0, it is disabled.": "", - "Sets a scaling bias against tokens to penalize repetitions, based on how many times they have appeared. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 0.9) will be more lenient. At 0, it is disabled.": "", - "Sets how far back for the model to look back to prevent repetition.": "", - "Sets the random number seed to use for generation. Setting this to a specific number will make the model generate the same text for the same prompt.": "", - "Sets the size of the context window used to generate the next token.": "", + "Sets a flat bias against tokens that have appeared at least once. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 0.9) will be more lenient. At 0, it is disabled.": "Socraíonn sé claonadh cothrom i gcoinne comharthaí a tháinig chun solais uair amháin ar a laghad. Cuirfidh luach níos airde (m.sh., 1.5) pionós níos láidre ar athrá, agus beidh luach níos ísle (m.sh., 0.9) níos boige. Ag 0, tá sé díchumasaithe.", + "Sets a scaling bias against tokens to penalize repetitions, based on how many times they have appeared. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 0.9) will be more lenient. At 0, it is disabled.": "Socraíonn sé laofacht scálaithe i gcoinne comharthaí chun pionós a ghearradh ar athrá, bunaithe ar cé mhéad uair a tháinig siad chun solais. Cuirfidh luach níos airde (m.sh., 1.5) pionós níos láidre ar athrá, agus beidh luach níos ísle (m.sh., 0.9) níos boige. Ag 0, tá sé díchumasaithe.", + "Sets how far back for the model to look back to prevent repetition.": "Socraíonn sé cé chomh fada siar is atá an tsamhail le breathnú siar chun athrá a chosc.", + "Sets the random number seed to use for generation. Setting this to a specific number will make the model generate the same text for the same prompt.": "Socraíonn sé an síol uimhir randamach a úsáid le haghaidh giniúna. Má shocraítear é seo ar uimhir shainiúil, ginfidh an tsamhail an téacs céanna don leid céanna.", + "Sets the size of the context window used to generate the next token.": "Socraíonn sé méid na fuinneoige comhthéacs a úsáidtear chun an chéad chomhartha eile a ghiniúint.", "Sets the stop sequences to use. When this pattern is encountered, the LLM will stop generating text and return. Multiple stop patterns may be set by specifying multiple separate stop parameters in a modelfile.": "Socraíonn sé na stadanna le húsáid. Nuair a thagtar ar an bpatrún seo, stopfaidh an LLM ag giniúint téacs agus ag filleadh. Is féidir patrúin stad iolracha a shocrú trí pharaiméadair stadanna iolracha a shonrú i gcomhad samhail.", "Settings": "Socruithe", "Settings saved successfully!": "Socruithe sábhálta go rathúil!", "Share": "Comhroinn", "Share Chat": "Comhroinn Comhrá", "Share to Open WebUI Community": "Comhroinn le Pobal OpenWebUI", - "Sharing Permissions": "", + "Sharing Permissions": "Ceadanna a Roinnt", "Show": "Taispeáin", "Show \"What's New\" modal on login": "Taispeáin módúil \"Cad atá Nua\" ar logáil isteach", "Show Admin Details in Account Pending Overlay": "Taispeáin Sonraí Riaracháin sa Chuntas ar Feitheamh Forleagan", - "Show Model": "", + "Show Model": "Taispeáin Múnla", "Show shortcuts": "Taispeáin aicearraí", "Show your support!": "Taispeáin do thacaíocht!", "Showcased creativity": "Cruthaitheacht léirithe", @@ -1032,8 +1032,8 @@ "Sign up to {{WEBUI_NAME}}": "Cláraigh le {{WEBUI_NAME}}", "Signing in to {{WEBUI_NAME}}": "Ag síniú isteach ar {{WEBUI_NAME}}", "sk-1234": "sk-1234", - "Sougou Search API sID": "", - "Sougou Search API SK": "", + "Sougou Search API sID": "Sougou Search API sID", + "Sougou Search API SK": "Sougou Search API SK", "Source": "Foinse", "Speech Playback Speed": "Luas Athsheinm Urlabhra", "Speech recognition error: {{error}}": "Earráid aitheantais cainte: {{error}}", @@ -1053,7 +1053,7 @@ "System": "Córas", "System Instructions": "Treoracha Córas", "System Prompt": "Córas Leid", - "Tags": "", + "Tags": "Clibeanna", "Tags Generation": "Giniúint Clibeanna", "Tags Generation Prompt": "Clibeanna Giniúint Leid", "Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting.": "Úsáidtear sampláil saor ó eireabaill chun tionchar na n-chomharthaí ón aschur nach bhfuil chomh dóchúil céanna a laghdú. Laghdóidh luach níos airde (m.sh., 2.0) an tionchar níos mó, agus díchumasaíonn luach 1.0 an socrú seo. (réamhshocraithe: 1)", @@ -1061,7 +1061,7 @@ "Tap to interrupt": "Tapáil chun cur isteach", "Tasks": "Tascanna", "Tavily API Key": "Eochair API Tavily", - "Tavily Extract Depth": "", + "Tavily Extract Depth": "Doimhneacht Sliocht Tavily", "Tell us more:": "Inis dúinn níos mó:", "Temperature": "Teocht", "Template": "Teimpléad", @@ -1072,7 +1072,7 @@ "Thanks for your feedback!": "Go raibh maith agat as do chuid aiseolas!", "The Application Account DN you bind with for search": "An Cuntas Feidhmchláir DN a nascann tú leis le haghaidh cuardaigh", "The base to search for users": "An bonn chun cuardach a dhéanamh ar úsáideoirí", - "The batch size determines how many text requests are processed together at once. A higher batch size can increase the performance and speed of the model, but it also requires more memory.": "", + "The batch size determines how many text requests are processed together at once. A higher batch size can increase the performance and speed of the model, but it also requires more memory.": "Cinneann méid an bhaisc cé mhéad iarratas téacs a phróiseáiltear le chéile ag an am céanna. Is féidir le méid baisc níos airde feidhmíocht agus luas an mhúnla a mhéadú, ach éilíonn sé níos mó cuimhne freisin.", "The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "Is deonacha paiseanta ón bpobal iad na forbróirí taobh thiar den bhreiseán seo. Má aimsíonn an breiseán seo cabhrach leat, smaoinigh ar rannchuidiú lena fhorbairt.", "The evaluation leaderboard is based on the Elo rating system and is updated in real-time.": "Tá an clár ceannairí meastóireachta bunaithe ar chóras rátála Elo agus déantar é a nuashonrú i bhfíor-am.", "The LDAP attribute that maps to the mail that users use to sign in.": "An tréith LDAP a mhapálann don ríomhphost a úsáideann úsáideoirí chun síniú isteach.", @@ -1081,16 +1081,16 @@ "The maximum file size in MB. If the file size exceeds this limit, the file will not be uploaded.": "Uasmhéid an chomhaid i MB. Má sháraíonn méid an chomhaid an teorainn seo, ní uaslódófar an comhad.", "The maximum number of files that can be used at once in chat. If the number of files exceeds this limit, the files will not be uploaded.": "An líon uasta na gcomhaid is féidir a úsáid ag an am céanna i gcomhrá. Má sháraíonn líon na gcomhaid an teorainn seo, ní uaslódófar na comhaid.", "The score should be a value between 0.0 (0%) and 1.0 (100%).": "Ba chóir go mbeadh an scór ina luach idir 0.0 (0%) agus 1.0 (100%).", - "The temperature of the model. Increasing the temperature will make the model answer more creatively.": "", + "The temperature of the model. Increasing the temperature will make the model answer more creatively.": "Teocht an mhúnla. Déanfaidh méadú ar an teocht an freagra múnla níos cruthaithí.", "Theme": "Téama", "Thinking...": "Ag smaoineamh...", "This action cannot be undone. Do you wish to continue?": "Ní féidir an gníomh seo a chur ar ais. Ar mhaith leat leanúint ar aghaidh?", - "This channel was created on {{createdAt}}. This is the very beginning of the {{channelName}} channel.": "", - "This chat won’t appear in history and your messages will not be saved.": "", + "This channel was created on {{createdAt}}. This is the very beginning of the {{channelName}} channel.": "Cruthaíodh an cainéal seo ar {{createdAt}}. Seo tús an chainéil {{channelName}}.", + "This chat won’t appear in history and your messages will not be saved.": "Ní bheidh an comhrá seo le feiceáil sa stair agus ní shábhálfar do theachtaireachtaí.", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Cinntíonn sé seo go sábhálfar do chomhráite luachmhara go daingean i do bhunachar sonraí cúltaca Go raibh maith agat!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "Is gné turgnamhach í seo, b'fhéidir nach bhfeidhmeoidh sé mar a bhíothas ag súil leis agus tá sé faoi réir athraithe ag am ar bith.", - "This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "", - "This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "", + "This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "Rialaíonn an rogha seo cé mhéad comhartha a chaomhnaítear agus an comhthéacs á athnuachan. Mar shampla, má shocraítear go 2 é, coinneofar an 2 chomhartha dheireanacha de chomhthéacs an chomhrá. Is féidir le comhthéacs a chaomhnú cabhrú le leanúnachas comhrá a choinneáil, ach d’fhéadfadh sé laghdú a dhéanamh ar an gcumas freagairt do thopaicí nua.", + "This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "Socraíonn an rogha seo an t-uaslíon comharthaí is féidir leis an tsamhail a ghiniúint ina fhreagra. Tríd an teorainn seo a mhéadú is féidir leis an tsamhail freagraí níos faide a sholáthar, ach d’fhéadfadh go méadódh sé an dóchúlacht go nginfear ábhar neamhchabhrach nó nach mbaineann le hábhar.", "This option will delete all existing files in the collection and replace them with newly uploaded files.": "Scriosfaidh an rogha seo gach comhad atá sa bhailiúchán agus cuirfear comhaid nua-uaslódála ina n-ionad.", "This response was generated by \"{{model}}\"": "Gin an freagra seo ag \"{{model}}\"", "This will delete": "Scriosfaidh sé seo", @@ -1103,7 +1103,7 @@ "Thought for {{DURATION}} seconds": "Smaoineamh ar feadh {{DURATION}} soicind", "Tika": "Tika", "Tika Server URL required.": "Teastaíonn URL Freastalaí Tika.", - "Tiktoken": "Tictoken", + "Tiktoken": "Tiktoken", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Leid: Nuashonraigh sliotáin iolracha athróg as a chéile trí bhrú ar an eochair cluaisín san ionchur comhrá tar éis gach athsholáthair.", "Title": "Teideal", "Title (e.g. Tell me a fun fact)": "Teideal (m.sh. inis dom fíric spraíúil)", @@ -1134,7 +1134,7 @@ "Tool ID": "ID Uirlis", "Tool imported successfully": "Uirlis iompórtáilte", "Tool Name": "Ainm Uirlis", - "Tool Servers": "", + "Tool Servers": "Freastalaithe Uirlisí", "Tool updated successfully": "An uirlis nuashonraithe", "Tools": "Uirlisí", "Tools Access": "Rochtain Uirlisí", @@ -1142,9 +1142,9 @@ "Tools Function Calling Prompt": "Leid Glaonna Feidhm Uirlisí", "Tools have a function calling system that allows arbitrary code execution": "Tá córas glaonna feidhme ag uirlisí a cheadaíonn forghníomhú cód treallach", "Tools have a function calling system that allows arbitrary code execution.": "Tá córas glaonna feidhme ag uirlisí a cheadaíonn forghníomhú cód treallach.", - "Tools Public Sharing": "", + "Tools Public Sharing": "Uirlisí Roinnte Poiblí", "Top K": "Barr K", - "Top K Reranker": "", + "Top K Reranker": "Barr K Reranker", "Top P": "Barr P", "Transformers": "Claochladáin", "Trouble accessing Ollama?": "Deacracht teacht ar Ollama?", @@ -1184,14 +1184,14 @@ "Use Gravatar": "Úsáid Gravatar", "Use groups to group your users and assign permissions.": "Úsáid grúpaí chun d'úsáideoirí a ghrúpáil agus ceadanna a shannadh", "Use Initials": "Úsáid ceannlitreacha", - "Use no proxy to fetch page contents.": "", - "Use proxy designated by http_proxy and https_proxy environment variables to fetch page contents.": "", + "Use no proxy to fetch page contents.": "Ná húsáid seachfhreastalaí chun inneachar an leathanaigh a fháil.", + "Use proxy designated by http_proxy and https_proxy environment variables to fetch page contents.": "Úsáid seachfhreastalaí ainmnithe ag athróga timpeallachta http_proxy agus https_proxy chun inneachar an leathanaigh a fháil.", "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "úsáideoir", "User": "Úsáideoir", "User location successfully retrieved.": "Fuarthas suíomh an úsáideora go rathúil.", - "User Webhooks": "", + "User Webhooks": "Crúcaí Gréasáin Úsáideoir", "Username": "Ainm Úsáideora", "Users": "Úsáideoirí", "Using the default arena model with all models. Click the plus button to add custom models.": "Ag baint úsáide as an múnla réimse réamhshocraithe le gach múnlaí. Cliceáil ar an gcnaipe móide chun múnlaí saincheaptha a chur leis.", @@ -1202,12 +1202,12 @@ "Valves updated successfully": "Comhlaí nuashonraíodh", "variable": "athraitheach", "variable to have them replaced with clipboard content.": "athróg chun ábhar gearrthaisce a chur in ionad iad.", - "Verify Connection": "", - "Verify SSL Certificate": "", + "Verify Connection": "Fíoraigh Ceangal", + "Verify SSL Certificate": "Fíoraigh Deimhniú SSL", "Version": "Leagan", "Version {{selectedVersion}} of {{totalVersions}}": "Leagan {{selectedVersion}} de {{totalVersions}}", "View Replies": "Féach ar Fhreagraí", - "View Result from **{{NAME}}**": "", + "View Result from **{{NAME}}**": "Féach ar Thoradh ó **{{NAME}}**", "Visibility": "Infheictheacht", "Voice": "Guth", "Voice Input": "Ionchur Gutha", @@ -1218,7 +1218,7 @@ "Warning: Jupyter execution enables arbitrary code execution, posing severe security risks—proceed with extreme caution.": "Rabhadh: Trí fhorghníomhú Jupyter is féidir cód a fhorghníomhú go treallach, rud a chruthaíonn mór-rioscaí slándála - bí fíorchúramach.", "Web": "Gréasán", "Web API": "API Gréasáin", - "Web Loader Engine": "", + "Web Loader Engine": "Inneall Luchtaithe Gréasáin", "Web Search": "Cuardach Gréasáin", "Web Search Engine": "Inneall Cuardaigh Gréasáin", "Web Search in Chat": "Cuardach Gréasáin i gComhrá", @@ -1226,7 +1226,7 @@ "Webhook URL": "URL Webhook", "WebUI Settings": "Socruithe WebUI", "WebUI URL": "URL WebUI", - "WebUI will make requests to \"{{url}}\"": "", + "WebUI will make requests to \"{{url}}\"": "Déanfaidh WebUI iarratais ar \"{{url}}\"", "WebUI will make requests to \"{{url}}/api/chat\"": "Déanfaidh WebUI iarratais ar \"{{url}}/api/chat\"", "WebUI will make requests to \"{{url}}/chat/completions\"": "Déanfaidh WebUI iarratais ar \"{{url}}/chat/completions\"", "What are you trying to achieve?": "Cad atá tú ag iarraidh a bhaint amach?", @@ -1238,7 +1238,7 @@ "Why?": "Cén fáth?", "Widescreen Mode": "Mód Leathanscáileán", "Won": "Bhuaigh", - "Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text.": "", + "Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text.": "Oibríonn sé le barr-k. Beidh téacs níos éagsúla mar thoradh ar luach níos airde (m.sh., 0.95), agus ginfidh luach níos ísle (m.sh., 0.5) téacs níos dírithe agus níos coimeádaí.", "Workspace": "Spás oibre", "Workspace Permissions": "Ceadanna Spás Oibre", "Write": "Scríobh", @@ -1248,7 +1248,7 @@ "Write your model template content here": "Scríobh do mhúnla ábhar teimpléad anseo", "Yesterday": "Inné", "You": "Tú", - "You are currently using a trial license. Please contact support to upgrade your license.": "", + "You are currently using a trial license. Please contact support to upgrade your license.": "Tá ceadúnas trialach á úsáid agat faoi láthair. Déan teagmháil leis an bhfoireann tacaíochta chun do cheadúnas a uasghrádú.", "You can only chat with a maximum of {{maxCount}} file(s) at a time.": "Ní féidir leat comhrá a dhéanamh ach le comhad {{maxCount}} ar a mhéad ag an am.", "You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "Is féidir leat do chuid idirghníomhaíochtaí le LLManna a phearsantú ach cuimhní cinn a chur leis tríd an gcnaipe 'Bainistigh' thíos, rud a fhágann go mbeidh siad níos cabhrach agus níos oiriúnaí duit.", "You cannot upload an empty file.": "Ní féidir leat comhad folamh a uaslódáil.", From 0d388b4e546df7e6d3f521178bff9ffebeefdfb2 Mon Sep 17 00:00:00 2001 From: Tiancong Li Date: Tue, 15 Apr 2025 03:33:30 +0800 Subject: [PATCH 012/161] i18n: update zh-TW --- src/lib/i18n/locales/zh-TW/translation.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/i18n/locales/zh-TW/translation.json b/src/lib/i18n/locales/zh-TW/translation.json index 4eb153550..1268ac800 100644 --- a/src/lib/i18n/locales/zh-TW/translation.json +++ b/src/lib/i18n/locales/zh-TW/translation.json @@ -57,7 +57,7 @@ "All": "全部", "All Documents": "所有文件", "All models deleted successfully": "成功刪除所有模型", - "Allow Call": "", + "Allow Call": "允許通話", "Allow Chat Controls": "允許控制對話", "Allow Chat Delete": "允許刪除對話", "Allow Chat Deletion": "允許刪除對話紀錄", @@ -65,9 +65,9 @@ "Allow File Upload": "允許上傳檔案", "Allow Multiple Models in Chat": "允許在聊天中使用多個模型", "Allow non-local voices": "允許非本機語音", - "Allow Speech to Text": "", + "Allow Speech to Text": "允許語音轉文字", "Allow Temporary Chat": "允許暫時對話", - "Allow Text to Speech": "", + "Allow Text to Speech": "允許文字轉語音", "Allow User Location": "允許使用者位置", "Allow Voice Interruption in Call": "允許在通話中打斷語音", "Allowed Endpoints": "允許的端點", @@ -245,7 +245,7 @@ "Copied shared chat URL to clipboard!": "已複製共用對話 URL 到剪貼簿!", "Copied to clipboard": "已複製到剪貼簿", "Copy": "複製", - "Copy Formatted Text": "", + "Copy Formatted Text": "複製格式化文字", "Copy last code block": "複製最後一個程式碼區塊", "Copy last response": "複製最後一個回應", "Copy Link": "複製連結", From 575c12f80c469bf0e888af3dc05e496aa68e529f Mon Sep 17 00:00:00 2001 From: Athanasios Oikonomou Date: Tue, 15 Apr 2025 01:35:39 +0300 Subject: [PATCH 013/161] feat: add QDRANT_ON_DISK configuration option for Qdrant integration This commit will allow configuring the on_disk client parameter, to reduce the memory usage. https://qdrant.tech/documentation/concepts/storage/?q=mmap#configuring-memmap-storage Default is false, keeping vectors in memory. --- backend/open_webui/config.py | 1 + backend/open_webui/retrieval/vector/dbs/qdrant.py | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/backend/open_webui/config.py b/backend/open_webui/config.py index 3b40977f2..55d3e8260 100644 --- a/backend/open_webui/config.py +++ b/backend/open_webui/config.py @@ -1693,6 +1693,7 @@ MILVUS_TOKEN = os.environ.get("MILVUS_TOKEN", None) # Qdrant QDRANT_URI = os.environ.get("QDRANT_URI", None) QDRANT_API_KEY = os.environ.get("QDRANT_API_KEY", None) +QDRANT_ON_DISK = os.environ.get("QDRANT_ON_DISK", "false").lower() == "true" # OpenSearch OPENSEARCH_URI = os.environ.get("OPENSEARCH_URI", "https://localhost:9200") diff --git a/backend/open_webui/retrieval/vector/dbs/qdrant.py b/backend/open_webui/retrieval/vector/dbs/qdrant.py index be0df6c6a..895098e29 100644 --- a/backend/open_webui/retrieval/vector/dbs/qdrant.py +++ b/backend/open_webui/retrieval/vector/dbs/qdrant.py @@ -6,7 +6,7 @@ from qdrant_client.http.models import PointStruct from qdrant_client.models import models from open_webui.retrieval.vector.main import VectorItem, SearchResult, GetResult -from open_webui.config import QDRANT_URI, QDRANT_API_KEY +from open_webui.config import QDRANT_URI, QDRANT_API_KEY, QDRANT_ON_DISK from open_webui.env import SRC_LOG_LEVELS NO_LIMIT = 999999999 @@ -20,6 +20,7 @@ class QdrantClient: self.collection_prefix = "open-webui" self.QDRANT_URI = QDRANT_URI self.QDRANT_API_KEY = QDRANT_API_KEY + self.QDRANT_ON_DISK = QDRANT_ON_DISK self.client = ( Qclient(url=self.QDRANT_URI, api_key=self.QDRANT_API_KEY) if self.QDRANT_URI @@ -50,7 +51,7 @@ class QdrantClient: self.client.create_collection( collection_name=collection_name_with_prefix, vectors_config=models.VectorParams( - size=dimension, distance=models.Distance.COSINE + size=dimension, distance=models.Distance.COSINE, on_disk=self.QDRANT_ON_DISK ), ) From 12c7ecf0f4bd4e6ed4c1840962f6a1fdf7f80b5e Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Mon, 14 Apr 2025 22:34:38 -0700 Subject: [PATCH 014/161] refac: styling --- src/lib/components/chat/ModelSelector/Selector.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/components/chat/ModelSelector/Selector.svelte b/src/lib/components/chat/ModelSelector/Selector.svelte index dcbc7ca18..860fe9a40 100644 --- a/src/lib/components/chat/ModelSelector/Selector.svelte +++ b/src/lib/components/chat/ModelSelector/Selector.svelte @@ -778,7 +778,7 @@
- {:else if filteredItems.length === 0} + {:else}
{/if} From 36b2052fb08be64d5fe8d01e60524a14910a8563 Mon Sep 17 00:00:00 2001 From: Classic298 <27028174+Classic298@users.noreply.github.com> Date: Tue, 15 Apr 2025 09:55:35 +0200 Subject: [PATCH 015/161] Update __init__.py --- backend/open_webui/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/open_webui/__init__.py b/backend/open_webui/__init__.py index ff386957c..967a49de8 100644 --- a/backend/open_webui/__init__.py +++ b/backend/open_webui/__init__.py @@ -76,7 +76,7 @@ def serve( from open_webui.env import UVICORN_WORKERS # Import the workers setting uvicorn.run( - open_webui.main.app, + "open_webui.main:app", host=host, port=port, forwarded_allow_ips="*", From 4f14b17c34f5b5e6ed18878eff349c71fa053600 Mon Sep 17 00:00:00 2001 From: Classic298 <27028174+Classic298@users.noreply.github.com> Date: Tue, 15 Apr 2025 13:50:52 +0200 Subject: [PATCH 016/161] Update users.py --- backend/open_webui/routers/users.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/backend/open_webui/routers/users.py b/backend/open_webui/routers/users.py index a9ac34e2f..295c9eeb1 100644 --- a/backend/open_webui/routers/users.py +++ b/backend/open_webui/routers/users.py @@ -288,6 +288,19 @@ async def update_user_by_id( form_data: UserUpdateForm, session_user=Depends(get_admin_user), ): + # Prevent modification of the primary admin user by other admins + try: + first_user = Users.get_first_user() + if first_user and user_id == first_user.id and session_user.id != user_id: + raise HTTPException( + status_code=status.HTTP_403_FORBIDDEN, + detail=ERROR_MESSAGES.ACTION_PROHIBITED, + ) + except Exception as e: + log.error(f"Error checking primary admin status: {e}") + raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Could not verify primary admin status.") + + user = Users.get_user_by_id(user_id) if user: @@ -328,6 +341,7 @@ async def update_user_by_id( ) + ############################ # DeleteUserById ############################ @@ -335,6 +349,18 @@ async def update_user_by_id( @router.delete("/{user_id}", response_model=bool) async def delete_user_by_id(user_id: str, user=Depends(get_admin_user)): + # Prevent deletion of the primary admin user + try: + first_user = Users.get_first_user() + if first_user and user_id == first_user.id: + raise HTTPException( + status_code=status.HTTP_403_FORBIDDEN, + detail=ERROR_MESSAGES.ACTION_PROHIBITED, + ) + except Exception as e: + log.error(f"Error checking primary admin status: {e}") + raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Could not verify primary admin status.") + if user.id != user_id: result = Auths.delete_auth_by_id(user_id) @@ -346,6 +372,7 @@ async def delete_user_by_id(user_id: str, user=Depends(get_admin_user)): detail=ERROR_MESSAGES.DELETE_USER_ERROR, ) + # Prevent self-deletion raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail=ERROR_MESSAGES.ACTION_PROHIBITED, From b1ef53873fa3adccd0a5a1b68e5b638316e40248 Mon Sep 17 00:00:00 2001 From: Juan Calderon-Perez <835733+gaby@users.noreply.github.com> Date: Tue, 15 Apr 2025 08:53:05 -0400 Subject: [PATCH 017/161] Check if content is present before removing --- backend/open_webui/routers/files.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/backend/open_webui/routers/files.py b/backend/open_webui/routers/files.py index 8a2888d86..5907b69f4 100644 --- a/backend/open_webui/routers/files.py +++ b/backend/open_webui/routers/files.py @@ -173,7 +173,8 @@ async def list_files(user=Depends(get_verified_user), content: bool = Query(True if not content: for file in files: - del file.data["content"] + if "content" in file.data: + del file.data["content"] return files @@ -214,7 +215,8 @@ async def search_files( if not content: for file in matching_files: - del file.data["content"] + if "content" in file.data: + del file.data["content"] return matching_files From b4d0d840d1ae14b168fb085993f68d7def07f55f Mon Sep 17 00:00:00 2001 From: Juan Calderon-Perez <835733+gaby@users.noreply.github.com> Date: Tue, 15 Apr 2025 08:56:51 -0400 Subject: [PATCH 018/161] Fix formatting of qdrant.py --- backend/open_webui/retrieval/vector/dbs/qdrant.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/open_webui/retrieval/vector/dbs/qdrant.py b/backend/open_webui/retrieval/vector/dbs/qdrant.py index 895098e29..13d0b5328 100644 --- a/backend/open_webui/retrieval/vector/dbs/qdrant.py +++ b/backend/open_webui/retrieval/vector/dbs/qdrant.py @@ -51,7 +51,9 @@ class QdrantClient: self.client.create_collection( collection_name=collection_name_with_prefix, vectors_config=models.VectorParams( - size=dimension, distance=models.Distance.COSINE, on_disk=self.QDRANT_ON_DISK + size=dimension, + distance=models.Distance.COSINE, + on_disk=self.QDRANT_ON_DISK, ), ) From 8a50d50038728964efdff0614ff4e2126a17a93f Mon Sep 17 00:00:00 2001 From: Kylapaallikko Date: Tue, 15 Apr 2025 19:44:20 +0300 Subject: [PATCH 019/161] Update translation.json --- src/lib/i18n/locales/fi-FI/translation.json | 84 ++++++++++----------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/src/lib/i18n/locales/fi-FI/translation.json b/src/lib/i18n/locales/fi-FI/translation.json index e1022e938..76e6af4de 100644 --- a/src/lib/i18n/locales/fi-FI/translation.json +++ b/src/lib/i18n/locales/fi-FI/translation.json @@ -57,17 +57,17 @@ "All": "Kaikki", "All Documents": "Kaikki asiakirjat", "All models deleted successfully": "Kaikki mallit poistettu onnistuneesti", - "Allow Call": "", + "Allow Call": "Salli puhelut", "Allow Chat Controls": "Salli keskustelujen hallinta", "Allow Chat Delete": "Salli keskustelujen poisto", "Allow Chat Deletion": "Salli keskustelujen poisto", "Allow Chat Edit": "Salli keskustelujen muokkaus", "Allow File Upload": "Salli tiedostojen lataus", - "Allow Multiple Models in Chat": "", + "Allow Multiple Models in Chat": "Salli useampi malli keskustelussa", "Allow non-local voices": "Salli ei-paikalliset äänet", - "Allow Speech to Text": "", + "Allow Speech to Text": "Salli puhe tekstiksi", "Allow Temporary Chat": "Salli väliaikaiset keskustelut", - "Allow Text to Speech": "", + "Allow Text to Speech": "Salli teksti puheeksi", "Allow User Location": "Salli käyttäjän sijainti", "Allow Voice Interruption in Call": "Salli äänen keskeytys puhelussa", "Allowed Endpoints": "Hyväksytyt päätepisteet", @@ -83,7 +83,7 @@ "and": "ja", "and {{COUNT}} more": "ja {{COUNT}} muuta", "and create a new shared link.": "ja luo uusi jaettu linkki.", - "Android": "", + "Android": "Android", "API Base URL": "API:n verkko-osoite", "API Key": "API-avain", "API Key created.": "API-avain luotu.", @@ -116,7 +116,7 @@ "Auth": "Todennus", "Authenticate": "Todentaa", "Authentication": "Todennus", - "Auto": "", + "Auto": "Automaattinen", "Auto-Copy Response to Clipboard": "Kopioi vastaus automaattisesti leikepöydälle", "Auto-playback response": "Soita vastaus automaattisesti", "Autocomplete Generation": "Automaattisen täydennyksen luonti", @@ -157,7 +157,7 @@ "Change Password": "Vaihda salasana", "Channel Name": "Kanavan nimi", "Channels": "Kanavat", - "Character": "Hahmo", + "Character": "Kirjain", "Character limit for autocomplete generation input": "Automaattisen täydennyksen syötteen merkkiraja", "Chart new frontiers": "Kartoita uusia rajapintoja", "Chat": "Keskustelu", @@ -224,10 +224,10 @@ "Confirm your new password": "Vahvista uusi salasanasi", "Connect to your own OpenAI compatible API endpoints.": "Yhdistä omat OpenAI yhteensopivat API päätepisteet.", "Connect to your own OpenAPI compatible external tool servers.": "Yhdistä omat ulkopuoliset OpenAPI yhteensopivat työkalu palvelimet.", - "Connection failed": "", - "Connection successful": "", + "Connection failed": "Yhteys epäonnistui", + "Connection successful": "Yhteys onnistui", "Connections": "Yhteydet", - "Connections saved successfully": "", + "Connections saved successfully": "Yhteyksien tallentaminen onnistui", "Constrains effort on reasoning for reasoning models. Only applicable to reasoning models from specific providers that support reasoning effort.": "", "Contact Admin for WebUI Access": "Ota yhteyttä ylläpitäjään WebUI-käyttöä varten", "Content": "Sisältö", @@ -245,7 +245,7 @@ "Copied shared chat URL to clipboard!": "Jaettu keskustelulinkki kopioitu leikepöydälle!", "Copied to clipboard": "Kopioitu leikepöydälle", "Copy": "Kopioi", - "Copy Formatted Text": "", + "Copy Formatted Text": "Kopioi muotoiltu teksti", "Copy last code block": "Kopioi viimeisin koodilohko", "Copy last response": "Kopioi viimeisin vastaus", "Copy Link": "Kopioi linkki", @@ -308,7 +308,7 @@ "Deleted User": "Käyttäjä poistettu", "Describe your knowledge base and objectives": "Kuvaa tietokantasi ja tavoitteesi", "Description": "Kuvaus", - "Detect Artifacts Automatically": "", + "Detect Artifacts Automatically": "Tunnista artefaktit automaattisesti", "Didn't fully follow instructions": "Ei noudattanut ohjeita täysin", "Direct": "Suora", "Direct Connections": "Suorat yhteydet", @@ -364,7 +364,7 @@ "e.g. my_filter": "esim. oma_suodatin", "e.g. my_tools": "esim. omat_työkalut", "e.g. Tools for performing various operations": "esim. työkaluja erilaisten toimenpiteiden suorittamiseen", - "e.g., en-US,ja-JP (leave blank for auto-detect)": "", + "e.g., en-US,ja-JP (leave blank for auto-detect)": "esim. en-US,ja-JP (Tyhjäksi jättämällä, automaattinen tunnistus)", "Edit": "Muokkaa", "Edit Arena Model": "Muokkaa Arena-mallia", "Edit Channel": "Muokkaa kanavaa", @@ -407,15 +407,15 @@ "Enter CFG Scale (e.g. 7.0)": "Kirjoita CFG-mitta (esim. 7.0)", "Enter Chunk Overlap": "Syötä osien päällekkäisyys", "Enter Chunk Size": "Syötä osien koko", - "Enter comma-seperated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "", + "Enter comma-seperated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "Syötä pilkulla erottaen \"token:bias_value\" parit (esim. 5432:100, 413:-100)", "Enter description": "Kirjoita kuvaus", "Enter Docling Server URL": "Kirjoita Docling palvelimen verkko-osoite", "Enter Document Intelligence Endpoint": "Kirjoita asiakirja tiedustelun päätepiste", "Enter Document Intelligence Key": "Kirjoiuta asiakirja tiedustelun avain", "Enter domains separated by commas (e.g., example.com,site.org)": "Verkko-osoitteet erotetaan pilkulla (esim. esimerkki.com,sivu.org)", "Enter Exa API Key": "Kirjoita Exa API -avain", - "Enter Firecrawl API Base URL": "", - "Enter Firecrawl API Key": "", + "Enter Firecrawl API Base URL": "Kirjoita Firecrawl API -verkko-osoite", + "Enter Firecrawl API Key": "Kirjoita Firecrawl API-avain", "Enter Github Raw URL": "Kirjoita Github Raw -verkko-osoite", "Enter Google PSE API Key": "Kirjoita Google PSE API -avain", "Enter Google PSE Engine Id": "Kirjoita Google PSE -moottorin tunnus", @@ -433,8 +433,8 @@ "Enter Mojeek Search API Key": "Kirjoita Mojeek Search API -avain", "Enter Number of Steps (e.g. 50)": "Kirjoita askelten määrä (esim. 50)", "Enter Perplexity API Key": "Aseta Perplexity API-avain", - "Enter Playwright Timeout": "", - "Enter Playwright WebSocket URL": "", + "Enter Playwright Timeout": "Aseta Playwright aikakatkaisu", + "Enter Playwright WebSocket URL": "Aseta Playwright WebSocket-aikakatkaisu", "Enter proxy URL (e.g. https://user:password@host:port)": "Kirjoita välityspalvelimen verkko-osoite (esim. https://käyttäjä:salasana@host:portti)", "Enter reasoning effort": "", "Enter Sampler (e.g. Euler a)": "Kirjoita näytteistäjä (esim. Euler a)", @@ -516,7 +516,7 @@ "Failed to create API Key.": "API-avaimen luonti epäonnistui.", "Failed to fetch models": "Mallien hakeminen epäonnistui", "Failed to read clipboard contents": "Leikepöydän sisällön lukeminen epäonnistui", - "Failed to save connections": "", + "Failed to save connections": "Yhteyksien tallentaminen epäonnistui", "Failed to save models configuration": "Mallien määrityksen tallentaminen epäonnistui", "Failed to update settings": "Asetusten päivittäminen epäonnistui", "Failed to upload file.": "Tiedoston lataaminen epäonnistui.", @@ -539,8 +539,8 @@ "Filter is now globally enabled": "Suodatin on nyt otettu käyttöön globaalisti", "Filters": "Suodattimet", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Sormenjäljen väärentäminen havaittu: Alkukirjaimia ei voi käyttää avatarina. Käytetään oletusprofiilikuvaa.", - "Firecrawl API Base URL": "", - "Firecrawl API Key": "", + "Firecrawl API Base URL": "Firecrawl API -verkko-osoite", + "Firecrawl API Key": "Firecrawl API-avain", "Fluidly stream large external response chunks": "Virtaa suuria ulkoisia vastausosia joustavasti", "Focus chat input": "Fokusoi syöttökenttään", "Folder deleted successfully": "Kansio poistettu onnistuneesti", @@ -605,8 +605,8 @@ "Hybrid Search": "Hybridihaku", "I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Vahvistan, että olen lukenut ja ymmärrän toimintani seuraukset. Olen tietoinen mielivaltaisen koodin suorittamiseen liittyvistä riskeistä ja olen varmistanut lähteen luotettavuuden.", "ID": "Tunnus", - "iframe Sandbox Allow Forms": "", - "iframe Sandbox Allow Same Origin": "", + "iframe Sandbox Allow Forms": "Salli lomakkeet iframe hiekkalaatikossa", + "iframe Sandbox Allow Same Origin": "Salli iframe hiekkalaatikko samasta alkuperästä", "Ignite curiosity": "Sytytä uteliaisuus", "Image": "Kuva", "Image Compression": "Kuvan pakkaus", @@ -667,14 +667,14 @@ "Label": "Tunniste", "Landing Page Mode": "Etusivun tila", "Language": "Kieli", - "Language Locales": "", + "Language Locales": "Kielialueet", "Last Active": "Viimeksi aktiivinen", "Last Modified": "Viimeksi muokattu", "Last reply": "Viimeksi vastattu", "LDAP": "LDAP", "LDAP server updated": "LDAP-palvelin päivitetty", "Leaderboard": "Tulosluettelo", - "Learn more about OpenAPI tool servers.": "", + "Learn more about OpenAPI tool servers.": "Lue lisää OpenAPI työkalu palvelimista.", "Leave empty for unlimited": "Rajaton tyhjäksi jättämällä", "Leave empty to include all models from \"{{url}}/api/tags\" endpoint": "Jätä tyhjäksi sisällyttääksesi \"{{url}}/api/tags\" päätepisteen mallit", "Leave empty to include all models from \"{{url}}/models\" endpoint": "Jätä tyhjäksi sisällyttääksesi \"{{url}}/models\" päätepisteen mallit", @@ -812,7 +812,7 @@ "Open file": "Avaa tiedosto", "Open in full screen": "Avaa koko näytön tilaan", "Open new chat": "Avaa uusi keskustelu", - "Open WebUI can use tools provided by any OpenAPI server.": "", + "Open WebUI can use tools provided by any OpenAPI server.": "Open WebUI voi käyttää minkä tahansa OpenAPI-palvelimen tarjoamia työkaluja.", "Open WebUI uses faster-whisper internally.": "Open WebUI käyttää faster-whisperia sisäisesti.", "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI käyttää SpeechT5:tä ja CMU Arctic -kaiuttimen upotuksia.", "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Open WebUI -versio (v{{OPEN_WEBUI_VERSION}}) on alempi kuin vaadittu versio (v{{REQUIRED_VERSION}})", @@ -851,13 +851,13 @@ "Pipelines Valves": "Putkistojen venttiilit", "Plain text (.txt)": "Pelkkä teksti (.txt)", "Playground": "Leikkipaikka", - "Playwright Timeout (ms)": "", - "Playwright WebSocket URL": "", + "Playwright Timeout (ms)": "Playwright aikakatkaisu (ms)", + "Playwright WebSocket URL": "Playwright WebSocket verkko-osoite", "Please carefully review the following warnings:": "Tarkista huolellisesti seuraavat varoitukset:", "Please do not close the settings page while loading the model.": "Älä sulje asetussivua mallin latautuessa.", "Please enter a prompt": "Kirjoita kehote", - "Please enter a valid path": "", - "Please enter a valid URL": "", + "Please enter a valid path": "Kirjoita kelvollinen polku", + "Please enter a valid URL": "Kirjoita kelvollinen verkko-osoite", "Please fill in all fields.": "Täytä kaikki kentät.", "Please select a model first.": "Valitse ensin malli.", "Please select a model.": "Valitse malli.", @@ -885,7 +885,7 @@ "Pull \"{{searchValue}}\" from Ollama.com": "Lataa \"{{searchValue}}\" Ollama.comista", "Pull a model from Ollama.com": "Lataa malli Ollama.comista", "Query Generation Prompt": "Kyselytulosten luontikehote", - "RAG Template": "RAG-malline", + "RAG Template": "RAG-kehote", "Rating": "Arviointi", "Re-rank models by topic similarity": "Uudelleenjärjestä mallit aiheyhteyden mukaan", "Read": "Lue", @@ -898,11 +898,11 @@ "References from": "Viitteet lähteistä", "Refused when it shouldn't have": "Kieltäytyi, vaikka ei olisi pitänyt", "Regenerate": "Uudelleentuota", - "Reindex": "", - "Reindex Knowledge Base Vectors": "", + "Reindex": "Indeksoi uudelleen", + "Reindex Knowledge Base Vectors": "Indeksoi tietämyksen vektorit uudelleen", "Release Notes": "Julkaisutiedot", "Relevance": "Relevanssi", - "Relevance Threshold": "", + "Relevance Threshold": "Relevanssikynnys", "Remove": "Poista", "Remove Model": "Poista malli", "Rename": "Nimeä uudelleen", @@ -1085,7 +1085,7 @@ "Theme": "Teema", "Thinking...": "Ajattelee...", "This action cannot be undone. Do you wish to continue?": "Tätä toimintoa ei voi peruuttaa. Haluatko jatkaa?", - "This channel was created on {{createdAt}}. This is the very beginning of the {{channelName}} channel.": "", + "This channel was created on {{createdAt}}. This is the very beginning of the {{channelName}} channel.": "Tämä kanava on luotiin {{createdAt}}. Tämä on {{channelName}} kanavan alku.", "This chat won’t appear in history and your messages will not be saved.": "Tämä keskustelu ei näy historiassa, eikä viestejäsi tallenneta.", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Tämä varmistaa, että arvokkaat keskustelusi tallennetaan turvallisesti backend-tietokantaasi. Kiitos!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "Tämä on kokeellinen ominaisuus, se ei välttämättä toimi odotetulla tavalla ja se voi muuttua milloin tahansa.", @@ -1144,7 +1144,7 @@ "Tools have a function calling system that allows arbitrary code execution.": "Työkalut sallivat mielivaltaisen koodin suorittamisen toimintokutsuilla.", "Tools Public Sharing": "Työkalujen julkinen jakaminen", "Top K": "Top K", - "Top K Reranker": "", + "Top K Reranker": "Top K uudelleen sijoittaja", "Top P": "Top P", "Transformers": "Muunnokset", "Trouble accessing Ollama?": "Ongelmia Ollama-yhteydessä?", @@ -1170,7 +1170,7 @@ "Updated": "Päivitetty", "Updated at": "Päivitetty", "Updated At": "Päivitetty", - "Upgrade to a licensed plan for enhanced capabilities, including custom theming and branding, and dedicated support.": "", + "Upgrade to a licensed plan for enhanced capabilities, including custom theming and branding, and dedicated support.": "Päivitä lisenssi saadaksesi parempia ominaisuuksia, mukaan lukien mukautetun teeman ja brändäyksen sekä yksilöllistä tukea.", "Upload": "Lataa", "Upload a GGUF model": "Lataa GGUF-malli", "Upload directory": "Latauksen hakemisto", @@ -1184,8 +1184,8 @@ "Use Gravatar": "Käytä Gravataria", "Use groups to group your users and assign permissions.": "Käytä ryhmiä jäsentääksesi käyttäjiä ja antaaksesi käyttöoikeuksia.", "Use Initials": "Käytä alkukirjaimia", - "Use no proxy to fetch page contents.": "", - "Use proxy designated by http_proxy and https_proxy environment variables to fetch page contents.": "", + "Use no proxy to fetch page contents.": "Älä käytä välityspalvelinta sivun tietoja haettaessa.", + "Use proxy designated by http_proxy and https_proxy environment variables to fetch page contents.": "Käytä http_proxy- ja https_proxy-ympäristömuuttujien määrittämää välityspalvelinta sivun sisällön hakemiseen.", "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "käyttäjä", @@ -1203,7 +1203,7 @@ "variable": "muuttuja", "variable to have them replaced with clipboard content.": "muuttuja korvataan leikepöydän sisällöllä.", "Verify Connection": "Tarkista yhteys", - "Verify SSL Certificate": "", + "Verify SSL Certificate": "Tarkista SSL-varmenne", "Version": "Versio", "Version {{selectedVersion}} of {{totalVersions}}": "Versio {{selectedVersion}} / {{totalVersions}}", "View Replies": "Näytä vastaukset", @@ -1218,7 +1218,7 @@ "Warning: Jupyter execution enables arbitrary code execution, posing severe security risks—proceed with extreme caution.": "Varoitus: Jupyter käyttö voi mahdollistaa mielivaltaiseen koodin suorittamiseen, mikä voi aiheuttaa tietoturvariskejä - käytä äärimmäisen varoen.", "Web": "Web", "Web API": "Web-API", - "Web Loader Engine": "", + "Web Loader Engine": "Verkko lataaja moottori", "Web Search": "Verkkohaku", "Web Search Engine": "Hakukoneet", "Web Search in Chat": "Verkkohaku keskustelussa", @@ -1248,7 +1248,7 @@ "Write your model template content here": "Kirjoita mallisi mallinnesisältö tähän", "Yesterday": "Eilen", "You": "Sinä", - "You are currently using a trial license. Please contact support to upgrade your license.": "", + "You are currently using a trial license. Please contact support to upgrade your license.": "Käytät tällä hetkellä kokeiluversiota. Ota yhteyttä tukeen lisenssin päivittämiseksi.", "You can only chat with a maximum of {{maxCount}} file(s) at a time.": "Voit keskustella enintään {{maxCount}} tiedoston kanssa kerralla.", "You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "Voit personoida vuorovaikutustasi LLM-ohjelmien kanssa lisäämällä muistoja 'Hallitse'-painikkeen kautta, jolloin ne ovat hyödyllisempiä ja räätälöityjä sinua varten.", "You cannot upload an empty file.": "Et voi ladata tyhjää tiedostoa.", From 84f5a529236e662f9ddb6135d24853b06813cf21 Mon Sep 17 00:00:00 2001 From: hurxxxx Date: Wed, 16 Apr 2025 02:38:20 +0900 Subject: [PATCH 020/161] chore: clean up unnecessary code --- src/lib/utils/onedrive-file-picker.ts | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/src/lib/utils/onedrive-file-picker.ts b/src/lib/utils/onedrive-file-picker.ts index 2771119ae..47b4e9627 100644 --- a/src/lib/utils/onedrive-file-picker.ts +++ b/src/lib/utils/onedrive-file-picker.ts @@ -31,22 +31,15 @@ class OneDriveConfig { } private async getCredentials(): Promise { - let response; + const headers: HeadersInit = { 'Content-Type': 'application/json' }; - if(window.location.hostname === 'localhost') { - response = await fetch('http://localhost:8080/api/config', { - headers, - credentials: 'include' - }); - } else { - response = await fetch('/api/config', { - headers, - credentials: 'include' - }); - } + const response = await fetch('/api/config', { + headers, + credentials: 'include' + }); if (!response.ok) { throw new Error('Failed to fetch OneDrive credentials'); From bb1dea72d4aff8a5fcb719d39d6deec3c91c5f19 Mon Sep 17 00:00:00 2001 From: Rimvydas Date: Wed, 16 Apr 2025 09:59:20 +0300 Subject: [PATCH 021/161] Update translation.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed typo from "Tęstti" to "Tęsti" (continue). --- src/lib/i18n/locales/lt-LT/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/i18n/locales/lt-LT/translation.json b/src/lib/i18n/locales/lt-LT/translation.json index 32abbcc14..63d31e5c4 100644 --- a/src/lib/i18n/locales/lt-LT/translation.json +++ b/src/lib/i18n/locales/lt-LT/translation.json @@ -234,7 +234,7 @@ "Content Extraction Engine": "", "Context Length": "Konteksto ilgis", "Continue Response": "Tęsti atsakymą", - "Continue with {{provider}}": "Tęstti su {{tiekėju}}", + "Continue with {{provider}}": "Tęsti su {{tiekėju}}", "Continue with Email": "", "Continue with LDAP": "", "Control how message text is split for TTS requests. 'Punctuation' splits into sentences, 'paragraphs' splits into paragraphs, and 'none' keeps the message as a single string.": "", From 59918b0f542100eb4e223c51a0a6de2f7f406b84 Mon Sep 17 00:00:00 2001 From: Aleix Dorca Date: Wed, 16 Apr 2025 11:20:03 +0200 Subject: [PATCH 022/161] Update catalan translation.json --- src/lib/i18n/locales/ca-ES/translation.json | 64 ++++++++++----------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/src/lib/i18n/locales/ca-ES/translation.json b/src/lib/i18n/locales/ca-ES/translation.json index f726721d2..f2571dfa5 100644 --- a/src/lib/i18n/locales/ca-ES/translation.json +++ b/src/lib/i18n/locales/ca-ES/translation.json @@ -57,17 +57,17 @@ "All": "Tots", "All Documents": "Tots els documents", "All models deleted successfully": "Tots els models s'han eliminat correctament", - "Allow Call": "", + "Allow Call": "Permetre la trucada", "Allow Chat Controls": "Permetre els controls de xat", "Allow Chat Delete": "Permetre eliminar el xat", "Allow Chat Deletion": "Permetre la supressió del xat", "Allow Chat Edit": "Permetre editar el xat", "Allow File Upload": "Permetre la pujada d'arxius", - "Allow Multiple Models in Chat": "", + "Allow Multiple Models in Chat": "Permetre múltiple models al xat", "Allow non-local voices": "Permetre veus no locals", - "Allow Speech to Text": "", + "Allow Speech to Text": "Permetre Parla a Text", "Allow Temporary Chat": "Permetre el xat temporal", - "Allow Text to Speech": "", + "Allow Text to Speech": "Permetre Text a Parla", "Allow User Location": "Permetre la ubicació de l'usuari", "Allow Voice Interruption in Call": "Permetre la interrupció de la veu en una trucada", "Allowed Endpoints": "Punts d'accés permesos", @@ -83,7 +83,7 @@ "and": "i", "and {{COUNT}} more": "i {{COUNT}} més", "and create a new shared link.": "i crear un nou enllaç compartit.", - "Android": "", + "Android": "Android", "API Base URL": "URL Base de l'API", "API Key": "clau API", "API Key created.": "clau API creada.", @@ -245,7 +245,7 @@ "Copied shared chat URL to clipboard!": "S'ha copiat l'URL compartida al porta-retalls!", "Copied to clipboard": "Copiat al porta-retalls", "Copy": "Copiar", - "Copy Formatted Text": "", + "Copy Formatted Text": "Copiar el text formatat", "Copy last code block": "Copiar l'últim bloc de codi", "Copy last response": "Copiar l'última resposta", "Copy Link": "Copiar l'enllaç", @@ -308,7 +308,7 @@ "Deleted User": "Usuari eliminat", "Describe your knowledge base and objectives": "Descriu la teva base de coneixement i objectius", "Description": "Descripció", - "Detect Artifacts Automatically": "", + "Detect Artifacts Automatically": "Detectar automàticament els artefactes", "Didn't fully follow instructions": "No s'han seguit les instruccions completament", "Direct": "Directe", "Direct Connections": "Connexions directes", @@ -364,7 +364,7 @@ "e.g. my_filter": "p. ex. els_meus_filtres", "e.g. my_tools": "p. ex. les_meves_eines", "e.g. Tools for performing various operations": "p. ex. Eines per dur a terme operacions", - "e.g., en-US,ja-JP (leave blank for auto-detect)": "", + "e.g., en-US,ja-JP (leave blank for auto-detect)": "p. ex. en-US, ja-JP, ca-ES (deixa-ho en blanc per detecció automàtica)", "Edit": "Editar", "Edit Arena Model": "Editar model de l'Arena", "Edit Channel": "Editar el canal", @@ -414,8 +414,8 @@ "Enter Document Intelligence Key": "Introdueix la clau de Document Intelligence", "Enter domains separated by commas (e.g., example.com,site.org)": "Introdueix els dominis separats per comes (p. ex. example.com,site.org)", "Enter Exa API Key": "Introdueix la clau API de d'EXA", - "Enter Firecrawl API Base URL": "", - "Enter Firecrawl API Key": "", + "Enter Firecrawl API Base URL": "Introdueix la URL base de Firecrawl API", + "Enter Firecrawl API Key": "Introdueix la clau API de Firecrawl", "Enter Github Raw URL": "Introdueix l'URL en brut de Github", "Enter Google PSE API Key": "Introdueix la clau API de Google PSE", "Enter Google PSE Engine Id": "Introdueix l'identificador del motor PSE de Google", @@ -433,8 +433,8 @@ "Enter Mojeek Search API Key": "Introdueix la clau API de Mojeek Search", "Enter Number of Steps (e.g. 50)": "Introdueix el nombre de passos (p. ex. 50)", "Enter Perplexity API Key": "Introdueix la clau API de Perplexity", - "Enter Playwright Timeout": "", - "Enter Playwright WebSocket URL": "", + "Enter Playwright Timeout": "Introdueix el timeout de Playwright", + "Enter Playwright WebSocket URL": "Introdueix la URL de Playwright WebSocket", "Enter proxy URL (e.g. https://user:password@host:port)": "Entra l'URL (p. ex. https://user:password@host:port)", "Enter reasoning effort": "Introdueix l'esforç de raonament", "Enter Sampler (e.g. Euler a)": "Introdueix el mostrejador (p.ex. Euler a)", @@ -452,13 +452,13 @@ "Enter server host": "Introdueix el servidor", "Enter server label": "Introdueix l'etiqueta del servidor", "Enter server port": "Introdueix el port del servidor", - "Enter Sougou Search API sID": "", - "Enter Sougou Search API SK": "", + "Enter Sougou Search API sID": "Introdueix el sID de l'API de Sougou Search", + "Enter Sougou Search API SK": "Introdueix l'SK de l'API de Sougou Search", "Enter stop sequence": "Introdueix la seqüència de parada", "Enter system prompt": "Introdueix la indicació de sistema", "Enter system prompt here": "Entra la indicació de sistema aquí", "Enter Tavily API Key": "Introdueix la clau API de Tavily", - "Enter Tavily Extract Depth": "", + "Enter Tavily Extract Depth": "Introdueix la profunditat d'extracció de Tavily", "Enter the public URL of your WebUI. This URL will be used to generate links in the notifications.": "Entra la URL pública de WebUI. Aquesta URL s'utilitzarà per generar els enllaços en les notificacions.", "Enter Tika Server URL": "Introdueix l'URL del servidor Tika", "Enter timeout in seconds": "Entra el temps màxim en segons", @@ -539,8 +539,8 @@ "Filter is now globally enabled": "El filtre ha estat activat globalment", "Filters": "Filtres", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "S'ha detectat la suplantació d'identitat de l'empremta digital: no es poden utilitzar les inicials com a avatar. S'estableix la imatge de perfil predeterminada.", - "Firecrawl API Base URL": "", - "Firecrawl API Key": "", + "Firecrawl API Base URL": "URL de l'API de base de Firecrawl", + "Firecrawl API Key": "Clau API de Firecrawl", "Fluidly stream large external response chunks": "Transmetre amb fluïdesa grans trossos de resposta externa", "Focus chat input": "Estableix el focus a l'entrada del xat", "Folder deleted successfully": "Carpeta eliminada correctament", @@ -605,8 +605,8 @@ "Hybrid Search": "Cerca híbrida", "I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Afirmo que he llegit i entenc les implicacions de la meva acció. Soc conscient dels riscos associats a l'execució de codi arbitrari i he verificat la fiabilitat de la font.", "ID": "ID", - "iframe Sandbox Allow Forms": "", - "iframe Sandbox Allow Same Origin": "", + "iframe Sandbox Allow Forms": "Permetre formularis sandbox iframe", + "iframe Sandbox Allow Same Origin": "Permetre same-origin sandbox iframe", "Ignite curiosity": "Despertar la curiositat", "Image": "Imatge", "Image Compression": "Compressió d'imatges", @@ -667,7 +667,7 @@ "Label": "Etiqueta", "Landing Page Mode": "Mode de la pàgina d'entrada", "Language": "Idioma", - "Language Locales": "", + "Language Locales": "Localització d'idiomes", "Last Active": "Activitat recent", "Last Modified": "Modificació", "Last reply": "Darrera resposta", @@ -851,8 +851,8 @@ "Pipelines Valves": "Vàlvules de les Pipelines", "Plain text (.txt)": "Text pla (.txt)", "Playground": "Zona de jocs", - "Playwright Timeout (ms)": "", - "Playwright WebSocket URL": "", + "Playwright Timeout (ms)": "Temps d'espera (ms) de Playwright", + "Playwright WebSocket URL": "URL del WebSocket de Playwright", "Please carefully review the following warnings:": "Si us plau, revisa els següents avisos amb cura:", "Please do not close the settings page while loading the model.": "No tanquis la pàgina de configuració mentre carregues el model.", "Please enter a prompt": "Si us plau, entra una indicació", @@ -898,11 +898,11 @@ "References from": "Referències de", "Refused when it shouldn't have": "Refusat quan no hauria d'haver estat", "Regenerate": "Regenerar", - "Reindex": "", - "Reindex Knowledge Base Vectors": "", + "Reindex": "Reindexar", + "Reindex Knowledge Base Vectors": "Reindexar els vector base del Coneixement", "Release Notes": "Notes de la versió", "Relevance": "Rellevància", - "Relevance Threshold": "", + "Relevance Threshold": "Límit de rellevància", "Remove": "Eliminar", "Remove Model": "Eliminar el model", "Rename": "Canviar el nom", @@ -1032,8 +1032,8 @@ "Sign up to {{WEBUI_NAME}}": "Registrar-se a {{WEBUI_NAME}}", "Signing in to {{WEBUI_NAME}}": "Iniciant sessió a {{WEBUI_NAME}}", "sk-1234": "sk-1234", - "Sougou Search API sID": "", - "Sougou Search API SK": "", + "Sougou Search API sID": "sID de l'API de Sougou Search", + "Sougou Search API SK": "SK de l'API de Sougou Search", "Source": "Font", "Speech Playback Speed": "Velocitat de la parla", "Speech recognition error: {{error}}": "Error de reconeixement de veu: {{error}}", @@ -1061,7 +1061,7 @@ "Tap to interrupt": "Prem per interrompre", "Tasks": "Tasques", "Tavily API Key": "Clau API de Tavily", - "Tavily Extract Depth": "", + "Tavily Extract Depth": "Profunditat d'extracció de Tavily", "Tell us more:": "Dona'ns més informació:", "Temperature": "Temperatura", "Template": "Plantilla", @@ -1184,8 +1184,8 @@ "Use Gravatar": "Utilitzar Gravatar", "Use groups to group your users and assign permissions.": "Utilitza grups per agrupar els usuaris i assignar permisos.", "Use Initials": "Utilitzar inicials", - "Use no proxy to fetch page contents.": "", - "Use proxy designated by http_proxy and https_proxy environment variables to fetch page contents.": "", + "Use no proxy to fetch page contents.": "No utilitzis un proxy per obtenir contingut de la pàgina.", + "Use proxy designated by http_proxy and https_proxy environment variables to fetch page contents.": "Utilitza el proxy designat per les variables d'entorn http_proxy i https_proxy per obtenir el contingut de la pàgina.", "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "usuari", @@ -1203,7 +1203,7 @@ "variable": "variable", "variable to have them replaced with clipboard content.": "variable per tenir-les reemplaçades amb el contingut del porta-retalls.", "Verify Connection": "Verificar la connexió", - "Verify SSL Certificate": "", + "Verify SSL Certificate": "Verificar el certificat SSL", "Version": "Versió", "Version {{selectedVersion}} of {{totalVersions}}": "Versió {{selectedVersion}} de {{totalVersions}}", "View Replies": "Veure les respostes", @@ -1218,7 +1218,7 @@ "Warning: Jupyter execution enables arbitrary code execution, posing severe security risks—proceed with extreme caution.": "Avís: l'execució de Jupyter permet l'execució de codi arbitrari, la qual cosa comporta greus riscos de seguretat; procediu amb extrema precaució.", "Web": "Web", "Web API": "Web API", - "Web Loader Engine": "", + "Web Loader Engine": "Motor de càrrega Web", "Web Search": "Cerca la web", "Web Search Engine": "Motor de cerca de la web", "Web Search in Chat": "Cerca a internet al xat", From 6076476a740925ed5e9bb9fc6ac47534fcd50399 Mon Sep 17 00:00:00 2001 From: JaworIwanowRoosi <167782571+JaworIwanowRoosi@users.noreply.github.com> Date: Wed, 16 Apr 2025 14:47:15 +0200 Subject: [PATCH 023/161] fixed: typos in German translation --- src/lib/i18n/locales/de-DE/translation.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/i18n/locales/de-DE/translation.json b/src/lib/i18n/locales/de-DE/translation.json index b4a0e0776..33d074bda 100644 --- a/src/lib/i18n/locales/de-DE/translation.json +++ b/src/lib/i18n/locales/de-DE/translation.json @@ -346,7 +346,7 @@ "Don't have an account?": "Haben Sie noch kein Benutzerkonto?", "don't install random functions from sources you don't trust.": "installieren Sie keine Funktionen aus Quellen, denen Sie nicht vertrauen.", "don't install random tools from sources you don't trust.": "installieren Sie keine Werkzeuge aus Quellen, denen Sie nicht vertrauen.", - "Don't like the style": "schlechter Schreibstil", + "Don't like the style": "Schlechter Schreibstil", "Done": "Erledigt", "Download": "Exportieren", "Download as SVG": "Exportieren als SVG", @@ -781,7 +781,7 @@ "No valves to update": "Keine Valves zum Aktualisieren", "None": "Nichts", "Not factually correct": "Nicht sachlich korrekt", - "Not helpful": "Nich hilfreich", + "Not helpful": "Nicht hilfreich", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Hinweis: Wenn Sie eine Mindestpunktzahl festlegen, werden in der Suche nur Dokumente mit einer Punktzahl größer oder gleich der Mindestpunktzahl zurückgegeben.", "Notes": "Notizen", "Notification Sound": "Benachrichtigungston", From 6188c0c5b749525f3afac87dd71985c43e383c9a Mon Sep 17 00:00:00 2001 From: Juan Calderon-Perez Date: Thu, 17 Apr 2025 01:13:49 -0400 Subject: [PATCH 024/161] Add suport for Qdrant GRPC --- backend/open_webui/config.py | 2 ++ .../open_webui/retrieval/vector/dbs/qdrant.py | 36 +++++++++++++++---- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/backend/open_webui/config.py b/backend/open_webui/config.py index 55d3e8260..1bc880bbf 100644 --- a/backend/open_webui/config.py +++ b/backend/open_webui/config.py @@ -1694,6 +1694,8 @@ MILVUS_TOKEN = os.environ.get("MILVUS_TOKEN", None) QDRANT_URI = os.environ.get("QDRANT_URI", None) QDRANT_API_KEY = os.environ.get("QDRANT_API_KEY", None) QDRANT_ON_DISK = os.environ.get("QDRANT_ON_DISK", "false").lower() == "true" +QDRANT_PREFER_GRPC = os.environ.get("QDRANT_PREFER_GRPC", "False").lower() == "true" +QDRANT_GRPC_PORT = int(os.environ.get("QDRANT_GRPC_PORT", "6334")) # OpenSearch OPENSEARCH_URI = os.environ.get("OPENSEARCH_URI", "https://localhost:9200") diff --git a/backend/open_webui/retrieval/vector/dbs/qdrant.py b/backend/open_webui/retrieval/vector/dbs/qdrant.py index 13d0b5328..a0d602610 100644 --- a/backend/open_webui/retrieval/vector/dbs/qdrant.py +++ b/backend/open_webui/retrieval/vector/dbs/qdrant.py @@ -1,12 +1,19 @@ from typing import Optional import logging +from urllib.parse import urlparse from qdrant_client import QdrantClient as Qclient from qdrant_client.http.models import PointStruct from qdrant_client.models import models from open_webui.retrieval.vector.main import VectorItem, SearchResult, GetResult -from open_webui.config import QDRANT_URI, QDRANT_API_KEY, QDRANT_ON_DISK +from open_webui.config import ( + QDRANT_URI, + QDRANT_API_KEY, + QDRANT_ON_DISK, + QDRANT_GRPC_PORT, + QDRANT_PREFER_GRPC, +) from open_webui.env import SRC_LOG_LEVELS NO_LIMIT = 999999999 @@ -21,11 +28,28 @@ class QdrantClient: self.QDRANT_URI = QDRANT_URI self.QDRANT_API_KEY = QDRANT_API_KEY self.QDRANT_ON_DISK = QDRANT_ON_DISK - self.client = ( - Qclient(url=self.QDRANT_URI, api_key=self.QDRANT_API_KEY) - if self.QDRANT_URI - else None - ) + self.PREFER_GRPC = QDRANT_PREFER_GRPC + self.GRPC_PORT = QDRANT_GRPC_PORT + + if not self.QDRANT_URI: + self.client = None + return + + # Unified handling for either scheme + parsed = urlparse(self.QDRANT_URI) + host = parsed.hostname or self.QDRANT_URI + http_port = parsed.port or 6333 # default REST port + + if self.PREFER_GRPC: + self.client = Qclient( + host=host, + port=http_port, + grpc_port=self.GRPC_PORT, + prefer_grpc=self.PREFER_GRPC, + api_key=self.QDRANT_API_KEY, + ) + else: + self.client = Qclient(url=self.QDRANT_URI, api_key=self.QDRANT_API_KEY) def _result_to_get_result(self, points) -> GetResult: ids = [] From a6ccc48d9146a6fb3e54ef816c427d71f9d3ee6e Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Thu, 17 Apr 2025 00:35:39 -0700 Subject: [PATCH 025/161] refac: textarea component --- src/lib/components/common/Textarea.svelte | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lib/components/common/Textarea.svelte b/src/lib/components/common/Textarea.svelte index 4a3d47675..d7e01c7eb 100644 --- a/src/lib/components/common/Textarea.svelte +++ b/src/lib/components/common/Textarea.svelte @@ -4,6 +4,7 @@ export let value = ''; export let placeholder = ''; export let rows = 1; + export let minSize = null; export let required = false; export let className = 'w-full rounded-lg px-3 py-2 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden h-full'; @@ -29,7 +30,9 @@ const resize = () => { if (textareaElement) { textareaElement.style.height = ''; - textareaElement.style.height = `${textareaElement.scrollHeight}px`; + textareaElement.style.height = minSize + ? `${Math.max(textareaElement.scrollHeight, minSize)}px` + : `${textareaElement.scrollHeight}px`; } }; From c4edcdb12ad94f039b368f5fb2ac68c0ba90569c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20P=C4=99kala?= Date: Thu, 17 Apr 2025 10:56:23 +0200 Subject: [PATCH 026/161] fix: update Polish translations for clarity and consistency --- src/lib/i18n/locales/pl-PL/translation.json | 64 ++++++++++----------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/src/lib/i18n/locales/pl-PL/translation.json b/src/lib/i18n/locales/pl-PL/translation.json index ab15e12c6..320a4cf10 100644 --- a/src/lib/i18n/locales/pl-PL/translation.json +++ b/src/lib/i18n/locales/pl-PL/translation.json @@ -43,7 +43,7 @@ "Add Reaction": "Dodaj reakcję", "Add Tag": "Dodaj tag", "Add Tags": "Dodaj tagi", - "Add text content": "Dodaj tekstową zawartość", + "Add text content": "Dodaj zawartość tekstową", "Add User": "Dodaj użytkownika", "Add User Group": "Dodaj grupę użytkowników", "Adjusting these settings will apply changes universally to all users.": "Dostosowanie tych ustawień spowoduje wprowadzenie zmian dla wszystkich użytkowników.", @@ -54,7 +54,7 @@ "Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Administratorzy mają dostęp do wszystkich narzędzi przez cały czas; użytkownicy muszą mieć przydzielone narzędzia dla każdego modelu w przestrzeni roboczej.", "Advanced Parameters": "Zaawansowane ustawienia", "Advanced Params": "Zaawansowane ustawienia", - "All": "", + "All": "Wszystkie", "All Documents": "Wszystkie dokumenty", "All models deleted successfully": "Wszystkie modele zostały usunięte pomyślnie.", "Allow Call": "", @@ -74,8 +74,8 @@ "Already have an account?": "Czy masz już konto?", "Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out.": "", "Always": "Zawsze", - "Always Collapse Code Blocks": "", - "Always Expand Details": "", + "Always Collapse Code Blocks": "Zawsze zwijaj bloki kodu", + "Always Expand Details": "Zawsze rozwiń szczegóły", "Amazing": "Niesamowite", "an assistant": "asystent", "Analyzed": "Przeanalizowane", @@ -147,8 +147,8 @@ "By {{name}}": "Przez {{name}}", "Bypass Embedding and Retrieval": "", "Calendar": "Kalendarz", - "Call": "Wywołanie", - "Call feature is not supported when using Web STT engine": "Funkcja wywołania nie jest obsługiwana podczas korzystania z silnika Web STT", + "Call": "Rozmowa", + "Call feature is not supported when using Web STT engine": "Funkcja rozmowy nie jest obsługiwana podczas korzystania z silnika Web STT", "Camera": "Kamera", "Cancel": "Anuluj", "Capabilities": "Możliwości", @@ -193,14 +193,14 @@ "click here.": "kliknij tutaj.", "Click on the user role button to change a user's role.": "Kliknij przycisk roli użytkownika, aby zmienić jego uprawnienia.", "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Nie można było skopiować do schowka. Sprawdź ustawienia przeglądarki, aby przyznać wymagany dostęp.", - "Clone": "Sklonuj", + "Clone": "Duplikuj", "Clone Chat": "Sklonuj czat", "Clone of {{TITLE}}": "Klon {{TITLE}}", "Close": "Zamknij", "Code execution": "Wykonanie kodu", "Code Execution": "Wykonanie kodu", "Code Execution Engine": "Silnik wykonawczy kodu", - "Code Execution Timeout": "Limit czasu wykonania kodu", + "Code Execution Timeout": "Limit czasu wykonywania kodu", "Code formatted successfully": "Kod został sformatowany pomyślnie.", "Code Interpreter": "Interpreter kodu", "Code Interpreter Engine": "Silnik interpretatora kodu", @@ -245,7 +245,7 @@ "Copied shared chat URL to clipboard!": "Skopiowano udostępniony URL czatu do schowka!", "Copied to clipboard": "Skopiowane do schowka", "Copy": "Skopiuj", - "Copy Formatted Text": "", + "Copy Formatted Text": "Skopiuj sformatowany tekst", "Copy last code block": "Skopiuj ostatni fragment kodu", "Copy last response": "Skopiuj ostatnią wypowiedź", "Copy Link": "Skopiuj link", @@ -283,7 +283,7 @@ "Default Models": "Domyślne modele", "Default permissions": "Domyślne uprawnienia", "Default permissions updated successfully": "Domyślne uprawnienia zaktualizowane pomyślnie", - "Default Prompt Suggestions": "Domyślne propozycje wpisów", + "Default Prompt Suggestions": "Domyślne propozycje promptów", "Default to 389 or 636 if TLS is enabled": "Domyślnie użyj 389 lub 636, jeśli TLS jest włączony", "Default to ALL": "Domyślne dla wszystkich", "Default to segmented retrieval for focused and relevant content extraction, this is recommended for most cases.": "", @@ -316,12 +316,12 @@ "Direct Connections settings updated": "Ustawienia połączeń bezpośrednich zaktualizowane", "Direct Tool Servers": "", "Disabled": "Wyłączony", - "Discover a function": "Odkryj funkcję", - "Discover a model": "Odkryj model", - "Discover a prompt": "Odkryj prompty", - "Discover a tool": "Odkryj narzędzie", + "Discover a function": "Odkrywaj funkcję", + "Discover a model": "Odkrywaj model", + "Discover a prompt": "Odkrywaj prompty", + "Discover a tool": "Odkrywaj narzędzia", "Discover how to use Open WebUI and seek support from the community.": "Odkryj, jak korzystać z Open WebUI i szukaj wsparcia w społeczności.", - "Discover wonders": "Odkryj cuda", + "Discover wonders": "Odkrywaj cuda", "Discover, download, and explore custom functions": "Odkryj, pobierz i eksploruj niestandardowe funkcje", "Discover, download, and explore custom prompts": "Odkryj, pobierz i eksploruj niestandardowe prompty", "Discover, download, and explore custom tools": "Odkryj, pobierz i eksploruj niestandardowe narzędzia", @@ -425,7 +425,7 @@ "Enter Jupyter Token": "Wprowadź token Jupyter", "Enter Jupyter URL": "Podaj adres URL Jupytera", "Enter Kagi Search API Key": "Wprowadź klucz wyszukiwania Kagi", - "Enter Key Behavior": "", + "Enter Key Behavior": "Zachowanie klawisza Enter", "Enter language codes": "Wprowadź kody języków", "Enter Mistral API Key": "", "Enter Model ID": "Wprowadź ID modelu", @@ -455,7 +455,7 @@ "Enter Sougou Search API sID": "", "Enter Sougou Search API SK": "", "Enter stop sequence": "Wprowadź sekwencję stop", - "Enter system prompt": "Wprowadź polecenie systemowe", + "Enter system prompt": "Wprowadź prompt systemowy", "Enter system prompt here": "", "Enter Tavily API Key": "Wprowadź klucz API Tavily", "Enter Tavily Extract Depth": "", @@ -624,7 +624,7 @@ "Import Models": "Importowanie modeli", "Import Presets": "Importuj ustawienia", "Import Prompts": "Importuj prompty", - "Import Tools": "Import narzędzi", + "Import Tools": "Importuj narzędzia", "Include": "Włączyć", "Include `--api-auth` flag when running stable-diffusion-webui": "Użyj flagi `--api-auth` podczas uruchamiania stable-diffusion-webui", "Include `--api` flag when running stable-diffusion-webui": "Użyj flagi `--api` podczas uruchamiania stable-diffusion-webui.", @@ -792,14 +792,14 @@ "num_thread (Ollama)": "num_thread (Ollama)", "OAuth ID": "Identyfikator OAuth", "October": "Październik", - "Off": "Wyłączony", + "Off": "Wyłączone", "Okay, Let's Go!": "Okej, do dzieła!", "OLED Dark": "Ciemny OLED", "Ollama": "Ollama", "Ollama API": "Interfejs API Ollama", "Ollama API settings updated": "Ustawienia API Ollama zostały zaktualizowane", "Ollama Version": "Wersja Ollama", - "On": "Włączony", + "On": "Włączone", "OneDrive": "", "Only alphanumeric characters and hyphens are allowed": "Dozwolone są tylko znaki alfanumeryczne i myślniki", "Only alphanumeric characters and hyphens are allowed in the command string.": "W komendzie dozwolone są wyłącznie znaki alfanumeryczne i myślniki.", @@ -855,7 +855,7 @@ "Playwright WebSocket URL": "", "Please carefully review the following warnings:": "Proszę uważnie przejrzeć poniższe ostrzeżenia:", "Please do not close the settings page while loading the model.": "Proszę nie zamykać strony ustawień podczas ładowania modelu.", - "Please enter a prompt": "Proszę podać promp", + "Please enter a prompt": "Proszę podać prompt", "Please enter a valid path": "", "Please enter a valid URL": "", "Please fill in all fields.": "Proszę wypełnić wszystkie pola.", @@ -874,7 +874,7 @@ "Prompt": "Wprowadź prompt: ", "Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Prompt (np. podaj ciekawostkę o Imperium Rzymskim)", "Prompt Autocompletion": "", - "Prompt Content": "Treść podpowiedzi", + "Prompt Content": "Treść promptu", "Prompt created successfully": "Prompt został utworzony pomyślnie", "Prompt suggestions": "Sugestie promptów", "Prompt updated successfully": "Prompt został zaktualizowany pomyślnie.", @@ -894,7 +894,7 @@ "Record voice": "Nagraj swój głos", "Redirecting you to Open WebUI Community": "Przekierowujemy Cię do społeczności Open WebUI", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", - "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Odnosić się do siebie jako \"Użytkownik\" (np. \"Użytkownik uczy się hiszpańskiego\")", + "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Odnoś się do mnie jako \"Użytkownik\" (np. \"Użytkownik uczy się hiszpańskiego\")", "References from": "Odniesienia do", "Refused when it shouldn't have": "Odmówił, gdy nie powinien", "Regenerate": "Wygeneruj ponownie", @@ -948,18 +948,18 @@ "Search Filters": "Filtry wyszukiwania", "search for tags": "wyszukiwanie tagów", "Search Functions": "Funkcje wyszukiwania", - "Search Knowledge": "Wyszukaj wiedzę", + "Search Knowledge": "Przeszukaj wiedzę", "Search Models": "Wyszukiwanie modeli", "Search options": "Opcje wyszukiwania", - "Search Prompts": "Prompty wyszukiwania", + "Search Prompts": "Szukaj promptów", "Search Result Count": "Liczba wyników wyszukiwania", "Search the internet": "Przeszukaj internet", - "Search Tools": "Narzędzia wyszukiwania", + "Search Tools": "Szukaj narzędzi", "SearchApi API Key": "Klucz API SearchApi", "SearchApi Engine": "Search API Engine", "Searched {{count}} sites": "Przeszukano {{count}} stron", "Searching \"{{searchQuery}}\"": "Wyszukiwanie \"{{searchQuery}}\"", - "Searching Knowledge for \"{{searchQuery}}\"": "Wyszukiwanie wiedzy dla \"{{searchQuery}}\"", + "Searching Knowledge for \"{{searchQuery}}\"": "Przeszukiwanie wiedzy dla \"{{searchQuery}}\"", "Searxng Query URL": "Adres URL zapytania Searxng", "See readme.md for instructions": "Sprawdź readme.md dla instrukcji", "See what's new": "Sprawdź nowości", @@ -998,7 +998,7 @@ "Set Image Size": "Ustaw rozmiar obrazu", "Set reranking model (e.g. {{model}})": "Skonfiguruj model ponownego rankingu (np. {{model}})", "Set Sampler": "Próbnik samplera", - "Set Scheduler": "Ustawiacz harmonogramu", + "Set Scheduler": "Ustaw harmonogram", "Set Steps": "Ustaw kroki", "Set Task Model": "Konfiguracja modelu zadań", "Set the number of layers, which will be off-loaded to GPU. Increasing this value can significantly improve performance for models that are optimized for GPU acceleration but may also consume more power and GPU resources.": "Ustaw liczbę warstw, które zostaną przeniesione na GPU. Zwiększenie tej wartości może znacząco poprawić wydajność dla modeli optymalizowanych pod kątem akceleracji GPU, ale także może zużywać więcej energii i zasobów GPU.", @@ -1038,7 +1038,7 @@ "Speech Playback Speed": "Prędkość odtwarzania mowy", "Speech recognition error: {{error}}": "Błąd rozpoznawania mowy: {{error}}", "Speech-to-Text Engine": "Silnik konwersji mowy na tekst", - "Stop": "Zatrzymaj się", + "Stop": "Zatrzymaj", "Stop Sequence": "Zatrzymaj sekwencję", "Stream Chat Response": "Strumieniowanie odpowiedzi z czatu", "STT Model": "Model STT", @@ -1108,7 +1108,7 @@ "Title": "Tytuł", "Title (e.g. Tell me a fun fact)": "Tytuł (na przykład {e.g.} Powiedz mi jakiś zabawny fakt)", "Title Auto-Generation": "Automatyczne tworzenie tytułu", - "Title cannot be an empty string.": "Tytuł nie może być pustą stringiem.", + "Title cannot be an empty string.": "Tytuł nie może być pustym stringiem.", "Title Generation": "Generowanie tytułów", "Title Generation Prompt": "Prompt do generowania tytułu", "TLS": "TLS", @@ -1202,8 +1202,8 @@ "Valves updated successfully": "Zawory zaktualizowane pomyślnie", "variable": "zmienna", "variable to have them replaced with clipboard content.": "Zmienna, która ma zostać zastąpiona zawartością schowka.", - "Verify Connection": "", - "Verify SSL Certificate": "", + "Verify Connection": "Sprawdź połączenie", + "Verify SSL Certificate": "Sprawdź certyfikat SSL", "Version": "Wersja", "Version {{selectedVersion}} of {{totalVersions}}": "Wersja {{selectedVersion}} z {{totalVersions}}", "View Replies": "Wyświetl odpowiedzi", From 9669cd3454fd2b259bff86e59ef5b7cf5f71de0c Mon Sep 17 00:00:00 2001 From: Youggls Date: Thu, 17 Apr 2025 17:23:20 +0800 Subject: [PATCH 027/161] fix: use run_in_threadpool for search_web to prevent blocking Used fastapi's run_in_threadpool function to execute the search_web function, preventing the synchronous function from blocking the entire web search process. --- backend/open_webui/routers/retrieval.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/backend/open_webui/routers/retrieval.py b/backend/open_webui/routers/retrieval.py index 13f012483..ce79503db 100644 --- a/backend/open_webui/routers/retrieval.py +++ b/backend/open_webui/routers/retrieval.py @@ -1477,8 +1477,11 @@ async def process_web_search( logging.info( f"trying to web search with {request.app.state.config.WEB_SEARCH_ENGINE, form_data.query}" ) - web_results = search_web( - request, request.app.state.config.WEB_SEARCH_ENGINE, form_data.query + web_results = await run_in_threadpool( + search_web, + request, + request.app.state.config.WEB_SEARCH_ENGINE, + form_data.query, ) except Exception as e: log.exception(e) From 9f8b94e45fbc9f3fcd8ed3ff507cd1ed143bbb91 Mon Sep 17 00:00:00 2001 From: David Holmlund Date: Thu, 17 Apr 2025 14:56:57 +0200 Subject: [PATCH 028/161] fix: improve international character handling in prompt commands --- .../workspace/Prompts/PromptEditor.svelte | 15 ++++++++++++--- src/lib/utils/index.ts | 14 ++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/lib/components/workspace/Prompts/PromptEditor.svelte b/src/lib/components/workspace/Prompts/PromptEditor.svelte index 6a29d03b2..624bb551e 100644 --- a/src/lib/components/workspace/Prompts/PromptEditor.svelte +++ b/src/lib/components/workspace/Prompts/PromptEditor.svelte @@ -8,6 +8,7 @@ import LockClosed from '$lib/components/icons/LockClosed.svelte'; import AccessControlModal from '../common/AccessControlModal.svelte'; import { user } from '$lib/stores'; + import { slugify } from '$lib/utils'; export let onSubmit: Function; export let edit = false; @@ -25,8 +26,15 @@ let showAccessControlModal = false; - $: if (!edit) { - command = title !== '' ? `${title.replace(/\s+/g, '-').toLowerCase()}` : ''; + let hasManualEdit = false; + + $: if (!edit && !hasManualEdit) { + command = title !== '' ? slugify(title) : ''; + } + + // Track manual edits + function handleCommandInput(e: Event) { + hasManualEdit = true; } const submitHandler = async () => { @@ -64,7 +72,7 @@ command = prompt.command.at(0) === '/' ? prompt.command.slice(1) : prompt.command; content = prompt.content; - accessControl = prompt?.access_control ?? null; + accessControl = prompt?.access_control ?? {}; } }); @@ -125,6 +133,7 @@ class=" w-full bg-transparent outline-hidden" placeholder={$i18n.t('Command')} bind:value={command} + on:input={handleCommandInput} required disabled={edit} /> diff --git a/src/lib/utils/index.ts b/src/lib/utils/index.ts index 022a901c1..83fd8d0cc 100644 --- a/src/lib/utils/index.ts +++ b/src/lib/utils/index.ts @@ -1298,3 +1298,17 @@ export const convertOpenApiToToolPayload = (openApiSpec) => { return toolPayload; }; + +export const slugify = (str: string): string => { + return str + // 1. Normalize: separate accented letters into base + combining marks + .normalize("NFD") + // 2. Remove all combining marks (the accents) + .replace(/[\u0300-\u036f]/g, "") + // 3. Replace any sequence of whitespace with a single hyphen + .replace(/\s+/g, "-") + // 4. Remove all characters except alphanumeric characters and hyphens + .replace(/[^a-zA-Z0-9-]/g, "") + // 5. Convert to lowercase + .toLowerCase(); +}; From b1629d8660e34d4892a288e5435d49ddc8388f0f Mon Sep 17 00:00:00 2001 From: Damian Mendez Romera Date: Thu, 17 Apr 2025 13:07:52 +0100 Subject: [PATCH 029/161] i18n: Update es-ES (Spanish) translation.json --- src/lib/i18n/locales/es-ES/translation.json | 192 ++++++++++---------- 1 file changed, 96 insertions(+), 96 deletions(-) diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index 3e3179031..bafa2c817 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -14,29 +14,29 @@ "*Prompt node ID(s) are required for image generation": "Los ID de nodo son requeridos para la generación de imágenes", "A new version (v{{LATEST_VERSION}}) is now available.": "Nueva versión (v{{LATEST_VERSION}}) disponible.", "A task model is used when performing tasks such as generating titles for chats and web search queries": "El modelo de tareas realiza tareas como la generación de títulos para chats y consultas de búsqueda web", - "a user": "un/a usuari@", + "a user": "un usuario", "About": "Acerca de", "Accept autocomplete generation / Jump to prompt variable": "Aceptar generación de autocompletado / Saltar a indicador variable", "Access": "Acceso", "Access Control": "Control de Acceso", - "Accessible to all users": "Accesible para todos l@s usuari@s", + "Accessible to all users": "Accesible para todos los usuarios", "Account": "Cuenta", "Account Activation Pending": "Activación de cuenta Pendiente", "Accurate information": "Información precisa", "Actions": "Acciones", "Activate": "Activar", "Activate this command by typing \"/{{COMMAND}}\" to chat input.": "Activar este comando escribiendo \"/{{COMMAND}}\" en el chat", - "Active Users": "Usuari@s activos", + "Active Users": "Usuarios activos", "Add": "Añadir", "Add a model ID": "Añadir un ID de modelo", "Add a short description about what this model does": "Añadir una breve descripción sobre lo que hace este modelo", "Add a tag": "Añadir una etiqueta", - "Add Arena Model": "Añadir un modelo a la Arena", + "Add Arena Model": "Añadir modelo a la Arena", "Add Connection": "Añadir Conexión", "Add Content": "Añadir Contenido", "Add content here": "Añadir contenido aquí", "Add custom prompt": "Añadir un indicador personalizado", - "Add Files": "Añadir Ficheros", + "Add Files": "Añadir Archivos", "Add Group": "Añadir Grupo", "Add Memory": "Añadir Memoria", "Add Model": "Añadir Modelo", @@ -44,31 +44,31 @@ "Add Tag": "Añadir etiqueta", "Add Tags": "Añadir etiquetas", "Add text content": "Añade contenido de texto", - "Add User": "Añadir Usuari@", - "Add User Group": "Añadir Grupo de Usuari@", - "Adjusting these settings will apply changes universally to all users.": "El ajuste de estas opciones se aplicará globalmente a todos l@s usuari@s.", + "Add User": "Añadir Usuario", + "Add User Group": "Añadir grupo de usuarios", + "Adjusting these settings will apply changes universally to all users.": "El ajuste de estas opciones se aplicará globalmente a todos los usuarios.", "admin": "admin", "Admin": "Admin", "Admin Panel": "Administración", "Admin Settings": "Ajustes de Admin", - "Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Los Admins tienen acceso a todas las herramientas en todo momento; l@s usuari@s necesitan, en el área de trabajo, que los modelos tengan asignadas las herramentas.", + "Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Los administradores tienen acceso a todas las herramientas en todo momento; los usuarios necesitan que los modelos tengan asignadas las herramientas en el area de trabajo.", "Advanced Parameters": "Parámetros Avanzados", - "Advanced Params": "Param. Avanz.", + "Advanced Params": "Parámetros Avanzados", "All": "Todos", "All Documents": "Todos los Documentos", "All models deleted successfully": "Todos los modelos borrados correctamnete", - "Allow Call": "", + "Allow Call": "Permitir Llamada", "Allow Chat Controls": "Permitir Controles del Chat", "Allow Chat Delete": "Permitir Borrar Chat", "Allow Chat Deletion": "Permitir Borrado de Chat", "Allow Chat Edit": "Pemritir Editar Chat", - "Allow File Upload": "Permitir Subida de Ficheros", + "Allow File Upload": "Permitir Subida de Archivos", "Allow Multiple Models in Chat": "", "Allow non-local voices": "Permitir voces no locales", "Allow Speech to Text": "", "Allow Temporary Chat": "Permitir Chat Temporal", "Allow Text to Speech": "", - "Allow User Location": "Permitir Ubicación de Usuari@", + "Allow User Location": "Permitir Ubicación de Usuario", "Allow Voice Interruption in Call": "Permitir Interrupción de Voz en Llamada", "Allowed Endpoints": "Endpoints Permitidos", "Already have an account?": "¿Ya tienes una cuenta?", @@ -91,34 +91,34 @@ "API keys": "Claves API", "Application DN": "Aplicacion DN", "Application DN Password": "Contraseña Aplicacion DN", - "applies to all users with the \"user\" role": "se aplica a todos l@s usuari@s con el rol \"user\" ", + "applies to all users with the \"user\" role": "se aplica a todos los usuarios con el rol \"user\" ", "April": "Abril", "Archive": "Archivar", "Archive All Chats": "Archivar Todos los Chats", "Archived Chats": "Chats archivados", "archived-chat-export": "exportar chats archivados", - "Are you sure you want to clear all memories? This action cannot be undone.": "¿estas segur@ que quieres borrar todas las memorias? (¡esta acción NO se puede deshacer!)", - "Are you sure you want to delete this channel?": "¿Estás segur@ de que quieres eliminar este canal?", - "Are you sure you want to delete this message?": "¿Estás segur@ de que quieres eliminar este mensaje? ", - "Are you sure you want to unarchive all archived chats?": "¿Estás segur@ de que quieres desarchivar todos los chats archivados?", - "Are you sure?": "¿Está segur@?", + "Are you sure you want to clear all memories? This action cannot be undone.": "¿Seguro que quieres borrar todas las memorias? (¡esta acción NO se puede deshacer!)", + "Are you sure you want to delete this channel?": "¿Seguro de que quieres eliminar este canal?", + "Are you sure you want to delete this message?": "¿Seguro de que quieres eliminar este mensaje? ", + "Are you sure you want to unarchive all archived chats?": "¿Seguro de que quieres desarchivar todos los chats archivados?", + "Are you sure?": "¿Estás seguro?", "Arena Models": "Arena de Modelos", "Artifacts": "Artefactos", "Ask": "Preguntar", "Ask a question": "Haz una pregunta", "Assistant": "Asistente", - "Attach file from knowledge": "Adjuntar fichero desde el conocimiento", + "Attach file from knowledge": "Adjuntar archivo desde conocimiento", "Attention to detail": "Atención al detalle", "Attribute for Mail": "Atributo para Correo", - "Attribute for Username": "Atributo para Nombre de Usuari@", + "Attribute for Username": "Atributo para Nombre de Usuario", "Audio": "Audio", "August": "Agosto", "Auth": "Autorización", "Authenticate": "Autentificar", - "Authentication": "Autentificación", + "Authentication": "Autenticación", "Auto": "Auto", "Auto-Copy Response to Clipboard": "AutoCopiado de respuesta al Portapapeles", - "Auto-playback response": "AutoReproducir Respuesta", + "Auto-playback response": "Reproducir Respuesta automáticamente", "Autocomplete Generation": "Generación de Autocompletado", "Autocomplete Generation Input Max Length": "Max. Longitud de Entrada en Generación de Autocompletado", "Automatic1111": "AUTOMATIC1111", @@ -126,7 +126,7 @@ "AUTOMATIC1111 Base URL": "URL Base de AUTOMATIC1111", "AUTOMATIC1111 Base URL is required.": "la URL Base de AUTOMATIC1111 es necesaria.", "Available list": "Lista disponible", - "Available Tools": "", + "Available Tools": "Herramientas Disponibles", "available!": "¡disponible!", "Awful": "Horrible", "Azure AI Speech": "Voz Azure AI", @@ -148,23 +148,23 @@ "Bypass Embedding and Retrieval": "Evitar Incrustración y Recuperación", "Calendar": "Calendario", "Call": "Llamada", - "Call feature is not supported when using Web STT engine": "La característica Llamada no está soportada cuando se usa el motor Web STT", + "Call feature is not supported when using Web STT engine": "La funcionalidad de Llamada no está soportada cuando se usa el motor Web STT", "Camera": "Cámara", "Cancel": "Cancelar", "Capabilities": "Capacidades", "Capture": "Captura", "Certificate Path": "Ruta a Certificado", - "Change Password": "Cambia la Contraseña", - "Channel Name": "Nombre de Canal", + "Change Password": "Cambiar Contraseña", + "Channel Name": "Nombre del Canal", "Channels": "Canal", "Character": "Carácter", "Character limit for autocomplete generation input": "Límite de caracteres de entrada de la generación de autocompletado", "Chart new frontiers": "Trazar nuevas fronteras", "Chat": "Chat", "Chat Background Image": "Imágen de Fondo del Chat", - "Chat Bubble UI": "Interface del Chat tipo Burbuja", - "Chat Controls": "Controles del chat", - "Chat direction": "Dirección del Chat", + "Chat Bubble UI": "Interface de Chat tipo Burbuja", + "Chat Controls": "Controles de chat", + "Chat direction": "Dirección de Chat", "Chat Overview": "Vista General del Chat", "Chat Permissions": "Permisos del Chat", "Chat Tags Auto-Generation": "AutoGeneración de Etiquetas de Chat", @@ -183,15 +183,15 @@ "Click here for filter guides.": "Pulsar aquí para guías de filtros", "Click here for help.": "Pulsar aquí para Ayuda.", "Click here to": "Pulsa aquí para", - "Click here to download user import template file.": "Pulsa aquí para descargar la plantilla de importación de usuari@.", - "Click here to learn more about faster-whisper and see the available models.": "Pulsa aquí para saber más sobre faster-whisper y ver modelos disponibles.", + "Click here to download user import template file.": "Pulsa aquí para descargar la plantilla para importar usuarios.", + "Click here to learn more about faster-whisper and see the available models.": "Pulsa aquí para saber más sobre faster-whisper y ver los modelos disponibles.", "Click here to see available models.": "Pulsa aquí para ver modelos disponibles.", "Click here to select": "Pulsa aquí para seleccionar", "Click here to select a csv file.": "Pulsa aquí para seleccionar un fichero de Valores Separados por Comas (.csv)", "Click here to select a py file.": "Pulsa aquí para seleccionar un fichero Python (.py)", "Click here to upload a workflow.json file.": "Pulsa aquí para subir un fichero workflow.json", "click here.": "Pulsa aquí.", - "Click on the user role button to change a user's role.": "Pulsa en el botón rol de usuari@ para cambiar su rol.", + "Click on the user role button to change a user's role.": "Pulsa en el botón rol de usuario para cambiar su rol.", "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Permisos de escritura del portapapeles denegado. Por favor, comprueba la configuración de tu navegador para otorgar el permiso necesario.", "Clone": "Clonar", "Clone Chat": "Clonar Chat", @@ -200,8 +200,8 @@ "Code execution": "Ejecución de Código", "Code Execution": "Ejecución de Código", "Code Execution Engine": "Motor de Ejecución de Código", - "Code Execution Timeout": "Tiempo", - "Code formatted successfully": "Se ha formateado correctamente el código.", + "Code Execution Timeout": "Tiempo límite de espera para Ejecución de Código", + "Code formatted successfully": "El codigo se ha formateado correctamente.", "Code Interpreter": "Interprete de Código", "Code Interpreter Engine": "Motor del Interprete de Código", "Code Interpreter Prompt Template": "Plantilla del Indicador del Interprete de Código", @@ -287,7 +287,7 @@ "Default to 389 or 636 if TLS is enabled": "Predeterminado a 389, o 636 si TLS está habilitado", "Default to ALL": "Predeterminado a TODOS", "Default to segmented retrieval for focused and relevant content extraction, this is recommended for most cases.": "Por defecto está predeterminada una segmentación de la recuperación para una extracción de contenido centrado y relevante, recomendado para la mayoría de los casos.", - "Default User Role": "Rol Predeterminado de l@s Usuari@s Nuev@s", + "Default User Role": "Rol predeterminado de los nuevos usuarios", "Delete": "Borrar", "Delete a model": "Borrar un modelo", "Delete All Chats": "Borrar todos los chats", @@ -302,17 +302,17 @@ "Delete prompt?": "¿Borrar el indicador?", "delete this link": "Borrar este enlace", "Delete tool?": "¿Borrar la herramienta?", - "Delete User": "Borrar Usuari@", + "Delete User": "Borrar Usuario", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} Borrado", "Deleted {{name}}": "{{nombre}} Borrado", - "Deleted User": "Usuari@ Borrado", + "Deleted User": "Usuario Borrado", "Describe your knowledge base and objectives": "Describe tu Base de Conocimientos y sus objetivos", "Description": "Descripción", - "Detect Artifacts Automatically": "", + "Detect Artifacts Automatically": "Detectar Artefactos Automáticamente", "Didn't fully follow instructions": "No seguiste completamente las instrucciones", "Direct": "Directo", "Direct Connections": "Conexiones Directas", - "Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Las Conexiones Directas permiten a l@s usuari@s conectar a sus propios endpoints compatibles API OpenAI.", + "Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Las Conexiones Directas permiten a los usuarios conectar a sus propios endpoints compatibles API OpenAI.", "Direct Connections settings updated": "Se actualizaron las configuraciones de las Conexiones Directas", "Direct Tool Servers": "Servidores de Herramientas Directos", "Disabled": "Deshabilitado", @@ -328,8 +328,8 @@ "Discover, download, and explore model presets": "Descubre, descarga y explora modelos con preajustados", "Dismissible": "Desestimable", "Display": "Mostrar", - "Display Emoji in Call": "Muestra chirimbolitos(Emojis) en Llamada", - "Display the username instead of You in the Chat": "Mostrar en el chat el nombre de usuari@ en lugar del genérico Tu/Usted", + "Display Emoji in Call": "Muestra Emojis en Llamada", + "Display the username instead of You in the Chat": "Mostrar en el chat el nombre de usuario en lugar del genérico Tu", "Displays citations in the response": "Mostrar citas en la respuesta", "Dive into knowledge": "Sumérgete en el conocimiento", "Do not install functions from sources you do not fully trust.": "¡No instalar funciones de fuentes en las que que no se confíe totalmente!", @@ -344,8 +344,8 @@ "does not make any external connections, and your data stays securely on your locally hosted server.": "no se realiza ninguna conexión externa y tus datos permanecen seguros alojados localmente en tu servidor.", "Domain Filter List": "Lista de Filtrado de Dominio", "Don't have an account?": "¿No tienes una cuenta?", - "don't install random functions from sources you don't trust.": "¡no instalar funciones aleatorias de fuentes en las que no se confíe!", - "don't install random tools from sources you don't trust.": "¡no instalar herramientas aleatorias de fuentes en las que no se confíe!", + "don't install random functions from sources you don't trust.": "¡no instalar funciones desconocidas de fuentes en las que no se confíe!", + "don't install random tools from sources you don't trust.": "¡no instalar herramientas desconocidas de fuentes en las que no se confíe!", "Don't like the style": "¿No te gusta el estilo?", "Done": "Hecho", "Download": "Descargar", @@ -358,21 +358,21 @@ "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p.ej. '30s','10m'. Unidades de tiempo válidas son 's', 'm', 'h'.", "e.g. \"json\" or a JSON schema": "p.ej. \"json\" o un esquema JSON", "e.g. 60": "p.ej. 60", - "e.g. A filter to remove profanity from text": "p.ej. Un filtro para eliminar 'blasfemia' del texto", + "e.g. A filter to remove profanity from text": "p.ej. Un filtro para eliminar malas palabras del texto", "e.g. My Filter": "p.ej. Mi Filtro", "e.g. My Tools": "p.ej. Mis Herramientas", "e.g. my_filter": "p.ej. mi_filtro", "e.g. my_tools": "p.ej. mis_herramientas", "e.g. Tools for performing various operations": "p.ej. Herramientas para realizar varias operaciones", - "e.g., en-US,ja-JP (leave blank for auto-detect)": "", + "e.g., en-US,ja-JP (leave blank for auto-detect)": "p. ej., en-US,ja-JP (dejar en blanco para detectar automáticamente)", "Edit": "Editar", "Edit Arena Model": "Editar Modelo en Arena", "Edit Channel": "Editar Canal", "Edit Connection": "Editar Conexión", "Edit Default Permissions": "Editar Permisos Predeterminados", "Edit Memory": "Editar Memoria", - "Edit User": "Editar Usuari@", - "Edit User Group": "Editar Grupo de Usuari@", + "Edit User": "Editar Usuario", + "Edit User Group": "Editar Grupo de Usuarios", "ElevenLabs": "ElevenLabs", "Email": "Email", "Embark on adventures": "Embarcate en aventuras", @@ -390,13 +390,13 @@ "Enable Memory Mapping (mmap) to load model data. This option allows the system to use disk storage as an extension of RAM by treating disk files as if they were in RAM. This can improve model performance by allowing for faster data access. However, it may not work correctly with all systems and can consume a significant amount of disk space.": "Habilitar Mapeado de Memoria (mmap) para cargar datos del modelo. Esta opción permite al sistema usar el almacenamiento del disco como una extensión de la RAM al tratar los archivos en disco como si estuvieran en la RAM. Esto puede mejorar el rendimiento del modelo al permitir un acceso más rápido a los datos. Sin embargo, puede no funcionar correctamente con todos los sistemas y puede consumir una cantidad significativa de espacio en disco.", "Enable Message Rating": "Habilitar Calificación de los Mensajes", "Enable Mirostat sampling for controlling perplexity.": "Algoritmo de decodificación de texto neuronal que controla activamente el proceso generativo para mantener la perplejidad del texto generado en un valor deseado. Previene las trampas de aburrimiento (por excesivas repeticiones) y de incoherencia (por generación de excesivo texto).", - "Enable New Sign Ups": "Habilitar Registros de Nuev@s Usuari@s", + "Enable New Sign Ups": "Habilitar Registros de Nuevos Usuarios", "Enabled": "Habilitado", - "Enforce Temporary Chat": "", + "Enforce Temporary Chat": "Forzar el uso de Chat Temporal", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Asegúrese de que su archivo CSV incluya 4 columnas en este orden: Nombre, Correo Electrónico, Contraseña, Rol.", "Enter {{role}} message here": "Ingresar mensaje {{role}} aquí", "Enter a detail about yourself for your LLMs to recall": "Ingresar detalles sobre ti para que los recuerden sus LLMs", - "Enter api auth string (e.g. username:password)": "Ingresar cadena de autorización de la api (p.ej. nombre:contraseña)", + "Enter api auth string (e.g. username:password)": "Ingresar campo de autorización de la api (p.ej. nombre:contraseña)", "Enter Application DN": "Ingresar el DN de la Aplicación", "Enter Application DN Password": "Ingresar la Contraseña del DN de la Aplicación", "Enter Bing Search V7 Endpoint": "Ingresar el Endpoint de Bing Search V7", @@ -414,8 +414,8 @@ "Enter Document Intelligence Key": "Ingresar Clave de Azure Document Intelligence", "Enter domains separated by commas (e.g., example.com,site.org)": "Ingresar dominios separados por comas (p.ej., ejemplo.com,sitio.org)", "Enter Exa API Key": "Ingresar Clave API de Exa", - "Enter Firecrawl API Base URL": "", - "Enter Firecrawl API Key": "", + "Enter Firecrawl API Base URL": "Ingresar URL Base del API de Firecrawl", + "Enter Firecrawl API Key": "Ingresar Clave del API de Firecrawl", "Enter Github Raw URL": "Ingresar URL Github en Bruto(raw)", "Enter Google PSE API Key": "Ingresar Clave API de Google PSE", "Enter Google PSE Engine Id": "Ingresa ID del Motor PSE de Google", @@ -433,8 +433,8 @@ "Enter Mojeek Search API Key": "Ingresar Clave API de Mojeek Search", "Enter Number of Steps (e.g. 50)": "Ingresar Número de Pasos (p.ej., 50)", "Enter Perplexity API Key": "Ingresar Clave API de Perplexity", - "Enter Playwright Timeout": "", - "Enter Playwright WebSocket URL": "", + "Enter Playwright Timeout": "Ingresar límite de tiempo de espera de Playwright", + "Enter Playwright WebSocket URL": "Ingresar URL de WebSocket de Playwright", "Enter proxy URL (e.g. https://user:password@host:port)": "Ingresar URL del proxy (p.ej. https://user:password@host:port)", "Enter reasoning effort": "Ingresar esfuerzo de razonamiento", "Enter Sampler (e.g. Euler a)": "Ingresar Muestreador (p.ej., Euler a)", @@ -452,16 +452,16 @@ "Enter server host": "Ingresar host del servidor", "Enter server label": "Ingresar etiqueta del servidor", "Enter server port": "Ingresar puerto del servidor", - "Enter Sougou Search API sID": "", - "Enter Sougou Search API SK": "", + "Enter Sougou Search API sID": "Ingresar Sougou Search API sID", + "Enter Sougou Search API SK": "Ingresar Sougou Search API SK", "Enter stop sequence": "Ingresar secuencia de parada", "Enter system prompt": "Ingresar Indicador del sistema", "Enter system prompt here": "Ingresa aquí el indicador del sistema", "Enter Tavily API Key": "Ingresar Clave API de Tavily", - "Enter Tavily Extract Depth": "", - "Enter the public URL of your WebUI. This URL will be used to generate links in the notifications.": "Ingresar URL pública de su WebUI. Esta URL se usará para generar enlaces en las notificaciones.", + "Enter Tavily Extract Depth": "Ingresar parámetro de Extract Depth de Taviliy", + "Enter the public URL of your WebUI. This URL will be used to generate links in the notifications.": "Ingresar URL pública de WebUI. Esta URL se usará para generar enlaces en las notificaciones.", "Enter Tika Server URL": "Ingresar URL del servidor Tika", - "Enter timeout in seconds": "Ingresar timeout en segundos", + "Enter timeout in seconds": "Ingresar tiempo límite de espera en segundos", "Enter to Send": "'Enter' para Enviar", "Enter Top K": "Ingresar Top K", "Enter Top K Reranker": "Ingresar Top K Reclasificador", @@ -475,8 +475,8 @@ "Enter your new password": "Ingresa tu contraseña nueva", "Enter Your Password": "Ingresa tu contraseña", "Enter Your Role": "Ingresa tu rol", - "Enter Your Username": "Ingresa tu nombre de usuari@", - "Enter your webhook URL": "Ingresa tu URL de enganchesWeb(webhook)", + "Enter Your Username": "Ingresa tu nombre de usuario", + "Enter your webhook URL": "Ingresa tu URL de webhook", "Error": "Error", "ERROR": "ERROR", "Error accessing Google Drive: {{error}}": "Error accediendo a Google Drive: {{error}}", @@ -488,18 +488,18 @@ "Example: mail": "Ejemplo: correo", "Example: ou=users,dc=foo,dc=example": "Ejemplo: ou=usuarios,dc=foo,dc=ejemplo", "Example: sAMAccountName or uid or userPrincipalName": "Ejemplo: sAMNombreCuenta o uid o userNombrePrincipal", - "Exceeded the number of seats in your license. Please contact support to increase the number of seats.": "Excedido el número de accesos en su licencia. Por favor, contacte con soporte para aumentar el número de accesos.", + "Exceeded the number of seats in your license. Please contact support to increase the number of seats.": "Excedido el número de accesos de usuarios en tu licencia. Por favor, contacta con soporte para aumentar el número de accesos.", "Exclude": "Excluir", "Execute code for analysis": "Ejecutar código para análisis", - "Executing **{{NAME}}**...": "", + "Executing **{{NAME}}**...": "Ejecutando **{{NAME}}**...", "Expand": "Expandir", "Experimental": "Experimental", "Explain": "Explicar", - "Explain this section to me in more detail": "Explicame esta sección con más detalle", + "Explain this section to me in more detail": "Explícame esta sección con más detalle", "Explore the cosmos": "Explora el cosmos", "Export": "Exportar", "Export All Archived Chats": "Exportar Todos los Chats Archivados", - "Export All Chats (All Users)": "Exportar Todos los Chats (Todos l@s Usuari@s)", + "Export All Chats (All Users)": "Exportar Todos los Chats (Todos los Usuarios)", "Export chat (.json)": "Exportar chat (.json)", "Export Chats": "Exportar Chats", "Export Config to JSON File": "Exportar Configuración a archivo JSON", @@ -523,8 +523,8 @@ "Features": "Características", "Features Permissions": "Permisos de las Características", "February": "Febrero", - "Feedback History": "Historial de realimentación", - "Feedbacks": "Realimentaciones", + "Feedback History": "Historial de Opiniones", + "Feedbacks": "Opiniones", "Feel free to add specific details": "Añade libremente detalles específicos", "File": "Archivo", "File added successfully.": "Archivo añadido correctamente.", @@ -539,11 +539,11 @@ "Filter is now globally enabled": "El filtro ahora está habilitado globalmente", "Filters": "Filtros", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Se detectó suplantación de huellas: No se pueden usar las iniciales como avatar. Se establece la imagen de perfil predeterminada.", - "Firecrawl API Base URL": "", - "Firecrawl API Key": "", + "Firecrawl API Base URL": "URL Base de API de Firecrawl", + "Firecrawl API Key": "Clave de API de Firecrawl", "Fluidly stream large external response chunks": "Transmisión fluida de fragmentos de grandes respuestas externas", - "Focus chat input": "Enfoque entrada del chat", - "Folder deleted successfully": "Carpeta bollada correctamente", + "Focus chat input": "Enfocar campo de chat", + "Folder deleted successfully": "Carpeta eliminada correctamente", "Folder name cannot be empty": "El nombre de la carpeta no puede estar vacío", "Folder name cannot be empty.": "El nombre de la carpeta no puede estar vacío", "Folder name updated successfully": "Nombre de la carpeta actualizado correctamente", @@ -719,7 +719,7 @@ "Memory updated successfully": "Memoria actualizada correctamente", "Merge Responses": "Fusionar Respuestas", "Message rating should be enabled to use this feature": "Para usar esta función debe estar habilitada la calificación de mensajes", - "Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Los mensajes que envíe después de la creación del enlace no se compartirán. L@s usuari@s con la URL del enlace podrán ver el chat compartido.", + "Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Los mensajes que envíe después de la creación del enlace no se compartirán. Los usuarios con la URL del enlace podrán ver el chat compartido.", "Min P": "Min P", "Mirostat": "Mirostat", "Mirostat Eta": "Mirostat Eta", @@ -777,7 +777,7 @@ "No results found": "No se encontraron resultados", "No search query generated": "No se generó ninguna consulta de búsqueda", "No source available": "No hay fuente disponible", - "No users were found.": "No se encontraron usuari@s.", + "No users were found.": "No se encontraron usuarios.", "No valves to update": "No hay válvulas para actualizar", "None": "Ninguno", "Not factually correct": "No es correcto en todos los aspectos", @@ -804,7 +804,7 @@ "Only alphanumeric characters and hyphens are allowed": "Sólo están permitidos caracteres alfanuméricos y guiones", "Only alphanumeric characters and hyphens are allowed in the command string.": "Sólo están permitidos en la cadena de comandos caracteres alfanuméricos y guiones.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Solo se pueden editar las colecciones, para añadir/editar documentos hay que crear una nueva base de conocimientos", - "Only select users and groups with permission can access": "Solo pueden acceder l@s usuari@s y grupos con permiso", + "Only select users and groups with permission can access": "Solo pueden acceder los usuarios y grupos con permiso", "Oops! Looks like the URL is invalid. Please double-check and try again.": "¡vaya! Parece que la URL es inválida. Por favor, revisala y reintenta de nuevo.", "Oops! There are files still uploading. Please wait for the upload to complete.": "¡vaya! Todavía hay archivos subiendose. Por favor, espera a que se complete la subida.", "Oops! There was an error in the previous response.": "¡vaya! Hubo un error en la respuesta previa.", @@ -824,7 +824,7 @@ "OpenAI URL/Key required.": "URL/Clave de OpenAI requerida.", "openapi.json Path": "Ruta a openapi.json", "or": "o", - "Organize your users": "Organiza tus usuari@s", + "Organize your users": "Organiza tus usuarios", "Other": "Otro", "OUTPUT": "SALIDA", "Output format": "Formato de salida", @@ -851,8 +851,8 @@ "Pipelines Valves": "Válvulas de Tuberías", "Plain text (.txt)": "Texto plano (.txt)", "Playground": "Zona de Pruebas", - "Playwright Timeout (ms)": "", - "Playwright WebSocket URL": "", + "Playwright Timeout (ms)": "Tiempo Límite de Espera (ms) de Playwright", + "Playwright WebSocket URL": "URL de WebSocket de Playwright", "Please carefully review the following warnings:": "Por favor revisar cuidadosamente los siguientes avisos:", "Please do not close the settings page while loading the model.": "Por favor no cerrar la página de ajustes mientras se está descargando el modelo.", "Please enter a prompt": "Por favor ingresar un indicador", @@ -894,7 +894,7 @@ "Record voice": "Grabar voz", "Redirecting you to Open WebUI Community": "Redireccionando a la Comunidad Open-WebUI", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Reduce la probabilidad de generación sin sentido. Un valor más alto (p.ej. 100) dará respuestas más diversas, mientras que un valor más bajo (p.ej. 10) será más conservador.", - "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Referir a ti mismo como \"Usuari@\" (p.ej. \"Usuari@ está aprendiendo Español\")", + "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Referir a ti mismo como \"Usuario\" (p.ej. \"Usuario está aprendiendo Español\")", "References from": "Referencias desde", "Refused when it shouldn't have": "Rechazado cuando no debería haberlo hecho", "Regenerate": "Regenerar", @@ -902,7 +902,7 @@ "Reindex Knowledge Base Vectors": "Reindexar Base Vectorial de Conocimiento", "Release Notes": "Notas de la Versión", "Relevance": "Relevancia", - "Relevance Threshold": "", + "Relevance Threshold": "Umbral de Relevancia", "Remove": "Eliminar", "Remove Model": "Eliminar Modelo", "Rename": "Renombrar", @@ -1020,7 +1020,7 @@ "Show": "Mostrar", "Show \"What's New\" modal on login": "Mostrar modal \"Qué hay de Nuevo\" al iniciar sesión", "Show Admin Details in Account Pending Overlay": "Mostrar Detalles Admin en la sobrecapa de 'Cuenta Pendiente'", - "Show Model": "", + "Show Model": "Mostrar Modelo", "Show shortcuts": "Mostrar Atajos", "Show your support!": "¡Muestra tu apoyo!", "Showcased creativity": "Creatividad exhibida", @@ -1061,7 +1061,7 @@ "Tap to interrupt": "Toca para interrumpir", "Tasks": "Tareas", "Tavily API Key": "Clave API de Tavily", - "Tavily Extract Depth": "", + "Tavily Extract Depth": "Parámetro Extract Depth de Taviliy", "Tell us more:": "Dinos algo más:", "Temperature": "Temperatura", "Template": "Plantilla", @@ -1069,14 +1069,14 @@ "Text Splitter": "Divisor de Texto", "Text-to-Speech Engine": "Motor Texto a Voz(TTS)", "Tfs Z": "TFS Z", - "Thanks for your feedback!": "¡Gracias por tu realimentación!", + "Thanks for your feedback!": "¡Gracias por tu comentario!", "The Application Account DN you bind with for search": "Cuenta DN de la aplicación vinculada para búsqueda", - "The base to search for users": "La base para buscar usuari@s", + "The base to search for users": "Base para buscar usuarios", "The batch size determines how many text requests are processed together at once. A higher batch size can increase the performance and speed of the model, but it also requires more memory.": "El tamaño de lote determina cuántas solicitudes de texto se procesan juntas de una vez. Un tamaño de lote más alto puede aumentar el rendimiento y la velocidad del modelo, pero también requiere más memoria.", - "The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "L@s desarrolladores de este complemento son apasionad@s voluntari@s de la comunidad. Si este complemento te es útil, por favor considera contribuir a su desarrollo.", + "The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "Quienes desarollaron este complemento son apasionados voluntarios/as de la comunidad. Si este complemento te es útil, por favor considera contribuir a su desarrollo.", "The evaluation leaderboard is based on the Elo rating system and is updated in real-time.": "La tabla clasificatoria de evaluación se basa en el sistema de clasificación Elo y se actualiza en tiempo real.", - "The LDAP attribute that maps to the mail that users use to sign in.": "El atributo LDAP que mapea el correo que l@s usuari@s utilizan para iniciar sesión.", - "The LDAP attribute that maps to the username that users use to sign in.": "El atributo LDAP que mapea el nombre de usuari@ que l@s usuari@s utilizan para iniciar sesión.", + "The LDAP attribute that maps to the mail that users use to sign in.": "El atributo LDAP que mapea el correo que los usuarios utilizan para iniciar sesión.", + "The LDAP attribute that maps to the username that users use to sign in.": "El atributo LDAP que mapea el nombre de usuario que los usuarios utilizan para iniciar sesión.", "The leaderboard is currently in beta, and we may adjust the rating calculations as we refine the algorithm.": "La tabla clasificatoria está actualmente en beta, por lo que los cálculos de clasificación pueden reajustarse a medida que se refina el algoritmo.", "The maximum file size in MB. If the file size exceeds this limit, the file will not be uploaded.": "El tamaño máximo del archivo en MB. Si el tamaño del archivo supera este límite, el archivo no se subirá.", "The maximum number of files that can be used at once in chat. If the number of files exceeds this limit, the files will not be uploaded.": "El número máximo de archivos que se pueden utilizar a la vez en el chat. Si se supera este límite, los archivos no se subirán.", @@ -1114,7 +1114,7 @@ "TLS": "TLS", "To access the available model names for downloading,": "Para acceder a los nombres de modelos disponibles para descargar,", "To access the GGUF models available for downloading,": "Para acceder a los modelos GGUF disponibles para descargar,", - "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Para acceder a WebUI, por favor contacte con Admins. L@s administradores pueden gestionar los estados de l@s usuari@s esde el panel de administración.", + "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Para acceder a WebUI, por favor contacte con Admins. Los administradores pueden gestionar los estados de los usuarios esde el panel de administración.", "To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "Para adjuntar la base de conocimientos aquí, primero añadirla a \"Conocimiento\" en el área de trabajo.", "To learn more about available endpoints, visit our documentation.": "Para aprender más sobre los endpoints disponibles, visite nuestra documentación.", "To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "Para proteger tu privacidad, de tu realimentación solo se comparten las calificaciones, IDs de modelo, etiquetas y metadatos; tus chat registrados permanecen privados y no se incluyen.", @@ -1182,18 +1182,18 @@ "URL Mode": "Modo URL", "Use '#' in the prompt input to load and include your knowledge.": "Utilizar '#' en el indicador para cargar e incluir tu conocimiento.", "Use Gravatar": "Usar Gravatar", - "Use groups to group your users and assign permissions.": "Usar grupos para agrupar a usuari@s y asignar permisos.", + "Use groups to group your users and assign permissions.": "Usar grupos para agrupar a usuarios y asignar permisos.", "Use Initials": "Usar Iniciales", "Use no proxy to fetch page contents.": "No usar proxy para extraer contenidos", "Use proxy designated by http_proxy and https_proxy environment variables to fetch page contents.": "Usar el proxy asignado en las variables del entorno http_proxy y/o https_proxy para extraer contenido", "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", - "user": "usuari@", - "User": "Usuari@", - "User location successfully retrieved.": "Ubicación de usuari@ obtenida correctamente.", - "User Webhooks": "Usuari@ EnganchesWeb(webhooks)", - "Username": "Nombre de Usuari@", - "Users": "Usuari@s", + "user": "usuario", + "User": "Usuario", + "User location successfully retrieved.": "Ubicación de usuario obtenida correctamente.", + "User Webhooks": "Usuario Webhooks", + "Username": "Nombre de Usuario", + "Users": "Usuarios", "Using the default arena model with all models. Click the plus button to add custom models.": "Usando el modelo de arena predeterminado con todos los modelos. Pulsar en el botón + para agregar modelos personalizados.", "Utilize": "Utilizar", "Valid time units:": "Unidades de tiempo válidas:", @@ -1213,7 +1213,7 @@ "Voice Input": "Entrada de Voz", "Warning": "Aviso", "Warning:": "Aviso:", - "Warning: Enabling this will allow users to upload arbitrary code on the server.": "Aviso: Habilitar esto permitirá a l@s usuari@s subir código arbitrario al servidor.", + "Warning: Enabling this will allow users to upload arbitrary code on the server.": "Aviso: Habilitar esto permitirá a los usuarios subir código arbitrario al servidor.", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Aviso: Si actualizas o cambias el modelo de incrustacción, necesitarás re-importar todos los documentos.", "Warning: Jupyter execution enables arbitrary code execution, posing severe security risks—proceed with extreme caution.": "Aviso: La ejecución Jupyter habilita la ejecución de código arbitrario, planteando graves riesgos de seguridad; Proceder con extrema precaución.", "Web": "Web", From 3dcbf1acf51f9e7ec810c7388cdb58df4039f614 Mon Sep 17 00:00:00 2001 From: Thomas Rehn <271119+tremlin@users.noreply.github.com> Date: Thu, 17 Apr 2025 15:44:48 +0200 Subject: [PATCH 030/161] feat: support OpenAPI parameter description and enum values in tool spec --- backend/open_webui/utils/tools.py | 11 ++++++++++- src/lib/utils/index.ts | 6 +++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/backend/open_webui/utils/tools.py b/backend/open_webui/utils/tools.py index b5d916e1d..97dded91f 100644 --- a/backend/open_webui/utils/tools.py +++ b/backend/open_webui/utils/tools.py @@ -384,9 +384,18 @@ def convert_openapi_to_tool_payload(openapi_spec): for param in operation.get("parameters", []): param_name = param["name"] param_schema = param.get("schema", {}) + description = param_schema.get("description", "") + if not description: + description = param.get("description") or "" + if param_schema.get("enum") and isinstance( + param_schema.get("enum"), list + ): + description += ( + f". Possible values: {', '.join(param_schema.get('enum'))}" + ) tool["parameters"]["properties"][param_name] = { "type": param_schema.get("type"), - "description": param_schema.get("description", ""), + "description": description, } if param.get("required"): tool["parameters"]["required"].append(param_name) diff --git a/src/lib/utils/index.ts b/src/lib/utils/index.ts index 022a901c1..80c2b2902 100644 --- a/src/lib/utils/index.ts +++ b/src/lib/utils/index.ts @@ -1257,9 +1257,13 @@ export const convertOpenApiToToolPayload = (openApiSpec) => { // Extract path and query parameters if (operation.parameters) { operation.parameters.forEach((param) => { + let description = param.schema.description || param.description || ''; + if (param.schema.enum && Array.isArray(param.schema.enum)) { + description += `. Possible values: ${param.schema.enum.join(', ')}`; + } tool.parameters.properties[param.name] = { type: param.schema.type, - description: param.schema.description || '' + description: description }; if (param.required) { From 79bde6fa4718205713a12aefc97fa4c0789e8d68 Mon Sep 17 00:00:00 2001 From: tth37 Date: Thu, 17 Apr 2025 22:27:22 +0800 Subject: [PATCH 031/161] fix: Align backend tag indexing with frontend citation grouping --- backend/open_webui/utils/middleware.py | 16 ++++++++++------ .../components/chat/Messages/Citations.svelte | 1 + 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/backend/open_webui/utils/middleware.py b/backend/open_webui/utils/middleware.py index 4070bc697..4dde09643 100644 --- a/backend/open_webui/utils/middleware.py +++ b/backend/open_webui/utils/middleware.py @@ -888,16 +888,20 @@ async def process_chat_payload(request, form_data, user, metadata, model): # If context is not empty, insert it into the messages if len(sources) > 0: context_string = "" - citated_file_idx = {} - for _, source in enumerate(sources, 1): + citation_idx = {} + for source in sources: if "document" in source: for doc_context, doc_meta in zip( source["document"], source["metadata"] ): - file_id = doc_meta.get("file_id") - if file_id not in citated_file_idx: - citated_file_idx[file_id] = len(citated_file_idx) + 1 - context_string += f'{doc_context}\n' + citation_id = ( + doc_meta.get("source", None) + or source.get("source", {}).get("id", None) + or "N/A" + ) + if citation_id not in citation_idx: + citation_idx[citation_id] = len(citation_idx) + 1 + context_string += f'{doc_context}\n' context_string = context_string.strip() prompt = get_last_user_message(form_data["messages"]) diff --git a/src/lib/components/chat/Messages/Citations.svelte b/src/lib/components/chat/Messages/Citations.svelte index 8c2fbf799..7177f27f2 100644 --- a/src/lib/components/chat/Messages/Citations.svelte +++ b/src/lib/components/chat/Messages/Citations.svelte @@ -83,6 +83,7 @@ }); return acc; }, []); + console.log('citations', citations); showRelevance = calculateShowRelevance(citations); showPercentage = shouldShowPercentage(citations); From cdf26d8189b8e720f75eb1bd772bae8fc9ae83ce Mon Sep 17 00:00:00 2001 From: knight-upstage Date: Thu, 17 Apr 2025 09:57:22 -0700 Subject: [PATCH 032/161] i18n: Update ko-KR (Korean) translation.json --- src/lib/i18n/locales/ko-KR/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/i18n/locales/ko-KR/translation.json b/src/lib/i18n/locales/ko-KR/translation.json index f59326035..956fa7972 100644 --- a/src/lib/i18n/locales/ko-KR/translation.json +++ b/src/lib/i18n/locales/ko-KR/translation.json @@ -128,7 +128,7 @@ "Available list": "가능한 목록", "Available Tools": "", "available!": "사용 가능!", - "Awful": "끔찍함", + "Awful": "형편없음", "Azure AI Speech": "Azure AI 음성", "Azure Region": "Azure 지역", "Back": "뒤로가기", From 0577dc299066374934d37311d7a6a719d8db6821 Mon Sep 17 00:00:00 2001 From: Felipe Hernandez Date: Fri, 18 Apr 2025 01:40:30 +0200 Subject: [PATCH 033/161] feat: Lazy load file content on click --- backend/open_webui/routers/knowledge.py | 6 ++--- .../workspace/Knowledge/KnowledgeBase.svelte | 24 +++++++++++++++---- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/backend/open_webui/routers/knowledge.py b/backend/open_webui/routers/knowledge.py index 15547afa7..408d1c7ed 100644 --- a/backend/open_webui/routers/knowledge.py +++ b/backend/open_webui/routers/knowledge.py @@ -9,7 +9,7 @@ from open_webui.models.knowledge import ( KnowledgeResponse, KnowledgeUserResponse, ) -from open_webui.models.files import Files, FileModel +from open_webui.models.files import Files, FileModel, FileMetadataResponse from open_webui.retrieval.vector.connector import VECTOR_DB_CLIENT from open_webui.routers.retrieval import ( process_file, @@ -235,7 +235,7 @@ async def reindex_knowledge_files(request: Request, user=Depends(get_verified_us class KnowledgeFilesResponse(KnowledgeResponse): - files: list[FileModel] + files: list[FileMetadataResponse] @router.get("/{id}", response_model=Optional[KnowledgeFilesResponse]) @@ -251,7 +251,7 @@ async def get_knowledge_by_id(id: str, user=Depends(get_verified_user)): ): file_ids = knowledge.data.get("file_ids", []) if knowledge.data else [] - files = Files.get_files_by_ids(file_ids) + files = Files.get_file_metadatas_by_ids(file_ids) return KnowledgeFilesResponse( **knowledge.model_dump(), diff --git a/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte b/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte index dc0e354ec..420673500 100644 --- a/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte +++ b/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte @@ -11,7 +11,7 @@ import { page } from '$app/stores'; import { mobile, showSidebar, knowledge as _knowledge, config, user } from '$lib/stores'; - import { updateFileDataContentById, uploadFile, deleteFileById } from '$lib/apis/files'; + import { updateFileDataContentById, uploadFile, deleteFileById, getFileById } from '$lib/apis/files'; import { addFileToKnowledgeById, getKnowledgeById, @@ -84,12 +84,12 @@ let selectedFile = null; let selectedFileId = null; + let selectedFileContent = ''; $: if (selectedFileId) { const file = (knowledge?.files ?? []).find((file) => file.id === selectedFileId); if (file) { - file.data = file.data ?? { content: '' }; - selectedFile = file; + handleFileClick(file); } else { selectedFile = null; } @@ -450,6 +450,20 @@ } }; + const handleFileClick = async (file) => { + try { + selectedFile = file; + const response = await getFileById(localStorage.token, file.id); + if (response) { + selectedFileContent = response.data.content; + } else { + toast.error($i18n.t('No content found in file.')); + } + } catch (e) { + toast.error($i18n.t('Failed to load file content.')); + } + }; + const onDragOver = (e) => { e.preventDefault(); @@ -728,7 +742,7 @@ {#key selectedFile.id} @@ -786,7 +800,7 @@ {#key selectedFile.id} From 88f97372d9cbbe8315bd19002eb742c4368c6cfc Mon Sep 17 00:00:00 2001 From: Felipe Hernandez Date: Fri, 18 Apr 2025 02:01:47 +0200 Subject: [PATCH 034/161] fix: Show content on upload file --- backend/open_webui/routers/knowledge.py | 10 +++++----- .../workspace/Knowledge/KnowledgeBase.svelte | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/backend/open_webui/routers/knowledge.py b/backend/open_webui/routers/knowledge.py index 408d1c7ed..926b35b17 100644 --- a/backend/open_webui/routers/knowledge.py +++ b/backend/open_webui/routers/knowledge.py @@ -379,7 +379,7 @@ def add_file_to_knowledge_by_id( knowledge = Knowledges.update_knowledge_data_by_id(id=id, data=data) if knowledge: - files = Files.get_files_by_ids(file_ids) + files = Files.get_file_metadatas_by_ids(file_ids) return KnowledgeFilesResponse( **knowledge.model_dump(), @@ -456,7 +456,7 @@ def update_file_from_knowledge_by_id( data = knowledge.data or {} file_ids = data.get("file_ids", []) - files = Files.get_files_by_ids(file_ids) + files = Files.get_file_metadatas_by_ids(file_ids) return KnowledgeFilesResponse( **knowledge.model_dump(), @@ -538,7 +538,7 @@ def remove_file_from_knowledge_by_id( knowledge = Knowledges.update_knowledge_data_by_id(id=id, data=data) if knowledge: - files = Files.get_files_by_ids(file_ids) + files = Files.get_file_metadatas_by_ids(file_ids) return KnowledgeFilesResponse( **knowledge.model_dump(), @@ -734,7 +734,7 @@ def add_files_to_knowledge_batch( error_details = [f"{err.file_id}: {err.error}" for err in result.errors] return KnowledgeFilesResponse( **knowledge.model_dump(), - files=Files.get_files_by_ids(existing_file_ids), + files=Files.get_file_metadatas_by_ids(existing_file_ids), warnings={ "message": "Some files failed to process", "errors": error_details, @@ -742,5 +742,5 @@ def add_files_to_knowledge_batch( ) return KnowledgeFilesResponse( - **knowledge.model_dump(), files=Files.get_files_by_ids(existing_file_ids) + **knowledge.model_dump(), files=Files.get_file_metadatas_by_ids(existing_file_ids) ) diff --git a/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte b/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte index 420673500..46348b2bc 100644 --- a/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte +++ b/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte @@ -394,7 +394,7 @@ const updateFileContentHandler = async () => { const fileId = selectedFile.id; - const content = selectedFile.data.content; + const content = selectedFileContent const res = updateFileDataContentById(localStorage.token, fileId, content).catch((e) => { toast.error(`${e}`); From 824238a620218b23d8c81c27288b1db1f1a2e90d Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Thu, 17 Apr 2025 22:02:16 -0700 Subject: [PATCH 035/161] enh: `AIOHTTP_CLIENT_SESSION_TOOL_SERVER_SSL` --- backend/open_webui/env.py | 5 +++++ backend/open_webui/utils/tools.py | 24 ++++++++++++++++++------ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/backend/open_webui/env.py b/backend/open_webui/env.py index c9d71a4a0..cc1b02e01 100644 --- a/backend/open_webui/env.py +++ b/backend/open_webui/env.py @@ -437,6 +437,11 @@ else: except Exception: AIOHTTP_CLIENT_TIMEOUT_TOOL_SERVER_DATA = 10 + +AIOHTTP_CLIENT_SESSION_TOOL_SERVER_SSL = ( + os.environ.get("AIOHTTP_CLIENT_SESSION_TOOL_SERVER_SSL", "True").lower() == "true" +) + #################################### # OFFLINE_MODE #################################### diff --git a/backend/open_webui/utils/tools.py b/backend/open_webui/utils/tools.py index b5d916e1d..876e1c21d 100644 --- a/backend/open_webui/utils/tools.py +++ b/backend/open_webui/utils/tools.py @@ -36,7 +36,10 @@ from langchain_core.utils.function_calling import ( from open_webui.models.tools import Tools from open_webui.models.users import UserModel from open_webui.utils.plugin import load_tool_module_by_id -from open_webui.env import AIOHTTP_CLIENT_TIMEOUT_TOOL_SERVER_DATA +from open_webui.env import ( + AIOHTTP_CLIENT_TIMEOUT_TOOL_SERVER_DATA, + AIOHTTP_CLIENT_SESSION_TOOL_SERVER_SSL, +) import copy @@ -431,8 +434,10 @@ async def get_tool_server_data(token: str, url: str) -> Dict[str, Any]: error = None try: timeout = aiohttp.ClientTimeout(total=AIOHTTP_CLIENT_TIMEOUT_TOOL_SERVER_DATA) - async with aiohttp.ClientSession(timeout=timeout) as session: - async with session.get(url, headers=headers) as response: + async with aiohttp.ClientSession(timeout=timeout, trust_env=True) as session: + async with session.get( + url, headers=headers, ssl=AIOHTTP_CLIENT_SESSION_TOOL_SERVER_SSL + ) as response: if response.status != 200: error_body = await response.json() raise Exception(error_body) @@ -573,19 +578,26 @@ async def execute_tool_server( if token: headers["Authorization"] = f"Bearer {token}" - async with aiohttp.ClientSession() as session: + async with aiohttp.ClientSession(trust_env=True) as session: request_method = getattr(session, http_method.lower()) if http_method in ["post", "put", "patch"]: async with request_method( - final_url, json=body_params, headers=headers + final_url, + json=body_params, + headers=headers, + ssl=AIOHTTP_CLIENT_SESSION_TOOL_SERVER_SSL, ) as response: if response.status >= 400: text = await response.text() raise Exception(f"HTTP error {response.status}: {text}") return await response.json() else: - async with request_method(final_url, headers=headers) as response: + async with request_method( + final_url, + headers=headers, + ssl=AIOHTTP_CLIENT_SESSION_TOOL_SERVER_SSL, + ) as response: if response.status >= 400: text = await response.text() raise Exception(f"HTTP error {response.status}: {text}") From eb80719cf086ec064231c8a3c9fc3b8eca3ea57e Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Thu, 17 Apr 2025 22:11:42 -0700 Subject: [PATCH 036/161] feat: `AIOHTTP_CLIENT_SESSION_SSL` --- backend/open_webui/env.py | 5 +++++ backend/open_webui/routers/ollama.py | 8 +++++++- backend/open_webui/routers/openai.py | 6 ++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/backend/open_webui/env.py b/backend/open_webui/env.py index cc1b02e01..e619b1a74 100644 --- a/backend/open_webui/env.py +++ b/backend/open_webui/env.py @@ -409,6 +409,11 @@ else: except Exception: AIOHTTP_CLIENT_TIMEOUT = 300 + +AIOHTTP_CLIENT_SESSION_SSL = ( + os.environ.get("AIOHTTP_CLIENT_SESSION_SSL", "True").lower() == "true" +) + AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST = os.environ.get( "AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST", os.environ.get("AIOHTTP_CLIENT_TIMEOUT_OPENAI_MODEL_LIST", "10"), diff --git a/backend/open_webui/routers/ollama.py b/backend/open_webui/routers/ollama.py index 775cd0446..3ab88f622 100644 --- a/backend/open_webui/routers/ollama.py +++ b/backend/open_webui/routers/ollama.py @@ -54,6 +54,7 @@ from open_webui.config import ( from open_webui.env import ( ENV, SRC_LOG_LEVELS, + AIOHTTP_CLIENT_SESSION_SSL, AIOHTTP_CLIENT_TIMEOUT, AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST, BYPASS_MODEL_ACCESS_CONTROL, @@ -91,6 +92,7 @@ async def send_get_request(url, key=None, user: UserModel = None): else {} ), }, + ssl=AIOHTTP_CLIENT_SESSION_SSL, ) as response: return await response.json() except Exception as e: @@ -141,6 +143,7 @@ async def send_post_request( else {} ), }, + ssl=AIOHTTP_CLIENT_SESSION_SSL, ) r.raise_for_status() @@ -234,6 +237,7 @@ async def verify_connection( else {} ), }, + ssl=AIOHTTP_CLIENT_SESSION_SSL, ) as r: if r.status != 200: detail = f"HTTP Error: {r.status}" @@ -1482,7 +1486,9 @@ async def download_file_stream( timeout = aiohttp.ClientTimeout(total=600) # Set the timeout async with aiohttp.ClientSession(timeout=timeout, trust_env=True) as session: - async with session.get(file_url, headers=headers) as response: + async with session.get( + file_url, headers=headers, ssl=AIOHTTP_CLIENT_SESSION_SSL + ) as response: total_size = int(response.headers.get("content-length", 0)) + current_size with open(file_path, "ab+") as file: diff --git a/backend/open_webui/routers/openai.py b/backend/open_webui/routers/openai.py index 0310014cf..2abe3cbb0 100644 --- a/backend/open_webui/routers/openai.py +++ b/backend/open_webui/routers/openai.py @@ -21,6 +21,7 @@ from open_webui.config import ( CACHE_DIR, ) from open_webui.env import ( + AIOHTTP_CLIENT_SESSION_SSL, AIOHTTP_CLIENT_TIMEOUT, AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST, ENABLE_FORWARD_USER_INFO_HEADERS, @@ -74,6 +75,7 @@ async def send_get_request(url, key=None, user: UserModel = None): else {} ), }, + ssl=AIOHTTP_CLIENT_SESSION_SSL, ) as response: return await response.json() except Exception as e: @@ -481,6 +483,7 @@ async def get_models( else {} ), }, + ssl=AIOHTTP_CLIENT_SESSION_SSL, ) as r: if r.status != 200: # Extract response error details if available @@ -561,6 +564,7 @@ async def verify_connection( else {} ), }, + ssl=AIOHTTP_CLIENT_SESSION_SSL, ) as r: if r.status != 200: # Extract response error details if available @@ -723,6 +727,7 @@ async def generate_chat_completion( else {} ), }, + ssl=AIOHTTP_CLIENT_SESSION_SSL, ) # Check if response is SSE @@ -802,6 +807,7 @@ async def proxy(path: str, request: Request, user=Depends(get_verified_user)): else {} ), }, + ssl=AIOHTTP_CLIENT_SESSION_SSL, ) r.raise_for_status() From a22be555cbd83be85914f59227db52c86e0db5b4 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Fri, 18 Apr 2025 01:26:42 -0700 Subject: [PATCH 037/161] refac --- src/lib/components/channel/Channel.svelte | 2 +- src/lib/components/chat/ChatControls.svelte | 2 +- src/lib/components/common/Drawer.svelte | 7 +++---- .../components/workspace/Knowledge/KnowledgeBase.svelte | 2 +- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/lib/components/channel/Channel.svelte b/src/lib/components/channel/Channel.svelte index ce2aa54f1..a0de69570 100644 --- a/src/lib/components/channel/Channel.svelte +++ b/src/lib/components/channel/Channel.svelte @@ -262,7 +262,7 @@ {#if threadId !== null} { + onClose={() => { threadId = null; }} > diff --git a/src/lib/components/chat/ChatControls.svelte b/src/lib/components/chat/ChatControls.svelte index 92c7e4d8d..64fd8d92d 100644 --- a/src/lib/components/chat/ChatControls.svelte +++ b/src/lib/components/chat/ChatControls.svelte @@ -140,7 +140,7 @@ {#if $showControls} { + onClose={() => { showControls.set(false); }} > diff --git a/src/lib/components/common/Drawer.svelte b/src/lib/components/common/Drawer.svelte index 2a0330013..50d5c7dac 100644 --- a/src/lib/components/common/Drawer.svelte +++ b/src/lib/components/common/Drawer.svelte @@ -1,13 +1,12 @@ {#key id} - { - dispatch('update', e.detail); - }} - on:code={(e) => { - dispatch('code', e.detail); - }} - /> + {/key} diff --git a/src/lib/components/chat/Messages/Markdown/MarkdownTokens.svelte b/src/lib/components/chat/Messages/Markdown/MarkdownTokens.svelte index 790cf5be9..ac73fb119 100644 --- a/src/lib/components/chat/Messages/Markdown/MarkdownTokens.svelte +++ b/src/lib/components/chat/Messages/Markdown/MarkdownTokens.svelte @@ -1,6 +1,6 @@ @@ -238,10 +240,9 @@ messageChildrenIds = history.messages[currentMessageId].childrenIds; } history.currentId = currentMessageId; - - await tick(); - await updateChat(); - triggerScroll(); + // await tick(); + // await updateChat(); + // triggerScroll(); } }} > diff --git a/src/lib/components/chat/Settings/Interface.svelte b/src/lib/components/chat/Settings/Interface.svelte index c6298173a..45399e616 100644 --- a/src/lib/components/chat/Settings/Interface.svelte +++ b/src/lib/components/chat/Settings/Interface.svelte @@ -855,7 +855,7 @@
- {$i18n.t('Scroll to bottom when switching between branches')} + {$i18n.t('Scroll On Branch Change')}
+ {#if notificationSound} +
+
+
+ {$i18n.t('Always Play Notification Sound')} +
+ + +
+
+ {/if} + {#if $user?.role === 'admin'}
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index a908fe20d..97976955d 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -26,7 +26,8 @@ isLastActiveTab, isApp, appInfo, - toolServers + toolServers, + playingNotificationSound } from '$lib/stores'; import { goto } from '$app/navigation'; import { page } from '$app/stores'; @@ -259,6 +260,16 @@ const { done, content, title } = data; if (done) { + if ($settings?.notificationSoundAlways ?? false) { + playingNotificationSound.set(true); + + const audio = new Audio(`/audio/notification.mp3`); + audio.play().finally(() => { + // Ensure the global state is reset after the sound finishes + playingNotificationSound.set(false); + }); + } + if ($isLastActiveTab) { if ($settings?.notificationEnabled ?? false) { new Notification(`${title} | Open WebUI`, { From 6fd082d55ffaf6eb226efdeebc7155e3693d2d01 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Sat, 19 Apr 2025 23:38:08 -0700 Subject: [PATCH 066/161] enh: html token (allow yt embed) --- .../chat/Messages/Markdown/HTMLToken.svelte | 49 +++++++++++++++++++ .../Markdown/MarkdownInlineTokens.svelte | 12 +---- .../Messages/Markdown/MarkdownTokens.svelte | 12 +---- 3 files changed, 53 insertions(+), 20 deletions(-) create mode 100644 src/lib/components/chat/Messages/Markdown/HTMLToken.svelte diff --git a/src/lib/components/chat/Messages/Markdown/HTMLToken.svelte b/src/lib/components/chat/Messages/Markdown/HTMLToken.svelte new file mode 100644 index 000000000..66ca2ea30 --- /dev/null +++ b/src/lib/components/chat/Messages/Markdown/HTMLToken.svelte @@ -0,0 +1,49 @@ + + +{#if token.type === 'html'} + {#if html && html.includes(']*src="https:\/\/www\.youtube\.com\/embed\/([a-zA-Z0-9_-]{11})"[^>]*><\/iframe>/)} + {@const match = token.text.match( + /]*src="https:\/\/www\.youtube\.com\/embed\/([a-zA-Z0-9_-]{11})"[^>]*><\/iframe>/ + )} + {@const ytId = match && match[1]} + {#if ytId} + + {/if} + {:else if token.text.includes(` {/if} - {:else if token.text.includes(` + {/if} {:else if token.text.includes(` {:else} diff --git a/src/lib/utils/index.ts b/src/lib/utils/index.ts index 2dbca7759..25aea433b 100644 --- a/src/lib/utils/index.ts +++ b/src/lib/utils/index.ts @@ -41,8 +41,7 @@ export const replaceTokens = (content, sourceIds, char, user) => { }, { regex: /{{HTML_FILE_ID_([a-f0-9-]+)}}/gi, - replacement: (_, fileId) => - `` + replacement: (_, fileId) => `` } ]; From 317032aa5c62ba108247755fea51f74ea7c63d4d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 May 2025 02:52:50 +0000 Subject: [PATCH 144/161] build(deps-dev): bump @typescript-eslint/parser from 6.21.0 to 8.31.1 Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 6.21.0 to 8.31.1. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.31.1/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-version: 8.31.1 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- package-lock.json | 144 +++++++++++++++++++++++++++++++++++++++++----- package.json | 2 +- 2 files changed, 131 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7cabf0974..14324a4e6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -82,7 +82,7 @@ "@tailwindcss/postcss": "^4.0.0", "@tailwindcss/typography": "^0.5.13", "@typescript-eslint/eslint-plugin": "^6.17.0", - "@typescript-eslint/parser": "^6.17.0", + "@typescript-eslint/parser": "^8.31.1", "cypress": "^13.15.0", "eslint": "^8.56.0", "eslint-config-prettier": "^9.1.0", @@ -3687,31 +3687,147 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.31.1.tgz", + "integrity": "sha512-oU/OtYVydhXnumd0BobL9rkJg7wFJ9bFFPmSmB/bf/XWN85hlViji59ko6bSKBXyseT9V8l+CN1nwmlbiN0G7Q==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", + "@typescript-eslint/scope-manager": "8.31.1", + "@typescript-eslint/types": "8.31.1", + "@typescript-eslint/typescript-estree": "8.31.1", + "@typescript-eslint/visitor-keys": "8.31.1", "debug": "^4.3.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.31.1.tgz", + "integrity": "sha512-BMNLOElPxrtNQMIsFHE+3P0Yf1z0dJqV9zLdDxN/xLlWMlXK/ApEsVEKzpizg9oal8bAT5Sc7+ocal7AC1HCVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.31.1", + "@typescript-eslint/visitor-keys": "8.31.1" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.31.1.tgz", + "integrity": "sha512-SfepaEFUDQYRoA70DD9GtytljBePSj17qPxFHA/h3eg6lPTqGJ5mWOtbXCk1YrVU1cTJRd14nhaXWFu0l2troQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.31.1.tgz", + "integrity": "sha512-kaA0ueLe2v7KunYOyWYtlf/QhhZb7+qh4Yw6Ni5kgukMIG+iP773tjgBiLWIXYumWCwEq3nLW+TUywEp8uEeag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.31.1", + "@typescript-eslint/visitor-keys": "8.31.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.31.1.tgz", + "integrity": "sha512-I+/rgqOVBn6f0o7NDTmAPWWC6NuqhV174lfYvAm9fUaWeiefLdux9/YI3/nLugEn9L8fcSi0XmpKi/r5u0nmpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.31.1", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" } }, "node_modules/@typescript-eslint/scope-manager": { diff --git a/package.json b/package.json index 8e3feab5a..fbaba4cd8 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@tailwindcss/postcss": "^4.0.0", "@tailwindcss/typography": "^0.5.13", "@typescript-eslint/eslint-plugin": "^6.17.0", - "@typescript-eslint/parser": "^6.17.0", + "@typescript-eslint/parser": "^8.31.1", "cypress": "^13.15.0", "eslint": "^8.56.0", "eslint-config-prettier": "^9.1.0", From c5fd40d951baba42111f6d8c205cf25cbf8a0b82 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 May 2025 02:53:05 +0000 Subject: [PATCH 145/161] build(deps): bump @tiptap/extension-code-block-lowlight Bumps [@tiptap/extension-code-block-lowlight](https://github.com/ueberdosis/tiptap/tree/HEAD/packages/extension-code-block-lowlight) from 2.10.0 to 2.11.9. - [Release notes](https://github.com/ueberdosis/tiptap/releases) - [Changelog](https://github.com/ueberdosis/tiptap/blob/@tiptap/extension-code-block-lowlight@2.11.9/packages/extension-code-block-lowlight/CHANGELOG.md) - [Commits](https://github.com/ueberdosis/tiptap/commits/@tiptap/extension-code-block-lowlight@2.11.9/packages/extension-code-block-lowlight) --- updated-dependencies: - dependency-name: "@tiptap/extension-code-block-lowlight" dependency-version: 2.11.9 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7cabf0974..c23899033 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "@sveltejs/adapter-node": "^2.0.0", "@sveltejs/svelte-virtual-list": "^3.0.1", "@tiptap/core": "^2.10.0", - "@tiptap/extension-code-block-lowlight": "^2.10.0", + "@tiptap/extension-code-block-lowlight": "^2.11.9", "@tiptap/extension-highlight": "^2.10.0", "@tiptap/extension-placeholder": "^2.10.0", "@tiptap/extension-typography": "^2.10.0", @@ -2969,9 +2969,9 @@ } }, "node_modules/@tiptap/extension-code-block-lowlight": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block-lowlight/-/extension-code-block-lowlight-2.10.0.tgz", - "integrity": "sha512-dAv03XIHT5h+sdFmJzvx2FfpfFOOK9SBKHflRUdqTa8eA+0VZNAcPRjvJWVEWqts1fKZDJj774mO28NlhFzk9Q==", + "version": "2.11.9", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block-lowlight/-/extension-code-block-lowlight-2.11.9.tgz", + "integrity": "sha512-bB8N59A2aU18/ieyKRZAI0J0xyimmUckYePqBkUX8HFnq8yf9HsM0NPFpqZdK0eqjnZYCXcNwAI3YluLsHuutw==", "license": "MIT", "funding": { "type": "github", diff --git a/package.json b/package.json index 8e3feab5a..f100f16af 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "@sveltejs/adapter-node": "^2.0.0", "@sveltejs/svelte-virtual-list": "^3.0.1", "@tiptap/core": "^2.10.0", - "@tiptap/extension-code-block-lowlight": "^2.10.0", + "@tiptap/extension-code-block-lowlight": "^2.11.9", "@tiptap/extension-highlight": "^2.10.0", "@tiptap/extension-placeholder": "^2.10.0", "@tiptap/extension-typography": "^2.10.0", From dc5107a47370cc7ac9217658887bcb7d043b77e5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 May 2025 02:53:26 +0000 Subject: [PATCH 146/161] build(deps): bump prosemirror-schema-list from 1.4.1 to 1.5.1 Bumps [prosemirror-schema-list](https://github.com/prosemirror/prosemirror-schema-list) from 1.4.1 to 1.5.1. - [Changelog](https://github.com/ProseMirror/prosemirror-schema-list/blob/master/CHANGELOG.md) - [Commits](https://github.com/prosemirror/prosemirror-schema-list/compare/1.4.1...1.5.1) --- updated-dependencies: - dependency-name: prosemirror-schema-list dependency-version: 1.5.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 9 +++++---- package.json | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7cabf0974..8ad00c472 100644 --- a/package-lock.json +++ b/package-lock.json @@ -59,7 +59,7 @@ "prosemirror-markdown": "^1.13.1", "prosemirror-model": "^1.23.0", "prosemirror-schema-basic": "^1.2.3", - "prosemirror-schema-list": "^1.4.1", + "prosemirror-schema-list": "^1.5.1", "prosemirror-state": "^1.4.3", "prosemirror-view": "^1.34.3", "pyodide": "^0.27.3", @@ -9860,9 +9860,10 @@ } }, "node_modules/prosemirror-schema-list": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.4.1.tgz", - "integrity": "sha512-jbDyaP/6AFfDfu70VzySsD75Om2t3sXTOdl5+31Wlxlg62td1haUpty/ybajSfJ1pkGadlOfwQq9kgW5IMo1Rg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz", + "integrity": "sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==", + "license": "MIT", "dependencies": { "prosemirror-model": "^1.0.0", "prosemirror-state": "^1.0.0", diff --git a/package.json b/package.json index 8e3feab5a..d00c2de09 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "prosemirror-markdown": "^1.13.1", "prosemirror-model": "^1.23.0", "prosemirror-schema-basic": "^1.2.3", - "prosemirror-schema-list": "^1.4.1", + "prosemirror-schema-list": "^1.5.1", "prosemirror-state": "^1.4.3", "prosemirror-view": "^1.34.3", "pyodide": "^0.27.3", From efc163fedeeef6e2a3789757a8d9b645e539a4db Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 May 2025 02:53:31 +0000 Subject: [PATCH 147/161] build(deps): bump codemirror-lang-hcl from 0.0.0-beta.2 to 0.1.0 Bumps codemirror-lang-hcl from 0.0.0-beta.2 to 0.1.0. --- updated-dependencies: - dependency-name: codemirror-lang-hcl dependency-version: 0.1.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7cabf0974..4b0671ca4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,7 +30,7 @@ "bits-ui": "^0.19.7", "codemirror": "^6.0.1", "codemirror-lang-elixir": "^4.0.0", - "codemirror-lang-hcl": "^0.0.0-beta.2", + "codemirror-lang-hcl": "^0.1.0", "crc-32": "^1.2.2", "dayjs": "^1.11.10", "dompurify": "^3.2.5", @@ -4995,9 +4995,9 @@ } }, "node_modules/codemirror-lang-hcl": { - "version": "0.0.0-beta.2", - "resolved": "https://registry.npmjs.org/codemirror-lang-hcl/-/codemirror-lang-hcl-0.0.0-beta.2.tgz", - "integrity": "sha512-R3ew7Z2EYTdHTMXsWKBW9zxnLoLPYO+CrAa3dPZjXLrIR96Q3GR4cwJKF7zkSsujsnWgwRQZonyWpXYXfhQYuQ==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/codemirror-lang-hcl/-/codemirror-lang-hcl-0.1.0.tgz", + "integrity": "sha512-duwKEaQDhkJWad4YQ9pv4282BS6hCdR+gS/qTAj3f9bypXNNZ42bIN43h9WK3DjyZRENtVlUQdrQM1sA44wHmA==", "license": "MIT", "dependencies": { "@codemirror/language": "^6.0.0", diff --git a/package.json b/package.json index 8e3feab5a..b39956f08 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "bits-ui": "^0.19.7", "codemirror": "^6.0.1", "codemirror-lang-elixir": "^4.0.0", - "codemirror-lang-hcl": "^0.0.0-beta.2", + "codemirror-lang-hcl": "^0.1.0", "crc-32": "^1.2.2", "dayjs": "^1.11.10", "dompurify": "^3.2.5", From 0b84863d762c5281fc150b9fedab0ba08cbab6a9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 May 2025 02:54:49 +0000 Subject: [PATCH 148/161] build(deps): bump rapidocr-onnxruntime from 1.3.24 to 1.4.4 in /backend Bumps [rapidocr-onnxruntime](https://github.com/RapidAI/RapidOCR) from 1.3.24 to 1.4.4. - [Release notes](https://github.com/RapidAI/RapidOCR/releases) - [Commits](https://github.com/RapidAI/RapidOCR/compare/v1.3.24...v1.4.4) --- updated-dependencies: - dependency-name: rapidocr-onnxruntime dependency-version: 1.4.4 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- backend/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/requirements.txt b/backend/requirements.txt index 5ba6a84d4..1073225de 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -81,7 +81,7 @@ azure-ai-documentintelligence==1.0.0 pillow==11.1.0 opencv-python-headless==4.11.0.86 -rapidocr-onnxruntime==1.3.24 +rapidocr-onnxruntime==1.4.4 rank-bm25==0.2.2 onnxruntime==1.20.1 From 10f55d39d2e69044171f7f6c94de32a5d49e08b9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 May 2025 02:54:52 +0000 Subject: [PATCH 149/161] build(deps): update pytest requirement in /backend Updates the requirements on [pytest](https://github.com/pytest-dev/pytest) to permit the latest version. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/8.3.2...8.3.5) --- updated-dependencies: - dependency-name: pytest dependency-version: 8.3.5 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- backend/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/requirements.txt b/backend/requirements.txt index 5ba6a84d4..5bb326859 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -107,7 +107,7 @@ google-auth-oauthlib ## Tests docker~=7.1.0 -pytest~=8.3.2 +pytest~=8.3.5 pytest-docker~=3.1.1 googleapis-common-protos==1.63.2 From 753d530cd024cb8659d7505d0442d10c4e152229 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 May 2025 02:54:56 +0000 Subject: [PATCH 150/161] build(deps): bump elasticsearch from 8.17.1 to 9.0.1 in /backend Bumps [elasticsearch](https://github.com/elastic/elasticsearch-py) from 8.17.1 to 9.0.1. - [Release notes](https://github.com/elastic/elasticsearch-py/releases) - [Commits](https://github.com/elastic/elasticsearch-py/compare/v8.17.1...v9.0.1) --- updated-dependencies: - dependency-name: elasticsearch dependency-version: 9.0.1 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- backend/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/requirements.txt b/backend/requirements.txt index 5ba6a84d4..f3f84b4b6 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -49,7 +49,7 @@ pymilvus==2.5.0 qdrant-client~=1.12.0 opensearch-py==2.8.0 playwright==1.49.1 # Caution: version must match docker-compose.playwright.yaml -elasticsearch==8.17.1 +elasticsearch==9.0.1 pinecone==6.0.2 transformers From 4eaaeb188892c2fb65f31b3c78486de99eeab6c3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 May 2025 02:54:59 +0000 Subject: [PATCH 151/161] build(deps): bump loguru from 0.7.2 to 0.7.3 in /backend Bumps [loguru](https://github.com/Delgan/loguru) from 0.7.2 to 0.7.3. - [Release notes](https://github.com/Delgan/loguru/releases) - [Changelog](https://github.com/Delgan/loguru/blob/master/CHANGELOG.rst) - [Commits](https://github.com/Delgan/loguru/compare/0.7.2...0.7.3) --- updated-dependencies: - dependency-name: loguru dependency-version: 0.7.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- backend/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/requirements.txt b/backend/requirements.txt index 5ba6a84d4..8a414ed49 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -31,7 +31,7 @@ APScheduler==3.10.4 RestrictedPython==8.0 -loguru==0.7.2 +loguru==0.7.3 asgiref==3.8.1 # AI libraries From a7cbf62c6812325ef88657759886985940b853f2 Mon Sep 17 00:00:00 2001 From: hurxxxx Date: Thu, 1 May 2025 12:43:19 +0900 Subject: [PATCH 152/161] update Korean translation --- src/lib/i18n/locales/ko-KR/translation.json | 483 ++++++++++---------- 1 file changed, 241 insertions(+), 242 deletions(-) diff --git a/src/lib/i18n/locales/ko-KR/translation.json b/src/lib/i18n/locales/ko-KR/translation.json index f92bfa659..0f18e9e66 100644 --- a/src/lib/i18n/locales/ko-KR/translation.json +++ b/src/lib/i18n/locales/ko-KR/translation.json @@ -1,14 +1,14 @@ { - "-1 for no limit, or a positive integer for a specific limit": "", + "-1 for no limit, or a positive integer for a specific limit": "-1은 제한 없음을 의미하며, 양의 정수는 특정 제한을 나타냅니다", "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "만료 없음은 's', 'm', 'h', 'd', 'w' 아니면 '-1' 중 하나를 사용하세요.", "(e.g. `sh webui.sh --api --api-auth username_password`)": "(예: `sh webui.sh --api --api-auth 사용자이름_비밀번호`)", "(e.g. `sh webui.sh --api`)": "(예: `sh webui.sh --api`)", "(latest)": "(최근)", "(Ollama)": "", "{{ models }}": "{{ models }}", - "{{COUNT}} Available Tools": "", - "{{COUNT}} hidden lines": "", - "{{COUNT}} Replies": "", + "{{COUNT}} Available Tools": "사용 가능한 도구 {{COUNT}}개", + "{{COUNT}} hidden lines": "숨겨진 줄 {{COUNT}}개", + "{{COUNT}} Replies": "답글 {{COUNT}}개", "{{user}}'s Chats": "{{user}}의 채팅", "{{webUIName}} Backend Required": "{{webUIName}} 백엔드가 필요합니다.", "*Prompt node ID(s) are required for image generation": "사진 생성을 위해 프롬프트 노드 ID가 필요합니다", @@ -16,7 +16,7 @@ "A task model is used when performing tasks such as generating titles for chats and web search queries": "작업 모델은 채팅 및 웹 검색 쿼리에 대한 제목 생성 등의 작업 수행 시 사용됩니다.", "a user": "사용자", "About": "정보", - "Accept autocomplete generation / Jump to prompt variable": "", + "Accept autocomplete generation / Jump to prompt variable": "자동 완성 생성 수락 / 프롬프트 변수로 이동", "Access": "접근", "Access Control": "접근 제어", "Accessible to all users": "모든 사용자가 접근 가능", @@ -46,7 +46,7 @@ "Add text content": "글 추가", "Add User": "사용자 추가", "Add User Group": "사용자 그룹 추가", - "Adjusting these settings will apply changes universally to all users.": "위와 같이 설정시 모든 사용자에게 적용됩니다.", + "Adjusting these settings will apply changes universally to all users.": "이 설정을 조정하면 모든 사용자에게 변경 사항이 일괄 적용됩니다.", "admin": "관리자", "Admin": "관리자", "Admin Panel": "관리자 패널", @@ -62,27 +62,27 @@ "Allow Chat Delete": "채팅 삭제 허용", "Allow Chat Deletion": "채팅 삭제 허용", "Allow Chat Edit": "채팅 수정 허용", - "Allow Chat Export": "", - "Allow Chat Share": "", + "Allow Chat Export": "채팅 내보내기 허용", + "Allow Chat Share": "채팅 공유 허용", "Allow File Upload": "파일 업로드 허용", - "Allow Multiple Models in Chat": "", + "Allow Multiple Models in Chat": "채팅에서 여러 모델 허용", "Allow non-local voices": "외부 음성 허용", - "Allow Speech to Text": "", + "Allow Speech to Text": "음성 텍스트 변환 허용", "Allow Temporary Chat": "임시 채팅 허용", - "Allow Text to Speech": "", + "Allow Text to Speech": "텍스트 음성 변환 허용", "Allow User Location": "사용자 위치 활용 허용", "Allow Voice Interruption in Call": "음성 기능에서 음성 방해 허용", - "Allowed Endpoints": "", + "Allowed Endpoints": "허용 엔드포인트", "Already have an account?": "이미 계정이 있으신가요?", - "Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out.": "", - "Always": "", - "Always Collapse Code Blocks": "", - "Always Expand Details": "", - "Always Play Notification Sound": "", + "Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out.": "top_p의 대안으로, 품질과 다양성 간의 균형을 보장하는 것을 목표로 합니다. 매개변수 p는 가장 가능성이 높은 토큰의 확률 대비 고려될 토큰의 최소 확률을 나타냅니다. 예를 들어, p=0.05이고 가장 가능성이 높은 토큰의 확률이 0.9인 경우, 값이 0.045보다 작은 로짓은 필터링됩니다.", + "Always": "항상", + "Always Collapse Code Blocks": "항상 코드 블록 접기", + "Always Expand Details": "항상 세부 정보 펼치기", + "Always Play Notification Sound": "항상 알림 소리 재생", "Amazing": "놀라움", "an assistant": "어시스턴트", - "Analyzed": "", - "Analyzing...": "", + "Analyzed": "분석됨", + "Analyzing...": "분석 중...", "and": "그리고", "and {{COUNT}} more": "그리고 {{COUNT}} 더", "and create a new shared link.": "새로운 공유 링크를 생성합니다.", @@ -99,8 +99,8 @@ "Archive": "보관", "Archive All Chats": "모든 채팅 보관", "Archived Chats": "보관된 채팅", - "archived-chat-export": "", - "Are you sure you want to clear all memories? This action cannot be undone.": "", + "archived-chat-export": "보관된 채팅 내보내기", + "Are you sure you want to clear all memories? This action cannot be undone.": "정말 모든 메모리를 지우시겠습니까? 이 작업은 되돌릴 수 없습니다.", "Are you sure you want to delete this channel?": "정말 이 채널을 삭제하시겠습니까?", "Are you sure you want to delete this message?": "정말 이 메세지를 삭제하시겠습니까?", "Are you sure you want to unarchive all archived chats?": "정말 보관된 모든 채팅을 보관 해제하시겠습니까?", @@ -110,16 +110,16 @@ "Ask": "", "Ask a question": "질문하기", "Assistant": "어시스턴트", - "Attach file from knowledge": "", + "Attach file from knowledge": "지식 베이스에서 파일 첨부", "Attention to detail": "세부 사항에 대한 주의", - "Attribute for Mail": "", - "Attribute for Username": "", + "Attribute for Mail": "메일 속성", + "Attribute for Username": "사용자 이름 속성", "Audio": "오디오", "August": "8월", - "Auth": "", - "Authenticate": "", - "Authentication": "", - "Auto": "", + "Auth": "인증", + "Authenticate": "인증하다", + "Authentication": "인증", + "Auto": "자동", "Auto-Copy Response to Clipboard": "응답을 클립보드에 자동 복사", "Auto-playback response": "응답 자동 재생", "Autocomplete Generation": "자동완성 생성", @@ -129,7 +129,7 @@ "AUTOMATIC1111 Base URL": "AUTOMATIC1111 기본 URL", "AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 기본 URL 설정이 필요합니다.", "Available list": "가능한 목록", - "Available Tools": "", + "Available Tools": "사용 가능한 도구", "available!": "사용 가능!", "Awful": "형편없음", "Azure AI Speech": "Azure AI 음성", @@ -141,28 +141,28 @@ "Batch Size (num_batch)": "배치 크기 (num_batch)", "before": "이전", "Being lazy": "게으름 피우기", - "Beta": "", + "Beta": "베타", "Bing Search V7 Endpoint": "Bing Search V7 엔드포인트", "Bing Search V7 Subscription Key": "Bing Search V7 구독 키", "Bocha Search API Key": "", "Boosting or penalizing specific tokens for constrained responses. Bias values will be clamped between -100 and 100 (inclusive). (Default: none)": "", "Brave Search API Key": "Brave Search API 키", - "By {{name}}": "", - "Bypass Embedding and Retrieval": "", - "Calendar": "", + "By {{name}}": "작성자: {{name}}", + "Bypass Embedding and Retrieval": "임베딩 검색 우회", + "Calendar": "캘린더", "Call": "음성 기능", "Call feature is not supported when using Web STT engine": "웹 STT 엔진 사용 시, 음성 기능은 지원되지 않습니다.", "Camera": "카메라", "Cancel": "취소", "Capabilities": "기능", - "Capture": "", - "Certificate Path": "", + "Capture": "캡처", + "Certificate Path": "인증서 경로", "Change Password": "비밀번호 변경", - "Channel Name": "", + "Channel Name": "채널 이름", "Channels": "채널", "Character": "캐릭터", - "Character limit for autocomplete generation input": "", - "Chart new frontiers": "", + "Character limit for autocomplete generation input": "자동 완성 생성 입력 문자 제한", + "Chart new frontiers": "새로운 영역 개척", "Chat": "채팅", "Chat Background Image": "채팅 배경 이미지", "Chat Bubble UI": "버블형 채팅 UI", @@ -181,14 +181,14 @@ "Ciphers": "", "Citation": "인용", "Clear memory": "메모리 초기화", - "Clear Memory": "", - "click here": "", - "Click here for filter guides.": "", + "Clear Memory": "메모리 지우기", + "click here": "여기를 클릭하세요", + "Click here for filter guides.": "필터 가이드를 보려면 여기를 클릭하세요.", "Click here for help.": "도움말을 보려면 여기를 클릭하세요.", "Click here to": "여기를 클릭하면", "Click here to download user import template file.": "사용자 삽입 템플렛 파일을 다운받으려면 여기를 클릭하세요", "Click here to learn more about faster-whisper and see the available models.": "빠른 속삭임에 대해 배우거나 가능한 모델을 보려면 여기를 클릭하세요", - "Click here to see available models.": "", + "Click here to see available models.": "사용 가능한 모델을 보려면 여기를 클릭하세요.", "Click here to select": "선택하려면 여기를 클릭하세요.", "Click here to select a csv file.": "csv 파일을 선택하려면 여기를 클릭하세요.", "Click here to select a py file.": "py 파일을 선택하려면 여기를 클릭하세요.", @@ -197,22 +197,22 @@ "Click on the user role button to change a user's role.": "사용자 역할 버튼을 클릭하여 사용자의 역할을 변경하세요.", "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "클립보드 사용 권한이 거절되었습니다. 필요한 접근을 사용하기 위해 브라우져 설정을 확인 부탁드립니다.", "Clone": "복제", - "Clone Chat": "", - "Clone of {{TITLE}}": "", + "Clone Chat": "채팅 복제", + "Clone of {{TITLE}}": "{{TITLE}}의 복제본", "Close": "닫기", "Code execution": "코드 실행", - "Code Execution": "", - "Code Execution Engine": "", - "Code Execution Timeout": "", + "Code Execution": "코드 실행", + "Code Execution Engine": "코드 실행 엔진", + "Code Execution Timeout": "코드 실행 시간 초과", "Code formatted successfully": "성공적으로 코드가 생성되었습니다", - "Code Interpreter": "", - "Code Interpreter Engine": "", - "Code Interpreter Prompt Template": "", - "Collapse": "", + "Code Interpreter": "코드 인터프리터", + "Code Interpreter Engine": "코드 인터프리터 엔진", + "Code Interpreter Prompt Template": "코드 인터프리터 프롬프트 템플릿", + "Collapse": "접기", "Collection": "컬렉션", - "Color": "", + "Color": "색상", "ComfyUI": "ComfyUI", - "ComfyUI API Key": "", + "ComfyUI API Key": "ComfyUI API 키", "ComfyUI Base URL": "ComfyUI 기본 URL", "ComfyUI Base URL is required.": "ComfyUI 기본 URL이 필요합니다.", "ComfyUI Workflow": "ComfyUI 워크플로", @@ -220,41 +220,41 @@ "Command": "명령", "Completions": "완성됨", "Concurrent Requests": "동시 요청 수", - "Configure": "", + "Configure": "구성", "Confirm": "확인", "Confirm Password": "비밀번호 확인", "Confirm your action": "액션 확인", "Confirm your new password": "새로운 비밀번호를 한 번 더 입력해 주세요", - "Connect to your own OpenAI compatible API endpoints.": "", - "Connect to your own OpenAPI compatible external tool servers.": "", - "Connection failed": "", - "Connection successful": "", + "Connect to your own OpenAI compatible API endpoints.": "OpenAI 호환 API 엔드포인트에 연결합니다.", + "Connect to your own OpenAPI compatible external tool servers.": "OpenAPI 호환 외부 도구 서버에 연결합니다.", + "Connection failed": "연결 실패", + "Connection successful": "연결 성공", "Connections": "연결", - "Connections saved successfully": "", - "Constrains effort on reasoning for reasoning models. Only applicable to reasoning models from specific providers that support reasoning effort.": "", + "Connections saved successfully": "연결이 성공적으로 저장되었습니다", + "Constrains effort on reasoning for reasoning models. Only applicable to reasoning models from specific providers that support reasoning effort.": "추론 모델의 추론 난이도를 제한합니다. 추론 난이도를 지원하는 특정 공급자의 추론 모델에만 적용됩니다.", "Contact Admin for WebUI Access": "WebUI 접속을 위해서는 관리자에게 연락에 연락하십시오", "Content": "내용", - "Content Extraction Engine": "", + "Content Extraction Engine": "콘텐츠 추출 엔진", "Context Length": "내용 길이", "Continue Response": "대화 계속", "Continue with {{provider}}": "{{provider}}로 계속", "Continue with Email": "", "Continue with LDAP": "", "Control how message text is split for TTS requests. 'Punctuation' splits into sentences, 'paragraphs' splits into paragraphs, and 'none' keeps the message as a single string.": "TTS 요청에 메시지가 어떻게 나뉘어지는지 제어하십시오. '문장 부호'는 문장으로 나뉘고, '문단'은 문단으로 나뉘고, '없음'은 메세지를 하나의 문자열로 인식합니다.", - "Control the repetition of token sequences in the generated text. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 1.1) will be more lenient. At 1, it is disabled.": "", + "Control the repetition of token sequences in the generated text. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 1.1) will be more lenient. At 1, it is disabled.": "생성된 텍스트에서 토큰 시퀀스의 반복을 제어합니다. 높은 값(예: 1.5)은 반복에 더 강한 페널티를 부과하고, 낮은 값(예: 1.1)은 더 관대합니다. 1일 경우 비활성화됩니다.", "Controls": "제어", - "Controls the balance between coherence and diversity of the output. A lower value will result in more focused and coherent text.": "", + "Controls the balance between coherence and diversity of the output. A lower value will result in more focused and coherent text.": "출력의 일관성과 다양성 간의 균형을 제어합니다. 낮은 값은 더 집중되고 일관성 있는 텍스트를 생성합니다.", "Copied": "복사됨", "Copied shared chat URL to clipboard!": "채팅 공유 URL이 클립보드에 복사되었습니다!", "Copied to clipboard": "클립보드에 복사되었습니다", "Copy": "복사", - "Copy Formatted Text": "", + "Copy Formatted Text": "서식 있는 텍스트 복사", "Copy last code block": "마지막 코드 블록 복사", "Copy last response": "마지막 응답 복사", "Copy Link": "링크 복사", "Copy to clipboard": "클립보드에 복사", "Copying to clipboard was successful!": "성공적으로 클립보드에 복사되었습니다!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from Open WebUI.": "Open WebUI의 요청을 허용하려면 공급자가 CORS를 올바르게 구성해야 합니다.", "Create": "생성", "Create a knowledge base": "지식 기반 생성", "Create a model": "모델 생성", @@ -269,18 +269,18 @@ "Created At": "생성일", "Created by": "생성자", "CSV Import": "CSV 가져오기", - "Ctrl+Enter to Send": "", + "Ctrl+Enter to Send": "Ctrl+Enter로 보내기", "Current Model": "현재 모델", "Current Password": "현재 비밀번호", "Custom": "사용자 정의", - "Danger Zone": "", + "Danger Zone": "위험 기능", "Dark": "다크", "Database": "데이터베이스", "December": "12월", "Default": "기본값", "Default (Open AI)": "기본값 (Open AI)", "Default (SentenceTransformers)": "기본값 (SentenceTransformers)", - "Default mode works with a wider range of models by calling tools once before execution. Native mode leverages the model’s built-in tool-calling capabilities, but requires the model to inherently support this feature.": "", + "Default mode works with a wider range of models by calling tools once before execution. Native mode leverages the model's built-in tool-calling capabilities, but requires the model to inherently support this feature.": "기본 모드는 실행 전에 도구를 한 번 호출하여 더 넓은 범위의 모델과 작동합니다. 네이티브 모드는 모델의 내장 도구 호출 기능을 활용하지만, 모델이 본질적으로 이 기능을 지원해야 합니다.", "Default Model": "기본 모델", "Default model updated": "기본 모델이 업데이트되었습니다.", "Default Models": "기본 모델", @@ -288,8 +288,8 @@ "Default permissions updated successfully": "성공적으로 기본 권한이 수정되었습니다", "Default Prompt Suggestions": "기본 프롬프트 제안", "Default to 389 or 636 if TLS is enabled": "", - "Default to ALL": "", - "Default to segmented retrieval for focused and relevant content extraction, this is recommended for most cases.": "", + "Default to ALL": "기본값: 모두", + "Default to segmented retrieval for focused and relevant content extraction, this is recommended for most cases.": "집중적이고 관련성 있는 콘텐츠 추출을 위해 세분화된 검색을 기본값으로 사용합니다. 대부분의 경우 권장됩니다.", "Default User Role": "기본 사용자 역할", "Delete": "삭제", "Delete a model": "모델 삭제", @@ -300,8 +300,8 @@ "Delete chat?": "채팅을 삭제하겠습니까?", "Delete folder?": "폴더를 삭제하시겠습니까?", "Delete function?": "함수를 삭제하시겠습니까?", - "Delete Message": "", - "Delete message?": "", + "Delete Message": "메시지 삭제", + "Delete message?": "메시지를 삭제하시겠습니까?", "Delete prompt?": "프롬프트를 삭제하시겠습니까?", "delete this link": "이 링크를 삭제합니다.", "Delete tool?": "도구를 삭제하시겠습니까?", @@ -311,20 +311,20 @@ "Deleted User": "삭제된 사용자", "Describe your knowledge base and objectives": "지식 기반에 대한 설명과 목적을 입력하세요", "Description": "설명", - "Detect Artifacts Automatically": "", + "Detect Artifacts Automatically": "아티팩트 자동 감지", "Didn't fully follow instructions": "완전히 지침을 따르지 않음", "Direct": "", - "Direct Connections": "", - "Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "", - "Direct Connections settings updated": "", + "Direct Connections": "직접 연결", + "Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "직접 연결을 통해 사용자는 자체 OpenAI 호환 API 엔드포인트에 연결할 수 있습니다.", + "Direct Connections settings updated": "직접 연결 설정이 업데이트되었습니다", "Direct Tool Servers": "", "Disabled": "제한됨", "Discover a function": "함수 검색", "Discover a model": "모델 검색", "Discover a prompt": "프롬프트 검색", "Discover a tool": "도구 검색", - "Discover how to use Open WebUI and seek support from the community.": "", - "Discover wonders": "", + "Discover how to use Open WebUI and seek support from the community.": "Open WebUI 사용 방법을 알아보고 커뮤니티에서 지원을 받으세요.", + "Discover wonders": "놀라움을 체험하세요", "Discover, download, and explore custom functions": "사용자 정의 함수 검색, 다운로드 및 탐색", "Discover, download, and explore custom prompts": "사용자 정의 프롬프트 검색, 다운로드 및 탐색", "Discover, download, and explore custom tools": "사용자 정의 도구 검색, 다운로드 및 탐색", @@ -333,145 +333,145 @@ "Display": "", "Display Emoji in Call": "음성기능에서 이모지 표시", "Display the username instead of You in the Chat": "채팅에서 '당신' 대신 사용자 이름 표시", - "Displays citations in the response": "", - "Dive into knowledge": "", + "Displays citations in the response": "응답에 인용 표시", + "Dive into knowledge": "지식 탐구", "Do not install functions from sources you do not fully trust.": "불분명한 출처를 가진 함수를 설치하지마세요", "Do not install tools from sources you do not fully trust.": "불분명한 출처를 가진 도구를 설치하지마세요", "Docling": "", - "Docling Server URL required.": "", + "Docling Server URL required.": "Docling 서버 URL이 필요합니다.", "Document": "문서", "Document Intelligence": "", - "Document Intelligence endpoint and key required.": "", + "Document Intelligence endpoint and key required.": "Document Intelligence 엔드포인트 및 키가 필요합니다.", "Documentation": "문서 조사", "Documents": "문서", "does not make any external connections, and your data stays securely on your locally hosted server.": "외부와 어떠한 연결도 하지 않으며, 데이터는 로컬에서 호스팅되는 서버에 안전하게 유지됩니다.", - "Domain Filter List": "", + "Domain Filter List": "도메인 필터 목록", "Don't have an account?": "계정이 없으신가요?", "don't install random functions from sources you don't trust.": "불분명한 출처를 가진 임의의 함수를 설치하지마세요", "don't install random tools from sources you don't trust.": "불분명한 출처를 가진 임의의 도구를 설치하지마세요", "Don't like the style": "스타일이 마음에 안 드시나요?", "Done": "완료됨", "Download": "다운로드", - "Download as SVG": "", + "Download as SVG": "SVG로 다운로드", "Download canceled": "다운로드 취소", "Download Database": "데이터베이스 다운로드", - "Drag and drop a file to upload or select a file to view": "", + "Drag and drop a file to upload or select a file to view": "파일을 끌어다 놓아 업로드하거나 파일을 선택하여 보기", "Draw": "그리기", "Drop any files here to add to the conversation": "대화에 추가할 파일을 여기에 드롭하세요.", "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "예: '30초','10분'. 유효한 시간 단위는 '초', '분', '시'입니다.", - "e.g. \"json\" or a JSON schema": "", - "e.g. 60": "", - "e.g. A filter to remove profanity from text": "", - "e.g. My Filter": "", - "e.g. My Tools": "", - "e.g. my_filter": "", - "e.g. my_tools": "", - "e.g. Tools for performing various operations": "", - "e.g., en-US,ja-JP (leave blank for auto-detect)": "", + "e.g. \"json\" or a JSON schema": "예: \\\"json\\\" 또는 JSON 스키마", + "e.g. 60": "예: 60", + "e.g. A filter to remove profanity from text": "예: 텍스트에서 비속어를 제거하는 필터", + "e.g. My Filter": "예: 내 필터", + "e.g. My Tools": "예: 내 도구", + "e.g. my_filter": "예: my_filter", + "e.g. my_tools": "예: my_tools", + "e.g. Tools for performing various operations": "예: 다양한 작업을 수행하는 도구", + "e.g., en-US,ja-JP (leave blank for auto-detect)": "예: en-US, ja-JP (자동 감지를 위해 비워 두세요)", "Edit": "편집", "Edit Arena Model": "아레나 모델 편집", - "Edit Channel": "", - "Edit Connection": "", - "Edit Default Permissions": "", + "Edit Channel": "채널 편집", + "Edit Connection": "연결 편집", + "Edit Default Permissions": "기본 권한 편집", "Edit Memory": "메모리 편집", "Edit User": "사용자 편집", - "Edit User Group": "", + "Edit User Group": "사용자 그룹 편집", "ElevenLabs": "ElevenLabs", "Email": "이메일", "Embark on adventures": "", - "Embedding": "", + "Embedding": "임베딩", "Embedding Batch Size": "임베딩 배치 크기", "Embedding Model": "임베딩 모델", "Embedding Model Engine": "임베딩 모델 엔진", "Embedding model set to \"{{embedding_model}}\"": "임베딩 모델을 \"{{embedding_model}}\"로 설정함", "Enable API Key": "API 키 활성화", - "Enable autocomplete generation for chat messages": "", - "Enable Code Execution": "", - "Enable Code Interpreter": "", + "Enable autocomplete generation for chat messages": "채팅 메시지에 대한 자동 완성 생성 활성화", + "Enable Code Execution": "코드 실행 활성화", + "Enable Code Interpreter": "코드 인터프리터 활성화", "Enable Community Sharing": "커뮤니티 공유 활성화", - "Enable Memory Locking (mlock) to prevent model data from being swapped out of RAM. This option locks the model's working set of pages into RAM, ensuring that they will not be swapped out to disk. This can help maintain performance by avoiding page faults and ensuring fast data access.": "", - "Enable Memory Mapping (mmap) to load model data. This option allows the system to use disk storage as an extension of RAM by treating disk files as if they were in RAM. This can improve model performance by allowing for faster data access. However, it may not work correctly with all systems and can consume a significant amount of disk space.": "", + "Enable Memory Locking (mlock) to prevent model data from being swapped out of RAM. This option locks the model's working set of pages into RAM, ensuring that they will not be swapped out to disk. This can help maintain performance by avoiding page faults and ensuring fast data access.": "모델 데이터가 RAM에서 스왑 아웃되는 것을 방지하기 위해 메모리 잠금(mlock)을 활성화합니다. 이 옵션은 모델의 작업 페이지 집합을 RAM에 잠가 디스크로 스왑 아웃되지 않도록 보장합니다. 이는 페이지 폴트를 피하고 빠른 데이터 액세스를 보장하여 성능을 유지하는 데 도움이 될 수 있습니다.", + "Enable Memory Mapping (mmap) to load model data. This option allows the system to use disk storage as an extension of RAM by treating disk files as if they were in RAM. This can improve model performance by allowing for faster data access. However, it may not work correctly with all systems and can consume a significant amount of disk space.": "모델 데이터를 로드하기 위해 메모리 매핑(mmap)을 활성화합니다. 이 옵션을 사용하면 시스템이 디스크 파일을 RAM에 있는 것처럼 처리하여 디스크 스토리지를 RAM의 확장으로 사용할 수 있습니다. 이는 더 빠른 데이터 액세스를 허용하여 모델 성능을 향상시킬 수 있습니다. 그러나 모든 시스템에서 올바르게 작동하지 않을 수 있으며 상당한 양의 디스크 공간을 소비할 수 있습니다.", "Enable Message Rating": "메시지 평가 활성화", - "Enable Mirostat sampling for controlling perplexity.": "", + "Enable Mirostat sampling for controlling perplexity.": "퍼플렉서티 제어를 위해 Mirostat 샘플링 활성화", "Enable New Sign Ups": "새 회원가입 활성화", "Enabled": "활성화됨", - "Enforce Temporary Chat": "", + "Enforce Temporary Chat": "임시 채팅 강제 적용", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "CSV 파일에 이름, 이메일, 비밀번호, 역할 4개의 열이 순서대로 포함되어 있는지 확인하세요.", "Enter {{role}} message here": "여기에 {{role}} 메시지 입력", "Enter a detail about yourself for your LLMs to recall": "자신에 대한 세부사항을 입력하여 LLM들이 기억할 수 있도록 하세요.", "Enter api auth string (e.g. username:password)": "API 인증 문자 입력 (예: 사용자 이름:비밀번호)", - "Enter Application DN": "", - "Enter Application DN Password": "", + "Enter Application DN": "애플리케이션 DN 입력", + "Enter Application DN Password": "애플리케이션 DN 비밀번호 입력", "Enter Bing Search V7 Endpoint": "Bing Search V7 엔드포인트 입력", "Enter Bing Search V7 Subscription Key": "Bing Search V7 구독 키 입력", - "Enter Bocha Search API Key": "", + "Enter Bocha Search API Key": "Bocha 검색 API 키 입력", "Enter Brave Search API Key": "Brave Search API Key 입력", - "Enter certificate path": "", + "Enter certificate path": "인증서 경로 입력", "Enter CFG Scale (e.g. 7.0)": "CFG Scale 입력 (예: 7.0)", "Enter Chunk Overlap": "청크 오버랩 입력", "Enter Chunk Size": "청크 크기 입력", - "Enter comma-seperated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "", + "Enter comma-seperated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "쉼표로 구분된 \\\"토큰:편향_값\\\" 쌍 입력 (예: 5432:100, 413:-100)", "Enter description": "설명 입력", - "Enter Docling Server URL": "", - "Enter Document Intelligence Endpoint": "", - "Enter Document Intelligence Key": "", - "Enter domains separated by commas (e.g., example.com,site.org)": "", - "Enter Exa API Key": "", - "Enter External Web Loader API Key": "", - "Enter External Web Loader URL": "", - "Enter External Web Search API Key": "", - "Enter External Web Search URL": "", - "Enter Firecrawl API Base URL": "", - "Enter Firecrawl API Key": "", + "Enter Docling Server URL": "Docling 서버 URL 입력", + "Enter Document Intelligence Endpoint": "Document Intelligence 엔드포인트 입력", + "Enter Document Intelligence Key": "Document Intelligence 키 입력", + "Enter domains separated by commas (e.g., example.com,site.org)": "쉼표로 구분된 도메인 입력 (예: example.com, site.org)", + "Enter Exa API Key": "Exa API 키 입력", + "Enter External Web Loader API Key": "외부 웹 로더 API 키 입력", + "Enter External Web Loader URL": "외부 웹 로더 URL 입력", + "Enter External Web Search API Key": "외부 웹 검색 API 키 입력", + "Enter External Web Search URL": "외부 웹 검색 URL 입력", + "Enter Firecrawl API Base URL": "Firecrawl API 기본 URL 입력", + "Enter Firecrawl API Key": "Firecrawl API 키 입력", "Enter Github Raw URL": "Github Raw URL 입력", "Enter Google PSE API Key": "Google PSE API 키 입력", "Enter Google PSE Engine Id": "Google PSE 엔진 ID 입력", "Enter Image Size (e.g. 512x512)": "이미지 크기 입력(예: 512x512)", "Enter Jina API Key": "Jina API 키 입력", - "Enter Jupyter Password": "", - "Enter Jupyter Token": "", - "Enter Jupyter URL": "", + "Enter Jupyter Password": "Jupyter 비밀번호 입력", + "Enter Jupyter Token": "Jupyter 토큰 입력", + "Enter Jupyter URL": "Jupyter URL 입력", "Enter Kagi Search API Key": "Kagi Search API 키 입력", - "Enter Key Behavior": "", + "Enter Key Behavior": "키 동작 입력", "Enter language codes": "언어 코드 입력", - "Enter Mistral API Key": "", + "Enter Mistral API Key": "Mistral API 키 입력", "Enter Model ID": "모델 ID 입력", "Enter model tag (e.g. {{modelTag}})": "모델 태그 입력(예: {{modelTag}})", "Enter Mojeek Search API Key": "Mojeek Search API 키 입력", "Enter Number of Steps (e.g. 50)": "단계 수 입력(예: 50)", - "Enter Perplexity API Key": "", - "Enter Playwright Timeout": "", - "Enter Playwright WebSocket URL": "", + "Enter Perplexity API Key": "Perplexity API 키 입력", + "Enter Playwright Timeout": "Playwright 시간 초과 입력", + "Enter Playwright WebSocket URL": "Playwright WebSocket URL 입력", "Enter proxy URL (e.g. https://user:password@host:port)": "프록시 URL 입력(예: https://user:password@host:port)", - "Enter reasoning effort": "", + "Enter reasoning effort": "추론 난이도", "Enter Sampler (e.g. Euler a)": "샘플러 입력 (예: 오일러 a(Euler a))", "Enter Scheduler (e.g. Karras)": "스케쥴러 입력 (예: 카라스(Karras))", "Enter Score": "점수 입력", "Enter SearchApi API Key": "SearchApi API 키 입력", "Enter SearchApi Engine": "SearchApi 엔진 입력", "Enter Searxng Query URL": "Searxng 쿼리 URL 입력", - "Enter Seed": "", - "Enter SerpApi API Key": "", - "Enter SerpApi Engine": "", + "Enter Seed": "Seed 입력", + "Enter SerpApi API Key": "SerpApi API 키 입력", + "Enter SerpApi Engine": "SerpApi 엔진 입력", "Enter Serper API Key": "Serper API 키 입력", "Enter Serply API Key": "Serply API 키 입력", "Enter Serpstack API Key": "Serpstack API 키 입력", - "Enter server host": "", - "Enter server label": "", - "Enter server port": "", - "Enter Sougou Search API sID": "", - "Enter Sougou Search API SK": "", + "Enter server host": "서버 호스트 입력", + "Enter server label": "서버 레이블 입력", + "Enter server port": "서버 포트 입력", + "Enter Sougou Search API sID": "Sougou 검색 API sID 입력", + "Enter Sougou Search API SK": "Sougou 검색 API SK 입력", "Enter stop sequence": "중지 시퀀스 입력", "Enter system prompt": "시스템 프롬프트 입력", - "Enter system prompt here": "", + "Enter system prompt here": "여기에 시스템 프롬프트 입력", "Enter Tavily API Key": "Tavily API 키 입력", - "Enter Tavily Extract Depth": "", + "Enter Tavily Extract Depth": "Tavily 추출 깊이 입력", "Enter the public URL of your WebUI. This URL will be used to generate links in the notifications.": "WebUI의 공개 URL을 입력해 주세요. 이 URL은 알림에서 링크를 생성하는 데 사용합니다.", "Enter Tika Server URL": "Tika 서버 URL 입력", - "Enter timeout in seconds": "", - "Enter to Send": "", + "Enter timeout in seconds": "시간 초과(초) 입력", + "Enter to Send": "Enter로 보내기", "Enter Top K": "Top K 입력", - "Enter Top K Reranker": "", + "Enter Top K Reranker": "Top K 리랭커 입력", "Enter URL (e.g. http://127.0.0.1:7860/)": "URL 입력(예: http://127.0.0.1:7860/)", "Enter URL (e.g. http://localhost:11434)": "URL 입력(예: http://localhost:11434)", "Enter your current password": "현재 비밀번호를 입력해 주세요", @@ -486,23 +486,23 @@ "Enter your webhook URL": "웹훅 URL을 입력해 주세요", "Error": "오류", "ERROR": "오류", - "Error accessing Google Drive: {{error}}": "", - "Error uploading file: {{error}}": "", + "Error accessing Google Drive: {{error}}": "Google Drive 액세스 오류: {{error}}", + "Error uploading file: {{error}}": "파일 업로드 오류: {{error}}", "Evaluations": "평가", - "Exa API Key": "", - "Example: (&(objectClass=inetOrgPerson)(uid=%s))": "", - "Example: ALL": "", - "Example: mail": "", - "Example: ou=users,dc=foo,dc=example": "", - "Example: sAMAccountName or uid or userPrincipalName": "", - "Exceeded the number of seats in your license. Please contact support to increase the number of seats.": "", + "Exa API Key": "Exa API 키", + "Example: (&(objectClass=inetOrgPerson)(uid=%s))": "예: (&(objectClass=inetOrgPerson)(uid=%s))", + "Example: ALL": "예: ALL", + "Example: mail": "예: mail", + "Example: ou=users,dc=foo,dc=example": "예: ou=users,dc=foo,dc=example", + "Example: sAMAccountName or uid or userPrincipalName": "예: sAMAccountName 또는 uid 또는 userPrincipalName", + "Exceeded the number of seats in your license. Please contact support to increase the number of seats.": "라이선스의 사용자 수를 초과했습니다. 사용자 수를 늘리려면 지원팀에 문의하세요.", "Exclude": "미포함", - "Execute code for analysis": "", - "Executing **{{NAME}}**...": "", - "Expand": "", + "Execute code for analysis": "분석을 위한 코드 실행", + "Executing **{{NAME}}**...": "**{{NAME}}** 실행 중...", + "Expand": "펼치기", "Experimental": "실험적", - "Explain": "", - "Explain this section to me in more detail": "", + "Explain": "설명", + "Explain this section to me in more detail": "이 섹션을 더 자세히 설명해주세요", "Explore the cosmos": "", "Export": "내보내기", "Export All Archived Chats": "", @@ -514,25 +514,25 @@ "Export Models": "모델 내보내기", "Export Presets": "프리셋 내보내기", "Export Prompts": "프롬프트 내보내기", - "Export to CSV": "", + "Export to CSV": "CSV로 내보내기", "Export Tools": "도구 내보내기", - "External": "", + "External": "외부", "External Models": "외부 모델", - "External Web Loader API Key": "", - "External Web Loader URL": "", - "External Web Search API Key": "", - "External Web Search URL": "", + "External Web Loader API Key": "외부 웹 로더 API 키", + "External Web Loader URL": "외부 웹 로더 URL", + "External Web Search API Key": "외부 웹 검색 API 키", + "External Web Search URL": "외부 웹 검색 URL", "Failed to add file.": "파일추가에 실패했습니다", - "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to connect to {{URL}} OpenAPI tool server": "{{URL}} OpenAPI 도구 서버 연결 실패", "Failed to create API Key.": "API 키 생성에 실패했습니다.", - "Failed to fetch models": "", - "Failed to load file content.": "", + "Failed to fetch models": "모델 가져오기 실패", + "Failed to load file content.": "파일 내용 로드 실패.", "Failed to read clipboard contents": "클립보드 내용 가져오기를 실패하였습니다.", - "Failed to save connections": "", - "Failed to save models configuration": "", + "Failed to save connections": "연결 저장 실패", + "Failed to save models configuration": "모델 구성 저장 실패", "Failed to update settings": "설정 업데이트에 실패하였습니다.", "Failed to upload file.": "파일 업로드에 실패했습니다", - "Features": "", + "Features": "기능", "Features Permissions": "기능 권한", "February": "2월", "Feedback History": "피드백 기록", @@ -545,14 +545,14 @@ "File not found.": "파일을 찾을 수 없습니다.", "File removed successfully.": "성공적으로 파일이 제거되었습니다", "File size should not exceed {{maxSize}} MB.": "파일 사이즈가 {{maxSize}} MB를 초과하면 안됩니다.", - "File uploaded successfully": "", + "File uploaded successfully": "파일이 성공적으로 업로드되었습니다", "Files": "파일", "Filter is now globally disabled": "전반적으로 필터 비활성화됨", "Filter is now globally enabled": "전반적으로 필터 활성화됨", "Filters": "필터", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Fingerprint spoofing 감지: 이니셜을 아바타로 사용할 수 없습니다. 기본 프로필 이미지로 설정합니다.", - "Firecrawl API Base URL": "", - "Firecrawl API Key": "", + "Firecrawl API Base URL": "Firecrawl API 기본 URL", + "Firecrawl API Key": "Firecrawl API 키", "Fluidly stream large external response chunks": "대규모 외부 응답 청크를 유연하게 스트리밍", "Focus chat input": "채팅 입력창에 포커스", "Folder deleted successfully": "성공적으로 폴터가 생성되었습니다", @@ -563,33 +563,33 @@ "Forge new paths": "", "Form": "폼", "Format your variables using brackets like this:": "변수를 다음과 같이 괄호를 사용하여 생성하세요", - "Forwards system user session credentials to authenticate": "", + "Forwards system user session credentials to authenticate": "인증을 위해 시스템 사용자 세션 자격 증명 전달", "Frequency Penalty": "빈도 페널티", "Full Context Mode": "", "Function": "함수", - "Function Calling": "", + "Function Calling": "함수 호출", "Function created successfully": "성공적으로 함수가 생성되었습니다", "Function deleted successfully": "성공적으로 함수가 삭제되었습니다", - "Function Description": "", - "Function ID": "", + "Function Description": "함수 설명", + "Function ID": "함수 ID", "Function is now globally disabled": "전반적으로 함수 비활성화됨", "Function is now globally enabled": "전반적으로 함수 활성화됨", - "Function Name": "", + "Function Name": "함수 이름", "Function updated successfully": "성공적으로 함수가 업데이트되었습니다", "Functions": "함수", "Functions allow arbitrary code execution": "함수로 임이의 코드 실행 허용하기", "Functions allow arbitrary code execution.": "함수가 임이의 코드를 실행하도록 허용하였습니다", "Functions imported successfully": "성공적으로 함수가 가져왔습니다", "Gemini": "", - "Gemini API Config": "", - "Gemini API Key is required.": "", + "Gemini API Config": "Gemini API 구성", + "Gemini API Key is required.": "Gemini API 키가 필요합니다.", "General": "일반", "Generate an image": "", "Generate Image": "이미지 생성", "Generate prompt pair": "", "Generating search query": "검색 쿼리 생성", - "Get started": "", - "Get started with {{WEBUI_NAME}}": "", + "Get started": "시작하기", + "Get started with {{WEBUI_NAME}}": "{{WEBUI_NAME}} 시작하기", "Global": "글로벌", "Good Response": "좋은 응답", "Google Drive": "", @@ -609,13 +609,13 @@ "Hex Color": "", "Hex Color - Leave empty for default color": "", "Hide": "숨기기", - "Hide Model": "", - "Home": "", - "Host": "", + "Hide Model": "모델 숨기기", + "Home": "홈", + "Host": "호스트", "How can I help you today?": "오늘 어떻게 도와드릴까요?", "How would you rate this response?": "이 응답을 어떻게 평가하시겠어요?", "Hybrid Search": "하이브리드 검색", - "I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "", + "I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "저는 제 행동의 의미를 읽고 이해했음을 인정합니다. 임의 코드 실행과 관련된 위험을 인지하고 있으며 출처의 신뢰성을 확인했습니다.", "ID": "ID", "iframe Sandbox Allow Forms": "", "iframe Sandbox Allow Same Origin": "", @@ -626,8 +626,8 @@ "Image Generation (Experimental)": "이미지 생성(실험적)", "Image Generation Engine": "이미지 생성 엔진", "Image Max Compression Size": "이미지 최대 압축 크기", - "Image Prompt Generation": "", - "Image Prompt Generation Prompt": "", + "Image Prompt Generation": "이미지 프롬프트 생성", + "Image Prompt Generation Prompt": "이미지 프롬프트를 생성하기 위한 프롬프트", "Image Settings": "이미지 설정", "Images": "이미지", "Import Chats": "채팅 가져오기", @@ -646,12 +646,12 @@ "Input commands": "명령어 입력", "Install from Github URL": "Github URL에서 설치", "Instant Auto-Send After Voice Transcription": "음성 변환 후 즉시 자동 전송", - "Integration": "", + "Integration": "통합", "Interface": "인터페이스", "Invalid file format.": "잘못된 파일 형식", - "Invalid JSON schema": "", + "Invalid JSON schema": "잘못된 JSON 스키마", "Invalid Tag": "잘못된 태그", - "is typing...": "", + "is typing...": "입력 중...", "January": "1월", "Jina API Key": "Jina API 키", "join our Discord for help.": "도움말을 보려면 Discord에 가입하세요.", @@ -659,8 +659,8 @@ "JSON Preview": "JSON 미리 보기", "July": "7월", "June": "6월", - "Jupyter Auth": "", - "Jupyter URL": "", + "Jupyter Auth": "Jupyter 인증", + "Jupyter URL": "Jupyter URL", "JWT Expiration": "JWT 만료", "JWT Token": "JWT 토큰", "Kagi Search API Key": "Kagi Search API 키", @@ -682,27 +682,26 @@ "Language Locales": "", "Last Active": "최근 활동", "Last Modified": "마지막 수정", - "Last reply": "", + "Last reply": "마지막 답글", "LDAP": "", - "LDAP server updated": "", + "LDAP server updated": "LDAP 서버가 업데이트되었습니다", "Leaderboard": "리더보드", - "Learn more about OpenAPI tool servers.": "", + "Learn more about OpenAPI tool servers.": "OpenAPI 도구 서버에 대해 자세히 알아보세요.", "Leave empty for unlimited": "무제한을 위해 빈칸으로 남겨두세요", - "Leave empty to include all models from \"{{url}}/api/tags\" endpoint": "", - "Leave empty to include all models from \"{{url}}/models\" endpoint": "", - "Leave empty to include all models or select specific models": "특정 모델을 선택하거나 모든 모델을 포함하고 싶으면 빈칸으로 남겨두세요", + "Leave empty to include all models from \"{{url}}/api/tags\" endpoint": "\\\"{{url}}/api/tags\\\" 엔드포인트의 모든 모델을 포함하려면 비워 두세요", + "Leave empty to include all models from \"{{url}}/models\" endpoint": "\\\"{{url}}/models\\\" 엔드포인트의 모든 모델을 포함하려면 비워 두세요", "Leave empty to use the default prompt, or enter a custom prompt": "기본 프롬프트를 사용하기 위해 빈칸으로 남겨두거나, 커스텀 프롬프트를 입력하세요", - "Leave model field empty to use the default model.": "", - "License": "", + "Leave model field empty to use the default model.": "기본 모델을 사용하려면 모델 필드를 비워 두세요.", + "License": "라이선스", "Light": "라이트", "Listening...": "듣는 중...", - "Llama.cpp": "", + "Llama.cpp": "Llama.cpp", "LLMs can make mistakes. Verify important information.": "LLM에 오류가 있을 수 있습니다. 중요한 정보는 확인이 필요합니다.", - "Loader": "", - "Loading Kokoro.js...": "", + "Loader": "로더", + "Loading Kokoro.js...": "Kokoro.js 로딩 중...", "Local": "", "Local Models": "로컬 모델", - "Location access not allowed": "", + "Location access not allowed": "위치 접근이 허용되지 않음", "Logit Bias": "", "Lost": "패배", "LTR": "LTR", @@ -710,13 +709,13 @@ "Make sure to enclose them with": "꼭 다음으로 감싸세요:", "Make sure to export a workflow.json file as API format from ComfyUI.": "꼭 workflow.json 파일을 ComfyUI의 API 형식대로 내보내세요", "Manage": "관리", - "Manage Direct Connections": "", - "Manage Models": "", - "Manage Ollama": "", + "Manage Direct Connections": "다이렉트 연결 관리", + "Manage Models": "모델 관리", + "Manage Ollama": "Ollama 관리", "Manage Ollama API Connections": "Ollama API 연결 관리", "Manage OpenAI API Connections": "OpenAI API 연결 관리", "Manage Pipelines": "파이프라인 관리", - "Manage Tool Servers": "", + "Manage Tool Servers": "툴 서버 관리", "March": "3월", "Max Tokens (num_predict)": "최대 토큰(num_predict)", "Max Upload Count": "업로드 최대 수", @@ -734,26 +733,26 @@ "Message rating should be enabled to use this feature": "이 기능을 사용하려면 메시지 평가가 활성화되어야합니다", "Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "링크 생성 후에 보낸 메시지는 공유되지 않습니다. URL이 있는 사용자는 공유된 채팅을 볼 수 있습니다.", "Microsoft OneDrive": "", - "Microsoft OneDrive (personal)": "", - "Microsoft OneDrive (work/school)": "", + "Microsoft OneDrive (personal)": "Microsoft OneDrive (개인용)", + "Microsoft OneDrive (work/school)": "Microsoft OneDrive (회사/학교용)", "Min P": "최소 P", "Mirostat": "Mirostat", "Mirostat Eta": "Mirostat Eta", "Mirostat Tau": "Mirostat Tau", "Mistral OCR": "", - "Mistral OCR API Key required.": "", + "Mistral OCR API Key required.": "Mistral OCR API 키가 필요합니다.", "Model": "모델", "Model '{{modelName}}' has been successfully downloaded.": "'{{modelName}}' 모델이 성공적으로 다운로드되었습니다.", "Model '{{modelTag}}' is already in queue for downloading.": "'{{modelTag}}' 모델은 이미 다운로드 대기열에 있습니다.", "Model {{modelId}} not found": "{{modelId}} 모델을 찾을 수 없습니다.", "Model {{modelName}} is not vision capable": "{{modelName}} 모델은 비전을 사용할 수 없습니다.", "Model {{name}} is now {{status}}": "{{name}} 모델은 이제 {{status}} 상태입니다.", - "Model {{name}} is now hidden": "", - "Model {{name}} is now visible": "", + "Model {{name}} is now hidden": "{{name}} 모델이 이제 숨겨짐", + "Model {{name}} is now visible": "{{name}} 모델이 이제 표시됨", "Model accepts image inputs": "모델이 이미지 삽입을 허용합니다", "Model created successfully!": "성공적으로 모델이 생성되었습니다", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "모델 파일 시스템 경로가 감지되었습니다. 업데이트하려면 모델 단축 이름이 필요하며 계속할 수 없습니다.", - "Model Filtering": "", + "Model Filtering": "모델 필터링", "Model ID": "모델 ID", "Model IDs": "", "Model Name": "모델 이름", @@ -764,20 +763,20 @@ "Modelfile Content": "Modelfile 내용", "Models": "모델", "Models Access": "모델 접근", - "Models configuration saved successfully": "", - "Models Public Sharing": "", + "Models configuration saved successfully": "모델 구성이 성공적으로 저장되었습니다", + "Models Public Sharing": "모델 공개 공유", "Mojeek Search API Key": "Mojeek Search API 키", "more": "더보기", "More": "더보기", "Name": "이름", "Name your knowledge base": "지식 기반 이름을 지정하세요", - "Native": "", + "Native": "네이티브", "New Chat": "새 채팅", "New Folder": "", "New Password": "새 비밀번호", "new-channel": "", "No content found": "내용을 찾을 수 없음", - "No content found in file.": "", + "No content found in file.": "파일에서 내용을 찾을 수 없습니다.", "No content to speak": "음성 출력할 내용을 찾을 수 없음", "No distance available": "거리 불가능", "No feedbacks found": "피드백 없음", @@ -785,10 +784,10 @@ "No files found.": "파일 없음", "No groups with access, add a group to grant access": "접근 권한이 있는 그룹이 없습니다. 접근 권한을 부여하려면 그룹을 추가하세요.", "No HTML, CSS, or JavaScript content found.": "HTML, CSS, JavaScript이 발견되지 않음", - "No inference engine with management support found": "", + "No inference engine with management support found": "관리 지원이 포함된 추론 엔진을 찾을 수 없음", "No knowledge found": "지식 기반 없음", - "No memories to clear": "", - "No model IDs": "", + "No memories to clear": "지울 메모리 없음", + "No model IDs": "모델 ID 없음", "No models found": "모델 없음", "No models selected": "", "No results found": "결과 없음", @@ -829,7 +828,7 @@ "Open file": "파일 열기", "Open in full screen": "전체화면으로 열기", "Open new chat": "새 채팅 열기", - "Open WebUI can use tools provided by any OpenAPI server.": "", + "Open WebUI can use tools provided by any OpenAPI server.": "Open WebUI는 모든 OpenAPI 서버에서 제공하는 도구를 사용할 수 있습니다.", "Open WebUI uses faster-whisper internally.": "Open WebUI는 내부적으로 패스트 위스퍼를 사용합니다.", "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI는 SpeechT5와 CMU Arctic 스피커 임베딩을 사용합니다.", "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "열린 WebUI 버젼(v{{OPEN_WEBUI_VERSION}})은 최소 버젼 (v{{REQUIRED_VERSION}})보다 낮습니다", @@ -839,7 +838,7 @@ "OpenAI API Key is required.": "OpenAI API 키가 필요합니다.", "OpenAI API settings updated": "", "OpenAI URL/Key required.": "OpenAI URL/키가 필요합니다.", - "openapi.json Path": "", + "openapi.json Path": "openapi.json 경로", "or": "또는", "Organize your users": "사용자를 ", "Other": "기타", @@ -856,7 +855,7 @@ "Permission denied when accessing microphone": "마이크 접근 권한이 거부되었습니다.", "Permission denied when accessing microphone: {{error}}": "마이크 접근 권환이 거부되었습니다: {{error}}", "Permissions": "권한", - "Perplexity API Key": "", + "Perplexity API Key": "Perplexity API 키", "Personalization": "개인화", "Pin": "고정", "Pinned": "고정됨", @@ -868,16 +867,16 @@ "Pipelines Valves": "파이프라인 밸브", "Plain text (.txt)": "일반 텍스트(.txt)", "Playground": "놀이터", - "Playwright Timeout (ms)": "", - "Playwright WebSocket URL": "", + "Playwright Timeout (ms)": "Playwright 시간 초과 (ms)", + "Playwright WebSocket URL": "Playwright WebSocket URL", "Please carefully review the following warnings:": "다음 주의를 조심히 확인해주십시오", - "Please do not close the settings page while loading the model.": "", + "Please do not close the settings page while loading the model.": "모델을 로드하는 동안 설정 페이지를 닫지 마세요.", "Please enter a prompt": "프롬프트를 입력해주세요", - "Please enter a valid path": "", - "Please enter a valid URL": "", + "Please enter a valid path": "유효한 경로를 입력하세요", + "Please enter a valid URL": "유효한 URL을 입력하세요", "Please fill in all fields.": "모두 빈칸없이 채워주세요", - "Please select a model first.": "", - "Please select a model.": "", + "Please select a model first.": "먼저 모델을 선택하세요.", + "Please select a model.": "모델을 선택하세요.", "Please select a reason": "이유를 선택해주세요", "Port": "포트", "Positive attitude": "긍정적인 자세", @@ -886,11 +885,11 @@ "Presence Penalty": "", "Previous 30 days": "이전 30일", "Previous 7 days": "이전 7일", - "Private": "", + "Private": "비공개", "Profile Image": "프로필 이미지", - "Prompt": "", + "Prompt": "프롬프트", "Prompt (e.g. Tell me a fun fact about the Roman Empire)": "프롬프트 (예: 로마 황제에 대해 재미있는 사실을 알려주세요)", - "Prompt Autocompletion": "", + "Prompt Autocompletion": "프롬프트 자동 완성", "Prompt Content": "프롬프트 내용", "Prompt created successfully": "성공적으로 프롬프트를 생성했습니다", "Prompt suggestions": "프롬프트 제안", @@ -898,16 +897,16 @@ "Prompts": "프롬프트", "Prompts Access": "프롬프트 접근", "Prompts Public Sharing": "", - "Public": "", + "Public": "공개", "Pull \"{{searchValue}}\" from Ollama.com": "Ollama.com에서 \"{{searchValue}}\" 가져오기", "Pull a model from Ollama.com": "Ollama.com에서 모델 가져오기(pull)", "Query Generation Prompt": "", "RAG Template": "RAG 템플릿", "Rating": "평가", "Re-rank models by topic similarity": "주제 유사성으로 모델을 재정렬하기", - "Read": "", + "Read": "읽기", "Read Aloud": "읽어주기", - "Reasoning Effort": "", + "Reasoning Effort": "추론 난이도", "Record voice": "음성 녹음", "Redirecting you to Open WebUI Community": "OpenWebUI 커뮤니티로 리디렉션 중", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", @@ -915,18 +914,18 @@ "References from": "출처", "Refused when it shouldn't have": "허용되지 않았지만 허용되어야 합니다.", "Regenerate": "재생성", - "Reindex": "", - "Reindex Knowledge Base Vectors": "", + "Reindex": "재색인", + "Reindex Knowledge Base Vectors": "전체 지식 베이스 재색인", "Release Notes": "릴리스 노트", "Relevance": "관련도", - "Relevance Threshold": "", + "Relevance Threshold": "관련성 임계값", "Remove": "삭제", "Remove Model": "모델 삭제", "Rename": "이름 변경", "Reorder Models": "모델 재정렬", "Repeat Last N": "마지막 N 반복", "Repeat Penalty (Ollama)": "", - "Reply in Thread": "", + "Reply in Thread": "스레드에 답글 달기", "Request Mode": "요청 모드", "Reranking Model": "Reranking 모델", "Reranking model disabled": "Reranking 모델 비활성화", From f46c7d53b73c366e761c444327eaf46c03f675b6 Mon Sep 17 00:00:00 2001 From: hurxxxx Date: Thu, 1 May 2025 12:55:07 +0900 Subject: [PATCH 153/161] update Korean translation --- src/lib/i18n/locales/ko-KR/translation.json | 78 ++++++++++----------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/src/lib/i18n/locales/ko-KR/translation.json b/src/lib/i18n/locales/ko-KR/translation.json index 0f18e9e66..dce734270 100644 --- a/src/lib/i18n/locales/ko-KR/translation.json +++ b/src/lib/i18n/locales/ko-KR/translation.json @@ -934,12 +934,12 @@ "Reset All Models": "모든 모델 초기화", "Reset Upload Directory": "업로드 디렉토리 초기화", "Reset Vector Storage/Knowledge": "벡터 저장 공간/지식 기반 초기화", - "Reset view": "", + "Reset view": "보기 초기화", "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "웹사이트 권환과 같이 응답 알림이 활성화될 수 없습니다. 필요한 접근을 사용하기 위해 브라우져 설정을 확인 부탁드립니다.", "Response splitting": "응답 나누기", "Result": "결과", - "Retrieval": "", - "Retrieval Query Generation": "", + "Retrieval": "검색", + "Retrieval Query Generation": "검색 쿼리 생성", "Rich Text Input for Chat": "채팅을 위한 풍부한 텍스트(Rich Text) 입력", "RK": "RK", "Role": "역할", @@ -955,10 +955,10 @@ "Save Tag": "태그 저장", "Saved": "저장됨", "Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "브라우저의 저장소에 채팅 로그를 직접 저장하는 것은 더 이상 지원되지 않습니다. 아래 버튼을 클릭하여 채팅 로그를 다운로드하고 삭제하세요. 걱정 마세요. 백엔드를 통해 채팅 로그를 쉽게 다시 가져올 수 있습니다.", - "Scroll On Branch Change": "", + "Scroll On Branch Change": "브랜치 변경 시 스크롤", "Search": "검색", "Search a model": "모델 검색", - "Search Base": "", + "Search Base": "검색 기반", "Search Chats": "채팅 검색", "Search Collection": "컬렉션 검색", "Search Filters": "필터 검색", @@ -969,11 +969,11 @@ "Search options": "옵션 검색", "Search Prompts": "프롬프트 검색", "Search Result Count": "검색 결과 수", - "Search the internet": "", + "Search the internet": "인터넷 검색", "Search Tools": "검색 도구", "SearchApi API Key": "SearchApi API 키", "SearchApi Engine": "SearchApi 엔진", - "Searched {{count}} sites": "", + "Searched {{count}} sites": "{{count}}개 사이트 검색됨", "Searching \"{{searchQuery}}\"": "\"{{searchQuery}}\" 검색 중", "Searching Knowledge for \"{{searchQuery}}\"": "\"{{searchQuery}}\"위한 지식 기반 검색 중", "Searxng Query URL": "Searxng 쿼리 URL", @@ -988,8 +988,8 @@ "Select a pipeline": "파이프라인 선택", "Select a pipeline url": "파이프라인 URL 선택", "Select a tool": "도구 선택", - "Select an auth method": "", - "Select an Ollama instance": "", + "Select an auth method": "인증 방법 선택", + "Select an Ollama instance": "Ollama 인스턴스 선택", "Select Engine": "엔진 선택", "Select Knowledge": "지식 기반 선택", "Select only one model to call": "음성 기능을 위해서는 모델을 하나만 선택해야 합니다.", @@ -1000,8 +1000,8 @@ "Send message": "메시지 보내기", "Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "'stream_options: { include_usage: true }' 요청 보내기 \n지원되는 제공자가 토큰 사용 정보를 응답할 예정입니다", "September": "9월", - "SerpApi API Key": "", - "SerpApi Engine": "", + "SerpApi API Key": "SerpApi API 키", + "SerpApi Engine": "SerpApi 엔진", "Serper API Key": "Serper API 키", "Serply API Key": "Serply API 키", "Serpstack API Key": "Serpstack API 키", @@ -1075,7 +1075,7 @@ "Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting.": "", "Talk to model": "", "Tap to interrupt": "탭하여 중단", - "Tasks": "", + "Tasks": "작업", "Tavily API Key": "Tavily API 키", "Tavily Extract Depth": "", "Tell us more:": "더 알려주세요:", @@ -1086,13 +1086,13 @@ "Text-to-Speech Engine": "텍스트-음성 변환 엔진", "Tfs Z": "Tfs Z", "Thanks for your feedback!": "피드백 감사합니다!", - "The Application Account DN you bind with for search": "", - "The base to search for users": "", + "The Application Account DN you bind with for search": "검색을 위해 바인딩하는 응용 프로그램 계정 DN", + "The base to search for users": "사용자 검색을 위한 기본 경로", "The batch size determines how many text requests are processed together at once. A higher batch size can increase the performance and speed of the model, but it also requires more memory.": "", "The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "이 플러그인 뒤에 있는 개발자는 커뮤니티에서 활동하는 단순한 열정적인 일반인들입니다. 만약 플러그인이 도움 되었다면, 플러그인 개발에 기여를 고려해주세요!", "The evaluation leaderboard is based on the Elo rating system and is updated in real-time.": "평가 리더보드는 Elo 평가 시스템을 기반으로 하고 실시간으로 업데이트됩니다", - "The LDAP attribute that maps to the mail that users use to sign in.": "", - "The LDAP attribute that maps to the username that users use to sign in.": "", + "The LDAP attribute that maps to the mail that users use to sign in.": "사용자가 로그인할 때 사용하는 메일에 매핑되는 LDAP 속성입니다.", + "The LDAP attribute that maps to the username that users use to sign in.": "사용자가 로그인할 때 사용하는 사용자 이름에 매핑되는 LDAP 속성입니다.", "The leaderboard is currently in beta, and we may adjust the rating calculations as we refine the algorithm.": "리더보드는 베타테스트중에 있습니다, 평가 기준이 알고리즘 수정과 함께 변할 수 있습니다", "The maximum file size in MB. If the file size exceeds this limit, the file will not be uploaded.": "최대 파일 크기(MB). 만약 파일 크기가 한도를 초과할 시, 파일은 업로드되지 않습니다", "The maximum number of files that can be used at once in chat. If the number of files exceeds this limit, the files will not be uploaded.": "하나의 채팅에서는 사용가능한 최대 파일 수가 있습니다. 만약 파일 수가 한도를 초과할 시, 파일은 업로드되지 않습니다.", @@ -1101,8 +1101,8 @@ "Theme": "테마", "Thinking...": "생각 중...", "This action cannot be undone. Do you wish to continue?": "이 액션은 되돌릴 수 없습니다. 계속 하시겠습니까?", - "This channel was created on {{createdAt}}. This is the very beginning of the {{channelName}} channel.": "", - "This chat won’t appear in history and your messages will not be saved.": "", + "This channel was created on {{createdAt}}. This is the very beginning of the {{channelName}} channel.": "이 채널은 {{createdAt}}에 생성되었습니다. 여기가 {{channelName}} 채널의 시작입니다.", + "This chat won't appear in history and your messages will not be saved.": "이 채팅은 기록에 표시되지 않으며 메시지가 저장되지 않습니다.", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "이렇게 하면 소중한 대화 내용이 백엔드 데이터베이스에 안전하게 저장됩니다. 감사합니다!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "이것은 실험적 기능으로, 예상대로 작동하지 않을 수 있으며 언제든지 변경될 수 있습니다.", "This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "", @@ -1116,7 +1116,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "지식 기반과 모든 파일 연동을 초기화합니다. 계속 하시겠습니까?", "Thorough explanation": "완전한 설명", "Thought for {{DURATION}}": "{{DURATION}} 동안 생각함", - "Thought for {{DURATION}} seconds": "", + "Thought for {{DURATION}} seconds": "{{DURATION}}초 동안 생각함", "Tika": "티카(Tika)", "Tika Server URL required.": "티카 서버 URL이 필요합니다", "Tiktoken": "틱토큰 (Tiktoken)", @@ -1150,34 +1150,34 @@ "Tool ID": "도구 ID", "Tool imported successfully": "성공적으로 도구를 가져왔습니다", "Tool Name": "도구 이름", - "Tool Servers": "", + "Tool Servers": "도구 서버", "Tool updated successfully": "성공적으로 도구가 업데이트되었습니다", "Tools": "도구", "Tools Access": "도구 접근", "Tools are a function calling system with arbitrary code execution": "도구는 임의 코드를 실행시키는 함수를 불러오는 시스템입니다", - "Tools Function Calling Prompt": "", + "Tools Function Calling Prompt": "도구 함수 호출 프롬프트", "Tools have a function calling system that allows arbitrary code execution": "도구에 임의 코드 실행을 허용하는 함수가 포함되어 있습니다", "Tools have a function calling system that allows arbitrary code execution.": "도구에 임의 코드 실행을 허용하는 함수가 포함되어 있습니다.", - "Tools Public Sharing": "", + "Tools Public Sharing": "도구 공개 및 공유", "Top K": "Top K", "Top K Reranker": "", "Top P": "Top P", "Transformers": "", "Trouble accessing Ollama?": "올라마(Ollama)에 접근하는 데 문제가 있나요?", - "Trust Proxy Environment": "", + "Trust Proxy Environment": "신뢰 할 수 있는 프록시 환경", "TTS Model": "TTS 모델", "TTS Settings": "TTS 설정", "TTS Voice": "TTS 음성", "Type": "입력", "Type Hugging Face Resolve (Download) URL": "Hugging Face Resolve (다운로드) URL 입력", - "Uh-oh! There was an issue with the response.": "", + "Uh-oh! There was an issue with the response.": "이런! 응답에 문제가 발생했습니다.", "UI": "UI", "Unarchive All": "모두 보관 해제", "Unarchive All Archived Chats": "보관된 모든 채팅을 보관 해제", "Unarchive Chat": "채팅 보관 해제", - "Unlock mysteries": "", + "Unlock mysteries": "미스터리 풀기", "Unpin": "고정 해제", - "Unravel secrets": "", + "Unravel secrets": "비밀 풀기", "Untagged": "태그 해제", "Update": "업데이트", "Update and Copy Link": "링크 업데이트 및 복사", @@ -1207,8 +1207,8 @@ "user": "사용자", "User": "사용자", "User location successfully retrieved.": "성공적으로 사용자의 위치를 불러왔습니다", - "User Webhooks": "", - "Username": "", + "User Webhooks": "사용자 웹훅", + "Username": "사용자 이름", "Users": "사용자", "Using the default arena model with all models. Click the plus button to add custom models.": "모든 모델은 기본 아레나 모델을 사용중입니다. 플러스 버튼을 눌러 커스텀 모델을 추가하세요", "Utilize": "활용", @@ -1222,8 +1222,8 @@ "Verify SSL Certificate": "", "Version": "버전", "Version {{selectedVersion}} of {{totalVersions}}": "버전 {{totalVersions}}의 {{selectedVersion}}", - "View Replies": "", - "View Result from **{{NAME}}**": "", + "View Replies": "답글 보기", + "View Result from **{{NAME}}**": "**{{NAME}}**의 결과 보기", "Visibility": "공개 범위", "Voice": "음성", "Voice Input": "음성 입력", @@ -1234,22 +1234,22 @@ "Warning: Jupyter execution enables arbitrary code execution, posing severe security risks—proceed with extreme caution.": "", "Web": "웹", "Web API": "웹 API", - "Web Loader Engine": "", + "Web Loader Engine": "웹 로더 엔진", "Web Search": "웹 검색", "Web Search Engine": "웹 검색 엔진", - "Web Search in Chat": "", - "Web Search Query Generation": "", + "Web Search in Chat": "채팅에서 웹 검색", + "Web Search Query Generation": "웹 검색 쿼리 생성", "Webhook URL": "웹훅 URL", "WebUI Settings": "WebUI 설정", "WebUI URL": "", - "WebUI will make requests to \"{{url}}\"": "", + "WebUI will make requests to \"{{url}}\"": "WebUI가 \"{{url}}\"로 요청을 보냅니다", "WebUI will make requests to \"{{url}}/api/chat\"": "WebUI가 \"{{url}}/api/chat\"로 요청을 보냅니다", "WebUI will make requests to \"{{url}}/chat/completions\"": "WebUI가 \"{{url}}/chat/completions\"로 요청을 보냅니다", "What are you trying to achieve?": "무엇을 성취하고 싶으신가요?", "What are you working on?": "어떤 작업을 하고 계신가요?", "What’s New in": "새로운 기능:", "When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "활성화하면 모델이 각 채팅 메시지에 실시간으로 응답하여 사용자가 메시지를 보내는 즉시 응답을 생성합니다. 이 모드는 실시간 채팅 애플리케이션에 유용하지만, 느린 하드웨어에서는 성능에 영향을 미칠 수 있습니다.", - "wherever you are": "", + "wherever you are": "당신이 어디에 있든", "Whisper (Local)": "Whisper (로컬)", "Why?": "이유는?", "Widescreen Mode": "와이드스크린 모드", @@ -1264,11 +1264,11 @@ "Write your model template content here": "여기에 모델 템플릿 내용을 입력하세요", "Yesterday": "어제", "You": "당신", - "You are currently using a trial license. Please contact support to upgrade your license.": "", + "You are currently using a trial license. Please contact support to upgrade your license.": "현재 평가판 라이선스를 사용 중입니다. 라이선스 업그레이드를 위해 지원팀에 문의하세요.", "You can only chat with a maximum of {{maxCount}} file(s) at a time.": "동시에 최대 {{maxCount}} 파일과만 대화할 수 있습니다 ", "You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "아래 '관리' 버튼으로 메모리를 추가하여 LLM들과의 상호작용을 개인화할 수 있습니다. 이를 통해 더 유용하고 맞춤화된 경험을 제공합니다.", "You cannot upload an empty file.": "빈 파일을 업로드 할 수 없습니다", - "You do not have permission to upload files": "", + "You do not have permission to upload files": "파일을 업로드할 권한이 없습니다", "You do not have permission to upload files.": "", "You have no archived conversations.": "채팅을 보관한 적이 없습니다.", "You have shared this chat": "이 채팅을 공유했습니다.", @@ -1277,6 +1277,6 @@ "Your account status is currently pending activation.": "현재 계정은 아직 활성화되지 않았습니다.", "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "당신의 모든 기여는 곧바로 플러그인 개발자에게 갑니다; Open WebUI는 일절 가져가지 않습니다 하지만, 선택한 후원 플랫폼은 수수료를 가져갈 수 있습니다.", "Youtube": "유튜브", - "Youtube Language": "", - "Youtube Proxy URL": "" + "Youtube Language": "Youtube브 언어", + "Youtube Proxy URL": "Youtube 프록시 URL" } From 1ca5d532b817c7722ce1e301f471fd3565c0450c Mon Sep 17 00:00:00 2001 From: hurxxxx Date: Thu, 1 May 2025 13:00:27 +0900 Subject: [PATCH 154/161] chore(i18n): update parsed i18n data and Korean translations --- .../chat/MessageInput/InputMenu.svelte | 4 ++-- src/lib/i18n/locales/ar-BH/translation.json | 9 ++++++++- src/lib/i18n/locales/ar/translation.json | 9 ++++++++- src/lib/i18n/locales/bg-BG/translation.json | 9 ++++++++- src/lib/i18n/locales/bn-BD/translation.json | 9 ++++++++- src/lib/i18n/locales/bo-TB/translation.json | 9 ++++++++- src/lib/i18n/locales/ca-ES/translation.json | 9 ++++++++- src/lib/i18n/locales/ceb-PH/translation.json | 9 ++++++++- src/lib/i18n/locales/cs-CZ/translation.json | 9 ++++++++- src/lib/i18n/locales/da-DK/translation.json | 9 ++++++++- src/lib/i18n/locales/de-DE/translation.json | 9 ++++++++- src/lib/i18n/locales/dg-DG/translation.json | 9 ++++++++- src/lib/i18n/locales/el-GR/translation.json | 9 ++++++++- src/lib/i18n/locales/en-GB/translation.json | 9 ++++++++- src/lib/i18n/locales/en-US/translation.json | 9 ++++++++- src/lib/i18n/locales/es-ES/translation.json | 9 ++++++++- src/lib/i18n/locales/et-EE/translation.json | 9 ++++++++- src/lib/i18n/locales/eu-ES/translation.json | 9 ++++++++- src/lib/i18n/locales/fa-IR/translation.json | 9 ++++++++- src/lib/i18n/locales/fi-FI/translation.json | 9 ++++++++- src/lib/i18n/locales/fr-CA/translation.json | 9 ++++++++- src/lib/i18n/locales/fr-FR/translation.json | 9 ++++++++- src/lib/i18n/locales/he-IL/translation.json | 9 ++++++++- src/lib/i18n/locales/hi-IN/translation.json | 9 ++++++++- src/lib/i18n/locales/hr-HR/translation.json | 9 ++++++++- src/lib/i18n/locales/hu-HU/translation.json | 9 ++++++++- src/lib/i18n/locales/id-ID/translation.json | 9 ++++++++- src/lib/i18n/locales/ie-GA/translation.json | 9 ++++++++- src/lib/i18n/locales/it-IT/translation.json | 9 ++++++++- src/lib/i18n/locales/ja-JP/translation.json | 9 ++++++++- src/lib/i18n/locales/ka-GE/translation.json | 9 ++++++++- src/lib/i18n/locales/ko-KR/translation.json | 16 ++++++++++++---- src/lib/i18n/locales/lt-LT/translation.json | 9 ++++++++- src/lib/i18n/locales/ms-MY/translation.json | 9 ++++++++- src/lib/i18n/locales/nb-NO/translation.json | 9 ++++++++- src/lib/i18n/locales/nl-NL/translation.json | 9 ++++++++- src/lib/i18n/locales/pa-IN/translation.json | 9 ++++++++- src/lib/i18n/locales/pl-PL/translation.json | 9 ++++++++- src/lib/i18n/locales/pt-BR/translation.json | 9 ++++++++- src/lib/i18n/locales/pt-PT/translation.json | 9 ++++++++- src/lib/i18n/locales/ro-RO/translation.json | 9 ++++++++- src/lib/i18n/locales/ru-RU/translation.json | 9 ++++++++- src/lib/i18n/locales/sk-SK/translation.json | 9 ++++++++- src/lib/i18n/locales/sr-RS/translation.json | 9 ++++++++- src/lib/i18n/locales/sv-SE/translation.json | 9 ++++++++- src/lib/i18n/locales/th-TH/translation.json | 9 ++++++++- src/lib/i18n/locales/tk-TW/translation.json | 9 ++++++++- src/lib/i18n/locales/tr-TR/translation.json | 9 ++++++++- src/lib/i18n/locales/uk-UA/translation.json | 9 ++++++++- src/lib/i18n/locales/ur-PK/translation.json | 9 ++++++++- src/lib/i18n/locales/vi-VN/translation.json | 9 ++++++++- src/lib/i18n/locales/zh-CN/translation.json | 9 ++++++++- src/lib/i18n/locales/zh-TW/translation.json | 9 ++++++++- 53 files changed, 422 insertions(+), 57 deletions(-) diff --git a/src/lib/components/chat/MessageInput/InputMenu.svelte b/src/lib/components/chat/MessageInput/InputMenu.svelte index 7f269ef3e..2447c3aa5 100644 --- a/src/lib/components/chat/MessageInput/InputMenu.svelte +++ b/src/lib/components/chat/MessageInput/InputMenu.svelte @@ -146,7 +146,7 @@ {/if} Date: Thu, 1 May 2025 13:16:47 +0900 Subject: [PATCH 155/161] Consolidate duplicate messages into a single one --- src/lib/components/admin/Functions/FunctionEditor.svelte | 2 +- .../components/chat/MessageInput/Commands/Knowledge.svelte | 2 +- src/lib/components/layout/Sidebar/RecursiveFolder.svelte | 2 +- src/lib/components/workspace/Tools.svelte | 2 +- src/lib/i18n/locales/ar-BH/translation.json | 4 ---- src/lib/i18n/locales/ar/translation.json | 4 ---- src/lib/i18n/locales/bg-BG/translation.json | 4 ---- src/lib/i18n/locales/bn-BD/translation.json | 4 ---- src/lib/i18n/locales/bo-TB/translation.json | 4 ---- src/lib/i18n/locales/ca-ES/translation.json | 4 ---- src/lib/i18n/locales/ceb-PH/translation.json | 4 ---- src/lib/i18n/locales/cs-CZ/translation.json | 4 ---- src/lib/i18n/locales/da-DK/translation.json | 4 ---- src/lib/i18n/locales/de-DE/translation.json | 4 ---- src/lib/i18n/locales/dg-DG/translation.json | 4 ---- src/lib/i18n/locales/el-GR/translation.json | 4 ---- src/lib/i18n/locales/en-GB/translation.json | 4 ---- src/lib/i18n/locales/en-US/translation.json | 4 ---- src/lib/i18n/locales/es-ES/translation.json | 4 ---- src/lib/i18n/locales/et-EE/translation.json | 4 ---- src/lib/i18n/locales/eu-ES/translation.json | 4 ---- src/lib/i18n/locales/fa-IR/translation.json | 4 ---- src/lib/i18n/locales/fi-FI/translation.json | 4 ---- src/lib/i18n/locales/fr-CA/translation.json | 4 ---- src/lib/i18n/locales/fr-FR/translation.json | 4 ---- src/lib/i18n/locales/he-IL/translation.json | 4 ---- src/lib/i18n/locales/hi-IN/translation.json | 4 ---- src/lib/i18n/locales/hr-HR/translation.json | 4 ---- src/lib/i18n/locales/hu-HU/translation.json | 4 ---- src/lib/i18n/locales/id-ID/translation.json | 4 ---- src/lib/i18n/locales/ie-GA/translation.json | 4 ---- src/lib/i18n/locales/it-IT/translation.json | 4 ---- src/lib/i18n/locales/ja-JP/translation.json | 4 ---- src/lib/i18n/locales/ka-GE/translation.json | 4 ---- src/lib/i18n/locales/ko-KR/translation.json | 4 ---- src/lib/i18n/locales/lt-LT/translation.json | 4 ---- src/lib/i18n/locales/ms-MY/translation.json | 4 ---- src/lib/i18n/locales/nb-NO/translation.json | 4 ---- src/lib/i18n/locales/nl-NL/translation.json | 4 ---- src/lib/i18n/locales/pa-IN/translation.json | 4 ---- src/lib/i18n/locales/pl-PL/translation.json | 4 ---- src/lib/i18n/locales/pt-BR/translation.json | 4 ---- src/lib/i18n/locales/pt-PT/translation.json | 4 ---- src/lib/i18n/locales/ro-RO/translation.json | 4 ---- src/lib/i18n/locales/ru-RU/translation.json | 4 ---- src/lib/i18n/locales/sk-SK/translation.json | 4 ---- src/lib/i18n/locales/sr-RS/translation.json | 4 ---- src/lib/i18n/locales/sv-SE/translation.json | 4 ---- src/lib/i18n/locales/th-TH/translation.json | 4 ---- src/lib/i18n/locales/tk-TW/translation.json | 4 ---- src/lib/i18n/locales/tr-TR/translation.json | 4 ---- src/lib/i18n/locales/uk-UA/translation.json | 4 ---- src/lib/i18n/locales/ur-PK/translation.json | 4 ---- src/lib/i18n/locales/vi-VN/translation.json | 4 ---- src/lib/i18n/locales/zh-CN/translation.json | 4 ---- src/lib/i18n/locales/zh-TW/translation.json | 4 ---- 56 files changed, 4 insertions(+), 212 deletions(-) diff --git a/src/lib/components/admin/Functions/FunctionEditor.svelte b/src/lib/components/admin/Functions/FunctionEditor.svelte index 6da2a83f4..9b2355fe4 100644 --- a/src/lib/components/admin/Functions/FunctionEditor.svelte +++ b/src/lib/components/admin/Functions/FunctionEditor.svelte @@ -387,7 +387,7 @@ class Pipe:
{$i18n.t('Warning:')} - {$i18n.t('Functions allow arbitrary code execution')}
— + {$i18n.t('Functions allow arbitrary code execution.')}
{$i18n.t(`don't install random functions from sources you don't trust.`)} diff --git a/src/lib/components/chat/MessageInput/Commands/Knowledge.svelte b/src/lib/components/chat/MessageInput/Commands/Knowledge.svelte index bae077b9b..adf82bb0f 100644 --- a/src/lib/components/chat/MessageInput/Commands/Knowledge.svelte +++ b/src/lib/components/chat/MessageInput/Commands/Knowledge.svelte @@ -265,7 +265,7 @@ {/each} {:else}
- {$i18n.t('No files found.')} + {$i18n.t('File not found.')}
{/if}
--> diff --git a/src/lib/components/layout/Sidebar/RecursiveFolder.svelte b/src/lib/components/layout/Sidebar/RecursiveFolder.svelte index 34899012a..f6958a772 100644 --- a/src/lib/components/layout/Sidebar/RecursiveFolder.svelte +++ b/src/lib/components/layout/Sidebar/RecursiveFolder.svelte @@ -252,7 +252,7 @@ const nameUpdateHandler = async () => { if (name === '') { - toast.error($i18n.t('Folder name cannot be empty')); + toast.error($i18n.t('Folder name cannot be empty.')); return; } diff --git a/src/lib/components/workspace/Tools.svelte b/src/lib/components/workspace/Tools.svelte index 593797822..726a39205 100644 --- a/src/lib/components/workspace/Tools.svelte +++ b/src/lib/components/workspace/Tools.svelte @@ -503,7 +503,7 @@
  • - {$i18n.t('Tools have a function calling system that allows arbitrary code execution')}. + {$i18n.t('Tools have a function calling system that allows arbitrary code execution.')}.
  • {$i18n.t('Do not install tools from sources you do not fully trust.')}
diff --git a/src/lib/i18n/locales/ar-BH/translation.json b/src/lib/i18n/locales/ar-BH/translation.json index 60585a707..76e41c76c 100644 --- a/src/lib/i18n/locales/ar-BH/translation.json +++ b/src/lib/i18n/locales/ar-BH/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "دفق قطع الاستجابة الخارجية الكبيرة بسلاسة", "Focus chat input": "التركيز على إدخال الدردشة", "Folder deleted successfully": "", - "Folder name cannot be empty": "", "Folder name cannot be empty.": "", "Folder name updated successfully": "", "Followed instructions perfectly": "اتبعت التعليمات على أكمل وجه", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "", "Functions": "", - "Functions allow arbitrary code execution": "", "Functions allow arbitrary code execution.": "", "Functions imported successfully": "", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "", "No feedbacks found": "", "No file selected": "", - "No files found.": "", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "", "Tools are a function calling system with arbitrary code execution": "", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "", "Tools have a function calling system that allows arbitrary code execution.": "", "Tools Public Sharing": "", "Top K": "Top K", diff --git a/src/lib/i18n/locales/ar/translation.json b/src/lib/i18n/locales/ar/translation.json index ce19a3041..6db3de4e0 100644 --- a/src/lib/i18n/locales/ar/translation.json +++ b/src/lib/i18n/locales/ar/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "دفق قطع الاستجابة الخارجية الكبيرة بسلاسة", "Focus chat input": "التركيز على إدخال الدردشة", "Folder deleted successfully": "تم حذف المجلد بنجاح", - "Folder name cannot be empty": "لا يمكن أن يكون اسم المجلد فارغًا", "Folder name cannot be empty.": "لا يمكن أن يكون اسم المجلد فارغًا.", "Folder name updated successfully": "تم تحديث اسم المجلد بنجاح", "Followed instructions perfectly": "اتبعت التعليمات على أكمل وجه", @@ -582,7 +581,6 @@ "Function Name": "اسم الوظيفة", "Function updated successfully": "تم تحديث الوظيفة بنجاح", "Functions": "الوظائف", - "Functions allow arbitrary code execution": "الوظائف تتيح تنفيذ كود برمجي مخصص", "Functions allow arbitrary code execution.": "الوظائف تتيح تنفيذ كود برمجي مخصص.", "Functions imported successfully": "تم استيراد الوظائف بنجاح", "Gemini": "Gemini", @@ -787,7 +785,6 @@ "No distance available": "لا توجد مسافة متاحة", "No feedbacks found": "لم يتم العثور على ملاحظات", "No file selected": "لم يتم تحديد ملف", - "No files found.": "لم يتم العثور على ملفات.", "No groups with access, add a group to grant access": "لا توجد مجموعات لها حق الوصول، أضف مجموعة لمنح الوصول", "No HTML, CSS, or JavaScript content found.": "لم يتم العثور على محتوى HTML أو CSS أو JavaScript.", "No inference engine with management support found": "لم يتم العثور على محرك استدلال يدعم الإدارة", @@ -1162,7 +1159,6 @@ "Tools Access": "الوصول إلى الأدوات", "Tools are a function calling system with arbitrary code execution": "الأدوات عبارة عن نظام لاستدعاء الوظائف يسمح بتنفيذ كود برمجي مخصص", "Tools Function Calling Prompt": "توجيه استدعاء وظائف الأدوات", - "Tools have a function calling system that allows arbitrary code execution": "تحتوي الأدوات على نظام لاستدعاء الوظائف يتيح تنفيذ كود برمجي مخصص", "Tools have a function calling system that allows arbitrary code execution.": "تحتوي الأدوات على نظام لاستدعاء الوظائف يتيح تنفيذ كود برمجي مخصص.", "Tools Public Sharing": "", "Top K": "Top K", diff --git a/src/lib/i18n/locales/bg-BG/translation.json b/src/lib/i18n/locales/bg-BG/translation.json index 0e30a5fe2..598df508e 100644 --- a/src/lib/i18n/locales/bg-BG/translation.json +++ b/src/lib/i18n/locales/bg-BG/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Плавно предаване на големи части от външен отговор", "Focus chat input": "Фокусиране на чат вход", "Folder deleted successfully": "Папката е изтрита успешно", - "Folder name cannot be empty": "Името на папката не може да бъде празно", "Folder name cannot be empty.": "Името на папката не може да бъде празно.", "Folder name updated successfully": "Името на папката е актуализирано успешно", "Followed instructions perfectly": "Следвайте инструкциите перфектно", @@ -582,7 +581,6 @@ "Function Name": "Име на функцията", "Function updated successfully": "Функцията е актуализирана успешно", "Functions": "Функции", - "Functions allow arbitrary code execution": "Функциите позволяват произволно изпълнение на код", "Functions allow arbitrary code execution.": "Функциите позволяват произволно изпълнение на код.", "Functions imported successfully": "Функциите са импортирани успешно", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "Няма налично разстояние", "No feedbacks found": "Не са намерени обратни връзки", "No file selected": "Не е избран файл", - "No files found.": "Не са намерени файлове.", "No groups with access, add a group to grant access": "Няма групи с достъп, добавете група, за да предоставите достъп", "No HTML, CSS, or JavaScript content found.": "Не е намерено HTML, CSS или JavaScript съдържание.", "No inference engine with management support found": "Не е намерен механизъм за извод с поддръжка на управление", @@ -1162,7 +1159,6 @@ "Tools Access": "Достъп до инструменти", "Tools are a function calling system with arbitrary code execution": "Инструментите са система за извикване на функции с произволно изпълнение на код", "Tools Function Calling Prompt": "Промпт за извикване на функции на инструментите", - "Tools have a function calling system that allows arbitrary code execution": "Инструментите имат система за извикване на функции, която позволява произволно изпълнение на код", "Tools have a function calling system that allows arbitrary code execution.": "Инструментите имат система за извикване на функции, която позволява произволно изпълнение на код.", "Tools Public Sharing": "", "Top K": "Топ K", diff --git a/src/lib/i18n/locales/bn-BD/translation.json b/src/lib/i18n/locales/bn-BD/translation.json index b0eed4e1f..6ec232952 100644 --- a/src/lib/i18n/locales/bn-BD/translation.json +++ b/src/lib/i18n/locales/bn-BD/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "বড় এক্সটার্নাল রেসপন্স চাঙ্কগুলো মসৃণভাবে প্রবাহিত করুন", "Focus chat input": "চ্যাট ইনপুট ফোকাস করুন", "Folder deleted successfully": "", - "Folder name cannot be empty": "", "Folder name cannot be empty.": "", "Folder name updated successfully": "", "Followed instructions perfectly": "নির্দেশাবলী নিখুঁতভাবে অনুসরণ করা হয়েছে", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "", "Functions": "", - "Functions allow arbitrary code execution": "", "Functions allow arbitrary code execution.": "", "Functions imported successfully": "", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "", "No feedbacks found": "", "No file selected": "", - "No files found.": "", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "", "Tools are a function calling system with arbitrary code execution": "", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "", "Tools have a function calling system that allows arbitrary code execution.": "", "Tools Public Sharing": "", "Top K": "Top K", diff --git a/src/lib/i18n/locales/bo-TB/translation.json b/src/lib/i18n/locales/bo-TB/translation.json index 007d32d29..ff82f2b56 100644 --- a/src/lib/i18n/locales/bo-TB/translation.json +++ b/src/lib/i18n/locales/bo-TB/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "ཕྱི་རོལ་གྱི་ལན་གྱི་དུམ་བུ་ཆེན་པོ་རྒྱུན་བཞིན་རྒྱུག་པ།", "Focus chat input": "ཁ་བརྡའི་ནང་འཇུག་ལ་དམིགས་པ།", "Folder deleted successfully": "ཡིག་སྣོད་ལེགས་པར་བསུབས་ཟིན།", - "Folder name cannot be empty": "ཡིག་སྣོད་ཀྱི་མིང་སྟོང་པ་ཡིན་མི་ཆོག", "Folder name cannot be empty.": "ཡིག་སྣོད་ཀྱི་མིང་སྟོང་པ་ཡིན་མི་ཆོག", "Folder name updated successfully": "ཡིག་སྣོད་ཀྱི་མིང་ལེགས་པར་གསར་སྒྱུར་བྱས་ཟིན།", "Followed instructions perfectly": "ལམ་སྟོན་ཡང་དག་པར་བསྒྲུབས།", @@ -582,7 +581,6 @@ "Function Name": "ལས་འགན་གྱི་མིང་།", "Function updated successfully": "ལས་འགན་ལེགས་པར་གསར་སྒྱུར་བྱས་ཟིན།", "Functions": "ལས་འགན།", - "Functions allow arbitrary code execution": "ལས་འགན་གྱིས་གང་འདོད་ཀྱི་ཀོཌ་ལག་བསྟར་ལ་གནང་བ་སྤྲོད།", "Functions allow arbitrary code execution.": "ལས་འགན་གྱིས་གང་འདོད་ཀྱི་ཀོཌ་ལག་བསྟར་ལ་གནང་བ་སྤྲོད།", "Functions imported successfully": "ལས་འགན་ལེགས་པར་ནང་འདྲེན་བྱས།", "Gemini": "Gemini", @@ -787,7 +785,6 @@ "No distance available": "ཐག་རིང་ཚད་མེད།", "No feedbacks found": "བསམ་འཆར་མ་རྙེད།", "No file selected": "ཡིག་ཆ་གདམ་ག་མ་བྱས།", - "No files found.": "ཡིག་ཆ་མ་རྙེད།", "No groups with access, add a group to grant access": "འཛུལ་སྤྱོད་ཡོད་པའི་ཚོགས་པ་མེད། འཛུལ་སྤྱོད་སྤྲོད་པར་ཚོགས་པ་ཞིག་སྣོན་པ།", "No HTML, CSS, or JavaScript content found.": "HTML, CSS, ཡང་ན་ JavaScript གི་ནང་དོན་མ་རྙེད།", "No inference engine with management support found": "དོ་དམ་རྒྱབ་སྐྱོར་ཡོད་པའི་དཔོག་རྩིས་འཕྲུལ་འཁོར་མ་རྙེད།", @@ -1162,7 +1159,6 @@ "Tools Access": "ལག་ཆར་འཛུལ་སྤྱོད།", "Tools are a function calling system with arbitrary code execution": "ལག་ཆ་ནི་གང་འདོད་ཀྱི་ཀོཌ་ལག་བསྟར་ཡོད་པའི་ལས་འགན་འབོད་པའི་མ་ལག་ཅིག་ཡིན།", "Tools Function Calling Prompt": "ལག་ཆ་ལས་འགན་འབོད་པའི་འགུལ་སློང་།", - "Tools have a function calling system that allows arbitrary code execution": "ལག་ཆར་གང་འདོད་ཀྱི་ཀོཌ་ལག་བསྟར་ལ་གནང་བ་སྤྲོད་པའི་ལས་འགན་འབོད་པའི་མ་ལག་ཡོད།", "Tools have a function calling system that allows arbitrary code execution.": "ལག་ཆར་གང་འདོད་ཀྱི་ཀོཌ་ལག་བསྟར་ལ་གནང་བ་སྤྲོད་པའི་ལས་འགན་འབོད་པའི་མ་ལག་ཡོད།", "Tools Public Sharing": "ལག་ཆ་སྤྱི་སྤྱོད་མཉམ་སྤྱོད།", "Top K": "Top K", diff --git a/src/lib/i18n/locales/ca-ES/translation.json b/src/lib/i18n/locales/ca-ES/translation.json index df9cf3d00..036597227 100644 --- a/src/lib/i18n/locales/ca-ES/translation.json +++ b/src/lib/i18n/locales/ca-ES/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Transmetre amb fluïdesa grans trossos de resposta externa", "Focus chat input": "Estableix el focus a l'entrada del xat", "Folder deleted successfully": "Carpeta eliminada correctament", - "Folder name cannot be empty": "El nom de la carpeta no pot ser buit", "Folder name cannot be empty.": "El nom de la carpeta no pot ser buit.", "Folder name updated successfully": "Nom de la carpeta actualitzat correctament", "Followed instructions perfectly": "S'han seguit les instruccions perfectament", @@ -582,7 +581,6 @@ "Function Name": "Nom de la funció", "Function updated successfully": "La funció s'ha actualitzat correctament", "Functions": "Funcions", - "Functions allow arbitrary code execution": "Les funcions permeten l'execució de codi arbitrari", "Functions allow arbitrary code execution.": "Les funcions permeten l'execució de codi arbitrari.", "Functions imported successfully": "Les funcions s'han importat correctament", "Gemini": "Gemini", @@ -787,7 +785,6 @@ "No distance available": "No hi ha distància disponible", "No feedbacks found": "No s'han trobat comentaris", "No file selected": "No s'ha escollit cap fitxer", - "No files found.": "No s'han trobat arxius.", "No groups with access, add a group to grant access": "No hi ha cap grup amb accés, afegeix un grup per concedir accés", "No HTML, CSS, or JavaScript content found.": "No s'ha trobat contingut HTML, CSS o JavaScript.", "No inference engine with management support found": "No s'ha trobat un motor d'inferència amb suport de gestió", @@ -1162,7 +1159,6 @@ "Tools Access": "Accés a les eines", "Tools are a function calling system with arbitrary code execution": "Les eines són un sistema de crida a funcions amb execució de codi arbitrari", "Tools Function Calling Prompt": "Indicació per a la crida de funcions", - "Tools have a function calling system that allows arbitrary code execution": "Les eines disposen d'un sistema de crida a funcions que permet execució de codi arbitrari", "Tools have a function calling system that allows arbitrary code execution.": "Les eines disposen d'un sistema de crida a funcions que permet execució de codi arbitrari.", "Tools Public Sharing": "Compartició pública d'eines", "Top K": "Top K", diff --git a/src/lib/i18n/locales/ceb-PH/translation.json b/src/lib/i18n/locales/ceb-PH/translation.json index 0adcba54f..8d41ae6fb 100644 --- a/src/lib/i18n/locales/ceb-PH/translation.json +++ b/src/lib/i18n/locales/ceb-PH/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Hapsay nga paghatud sa daghang mga tipik sa eksternal nga mga tubag", "Focus chat input": "Pag-focus sa entry sa diskusyon", "Folder deleted successfully": "", - "Folder name cannot be empty": "", "Folder name cannot be empty.": "", "Folder name updated successfully": "", "Followed instructions perfectly": "", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "", "Functions": "", - "Functions allow arbitrary code execution": "", "Functions allow arbitrary code execution.": "", "Functions imported successfully": "", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "", "No feedbacks found": "", "No file selected": "", - "No files found.": "", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "", "Tools are a function calling system with arbitrary code execution": "", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "", "Tools have a function calling system that allows arbitrary code execution.": "", "Tools Public Sharing": "", "Top K": "Top K", diff --git a/src/lib/i18n/locales/cs-CZ/translation.json b/src/lib/i18n/locales/cs-CZ/translation.json index 5510fd96c..cb2f1ddca 100644 --- a/src/lib/i18n/locales/cs-CZ/translation.json +++ b/src/lib/i18n/locales/cs-CZ/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Plynule streamujte velké externí části odpovědí", "Focus chat input": "Zaměřte se na vstup chatu", "Folder deleted successfully": "Složka byla úspěšně smazána", - "Folder name cannot be empty": "Název složky nesmí být prázdný", "Folder name cannot be empty.": "Název složky nesmí být prázdný.", "Folder name updated successfully": "Název složky byl úspěšně aktualizován.", "Followed instructions perfectly": "Dodržel pokyny dokonale.", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "Funkce byla úspěšně aktualizována.", "Functions": "Funkce", - "Functions allow arbitrary code execution": "Funkce umožňují vykonávat libovolný kód.", "Functions allow arbitrary code execution.": "Funkce umožňují provádění libovolného kódu.", "Functions imported successfully": "Funkce byly úspěšně importovány", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "Není dostupná žádná vzdálenost", "No feedbacks found": "Žádná zpětná vazba nenalezena", "No file selected": "Nebyl vybrán žádný soubor", - "No files found.": "Nebyly nalezeny žádné soubory.", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "Nebyl nalezen žádný obsah HTML, CSS ani JavaScriptu.", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "", "Tools are a function calling system with arbitrary code execution": "Nástroje jsou systémem pro volání funkcí s vykonáváním libovolného kódu.", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "Nástroje mají systém volání funkcí, který umožňuje libovolné spouštění kódu.", "Tools have a function calling system that allows arbitrary code execution.": "Nástroje mají systém volání funkcí, který umožňuje spuštění libovolného kódu.", "Tools Public Sharing": "", "Top K": "Top K", diff --git a/src/lib/i18n/locales/da-DK/translation.json b/src/lib/i18n/locales/da-DK/translation.json index 0f5fb4d49..57b43211b 100644 --- a/src/lib/i18n/locales/da-DK/translation.json +++ b/src/lib/i18n/locales/da-DK/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Stream store eksterne svar chunks flydende", "Focus chat input": "Fokuser på chatinput", "Folder deleted successfully": "", - "Folder name cannot be empty": "", "Folder name cannot be empty.": "", "Folder name updated successfully": "", "Followed instructions perfectly": "Fulgte instruktionerne perfekt", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "Funktion opdateret.", "Functions": "Funktioner", - "Functions allow arbitrary code execution": "Funktioner tillader kørsel af vilkårlig kode", "Functions allow arbitrary code execution.": "Funktioner tillader kørsel af vilkårlig kode.", "Functions imported successfully": "Funktioner importeret.", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "", "No feedbacks found": "", "No file selected": "Ingen fil valgt", - "No files found.": "", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "Intet HTML-, CSS- eller JavaScript-indhold fundet.", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "Værktøjs Adgang", "Tools are a function calling system with arbitrary code execution": "Værktøjer er et funktionkaldssystem med vilkårlig kodeudførelse", "Tools Function Calling Prompt": "Værktøjs Funktionkaldprompt", - "Tools have a function calling system that allows arbitrary code execution": "Værktøjer har et funktionkaldssystem, der tillader vilkårlig kodeudførelse", "Tools have a function calling system that allows arbitrary code execution.": "Værktøjer har et funktionkaldssystem, der tillader vilkårlig kodeudførelse.", "Tools Public Sharing": "Værktøjer Offentlig Deling", "Top K": "Top K", diff --git a/src/lib/i18n/locales/de-DE/translation.json b/src/lib/i18n/locales/de-DE/translation.json index b8e818032..4f5ff4f44 100644 --- a/src/lib/i18n/locales/de-DE/translation.json +++ b/src/lib/i18n/locales/de-DE/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Nahtlose Übertragung großer externer Antwortabschnitte", "Focus chat input": "Chat-Eingabe fokussieren", "Folder deleted successfully": "Ordner erfolgreich gelöscht", - "Folder name cannot be empty": "Ordnername darf nicht leer sein", "Folder name cannot be empty.": "Ordnername darf nicht leer sein.", "Folder name updated successfully": "Ordnername erfolgreich aktualisiert", "Followed instructions perfectly": "Anweisungen perfekt befolgt", @@ -582,7 +581,6 @@ "Function Name": "Funktionsname", "Function updated successfully": "Funktion erfolgreich aktualisiert", "Functions": "Funktionen", - "Functions allow arbitrary code execution": "Funktionen ermöglichen die Ausführung beliebigen Codes", "Functions allow arbitrary code execution.": "Funktionen ermöglichen die Ausführung beliebigen Codes.", "Functions imported successfully": "Funktionen erfolgreich importiert", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "Keine Distanz verfügbar", "No feedbacks found": "Kein Feedback gefunden", "No file selected": "Keine Datei ausgewählt", - "No files found.": "Keine Dateien gefunden.", "No groups with access, add a group to grant access": "Keine Gruppen mit Zugriff, fügen Sie eine Gruppe hinzu, um Zugriff zu gewähren", "No HTML, CSS, or JavaScript content found.": "Keine HTML-, CSS- oder JavaScript-Inhalte gefunden.", "No inference engine with management support found": "Keine Inferenz-Engine mit Management-Unterstützung gefunden", @@ -1162,7 +1159,6 @@ "Tools Access": "Werkzeugzugriff", "Tools are a function calling system with arbitrary code execution": "Wekzeuge sind ein Funktionssystem mit beliebiger Codeausführung", "Tools Function Calling Prompt": "Prompt für Funktionssystemaufrufe", - "Tools have a function calling system that allows arbitrary code execution": "Werkezuge verfügen über ein Funktionssystem, das die Ausführung beliebigen Codes ermöglicht", "Tools have a function calling system that allows arbitrary code execution.": "Werkzeuge verfügen über ein Funktionssystem, das die Ausführung beliebigen Codes ermöglicht.", "Tools Public Sharing": "", "Top K": "Top K", diff --git a/src/lib/i18n/locales/dg-DG/translation.json b/src/lib/i18n/locales/dg-DG/translation.json index 64eb5e1fc..d4b740730 100644 --- a/src/lib/i18n/locales/dg-DG/translation.json +++ b/src/lib/i18n/locales/dg-DG/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Fluidly wow big chunks", "Focus chat input": "Focus chat bork", "Folder deleted successfully": "", - "Folder name cannot be empty": "", "Folder name cannot be empty.": "", "Folder name updated successfully": "", "Followed instructions perfectly": "", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "", "Functions": "", - "Functions allow arbitrary code execution": "", "Functions allow arbitrary code execution.": "", "Functions imported successfully": "", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "", "No feedbacks found": "", "No file selected": "", - "No files found.": "", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "", "Tools are a function calling system with arbitrary code execution": "", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "", "Tools have a function calling system that allows arbitrary code execution.": "", "Tools Public Sharing": "", "Top K": "Top K very top", diff --git a/src/lib/i18n/locales/el-GR/translation.json b/src/lib/i18n/locales/el-GR/translation.json index 558e8fefa..9f008ec4d 100644 --- a/src/lib/i18n/locales/el-GR/translation.json +++ b/src/lib/i18n/locales/el-GR/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Ροή μεγάλων εξωτερικών τμημάτων απάντησης ομαλά", "Focus chat input": "Εστίαση στο πεδίο συνομιλίας", "Folder deleted successfully": "Ο φάκελος διαγράφηκε με επιτυχία", - "Folder name cannot be empty": "Το όνομα του φακέλου δεν μπορεί να είναι κενό", "Folder name cannot be empty.": "Το όνομα του φακέλου δεν μπορεί να είναι κενό.", "Folder name updated successfully": "Το όνομα του φακέλου ενημερώθηκε με επιτυχία", "Followed instructions perfectly": "Ακολούθησε τις οδηγίες τέλεια", @@ -582,7 +581,6 @@ "Function Name": "Όνομα Λειτουργίας", "Function updated successfully": "Η λειτουργία ενημερώθηκε με επιτυχία", "Functions": "Λειτουργίες", - "Functions allow arbitrary code execution": "Οι λειτουργίες επιτρέπουν την εκτέλεση αυθαίρετου κώδικα", "Functions allow arbitrary code execution.": "Οι λειτουργίες επιτρέπουν την εκτέλεση αυθαίρετου κώδικα.", "Functions imported successfully": "Οι λειτουργίες εισήχθησαν με επιτυχία", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "Δεν υπάρχει διαθέσιμη απόσταση", "No feedbacks found": "Δεν βρέθηκαν ανατροφοδοτήσεις", "No file selected": "Δεν έχει επιλεγεί αρχείο", - "No files found.": "Δεν βρέθηκαν αρχεία.", "No groups with access, add a group to grant access": "Δεν υπάρχουν ομάδες με πρόσβαση, προσθέστε μια ομάδα για να χορηγήσετε πρόσβαση", "No HTML, CSS, or JavaScript content found.": "Δεν βρέθηκε περιεχόμενο HTML, CSS ή JavaScript.", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "Πρόσβαση Εργαλείων", "Tools are a function calling system with arbitrary code execution": "Τα εργαλεία είναι ένα σύστημα κλήσης λειτουργιών με αυθαίρετη εκτέλεση κώδικα", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "Τα εργαλεία διαθέτουν ένα σύστημα κλήσης λειτουργιών που επιτρέπει την αυθαίρετη εκτέλεση κώδικα", "Tools have a function calling system that allows arbitrary code execution.": "Τα εργαλεία διαθέτουν ένα σύστημα κλήσης λειτουργιών που επιτρέπει την αυθαίρετη εκτέλεση κώδικα.", "Tools Public Sharing": "", "Top K": "Top K", diff --git a/src/lib/i18n/locales/en-GB/translation.json b/src/lib/i18n/locales/en-GB/translation.json index 776d0274b..b45ba5399 100644 --- a/src/lib/i18n/locales/en-GB/translation.json +++ b/src/lib/i18n/locales/en-GB/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "", "Focus chat input": "", "Folder deleted successfully": "", - "Folder name cannot be empty": "", "Folder name cannot be empty.": "", "Folder name updated successfully": "", "Followed instructions perfectly": "", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "", "Functions": "", - "Functions allow arbitrary code execution": "", "Functions allow arbitrary code execution.": "", "Functions imported successfully": "", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "", "No feedbacks found": "", "No file selected": "", - "No files found.": "", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "", "Tools are a function calling system with arbitrary code execution": "", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "", "Tools have a function calling system that allows arbitrary code execution.": "", "Tools Public Sharing": "", "Top K": "", diff --git a/src/lib/i18n/locales/en-US/translation.json b/src/lib/i18n/locales/en-US/translation.json index 776d0274b..b45ba5399 100644 --- a/src/lib/i18n/locales/en-US/translation.json +++ b/src/lib/i18n/locales/en-US/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "", "Focus chat input": "", "Folder deleted successfully": "", - "Folder name cannot be empty": "", "Folder name cannot be empty.": "", "Folder name updated successfully": "", "Followed instructions perfectly": "", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "", "Functions": "", - "Functions allow arbitrary code execution": "", "Functions allow arbitrary code execution.": "", "Functions imported successfully": "", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "", "No feedbacks found": "", "No file selected": "", - "No files found.": "", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "", "Tools are a function calling system with arbitrary code execution": "", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "", "Tools have a function calling system that allows arbitrary code execution.": "", "Tools Public Sharing": "", "Top K": "", diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index e6c260c00..5024d7222 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Transmisión fluida de fragmentos de grandes respuestas externas", "Focus chat input": "Enfocar campo de chat", "Folder deleted successfully": "Carpeta eliminada correctamente", - "Folder name cannot be empty": "El nombre de la carpeta no puede estar vacío", "Folder name cannot be empty.": "El nombre de la carpeta no puede estar vacío", "Folder name updated successfully": "Nombre de la carpeta actualizado correctamente", "Followed instructions perfectly": "Siguió las instrucciones perfectamente", @@ -582,7 +581,6 @@ "Function Name": "Nombre de la Función", "Function updated successfully": "Función actualizada correctamente", "Functions": "Funciones", - "Functions allow arbitrary code execution": "Las Funciones habilitan la ejecución de código arbitrario", "Functions allow arbitrary code execution.": "Las Funciones habilitan la ejecución de código arbitrario.", "Functions imported successfully": "Funciones importadas correctamente", "Gemini": "Gemini", @@ -787,7 +785,6 @@ "No distance available": "No hay distancia disponible", "No feedbacks found": "No se encontraron realimentaciones", "No file selected": "No se seleccionó archivo", - "No files found.": "No se encontraron archivos.", "No groups with access, add a group to grant access": "No hay grupos con acceso, añade un grupo para otorgar acceso", "No HTML, CSS, or JavaScript content found.": "No se encontró contenido HTML, CSS, o JavaScript.", "No inference engine with management support found": "No se encontró un motor de inferencia que soporte gestión", @@ -1162,7 +1159,6 @@ "Tools Access": "Acceso a Herramientas", "Tools are a function calling system with arbitrary code execution": "Las herramientas son un sistema de llamada de funciones con ejecución de código arbitrario", "Tools Function Calling Prompt": "Indicador para la Función de Llamada a las Herramientas", - "Tools have a function calling system that allows arbitrary code execution": "Las herramientas tienen un sistema de llamadas de funciones que permite la ejecución de código arbitrario", "Tools have a function calling system that allows arbitrary code execution.": "Las herramientas tienen un sistema de llamada de funciones que permite la ejecución de código arbitrario.", "Tools Public Sharing": "", "Top K": "Top K", diff --git a/src/lib/i18n/locales/et-EE/translation.json b/src/lib/i18n/locales/et-EE/translation.json index 08920b853..98815bc91 100644 --- a/src/lib/i18n/locales/et-EE/translation.json +++ b/src/lib/i18n/locales/et-EE/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Suurte väliste vastuste tükkide sujuv voogedastus", "Focus chat input": "Fokuseeri vestluse sisendile", "Folder deleted successfully": "Kaust edukalt kustutatud", - "Folder name cannot be empty": "Kausta nimi ei saa olla tühi", "Folder name cannot be empty.": "Kausta nimi ei saa olla tühi.", "Folder name updated successfully": "Kausta nimi edukalt uuendatud", "Followed instructions perfectly": "Järgis juhiseid täiuslikult", @@ -582,7 +581,6 @@ "Function Name": "Funktsiooni nimi", "Function updated successfully": "Funktsioon edukalt uuendatud", "Functions": "Funktsioonid", - "Functions allow arbitrary code execution": "Funktsioonid võimaldavad suvalise koodi käivitamist", "Functions allow arbitrary code execution.": "Funktsioonid võimaldavad suvalise koodi käivitamist.", "Functions imported successfully": "Funktsioonid edukalt imporditud", "Gemini": "Gemini", @@ -787,7 +785,6 @@ "No distance available": "Kaugus pole saadaval", "No feedbacks found": "Tagasisidet ei leitud", "No file selected": "Faili pole valitud", - "No files found.": "Faile ei leitud.", "No groups with access, add a group to grant access": "Puuduvad juurdepääsuõigustega grupid, lisage grupp juurdepääsu andmiseks", "No HTML, CSS, or JavaScript content found.": "HTML, CSS ega JavaScript sisu ei leitud.", "No inference engine with management support found": "Järeldusmootorit haldamise toega ei leitud", @@ -1162,7 +1159,6 @@ "Tools Access": "Tööriistade juurdepääs", "Tools are a function calling system with arbitrary code execution": "Tööriistad on funktsioonide kutsumise süsteem suvalise koodi täitmisega", "Tools Function Calling Prompt": "Tööriistade funktsioonide kutsumise vihje", - "Tools have a function calling system that allows arbitrary code execution": "Tööriistadel on funktsioonide kutsumise süsteem, mis võimaldab suvalise koodi täitmist", "Tools have a function calling system that allows arbitrary code execution.": "Tööriistadel on funktsioonide kutsumise süsteem, mis võimaldab suvalise koodi täitmist.", "Tools Public Sharing": "", "Top K": "Top K", diff --git a/src/lib/i18n/locales/eu-ES/translation.json b/src/lib/i18n/locales/eu-ES/translation.json index 2ec4fb86b..4ff344591 100644 --- a/src/lib/i18n/locales/eu-ES/translation.json +++ b/src/lib/i18n/locales/eu-ES/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Modu jariagarrian transmititu kanpoko erantzun zati handiak", "Focus chat input": "Fokuratu txataren sarrera", "Folder deleted successfully": "Karpeta ongi ezabatu da", - "Folder name cannot be empty": "Karpetaren izena ezin da hutsik egon", "Folder name cannot be empty.": "Karpetaren izena ezin da hutsik egon.", "Folder name updated successfully": "Karpetaren izena ongi eguneratu da", "Followed instructions perfectly": "Jarraibideak perfektuki jarraitu ditu", @@ -582,7 +581,6 @@ "Function Name": "Funtzioaren Izena", "Function updated successfully": "Funtzioa ongi eguneratu da", "Functions": "Funtzioak", - "Functions allow arbitrary code execution": "Funtzioek kode arbitrarioa exekutatzea ahalbidetzen dute", "Functions allow arbitrary code execution.": "Funtzioek kode arbitrarioa exekutatzea ahalbidetzen dute.", "Functions imported successfully": "Funtzioak ongi inportatu dira", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "Ez dago distantziarik eskuragarri", "No feedbacks found": "Ez da iritzirik aurkitu", "No file selected": "Ez da fitxategirik hautatu", - "No files found.": "Ez da fitxategirik aurkitu.", "No groups with access, add a group to grant access": "Ez dago sarbidea duen talderik, gehitu talde bat sarbidea emateko", "No HTML, CSS, or JavaScript content found.": "Ez da HTML, CSS, edo JavaScript edukirik aurkitu.", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "Tresnen sarbidea", "Tools are a function calling system with arbitrary code execution": "Tresnak kode arbitrarioa exekutatzeko funtzio deitzeko sistema bat dira", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "Tresnek kode arbitrarioa exekutatzeko aukera ematen duen funtzio deitzeko sistema dute", "Tools have a function calling system that allows arbitrary code execution.": "Tresnek kode arbitrarioa exekutatzeko aukera ematen duen funtzio deitzeko sistema dute.", "Tools Public Sharing": "", "Top K": "Goiko K", diff --git a/src/lib/i18n/locales/fa-IR/translation.json b/src/lib/i18n/locales/fa-IR/translation.json index 02d0261e6..7b54bb826 100644 --- a/src/lib/i18n/locales/fa-IR/translation.json +++ b/src/lib/i18n/locales/fa-IR/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "تکه های پاسخ خارجی بزرگ را به صورت سیال پخش کنید", "Focus chat input": "فوکوس کردن ورودی گپ", "Folder deleted successfully": "پوشه با موفقیت حذف شد", - "Folder name cannot be empty": "نام پوشه نمی\u200cتواند خالی باشد", "Folder name cannot be empty.": "نام پوشه نمی\u200cتواند خالی باشد.", "Folder name updated successfully": "نام پوشه با موفقیت به\u200cروز شد", "Followed instructions perfectly": "دستورالعمل ها را کاملا دنبال کرد", @@ -582,7 +581,6 @@ "Function Name": "نام تابع", "Function updated successfully": "تابع با موفقیت به\u200cروز شد", "Functions": "توابع", - "Functions allow arbitrary code execution": "توابع اجازه اجرای کد دلخواه را می\u200cدهند", "Functions allow arbitrary code execution.": "توابع اجازه اجرای کد دلخواه را می\u200cدهند.", "Functions imported successfully": "درون\u200cریزی توابع با موفقیت انجام شد", "Gemini": "جمینی", @@ -787,7 +785,6 @@ "No distance available": "فاصله\u200cای در دسترس نیست", "No feedbacks found": "بازخوردی یافت نشد", "No file selected": "فایلی انتخاب نشده است", - "No files found.": "فایلی یافت نشد.", "No groups with access, add a group to grant access": "هیچ گروهی با دسترسی وجود ندارد، یک گروه برای اعطای دسترسی اضافه کنید", "No HTML, CSS, or JavaScript content found.": "محتوای HTML، CSS یا JavaScript یافت نشد.", "No inference engine with management support found": "موتور استنتاج با پشتیبانی مدیریت یافت نشد", @@ -1162,7 +1159,6 @@ "Tools Access": "دسترسی به ابزارها", "Tools are a function calling system with arbitrary code execution": "ابزارها یک سیستم فراخوانی تابع با اجرای کد دلخواه هستند", "Tools Function Calling Prompt": "پرامپت فراخوانی تابع ابزارها", - "Tools have a function calling system that allows arbitrary code execution": "ابزارها دارای سیستم فراخوانی تابع هستند که اجازه اجرای کد دلخواه را می\u200cدهد", "Tools have a function calling system that allows arbitrary code execution.": "ابزارها دارای سیستم فراخوانی تابع هستند که اجازه اجرای کد دلخواه را می\u200cدهد.", "Tools Public Sharing": "اشتراک\u200cگذاری عمومی ابزارها", "Top K": "Top K", diff --git a/src/lib/i18n/locales/fi-FI/translation.json b/src/lib/i18n/locales/fi-FI/translation.json index 065dcd373..9c8a4bbce 100644 --- a/src/lib/i18n/locales/fi-FI/translation.json +++ b/src/lib/i18n/locales/fi-FI/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Virtaa suuria ulkoisia vastausosia joustavasti", "Focus chat input": "Fokusoi syöttökenttään", "Folder deleted successfully": "Kansio poistettu onnistuneesti", - "Folder name cannot be empty": "Kansion nimi ei voi olla tyhjä", "Folder name cannot be empty.": "Kansion nimi ei voi olla tyhjä.", "Folder name updated successfully": "Kansion nimi päivitetty onnistuneesti", "Followed instructions perfectly": "Noudatti ohjeita täydellisesti", @@ -582,7 +581,6 @@ "Function Name": "Toiminnon nimi", "Function updated successfully": "Toiminto päivitetty onnistuneesti", "Functions": "Toiminnot", - "Functions allow arbitrary code execution": "Toiminnot sallivat mielivaltaisen koodin suorittamisen", "Functions allow arbitrary code execution.": "Toiminnot sallivat mielivaltaisen koodin suorittamisen.", "Functions imported successfully": "Toiminnot tuotu onnistuneesti", "Gemini": "Gemini", @@ -787,7 +785,6 @@ "No distance available": "Etäisyyttä ei saatavilla", "No feedbacks found": "Palautteita ei löytynyt", "No file selected": "Tiedostoa ei ole valittu", - "No files found.": "Tiedostoja ei löytynyt.", "No groups with access, add a group to grant access": "Ei ryhmiä, joilla on pääsy, lisää ryhmä antaaksesi pääsyn", "No HTML, CSS, or JavaScript content found.": "HTML-, CSS- tai JavaScript-sisältöä ei löytynyt.", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "Työkalujen käyttöoikeudet", "Tools are a function calling system with arbitrary code execution": "Työkalut ovat toimintokutsuihin perustuva järjestelmä, joka sallii mielivaltaisen koodin suorittamisen", "Tools Function Calling Prompt": "Työkalujen kutsukehote", - "Tools have a function calling system that allows arbitrary code execution": "Työkaluilla on toimintokutsuihin perustuva järjestelmä, joka sallii mielivaltaisen koodin suorittamisen", "Tools have a function calling system that allows arbitrary code execution.": "Työkalut sallivat mielivaltaisen koodin suorittamisen toimintokutsuilla.", "Tools Public Sharing": "Työkalujen julkinen jakaminen", "Top K": "Top K", diff --git a/src/lib/i18n/locales/fr-CA/translation.json b/src/lib/i18n/locales/fr-CA/translation.json index 41e30c3a8..ae026de44 100644 --- a/src/lib/i18n/locales/fr-CA/translation.json +++ b/src/lib/i18n/locales/fr-CA/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Diffuser de manière fluide de larges portions de réponses externes", "Focus chat input": "Se concentrer sur le chat en entrée", "Folder deleted successfully": "", - "Folder name cannot be empty": "", "Folder name cannot be empty.": "", "Folder name updated successfully": "", "Followed instructions perfectly": "A parfaitement suivi les instructions", @@ -582,7 +581,6 @@ "Function Name": "Nom de la fonction", "Function updated successfully": "La fonction a été mise à jour avec succès", "Functions": "Fonctions", - "Functions allow arbitrary code execution": "Les fonctions permettent l'exécution de code arbitraire", "Functions allow arbitrary code execution.": "Les fonctions permettent l'exécution de code arbitraire.", "Functions imported successfully": "Fonctions importées avec succès", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "", "No feedbacks found": "", "No file selected": "Aucun fichier sélectionné", - "No files found.": "", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "", "Tools are a function calling system with arbitrary code execution": "", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "", "Tools have a function calling system that allows arbitrary code execution.": "", "Tools Public Sharing": "", "Top K": "Top K", diff --git a/src/lib/i18n/locales/fr-FR/translation.json b/src/lib/i18n/locales/fr-FR/translation.json index 925e4dc95..6e392691d 100644 --- a/src/lib/i18n/locales/fr-FR/translation.json +++ b/src/lib/i18n/locales/fr-FR/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Streaming fluide de gros chunks de réponses externes", "Focus chat input": "Mettre le focus sur le champ de chat", "Folder deleted successfully": "Dossier supprimé avec succès", - "Folder name cannot be empty": "Le nom du dossier ne peut pas être vide", "Folder name cannot be empty.": "Le nom du dossier ne peut pas être vide.", "Folder name updated successfully": "Le nom du dossier a été mis à jour avec succès", "Followed instructions perfectly": "A parfaitement suivi les instructions", @@ -582,7 +581,6 @@ "Function Name": "Nom de la fonction", "Function updated successfully": "La fonction a été mise à jour avec succès", "Functions": "Fonctions", - "Functions allow arbitrary code execution": "Les fonctions permettent l'exécution de code arbitraire", "Functions allow arbitrary code execution.": "Les fonctions permettent l'exécution de code arbitraire.", "Functions imported successfully": "Fonctions importées avec succès", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "Aucune distance disponible", "No feedbacks found": "Aucun avis trouvé", "No file selected": "Aucun fichier sélectionné", - "No files found.": "Aucun fichier trouvé.", "No groups with access, add a group to grant access": "Aucun groupe n'a accès, ajoutez un groupe pour accorder l'accès", "No HTML, CSS, or JavaScript content found.": "Aucun contenu HTML, CSS ou JavaScript trouvé.", "No inference engine with management support found": "Aucun moteur d'inférence avec support trouvé", @@ -1162,7 +1159,6 @@ "Tools Access": "Accès aux outils", "Tools are a function calling system with arbitrary code execution": "Les outils sont un système d'appel de fonction avec exécution de code arbitraire", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "Les outils ont un système d'appel de fonction qui permet l'exécution de code arbitraire", "Tools have a function calling system that allows arbitrary code execution.": "Les outils ont un système d'appel de fonction qui permet l'exécution de code arbitraire.", "Tools Public Sharing": "", "Top K": "Top K", diff --git a/src/lib/i18n/locales/he-IL/translation.json b/src/lib/i18n/locales/he-IL/translation.json index b01b39df3..afc4d4607 100644 --- a/src/lib/i18n/locales/he-IL/translation.json +++ b/src/lib/i18n/locales/he-IL/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "שידור נתונים חיצוניים בקצב רציף", "Focus chat input": "מיקוד הקלט לצ'אט", "Folder deleted successfully": "", - "Folder name cannot be empty": "", "Folder name cannot be empty.": "", "Folder name updated successfully": "", "Followed instructions perfectly": "עקב אחר ההוראות במושלמות", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "", "Functions": "", - "Functions allow arbitrary code execution": "", "Functions allow arbitrary code execution.": "", "Functions imported successfully": "", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "", "No feedbacks found": "", "No file selected": "", - "No files found.": "", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "", "Tools are a function calling system with arbitrary code execution": "", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "", "Tools have a function calling system that allows arbitrary code execution.": "", "Tools Public Sharing": "", "Top K": "Top K", diff --git a/src/lib/i18n/locales/hi-IN/translation.json b/src/lib/i18n/locales/hi-IN/translation.json index a73ca1aa7..49eee6921 100644 --- a/src/lib/i18n/locales/hi-IN/translation.json +++ b/src/lib/i18n/locales/hi-IN/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "बड़े बाह्य प्रतिक्रिया खंडों को तरल रूप से प्रवाहित करें", "Focus chat input": "चैट इनपुट पर फ़ोकस करें", "Folder deleted successfully": "", - "Folder name cannot be empty": "", "Folder name cannot be empty.": "", "Folder name updated successfully": "", "Followed instructions perfectly": "निर्देशों का पूर्णतः पालन किया", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "", "Functions": "", - "Functions allow arbitrary code execution": "", "Functions allow arbitrary code execution.": "", "Functions imported successfully": "", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "", "No feedbacks found": "", "No file selected": "", - "No files found.": "", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "", "Tools are a function calling system with arbitrary code execution": "", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "", "Tools have a function calling system that allows arbitrary code execution.": "", "Tools Public Sharing": "", "Top K": "शीर्ष K", diff --git a/src/lib/i18n/locales/hr-HR/translation.json b/src/lib/i18n/locales/hr-HR/translation.json index 50a23d5aa..75dc92458 100644 --- a/src/lib/i18n/locales/hr-HR/translation.json +++ b/src/lib/i18n/locales/hr-HR/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Glavno strujanje velikih vanjskih dijelova odgovora", "Focus chat input": "Fokusiraj unos razgovora", "Folder deleted successfully": "", - "Folder name cannot be empty": "", "Folder name cannot be empty.": "", "Folder name updated successfully": "", "Followed instructions perfectly": "Savršeno slijedio upute", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "", "Functions": "", - "Functions allow arbitrary code execution": "", "Functions allow arbitrary code execution.": "", "Functions imported successfully": "", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "", "No feedbacks found": "", "No file selected": "", - "No files found.": "", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "", "Tools are a function calling system with arbitrary code execution": "", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "", "Tools have a function calling system that allows arbitrary code execution.": "", "Tools Public Sharing": "", "Top K": "Top K", diff --git a/src/lib/i18n/locales/hu-HU/translation.json b/src/lib/i18n/locales/hu-HU/translation.json index 466fb9d91..ac8661d6c 100644 --- a/src/lib/i18n/locales/hu-HU/translation.json +++ b/src/lib/i18n/locales/hu-HU/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Nagy külső válasz darabok folyamatos streamelése", "Focus chat input": "Chat bevitel fókuszálása", "Folder deleted successfully": "Mappa sikeresen törölve", - "Folder name cannot be empty": "A mappa neve nem lehet üres", "Folder name cannot be empty.": "A mappa neve nem lehet üres.", "Folder name updated successfully": "Mappa neve sikeresen frissítve", "Followed instructions perfectly": "Tökéletesen követte az utasításokat", @@ -582,7 +581,6 @@ "Function Name": "Funkció neve", "Function updated successfully": "Funkció sikeresen frissítve", "Functions": "Funkciók", - "Functions allow arbitrary code execution": "A funkciók tetszőleges kód végrehajtását teszik lehetővé", "Functions allow arbitrary code execution.": "A funkciók tetszőleges kód végrehajtását teszik lehetővé.", "Functions imported successfully": "Funkciók sikeresen importálva", "Gemini": "Gemini", @@ -787,7 +785,6 @@ "No distance available": "Nincs elérhető távolság", "No feedbacks found": "Nem található visszajelzés", "No file selected": "Nincs kiválasztva fájl", - "No files found.": "Nem található fájl.", "No groups with access, add a group to grant access": "Nincs hozzáféréssel rendelkező csoport, adj hozzá egy csoportot a hozzáférés megadásához", "No HTML, CSS, or JavaScript content found.": "Nem található HTML, CSS vagy JavaScript tartalom.", "No inference engine with management support found": "Nem található kezelést támogató következtetési motor", @@ -1162,7 +1159,6 @@ "Tools Access": "Eszközök hozzáférése", "Tools are a function calling system with arbitrary code execution": "Az eszközök olyan függvényhívó rendszert alkotnak, amely tetszőleges kód végrehajtását teszi lehetővé", "Tools Function Calling Prompt": "Eszközök függvényhívási promptja", - "Tools have a function calling system that allows arbitrary code execution": "Az eszközök olyan függvényhívó rendszerrel rendelkeznek, amely lehetővé teszi tetszőleges kód végrehajtását", "Tools have a function calling system that allows arbitrary code execution.": "Az eszközök olyan függvényhívó rendszerrel rendelkeznek, amely lehetővé teszi tetszőleges kód végrehajtását.", "Tools Public Sharing": "Eszközök nyilvános megosztása", "Top K": "Top K", diff --git a/src/lib/i18n/locales/id-ID/translation.json b/src/lib/i18n/locales/id-ID/translation.json index a4e88b134..6be73d5b2 100644 --- a/src/lib/i18n/locales/id-ID/translation.json +++ b/src/lib/i18n/locales/id-ID/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Mengalirkan potongan respons eksternal yang besar dengan lancar", "Focus chat input": "Memfokuskan input obrolan", "Folder deleted successfully": "", - "Folder name cannot be empty": "", "Folder name cannot be empty.": "", "Folder name updated successfully": "", "Followed instructions perfectly": "Mengikuti instruksi dengan sempurna", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "Fungsi berhasil diperbarui", "Functions": "Fungsi", - "Functions allow arbitrary code execution": "", "Functions allow arbitrary code execution.": "", "Functions imported successfully": "Fungsi berhasil diimpor", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "", "No feedbacks found": "", "No file selected": "Tidak ada file yang dipilih", - "No files found.": "", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "", "Tools are a function calling system with arbitrary code execution": "", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "", "Tools have a function calling system that allows arbitrary code execution.": "", "Tools Public Sharing": "", "Top K": "K atas", diff --git a/src/lib/i18n/locales/ie-GA/translation.json b/src/lib/i18n/locales/ie-GA/translation.json index 73d932981..6952a4bf8 100644 --- a/src/lib/i18n/locales/ie-GA/translation.json +++ b/src/lib/i18n/locales/ie-GA/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Sruthaigh codanna móra freagartha seachtracha go sreabhach", "Focus chat input": "Ionchur comhrá fócas", "Folder deleted successfully": "Scriosadh an fillteán go rathúil", - "Folder name cannot be empty": "Ní féidir ainm fillteáin a bheith folamh", "Folder name cannot be empty.": "Ní féidir ainm fillteáin a bheith folamh.", "Folder name updated successfully": "D'éirigh le hainm an fhillteáin a nuashonrú", "Followed instructions perfectly": "Lean treoracha go foirfe", @@ -582,7 +581,6 @@ "Function Name": "Ainm Feidhme", "Function updated successfully": "Feidhm nuashonraithe", "Functions": "Feidhmeanna", - "Functions allow arbitrary code execution": "Ligeann feidhmeanna forghníomhú cód", "Functions allow arbitrary code execution.": "Ceadaíonn feidhmeanna forghníomhú cód treallach.", "Functions imported successfully": "Feidhmeanna allmhairi", "Gemini": "Gemini", @@ -787,7 +785,6 @@ "No distance available": "Níl achar ar fáil", "No feedbacks found": "Níor aimsíodh aon aiseolas", "No file selected": "Níl aon chomhad roghnaithe", - "No files found.": "Níor aimsíodh aon chomhaid.", "No groups with access, add a group to grant access": "Gan aon ghrúpa a bhfuil rochtain acu, cuir grúpa leis chun rochtain a dheonú", "No HTML, CSS, or JavaScript content found.": "Níor aimsíodh aon ábhar HTML, CSS nó JavaScript.", "No inference engine with management support found": "Níor aimsíodh aon inneall tátail le tacaíocht bhainistíochta", @@ -1162,7 +1159,6 @@ "Tools Access": "Rochtain Uirlisí", "Tools are a function calling system with arbitrary code execution": "Is córas glaonna feidhme iad uirlisí le forghníomhú cód treallach", "Tools Function Calling Prompt": "Leid Glaonna Feidhm Uirlisí", - "Tools have a function calling system that allows arbitrary code execution": "Tá córas glaonna feidhme ag uirlisí a cheadaíonn forghníomhú cód treallach", "Tools have a function calling system that allows arbitrary code execution.": "Tá córas glaonna feidhme ag uirlisí a cheadaíonn forghníomhú cód treallach.", "Tools Public Sharing": "Uirlisí Roinnte Poiblí", "Top K": "Barr K", diff --git a/src/lib/i18n/locales/it-IT/translation.json b/src/lib/i18n/locales/it-IT/translation.json index ba831fa32..75cab5392 100644 --- a/src/lib/i18n/locales/it-IT/translation.json +++ b/src/lib/i18n/locales/it-IT/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Trasmetti in modo fluido blocchi di risposta esterni di grandi dimensioni", "Focus chat input": "Metti a fuoco l'input della chat", "Folder deleted successfully": "", - "Folder name cannot be empty": "", "Folder name cannot be empty.": "", "Folder name updated successfully": "", "Followed instructions perfectly": "Ha seguito le istruzioni alla perfezione", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "", "Functions": "", - "Functions allow arbitrary code execution": "", "Functions allow arbitrary code execution.": "", "Functions imported successfully": "", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "", "No feedbacks found": "", "No file selected": "", - "No files found.": "", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "", "Tools are a function calling system with arbitrary code execution": "", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "", "Tools have a function calling system that allows arbitrary code execution.": "", "Tools Public Sharing": "", "Top K": "Top K", diff --git a/src/lib/i18n/locales/ja-JP/translation.json b/src/lib/i18n/locales/ja-JP/translation.json index 9cf01f0d0..473dd5231 100644 --- a/src/lib/i18n/locales/ja-JP/translation.json +++ b/src/lib/i18n/locales/ja-JP/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "大規模な外部応答チャンクをスムーズにストリーミングする", "Focus chat input": "チャット入力をフォーカス", "Folder deleted successfully": "", - "Folder name cannot be empty": "", "Folder name cannot be empty.": "", "Folder name updated successfully": "", "Followed instructions perfectly": "完全に指示に従った", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "Functionのアップデートが成功しました。", "Functions": "", - "Functions allow arbitrary code execution": "", "Functions allow arbitrary code execution.": "", "Functions imported successfully": "Functionsのインポートが成功しました", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "", "No feedbacks found": "", "No file selected": "", - "No files found.": "", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "", "Tools are a function calling system with arbitrary code execution": "", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "", "Tools have a function calling system that allows arbitrary code execution.": "", "Tools Public Sharing": "", "Top K": "トップ K", diff --git a/src/lib/i18n/locales/ka-GE/translation.json b/src/lib/i18n/locales/ka-GE/translation.json index b9420f93a..d929dc0c7 100644 --- a/src/lib/i18n/locales/ka-GE/translation.json +++ b/src/lib/i18n/locales/ka-GE/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "დიდი გარე პასუხის ფრაგმენტების გლუვად დასტრიმვა", "Focus chat input": "ჩატში შეყვანის ფოკუსი", "Folder deleted successfully": "", - "Folder name cannot be empty": "", "Folder name cannot be empty.": "", "Folder name updated successfully": "", "Followed instructions perfectly": "ინსტრუქციების ზუსტად მიჰყევით", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "", "Functions": "ფუნქციები", - "Functions allow arbitrary code execution": "", "Functions allow arbitrary code execution.": "", "Functions imported successfully": "", "Gemini": "მარჩბივი", @@ -787,7 +785,6 @@ "No distance available": "მანძილი ხელმისაწვდომი არაა", "No feedbacks found": "", "No file selected": "ფაილი არჩეული არაა", - "No files found.": "ფაილები ვერ მოიძებნა.", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "", "Tools are a function calling system with arbitrary code execution": "", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "", "Tools have a function calling system that allows arbitrary code execution.": "", "Tools Public Sharing": "", "Top K": "ტოპ K", diff --git a/src/lib/i18n/locales/ko-KR/translation.json b/src/lib/i18n/locales/ko-KR/translation.json index 0177452d6..205737b8b 100644 --- a/src/lib/i18n/locales/ko-KR/translation.json +++ b/src/lib/i18n/locales/ko-KR/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "대규모 외부 응답 청크를 유연하게 스트리밍", "Focus chat input": "채팅 입력창에 포커스", "Folder deleted successfully": "성공적으로 폴터가 생성되었습니다", - "Folder name cannot be empty": "폴더 이름을 작성해주세요", "Folder name cannot be empty.": "폴더 이름을 작성해주세요", "Folder name updated successfully": "성공적으로 폴더 이름이 저장되었습니다", "Followed instructions perfectly": "명령을 완벽히 수행함", @@ -582,7 +581,6 @@ "Function Name": "함수 이름", "Function updated successfully": "성공적으로 함수가 업데이트되었습니다", "Functions": "함수", - "Functions allow arbitrary code execution": "함수로 임이의 코드 실행 허용하기", "Functions allow arbitrary code execution.": "함수가 임이의 코드를 실행하도록 허용하였습니다", "Functions imported successfully": "성공적으로 함수가 가져왔습니다", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "거리 불가능", "No feedbacks found": "피드백 없음", "No file selected": "파일이 선택되지 않음", - "No files found.": "파일 없음", "No groups with access, add a group to grant access": "접근 권한이 있는 그룹이 없습니다. 접근 권한을 부여하려면 그룹을 추가하세요.", "No HTML, CSS, or JavaScript content found.": "HTML, CSS, JavaScript이 발견되지 않음", "No inference engine with management support found": "관리 지원이 포함된 추론 엔진을 찾을 수 없음", @@ -1162,7 +1159,6 @@ "Tools Access": "도구 접근", "Tools are a function calling system with arbitrary code execution": "도구는 임의 코드를 실행시키는 함수를 불러오는 시스템입니다", "Tools Function Calling Prompt": "도구 함수 호출 프롬프트", - "Tools have a function calling system that allows arbitrary code execution": "도구에 임의 코드 실행을 허용하는 함수가 포함되어 있습니다", "Tools have a function calling system that allows arbitrary code execution.": "도구에 임의 코드 실행을 허용하는 함수가 포함되어 있습니다.", "Tools Public Sharing": "도구 공개 및 공유", "Top K": "Top K", diff --git a/src/lib/i18n/locales/lt-LT/translation.json b/src/lib/i18n/locales/lt-LT/translation.json index 8d6498f57..0fa6b7549 100644 --- a/src/lib/i18n/locales/lt-LT/translation.json +++ b/src/lib/i18n/locales/lt-LT/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Sklandžiai transliuoti ilgus atsakymus", "Focus chat input": "Fokusuoti žinutės įvestį", "Folder deleted successfully": "", - "Folder name cannot be empty": "", "Folder name cannot be empty.": "", "Folder name updated successfully": "", "Followed instructions perfectly": "Tobulai sekė instrukcijas", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "Funkcija atnaujinta sėkmingai", "Functions": "Funkcijos", - "Functions allow arbitrary code execution": "Funkcijos leidžia nekontroliuojamo kodo vykdymą", "Functions allow arbitrary code execution.": "Funkcijos leidžia nekontroliuojamo kodo vykdymą", "Functions imported successfully": "Funkcijos importuotos sėkmingai", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "", "No feedbacks found": "", "No file selected": "Nėra pasirinktų dokumentų", - "No files found.": "", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "", "Tools are a function calling system with arbitrary code execution": "Įrankiai gali naudoti funkcijas ir vykdyti kodą", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "Įrankiai gali naudoti funkcijas ir leisti vykdyti kodą", "Tools have a function calling system that allows arbitrary code execution.": "Įrankiai gali naudoti funkcijas ir leisti vykdyti kodą", "Tools Public Sharing": "", "Top K": "Top K", diff --git a/src/lib/i18n/locales/ms-MY/translation.json b/src/lib/i18n/locales/ms-MY/translation.json index 1be4ea54a..07f4d38d3 100644 --- a/src/lib/i18n/locales/ms-MY/translation.json +++ b/src/lib/i18n/locales/ms-MY/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Strim 'chunks' respons luaran yang besar dengan lancar", "Focus chat input": "Fokus kepada input perbualan", "Folder deleted successfully": "", - "Folder name cannot be empty": "", "Folder name cannot be empty.": "", "Folder name updated successfully": "", "Followed instructions perfectly": "Mengikut arahan dengan sempurna", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "Fungsi berjaya dikemaskini", "Functions": "Fungsi", - "Functions allow arbitrary code execution": "Fungsi membenarkan pelaksanaan kod sewenang-wenangnya", "Functions allow arbitrary code execution.": "Fungsi membenarkan pelaksanaan kod sewenang-wenangnya.", "Functions imported successfully": "Fungsi berjaya diimport", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "", "No feedbacks found": "", "No file selected": "Tiada fail dipilih", - "No files found.": "", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "", "Tools are a function calling system with arbitrary code execution": "Alatan ialah sistem panggilan fungsi dengan pelaksanaan kod sewenang-wenangnya", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "Alatan mempunyai sistem panggilan fungsi yang membolehkan pelaksanaan kod sewenang-wenangnya", "Tools have a function calling system that allows arbitrary code execution.": "Alatan mempunyai sistem panggilan fungsi yang membolehkan pelaksanaan kod sewenang-wenangnya.", "Tools Public Sharing": "", "Top K": "'Top K'", diff --git a/src/lib/i18n/locales/nb-NO/translation.json b/src/lib/i18n/locales/nb-NO/translation.json index e8135067e..9777cf17c 100644 --- a/src/lib/i18n/locales/nb-NO/translation.json +++ b/src/lib/i18n/locales/nb-NO/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Flytende strømming av store eksterne svarpakker", "Focus chat input": "Fokusert chat-inndata", "Folder deleted successfully": "Mappe slettet", - "Folder name cannot be empty": "Mappenavn kan ikke være tomt", "Folder name cannot be empty.": "Mappenavn kan ikke være tomt.", "Folder name updated successfully": "Mappenavn oppdatert", "Followed instructions perfectly": "Fulgte instruksjonene perfekt", @@ -582,7 +581,6 @@ "Function Name": "Funksjonens navn", "Function updated successfully": "Funksjonen er oppdatert", "Functions": "Funksjoner", - "Functions allow arbitrary code execution": "Funksjoner tillater vilkårlig kodekjøring", "Functions allow arbitrary code execution.": "Funksjoner tillater vilkårlig kodekjøring.", "Functions imported successfully": "Funksjoner er importert", "Gemini": "Gemini", @@ -787,7 +785,6 @@ "No distance available": "Ingen avstand tilgjengelig", "No feedbacks found": "Finner ingen tilbakemeldinger", "No file selected": "Ingen fil valgt", - "No files found.": "Finner ingen filer", "No groups with access, add a group to grant access": "Ingen grupper med tilgang. Legg til en gruppe som skal ha tilgang.", "No HTML, CSS, or JavaScript content found.": "Finner ikke noe HTML, CSS- eller JavaScript-innhold.", "No inference engine with management support found": "Fant ingen konklusjonsmotor med støtte for administrasjon", @@ -1162,7 +1159,6 @@ "Tools Access": "Verktøyets tilgang", "Tools are a function calling system with arbitrary code execution": "Verktøy er et funksjonskallsystem med vilkårlig kodekjøring", "Tools Function Calling Prompt": "Ledetekst for kalling av verktøyfunksjonen", - "Tools have a function calling system that allows arbitrary code execution": "Verktøy inneholder et funksjonskallsystem som tillater vilkårlig kodekjøring", "Tools have a function calling system that allows arbitrary code execution.": "Verktøy inneholder et funksjonskallsystem som tillater vilkårlig kodekjøring.", "Tools Public Sharing": "", "Top K": "Top K", diff --git a/src/lib/i18n/locales/nl-NL/translation.json b/src/lib/i18n/locales/nl-NL/translation.json index 70ee3cb7c..f7fedabbd 100644 --- a/src/lib/i18n/locales/nl-NL/translation.json +++ b/src/lib/i18n/locales/nl-NL/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Stream grote externe responsbrokken vloeiend", "Focus chat input": "Focus chat input", "Folder deleted successfully": "Map succesvol verwijderd", - "Folder name cannot be empty": "Mapnaam kan niet leeg zijn", "Folder name cannot be empty.": "Mapnaam kan niet leeg zijn", "Folder name updated successfully": "Mapnaam succesvol aangepast", "Followed instructions perfectly": "Volgde instructies perfect", @@ -582,7 +581,6 @@ "Function Name": "Functienaam", "Function updated successfully": "Functienaam succesvol aangepast", "Functions": "Functies", - "Functions allow arbitrary code execution": "Functies staan willekeurige code-uitvoering toe", "Functions allow arbitrary code execution.": "Functies staan willekeurige code-uitvoering toe", "Functions imported successfully": "Functies succesvol geïmporteerd", "Gemini": "Gemini", @@ -787,7 +785,6 @@ "No distance available": "Geen afstand beschikbaar", "No feedbacks found": "Geen feedback gevonden", "No file selected": "Geen bestand geselecteerd", - "No files found.": "Geen bestanden gevonden", "No groups with access, add a group to grant access": "Geen groepen met toegang, voeg een groep toe om toegang te geven", "No HTML, CSS, or JavaScript content found.": "Geen HTML, CSS, of JavaScript inhoud gevonden", "No inference engine with management support found": "Geen inferentie-engine met beheerondersteuning gevonden", @@ -1162,7 +1159,6 @@ "Tools Access": "Gereedschaptoegang", "Tools are a function calling system with arbitrary code execution": "Gereedschappen zijn een systeem voor het aanroepen van functies met willekeurige code-uitvoering", "Tools Function Calling Prompt": "Gereedschapsfunctie aanroepprompt", - "Tools have a function calling system that allows arbitrary code execution": "Gereedschappen hebben een systeem voor het aanroepen van functies waarmee willekeurige code kan worden uitgevoerd", "Tools have a function calling system that allows arbitrary code execution.": "Gereedschappen hebben een systeem voor het aanroepen van functies waarmee willekeurige code kan worden uitgevoerd", "Tools Public Sharing": "Gereedschappen publiek delen", "Top K": "Top K", diff --git a/src/lib/i18n/locales/pa-IN/translation.json b/src/lib/i18n/locales/pa-IN/translation.json index db5341380..587e4d3b9 100644 --- a/src/lib/i18n/locales/pa-IN/translation.json +++ b/src/lib/i18n/locales/pa-IN/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "ਵੱਡੇ ਬਾਹਰੀ ਜਵਾਬ ਚੰਕਾਂ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਸਟ੍ਰੀਮ ਕਰੋ", "Focus chat input": "ਗੱਲਬਾਤ ਇਨਪੁਟ 'ਤੇ ਧਿਆਨ ਦਿਓ", "Folder deleted successfully": "", - "Folder name cannot be empty": "", "Folder name cannot be empty.": "", "Folder name updated successfully": "", "Followed instructions perfectly": "ਹਦਾਇਤਾਂ ਨੂੰ ਬਿਲਕੁਲ ਫਾਲੋ ਕੀਤਾ", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "", "Functions": "", - "Functions allow arbitrary code execution": "", "Functions allow arbitrary code execution.": "", "Functions imported successfully": "", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "", "No feedbacks found": "", "No file selected": "", - "No files found.": "", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "", "Tools are a function calling system with arbitrary code execution": "", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "", "Tools have a function calling system that allows arbitrary code execution.": "", "Tools Public Sharing": "", "Top K": "ਸਿਖਰ K", diff --git a/src/lib/i18n/locales/pl-PL/translation.json b/src/lib/i18n/locales/pl-PL/translation.json index 75988397a..73d396b1e 100644 --- a/src/lib/i18n/locales/pl-PL/translation.json +++ b/src/lib/i18n/locales/pl-PL/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Płynnie strumieniuj duże fragmenty odpowiedzi zewnętrznych", "Focus chat input": "Skup się na czacie", "Folder deleted successfully": "Folder został usunięty pomyślnie", - "Folder name cannot be empty": "Nazwa folderu nie może być pusta", "Folder name cannot be empty.": "Nazwa folderu nie może być pusta.", "Folder name updated successfully": "Nazwa folderu została zaktualizowana pomyślnie", "Followed instructions perfectly": "Wykonał instrukcje idealnie", @@ -582,7 +581,6 @@ "Function Name": "Nazwa Funkcji", "Function updated successfully": "Funkcja została zaktualizowana pomyślnie", "Functions": "Funkcje", - "Functions allow arbitrary code execution": "Funkcje umożliwiają wykonanie dowolnego kodu", "Functions allow arbitrary code execution.": "Funkcje umożliwiają wykonanie dowolnego kodu.", "Functions imported successfully": "Funkcje zostały pomyślnie zaimportowane", "Gemini": "Gemini", @@ -787,7 +785,6 @@ "No distance available": "Brak dostępnej odległości", "No feedbacks found": "Nie znaleziono żadnych opinii", "No file selected": "Nie wybrano żadnego pliku", - "No files found.": "Nie znaleziono żadnych plików.", "No groups with access, add a group to grant access": "Brak grup z dostępem, dodaj grupę, aby przyznać dostęp", "No HTML, CSS, or JavaScript content found.": "Nie znaleziono żadnej zawartości HTML, CSS ani JavaScript.", "No inference engine with management support found": "Nie znaleziono silnika wnioskującego z obsługą zarządzania", @@ -1162,7 +1159,6 @@ "Tools Access": "Narzędzia Dostępu", "Tools are a function calling system with arbitrary code execution": "Narzędzia to system wywoływania funkcji z możliwością wykonania dowolnego kodu.", "Tools Function Calling Prompt": "Narzędzia Funkcja Wywołania Promptu", - "Tools have a function calling system that allows arbitrary code execution": "Narzędzia mają funkcję wywoływania systemu, która umożliwia wykonywanie dowolnego kodu", "Tools have a function calling system that allows arbitrary code execution.": "Narzędzia mają funkcję wywoływania systemu, która umożliwia wykonanie dowolnego kodu.", "Tools Public Sharing": "", "Top K": "Najlepsze K", diff --git a/src/lib/i18n/locales/pt-BR/translation.json b/src/lib/i18n/locales/pt-BR/translation.json index 8cd883610..bf823bdb2 100644 --- a/src/lib/i18n/locales/pt-BR/translation.json +++ b/src/lib/i18n/locales/pt-BR/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Transmitir fluentemente grandes blocos de respostas externas", "Focus chat input": "Focar entrada de chat", "Folder deleted successfully": "Pasta excluída com sucesso", - "Folder name cannot be empty": "Nome da pasta não pode estar vazio", "Folder name cannot be empty.": "Nome da pasta não pode estar vazio.", "Folder name updated successfully": "Nome da pasta atualizado com sucesso", "Followed instructions perfectly": "Seguiu as instruções perfeitamente", @@ -582,7 +581,6 @@ "Function Name": "Nome da Função", "Function updated successfully": "Função atualizada com sucesso", "Functions": "Funções", - "Functions allow arbitrary code execution": "Funções permitem a execução arbitrária de código", "Functions allow arbitrary code execution.": "Funções permitem a execução arbitrária de código.", "Functions imported successfully": "Funções importadas com sucesso", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "Sem distância disponível", "No feedbacks found": "Comentários não encontrados", "No file selected": "Nenhum arquivo selecionado", - "No files found.": "Nenhum arquivo encontrado.", "No groups with access, add a group to grant access": "Nenhum grupo com acesso, adicione um grupo para dar acesso", "No HTML, CSS, or JavaScript content found.": "Nenhum conteúdo HTML, CSS ou JavaScript encontrado.", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "Acesso as Ferramentas", "Tools are a function calling system with arbitrary code execution": "Ferramentas são um sistema de chamada de funções com execução de código arbitrário", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "Ferramentas possuem um sistema de chamada de funções que permite a execução de código arbitrário", "Tools have a function calling system that allows arbitrary code execution.": "Ferramentas possuem um sistema de chamada de funções que permite a execução de código arbitrário.", "Tools Public Sharing": "", "Top K": "Top K", diff --git a/src/lib/i18n/locales/pt-PT/translation.json b/src/lib/i18n/locales/pt-PT/translation.json index 72060b8ef..aecfa3dd6 100644 --- a/src/lib/i18n/locales/pt-PT/translation.json +++ b/src/lib/i18n/locales/pt-PT/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Transmita com fluidez grandes blocos de resposta externa", "Focus chat input": "Focar na conversa", "Folder deleted successfully": "", - "Folder name cannot be empty": "", "Folder name cannot be empty.": "", "Folder name updated successfully": "", "Followed instructions perfectly": "Seguiu instruções perfeitamente", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "", "Functions": "", - "Functions allow arbitrary code execution": "", "Functions allow arbitrary code execution.": "", "Functions imported successfully": "", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "", "No feedbacks found": "", "No file selected": "", - "No files found.": "", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "", "Tools are a function calling system with arbitrary code execution": "", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "", "Tools have a function calling system that allows arbitrary code execution.": "", "Tools Public Sharing": "", "Top K": "Top K", diff --git a/src/lib/i18n/locales/ro-RO/translation.json b/src/lib/i18n/locales/ro-RO/translation.json index 4c37c2e87..81ffb3509 100644 --- a/src/lib/i18n/locales/ro-RO/translation.json +++ b/src/lib/i18n/locales/ro-RO/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Transmite fluent blocuri mari de răspuns extern", "Focus chat input": "Focalizează câmpul de intrare pentru conversație", "Folder deleted successfully": "Folder șters cu succes", - "Folder name cannot be empty": "Numele folderului nu poate fi gol", "Folder name cannot be empty.": "Numele folderului nu poate fi gol.", "Folder name updated successfully": "Numele folderului a fost actualizat cu succes", "Followed instructions perfectly": "A urmat instrucțiunile perfect", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "Funcția a fost actualizată cu succes", "Functions": "Funcții", - "Functions allow arbitrary code execution": "Funcțiile permit executarea arbitrară a codului", "Functions allow arbitrary code execution.": "Funcțiile permit executarea arbitrară a codului.", "Functions imported successfully": "Funcțiile au fost importate cu succes", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "Nicio distanță disponibilă", "No feedbacks found": "Niciun feedback găsit", "No file selected": "Nu a fost selectat niciun fișier", - "No files found.": "Nu au fost găsite fișiere.", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "Niciun conținut HTML, CSS sau JavaScript găsit.", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "", "Tools are a function calling system with arbitrary code execution": "Instrumentele sunt un sistem de apelare a funcțiilor cu executare arbitrară a codului", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "Instrumentele au un sistem de apelare a funcțiilor care permite executarea arbitrară a codului", "Tools have a function calling system that allows arbitrary code execution.": "Instrumentele au un sistem de apelare a funcțiilor care permite executarea arbitrară a codului.", "Tools Public Sharing": "", "Top K": "Top K", diff --git a/src/lib/i18n/locales/ru-RU/translation.json b/src/lib/i18n/locales/ru-RU/translation.json index 9defd4145..111a0e14d 100644 --- a/src/lib/i18n/locales/ru-RU/translation.json +++ b/src/lib/i18n/locales/ru-RU/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Плавная потоковая передача больших фрагментов внешних ответов", "Focus chat input": "Фокус ввода чата", "Folder deleted successfully": "Папка успешно удалена", - "Folder name cannot be empty": "Имя папки не может быть пустым", "Folder name cannot be empty.": "Имя папки не может быть пустым.", "Folder name updated successfully": "Имя папки успешно обновлено", "Followed instructions perfectly": "Идеально соответствует инструкциям", @@ -582,7 +581,6 @@ "Function Name": "Имя Функции", "Function updated successfully": "Функция успешно обновлена", "Functions": "Функции", - "Functions allow arbitrary code execution": "Функции позволяют выполнять произвольный код", "Functions allow arbitrary code execution.": "Функции позволяют выполнять произвольный код.", "Functions imported successfully": "Функции успешно импортированы", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "Никаких доступных растояний", "No feedbacks found": "Никаких обратных связей не найдено", "No file selected": "Файлы не выбраны", - "No files found.": "Файлы не найдены.", "No groups with access, add a group to grant access": "Нет групп с доступом, добавьте группу для предоставления доступа", "No HTML, CSS, or JavaScript content found.": "Содержимое в формате HTML, CSS или JavaScript не найдено.", "No inference engine with management support found": "Механизм логического вывода с поддержкой управления не найден", @@ -1162,7 +1159,6 @@ "Tools Access": "Доступ к инструментам", "Tools are a function calling system with arbitrary code execution": "Инструменты - это система вызова функций с выполнением произвольного кода", "Tools Function Calling Prompt": "Промпт на вызов функции Инструменты", - "Tools have a function calling system that allows arbitrary code execution": "Инструменты имеют систему вызова функций, которая позволяет выполнять произвольный код", "Tools have a function calling system that allows arbitrary code execution.": "Инструменты имеют систему вызова функций, которая позволяет выполнять произвольный код.", "Tools Public Sharing": "Публичный обмен инструментами", "Top K": "Top K", diff --git a/src/lib/i18n/locales/sk-SK/translation.json b/src/lib/i18n/locales/sk-SK/translation.json index fd5b0686c..f96d27f65 100644 --- a/src/lib/i18n/locales/sk-SK/translation.json +++ b/src/lib/i18n/locales/sk-SK/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Plynule streamujte veľké externé časti odpovedí", "Focus chat input": "Zamerajte sa na vstup chatu", "Folder deleted successfully": "Priečinok bol úspešne vymazaný", - "Folder name cannot be empty": "Názov priečinka nesmie byť prázdny", "Folder name cannot be empty.": "Názov priečinka nesmie byť prázdny.", "Folder name updated successfully": "Názov priečinka bol úspešne aktualizovaný.", "Followed instructions perfectly": "Dodržal pokyny dokonale.", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "Funkcia bola úspešne aktualizovaná.", "Functions": "Funkcie", - "Functions allow arbitrary code execution": "Funkcie umožňujú vykonávať ľubovoľný kód.", "Functions allow arbitrary code execution.": "Funkcie umožňujú vykonávanie ľubovoľného kódu.", "Functions imported successfully": "Funkcie boli úspešne importované", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "Nie je dostupná žiadna vzdialenosť", "No feedbacks found": "Žiadna spätná väzba nenájdená", "No file selected": "Nebola vybratá žiadna súbor", - "No files found.": "Neboli nájdené žiadne súbory.", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "Nebola nájdená žiadny obsah HTML, CSS ani JavaScript.", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "", "Tools are a function calling system with arbitrary code execution": "Nástroje sú systémom na volanie funkcií s vykonávaním ľubovoľného kódu.", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "Nástroje majú systém volania funkcií, ktorý umožňuje ľubovoľné spúšťanie kódu.", "Tools have a function calling system that allows arbitrary code execution.": "Nástroje majú systém volania funkcií, ktorý umožňuje spúšťanie ľubovoľného kódu.", "Tools Public Sharing": "", "Top K": "Top K", diff --git a/src/lib/i18n/locales/sr-RS/translation.json b/src/lib/i18n/locales/sr-RS/translation.json index 83b8a634f..c91e1692e 100644 --- a/src/lib/i18n/locales/sr-RS/translation.json +++ b/src/lib/i18n/locales/sr-RS/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Течно стримујте велике спољне делове одговора", "Focus chat input": "Усредсредите унос ћаскања", "Folder deleted successfully": "", - "Folder name cannot be empty": "", "Folder name cannot be empty.": "", "Folder name updated successfully": "", "Followed instructions perfectly": "Упутства су савршено праћена", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "", "Functions": "Функције", - "Functions allow arbitrary code execution": "", "Functions allow arbitrary code execution.": "", "Functions imported successfully": "", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "", "No feedbacks found": "", "No file selected": "", - "No files found.": "", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "Приступ алатима", "Tools are a function calling system with arbitrary code execution": "", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "", "Tools have a function calling system that allows arbitrary code execution.": "", "Tools Public Sharing": "", "Top K": "Топ К", diff --git a/src/lib/i18n/locales/sv-SE/translation.json b/src/lib/i18n/locales/sv-SE/translation.json index 5a997cbe4..8f85e76ed 100644 --- a/src/lib/i18n/locales/sv-SE/translation.json +++ b/src/lib/i18n/locales/sv-SE/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Strömma flytande stora externa svarschunks", "Focus chat input": "Fokusera på chattfältet", "Folder deleted successfully": "", - "Folder name cannot be empty": "", "Folder name cannot be empty.": "", "Folder name updated successfully": "", "Followed instructions perfectly": "Följde instruktionerna perfekt", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "", "Functions": "", - "Functions allow arbitrary code execution": "", "Functions allow arbitrary code execution.": "", "Functions imported successfully": "", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "", "No feedbacks found": "", "No file selected": "", - "No files found.": "", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "", "Tools are a function calling system with arbitrary code execution": "Verktyg är ett funktionsanropssystem med godtycklig kodkörning", "Tools Function Calling Prompt": "Prompt för anrop av verktygsfunktion:", - "Tools have a function calling system that allows arbitrary code execution": "Verktyg har ett funktionsanropssystem som tillåter godtycklig kodkörning", "Tools have a function calling system that allows arbitrary code execution.": "Verktyg har ett funktionsanropssystem som tillåter godtycklig kodkörning", "Tools Public Sharing": "", "Top K": "Topp K", diff --git a/src/lib/i18n/locales/th-TH/translation.json b/src/lib/i18n/locales/th-TH/translation.json index 36b225509..638d9eca3 100644 --- a/src/lib/i18n/locales/th-TH/translation.json +++ b/src/lib/i18n/locales/th-TH/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "สตรีมชิ้นส่วนการตอบสนองขนาดใหญ่จากภายนอกอย่างลื่นไหล", "Focus chat input": "โฟกัสการป้อนแชท", "Folder deleted successfully": "", - "Folder name cannot be empty": "", "Folder name cannot be empty.": "", "Folder name updated successfully": "", "Followed instructions perfectly": "ปฏิบัติตามคำแนะนำอย่างสมบูรณ์แบบ", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "อัปเดตฟังก์ชันสำเร็จ", "Functions": "ฟังก์ชัน", - "Functions allow arbitrary code execution": "ฟังก์ชันอนุญาตการเรียกใช้โค้ดโดยพลการ", "Functions allow arbitrary code execution.": "ฟังก์ชันอนุญาตการเรียกใช้โค้ดโดยพลการ", "Functions imported successfully": "นำเข้าฟังก์ชันสำเร็จ", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "", "No feedbacks found": "", "No file selected": "ไม่ได้เลือกไฟล์", - "No files found.": "", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "", "Tools are a function calling system with arbitrary code execution": "เครื่องมือคือระบบการเรียกใช้ฟังก์ชันที่สามารถดำเนินการโค้ดใดๆ ได้", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "เครื่องมือมีระบบการเรียกใช้ฟังก์ชันที่สามารถดำเนินการโค้ดใดๆ ได้", "Tools have a function calling system that allows arbitrary code execution.": "เครื่องมือมีระบบการเรียกใช้ฟังก์ชันที่สามารถดำเนินการโค้ดใดๆ ได้", "Tools Public Sharing": "", "Top K": "Top K", diff --git a/src/lib/i18n/locales/tk-TW/translation.json b/src/lib/i18n/locales/tk-TW/translation.json index ec5aeef00..6f5d4ce19 100644 --- a/src/lib/i18n/locales/tk-TW/translation.json +++ b/src/lib/i18n/locales/tk-TW/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "", "Focus chat input": "", "Folder deleted successfully": "", - "Folder name cannot be empty": "", "Folder name cannot be empty.": "", "Folder name updated successfully": "", "Followed instructions perfectly": "", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "", "Functions": "", - "Functions allow arbitrary code execution": "", "Functions allow arbitrary code execution.": "", "Functions imported successfully": "", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "", "No feedbacks found": "", "No file selected": "", - "No files found.": "", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "", "Tools are a function calling system with arbitrary code execution": "", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "", "Tools have a function calling system that allows arbitrary code execution.": "", "Tools Public Sharing": "", "Top K": "", diff --git a/src/lib/i18n/locales/tr-TR/translation.json b/src/lib/i18n/locales/tr-TR/translation.json index 03d1d7fce..7fb9df64d 100644 --- a/src/lib/i18n/locales/tr-TR/translation.json +++ b/src/lib/i18n/locales/tr-TR/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Büyük harici yanıt chunklarını akıcı bir şekilde yayınlayın", "Focus chat input": "Sohbet girişine odaklan", "Folder deleted successfully": "Klasör başarıyla silindi", - "Folder name cannot be empty": "Klasör adı boş olamaz", "Folder name cannot be empty.": "Klasör adı boş olamaz.", "Folder name updated successfully": "Klasör adı başarıyla güncellendi", "Followed instructions perfectly": "Talimatları mükemmel şekilde takip etti", @@ -582,7 +581,6 @@ "Function Name": "Fonksiyon Adı", "Function updated successfully": "Fonksiyon başarıyla güncellendi", "Functions": "Fonksiyonlar", - "Functions allow arbitrary code execution": "Fonksiyonlar keyfi kod yürütülmesine izin verir", "Functions allow arbitrary code execution.": "Fonksiyonlar keyfi kod yürütülmesine izin verir.", "Functions imported successfully": "Fonksiyonlar başarıyla içe aktarıldı", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "Mesafe mevcut değil", "No feedbacks found": "Geri bildirim bulunamadı", "No file selected": "Hiçbir dosya seçilmedi", - "No files found.": "Dosya bulunamadı.", "No groups with access, add a group to grant access": "Erişimi olan grup yok, erişim sağlamak için bir grup ekleyin", "No HTML, CSS, or JavaScript content found.": "HTML, CSS veya JavaScript içeriği bulunamadı.", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "Araçlara Erişim", "Tools are a function calling system with arbitrary code execution": "Araçlar, keyfi kod yürütme ile bir fonksiyon çağırma sistemine sahiptir", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "Araçlar, keyfi kod yürütme izni veren bir fonksiyon çağırma sistemine sahiptir", "Tools have a function calling system that allows arbitrary code execution.": "Araçlar, keyfi kod yürütme izni veren bir fonksiyon çağırma sistemine sahiptir.", "Tools Public Sharing": "", "Top K": "Top K", diff --git a/src/lib/i18n/locales/uk-UA/translation.json b/src/lib/i18n/locales/uk-UA/translation.json index 8a325afa3..f6b786cfd 100644 --- a/src/lib/i18n/locales/uk-UA/translation.json +++ b/src/lib/i18n/locales/uk-UA/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Плавно передавати великі фрагменти зовнішніх відповідей", "Focus chat input": "Фокус вводу чату", "Folder deleted successfully": "Папку успішно видалено", - "Folder name cannot be empty": "Назва папки не може бути порожньою", "Folder name cannot be empty.": "Назва папки не може бути порожньою.", "Folder name updated successfully": "Назву папки успішно оновлено", "Followed instructions perfectly": "Бездоганно дотримувався інструкцій", @@ -582,7 +581,6 @@ "Function Name": "Назва функції", "Function updated successfully": "Функцію успішно оновлено", "Functions": "Функції", - "Functions allow arbitrary code execution": "Функції дозволяють виконання довільного коду", "Functions allow arbitrary code execution.": "Функції дозволяють виконання довільного коду.", "Functions imported successfully": "Функції успішно імпортовано", "Gemini": "Gemini", @@ -787,7 +785,6 @@ "No distance available": "Відстань недоступна", "No feedbacks found": "Відгуків не знайдено", "No file selected": "Файл не обрано", - "No files found.": "Файли не знайдено.", "No groups with access, add a group to grant access": "Немає груп з доступом, додайте групу для надання доступу", "No HTML, CSS, or JavaScript content found.": "HTML, CSS або JavaScript контент не знайдено.", "No inference engine with management support found": "Не знайдено двигуна висновків з підтримкою керування", @@ -1162,7 +1159,6 @@ "Tools Access": "Доступ до інструментів", "Tools are a function calling system with arbitrary code execution": "Інструменти - це система виклику функцій з довільним виконанням коду", "Tools Function Calling Prompt": "Підказка для виклику функцій інструментів", - "Tools have a function calling system that allows arbitrary code execution": "Інструменти мають систему виклику функцій, яка дозволяє виконання довільного коду", "Tools have a function calling system that allows arbitrary code execution.": "Інструменти мають систему виклику функцій, яка дозволяє виконання довільного коду.", "Tools Public Sharing": "Публічний обмін інструментами", "Top K": "Top K", diff --git a/src/lib/i18n/locales/ur-PK/translation.json b/src/lib/i18n/locales/ur-PK/translation.json index e903b9af5..03e78f317 100644 --- a/src/lib/i18n/locales/ur-PK/translation.json +++ b/src/lib/i18n/locales/ur-PK/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "بڑے بیرونی جوابات کے حصوں کو بہاؤ میں منتقل کریں", "Focus chat input": "چیٹ ان پٹ پر توجہ مرکوز کریں", "Folder deleted successfully": "پوشہ کامیابی سے حذف ہو گیا", - "Folder name cannot be empty": "پوشے کا نام خالی نہیں ہو سکتا", "Folder name cannot be empty.": "پوشے کا نام خالی نہیں ہو سکتا", "Folder name updated successfully": "فولڈر کا نام کامیابی سے اپ ڈیٹ ہوگیا", "Followed instructions perfectly": "ہدایتوں کی مکمل پیروی کی گئی", @@ -582,7 +581,6 @@ "Function Name": "", "Function updated successfully": "فنکشن کو کامیابی سے اپ ڈیٹ کر دیا گیا", "Functions": "افعال", - "Functions allow arbitrary code execution": "فنکشنز کوڈ کے بلاواسطہ نفاذ کی اجازت دیتے ہیں", "Functions allow arbitrary code execution.": "افعال صوابدیدی کوڈ کے اجرا کی اجازت دیتے ہیں", "Functions imported successfully": "فنکشنز کامیابی سے درآمد ہو گئے ہیں", "Gemini": "", @@ -787,7 +785,6 @@ "No distance available": "فاصلہ دستیاب نہیں ہے", "No feedbacks found": "کوئی تبصرے نہیں ملے", "No file selected": "کوئی فائل منتخب نہیں کی گئی", - "No files found.": "کوئی فائلیں نہیں ملیں", "No groups with access, add a group to grant access": "", "No HTML, CSS, or JavaScript content found.": "کوئی HTML، CSS، یا جاوا اسکرپٹ مواد نہیں ملا", "No inference engine with management support found": "", @@ -1162,7 +1159,6 @@ "Tools Access": "", "Tools are a function calling system with arbitrary code execution": "ٹولز ایک فنکشن کالنگ سسٹم ہیں جس میں مرضی کے مطابق کوڈ چلایا جاتا ہے", "Tools Function Calling Prompt": "", - "Tools have a function calling system that allows arbitrary code execution": "ٹولز کے پاس ایک فنکشن کالنگ سسٹم ہے جو اختیاری کوڈ کے نفاذ کی اجازت دیتا ہے", "Tools have a function calling system that allows arbitrary code execution.": "ٹولز کے پاس ایک فنکشن کالنگ سسٹم ہے جو اختیاری کوڈ کی عمل درآمد کی اجازت دیتا ہے", "Tools Public Sharing": "", "Top K": "اوپر کے K", diff --git a/src/lib/i18n/locales/vi-VN/translation.json b/src/lib/i18n/locales/vi-VN/translation.json index 22f868afd..8ff968405 100644 --- a/src/lib/i18n/locales/vi-VN/translation.json +++ b/src/lib/i18n/locales/vi-VN/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "Truyền tải các khối phản hồi bên ngoài lớn một cách trôi chảy", "Focus chat input": "Tập trung vào nội dung chat", "Folder deleted successfully": "Xóa thư mục thành công", - "Folder name cannot be empty": "Tên thư mục không được để trống", "Folder name cannot be empty.": "Tên thư mục không được để trống.", "Folder name updated successfully": "Cập nhật tên thư mục thành công", "Followed instructions perfectly": "Tuân theo chỉ dẫn một cách hoàn hảo", @@ -582,7 +581,6 @@ "Function Name": "Tên Function", "Function updated successfully": "Function được cập nhật thành công", "Functions": "Functions", - "Functions allow arbitrary code execution": "Các Function cho phép thực thi mã tùy ý", "Functions allow arbitrary code execution.": "Các Function cho phép thực thi mã tùy ý.", "Functions imported successfully": "Các function đã được nạp thành công", "Gemini": "Gemini", @@ -787,7 +785,6 @@ "No distance available": "Không có khoảng cách khả dụng", "No feedbacks found": "Không tìm thấy phản hồi nào", "No file selected": "Chưa có tệp nào được chọn", - "No files found.": "Không tìm thấy tệp nào.", "No groups with access, add a group to grant access": "Không có nhóm nào có quyền truy cập, hãy thêm một nhóm để cấp quyền truy cập", "No HTML, CSS, or JavaScript content found.": "Không tìm thấy nội dung HTML, CSS hoặc JavaScript.", "No inference engine with management support found": "Không tìm thấy engine suy luận nào có hỗ trợ quản lý", @@ -1162,7 +1159,6 @@ "Tools Access": "Truy cập Tools", "Tools are a function calling system with arbitrary code execution": "Tools là một hệ thống gọi function với việc thực thi mã tùy ý", "Tools Function Calling Prompt": "Prompt Gọi Function của Tools", - "Tools have a function calling system that allows arbitrary code execution": "Các Tools có hệ thống gọi function cho phép thực thi mã tùy ý", "Tools have a function calling system that allows arbitrary code execution.": "Các Tools có hệ thống gọi function cho phép thực thi mã tùy ý.", "Tools Public Sharing": "Chia sẻ Công khai Tools", "Top K": "Top K", diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index 11d262e3a..1681b2dcc 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "流畅地传输外部大型响应块数据", "Focus chat input": "聚焦对话输入", "Folder deleted successfully": "分组删除成功", - "Folder name cannot be empty": "分组名称不能为空", "Folder name cannot be empty.": "分组名称不能为空。", "Folder name updated successfully": "分组名称更新成功。", "Followed instructions perfectly": "完全按照指示执行", @@ -582,7 +581,6 @@ "Function Name": "函数名称", "Function updated successfully": "函数更新成功", "Functions": "函数", - "Functions allow arbitrary code execution": "注意:函数有权执行任意代码", "Functions allow arbitrary code execution.": "注意:函数有权执行任意代码。", "Functions imported successfully": "函数导入成功", "Gemini": "Gemini", @@ -787,7 +785,6 @@ "No distance available": "没有可用距离", "No feedbacks found": "暂无任何反馈", "No file selected": "未选中文件", - "No files found.": "未找到文件。", "No groups with access, add a group to grant access": "没有权限组,请添加一个权限组以授予访问权限", "No HTML, CSS, or JavaScript content found.": "未找到 HTML、CSS 或 JavaScript 内容。", "No inference engine with management support found": "未找到支持管理的推理引擎", @@ -1162,7 +1159,6 @@ "Tools Access": "访问工具", "Tools are a function calling system with arbitrary code execution": "工具是一个具有任意代码执行能力的函数调用系统", "Tools Function Calling Prompt": "工具函数调用提示词", - "Tools have a function calling system that allows arbitrary code execution": "注意:工具有权执行任意代码", "Tools have a function calling system that allows arbitrary code execution.": "注意:工具有权执行任意代码。", "Tools Public Sharing": "工具公开分享", "Top K": "Top K", diff --git a/src/lib/i18n/locales/zh-TW/translation.json b/src/lib/i18n/locales/zh-TW/translation.json index 04eeeda48..b07c1cab7 100644 --- a/src/lib/i18n/locales/zh-TW/translation.json +++ b/src/lib/i18n/locales/zh-TW/translation.json @@ -561,7 +561,6 @@ "Fluidly stream large external response chunks": "流暢地串流大型外部回應區塊", "Focus chat input": "聚焦對話輸入", "Folder deleted successfully": "資料夾刪除成功", - "Folder name cannot be empty": "資料夾名稱不能為空", "Folder name cannot be empty.": "資料夾名稱不能為空。", "Folder name updated successfully": "資料夾名稱更新成功", "Followed instructions perfectly": "完全遵循指示", @@ -582,7 +581,6 @@ "Function Name": "函式名稱", "Function updated successfully": "成功更新函式", "Functions": "函式", - "Functions allow arbitrary code execution": "函式允許執行任意程式碼", "Functions allow arbitrary code execution.": "函式允許執行任意程式碼。", "Functions imported successfully": "成功匯入函式", "Gemini": "Gemini", @@ -787,7 +785,6 @@ "No distance available": "無可用距離", "No feedbacks found": "找不到回饋", "No file selected": "未選取檔案", - "No files found.": "找不到檔案。", "No groups with access, add a group to grant access": "沒有具有存取權限的群組,新增群組以授予存取權限", "No HTML, CSS, or JavaScript content found.": "找不到 HTML、CSS 或 JavaScript 內容。", "No inference engine with management support found": "找不到支援管理功能的推理引擎", @@ -1162,7 +1159,6 @@ "Tools Access": "工具存取", "Tools are a function calling system with arbitrary code execution": "工具是一個具有任意程式碼執行功能的函式呼叫系統", "Tools Function Calling Prompt": "工具函式呼叫提示詞", - "Tools have a function calling system that allows arbitrary code execution": "工具具有允許執行任意程式碼的函式呼叫系統", "Tools have a function calling system that allows arbitrary code execution.": "工具具有允許執行任意程式碼的函式呼叫系統。", "Tools Public Sharing": "工具公開分享", "Top K": "Top K", From 513d5c8bf5e199a645a0f9747bfa471b739740e5 Mon Sep 17 00:00:00 2001 From: hurxxxx Date: Thu, 1 May 2025 13:21:15 +0900 Subject: [PATCH 156/161] Fix typos --- src/lib/i18n/locales/ko-KR/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/i18n/locales/ko-KR/translation.json b/src/lib/i18n/locales/ko-KR/translation.json index 205737b8b..42435e30d 100644 --- a/src/lib/i18n/locales/ko-KR/translation.json +++ b/src/lib/i18n/locales/ko-KR/translation.json @@ -1281,6 +1281,6 @@ "Your account status is currently pending activation.": "현재 계정은 아직 활성화되지 않았습니다.", "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "당신의 모든 기여는 곧바로 플러그인 개발자에게 갑니다; Open WebUI는 일절 가져가지 않습니다 하지만, 선택한 후원 플랫폼은 수수료를 가져갈 수 있습니다.", "Youtube": "유튜브", - "Youtube Language": "Youtube브 언어", + "Youtube Language": "Youtube 언어", "Youtube Proxy URL": "Youtube 프록시 URL" } From 079af5fffec909271ccf80fa17368b0a1a969768 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Thu, 1 May 2025 09:41:07 +0400 Subject: [PATCH 157/161] fix: send webhook notification when user is not active --- backend/open_webui/utils/middleware.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/open_webui/utils/middleware.py b/backend/open_webui/utils/middleware.py index 0d6951c58..8cc2b2b77 100644 --- a/backend/open_webui/utils/middleware.py +++ b/backend/open_webui/utils/middleware.py @@ -1133,7 +1133,7 @@ async def process_chat_response( ) # Send a webhook notification if the user is not active - if get_active_status_by_user_id(user.id): + if not get_active_status_by_user_id(user.id): webhook_url = Users.get_user_webhook_url_by_id(user.id) if webhook_url: post_webhook( @@ -2224,7 +2224,7 @@ async def process_chat_response( ) # Send a webhook notification if the user is not active - if get_active_status_by_user_id(user.id): + if not get_active_status_by_user_id(user.id): webhook_url = Users.get_user_webhook_url_by_id(user.id) if webhook_url: post_webhook( From c82671734367450ddcd93716456f51a6ae27a4b4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 May 2025 05:44:35 +0000 Subject: [PATCH 158/161] build(deps): bump @tiptap/core from 2.10.0 to 2.11.9 Bumps [@tiptap/core](https://github.com/ueberdosis/tiptap/tree/HEAD/packages/core) from 2.10.0 to 2.11.9. - [Release notes](https://github.com/ueberdosis/tiptap/releases) - [Changelog](https://github.com/ueberdosis/tiptap/blob/@tiptap/core@2.11.9/packages/core/CHANGELOG.md) - [Commits](https://github.com/ueberdosis/tiptap/commits/@tiptap/core@2.11.9/packages/core) --- updated-dependencies: - dependency-name: "@tiptap/core" dependency-version: 2.11.9 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index c23899033..261543d55 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@pyscript/core": "^0.4.32", "@sveltejs/adapter-node": "^2.0.0", "@sveltejs/svelte-virtual-list": "^3.0.1", - "@tiptap/core": "^2.10.0", + "@tiptap/core": "^2.11.9", "@tiptap/extension-code-block-lowlight": "^2.11.9", "@tiptap/extension-highlight": "^2.10.0", "@tiptap/extension-placeholder": "^2.10.0", @@ -2890,9 +2890,9 @@ } }, "node_modules/@tiptap/core": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.10.0.tgz", - "integrity": "sha512-58nAjPxLRFcXepdDqQRC1mhrw6E8Sanqr6bbO4Tz0+FWgDJMZvHG+dOK5wHaDVNSgK2iJDz08ETvQayfOOgDvg==", + "version": "2.11.9", + "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.11.9.tgz", + "integrity": "sha512-UZSxQLLyJst47xep3jlyKM6y1ebZnmvbGsB7njBVjfxf5H+4yFpRJwwNqrBHM/vyU55LCtPChojqaYC1wXLf6g==", "license": "MIT", "funding": { "type": "github", diff --git a/package.json b/package.json index f100f16af..8baa28566 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "@pyscript/core": "^0.4.32", "@sveltejs/adapter-node": "^2.0.0", "@sveltejs/svelte-virtual-list": "^3.0.1", - "@tiptap/core": "^2.10.0", + "@tiptap/core": "^2.11.9", "@tiptap/extension-code-block-lowlight": "^2.11.9", "@tiptap/extension-highlight": "^2.10.0", "@tiptap/extension-placeholder": "^2.10.0", From 32257089f96db4c4a7e782511c63fae0f5729292 Mon Sep 17 00:00:00 2001 From: Bryan Berns Date: Thu, 1 May 2025 03:56:20 -0400 Subject: [PATCH 159/161] Use SHA256 For Query Result Computation --- backend/open_webui/retrieval/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/open_webui/retrieval/utils.py b/backend/open_webui/retrieval/utils.py index 410945c81..b952080d3 100644 --- a/backend/open_webui/retrieval/utils.py +++ b/backend/open_webui/retrieval/utils.py @@ -207,7 +207,7 @@ def merge_and_sort_query_results(query_results: list[dict], k: int) -> dict: for distance, document, metadata in zip(distances, documents, metadatas): if isinstance(document, str): - doc_hash = hashlib.md5( + doc_hash = hashlib.sha256( document.encode() ).hexdigest() # Compute a hash for uniqueness From f26cafd9844eefd5dbeab52a49588fbbd903aa96 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Thu, 1 May 2025 15:58:45 +0400 Subject: [PATCH 160/161] chore: langchain bump --- backend/requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/requirements.txt b/backend/requirements.txt index 12f87a544..8b25308ab 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -40,8 +40,8 @@ anthropic google-generativeai==0.8.4 tiktoken -langchain==0.3.19 -langchain-community==0.3.18 +langchain==0.3.24 +langchain-community==0.3.23 fake-useragent==2.1.0 chromadb==0.6.3 From 5d5e351937d796b6af6e4434b809aec2535969b1 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Thu, 1 May 2025 16:39:36 +0400 Subject: [PATCH 161/161] feat: notes scaffolding --- backend/open_webui/config.py | 5 ++ backend/open_webui/main.py | 5 +- backend/open_webui/routers/auths.py | 6 ++- .../components/admin/Settings/General.svelte | 8 +++ src/lib/components/layout/Sidebar.svelte | 42 ++++++++++++++++ src/routes/(app)/admin/+layout.svelte | 2 +- src/routes/(app)/home/+layout.svelte | 2 +- src/routes/(app)/notes/+layout.svelte | 50 +++++++++++++++++++ src/routes/(app)/notes/+page.svelte | 0 src/routes/(app)/playground/+layout.svelte | 2 +- src/routes/(app)/workspace/+layout.svelte | 2 +- src/routes/+layout.svelte | 4 +- src/routes/s/[id]/+page.svelte | 2 +- 13 files changed, 121 insertions(+), 9 deletions(-) create mode 100644 src/routes/(app)/notes/+layout.svelte create mode 100644 src/routes/(app)/notes/+page.svelte diff --git a/backend/open_webui/config.py b/backend/open_webui/config.py index 7dc4be9f0..6b1f27d46 100644 --- a/backend/open_webui/config.py +++ b/backend/open_webui/config.py @@ -1178,6 +1178,11 @@ ENABLE_CHANNELS = PersistentConfig( os.environ.get("ENABLE_CHANNELS", "False").lower() == "true", ) +ENABLE_NOTES = PersistentConfig( + "ENABLE_NOTES", + "notes.enable", + os.environ.get("ENABLE_NOTES", "True").lower() == "true", +) ENABLE_EVALUATION_ARENA_MODELS = PersistentConfig( "ENABLE_EVALUATION_ARENA_MODELS", diff --git a/backend/open_webui/main.py b/backend/open_webui/main.py index 862f554f4..2ffdd01d3 100644 --- a/backend/open_webui/main.py +++ b/backend/open_webui/main.py @@ -156,7 +156,7 @@ from open_webui.config import ( AUDIO_STT_AZURE_REGION, AUDIO_STT_AZURE_LOCALES, AUDIO_STT_AZURE_BASE_URL, - AUDIO_STT_AZURE_MAX_SPEAKERS, + AUDIO_STT_AZURE_MAX_SPEAKERS, AUDIO_TTS_API_KEY, AUDIO_TTS_ENGINE, AUDIO_TTS_MODEL, @@ -274,6 +274,7 @@ from open_webui.config import ( ENABLE_API_KEY_ENDPOINT_RESTRICTIONS, API_KEY_ALLOWED_ENDPOINTS, ENABLE_CHANNELS, + ENABLE_NOTES, ENABLE_COMMUNITY_SHARING, ENABLE_MESSAGE_RATING, ENABLE_USER_WEBHOOKS, @@ -570,6 +571,7 @@ app.state.config.MODEL_ORDER_LIST = MODEL_ORDER_LIST app.state.config.ENABLE_CHANNELS = ENABLE_CHANNELS +app.state.config.ENABLE_NOTES = ENABLE_NOTES app.state.config.ENABLE_COMMUNITY_SHARING = ENABLE_COMMUNITY_SHARING app.state.config.ENABLE_MESSAGE_RATING = ENABLE_MESSAGE_RATING app.state.config.ENABLE_USER_WEBHOOKS = ENABLE_USER_WEBHOOKS @@ -1321,6 +1323,7 @@ async def get_app_config(request: Request): { "enable_direct_connections": app.state.config.ENABLE_DIRECT_CONNECTIONS, "enable_channels": app.state.config.ENABLE_CHANNELS, + "enable_notes": app.state.config.ENABLE_NOTES, "enable_web_search": app.state.config.ENABLE_WEB_SEARCH, "enable_code_execution": app.state.config.ENABLE_CODE_EXECUTION, "enable_code_interpreter": app.state.config.ENABLE_CODE_INTERPRETER, diff --git a/backend/open_webui/routers/auths.py b/backend/open_webui/routers/auths.py index a820527dd..91057b90d 100644 --- a/backend/open_webui/routers/auths.py +++ b/backend/open_webui/routers/auths.py @@ -689,6 +689,7 @@ async def get_admin_config(request: Request, user=Depends(get_admin_user)): "ENABLE_COMMUNITY_SHARING": request.app.state.config.ENABLE_COMMUNITY_SHARING, "ENABLE_MESSAGE_RATING": request.app.state.config.ENABLE_MESSAGE_RATING, "ENABLE_CHANNELS": request.app.state.config.ENABLE_CHANNELS, + "ENABLE_NOTES": request.app.state.config.ENABLE_NOTES, "ENABLE_USER_WEBHOOKS": request.app.state.config.ENABLE_USER_WEBHOOKS, } @@ -705,6 +706,7 @@ class AdminConfig(BaseModel): ENABLE_COMMUNITY_SHARING: bool ENABLE_MESSAGE_RATING: bool ENABLE_CHANNELS: bool + ENABLE_NOTES: bool ENABLE_USER_WEBHOOKS: bool @@ -725,6 +727,7 @@ async def update_admin_config( ) request.app.state.config.ENABLE_CHANNELS = form_data.ENABLE_CHANNELS + request.app.state.config.ENABLE_NOTES = form_data.ENABLE_NOTES if form_data.DEFAULT_USER_ROLE in ["pending", "user", "admin"]: request.app.state.config.DEFAULT_USER_ROLE = form_data.DEFAULT_USER_ROLE @@ -749,11 +752,12 @@ async def update_admin_config( "ENABLE_API_KEY": request.app.state.config.ENABLE_API_KEY, "ENABLE_API_KEY_ENDPOINT_RESTRICTIONS": request.app.state.config.ENABLE_API_KEY_ENDPOINT_RESTRICTIONS, "API_KEY_ALLOWED_ENDPOINTS": request.app.state.config.API_KEY_ALLOWED_ENDPOINTS, - "ENABLE_CHANNELS": request.app.state.config.ENABLE_CHANNELS, "DEFAULT_USER_ROLE": request.app.state.config.DEFAULT_USER_ROLE, "JWT_EXPIRES_IN": request.app.state.config.JWT_EXPIRES_IN, "ENABLE_COMMUNITY_SHARING": request.app.state.config.ENABLE_COMMUNITY_SHARING, "ENABLE_MESSAGE_RATING": request.app.state.config.ENABLE_MESSAGE_RATING, + "ENABLE_CHANNELS": request.app.state.config.ENABLE_CHANNELS, + "ENABLE_NOTES": request.app.state.config.ENABLE_NOTES, "ENABLE_USER_WEBHOOKS": request.app.state.config.ENABLE_USER_WEBHOOKS, } diff --git a/src/lib/components/admin/Settings/General.svelte b/src/lib/components/admin/Settings/General.svelte index c44f9caa2..3741168f8 100644 --- a/src/lib/components/admin/Settings/General.svelte +++ b/src/lib/components/admin/Settings/General.svelte @@ -601,6 +601,14 @@
+
+
+ {$i18n.t('Notes')} ({$i18n.t('Beta')}) +
+ + +
+
{$i18n.t('Channels')} ({$i18n.t('Beta')}) diff --git a/src/lib/components/layout/Sidebar.svelte b/src/lib/components/layout/Sidebar.svelte index 2de4c8e85..d8c018b42 100644 --- a/src/lib/components/layout/Sidebar.svelte +++ b/src/lib/components/layout/Sidebar.svelte @@ -609,6 +609,48 @@
{/if} + {#if $config?.features?.enable_notes ?? false} + + {/if} +
{#if $temporaryChatEnabled}
diff --git a/src/routes/(app)/admin/+layout.svelte b/src/routes/(app)/admin/+layout.svelte index bc3caa338..6f0462f76 100644 --- a/src/routes/(app)/admin/+layout.svelte +++ b/src/routes/(app)/admin/+layout.svelte @@ -20,7 +20,7 @@ - {$i18n.t('Admin Panel')} | {$WEBUI_NAME} + {$i18n.t('Admin Panel')} • {$WEBUI_NAME} diff --git a/src/routes/(app)/home/+layout.svelte b/src/routes/(app)/home/+layout.svelte index 63abe4169..c41e70c53 100644 --- a/src/routes/(app)/home/+layout.svelte +++ b/src/routes/(app)/home/+layout.svelte @@ -11,7 +11,7 @@ - {$i18n.t('Home')} | {$WEBUI_NAME} + {$i18n.t('Home')} • {$WEBUI_NAME} diff --git a/src/routes/(app)/notes/+layout.svelte b/src/routes/(app)/notes/+layout.svelte new file mode 100644 index 000000000..3f6830240 --- /dev/null +++ b/src/routes/(app)/notes/+layout.svelte @@ -0,0 +1,50 @@ + + + + + {$i18n.t('Notes')} • {$WEBUI_NAME} + + + +
+ + +
+ +
+
diff --git a/src/routes/(app)/notes/+page.svelte b/src/routes/(app)/notes/+page.svelte new file mode 100644 index 000000000..e69de29bb diff --git a/src/routes/(app)/playground/+layout.svelte b/src/routes/(app)/playground/+layout.svelte index 8da329b2f..4a2ebb3aa 100644 --- a/src/routes/(app)/playground/+layout.svelte +++ b/src/routes/(app)/playground/+layout.svelte @@ -11,7 +11,7 @@ - {$i18n.t('Playground')} | {$WEBUI_NAME} + {$i18n.t('Playground')} • {$WEBUI_NAME} diff --git a/src/routes/(app)/workspace/+layout.svelte b/src/routes/(app)/workspace/+layout.svelte index 0240e693c..fc7d434fd 100644 --- a/src/routes/(app)/workspace/+layout.svelte +++ b/src/routes/(app)/workspace/+layout.svelte @@ -45,7 +45,7 @@ - {$i18n.t('Workspace')} | {$WEBUI_NAME} + {$i18n.t('Workspace')} • {$WEBUI_NAME} diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 218e92e43..04debfac5 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -227,7 +227,7 @@ if ($isLastActiveTab) { if ($settings?.notificationEnabled ?? false) { - new Notification(`${title} | Open WebUI`, { + new Notification(`${title} • Open WebUI`, { body: content, icon: `${WEBUI_BASE_URL}/static/favicon.png` }); @@ -376,7 +376,7 @@ if (type === 'message') { if ($isLastActiveTab) { if ($settings?.notificationEnabled ?? false) { - new Notification(`${data?.user?.name} (#${event?.channel?.name}) | Open WebUI`, { + new Notification(`${data?.user?.name} (#${event?.channel?.name}) • Open WebUI`, { body: data?.content, icon: data?.user?.profile_image_url ?? `${WEBUI_BASE_URL}/static/favicon.png` }); diff --git a/src/routes/s/[id]/+page.svelte b/src/routes/s/[id]/+page.svelte index d8f3f42ea..c5849178a 100644 --- a/src/routes/s/[id]/+page.svelte +++ b/src/routes/s/[id]/+page.svelte @@ -145,7 +145,7 @@ {title - ? `${title.length > 30 ? `${title.slice(0, 30)}...` : title} | ${$WEBUI_NAME}` + ? `${title.length > 30 ? `${title.slice(0, 30)}...` : title} • ${$WEBUI_NAME}` : `${$WEBUI_NAME}`}