1
0
Эх сурвалжийг харах

Merge branch 'update-danish-translation' of https://github.com/oleguldberg/open-webui into update-danish-translation

Ole Guldberg 2 сар өмнө
parent
commit
ba4f399ace
100 өөрчлөгдсөн 3075 нэмэгдсэн , 1268 устгасан
  1. 1 1
      .github/pull_request_template.md
  2. 7 1
      LICENSE
  3. 1 2
      README.md
  4. 1 1
      backend/open_webui/__init__.py
  5. 60 0
      backend/open_webui/config.py
  6. 14 0
      backend/open_webui/env.py
  7. 25 2
      backend/open_webui/main.py
  8. 53 0
      backend/open_webui/retrieval/loaders/external.py
  9. 4 0
      backend/open_webui/retrieval/vector/connector.py
  10. 7 2
      backend/open_webui/retrieval/vector/dbs/chroma.py
  11. 7 2
      backend/open_webui/retrieval/vector/dbs/elasticsearch.py
  12. 7 2
      backend/open_webui/retrieval/vector/dbs/milvus.py
  13. 7 2
      backend/open_webui/retrieval/vector/dbs/opensearch.py
  14. 7 2
      backend/open_webui/retrieval/vector/dbs/pgvector.py
  15. 412 0
      backend/open_webui/retrieval/vector/dbs/pinecone.py
  16. 41 9
      backend/open_webui/retrieval/vector/dbs/qdrant.py
  17. 68 1
      backend/open_webui/retrieval/vector/main.py
  18. 47 0
      backend/open_webui/retrieval/web/external.py
  19. 12 5
      backend/open_webui/retrieval/web/tavily.py
  20. 8 0
      backend/open_webui/retrieval/web/utils.py
  21. 7 0
      backend/open_webui/routers/auths.py
  22. 10 1
      backend/open_webui/routers/chats.py
  23. 4 2
      backend/open_webui/routers/files.py
  24. 9 8
      backend/open_webui/routers/knowledge.py
  25. 7 1
      backend/open_webui/routers/ollama.py
  26. 15 10
      backend/open_webui/routers/openai.py
  27. 54 15
      backend/open_webui/routers/retrieval.py
  28. 33 0
      backend/open_webui/routers/users.py
  29. 44 10
      backend/open_webui/utils/audit.py
  30. 19 6
      backend/open_webui/utils/middleware.py
  31. 48 1
      backend/open_webui/utils/oauth.py
  32. 70 45
      backend/open_webui/utils/tools.py
  33. 1 1
      backend/requirements.txt
  34. 2 2
      package-lock.json
  35. 1 1
      package.json
  36. 1 0
      pyproject.toml
  37. 65 2
      src/lib/components/admin/Settings/WebSearch.svelte
  38. 2 0
      src/lib/components/admin/Users/Groups.svelte
  39. 18 0
      src/lib/components/admin/Users/Groups/Permissions.svelte
  40. 1 1
      src/lib/components/channel/Channel.svelte
  41. 5 3
      src/lib/components/chat/Chat.svelte
  42. 1 1
      src/lib/components/chat/ChatControls.svelte
  43. 2 2
      src/lib/components/chat/MessageInput.svelte
  44. 112 87
      src/lib/components/chat/MessageInput/InputMenu.svelte
  45. 1 0
      src/lib/components/chat/Messages/Citations.svelte
  46. 7 4
      src/lib/components/chat/Messages/CitationsModal.svelte
  47. 4 4
      src/lib/components/chat/Messages/ContentRenderer.svelte
  48. 4 16
      src/lib/components/chat/Messages/Markdown.svelte
  49. 49 0
      src/lib/components/chat/Messages/Markdown/HTMLToken.svelte
  50. 2 10
      src/lib/components/chat/Messages/Markdown/MarkdownInlineTokens.svelte
  51. 8 17
      src/lib/components/chat/Messages/Markdown/MarkdownTokens.svelte
  52. 9 8
      src/lib/components/chat/Messages/MultiResponseMessages.svelte
  53. 5 3
      src/lib/components/chat/Messages/UserMessage.svelte
  54. 1 1
      src/lib/components/chat/ModelSelector/Selector.svelte
  55. 11 5
      src/lib/components/chat/Settings/About.svelte
  56. 25 22
      src/lib/components/chat/Settings/Chats.svelte
  57. 34 2
      src/lib/components/chat/Settings/Interface.svelte
  58. 3 4
      src/lib/components/common/Drawer.svelte
  59. 4 1
      src/lib/components/common/Textarea.svelte
  60. 13 10
      src/lib/components/layout/Navbar/Menu.svelte
  61. 23 18
      src/lib/components/layout/Sidebar/ChatMenu.svelte
  62. 41 7
      src/lib/components/workspace/Knowledge/KnowledgeBase.svelte
  63. 5 1
      src/lib/components/workspace/Models/ModelEditor.svelte
  64. 12 3
      src/lib/components/workspace/Prompts/PromptEditor.svelte
  65. 18 1
      src/lib/i18n/locales/ar-BH/translation.json
  66. 18 1
      src/lib/i18n/locales/ar/translation.json
  67. 18 1
      src/lib/i18n/locales/bg-BG/translation.json
  68. 18 1
      src/lib/i18n/locales/bn-BD/translation.json
  69. 18 1
      src/lib/i18n/locales/bo-TB/translation.json
  70. 50 33
      src/lib/i18n/locales/ca-ES/translation.json
  71. 18 1
      src/lib/i18n/locales/ceb-PH/translation.json
  72. 18 1
      src/lib/i18n/locales/cs-CZ/translation.json
  73. 15 1
      src/lib/i18n/locales/da-DK/translation.json
  74. 20 3
      src/lib/i18n/locales/de-DE/translation.json
  75. 18 1
      src/lib/i18n/locales/dg-DG/translation.json
  76. 18 1
      src/lib/i18n/locales/el-GR/translation.json
  77. 18 1
      src/lib/i18n/locales/en-GB/translation.json
  78. 18 1
      src/lib/i18n/locales/en-US/translation.json
  79. 114 97
      src/lib/i18n/locales/es-ES/translation.json
  80. 18 1
      src/lib/i18n/locales/et-EE/translation.json
  81. 18 1
      src/lib/i18n/locales/eu-ES/translation.json
  82. 579 562
      src/lib/i18n/locales/fa-IR/translation.json
  83. 60 43
      src/lib/i18n/locales/fi-FI/translation.json
  84. 18 1
      src/lib/i18n/locales/fr-CA/translation.json
  85. 18 1
      src/lib/i18n/locales/fr-FR/translation.json
  86. 1 0
      src/lib/i18n/locales/gl-ES/translation.json
  87. 18 1
      src/lib/i18n/locales/he-IL/translation.json
  88. 18 1
      src/lib/i18n/locales/hi-IN/translation.json
  89. 18 1
      src/lib/i18n/locales/hr-HR/translation.json
  90. 18 1
      src/lib/i18n/locales/hu-HU/translation.json
  91. 18 1
      src/lib/i18n/locales/id-ID/translation.json
  92. 149 132
      src/lib/i18n/locales/ie-GA/translation.json
  93. 18 1
      src/lib/i18n/locales/it-IT/translation.json
  94. 18 1
      src/lib/i18n/locales/ja-JP/translation.json
  95. 18 1
      src/lib/i18n/locales/ka-GE/translation.json
  96. 19 2
      src/lib/i18n/locales/ko-KR/translation.json
  97. 19 2
      src/lib/i18n/locales/lt-LT/translation.json
  98. 18 1
      src/lib/i18n/locales/ms-MY/translation.json
  99. 18 1
      src/lib/i18n/locales/nb-NO/translation.json
  100. 18 1
      src/lib/i18n/locales/nl-NL/translation.json

+ 1 - 1
.github/pull_request_template.md

@@ -73,4 +73,4 @@
 
 
 ### Contributor License Agreement
 ### Contributor License Agreement
 
 
-By submitting this pull request, I confirm that I have read and fully agree to the [CONTRIBUTOR_LICENSE_AGREEMENT](CONTRIBUTOR_LICENSE_AGREEMENT), and I am providing my contributions under its terms.
+By submitting this pull request, I confirm that I have read and fully agree to the [Contributor License Agreement (CLA)](/CONTRIBUTOR_LICENSE_AGREEMENT), and I am providing my contributions under its terms.

+ 7 - 1
LICENSE

@@ -1,4 +1,4 @@
-Copyright (c) 2023-2025 Timothy Jaeryang Baek
+Copyright (c) 2023-2025 Timothy Jaeryang Baek (Open WebUI)
 All rights reserved.
 All rights reserved.
 
 
 Redistribution and use in source and binary forms, with or without
 Redistribution and use in source and binary forms, with or without
@@ -15,6 +15,12 @@ modification, are permitted provided that the following conditions are met:
    contributors may be used to endorse or promote products derived from
    contributors may be used to endorse or promote products derived from
    this software without specific prior written permission.
    this software without specific prior written permission.
 
 
+4. Notwithstanding any other provision of this License, and as a material condition of the rights granted herein, licensees are strictly prohibited from altering, removing, obscuring, or replacing any "Open WebUI" branding, including but not limited to the name, logo, or any visual, textual, or symbolic identifiers that distinguish the software and its interfaces, in any deployment or distribution, regardless of the number of users, except as explicitly set forth in Clauses 5 and 6 below.
+
+5. The branding restriction enumerated in Clause 4 shall not apply in the following limited circumstances: (i) deployments or distributions where the total number of end users (defined as individual natural persons with direct access to the application) does not exceed fifty (50) within any rolling thirty (30) day period; (ii) cases in which the licensee is an official contributor to the codebase—with a substantive code change successfully merged into the main branch of the official codebase maintained by the copyright holder—who has obtained specific prior written permission for branding adjustment from the copyright holder; or (iii) where the licensee has obtained a duly executed enterprise license expressly permitting such modification. For all other cases, any removal or alteration of the "Open WebUI" branding shall constitute a material breach of license.
+
+6. All code, modifications, or derivative works incorporated into this project prior to the incorporation of this branding clause remain licensed under the BSD 3-Clause License, and prior contributors retain all BSD-3 rights therein; if any such contributor requests the removal of their BSD-3-licensed code, the copyright holder will do so, and any replacement code will be licensed under the project's primary license then in effect. By contributing after this clause's adoption, you agree to the project's Contributor License Agreement (CLA) and to these updated terms for all new contributions.
+
 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE

+ 1 - 2
README.md

@@ -7,7 +7,6 @@
 ![GitHub language count](https://img.shields.io/github/languages/count/open-webui/open-webui)
 ![GitHub language count](https://img.shields.io/github/languages/count/open-webui/open-webui)
 ![GitHub top language](https://img.shields.io/github/languages/top/open-webui/open-webui)
 ![GitHub top language](https://img.shields.io/github/languages/top/open-webui/open-webui)
 ![GitHub last commit](https://img.shields.io/github/last-commit/open-webui/open-webui?color=red)
 ![GitHub last commit](https://img.shields.io/github/last-commit/open-webui/open-webui?color=red)
-![Hits](https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Follama-webui%2Follama-wbui&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=hits&edge_flat=false)
 [![Discord](https://img.shields.io/badge/Discord-Open_WebUI-blue?logo=discord&logoColor=white)](https://discord.gg/5rJgQTnV4s)
 [![Discord](https://img.shields.io/badge/Discord-Open_WebUI-blue?logo=discord&logoColor=white)](https://discord.gg/5rJgQTnV4s)
 [![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/tjbck)
 [![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/tjbck)
 
 
@@ -206,7 +205,7 @@ Discover upcoming features on our roadmap in the [Open WebUI Documentation](http
 
 
 ## License 📜
 ## License 📜
 
 
-This project is licensed under the [BSD-3-Clause License](LICENSE) - see the [LICENSE](LICENSE) file for details. 📄
+This project is licensed under the [Open WebUI License](LICENSE), a revised BSD-3-Clause license. You receive all the same rights as the classic BSD-3 license: you can use, modify, and distribute the software, including in proprietary and commercial products, with minimal restrictions. The only additional requirement is to preserve the "Open WebUI" branding, as detailed in the LICENSE file. For full terms, see the [LICENSE](LICENSE) document. 📄
 
 
 ## Support 💬
 ## Support 💬
 
 

+ 1 - 1
backend/open_webui/__init__.py

@@ -76,7 +76,7 @@ def serve(
     from open_webui.env import UVICORN_WORKERS  # Import the workers setting
     from open_webui.env import UVICORN_WORKERS  # Import the workers setting
 
 
     uvicorn.run(
     uvicorn.run(
-        open_webui.main.app,
+        "open_webui.main:app",
         host=host,
         host=host,
         port=port,
         port=port,
         forwarded_allow_ips="*",
         forwarded_allow_ips="*",

+ 60 - 0
backend/open_webui/config.py

@@ -509,6 +509,12 @@ ENABLE_OAUTH_GROUP_MANAGEMENT = PersistentConfig(
     os.environ.get("ENABLE_OAUTH_GROUP_MANAGEMENT", "False").lower() == "true",
     os.environ.get("ENABLE_OAUTH_GROUP_MANAGEMENT", "False").lower() == "true",
 )
 )
 
 
+ENABLE_OAUTH_GROUP_CREATION = PersistentConfig(
+    "ENABLE_OAUTH_GROUP_CREATION",
+    "oauth.enable_group_creation",
+    os.environ.get("ENABLE_OAUTH_GROUP_CREATION", "False").lower() == "true",
+)
+
 OAUTH_ROLES_CLAIM = PersistentConfig(
 OAUTH_ROLES_CLAIM = PersistentConfig(
     "OAUTH_ROLES_CLAIM",
     "OAUTH_ROLES_CLAIM",
     "oauth.roles_claim",
     "oauth.roles_claim",
@@ -1062,6 +1068,14 @@ USER_PERMISSIONS_CHAT_EDIT = (
     os.environ.get("USER_PERMISSIONS_CHAT_EDIT", "True").lower() == "true"
     os.environ.get("USER_PERMISSIONS_CHAT_EDIT", "True").lower() == "true"
 )
 )
 
 
+USER_PERMISSIONS_CHAT_SHARE = (
+    os.environ.get("USER_PERMISSIONS_CHAT_SHARE", "True").lower() == "true"
+)
+
+USER_PERMISSIONS_CHAT_EXPORT = (
+    os.environ.get("USER_PERMISSIONS_CHAT_EXPORT", "True").lower() == "true"
+)
+
 USER_PERMISSIONS_CHAT_STT = (
 USER_PERMISSIONS_CHAT_STT = (
     os.environ.get("USER_PERMISSIONS_CHAT_STT", "True").lower() == "true"
     os.environ.get("USER_PERMISSIONS_CHAT_STT", "True").lower() == "true"
 )
 )
@@ -1126,6 +1140,8 @@ DEFAULT_USER_PERMISSIONS = {
         "file_upload": USER_PERMISSIONS_CHAT_FILE_UPLOAD,
         "file_upload": USER_PERMISSIONS_CHAT_FILE_UPLOAD,
         "delete": USER_PERMISSIONS_CHAT_DELETE,
         "delete": USER_PERMISSIONS_CHAT_DELETE,
         "edit": USER_PERMISSIONS_CHAT_EDIT,
         "edit": USER_PERMISSIONS_CHAT_EDIT,
+        "share": USER_PERMISSIONS_CHAT_SHARE,
+        "export": USER_PERMISSIONS_CHAT_EXPORT,
         "stt": USER_PERMISSIONS_CHAT_STT,
         "stt": USER_PERMISSIONS_CHAT_STT,
         "tts": USER_PERMISSIONS_CHAT_TTS,
         "tts": USER_PERMISSIONS_CHAT_TTS,
         "call": USER_PERMISSIONS_CHAT_CALL,
         "call": USER_PERMISSIONS_CHAT_CALL,
@@ -1203,6 +1219,9 @@ ENABLE_USER_WEBHOOKS = PersistentConfig(
     os.environ.get("ENABLE_USER_WEBHOOKS", "True").lower() == "true",
     os.environ.get("ENABLE_USER_WEBHOOKS", "True").lower() == "true",
 )
 )
 
 
+# FastAPI / AnyIO settings
+THREAD_POOL_SIZE = int(os.getenv("THREAD_POOL_SIZE", "0"))
+
 
 
 def validate_cors_origins(origins):
 def validate_cors_origins(origins):
     for origin in origins:
     for origin in origins:
@@ -1693,6 +1712,9 @@ MILVUS_TOKEN = os.environ.get("MILVUS_TOKEN", None)
 # Qdrant
 # Qdrant
 QDRANT_URI = os.environ.get("QDRANT_URI", None)
 QDRANT_URI = os.environ.get("QDRANT_URI", None)
 QDRANT_API_KEY = os.environ.get("QDRANT_API_KEY", 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
 OPENSEARCH_URI = os.environ.get("OPENSEARCH_URI", "https://localhost:9200")
 OPENSEARCH_URI = os.environ.get("OPENSEARCH_URI", "https://localhost:9200")
@@ -1724,6 +1746,14 @@ PGVECTOR_INITIALIZE_MAX_VECTOR_LENGTH = int(
     os.environ.get("PGVECTOR_INITIALIZE_MAX_VECTOR_LENGTH", "1536")
     os.environ.get("PGVECTOR_INITIALIZE_MAX_VECTOR_LENGTH", "1536")
 )
 )
 
 
+# Pinecone
+PINECONE_API_KEY = os.environ.get("PINECONE_API_KEY", None)
+PINECONE_ENVIRONMENT = os.environ.get("PINECONE_ENVIRONMENT", None)
+PINECONE_INDEX_NAME = os.getenv("PINECONE_INDEX_NAME", "open-webui-index")
+PINECONE_DIMENSION = int(os.getenv("PINECONE_DIMENSION", 1536))  # or 3072, 1024, 768
+PINECONE_METRIC = os.getenv("PINECONE_METRIC", "cosine")
+PINECONE_CLOUD = os.getenv("PINECONE_CLOUD", "aws")  # or "gcp" or "azure"
+
 ####################################
 ####################################
 # Information Retrieval (RAG)
 # Information Retrieval (RAG)
 ####################################
 ####################################
@@ -1760,6 +1790,13 @@ ONEDRIVE_CLIENT_ID = PersistentConfig(
     os.environ.get("ONEDRIVE_CLIENT_ID", ""),
     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
 # RAG Content Extraction
 CONTENT_EXTRACTION_ENGINE = PersistentConfig(
 CONTENT_EXTRACTION_ENGINE = PersistentConfig(
     "CONTENT_EXTRACTION_ENGINE",
     "CONTENT_EXTRACTION_ENGINE",
@@ -2251,6 +2288,29 @@ FIRECRAWL_API_BASE_URL = PersistentConfig(
     os.environ.get("FIRECRAWL_API_BASE_URL", "https://api.firecrawl.dev"),
     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
 # Images

+ 14 - 0
backend/open_webui/env.py

@@ -354,6 +354,10 @@ BYPASS_MODEL_ACCESS_CONTROL = (
     os.environ.get("BYPASS_MODEL_ACCESS_CONTROL", "False").lower() == "true"
     os.environ.get("BYPASS_MODEL_ACCESS_CONTROL", "False").lower() == "true"
 )
 )
 
 
+WEBUI_AUTH_SIGNOUT_REDIRECT_URL = os.environ.get(
+    "WEBUI_AUTH_SIGNOUT_REDIRECT_URL", None
+)
+
 ####################################
 ####################################
 # WEBUI_SECRET_KEY
 # WEBUI_SECRET_KEY
 ####################################
 ####################################
@@ -409,6 +413,11 @@ else:
     except Exception:
     except Exception:
         AIOHTTP_CLIENT_TIMEOUT = 300
         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_MODEL_LIST",
     "AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST",
     os.environ.get("AIOHTTP_CLIENT_TIMEOUT_OPENAI_MODEL_LIST", "10"),
     os.environ.get("AIOHTTP_CLIENT_TIMEOUT_OPENAI_MODEL_LIST", "10"),
@@ -437,6 +446,11 @@ else:
     except Exception:
     except Exception:
         AIOHTTP_CLIENT_TIMEOUT_TOOL_SERVER_DATA = 10
         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
 # OFFLINE_MODE
 ####################################
 ####################################

+ 25 - 2
backend/open_webui/main.py

@@ -17,6 +17,7 @@ from sqlalchemy import text
 from typing import Optional
 from typing import Optional
 from aiocache import cached
 from aiocache import cached
 import aiohttp
 import aiohttp
+import anyio.to_thread
 import requests
 import requests
 
 
 
 
@@ -100,11 +101,14 @@ from open_webui.config import (
     # OpenAI
     # OpenAI
     ENABLE_OPENAI_API,
     ENABLE_OPENAI_API,
     ONEDRIVE_CLIENT_ID,
     ONEDRIVE_CLIENT_ID,
+    ONEDRIVE_SHAREPOINT_URL,
     OPENAI_API_BASE_URLS,
     OPENAI_API_BASE_URLS,
     OPENAI_API_KEYS,
     OPENAI_API_KEYS,
     OPENAI_API_CONFIGS,
     OPENAI_API_CONFIGS,
     # Direct Connections
     # Direct Connections
     ENABLE_DIRECT_CONNECTIONS,
     ENABLE_DIRECT_CONNECTIONS,
+    # Thread pool size for FastAPI/AnyIO
+    THREAD_POOL_SIZE,
     # Tool Server Configs
     # Tool Server Configs
     TOOL_SERVER_CONNECTIONS,
     TOOL_SERVER_CONNECTIONS,
     # Code Execution
     # Code Execution
@@ -240,12 +244,17 @@ from open_webui.config import (
     GOOGLE_DRIVE_CLIENT_ID,
     GOOGLE_DRIVE_CLIENT_ID,
     GOOGLE_DRIVE_API_KEY,
     GOOGLE_DRIVE_API_KEY,
     ONEDRIVE_CLIENT_ID,
     ONEDRIVE_CLIENT_ID,
+    ONEDRIVE_SHAREPOINT_URL,
     ENABLE_RAG_HYBRID_SEARCH,
     ENABLE_RAG_HYBRID_SEARCH,
     ENABLE_RAG_LOCAL_WEB_FETCH,
     ENABLE_RAG_LOCAL_WEB_FETCH,
     ENABLE_WEB_LOADER_SSL_VERIFICATION,
     ENABLE_WEB_LOADER_SSL_VERIFICATION,
     ENABLE_GOOGLE_DRIVE_INTEGRATION,
     ENABLE_GOOGLE_DRIVE_INTEGRATION,
     ENABLE_ONEDRIVE_INTEGRATION,
     ENABLE_ONEDRIVE_INTEGRATION,
     UPLOAD_DIR,
     UPLOAD_DIR,
+    EXTERNAL_WEB_SEARCH_URL,
+    EXTERNAL_WEB_SEARCH_API_KEY,
+    EXTERNAL_WEB_LOADER_URL,
+    EXTERNAL_WEB_LOADER_API_KEY,
     # WebUI
     # WebUI
     WEBUI_AUTH,
     WEBUI_AUTH,
     WEBUI_NAME,
     WEBUI_NAME,
@@ -341,6 +350,7 @@ from open_webui.env import (
     WEBUI_SESSION_COOKIE_SECURE,
     WEBUI_SESSION_COOKIE_SECURE,
     WEBUI_AUTH_TRUSTED_EMAIL_HEADER,
     WEBUI_AUTH_TRUSTED_EMAIL_HEADER,
     WEBUI_AUTH_TRUSTED_NAME_HEADER,
     WEBUI_AUTH_TRUSTED_NAME_HEADER,
+    WEBUI_AUTH_SIGNOUT_REDIRECT_URL,
     ENABLE_WEBSOCKET_SUPPORT,
     ENABLE_WEBSOCKET_SUPPORT,
     BYPASS_MODEL_ACCESS_CONTROL,
     BYPASS_MODEL_ACCESS_CONTROL,
     RESET_CONFIG_ON_START,
     RESET_CONFIG_ON_START,
@@ -432,6 +442,11 @@ async def lifespan(app: FastAPI):
     if LICENSE_KEY:
     if LICENSE_KEY:
         get_license_data(app, LICENSE_KEY)
         get_license_data(app, LICENSE_KEY)
 
 
+    pool_size = THREAD_POOL_SIZE
+    if pool_size and pool_size > 0:
+        limiter = anyio.to_thread.current_default_thread_limiter()
+        limiter.total_tokens = pool_size
+
     asyncio.create_task(periodic_usage_pool_cleanup())
     asyncio.create_task(periodic_usage_pool_cleanup())
     yield
     yield
 
 
@@ -576,6 +591,7 @@ app.state.config.LDAP_CIPHERS = LDAP_CIPHERS
 
 
 app.state.AUTH_TRUSTED_EMAIL_HEADER = WEBUI_AUTH_TRUSTED_EMAIL_HEADER
 app.state.AUTH_TRUSTED_EMAIL_HEADER = WEBUI_AUTH_TRUSTED_EMAIL_HEADER
 app.state.AUTH_TRUSTED_NAME_HEADER = WEBUI_AUTH_TRUSTED_NAME_HEADER
 app.state.AUTH_TRUSTED_NAME_HEADER = WEBUI_AUTH_TRUSTED_NAME_HEADER
+app.state.WEBUI_AUTH_SIGNOUT_REDIRECT_URL = WEBUI_AUTH_SIGNOUT_REDIRECT_URL
 app.state.EXTERNAL_PWA_MANIFEST_URL = EXTERNAL_PWA_MANIFEST_URL
 app.state.EXTERNAL_PWA_MANIFEST_URL = EXTERNAL_PWA_MANIFEST_URL
 
 
 app.state.USER_COUNT = None
 app.state.USER_COUNT = None
@@ -668,6 +684,10 @@ app.state.config.EXA_API_KEY = EXA_API_KEY
 app.state.config.PERPLEXITY_API_KEY = PERPLEXITY_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_SID = SOUGOU_API_SID
 app.state.config.SOUGOU_API_SK = SOUGOU_API_SK
 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
 app.state.config.PLAYWRIGHT_WS_URL = PLAYWRIGHT_WS_URL
@@ -1327,7 +1347,10 @@ async def get_app_config(request: Request):
                     "client_id": GOOGLE_DRIVE_CLIENT_ID.value,
                     "client_id": GOOGLE_DRIVE_CLIENT_ID.value,
                     "api_key": GOOGLE_DRIVE_API_KEY.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,
                 "license_metadata": app.state.LICENSE_METADATA,
                 **(
                 **(
                     {
                     {
@@ -1439,7 +1462,7 @@ async def get_manifest_json():
             "start_url": "/",
             "start_url": "/",
             "display": "standalone",
             "display": "standalone",
             "background_color": "#343541",
             "background_color": "#343541",
-            "orientation": "natural",
+            "orientation": "any",
             "icons": [
             "icons": [
                 {
                 {
                     "src": "/static/logo.png",
                     "src": "/static/logo.png",

+ 53 - 0
backend/open_webui/retrieval/loaders/external.py

@@ -0,0 +1,53 @@
+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:
+        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.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}",
+                    },
+                    json={
+                        "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

+ 4 - 0
backend/open_webui/retrieval/vector/connector.py

@@ -20,6 +20,10 @@ elif VECTOR_DB == "elasticsearch":
     from open_webui.retrieval.vector.dbs.elasticsearch import ElasticsearchClient
     from open_webui.retrieval.vector.dbs.elasticsearch import ElasticsearchClient
 
 
     VECTOR_DB_CLIENT = ElasticsearchClient()
     VECTOR_DB_CLIENT = ElasticsearchClient()
+elif VECTOR_DB == "pinecone":
+    from open_webui.retrieval.vector.dbs.pinecone import PineconeClient
+
+    VECTOR_DB_CLIENT = PineconeClient()
 else:
 else:
     from open_webui.retrieval.vector.dbs.chroma import ChromaClient
     from open_webui.retrieval.vector.dbs.chroma import ChromaClient
 
 

+ 7 - 2
backend/open_webui/retrieval/vector/dbs/chroma.py

@@ -5,7 +5,12 @@ from chromadb.utils.batch_utils import create_batches
 
 
 from typing import Optional
 from typing import Optional
 
 
-from open_webui.retrieval.vector.main import VectorItem, SearchResult, GetResult
+from open_webui.retrieval.vector.main import (
+    VectorDBBase,
+    VectorItem,
+    SearchResult,
+    GetResult,
+)
 from open_webui.config import (
 from open_webui.config import (
     CHROMA_DATA_PATH,
     CHROMA_DATA_PATH,
     CHROMA_HTTP_HOST,
     CHROMA_HTTP_HOST,
@@ -23,7 +28,7 @@ log = logging.getLogger(__name__)
 log.setLevel(SRC_LOG_LEVELS["RAG"])
 log.setLevel(SRC_LOG_LEVELS["RAG"])
 
 
 
 
-class ChromaClient:
+class ChromaClient(VectorDBBase):
     def __init__(self):
     def __init__(self):
         settings_dict = {
         settings_dict = {
             "allow_reset": True,
             "allow_reset": True,

+ 7 - 2
backend/open_webui/retrieval/vector/dbs/elasticsearch.py

@@ -2,7 +2,12 @@ from elasticsearch import Elasticsearch, BadRequestError
 from typing import Optional
 from typing import Optional
 import ssl
 import ssl
 from elasticsearch.helpers import bulk, scan
 from elasticsearch.helpers import bulk, scan
-from open_webui.retrieval.vector.main import VectorItem, SearchResult, GetResult
+from open_webui.retrieval.vector.main import (
+    VectorDBBase,
+    VectorItem,
+    SearchResult,
+    GetResult,
+)
 from open_webui.config import (
 from open_webui.config import (
     ELASTICSEARCH_URL,
     ELASTICSEARCH_URL,
     ELASTICSEARCH_CA_CERTS,
     ELASTICSEARCH_CA_CERTS,
@@ -15,7 +20,7 @@ from open_webui.config import (
 )
 )
 
 
 
 
-class ElasticsearchClient:
+class ElasticsearchClient(VectorDBBase):
     """
     """
     Important:
     Important:
     in order to reduce the number of indexes and since the embedding vector length is fixed, we avoid creating
     in order to reduce the number of indexes and since the embedding vector length is fixed, we avoid creating

+ 7 - 2
backend/open_webui/retrieval/vector/dbs/milvus.py

@@ -4,7 +4,12 @@ import json
 import logging
 import logging
 from typing import Optional
 from typing import Optional
 
 
-from open_webui.retrieval.vector.main import VectorItem, SearchResult, GetResult
+from open_webui.retrieval.vector.main import (
+    VectorDBBase,
+    VectorItem,
+    SearchResult,
+    GetResult,
+)
 from open_webui.config import (
 from open_webui.config import (
     MILVUS_URI,
     MILVUS_URI,
     MILVUS_DB,
     MILVUS_DB,
@@ -16,7 +21,7 @@ log = logging.getLogger(__name__)
 log.setLevel(SRC_LOG_LEVELS["RAG"])
 log.setLevel(SRC_LOG_LEVELS["RAG"])
 
 
 
 
-class MilvusClient:
+class MilvusClient(VectorDBBase):
     def __init__(self):
     def __init__(self):
         self.collection_prefix = "open_webui"
         self.collection_prefix = "open_webui"
         if MILVUS_TOKEN is None:
         if MILVUS_TOKEN is None:

+ 7 - 2
backend/open_webui/retrieval/vector/dbs/opensearch.py

@@ -2,7 +2,12 @@ from opensearchpy import OpenSearch
 from opensearchpy.helpers import bulk
 from opensearchpy.helpers import bulk
 from typing import Optional
 from typing import Optional
 
 
-from open_webui.retrieval.vector.main import VectorItem, SearchResult, GetResult
+from open_webui.retrieval.vector.main import (
+    VectorDBBase,
+    VectorItem,
+    SearchResult,
+    GetResult,
+)
 from open_webui.config import (
 from open_webui.config import (
     OPENSEARCH_URI,
     OPENSEARCH_URI,
     OPENSEARCH_SSL,
     OPENSEARCH_SSL,
@@ -12,7 +17,7 @@ from open_webui.config import (
 )
 )
 
 
 
 
-class OpenSearchClient:
+class OpenSearchClient(VectorDBBase):
     def __init__(self):
     def __init__(self):
         self.index_prefix = "open_webui"
         self.index_prefix = "open_webui"
         self.client = OpenSearch(
         self.client = OpenSearch(

+ 7 - 2
backend/open_webui/retrieval/vector/dbs/pgvector.py

@@ -22,7 +22,12 @@ from pgvector.sqlalchemy import Vector
 from sqlalchemy.ext.mutable import MutableDict
 from sqlalchemy.ext.mutable import MutableDict
 from sqlalchemy.exc import NoSuchTableError
 from sqlalchemy.exc import NoSuchTableError
 
 
-from open_webui.retrieval.vector.main import VectorItem, SearchResult, GetResult
+from open_webui.retrieval.vector.main import (
+    VectorDBBase,
+    VectorItem,
+    SearchResult,
+    GetResult,
+)
 from open_webui.config import PGVECTOR_DB_URL, PGVECTOR_INITIALIZE_MAX_VECTOR_LENGTH
 from open_webui.config import PGVECTOR_DB_URL, PGVECTOR_INITIALIZE_MAX_VECTOR_LENGTH
 
 
 from open_webui.env import SRC_LOG_LEVELS
 from open_webui.env import SRC_LOG_LEVELS
@@ -44,7 +49,7 @@ class DocumentChunk(Base):
     vmetadata = Column(MutableDict.as_mutable(JSONB), nullable=True)
     vmetadata = Column(MutableDict.as_mutable(JSONB), nullable=True)
 
 
 
 
-class PgvectorClient:
+class PgvectorClient(VectorDBBase):
     def __init__(self) -> None:
     def __init__(self) -> None:
 
 
         # if no pgvector uri, use the existing database connection
         # if no pgvector uri, use the existing database connection

+ 412 - 0
backend/open_webui/retrieval/vector/dbs/pinecone.py

@@ -0,0 +1,412 @@
+from typing import Optional, List, Dict, Any, Union
+import logging
+from pinecone import Pinecone, ServerlessSpec
+
+from open_webui.retrieval.vector.main import (
+    VectorDBBase,
+    VectorItem,
+    SearchResult,
+    GetResult,
+)
+from open_webui.config import (
+    PINECONE_API_KEY,
+    PINECONE_ENVIRONMENT,
+    PINECONE_INDEX_NAME,
+    PINECONE_DIMENSION,
+    PINECONE_METRIC,
+    PINECONE_CLOUD,
+)
+from open_webui.env import SRC_LOG_LEVELS
+
+NO_LIMIT = 10000  # Reasonable limit to avoid overwhelming the system
+BATCH_SIZE = 100  # Recommended batch size for Pinecone operations
+
+log = logging.getLogger(__name__)
+log.setLevel(SRC_LOG_LEVELS["RAG"])
+
+
+class PineconeClient(VectorDBBase):
+    def __init__(self):
+        self.collection_prefix = "open-webui"
+
+        # Validate required configuration
+        self._validate_config()
+
+        # Store configuration values
+        self.api_key = PINECONE_API_KEY
+        self.environment = PINECONE_ENVIRONMENT
+        self.index_name = PINECONE_INDEX_NAME
+        self.dimension = PINECONE_DIMENSION
+        self.metric = PINECONE_METRIC
+        self.cloud = PINECONE_CLOUD
+
+        # Initialize Pinecone client
+        self.client = Pinecone(api_key=self.api_key)
+
+        # Create index if it doesn't exist
+        self._initialize_index()
+
+    def _validate_config(self) -> None:
+        """Validate that all required configuration variables are set."""
+        missing_vars = []
+        if not PINECONE_API_KEY:
+            missing_vars.append("PINECONE_API_KEY")
+        if not PINECONE_ENVIRONMENT:
+            missing_vars.append("PINECONE_ENVIRONMENT")
+        if not PINECONE_INDEX_NAME:
+            missing_vars.append("PINECONE_INDEX_NAME")
+        if not PINECONE_DIMENSION:
+            missing_vars.append("PINECONE_DIMENSION")
+        if not PINECONE_CLOUD:
+            missing_vars.append("PINECONE_CLOUD")
+
+        if missing_vars:
+            raise ValueError(
+                f"Required configuration missing: {', '.join(missing_vars)}"
+            )
+
+    def _initialize_index(self) -> None:
+        """Initialize the Pinecone index."""
+        try:
+            # Check if index exists
+            if self.index_name not in self.client.list_indexes().names():
+                log.info(f"Creating Pinecone index '{self.index_name}'...")
+                self.client.create_index(
+                    name=self.index_name,
+                    dimension=self.dimension,
+                    metric=self.metric,
+                    spec=ServerlessSpec(cloud=self.cloud, region=self.environment),
+                )
+                log.info(f"Successfully created Pinecone index '{self.index_name}'")
+            else:
+                log.info(f"Using existing Pinecone index '{self.index_name}'")
+
+            # Connect to the index
+            self.index = self.client.Index(self.index_name)
+
+        except Exception as e:
+            log.error(f"Failed to initialize Pinecone index: {e}")
+            raise RuntimeError(f"Failed to initialize Pinecone index: {e}")
+
+    def _create_points(
+        self, items: List[VectorItem], collection_name_with_prefix: str
+    ) -> List[Dict[str, Any]]:
+        """Convert VectorItem objects to Pinecone point format."""
+        points = []
+        for item in items:
+            # Start with any existing metadata or an empty dict
+            metadata = item.get("metadata", {}).copy() if item.get("metadata") else {}
+
+            # Add text to metadata if available
+            if "text" in item:
+                metadata["text"] = item["text"]
+
+            # Always add collection_name to metadata for filtering
+            metadata["collection_name"] = collection_name_with_prefix
+
+            point = {
+                "id": item["id"],
+                "values": item["vector"],
+                "metadata": metadata,
+            }
+            points.append(point)
+        return points
+
+    def _get_collection_name_with_prefix(self, collection_name: str) -> str:
+        """Get the collection name with prefix."""
+        return f"{self.collection_prefix}_{collection_name}"
+
+    def _normalize_distance(self, score: float) -> float:
+        """Normalize distance score based on the metric used."""
+        if self.metric.lower() == "cosine":
+            # Cosine similarity ranges from -1 to 1, normalize to 0 to 1
+            return (score + 1.0) / 2.0
+        elif self.metric.lower() in ["euclidean", "dotproduct"]:
+            # These are already suitable for ranking (smaller is better for Euclidean)
+            return score
+        else:
+            # For other metrics, use as is
+            return score
+
+    def _result_to_get_result(self, matches: list) -> GetResult:
+        """Convert Pinecone matches to GetResult format."""
+        ids = []
+        documents = []
+        metadatas = []
+
+        for match in matches:
+            metadata = match.get("metadata", {})
+            ids.append(match["id"])
+            documents.append(metadata.get("text", ""))
+            metadatas.append(metadata)
+
+        return GetResult(
+            **{
+                "ids": [ids],
+                "documents": [documents],
+                "metadatas": [metadatas],
+            }
+        )
+
+    def has_collection(self, collection_name: str) -> bool:
+        """Check if a collection exists by searching for at least one item."""
+        collection_name_with_prefix = self._get_collection_name_with_prefix(
+            collection_name
+        )
+
+        try:
+            # Search for at least 1 item with this collection name in metadata
+            response = self.index.query(
+                vector=[0.0] * self.dimension,  # dummy vector
+                top_k=1,
+                filter={"collection_name": collection_name_with_prefix},
+                include_metadata=False,
+            )
+            return len(response.matches) > 0
+        except Exception as e:
+            log.exception(
+                f"Error checking collection '{collection_name_with_prefix}': {e}"
+            )
+            return False
+
+    def delete_collection(self, collection_name: str) -> None:
+        """Delete a collection by removing all vectors with the collection name in metadata."""
+        collection_name_with_prefix = self._get_collection_name_with_prefix(
+            collection_name
+        )
+        try:
+            self.index.delete(filter={"collection_name": collection_name_with_prefix})
+            log.info(
+                f"Collection '{collection_name_with_prefix}' deleted (all vectors removed)."
+            )
+        except Exception as e:
+            log.warning(
+                f"Failed to delete collection '{collection_name_with_prefix}': {e}"
+            )
+            raise
+
+    def insert(self, collection_name: str, items: List[VectorItem]) -> None:
+        """Insert vectors into a collection."""
+        if not items:
+            log.warning("No items to insert")
+            return
+
+        collection_name_with_prefix = self._get_collection_name_with_prefix(
+            collection_name
+        )
+        points = self._create_points(items, collection_name_with_prefix)
+
+        # Insert in batches for better performance and reliability
+        for i in range(0, len(points), BATCH_SIZE):
+            batch = points[i : i + BATCH_SIZE]
+            try:
+                self.index.upsert(vectors=batch)
+                log.debug(
+                    f"Inserted batch of {len(batch)} vectors into '{collection_name_with_prefix}'"
+                )
+            except Exception as e:
+                log.error(
+                    f"Error inserting batch into '{collection_name_with_prefix}': {e}"
+                )
+                raise
+
+        log.info(
+            f"Successfully inserted {len(items)} vectors into '{collection_name_with_prefix}'"
+        )
+
+    def upsert(self, collection_name: str, items: List[VectorItem]) -> None:
+        """Upsert (insert or update) vectors into a collection."""
+        if not items:
+            log.warning("No items to upsert")
+            return
+
+        collection_name_with_prefix = self._get_collection_name_with_prefix(
+            collection_name
+        )
+        points = self._create_points(items, collection_name_with_prefix)
+
+        # Upsert in batches
+        for i in range(0, len(points), BATCH_SIZE):
+            batch = points[i : i + BATCH_SIZE]
+            try:
+                self.index.upsert(vectors=batch)
+                log.debug(
+                    f"Upserted batch of {len(batch)} vectors into '{collection_name_with_prefix}'"
+                )
+            except Exception as e:
+                log.error(
+                    f"Error upserting batch into '{collection_name_with_prefix}': {e}"
+                )
+                raise
+
+        log.info(
+            f"Successfully upserted {len(items)} vectors into '{collection_name_with_prefix}'"
+        )
+
+    def search(
+        self, collection_name: str, vectors: List[List[Union[float, int]]], limit: int
+    ) -> Optional[SearchResult]:
+        """Search for similar vectors in a collection."""
+        if not vectors or not vectors[0]:
+            log.warning("No vectors provided for search")
+            return None
+
+        collection_name_with_prefix = self._get_collection_name_with_prefix(
+            collection_name
+        )
+
+        if limit is None or limit <= 0:
+            limit = NO_LIMIT
+
+        try:
+            # Search using the first vector (assuming this is the intended behavior)
+            query_vector = vectors[0]
+
+            # Perform the search
+            query_response = self.index.query(
+                vector=query_vector,
+                top_k=limit,
+                include_metadata=True,
+                filter={"collection_name": collection_name_with_prefix},
+            )
+
+            if not query_response.matches:
+                # Return empty result if no matches
+                return SearchResult(
+                    ids=[[]],
+                    documents=[[]],
+                    metadatas=[[]],
+                    distances=[[]],
+                )
+
+            # Convert to GetResult format
+            get_result = self._result_to_get_result(query_response.matches)
+
+            # Calculate normalized distances based on metric
+            distances = [
+                [
+                    self._normalize_distance(match.score)
+                    for match in query_response.matches
+                ]
+            ]
+
+            return SearchResult(
+                ids=get_result.ids,
+                documents=get_result.documents,
+                metadatas=get_result.metadatas,
+                distances=distances,
+            )
+        except Exception as e:
+            log.error(f"Error searching in '{collection_name_with_prefix}': {e}")
+            return None
+
+    def query(
+        self, collection_name: str, filter: Dict, limit: Optional[int] = None
+    ) -> Optional[GetResult]:
+        """Query vectors by metadata filter."""
+        collection_name_with_prefix = self._get_collection_name_with_prefix(
+            collection_name
+        )
+
+        if limit is None or limit <= 0:
+            limit = NO_LIMIT
+
+        try:
+            # Create a zero vector for the dimension as Pinecone requires a vector
+            zero_vector = [0.0] * self.dimension
+
+            # Combine user filter with collection_name
+            pinecone_filter = {"collection_name": collection_name_with_prefix}
+            if filter:
+                pinecone_filter.update(filter)
+
+            # Perform metadata-only query
+            query_response = self.index.query(
+                vector=zero_vector,
+                filter=pinecone_filter,
+                top_k=limit,
+                include_metadata=True,
+            )
+
+            return self._result_to_get_result(query_response.matches)
+
+        except Exception as e:
+            log.error(f"Error querying collection '{collection_name}': {e}")
+            return None
+
+    def get(self, collection_name: str) -> Optional[GetResult]:
+        """Get all vectors in a collection."""
+        collection_name_with_prefix = self._get_collection_name_with_prefix(
+            collection_name
+        )
+
+        try:
+            # Use a zero vector for fetching all entries
+            zero_vector = [0.0] * self.dimension
+
+            # Add filter to only get vectors for this collection
+            query_response = self.index.query(
+                vector=zero_vector,
+                top_k=NO_LIMIT,
+                include_metadata=True,
+                filter={"collection_name": collection_name_with_prefix},
+            )
+
+            return self._result_to_get_result(query_response.matches)
+
+        except Exception as e:
+            log.error(f"Error getting collection '{collection_name}': {e}")
+            return None
+
+    def delete(
+        self,
+        collection_name: str,
+        ids: Optional[List[str]] = None,
+        filter: Optional[Dict] = None,
+    ) -> None:
+        """Delete vectors by IDs or filter."""
+        collection_name_with_prefix = self._get_collection_name_with_prefix(
+            collection_name
+        )
+
+        try:
+            if ids:
+                # Delete by IDs (in batches for large deletions)
+                for i in range(0, len(ids), BATCH_SIZE):
+                    batch_ids = ids[i : i + BATCH_SIZE]
+                    # Note: When deleting by ID, we can't filter by collection_name
+                    # This is a limitation of Pinecone - be careful with ID uniqueness
+                    self.index.delete(ids=batch_ids)
+                    log.debug(
+                        f"Deleted batch of {len(batch_ids)} vectors by ID from '{collection_name_with_prefix}'"
+                    )
+                log.info(
+                    f"Successfully deleted {len(ids)} vectors by ID from '{collection_name_with_prefix}'"
+                )
+
+            elif filter:
+                # Combine user filter with collection_name
+                pinecone_filter = {"collection_name": collection_name_with_prefix}
+                if filter:
+                    pinecone_filter.update(filter)
+                # Delete by metadata filter
+                self.index.delete(filter=pinecone_filter)
+                log.info(
+                    f"Successfully deleted vectors by filter from '{collection_name_with_prefix}'"
+                )
+
+            else:
+                log.warning("No ids or filter provided for delete operation")
+
+        except Exception as e:
+            log.error(f"Error deleting from collection '{collection_name}': {e}")
+            raise
+
+    def reset(self) -> None:
+        """Reset the database by deleting all collections."""
+        try:
+            self.index.delete(delete_all=True)
+            log.info("All vectors successfully deleted from the index.")
+        except Exception as e:
+            log.error(f"Failed to reset Pinecone index: {e}")
+            raise

+ 41 - 9
backend/open_webui/retrieval/vector/dbs/qdrant.py

@@ -1,12 +1,24 @@
 from typing import Optional
 from typing import Optional
 import logging
 import logging
+from urllib.parse import urlparse
 
 
 from qdrant_client import QdrantClient as Qclient
 from qdrant_client import QdrantClient as Qclient
 from qdrant_client.http.models import PointStruct
 from qdrant_client.http.models import PointStruct
 from qdrant_client.models import models
 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.retrieval.vector.main import (
+    VectorDBBase,
+    VectorItem,
+    SearchResult,
+    GetResult,
+)
+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
 from open_webui.env import SRC_LOG_LEVELS
 
 
 NO_LIMIT = 999999999
 NO_LIMIT = 999999999
@@ -15,16 +27,34 @@ log = logging.getLogger(__name__)
 log.setLevel(SRC_LOG_LEVELS["RAG"])
 log.setLevel(SRC_LOG_LEVELS["RAG"])
 
 
 
 
-class QdrantClient:
+class QdrantClient(VectorDBBase):
     def __init__(self):
     def __init__(self):
         self.collection_prefix = "open-webui"
         self.collection_prefix = "open-webui"
         self.QDRANT_URI = QDRANT_URI
         self.QDRANT_URI = QDRANT_URI
         self.QDRANT_API_KEY = QDRANT_API_KEY
         self.QDRANT_API_KEY = QDRANT_API_KEY
-        self.client = (
-            Qclient(url=self.QDRANT_URI, api_key=self.QDRANT_API_KEY)
-            if self.QDRANT_URI
-            else None
-        )
+        self.QDRANT_ON_DISK = QDRANT_ON_DISK
+        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:
     def _result_to_get_result(self, points) -> GetResult:
         ids = []
         ids = []
@@ -50,7 +80,9 @@ class QdrantClient:
         self.client.create_collection(
         self.client.create_collection(
             collection_name=collection_name_with_prefix,
             collection_name=collection_name_with_prefix,
             vectors_config=models.VectorParams(
             vectors_config=models.VectorParams(
-                size=dimension, distance=models.Distance.COSINE
+                size=dimension,
+                distance=models.Distance.COSINE,
+                on_disk=self.QDRANT_ON_DISK,
             ),
             ),
         )
         )
 
 

+ 68 - 1
backend/open_webui/retrieval/vector/main.py

@@ -1,5 +1,6 @@
 from pydantic import BaseModel
 from pydantic import BaseModel
-from typing import Optional, List, Any
+from abc import ABC, abstractmethod
+from typing import Any, Dict, List, Optional, Union
 
 
 
 
 class VectorItem(BaseModel):
 class VectorItem(BaseModel):
@@ -17,3 +18,69 @@ class GetResult(BaseModel):
 
 
 class SearchResult(GetResult):
 class SearchResult(GetResult):
     distances: Optional[List[List[float | int]]]
     distances: Optional[List[List[float | int]]]
+
+
+class VectorDBBase(ABC):
+    """
+    Abstract base class for all vector database backends.
+
+    Implementations of this class provide methods for collection management,
+    vector insertion, deletion, similarity search, and metadata filtering.
+
+    Any custom vector database integration must inherit from this class and
+    implement all abstract methods.
+    """
+
+    @abstractmethod
+    def has_collection(self, collection_name: str) -> bool:
+        """Check if the collection exists in the vector DB."""
+        pass
+
+    @abstractmethod
+    def delete_collection(self, collection_name: str) -> None:
+        """Delete a collection from the vector DB."""
+        pass
+
+    @abstractmethod
+    def insert(self, collection_name: str, items: List[VectorItem]) -> None:
+        """Insert a list of vector items into a collection."""
+        pass
+
+    @abstractmethod
+    def upsert(self, collection_name: str, items: List[VectorItem]) -> None:
+        """Insert or update vector items in a collection."""
+        pass
+
+    @abstractmethod
+    def search(
+        self, collection_name: str, vectors: List[List[Union[float, int]]], limit: int
+    ) -> Optional[SearchResult]:
+        """Search for similar vectors in a collection."""
+        pass
+
+    @abstractmethod
+    def query(
+        self, collection_name: str, filter: Dict, limit: Optional[int] = None
+    ) -> Optional[GetResult]:
+        """Query vectors from a collection using metadata filter."""
+        pass
+
+    @abstractmethod
+    def get(self, collection_name: str) -> Optional[GetResult]:
+        """Retrieve all vectors from a collection."""
+        pass
+
+    @abstractmethod
+    def delete(
+        self,
+        collection_name: str,
+        ids: Optional[List[str]] = None,
+        filter: Optional[Dict] = None,
+    ) -> None:
+        """Delete vectors by ID or filter from a collection."""
+        pass
+
+    @abstractmethod
+    def reset(self) -> None:
+        """Reset the vector database by removing all collections or those matching a condition."""
+        pass

+ 47 - 0
backend/open_webui/retrieval/web/external.py

@@ -0,0 +1,47 @@
+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.post(
+            external_url,
+            headers={
+                "User-Agent": "Open WebUI (https://github.com/open-webui/open-webui) RAG Bot",
+                "Authorization": f"Bearer {external_api_key}",
+            },
+            json={
+                "query": query,
+                "count": count,
+            },
+        )
+        response.raise_for_status()
+        results = response.json()
+        if filter_list:
+            results = get_filtered_results(results, filter_list)
+        results = [
+            SearchResult(
+                link=result.get("link"),
+                title=result.get("title"),
+                snippet=result.get("snippet"),
+            )
+            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 []

+ 12 - 5
backend/open_webui/retrieval/web/tavily.py

@@ -2,7 +2,7 @@ import logging
 from typing import Optional
 from typing import Optional
 
 
 import requests
 import requests
-from open_webui.retrieval.web.main import SearchResult
+from open_webui.retrieval.web.main import SearchResult, get_filtered_results
 from open_webui.env import SRC_LOG_LEVELS
 from open_webui.env import SRC_LOG_LEVELS
 
 
 log = logging.getLogger(__name__)
 log = logging.getLogger(__name__)
@@ -21,18 +21,25 @@ def search_tavily(
     Args:
     Args:
         api_key (str): A Tavily Search API key
         api_key (str): A Tavily Search API key
         query (str): The query to search for
         query (str): The query to search for
+        count (int): The maximum number of results to return
 
 
     Returns:
     Returns:
         list[SearchResult]: A list of search results
         list[SearchResult]: A list of search results
     """
     """
     url = "https://api.tavily.com/search"
     url = "https://api.tavily.com/search"
-    data = {"query": query, "api_key": api_key}
-    response = requests.post(url, json=data)
+    headers = {
+        "Content-Type": "application/json",
+        "Authorization": f"Bearer {api_key}",
+    }
+    data = {"query": query, "max_results": count}
+    response = requests.post(url, headers=headers, json=data)
     response.raise_for_status()
     response.raise_for_status()
 
 
     json_response = response.json()
     json_response = response.json()
 
 
-    raw_search_results = json_response.get("results", [])
+    results = json_response.get("results", [])
+    if filter_list:
+        results = get_filtered_results(results, filter_list)
 
 
     return [
     return [
         SearchResult(
         SearchResult(
@@ -40,5 +47,5 @@ def search_tavily(
             title=result.get("title", ""),
             title=result.get("title", ""),
             snippet=result.get("content"),
             snippet=result.get("content"),
         )
         )
-        for result in raw_search_results[:count]
+        for result in results
     ]
     ]

+ 8 - 0
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_community.document_loaders.base import BaseLoader
 from langchain_core.documents import Document
 from langchain_core.documents import Document
 from open_webui.retrieval.loaders.tavily import TavilyLoader
 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.constants import ERROR_MESSAGES
 from open_webui.config import (
 from open_webui.config import (
     ENABLE_RAG_LOCAL_WEB_FETCH,
     ENABLE_RAG_LOCAL_WEB_FETCH,
@@ -35,6 +36,8 @@ from open_webui.config import (
     FIRECRAWL_API_KEY,
     FIRECRAWL_API_KEY,
     TAVILY_API_KEY,
     TAVILY_API_KEY,
     TAVILY_EXTRACT_DEPTH,
     TAVILY_EXTRACT_DEPTH,
+    EXTERNAL_WEB_LOADER_URL,
+    EXTERNAL_WEB_LOADER_API_KEY,
 )
 )
 from open_webui.env import SRC_LOG_LEVELS
 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["api_key"] = TAVILY_API_KEY.value
         web_loader_args["extract_depth"] = TAVILY_EXTRACT_DEPTH.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:
     if WebLoaderClass:
         web_loader = WebLoaderClass(**web_loader_args)
         web_loader = WebLoaderClass(**web_loader_args)
 
 

+ 7 - 0
backend/open_webui/routers/auths.py

@@ -27,6 +27,7 @@ from open_webui.env import (
     WEBUI_AUTH_TRUSTED_NAME_HEADER,
     WEBUI_AUTH_TRUSTED_NAME_HEADER,
     WEBUI_AUTH_COOKIE_SAME_SITE,
     WEBUI_AUTH_COOKIE_SAME_SITE,
     WEBUI_AUTH_COOKIE_SECURE,
     WEBUI_AUTH_COOKIE_SECURE,
+    WEBUI_AUTH_SIGNOUT_REDIRECT_URL,
     SRC_LOG_LEVELS,
     SRC_LOG_LEVELS,
 )
 )
 from fastapi import APIRouter, Depends, HTTPException, Request, status
 from fastapi import APIRouter, Depends, HTTPException, Request, status
@@ -566,6 +567,12 @@ async def signout(request: Request, response: Response):
                     detail="Failed to sign out from the OpenID provider.",
                     detail="Failed to sign out from the OpenID provider.",
                 )
                 )
 
 
+    if WEBUI_AUTH_SIGNOUT_REDIRECT_URL:
+        return RedirectResponse(
+            headers=response.headers,
+            url=WEBUI_AUTH_SIGNOUT_REDIRECT_URL,
+        )
+
     return {"status": True}
     return {"status": True}
 
 
 
 

+ 10 - 1
backend/open_webui/routers/chats.py

@@ -638,8 +638,17 @@ async def archive_chat_by_id(id: str, user=Depends(get_verified_user)):
 
 
 
 
 @router.post("/{id}/share", response_model=Optional[ChatResponse])
 @router.post("/{id}/share", response_model=Optional[ChatResponse])
-async def share_chat_by_id(id: str, user=Depends(get_verified_user)):
+async def share_chat_by_id(request: Request, id: str, user=Depends(get_verified_user)):
+    if not has_permission(
+        user.id, "chat.share", request.app.state.config.USER_PERMISSIONS
+    ):
+        raise HTTPException(
+            status_code=status.HTTP_401_UNAUTHORIZED,
+            detail=ERROR_MESSAGES.ACCESS_PROHIBITED,
+        )
+
     chat = Chats.get_chat_by_id_and_user_id(id, user.id)
     chat = Chats.get_chat_by_id_and_user_id(id, user.id)
+
     if chat:
     if chat:
         if chat.share_id:
         if chat.share_id:
             shared_chat = Chats.update_shared_chat_by_chat_id(chat.id)
             shared_chat = Chats.update_shared_chat_by_chat_id(chat.id)

+ 4 - 2
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:
     if not content:
         for file in files:
         for file in files:
-            del file.data["content"]
+            if "content" in file.data:
+                del file.data["content"]
 
 
     return files
     return files
 
 
@@ -214,7 +215,8 @@ async def search_files(
 
 
     if not content:
     if not content:
         for file in matching_files:
         for file in matching_files:
-            del file.data["content"]
+            if "content" in file.data:
+                del file.data["content"]
 
 
     return matching_files
     return matching_files
 
 

+ 9 - 8
backend/open_webui/routers/knowledge.py

@@ -9,7 +9,7 @@ from open_webui.models.knowledge import (
     KnowledgeResponse,
     KnowledgeResponse,
     KnowledgeUserResponse,
     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.retrieval.vector.connector import VECTOR_DB_CLIENT
 from open_webui.routers.retrieval import (
 from open_webui.routers.retrieval import (
     process_file,
     process_file,
@@ -235,7 +235,7 @@ async def reindex_knowledge_files(request: Request, user=Depends(get_verified_us
 
 
 
 
 class KnowledgeFilesResponse(KnowledgeResponse):
 class KnowledgeFilesResponse(KnowledgeResponse):
-    files: list[FileModel]
+    files: list[FileMetadataResponse]
 
 
 
 
 @router.get("/{id}", response_model=Optional[KnowledgeFilesResponse])
 @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 []
             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(
             return KnowledgeFilesResponse(
                 **knowledge.model_dump(),
                 **knowledge.model_dump(),
@@ -379,7 +379,7 @@ def add_file_to_knowledge_by_id(
             knowledge = Knowledges.update_knowledge_data_by_id(id=id, data=data)
             knowledge = Knowledges.update_knowledge_data_by_id(id=id, data=data)
 
 
             if knowledge:
             if knowledge:
-                files = Files.get_files_by_ids(file_ids)
+                files = Files.get_file_metadatas_by_ids(file_ids)
 
 
                 return KnowledgeFilesResponse(
                 return KnowledgeFilesResponse(
                     **knowledge.model_dump(),
                     **knowledge.model_dump(),
@@ -456,7 +456,7 @@ def update_file_from_knowledge_by_id(
         data = knowledge.data or {}
         data = knowledge.data or {}
         file_ids = data.get("file_ids", [])
         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(
         return KnowledgeFilesResponse(
             **knowledge.model_dump(),
             **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)
             knowledge = Knowledges.update_knowledge_data_by_id(id=id, data=data)
 
 
             if knowledge:
             if knowledge:
-                files = Files.get_files_by_ids(file_ids)
+                files = Files.get_file_metadatas_by_ids(file_ids)
 
 
                 return KnowledgeFilesResponse(
                 return KnowledgeFilesResponse(
                     **knowledge.model_dump(),
                     **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]
         error_details = [f"{err.file_id}: {err.error}" for err in result.errors]
         return KnowledgeFilesResponse(
         return KnowledgeFilesResponse(
             **knowledge.model_dump(),
             **knowledge.model_dump(),
-            files=Files.get_files_by_ids(existing_file_ids),
+            files=Files.get_file_metadatas_by_ids(existing_file_ids),
             warnings={
             warnings={
                 "message": "Some files failed to process",
                 "message": "Some files failed to process",
                 "errors": error_details,
                 "errors": error_details,
@@ -742,5 +742,6 @@ def add_files_to_knowledge_batch(
         )
         )
 
 
     return KnowledgeFilesResponse(
     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),
     )
     )

+ 7 - 1
backend/open_webui/routers/ollama.py

@@ -54,6 +54,7 @@ from open_webui.config import (
 from open_webui.env import (
 from open_webui.env import (
     ENV,
     ENV,
     SRC_LOG_LEVELS,
     SRC_LOG_LEVELS,
+    AIOHTTP_CLIENT_SESSION_SSL,
     AIOHTTP_CLIENT_TIMEOUT,
     AIOHTTP_CLIENT_TIMEOUT,
     AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST,
     AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST,
     BYPASS_MODEL_ACCESS_CONTROL,
     BYPASS_MODEL_ACCESS_CONTROL,
@@ -91,6 +92,7 @@ async def send_get_request(url, key=None, user: UserModel = None):
                         else {}
                         else {}
                     ),
                     ),
                 },
                 },
+                ssl=AIOHTTP_CLIENT_SESSION_SSL,
             ) as response:
             ) as response:
                 return await response.json()
                 return await response.json()
     except Exception as e:
     except Exception as e:
@@ -141,6 +143,7 @@ async def send_post_request(
                     else {}
                     else {}
                 ),
                 ),
             },
             },
+            ssl=AIOHTTP_CLIENT_SESSION_SSL,
         )
         )
         r.raise_for_status()
         r.raise_for_status()
 
 
@@ -234,6 +237,7 @@ async def verify_connection(
                         else {}
                         else {}
                     ),
                     ),
                 },
                 },
+                ssl=AIOHTTP_CLIENT_SESSION_SSL,
             ) as r:
             ) as r:
                 if r.status != 200:
                 if r.status != 200:
                     detail = f"HTTP Error: {r.status}"
                     detail = f"HTTP Error: {r.status}"
@@ -1482,7 +1486,9 @@ async def download_file_stream(
     timeout = aiohttp.ClientTimeout(total=600)  # Set the timeout
     timeout = aiohttp.ClientTimeout(total=600)  # Set the timeout
 
 
     async with aiohttp.ClientSession(timeout=timeout, trust_env=True) as session:
     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
             total_size = int(response.headers.get("content-length", 0)) + current_size
 
 
             with open(file_path, "ab+") as file:
             with open(file_path, "ab+") as file:

+ 15 - 10
backend/open_webui/routers/openai.py

@@ -21,6 +21,7 @@ from open_webui.config import (
     CACHE_DIR,
     CACHE_DIR,
 )
 )
 from open_webui.env import (
 from open_webui.env import (
+    AIOHTTP_CLIENT_SESSION_SSL,
     AIOHTTP_CLIENT_TIMEOUT,
     AIOHTTP_CLIENT_TIMEOUT,
     AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST,
     AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST,
     ENABLE_FORWARD_USER_INFO_HEADERS,
     ENABLE_FORWARD_USER_INFO_HEADERS,
@@ -74,6 +75,7 @@ async def send_get_request(url, key=None, user: UserModel = None):
                         else {}
                         else {}
                     ),
                     ),
                 },
                 },
+                ssl=AIOHTTP_CLIENT_SESSION_SSL,
             ) as response:
             ) as response:
                 return await response.json()
                 return await response.json()
     except Exception as e:
     except Exception as e:
@@ -92,20 +94,19 @@ async def cleanup_response(
         await session.close()
         await session.close()
 
 
 
 
-def openai_o1_o3_handler(payload):
+def openai_o_series_handler(payload):
     """
     """
-    Handle o1, o3 specific parameters
+    Handle "o" series specific parameters
     """
     """
     if "max_tokens" in payload:
     if "max_tokens" in payload:
-        # Remove "max_tokens" from the payload
+        # Convert "max_tokens" to "max_completion_tokens" for all o-series models
         payload["max_completion_tokens"] = payload["max_tokens"]
         payload["max_completion_tokens"] = payload["max_tokens"]
         del payload["max_tokens"]
         del payload["max_tokens"]
 
 
-    # Fix: o1 and o3 do not support the "system" role directly.
-    # For older models like "o1-mini" or "o1-preview", use role "user".
-    # For newer o1/o3 models, replace "system" with "developer".
+    # Handle system role conversion based on model type
     if payload["messages"][0]["role"] == "system":
     if payload["messages"][0]["role"] == "system":
         model_lower = payload["model"].lower()
         model_lower = payload["model"].lower()
+        # Legacy models use "user" role instead of "system"
         if model_lower.startswith("o1-mini") or model_lower.startswith("o1-preview"):
         if model_lower.startswith("o1-mini") or model_lower.startswith("o1-preview"):
             payload["messages"][0]["role"] = "user"
             payload["messages"][0]["role"] = "user"
         else:
         else:
@@ -481,6 +482,7 @@ async def get_models(
                             else {}
                             else {}
                         ),
                         ),
                     },
                     },
+                    ssl=AIOHTTP_CLIENT_SESSION_SSL,
                 ) as r:
                 ) as r:
                     if r.status != 200:
                     if r.status != 200:
                         # Extract response error details if available
                         # Extract response error details if available
@@ -561,6 +563,7 @@ async def verify_connection(
                         else {}
                         else {}
                     ),
                     ),
                 },
                 },
+                ssl=AIOHTTP_CLIENT_SESSION_SSL,
             ) as r:
             ) as r:
                 if r.status != 200:
                 if r.status != 200:
                     # Extract response error details if available
                     # Extract response error details if available
@@ -666,10 +669,10 @@ async def generate_chat_completion(
     url = request.app.state.config.OPENAI_API_BASE_URLS[idx]
     url = request.app.state.config.OPENAI_API_BASE_URLS[idx]
     key = request.app.state.config.OPENAI_API_KEYS[idx]
     key = request.app.state.config.OPENAI_API_KEYS[idx]
 
 
-    # Fix: o1,o3 does not support the "max_tokens" parameter, Modify "max_tokens" to "max_completion_tokens"
-    is_o1_o3 = payload["model"].lower().startswith(("o1", "o3-"))
-    if is_o1_o3:
-        payload = openai_o1_o3_handler(payload)
+    # Check if model is from "o" series
+    is_o_series = payload["model"].lower().startswith(("o1", "o3", "o4"))
+    if is_o_series:
+        payload = openai_o_series_handler(payload)
     elif "api.openai.com" not in url:
     elif "api.openai.com" not in url:
         # Remove "max_completion_tokens" from the payload for backward compatibility
         # Remove "max_completion_tokens" from the payload for backward compatibility
         if "max_completion_tokens" in payload:
         if "max_completion_tokens" in payload:
@@ -723,6 +726,7 @@ async def generate_chat_completion(
                     else {}
                     else {}
                 ),
                 ),
             },
             },
+            ssl=AIOHTTP_CLIENT_SESSION_SSL,
         )
         )
 
 
         # Check if response is SSE
         # Check if response is SSE
@@ -802,6 +806,7 @@ async def proxy(path: str, request: Request, user=Depends(get_verified_user)):
                     else {}
                     else {}
                 ),
                 ),
             },
             },
+            ssl=AIOHTTP_CLIENT_SESSION_SSL,
         )
         )
         r.raise_for_status()
         r.raise_for_status()
 
 

+ 54 - 15
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.exa import search_exa
 from open_webui.retrieval.web.perplexity import search_perplexity
 from open_webui.retrieval.web.perplexity import search_perplexity
 from open_webui.retrieval.web.sougou import search_sougou
 from open_webui.retrieval.web.sougou import search_sougou
+from open_webui.retrieval.web.external import search_external
 
 
 from open_webui.retrieval.utils import (
 from open_webui.retrieval.utils import (
     get_embedding_function,
     get_embedding_function,
@@ -418,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_KEY": request.app.state.config.FIRECRAWL_API_KEY,
             "FIRECRAWL_API_BASE_URL": request.app.state.config.FIRECRAWL_API_BASE_URL,
             "FIRECRAWL_API_BASE_URL": request.app.state.config.FIRECRAWL_API_BASE_URL,
             "TAVILY_EXTRACT_DEPTH": request.app.state.config.TAVILY_EXTRACT_DEPTH,
             "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_LANGUAGE": request.app.state.config.YOUTUBE_LOADER_LANGUAGE,
             "YOUTUBE_LOADER_PROXY_URL": request.app.state.config.YOUTUBE_LOADER_PROXY_URL,
             "YOUTUBE_LOADER_PROXY_URL": request.app.state.config.YOUTUBE_LOADER_PROXY_URL,
             "YOUTUBE_LOADER_TRANSLATION": request.app.state.YOUTUBE_LOADER_TRANSLATION,
             "YOUTUBE_LOADER_TRANSLATION": request.app.state.YOUTUBE_LOADER_TRANSLATION,
@@ -463,6 +468,10 @@ class WebConfig(BaseModel):
     FIRECRAWL_API_KEY: Optional[str] = None
     FIRECRAWL_API_KEY: Optional[str] = None
     FIRECRAWL_API_BASE_URL: Optional[str] = None
     FIRECRAWL_API_BASE_URL: Optional[str] = None
     TAVILY_EXTRACT_DEPTH: 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_LANGUAGE: Optional[List[str]] = None
     YOUTUBE_LOADER_PROXY_URL: Optional[str] = None
     YOUTUBE_LOADER_PROXY_URL: Optional[str] = None
     YOUTUBE_LOADER_TRANSLATION: Optional[str] = None
     YOUTUBE_LOADER_TRANSLATION: Optional[str] = None
@@ -697,6 +706,18 @@ async def update_rag_config(
         request.app.state.config.FIRECRAWL_API_BASE_URL = (
         request.app.state.config.FIRECRAWL_API_BASE_URL = (
             form_data.web.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 = (
         request.app.state.config.TAVILY_EXTRACT_DEPTH = (
             form_data.web.TAVILY_EXTRACT_DEPTH
             form_data.web.TAVILY_EXTRACT_DEPTH
         )
         )
@@ -778,6 +799,10 @@ async def update_rag_config(
             "FIRECRAWL_API_KEY": request.app.state.config.FIRECRAWL_API_KEY,
             "FIRECRAWL_API_KEY": request.app.state.config.FIRECRAWL_API_KEY,
             "FIRECRAWL_API_BASE_URL": request.app.state.config.FIRECRAWL_API_BASE_URL,
             "FIRECRAWL_API_BASE_URL": request.app.state.config.FIRECRAWL_API_BASE_URL,
             "TAVILY_EXTRACT_DEPTH": request.app.state.config.TAVILY_EXTRACT_DEPTH,
             "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_LANGUAGE": request.app.state.config.YOUTUBE_LOADER_LANGUAGE,
             "YOUTUBE_LOADER_PROXY_URL": request.app.state.config.YOUTUBE_LOADER_PROXY_URL,
             "YOUTUBE_LOADER_PROXY_URL": request.app.state.config.YOUTUBE_LOADER_PROXY_URL,
             "YOUTUBE_LOADER_TRANSLATION": request.app.state.YOUTUBE_LOADER_TRANSLATION,
             "YOUTUBE_LOADER_TRANSLATION": request.app.state.YOUTUBE_LOADER_TRANSLATION,
@@ -1465,6 +1490,14 @@ def search_web(request: Request, engine: str, query: str) -> list[SearchResult]:
             raise Exception(
             raise Exception(
                 "No SOUGOU_API_SID or SOUGOU_API_SK found in environment variables"
                 "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:
     else:
         raise Exception("No search engine API key found in environment variables")
         raise Exception("No search engine API key found in environment variables")
 
 
@@ -1477,8 +1510,11 @@ async def process_web_search(
         logging.info(
         logging.info(
             f"trying to web search with {request.app.state.config.WEB_SEARCH_ENGINE, form_data.query}"
             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:
     except Exception as e:
         log.exception(e)
         log.exception(e)
@@ -1521,19 +1557,22 @@ async def process_web_search(
             collection_names = []
             collection_names = []
             for doc_idx, doc in enumerate(docs):
             for doc_idx, doc in enumerate(docs):
                 if doc and doc.page_content:
                 if doc and doc.page_content:
-                    collection_name = f"web-search-{calculate_sha256_string(form_data.query + '-' + urls[doc_idx])}"[
-                        :63
-                    ]
-
-                    collection_names.append(collection_name)
-                    await run_in_threadpool(
-                        save_docs_to_vector_db,
-                        request,
-                        [doc],
-                        collection_name,
-                        overwrite=True,
-                        user=user,
-                    )
+                    try:
+                        collection_name = f"web-search-{calculate_sha256_string(form_data.query + '-' + urls[doc_idx])}"[
+                            :63
+                        ]
+
+                        collection_names.append(collection_name)
+                        await run_in_threadpool(
+                            save_docs_to_vector_db,
+                            request,
+                            [doc],
+                            collection_name,
+                            overwrite=True,
+                            user=user,
+                        )
+                    except Exception as e:
+                        log.debug(f"error saving doc {doc_idx}: {e}")
 
 
             return {
             return {
                 "status": True,
                 "status": True,

+ 33 - 0
backend/open_webui/routers/users.py

@@ -88,6 +88,8 @@ class ChatPermissions(BaseModel):
     file_upload: bool = True
     file_upload: bool = True
     delete: bool = True
     delete: bool = True
     edit: bool = True
     edit: bool = True
+    share: bool = True
+    export: bool = True
     stt: bool = True
     stt: bool = True
     tts: bool = True
     tts: bool = True
     call: bool = True
     call: bool = True
@@ -288,6 +290,21 @@ async def update_user_by_id(
     form_data: UserUpdateForm,
     form_data: UserUpdateForm,
     session_user=Depends(get_admin_user),
     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)
     user = Users.get_user_by_id(user_id)
 
 
     if user:
     if user:
@@ -335,6 +352,21 @@ async def update_user_by_id(
 
 
 @router.delete("/{user_id}", response_model=bool)
 @router.delete("/{user_id}", response_model=bool)
 async def delete_user_by_id(user_id: str, user=Depends(get_admin_user)):
 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:
     if user.id != user_id:
         result = Auths.delete_auth_by_id(user_id)
         result = Auths.delete_auth_by_id(user_id)
 
 
@@ -346,6 +378,7 @@ async def delete_user_by_id(user_id: str, user=Depends(get_admin_user)):
             detail=ERROR_MESSAGES.DELETE_USER_ERROR,
             detail=ERROR_MESSAGES.DELETE_USER_ERROR,
         )
         )
 
 
+    # Prevent self-deletion
     raise HTTPException(
     raise HTTPException(
         status_code=status.HTTP_403_FORBIDDEN,
         status_code=status.HTTP_403_FORBIDDEN,
         detail=ERROR_MESSAGES.ACTION_PROHIBITED,
         detail=ERROR_MESSAGES.ACTION_PROHIBITED,

+ 44 - 10
backend/open_webui/utils/audit.py

@@ -37,7 +37,7 @@ if TYPE_CHECKING:
 class AuditLogEntry:
 class AuditLogEntry:
     # `Metadata` audit level properties
     # `Metadata` audit level properties
     id: str
     id: str
-    user: dict[str, Any]
+    user: Optional[dict[str, Any]]
     audit_level: str
     audit_level: str
     verb: str
     verb: str
     request_uri: str
     request_uri: str
@@ -190,21 +190,40 @@ class AuditLoggingMiddleware:
         finally:
         finally:
             await self._log_audit_entry(request, context)
             await self._log_audit_entry(request, context)
 
 
-    async def _get_authenticated_user(self, request: Request) -> UserModel:
-
+    async def _get_authenticated_user(self, request: Request) -> Optional[UserModel]:
         auth_header = request.headers.get("Authorization")
         auth_header = request.headers.get("Authorization")
-        assert auth_header
-        user = get_current_user(request, None, get_http_authorization_cred(auth_header))
 
 
-        return user
+        try:
+            user = get_current_user(
+                request, None, get_http_authorization_cred(auth_header)
+            )
+            return user
+        except Exception as e:
+            logger.debug(f"Failed to get authenticated user: {str(e)}")
+
+        return None
 
 
     def _should_skip_auditing(self, request: Request) -> bool:
     def _should_skip_auditing(self, request: Request) -> bool:
         if (
         if (
             request.method not in {"POST", "PUT", "PATCH", "DELETE"}
             request.method not in {"POST", "PUT", "PATCH", "DELETE"}
             or AUDIT_LOG_LEVEL == "NONE"
             or AUDIT_LOG_LEVEL == "NONE"
-            or not request.headers.get("authorization")
         ):
         ):
             return True
             return True
+
+        ALWAYS_LOG_ENDPOINTS = {
+            "/api/v1/auths/signin",
+            "/api/v1/auths/signout",
+            "/api/v1/auths/signup",
+        }
+        path = request.url.path.lower()
+        for endpoint in ALWAYS_LOG_ENDPOINTS:
+            if path.startswith(endpoint):
+                return False  # Do NOT skip logging for auth endpoints
+
+        # Skip logging if the request is not authenticated
+        if not request.headers.get("authorization"):
+            return True
+
         # match either /api/<resource>/...(for the endpoint /api/chat case) or /api/v1/<resource>/...
         # match either /api/<resource>/...(for the endpoint /api/chat case) or /api/v1/<resource>/...
         pattern = re.compile(
         pattern = re.compile(
             r"^/api(?:/v1)?/(" + "|".join(self.excluded_paths) + r")\b"
             r"^/api(?:/v1)?/(" + "|".join(self.excluded_paths) + r")\b"
@@ -231,17 +250,32 @@ class AuditLoggingMiddleware:
         try:
         try:
             user = await self._get_authenticated_user(request)
             user = await self._get_authenticated_user(request)
 
 
+            user = (
+                user.model_dump(include={"id", "name", "email", "role"}) if user else {}
+            )
+
+            request_body = context.request_body.decode("utf-8", errors="replace")
+            response_body = context.response_body.decode("utf-8", errors="replace")
+
+            # Redact sensitive information
+            if "password" in request_body:
+                request_body = re.sub(
+                    r'"password":\s*"(.*?)"',
+                    '"password": "********"',
+                    request_body,
+                )
+
             entry = AuditLogEntry(
             entry = AuditLogEntry(
                 id=str(uuid.uuid4()),
                 id=str(uuid.uuid4()),
-                user=user.model_dump(include={"id", "name", "email", "role"}),
+                user=user,
                 audit_level=self.audit_level.value,
                 audit_level=self.audit_level.value,
                 verb=request.method,
                 verb=request.method,
                 request_uri=str(request.url),
                 request_uri=str(request.url),
                 response_status_code=context.metadata.get("response_status_code", None),
                 response_status_code=context.metadata.get("response_status_code", None),
                 source_ip=request.client.host if request.client else None,
                 source_ip=request.client.host if request.client else None,
                 user_agent=request.headers.get("user-agent"),
                 user_agent=request.headers.get("user-agent"),
-                request_object=context.request_body.decode("utf-8", errors="replace"),
-                response_object=context.response_body.decode("utf-8", errors="replace"),
+                request_object=request_body,
+                response_object=response_body,
             )
             )
 
 
             self.audit_logger.write(entry)
             self.audit_logger.write(entry)

+ 19 - 6
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 context is not empty, insert it into the messages
     if len(sources) > 0:
     if len(sources) > 0:
         context_string = ""
         context_string = ""
-        citated_file_idx = {}
-        for _, source in enumerate(sources, 1):
+        citation_idx = {}
+        for source in sources:
             if "document" in source:
             if "document" in source:
                 for doc_context, doc_meta in zip(
                 for doc_context, doc_meta in zip(
                     source["document"], source["metadata"]
                     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'<source id="{citated_file_idx[file_id]}">{doc_context}</source>\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'<source id="{citation_idx[citation_id]}">{doc_context}</source>\n'
 
 
         context_string = context_string.strip()
         context_string = context_string.strip()
         prompt = get_last_user_message(form_data["messages"])
         prompt = get_last_user_message(form_data["messages"])
@@ -1667,6 +1671,15 @@ async def process_chat_response(
 
 
                                                 if current_response_tool_call is None:
                                                 if current_response_tool_call is None:
                                                     # Add the new tool call
                                                     # Add the new tool call
+                                                    delta_tool_call.setdefault(
+                                                        "function", {}
+                                                    )
+                                                    delta_tool_call[
+                                                        "function"
+                                                    ].setdefault("name", "")
+                                                    delta_tool_call[
+                                                        "function"
+                                                    ].setdefault("arguments", "")
                                                     response_tool_calls.append(
                                                     response_tool_calls.append(
                                                         delta_tool_call
                                                         delta_tool_call
                                                     )
                                                     )

+ 48 - 1
backend/open_webui/utils/oauth.py

@@ -15,7 +15,7 @@ from starlette.responses import RedirectResponse
 
 
 from open_webui.models.auths import Auths
 from open_webui.models.auths import Auths
 from open_webui.models.users import Users
 from open_webui.models.users import Users
-from open_webui.models.groups import Groups, GroupModel, GroupUpdateForm
+from open_webui.models.groups import Groups, GroupModel, GroupUpdateForm, GroupForm
 from open_webui.config import (
 from open_webui.config import (
     DEFAULT_USER_ROLE,
     DEFAULT_USER_ROLE,
     ENABLE_OAUTH_SIGNUP,
     ENABLE_OAUTH_SIGNUP,
@@ -23,6 +23,7 @@ from open_webui.config import (
     OAUTH_PROVIDERS,
     OAUTH_PROVIDERS,
     ENABLE_OAUTH_ROLE_MANAGEMENT,
     ENABLE_OAUTH_ROLE_MANAGEMENT,
     ENABLE_OAUTH_GROUP_MANAGEMENT,
     ENABLE_OAUTH_GROUP_MANAGEMENT,
+    ENABLE_OAUTH_GROUP_CREATION,
     OAUTH_ROLES_CLAIM,
     OAUTH_ROLES_CLAIM,
     OAUTH_GROUPS_CLAIM,
     OAUTH_GROUPS_CLAIM,
     OAUTH_EMAIL_CLAIM,
     OAUTH_EMAIL_CLAIM,
@@ -57,6 +58,7 @@ auth_manager_config.ENABLE_OAUTH_SIGNUP = ENABLE_OAUTH_SIGNUP
 auth_manager_config.OAUTH_MERGE_ACCOUNTS_BY_EMAIL = OAUTH_MERGE_ACCOUNTS_BY_EMAIL
 auth_manager_config.OAUTH_MERGE_ACCOUNTS_BY_EMAIL = OAUTH_MERGE_ACCOUNTS_BY_EMAIL
 auth_manager_config.ENABLE_OAUTH_ROLE_MANAGEMENT = ENABLE_OAUTH_ROLE_MANAGEMENT
 auth_manager_config.ENABLE_OAUTH_ROLE_MANAGEMENT = ENABLE_OAUTH_ROLE_MANAGEMENT
 auth_manager_config.ENABLE_OAUTH_GROUP_MANAGEMENT = ENABLE_OAUTH_GROUP_MANAGEMENT
 auth_manager_config.ENABLE_OAUTH_GROUP_MANAGEMENT = ENABLE_OAUTH_GROUP_MANAGEMENT
+auth_manager_config.ENABLE_OAUTH_GROUP_CREATION = ENABLE_OAUTH_GROUP_CREATION
 auth_manager_config.OAUTH_ROLES_CLAIM = OAUTH_ROLES_CLAIM
 auth_manager_config.OAUTH_ROLES_CLAIM = OAUTH_ROLES_CLAIM
 auth_manager_config.OAUTH_GROUPS_CLAIM = OAUTH_GROUPS_CLAIM
 auth_manager_config.OAUTH_GROUPS_CLAIM = OAUTH_GROUPS_CLAIM
 auth_manager_config.OAUTH_EMAIL_CLAIM = OAUTH_EMAIL_CLAIM
 auth_manager_config.OAUTH_EMAIL_CLAIM = OAUTH_EMAIL_CLAIM
@@ -152,6 +154,51 @@ class OAuthManager:
         user_current_groups: list[GroupModel] = Groups.get_groups_by_member_id(user.id)
         user_current_groups: list[GroupModel] = Groups.get_groups_by_member_id(user.id)
         all_available_groups: list[GroupModel] = Groups.get_groups()
         all_available_groups: list[GroupModel] = Groups.get_groups()
 
 
+        # Create groups if they don't exist and creation is enabled
+        if auth_manager_config.ENABLE_OAUTH_GROUP_CREATION:
+            log.debug("Checking for missing groups to create...")
+            all_group_names = {g.name for g in all_available_groups}
+            groups_created = False
+            # Determine creator ID: Prefer admin, fallback to current user if no admin exists
+            admin_user = Users.get_admin_user()
+            creator_id = admin_user.id if admin_user else user.id
+            log.debug(f"Using creator ID {creator_id} for potential group creation.")
+
+            for group_name in user_oauth_groups:
+                if group_name not in all_group_names:
+                    log.info(
+                        f"Group '{group_name}' not found via OAuth claim. Creating group..."
+                    )
+                    try:
+                        new_group_form = GroupForm(
+                            name=group_name,
+                            description=f"Group '{group_name}' created automatically via OAuth.",
+                            permissions=default_permissions,  # Use default permissions from function args
+                            user_ids=[],  # Start with no users, user will be added later by subsequent logic
+                        )
+                        # Use determined creator ID (admin or fallback to current user)
+                        created_group = Groups.insert_new_group(
+                            creator_id, new_group_form
+                        )
+                        if created_group:
+                            log.info(
+                                f"Successfully created group '{group_name}' with ID {created_group.id} using creator ID {creator_id}"
+                            )
+                            groups_created = True
+                            # Add to local set to prevent duplicate creation attempts in this run
+                            all_group_names.add(group_name)
+                        else:
+                            log.error(
+                                f"Failed to create group '{group_name}' via OAuth."
+                            )
+                    except Exception as e:
+                        log.error(f"Error creating group '{group_name}' via OAuth: {e}")
+
+            # Refresh the list of all available groups if any were created
+            if groups_created:
+                all_available_groups = Groups.get_groups()
+                log.debug("Refreshed list of all available groups after creation.")
+
         log.debug(f"Oauth Groups claim: {oauth_claim}")
         log.debug(f"Oauth Groups claim: {oauth_claim}")
         log.debug(f"User oauth groups: {user_oauth_groups}")
         log.debug(f"User oauth groups: {user_oauth_groups}")
         log.debug(f"User's current groups: {[g.name for g in user_current_groups]}")
         log.debug(f"User's current groups: {[g.name for g in user_current_groups]}")

+ 70 - 45
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.tools import Tools
 from open_webui.models.users import UserModel
 from open_webui.models.users import UserModel
 from open_webui.utils.plugin import load_tool_module_by_id
 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
 import copy
 
 
@@ -371,51 +374,64 @@ def convert_openapi_to_tool_payload(openapi_spec):
 
 
     for path, methods in openapi_spec.get("paths", {}).items():
     for path, methods in openapi_spec.get("paths", {}).items():
         for method, operation in methods.items():
         for method, operation in methods.items():
-            tool = {
-                "type": "function",
-                "name": operation.get("operationId"),
-                "description": operation.get(
-                    "description", operation.get("summary", "No description available.")
-                ),
-                "parameters": {"type": "object", "properties": {}, "required": []},
-            }
-
-            # Extract path and query parameters
-            for param in operation.get("parameters", []):
-                param_name = param["name"]
-                param_schema = param.get("schema", {})
-                tool["parameters"]["properties"][param_name] = {
-                    "type": param_schema.get("type"),
-                    "description": param_schema.get("description", ""),
+            if operation.get("operationId"):
+                tool = {
+                    "type": "function",
+                    "name": operation.get("operationId"),
+                    "description": operation.get(
+                        "description",
+                        operation.get("summary", "No description available."),
+                    ),
+                    "parameters": {"type": "object", "properties": {}, "required": []},
                 }
                 }
-                if param.get("required"):
-                    tool["parameters"]["required"].append(param_name)
-
-            # Extract and resolve requestBody if available
-            request_body = operation.get("requestBody")
-            if request_body:
-                content = request_body.get("content", {})
-                json_schema = content.get("application/json", {}).get("schema")
-                if json_schema:
-                    resolved_schema = resolve_schema(
-                        json_schema, openapi_spec.get("components", {})
-                    )
 
 
-                    if resolved_schema.get("properties"):
-                        tool["parameters"]["properties"].update(
-                            resolved_schema["properties"]
+                # Extract path and query parameters
+                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": description,
+                    }
+                    if param.get("required"):
+                        tool["parameters"]["required"].append(param_name)
+
+                # Extract and resolve requestBody if available
+                request_body = operation.get("requestBody")
+                if request_body:
+                    content = request_body.get("content", {})
+                    json_schema = content.get("application/json", {}).get("schema")
+                    if json_schema:
+                        resolved_schema = resolve_schema(
+                            json_schema, openapi_spec.get("components", {})
                         )
                         )
-                        if "required" in resolved_schema:
-                            tool["parameters"]["required"] = list(
-                                set(
-                                    tool["parameters"]["required"]
-                                    + resolved_schema["required"]
+
+                        if resolved_schema.get("properties"):
+                            tool["parameters"]["properties"].update(
+                                resolved_schema["properties"]
+                            )
+                            if "required" in resolved_schema:
+                                tool["parameters"]["required"] = list(
+                                    set(
+                                        tool["parameters"]["required"]
+                                        + resolved_schema["required"]
+                                    )
                                 )
                                 )
+                        elif resolved_schema.get("type") == "array":
+                            tool["parameters"] = (
+                                resolved_schema  # special case for array
                             )
                             )
-                    elif resolved_schema.get("type") == "array":
-                        tool["parameters"] = resolved_schema  # special case for array
 
 
-            tool_payload.append(tool)
+                tool_payload.append(tool)
 
 
     return tool_payload
     return tool_payload
 
 
@@ -431,8 +447,10 @@ async def get_tool_server_data(token: str, url: str) -> Dict[str, Any]:
     error = None
     error = None
     try:
     try:
         timeout = aiohttp.ClientTimeout(total=AIOHTTP_CLIENT_TIMEOUT_TOOL_SERVER_DATA)
         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:
                 if response.status != 200:
                     error_body = await response.json()
                     error_body = await response.json()
                     raise Exception(error_body)
                     raise Exception(error_body)
@@ -573,19 +591,26 @@ async def execute_tool_server(
         if token:
         if token:
             headers["Authorization"] = f"Bearer {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())
             request_method = getattr(session, http_method.lower())
 
 
             if http_method in ["post", "put", "patch"]:
             if http_method in ["post", "put", "patch"]:
                 async with request_method(
                 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:
                 ) as response:
                     if response.status >= 400:
                     if response.status >= 400:
                         text = await response.text()
                         text = await response.text()
                         raise Exception(f"HTTP error {response.status}: {text}")
                         raise Exception(f"HTTP error {response.status}: {text}")
                     return await response.json()
                     return await response.json()
             else:
             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:
                     if response.status >= 400:
                         text = await response.text()
                         text = await response.text()
                         raise Exception(f"HTTP error {response.status}: {text}")
                         raise Exception(f"HTTP error {response.status}: {text}")

+ 1 - 1
backend/requirements.txt

@@ -50,7 +50,7 @@ qdrant-client~=1.12.0
 opensearch-py==2.8.0
 opensearch-py==2.8.0
 playwright==1.49.1 # Caution: version must match docker-compose.playwright.yaml
 playwright==1.49.1 # Caution: version must match docker-compose.playwright.yaml
 elasticsearch==8.17.1
 elasticsearch==8.17.1
-
+pinecone==6.0.2
 
 
 transformers
 transformers
 sentence-transformers==3.3.1
 sentence-transformers==3.3.1

+ 2 - 2
package-lock.json

@@ -1,12 +1,12 @@
 {
 {
 	"name": "open-webui",
 	"name": "open-webui",
-	"version": "0.6.5",
+	"version": "0.6.6",
 	"lockfileVersion": 3,
 	"lockfileVersion": 3,
 	"requires": true,
 	"requires": true,
 	"packages": {
 	"packages": {
 		"": {
 		"": {
 			"name": "open-webui",
 			"name": "open-webui",
-			"version": "0.6.5",
+			"version": "0.6.6",
 			"dependencies": {
 			"dependencies": {
 				"@azure/msal-browser": "^4.5.0",
 				"@azure/msal-browser": "^4.5.0",
 				"@codemirror/lang-javascript": "^6.2.2",
 				"@codemirror/lang-javascript": "^6.2.2",

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
 {
 	"name": "open-webui",
 	"name": "open-webui",
-	"version": "0.6.5",
+	"version": "0.6.6",
 	"private": true,
 	"private": true,
 	"scripts": {
 	"scripts": {
 		"dev": "npm run pyodide:fetch && vite dev --host",
 		"dev": "npm run pyodide:fetch && vite dev --host",

+ 1 - 0
pyproject.toml

@@ -58,6 +58,7 @@ dependencies = [
     "opensearch-py==2.8.0",
     "opensearch-py==2.8.0",
     "playwright==1.49.1",
     "playwright==1.49.1",
     "elasticsearch==8.17.1",
     "elasticsearch==8.17.1",
+    "pinecone==6.0.2",
 
 
     "transformers",
     "transformers",
     "sentence-transformers==3.3.1",
     "sentence-transformers==3.3.1",

+ 65 - 2
src/lib/components/admin/Settings/WebSearch.svelte

@@ -30,9 +30,10 @@
 		'bing',
 		'bing',
 		'exa',
 		'exa',
 		'perplexity',
 		'perplexity',
-		'sougou'
+		'sougou',
+		'external'
 	];
 	];
-	let webLoaderEngines = ['playwright', 'firecrawl', 'tavily'];
+	let webLoaderEngines = ['playwright', 'firecrawl', 'tavily', 'external'];
 
 
 	let webConfig = null;
 	let webConfig = null;
 
 
@@ -431,6 +432,37 @@
 									/>
 									/>
 								</div>
 								</div>
 							</div>
 							</div>
+						{:else if webConfig.WEB_SEARCH_ENGINE === 'external'}
+							<div class="mb-2.5 flex w-full flex-col">
+								<div>
+									<div class=" self-center text-xs font-medium mb-1">
+										{$i18n.t('External Web Search URL')}
+									</div>
+
+									<div class="flex w-full">
+										<div class="flex-1">
+											<input
+												class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
+												type="text"
+												placeholder={$i18n.t('Enter External Web Search URL')}
+												bind:value={webConfig.EXTERNAL_WEB_SEARCH_URL}
+												autocomplete="off"
+											/>
+										</div>
+									</div>
+								</div>
+
+								<div class="mt-2">
+									<div class=" self-center text-xs font-medium mb-1">
+										{$i18n.t('External Web Search API Key')}
+									</div>
+
+									<SensitiveInput
+										placeholder={$i18n.t('Enter External Web Search API Key')}
+										bind:value={webConfig.EXTERNAL_WEB_SEARCH_API_KEY}
+									/>
+								</div>
+							</div>
 						{/if}
 						{/if}
 					{/if}
 					{/if}
 
 
@@ -652,6 +684,37 @@
 								</div>
 								</div>
 							{/if}
 							{/if}
 						</div>
 						</div>
+					{:else if webConfig.WEB_LOADER_ENGINE === 'external'}
+						<div class="mb-2.5 flex w-full flex-col">
+							<div>
+								<div class=" self-center text-xs font-medium mb-1">
+									{$i18n.t('External Web Loader URL')}
+								</div>
+
+								<div class="flex w-full">
+									<div class="flex-1">
+										<input
+											class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
+											type="text"
+											placeholder={$i18n.t('Enter External Web Loader URL')}
+											bind:value={webConfig.EXTERNAL_WEB_LOADER_URL}
+											autocomplete="off"
+										/>
+									</div>
+								</div>
+							</div>
+
+							<div class="mt-2">
+								<div class=" self-center text-xs font-medium mb-1">
+									{$i18n.t('External Web Loader API Key')}
+								</div>
+
+								<SensitiveInput
+									placeholder={$i18n.t('Enter External Web Loader API Key')}
+									bind:value={webConfig.EXTERNAL_WEB_LOADER_API_KEY}
+								/>
+							</div>
+						</div>
 					{/if}
 					{/if}
 
 
 					<div class="  mb-2.5 flex w-full justify-between">
 					<div class="  mb-2.5 flex w-full justify-between">

+ 2 - 0
src/lib/components/admin/Users/Groups.svelte

@@ -63,6 +63,8 @@
 			file_upload: true,
 			file_upload: true,
 			delete: true,
 			delete: true,
 			edit: true,
 			edit: true,
+			share: true,
+			export: true,
 			stt: true,
 			stt: true,
 			tts: true,
 			tts: true,
 			call: true,
 			call: true,

+ 18 - 0
src/lib/components/admin/Users/Groups/Permissions.svelte

@@ -24,6 +24,8 @@
 			file_upload: true,
 			file_upload: true,
 			delete: true,
 			delete: true,
 			edit: true,
 			edit: true,
+			share: true,
+			export: true,
 			stt: true,
 			stt: true,
 			tts: true,
 			tts: true,
 			call: true,
 			call: true,
@@ -276,6 +278,22 @@
 			<Switch bind:state={permissions.chat.edit} />
 			<Switch bind:state={permissions.chat.edit} />
 		</div>
 		</div>
 
 
+		<div class="  flex w-full justify-between my-2 pr-2">
+			<div class=" self-center text-xs font-medium">
+				{$i18n.t('Allow Chat Share')}
+			</div>
+
+			<Switch bind:state={permissions.chat.share} />
+		</div>
+
+		<div class="  flex w-full justify-between my-2 pr-2">
+			<div class=" self-center text-xs font-medium">
+				{$i18n.t('Allow Chat Export')}
+			</div>
+
+			<Switch bind:state={permissions.chat.export} />
+		</div>
+
 		<div class="  flex w-full justify-between my-2 pr-2">
 		<div class="  flex w-full justify-between my-2 pr-2">
 			<div class=" self-center text-xs font-medium">
 			<div class=" self-center text-xs font-medium">
 				{$i18n.t('Allow Speech to Text')}
 				{$i18n.t('Allow Speech to Text')}

+ 1 - 1
src/lib/components/channel/Channel.svelte

@@ -262,7 +262,7 @@
 			{#if threadId !== null}
 			{#if threadId !== null}
 				<Drawer
 				<Drawer
 					show={threadId !== null}
 					show={threadId !== null}
-					on:close={() => {
+					onClose={() => {
 						threadId = null;
 						threadId = null;
 					}}
 					}}
 				>
 				>

+ 5 - 3
src/lib/components/chat/Chat.svelte

@@ -236,9 +236,11 @@
 		await tick();
 		await tick();
 		await tick();
 		await tick();
 
 
-		const messageElement = document.getElementById(`message-${message.id}`);
-		if (messageElement) {
-			messageElement.scrollIntoView({ behavior: 'smooth' });
+		if ($settings?.scrollOnBranchChange ?? true) {
+			const messageElement = document.getElementById(`message-${message.id}`);
+			if (messageElement) {
+				messageElement.scrollIntoView({ behavior: 'smooth' });
+			}
 		}
 		}
 
 
 		await tick();
 		await tick();

+ 1 - 1
src/lib/components/chat/ChatControls.svelte

@@ -140,7 +140,7 @@
 		{#if $showControls}
 		{#if $showControls}
 			<Drawer
 			<Drawer
 				show={$showControls}
 				show={$showControls}
-				on:close={() => {
+				onClose={() => {
 					showControls.set(false);
 					showControls.set(false);
 				}}
 				}}
 			>
 			>

+ 2 - 2
src/lib/components/chat/MessageInput.svelte

@@ -1063,9 +1063,9 @@
 													);
 													);
 												}
 												}
 											}}
 											}}
-											uploadOneDriveHandler={async () => {
+											uploadOneDriveHandler={async (authorityType) => {
 												try {
 												try {
-													const fileData = await pickAndDownloadFile();
+													const fileData = await pickAndDownloadFile(authorityType);
 													if (fileData) {
 													if (fileData) {
 														const file = new File([fileData.blob], fileData.name, {
 														const file = new File([fileData.blob], fileData.name, {
 															type: fileData.blob.type || 'application/octet-stream'
 															type: fileData.blob.type || 'application/octet-stream'

+ 112 - 87
src/lib/components/chat/MessageInput/InputMenu.svelte

@@ -229,94 +229,119 @@
 			{/if}
 			{/if}
 
 
 			{#if $config?.features?.enable_onedrive_integration}
 			{#if $config?.features?.enable_onedrive_integration}
-				<DropdownMenu.Item
-					class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-xl"
-					on:click={() => {
-						uploadOneDriveHandler();
-					}}
-				>
-					<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" class="w-5 h-5" fill="none">
-						<mask
-							id="mask0_87_7796"
-							style="mask-type:alpha"
-							maskUnits="userSpaceOnUse"
-							x="0"
-							y="6"
-							width="32"
-							height="20"
-						>
-							<path
-								d="M7.82979 26C3.50549 26 0 22.5675 0 18.3333C0 14.1921 3.35322 10.8179 7.54613 10.6716C9.27535 7.87166 12.4144 6 16 6C20.6308 6 24.5169 9.12183 25.5829 13.3335C29.1316 13.3603 32 16.1855 32 19.6667C32 23.0527 29 26 25.8723 25.9914L7.82979 26Z"
-								fill="#C4C4C4"
-							/>
-						</mask>
-						<g mask="url(#mask0_87_7796)">
-							<path
-								d="M7.83017 26.0001C5.37824 26.0001 3.18957 24.8966 1.75391 23.1691L18.0429 16.3335L30.7089 23.4647C29.5926 24.9211 27.9066 26.0001 26.0004 25.9915C23.1254 26.0001 12.0629 26.0001 7.83017 26.0001Z"
-								fill="url(#paint0_linear_87_7796)"
-							/>
-							<path
-								d="M25.5785 13.3149L18.043 16.3334L30.709 23.4647C31.5199 22.4065 32.0004 21.0916 32.0004 19.6669C32.0004 16.1857 29.1321 13.3605 25.5833 13.3337C25.5817 13.3274 25.5801 13.3212 25.5785 13.3149Z"
-								fill="url(#paint1_linear_87_7796)"
-							/>
-							<path
-								d="M7.06445 10.7028L18.0423 16.3333L25.5779 13.3148C24.5051 9.11261 20.6237 6 15.9997 6C12.4141 6 9.27508 7.87166 7.54586 10.6716C7.3841 10.6773 7.22358 10.6877 7.06445 10.7028Z"
-								fill="url(#paint2_linear_87_7796)"
-							/>
-							<path
-								d="M1.7535 23.1687L18.0425 16.3331L7.06471 10.7026C3.09947 11.0792 0 14.3517 0 18.3331C0 20.1665 0.657197 21.8495 1.7535 23.1687Z"
-								fill="url(#paint3_linear_87_7796)"
-							/>
-						</g>
-						<defs>
-							<linearGradient
-								id="paint0_linear_87_7796"
-								x1="4.42591"
-								y1="24.6668"
-								x2="27.2309"
-								y2="23.2764"
-								gradientUnits="userSpaceOnUse"
-							>
-								<stop stop-color="#2086B8" />
-								<stop offset="1" stop-color="#46D3F6" />
-							</linearGradient>
-							<linearGradient
-								id="paint1_linear_87_7796"
-								x1="23.8302"
-								y1="19.6668"
-								x2="30.2108"
-								y2="15.2082"
-								gradientUnits="userSpaceOnUse"
+				<DropdownMenu.Sub>
+					<DropdownMenu.SubTrigger
+						class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-xl w-full"
+					>
+						<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" class="w-5 h-5" fill="none">
+							<mask
+								id="mask0_87_7796"
+								style="mask-type:alpha"
+								maskUnits="userSpaceOnUse"
+								x="0"
+								y="6"
+								width="32"
+								height="20"
 							>
 							>
-								<stop stop-color="#1694DB" />
-								<stop offset="1" stop-color="#62C3FE" />
-							</linearGradient>
-							<linearGradient
-								id="paint2_linear_87_7796"
-								x1="8.51037"
-								y1="7.33333"
-								x2="23.3335"
-								y2="15.9348"
-								gradientUnits="userSpaceOnUse"
-							>
-								<stop stop-color="#0D3D78" />
-								<stop offset="1" stop-color="#063B83" />
-							</linearGradient>
-							<linearGradient
-								id="paint3_linear_87_7796"
-								x1="-0.340429"
-								y1="19.9998"
-								x2="14.5634"
-								y2="14.4649"
-								gradientUnits="userSpaceOnUse"
-							>
-								<stop stop-color="#16589B" />
-								<stop offset="1" stop-color="#1464B7" />
-							</linearGradient>
-						</defs>
-					</svg>
-					<div class="line-clamp-1">{$i18n.t('OneDrive')}</div>
-				</DropdownMenu.Item>
+								<path
+									d="M7.82979 26C3.50549 26 0 22.5675 0 18.3333C0 14.1921 3.35322 10.8179 7.54613 10.6716C9.27535 7.87166 12.4144 6 16 6C20.6308 6 24.5169 9.12183 25.5829 13.3335C29.1316 13.3603 32 16.1855 32 19.6667C32 23.0527 29 26 25.8723 25.9914L7.82979 26Z"
+									fill="#C4C4C4"
+								/>
+							</mask>
+							<g mask="url(#mask0_87_7796)">
+								<path
+									d="M7.83017 26.0001C5.37824 26.0001 3.18957 24.8966 1.75391 23.1691L18.0429 16.3335L30.7089 23.4647C29.5926 24.9211 27.9066 26.0001 26.0004 25.9915C23.1254 26.0001 12.0629 26.0001 7.83017 26.0001Z"
+									fill="url(#paint0_linear_87_7796)"
+								/>
+								<path
+									d="M25.5785 13.3149L18.043 16.3334L30.709 23.4647C31.5199 22.4065 32.0004 21.0916 32.0004 19.6669C32.0004 16.1857 29.1321 13.3605 25.5833 13.3337C25.5817 13.3274 25.5801 13.3212 25.5785 13.3149Z"
+									fill="url(#paint1_linear_87_7796)"
+								/>
+								<path
+									d="M7.06445 10.7028L18.0423 16.3333L25.5779 13.3148C24.5051 9.11261 20.6237 6 15.9997 6C12.4141 6 9.27508 7.87166 7.54586 10.6716C7.3841 10.6773 7.22358 10.6877 7.06445 10.7028Z"
+									fill="url(#paint2_linear_87_7796)"
+								/>
+								<path
+									d="M1.7535 23.1687L18.0425 16.3331L7.06471 10.7026C3.09947 11.0792 0 14.3517 0 18.3331C0 20.1665 0.657197 21.8495 1.7535 23.1687Z"
+									fill="url(#paint3_linear_87_7796)"
+								/>
+							</g>
+							<defs>
+								<linearGradient
+									id="paint0_linear_87_7796"
+									x1="4.42591"
+									y1="24.6668"
+									x2="27.2309"
+									y2="23.2764"
+									gradientUnits="userSpaceOnUse"
+								>
+									<stop stop-color="#2086B8" />
+									<stop offset="1" stop-color="#46D3F6" />
+								</linearGradient>
+								<linearGradient
+									id="paint1_linear_87_7796"
+									x1="23.8302"
+									y1="19.6668"
+									x2="30.2108"
+									y2="15.2082"
+									gradientUnits="userSpaceOnUse"
+								>
+									<stop stop-color="#1694DB" />
+									<stop offset="1" stop-color="#62C3FE" />
+								</linearGradient>
+								<linearGradient
+									id="paint2_linear_87_7796"
+									x1="8.51037"
+									y1="7.33333"
+									x2="23.3335"
+									y2="15.9348"
+									gradientUnits="userSpaceOnUse"
+								>
+									<stop stop-color="#0D3D78" />
+									<stop offset="1" stop-color="#063B83" />
+								</linearGradient>
+								<linearGradient
+									id="paint3_linear_87_7796"
+									x1="-0.340429"
+									y1="19.9998"
+									x2="14.5634"
+									y2="14.4649"
+									gradientUnits="userSpaceOnUse"
+								>
+									<stop stop-color="#16589B" />
+									<stop offset="1" stop-color="#1464B7" />
+								</linearGradient>
+							</defs>
+						</svg>
+						<div class="line-clamp-1">{$i18n.t('Microsoft OneDrive')}</div>
+					</DropdownMenu.SubTrigger>
+					<DropdownMenu.SubContent
+						class="w-[calc(100vw-2rem)] max-w-[280px] rounded-xl px-1 py-1 border border-gray-300/30 dark:border-gray-700/50 z-50 bg-white dark:bg-gray-850 dark:text-white shadow-sm"
+						side={$mobile ? 'bottom' : 'right'}
+						sideOffset={$mobile ? 5 : 0}
+						alignOffset={$mobile ? 0 : -8}
+					>
+						<DropdownMenu.Item
+							class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-xl"
+							on:click={() => {
+								uploadOneDriveHandler('personal');
+							}}
+						>
+							<div class="line-clamp-1">{$i18n.t('Microsoft OneDrive (personal)')}</div>
+						</DropdownMenu.Item>
+						<DropdownMenu.Item
+							class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-xl"
+							on:click={() => {
+								uploadOneDriveHandler('organizations');
+							}}
+						>
+							<div class="flex flex-col">
+								<div class="line-clamp-1">{$i18n.t('Microsoft OneDrive (work/school)')}</div>
+								<div class="text-xs text-gray-500">Includes SharePoint</div>
+							</div>
+						</DropdownMenu.Item>
+					</DropdownMenu.SubContent>
+				</DropdownMenu.Sub>
 			{/if}
 			{/if}
 		</DropdownMenu.Content>
 		</DropdownMenu.Content>
 	</div>
 	</div>

+ 1 - 0
src/lib/components/chat/Messages/Citations.svelte

@@ -83,6 +83,7 @@
 			});
 			});
 			return acc;
 			return acc;
 		}, []);
 		}, []);
+		console.log('citations', citations);
 
 
 		showRelevance = calculateShowRelevance(citations);
 		showRelevance = calculateShowRelevance(citations);
 		showPercentage = shouldShowPercentage(citations);
 		showPercentage = shouldShowPercentage(citations);

+ 7 - 4
src/lib/components/chat/Messages/CitationsModal.svelte

@@ -139,13 +139,16 @@
 														{percentage.toFixed(2)}%
 														{percentage.toFixed(2)}%
 													</span>
 													</span>
 												{/if}
 												{/if}
+
+												{#if typeof document?.distance === 'number'}
+													<span class="text-gray-500 dark:text-gray-500">
+														({(document?.distance ?? 0).toFixed(4)})
+													</span>
+												{/if}
+											{:else if typeof document?.distance === 'number'}
 												<span class="text-gray-500 dark:text-gray-500">
 												<span class="text-gray-500 dark:text-gray-500">
 													({(document?.distance ?? 0).toFixed(4)})
 													({(document?.distance ?? 0).toFixed(4)})
 												</span>
 												</span>
-											{:else}
-												<span class="text-gray-500 dark:text-gray-500">
-													{(document?.distance ?? 0).toFixed(4)}
-												</span>
 											{/if}
 											{/if}
 										</div>
 										</div>
 									</Tooltip>
 									</Tooltip>

+ 4 - 4
src/lib/components/chat/Messages/ContentRenderer.svelte

@@ -154,11 +154,11 @@
 		}, [])}
 		}, [])}
 		{onSourceClick}
 		{onSourceClick}
 		{onTaskClick}
 		{onTaskClick}
-		on:update={(e) => {
-			dispatch('update', e.detail);
+		onUpdate={(value) => {
+			dispatch('update', value);
 		}}
 		}}
-		on:code={(e) => {
-			const { lang, code } = e.detail;
+		onCode={(value) => {
+			const { lang, code } = value;
 
 
 			if (
 			if (
 				($settings?.detectArtifacts ?? true) &&
 				($settings?.detectArtifacts ?? true) &&

+ 4 - 16
src/lib/components/chat/Messages/Markdown.svelte

@@ -7,9 +7,6 @@
 	import markedKatexExtension from '$lib/utils/marked/katex-extension';
 	import markedKatexExtension from '$lib/utils/marked/katex-extension';
 
 
 	import MarkdownTokens from './Markdown/MarkdownTokens.svelte';
 	import MarkdownTokens from './Markdown/MarkdownTokens.svelte';
-	import { createEventDispatcher } from 'svelte';
-
-	const dispatch = createEventDispatcher();
 
 
 	export let id = '';
 	export let id = '';
 	export let content;
 	export let content;
@@ -18,6 +15,9 @@
 
 
 	export let sourceIds = [];
 	export let sourceIds = [];
 
 
+	export let onUpdate = () => {};
+	export let onCode = () => {};
+
 	export let onSourceClick = () => {};
 	export let onSourceClick = () => {};
 	export let onTaskClick = () => {};
 	export let onTaskClick = () => {};
 
 
@@ -40,17 +40,5 @@
 </script>
 </script>
 
 
 {#key id}
 {#key id}
-	<MarkdownTokens
-		{tokens}
-		{id}
-		{save}
-		{onTaskClick}
-		{onSourceClick}
-		on:update={(e) => {
-			dispatch('update', e.detail);
-		}}
-		on:code={(e) => {
-			dispatch('code', e.detail);
-		}}
-	/>
+	<MarkdownTokens {tokens} {id} {save} {onTaskClick} {onSourceClick} {onUpdate} {onCode} />
 {/key}
 {/key}

+ 49 - 0
src/lib/components/chat/Messages/Markdown/HTMLToken.svelte

@@ -0,0 +1,49 @@
+<script lang="ts">
+	import DOMPurify from 'dompurify';
+	import type { Token } from 'marked';
+
+	import { WEBUI_BASE_URL } from '$lib/constants';
+	import Source from './Source.svelte';
+
+	export let id: string;
+	export let token: Token;
+
+	export let onSourceClick: Function = () => {};
+
+	let html: string | null = null;
+
+	$: if (token.type === 'html' && token?.text) {
+		html = DOMPurify.sanitize(token.text);
+	} else {
+		html = null;
+	}
+</script>
+
+{#if token.type === 'html'}
+	{#if html && html.includes('<video')}
+		{@html html}
+	{:else if token.text && token.text.match(/<iframe\s+[^>]*src="https:\/\/www\.youtube\.com\/embed\/([a-zA-Z0-9_-]{11})(?:\?[^"]*)?"[^>]*><\/iframe>/)}
+		{@const match = token.text.match(
+			/<iframe\s+[^>]*src="https:\/\/www\.youtube\.com\/embed\/([a-zA-Z0-9_-]{11})(?:\?[^"]*)?"[^>]*><\/iframe>/
+		)}
+		{@const ytId = match && match[1]}
+		{#if ytId}
+			<iframe
+				class="w-full aspect-video my-2"
+				src={`https://www.youtube.com/embed/${ytId}`}
+				title="YouTube video player"
+				frameborder="0"
+				allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
+				referrerpolicy="strict-origin-when-cross-origin"
+				allowfullscreen
+			>
+			</iframe>
+		{/if}
+	{:else if token.text.includes(`<iframe src="${WEBUI_BASE_URL}/api/v1/files/`)}
+		{@html `${token.text}`}
+	{:else if token.text.includes(`<source_id`)}
+		<Source {id} {token} onClick={onSourceClick} />
+	{:else}
+		{token.text}
+	{/if}
+{/if}

+ 2 - 10
src/lib/components/chat/Messages/Markdown/MarkdownInlineTokens.svelte

@@ -13,6 +13,7 @@
 	import Image from '$lib/components/common/Image.svelte';
 	import Image from '$lib/components/common/Image.svelte';
 	import KatexRenderer from './KatexRenderer.svelte';
 	import KatexRenderer from './KatexRenderer.svelte';
 	import Source from './Source.svelte';
 	import Source from './Source.svelte';
+	import HtmlToken from './HTMLToken.svelte';
 
 
 	export let id: string;
 	export let id: string;
 	export let tokens: Token[];
 	export let tokens: Token[];
@@ -23,16 +24,7 @@
 	{#if token.type === 'escape'}
 	{#if token.type === 'escape'}
 		{unescapeHtml(token.text)}
 		{unescapeHtml(token.text)}
 	{:else if token.type === 'html'}
 	{:else if token.type === 'html'}
-		{@const html = DOMPurify.sanitize(token.text)}
-		{#if html && html.includes('<video')}
-			{@html html}
-		{:else if token.text.includes(`<iframe src="${WEBUI_BASE_URL}/api/v1/files/`)}
-			{@html `${token.text}`}
-		{:else if token.text.includes(`<source_id`)}
-			<Source {id} {token} onClick={onSourceClick} />
-		{:else}
-			{@html html}
-		{/if}
+		<HtmlToken {id} {token} {onSourceClick} />
 	{:else if token.type === 'link'}
 	{:else if token.type === 'link'}
 		{#if token.tokens}
 		{#if token.tokens}
 			<a href={token.href} target="_blank" rel="nofollow" title={token.title}>
 			<a href={token.href} target="_blank" rel="nofollow" title={token.title}>

+ 8 - 17
src/lib/components/chat/Messages/Markdown/MarkdownTokens.svelte

@@ -1,6 +1,6 @@
 <script lang="ts">
 <script lang="ts">
 	import DOMPurify from 'dompurify';
 	import DOMPurify from 'dompurify';
-	import { createEventDispatcher, onMount, getContext } from 'svelte';
+	import { onMount, getContext } from 'svelte';
 	const i18n = getContext('i18n');
 	const i18n = getContext('i18n');
 
 
 	import fileSaver from 'file-saver';
 	import fileSaver from 'file-saver';
@@ -21,8 +21,7 @@
 
 
 	import Source from './Source.svelte';
 	import Source from './Source.svelte';
 	import { settings } from '$lib/stores';
 	import { settings } from '$lib/stores';
-
-	const dispatch = createEventDispatcher();
+	import HtmlToken from './HTMLToken.svelte';
 
 
 	export let id: string;
 	export let id: string;
 	export let tokens: Token[];
 	export let tokens: Token[];
@@ -31,6 +30,9 @@
 
 
 	export let save = false;
 	export let save = false;
 
 
+	export let onUpdate: Function = () => {};
+	export let onCode: Function = () => {};
+
 	export let onTaskClick: Function = () => {};
 	export let onTaskClick: Function = () => {};
 	export let onSourceClick: Function = () => {};
 	export let onSourceClick: Function = () => {};
 
 
@@ -93,11 +95,9 @@
 				code={token?.text ?? ''}
 				code={token?.text ?? ''}
 				{attributes}
 				{attributes}
 				{save}
 				{save}
-				onCode={(value) => {
-					dispatch('code', value);
-				}}
+				{onCode}
 				onSave={(value) => {
 				onSave={(value) => {
-					dispatch('update', {
+					onUpdate({
 						raw: token.raw,
 						raw: token.raw,
 						oldContent: token.text,
 						oldContent: token.text,
 						newContent: value
 						newContent: value
@@ -267,16 +267,7 @@
 			</div>
 			</div>
 		</Collapsible>
 		</Collapsible>
 	{:else if token.type === 'html'}
 	{:else if token.type === 'html'}
-		{@const html = DOMPurify.sanitize(token.text)}
-		{#if html && html.includes('<video')}
-			{@html html}
-		{:else if token.text.includes(`<iframe src="${WEBUI_BASE_URL}/api/v1/files/`)}
-			{@html `${token.text}`}
-		{:else if token.text.includes(`<source_id`)}
-			<Source {id} {token} onClick={onSourceClick} />
-		{:else}
-			{token.text}
-		{/if}
+		<HtmlToken {id} {token} {onSourceClick} />
 	{:else if token.type === 'iframe'}
 	{:else if token.type === 'iframe'}
 		<iframe
 		<iframe
 			src="{WEBUI_BASE_URL}/api/v1/files/{token.fileId}/content"
 			src="{WEBUI_BASE_URL}/api/v1/files/{token.fileId}/content"

+ 9 - 8
src/lib/components/chat/Messages/MultiResponseMessages.svelte

@@ -200,9 +200,11 @@
 		await initHandler();
 		await initHandler();
 		await tick();
 		await tick();
 
 
-		const messageElement = document.getElementById(`message-${messageId}`);
-		if (messageElement) {
-			messageElement.scrollIntoView({ block: 'start' });
+		if ($settings?.scrollOnBranchChange ?? true) {
+			const messageElement = document.getElementById(`message-${messageId}`);
+			if (messageElement) {
+				messageElement.scrollIntoView({ block: 'start' });
+			}
 		}
 		}
 	});
 	});
 </script>
 </script>
@@ -238,10 +240,9 @@
 									messageChildrenIds = history.messages[currentMessageId].childrenIds;
 									messageChildrenIds = history.messages[currentMessageId].childrenIds;
 								}
 								}
 								history.currentId = currentMessageId;
 								history.currentId = currentMessageId;
-
-								await tick();
-								await updateChat();
-								triggerScroll();
+								// await tick();
+								// await updateChat();
+								// triggerScroll();
 							}
 							}
 						}}
 						}}
 					>
 					>
@@ -293,7 +294,7 @@
 
 
 							<div class="w-full rounded-xl pl-5 pr-2 py-2">
 							<div class="w-full rounded-xl pl-5 pr-2 py-2">
 								<Name>
 								<Name>
-									Merged Response
+									{$i18n.t('Merged Response')}
 
 
 									{#if message.timestamp}
 									{#if message.timestamp}
 										<span
 										<span

+ 5 - 3
src/lib/components/chat/Messages/UserMessage.svelte

@@ -65,10 +65,12 @@
 
 
 		await tick();
 		await tick();
 
 
-		messageEditTextAreaElement.style.height = '';
-		messageEditTextAreaElement.style.height = `${messageEditTextAreaElement.scrollHeight}px`;
+		if (messageEditTextAreaElement) {
+			messageEditTextAreaElement.style.height = '';
+			messageEditTextAreaElement.style.height = `${messageEditTextAreaElement.scrollHeight}px`;
 
 
-		messageEditTextAreaElement?.focus();
+			messageEditTextAreaElement?.focus();
+		}
 	};
 	};
 
 
 	const editMessageConfirmHandler = async (submit = true) => {
 	const editMessageConfirmHandler = async (submit = true) => {

+ 1 - 1
src/lib/components/chat/ModelSelector/Selector.svelte

@@ -778,7 +778,7 @@
 						</div>
 						</div>
 					</button>
 					</button>
 				</div>
 				</div>
-			{:else if filteredItems.length === 0}
+			{:else}
 				<div class="mb-3"></div>
 				<div class="mb-3"></div>
 			{/if}
 			{/if}
 
 

+ 11 - 5
src/lib/components/chat/Settings/About.svelte

@@ -159,15 +159,21 @@ Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are met:
 modification, are permitted provided that the following conditions are met:
 
 
 1. Redistributions of source code must retain the above copyright notice, this
 1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
+	list of conditions and the following disclaimer.
 
 
 2. Redistributions in binary form must reproduce the above copyright notice,
 2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
+	this list of conditions and the following disclaimer in the documentation
+	and/or other materials provided with the distribution.
 
 
 3. Neither the name of the copyright holder nor the names of its
 3. Neither the name of the copyright holder nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
+	contributors may be used to endorse or promote products derived from
+	this software without specific prior written permission.
+
+4. Notwithstanding any other provision of this License, and as a material condition of the rights granted herein, licensees are strictly prohibited from altering, removing, obscuring, or replacing any "Open WebUI" branding, including but not limited to the name, logo, or any visual, textual, or symbolic identifiers that distinguish the software and its interfaces, in any deployment or distribution, regardless of the number of users, except as explicitly set forth in Clauses 5 and 6 below.
+
+5. The branding restriction enumerated in Clause 4 shall not apply in the following limited circumstances: (i) deployments or distributions where the total number of end users (defined as individual natural persons with direct access to the application) does not exceed fifty (50) within any rolling thirty (30) day period; (ii) cases in which the licensee is an official contributor to the codebase—with a substantive code change successfully merged into the main branch of the official codebase maintained by the copyright holder—who has obtained specific prior written permission for branding adjustment from the copyright holder; or (iii) where the licensee has obtained a duly executed enterprise license expressly permitting such modification. For all other cases, any removal or alteration of the "Open WebUI" branding shall constitute a material breach of license.
+
+6. All code, modifications, or derivative works incorporated into this project prior to the incorporation of this branding clause remain licensed under the BSD 3-Clause License, and prior contributors retain all BSD-3 rights therein; if any such contributor requests the removal of their BSD-3-licensed code, the copyright holder will do so, and any replacement code will be licensed under the project's primary license then in effect. By contributing after this clause's adoption, you agree to the project's Contributor License Agreement (CLA) and to these updated terms for all new contributions.
 
 
 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE

+ 25 - 22
src/lib/components/chat/Settings/Chats.svelte

@@ -140,28 +140,31 @@
 				</div>
 				</div>
 				<div class=" self-center text-sm font-medium">{$i18n.t('Import Chats')}</div>
 				<div class=" self-center text-sm font-medium">{$i18n.t('Import Chats')}</div>
 			</button>
 			</button>
-			<button
-				class=" flex rounded-md py-2 px-3.5 w-full hover:bg-gray-200 dark:hover:bg-gray-800 transition"
-				on:click={() => {
-					exportChats();
-				}}
-			>
-				<div class=" self-center mr-3">
-					<svg
-						xmlns="http://www.w3.org/2000/svg"
-						viewBox="0 0 16 16"
-						fill="currentColor"
-						class="w-4 h-4"
-					>
-						<path
-							fill-rule="evenodd"
-							d="M4 2a1.5 1.5 0 0 0-1.5 1.5v9A1.5 1.5 0 0 0 4 14h8a1.5 1.5 0 0 0 1.5-1.5V6.621a1.5 1.5 0 0 0-.44-1.06L9.94 2.439A1.5 1.5 0 0 0 8.878 2H4Zm4 3.5a.75.75 0 0 1 .75.75v2.69l.72-.72a.75.75 0 1 1 1.06 1.06l-2 2a.75.75 0 0 1-1.06 0l-2-2a.75.75 0 0 1 1.06-1.06l.72.72V6.25A.75.75 0 0 1 8 5.5Z"
-							clip-rule="evenodd"
-						/>
-					</svg>
-				</div>
-				<div class=" self-center text-sm font-medium">{$i18n.t('Export Chats')}</div>
-			</button>
+
+			{#if $user?.role === 'admin' || ($user.permissions?.chat?.export ?? true)}
+				<button
+					class=" flex rounded-md py-2 px-3.5 w-full hover:bg-gray-200 dark:hover:bg-gray-800 transition"
+					on:click={() => {
+						exportChats();
+					}}
+				>
+					<div class=" self-center mr-3">
+						<svg
+							xmlns="http://www.w3.org/2000/svg"
+							viewBox="0 0 16 16"
+							fill="currentColor"
+							class="w-4 h-4"
+						>
+							<path
+								fill-rule="evenodd"
+								d="M4 2a1.5 1.5 0 0 0-1.5 1.5v9A1.5 1.5 0 0 0 4 14h8a1.5 1.5 0 0 0 1.5-1.5V6.621a1.5 1.5 0 0 0-.44-1.06L9.94 2.439A1.5 1.5 0 0 0 8.878 2H4Zm4 3.5a.75.75 0 0 1 .75.75v2.69l.72-.72a.75.75 0 1 1 1.06 1.06l-2 2a.75.75 0 0 1-1.06 0l-2-2a.75.75 0 0 1 1.06-1.06l.72.72V6.25A.75.75 0 0 1 8 5.5Z"
+								clip-rule="evenodd"
+							/>
+						</svg>
+					</div>
+					<div class=" self-center text-sm font-medium">{$i18n.t('Export Chats')}</div>
+				</button>
+			{/if}
 		</div>
 		</div>
 
 
 		<hr class=" border-gray-100 dark:border-gray-850" />
 		<hr class=" border-gray-100 dark:border-gray-850" />

+ 34 - 2
src/lib/components/chat/Settings/Interface.svelte

@@ -30,7 +30,9 @@
 	// Interface
 	// Interface
 	let defaultModelId = '';
 	let defaultModelId = '';
 	let showUsername = false;
 	let showUsername = false;
+
 	let notificationSound = true;
 	let notificationSound = true;
+	let notificationSoundAlways = false;
 
 
 	let detectArtifacts = true;
 	let detectArtifacts = true;
 
 
@@ -117,6 +119,11 @@
 		saveSettings({ notificationSound: notificationSound });
 		saveSettings({ notificationSound: notificationSound });
 	};
 	};
 
 
+	const toggleNotificationSoundAlways = async () => {
+		notificationSoundAlways = !notificationSoundAlways;
+		saveSettings({ notificationSoundAlways: notificationSoundAlways });
+	};
+
 	const toggleShowChangelog = async () => {
 	const toggleShowChangelog = async () => {
 		showChangelog = !showChangelog;
 		showChangelog = !showChangelog;
 		saveSettings({ showChangelog: showChangelog });
 		saveSettings({ showChangelog: showChangelog });
@@ -294,7 +301,8 @@
 		chatDirection = $settings.chatDirection ?? 'auto';
 		chatDirection = $settings.chatDirection ?? 'auto';
 		userLocation = $settings.userLocation ?? false;
 		userLocation = $settings.userLocation ?? false;
 
 
-		notificationSound = $settings.notificationSound ?? true;
+		notificationSound = $settings?.notificationSound ?? true;
+		notificationSoundAlways = $settings?.notificationSoundAlways ?? false;
 
 
 		hapticFeedback = $settings.hapticFeedback ?? false;
 		hapticFeedback = $settings.hapticFeedback ?? false;
 		ctrlEnterToSend = $settings.ctrlEnterToSend ?? false;
 		ctrlEnterToSend = $settings.ctrlEnterToSend ?? false;
@@ -477,6 +485,30 @@
 				</div>
 				</div>
 			</div>
 			</div>
 
 
+			{#if notificationSound}
+				<div>
+					<div class=" py-0.5 flex w-full justify-between">
+						<div class=" self-center text-xs">
+							{$i18n.t('Always Play Notification Sound')}
+						</div>
+
+						<button
+							class="p-1 px-3 text-xs flex rounded-sm transition"
+							on:click={() => {
+								toggleNotificationSoundAlways();
+							}}
+							type="button"
+						>
+							{#if notificationSoundAlways === true}
+								<span class="ml-2 self-center">{$i18n.t('On')}</span>
+							{:else}
+								<span class="ml-2 self-center">{$i18n.t('Off')}</span>
+							{/if}
+						</button>
+					</div>
+				</div>
+			{/if}
+
 			{#if $user?.role === 'admin'}
 			{#if $user?.role === 'admin'}
 				<div>
 				<div>
 					<div class=" py-0.5 flex w-full justify-between">
 					<div class=" py-0.5 flex w-full justify-between">
@@ -855,7 +887,7 @@
 			<div>
 			<div>
 				<div class=" py-0.5 flex w-full justify-between">
 				<div class=" py-0.5 flex w-full justify-between">
 					<div class=" self-center text-xs">
 					<div class=" self-center text-xs">
-						{$i18n.t('Scroll to bottom when switching between branches')}
+						{$i18n.t('Scroll On Branch Change')}
 					</div>
 					</div>
 
 
 					<button
 					<button

+ 3 - 4
src/lib/components/common/Drawer.svelte

@@ -1,13 +1,12 @@
 <script lang="ts">
 <script lang="ts">
-	import { onDestroy, onMount, createEventDispatcher } from 'svelte';
+	import { onDestroy, onMount } from 'svelte';
 	import { flyAndScale } from '$lib/utils/transitions';
 	import { flyAndScale } from '$lib/utils/transitions';
 	import { fade, fly, slide } from 'svelte/transition';
 	import { fade, fly, slide } from 'svelte/transition';
 	import { isApp } from '$lib/stores';
 	import { isApp } from '$lib/stores';
 
 
-	const dispatch = createEventDispatcher();
-
 	export let show = false;
 	export let show = false;
 	export let className = '';
 	export let className = '';
+	export let onClose = () => {};
 
 
 	let modalElement = null;
 	let modalElement = null;
 	let mounted = false;
 	let mounted = false;
@@ -33,7 +32,7 @@
 		window.addEventListener('keydown', handleKeyDown);
 		window.addEventListener('keydown', handleKeyDown);
 		document.body.style.overflow = 'hidden';
 		document.body.style.overflow = 'hidden';
 	} else if (modalElement) {
 	} else if (modalElement) {
-		dispatch('close');
+		onClose();
 		window.removeEventListener('keydown', handleKeyDown);
 		window.removeEventListener('keydown', handleKeyDown);
 
 
 		if (document.body.contains(modalElement)) {
 		if (document.body.contains(modalElement)) {

+ 4 - 1
src/lib/components/common/Textarea.svelte

@@ -4,6 +4,7 @@
 	export let value = '';
 	export let value = '';
 	export let placeholder = '';
 	export let placeholder = '';
 	export let rows = 1;
 	export let rows = 1;
+	export let minSize = null;
 	export let required = false;
 	export let required = false;
 	export let className =
 	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';
 		'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 = () => {
 	const resize = () => {
 		if (textareaElement) {
 		if (textareaElement) {
 			textareaElement.style.height = '';
 			textareaElement.style.height = '';
-			textareaElement.style.height = `${textareaElement.scrollHeight}px`;
+			textareaElement.style.height = minSize
+				? `${Math.max(textareaElement.scrollHeight, minSize)}px`
+				: `${textareaElement.scrollHeight}px`;
 		}
 		}
 	};
 	};
 </script>
 </script>

+ 13 - 10
src/lib/components/layout/Navbar/Menu.svelte

@@ -18,7 +18,8 @@
 		showArtifacts,
 		showArtifacts,
 		mobile,
 		mobile,
 		temporaryChatEnabled,
 		temporaryChatEnabled,
-		theme
+		theme,
+		user
 	} from '$lib/stores';
 	} from '$lib/stores';
 	import { flyAndScale } from '$lib/utils/transitions';
 	import { flyAndScale } from '$lib/utils/transitions';
 
 
@@ -212,7 +213,7 @@
 				</DropdownMenu.Item>
 				</DropdownMenu.Item>
 			{/if}
 			{/if}
 
 
-			{#if !$temporaryChatEnabled}
+			{#if !$temporaryChatEnabled && ($user?.role === 'admin' || ($user.permissions?.chat?.share ?? true))}
 				<DropdownMenu.Item
 				<DropdownMenu.Item
 					class="flex gap-2 items-center px-3 py-2 text-sm  cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
 					class="flex gap-2 items-center px-3 py-2 text-sm  cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
 					id="chat-share-button"
 					id="chat-share-button"
@@ -288,14 +289,16 @@
 					transition={flyAndScale}
 					transition={flyAndScale}
 					sideOffset={8}
 					sideOffset={8}
 				>
 				>
-					<DropdownMenu.Item
-						class="flex gap-2 items-center px-3 py-2 text-sm  cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
-						on:click={() => {
-							downloadJSONExport();
-						}}
-					>
-						<div class="flex items-center line-clamp-1">{$i18n.t('Export chat (.json)')}</div>
-					</DropdownMenu.Item>
+					{#if $user?.role === 'admin' || ($user.permissions?.chat?.export ?? true)}
+						<DropdownMenu.Item
+							class="flex gap-2 items-center px-3 py-2 text-sm  cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
+							on:click={() => {
+								downloadJSONExport();
+							}}
+						>
+							<div class="flex items-center line-clamp-1">{$i18n.t('Export chat (.json)')}</div>
+						</DropdownMenu.Item>
+					{/if}
 					<DropdownMenu.Item
 					<DropdownMenu.Item
 						class="flex gap-2 items-center px-3 py-2 text-sm  cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
 						class="flex gap-2 items-center px-3 py-2 text-sm  cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
 						on:click={() => {
 						on:click={() => {

+ 23 - 18
src/lib/components/layout/Sidebar/ChatMenu.svelte

@@ -26,7 +26,7 @@
 		getChatPinnedStatusById,
 		getChatPinnedStatusById,
 		toggleChatPinnedStatusById
 		toggleChatPinnedStatusById
 	} from '$lib/apis/chats';
 	} from '$lib/apis/chats';
-	import { chats, theme } from '$lib/stores';
+	import { chats, theme, user } from '$lib/stores';
 	import { createMessagesList } from '$lib/utils';
 	import { createMessagesList } from '$lib/utils';
 	import { downloadChatAsPDF } from '$lib/apis/utils';
 	import { downloadChatAsPDF } from '$lib/apis/utils';
 	import Download from '$lib/components/icons/Download.svelte';
 	import Download from '$lib/components/icons/Download.svelte';
@@ -233,15 +233,17 @@
 				<div class="flex items-center">{$i18n.t('Archive')}</div>
 				<div class="flex items-center">{$i18n.t('Archive')}</div>
 			</DropdownMenu.Item>
 			</DropdownMenu.Item>
 
 
-			<DropdownMenu.Item
-				class="flex gap-2 items-center px-3 py-1.5 text-sm  cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800  rounded-md"
-				on:click={() => {
-					shareHandler();
-				}}
-			>
-				<Share />
-				<div class="flex items-center">{$i18n.t('Share')}</div>
-			</DropdownMenu.Item>
+			{#if $user?.role === 'admin' || ($user.permissions?.chat?.share ?? true)}
+				<DropdownMenu.Item
+					class="flex gap-2 items-center px-3 py-1.5 text-sm  cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800  rounded-md"
+					on:click={() => {
+						shareHandler();
+					}}
+				>
+					<Share />
+					<div class="flex items-center">{$i18n.t('Share')}</div>
+				</DropdownMenu.Item>
+			{/if}
 
 
 			<DropdownMenu.Sub>
 			<DropdownMenu.Sub>
 				<DropdownMenu.SubTrigger
 				<DropdownMenu.SubTrigger
@@ -256,14 +258,17 @@
 					transition={flyAndScale}
 					transition={flyAndScale}
 					sideOffset={8}
 					sideOffset={8}
 				>
 				>
-					<DropdownMenu.Item
-						class="flex gap-2 items-center px-3 py-2 text-sm  cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
-						on:click={() => {
-							downloadJSONExport();
-						}}
-					>
-						<div class="flex items-center line-clamp-1">{$i18n.t('Export chat (.json)')}</div>
-					</DropdownMenu.Item>
+					{#if $user?.role === 'admin' || ($user.permissions?.chat?.export ?? true)}
+						<DropdownMenu.Item
+							class="flex gap-2 items-center px-3 py-2 text-sm  cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
+							on:click={() => {
+								downloadJSONExport();
+							}}
+						>
+							<div class="flex items-center line-clamp-1">{$i18n.t('Export chat (.json)')}</div>
+						</DropdownMenu.Item>
+					{/if}
+
 					<DropdownMenu.Item
 					<DropdownMenu.Item
 						class="flex gap-2 items-center px-3 py-2 text-sm  cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
 						class="flex gap-2 items-center px-3 py-2 text-sm  cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
 						on:click={() => {
 						on:click={() => {

+ 41 - 7
src/lib/components/workspace/Knowledge/KnowledgeBase.svelte

@@ -11,7 +11,12 @@
 	import { page } from '$app/stores';
 	import { page } from '$app/stores';
 	import { mobile, showSidebar, knowledge as _knowledge, config, user } from '$lib/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 {
 	import {
 		addFileToKnowledgeById,
 		addFileToKnowledgeById,
 		getKnowledgeById,
 		getKnowledgeById,
@@ -84,12 +89,15 @@
 
 
 	let selectedFile = null;
 	let selectedFile = null;
 	let selectedFileId = null;
 	let selectedFileId = null;
+	let selectedFileContent = '';
+
+	// Add cache object
+	let fileContentCache = new Map();
 
 
 	$: if (selectedFileId) {
 	$: if (selectedFileId) {
 		const file = (knowledge?.files ?? []).find((file) => file.id === selectedFileId);
 		const file = (knowledge?.files ?? []).find((file) => file.id === selectedFileId);
 		if (file) {
 		if (file) {
-			file.data = file.data ?? { content: '' };
-			selectedFile = file;
+			fileSelectHandler(file);
 		} else {
 		} else {
 			selectedFile = null;
 			selectedFile = null;
 		}
 		}
@@ -394,7 +402,10 @@
 
 
 	const updateFileContentHandler = async () => {
 	const updateFileContentHandler = async () => {
 		const fileId = selectedFile.id;
 		const fileId = selectedFile.id;
-		const content = selectedFile.data.content;
+		const content = selectedFileContent;
+
+		// Clear the cache for this file since we're updating it
+		fileContentCache.delete(fileId);
 
 
 		const res = updateFileDataContentById(localStorage.token, fileId, content).catch((e) => {
 		const res = updateFileDataContentById(localStorage.token, fileId, content).catch((e) => {
 			toast.error(`${e}`);
 			toast.error(`${e}`);
@@ -450,6 +461,29 @@
 		}
 		}
 	};
 	};
 
 
+	const fileSelectHandler = async (file) => {
+		try {
+			selectedFile = file;
+
+			// Check cache first
+			if (fileContentCache.has(file.id)) {
+				selectedFileContent = fileContentCache.get(file.id);
+				return;
+			}
+
+			const response = await getFileById(localStorage.token, file.id);
+			if (response) {
+				selectedFileContent = response.data.content;
+				// Cache the content
+				fileContentCache.set(file.id, 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) => {
 	const onDragOver = (e) => {
 		e.preventDefault();
 		e.preventDefault();
 
 
@@ -728,7 +762,7 @@
 								{#key selectedFile.id}
 								{#key selectedFile.id}
 									<RichTextInput
 									<RichTextInput
 										className="input-prose-sm"
 										className="input-prose-sm"
-										bind:value={selectedFile.data.content}
+										bind:value={selectedFileContent}
 										placeholder={$i18n.t('Add content here')}
 										placeholder={$i18n.t('Add content here')}
 										preserveBreaks={true}
 										preserveBreaks={true}
 									/>
 									/>
@@ -747,7 +781,7 @@
 				<Drawer
 				<Drawer
 					className="h-full"
 					className="h-full"
 					show={selectedFileId !== null}
 					show={selectedFileId !== null}
-					on:close={() => {
+					onClose={() => {
 						selectedFileId = null;
 						selectedFileId = null;
 					}}
 					}}
 				>
 				>
@@ -786,7 +820,7 @@
 								{#key selectedFile.id}
 								{#key selectedFile.id}
 									<RichTextInput
 									<RichTextInput
 										className="input-prose-sm"
 										className="input-prose-sm"
-										bind:value={selectedFile.data.content}
+										bind:value={selectedFileContent}
 										placeholder={$i18n.t('Add content here')}
 										placeholder={$i18n.t('Add content here')}
 										preserveBreaks={true}
 										preserveBreaks={true}
 									/>
 									/>

+ 5 - 1
src/lib/components/workspace/Models/ModelEditor.svelte

@@ -56,6 +56,7 @@
 		}
 		}
 	}
 	}
 
 
+	let system = '';
 	let info = {
 	let info = {
 		id: '',
 		id: '',
 		base_model_id: null,
 		base_model_id: null,
@@ -155,6 +156,7 @@
 			}
 			}
 		}
 		}
 
 
+		info.params.system = system.trim() === '' ? null : system;
 		info.params.stop = params.stop ? params.stop.split(',').filter((s) => s.trim()) : null;
 		info.params.stop = params.stop ? params.stop.split(',').filter((s) => s.trim()) : null;
 		Object.keys(info.params).forEach((key) => {
 		Object.keys(info.params).forEach((key) => {
 			if (info.params[key] === '' || info.params[key] === null) {
 			if (info.params[key] === '' || info.params[key] === null) {
@@ -201,6 +203,8 @@
 				}
 				}
 			}
 			}
 
 
+			system = model?.params?.system ?? '';
+
 			params = { ...params, ...model?.params };
 			params = { ...params, ...model?.params };
 			params.stop = params?.stop
 			params.stop = params?.stop
 				? (typeof params.stop === 'string' ? params.stop.split(',') : (params?.stop ?? [])).join(
 				? (typeof params.stop === 'string' ? params.stop.split(',') : (params?.stop ?? [])).join(
@@ -553,7 +557,7 @@
 										className=" text-sm w-full bg-transparent outline-hidden resize-none overflow-y-hidden "
 										className=" text-sm w-full bg-transparent outline-hidden resize-none overflow-y-hidden "
 										placeholder={`Write your model system prompt content here\ne.g.) You are Mario from Super Mario Bros, acting as an assistant.`}
 										placeholder={`Write your model system prompt content here\ne.g.) You are Mario from Super Mario Bros, acting as an assistant.`}
 										rows={4}
 										rows={4}
-										bind:value={info.params.system}
+										bind:value={system}
 									/>
 									/>
 								</div>
 								</div>
 							</div>
 							</div>

+ 12 - 3
src/lib/components/workspace/Prompts/PromptEditor.svelte

@@ -8,6 +8,7 @@
 	import LockClosed from '$lib/components/icons/LockClosed.svelte';
 	import LockClosed from '$lib/components/icons/LockClosed.svelte';
 	import AccessControlModal from '../common/AccessControlModal.svelte';
 	import AccessControlModal from '../common/AccessControlModal.svelte';
 	import { user } from '$lib/stores';
 	import { user } from '$lib/stores';
+	import { slugify } from '$lib/utils';
 
 
 	export let onSubmit: Function;
 	export let onSubmit: Function;
 	export let edit = false;
 	export let edit = false;
@@ -25,8 +26,15 @@
 
 
 	let showAccessControlModal = false;
 	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 () => {
 	const submitHandler = async () => {
@@ -64,7 +72,7 @@
 			command = prompt.command.at(0) === '/' ? prompt.command.slice(1) : prompt.command;
 			command = prompt.command.at(0) === '/' ? prompt.command.slice(1) : prompt.command;
 			content = prompt.content;
 			content = prompt.content;
 
 
-			accessControl = prompt?.access_control ?? null;
+			accessControl = prompt?.access_control ?? {};
 		}
 		}
 	});
 	});
 </script>
 </script>
@@ -125,6 +133,7 @@
 							class=" w-full bg-transparent outline-hidden"
 							class=" w-full bg-transparent outline-hidden"
 							placeholder={$i18n.t('Command')}
 							placeholder={$i18n.t('Command')}
 							bind:value={command}
 							bind:value={command}
+							on:input={handleCommandInput}
 							required
 							required
 							disabled={edit}
 							disabled={edit}
 						/>
 						/>

+ 18 - 1
src/lib/i18n/locales/ar-BH/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "",
 	"Allow Chat Delete": "",
 	"Allow Chat Deletion": "يستطيع حذف المحادثات",
 	"Allow Chat Deletion": "يستطيع حذف المحادثات",
 	"Allow Chat Edit": "",
 	"Allow Chat Edit": "",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "",
 	"Allow File Upload": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "",
 	"Allow non-local voices": "",
@@ -76,6 +78,7 @@
 	"Always": "",
 	"Always": "",
 	"Always Collapse Code Blocks": "",
 	"Always Collapse Code Blocks": "",
 	"Always Expand Details": "",
 	"Always Expand Details": "",
+	"Always Play Notification Sound": "",
 	"Amazing": "",
 	"Amazing": "",
 	"an assistant": "مساعد",
 	"an assistant": "مساعد",
 	"Analyzed": "",
 	"Analyzed": "",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "",
 	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "أدخل عنوان URL ل Github Raw",
 	"Enter Github Raw URL": "أدخل عنوان URL ل Github Raw",
@@ -511,10 +518,15 @@
 	"Export Tools": "",
 	"Export Tools": "",
 	"External": "",
 	"External": "",
 	"External Models": "",
 	"External Models": "",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "",
 	"Failed to add file.": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "فشل في إنشاء مفتاح API.",
 	"Failed to create API Key.": "فشل في إنشاء مفتاح API.",
 	"Failed to fetch models": "",
 	"Failed to fetch models": "",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "فشل في قراءة محتويات الحافظة",
 	"Failed to read clipboard contents": "فشل في قراءة محتويات الحافظة",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "",
 	"Failed to save models configuration": "",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "",
 	"Memory deleted successfully": "",
 	"Memory updated successfully": "",
 	"Memory updated successfully": "",
 	"Merge Responses": "",
 	"Merge Responses": "",
+	"Merged Response": "نتيجة الردود المدمجة",
 	"Message rating should be enabled to use this feature": "",
 	"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 من عرض الدردشة المشتركة",
 	"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)": "",
 	"Min P": "",
 	"Min P": "",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "كلمة المرور الجديدة",
 	"New Password": "كلمة المرور الجديدة",
 	"new-channel": "",
 	"new-channel": "",
 	"No content found": "",
 	"No content found": "",
+	"No content found in file.": "",
 	"No content to speak": "",
 	"No content to speak": "",
 	"No distance available": "",
 	"No distance available": "",
 	"No feedbacks found": "",
 	"No feedbacks found": "",
@@ -939,7 +956,7 @@
 	"Save Tag": "",
 	"Save Tag": "",
 	"Saved": "",
 	"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": "لم يعد حفظ سجلات الدردشة مباشرة في مساحة تخزين متصفحك مدعومًا. يرجى تخصيص بعض الوقت لتنزيل وحذف سجلات الدردشة الخاصة بك عن طريق النقر على الزر أدناه. لا تقلق، يمكنك بسهولة إعادة استيراد سجلات الدردشة الخاصة بك إلى الواجهة الخلفية من خلاله",
 	"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 to bottom when switching between branches": "",
+	"Scroll On Branch Change": "",
 	"Search": "البحث",
 	"Search": "البحث",
 	"Search a model": "البحث عن موديل",
 	"Search a model": "البحث عن موديل",
 	"Search Base": "",
 	"Search Base": "",

+ 18 - 1
src/lib/i18n/locales/ar/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "السماح بحذف المحادثة",
 	"Allow Chat Delete": "السماح بحذف المحادثة",
 	"Allow Chat Deletion": "السماح بحذف المحادثة",
 	"Allow Chat Deletion": "السماح بحذف المحادثة",
 	"Allow Chat Edit": "السماح بتعديل المحادثة",
 	"Allow Chat Edit": "السماح بتعديل المحادثة",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "السماح بتحميل الملفات",
 	"Allow File Upload": "السماح بتحميل الملفات",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "السماح بالأصوات غير المحلية",
 	"Allow non-local voices": "السماح بالأصوات غير المحلية",
@@ -76,6 +78,7 @@
 	"Always": "دائمًا",
 	"Always": "دائمًا",
 	"Always Collapse Code Blocks": "",
 	"Always Collapse Code Blocks": "",
 	"Always Expand Details": "",
 	"Always Expand Details": "",
+	"Always Play Notification Sound": "",
 	"Amazing": "رائع",
 	"Amazing": "رائع",
 	"an assistant": "مساعد",
 	"an assistant": "مساعد",
 	"Analyzed": "تم التحليل",
 	"Analyzed": "تم التحليل",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "أدخل مفتاح تحليل المستندات",
 	"Enter Document Intelligence Key": "أدخل مفتاح تحليل المستندات",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "أدخل النطاقات مفصولة بفواصل (مثال: example.com,site.org)",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "أدخل النطاقات مفصولة بفواصل (مثال: example.com,site.org)",
 	"Enter Exa API Key": "أدخل مفتاح API لـ Exa",
 	"Enter Exa API Key": "أدخل مفتاح API لـ Exa",
+	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "أدخل عنوان URL ل Github Raw",
 	"Enter Github Raw URL": "أدخل عنوان URL ل Github Raw",
@@ -511,10 +518,15 @@
 	"Export Tools": "تصدير الأدوات",
 	"Export Tools": "تصدير الأدوات",
 	"External": "",
 	"External": "",
 	"External Models": "نماذج خارجية",
 	"External Models": "نماذج خارجية",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "فشل في إضافة الملف.",
 	"Failed to add file.": "فشل في إضافة الملف.",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "فشل في إنشاء مفتاح API.",
 	"Failed to create API Key.": "فشل في إنشاء مفتاح API.",
 	"Failed to fetch models": "فشل في جلب النماذج",
 	"Failed to fetch models": "فشل في جلب النماذج",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "فشل في قراءة محتويات الحافظة",
 	"Failed to read clipboard contents": "فشل في قراءة محتويات الحافظة",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "فشل في حفظ إعدادات النماذج",
 	"Failed to save models configuration": "فشل في حفظ إعدادات النماذج",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "تم حذف الذاكرة بنجاح",
 	"Memory deleted successfully": "تم حذف الذاكرة بنجاح",
 	"Memory updated successfully": "تم تحديث الذاكرة بنجاح",
 	"Memory updated successfully": "تم تحديث الذاكرة بنجاح",
 	"Merge Responses": "دمج الردود",
 	"Merge Responses": "دمج الردود",
+	"Merged Response": "نتيجة الردود المدمجة",
 	"Message rating should be enabled to use this feature": "يجب تفعيل تقييم الرسائل لاستخدام هذه الميزة",
 	"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 من عرض الدردشة المشتركة",
 	"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)": "",
 	"Min P": "الحد الأدنى P",
 	"Min P": "الحد الأدنى P",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "كلمة المرور الجديدة",
 	"New Password": "كلمة المرور الجديدة",
 	"new-channel": "قناة جديدة",
 	"new-channel": "قناة جديدة",
 	"No content found": "لم يتم العثور على محتوى",
 	"No content found": "لم يتم العثور على محتوى",
+	"No content found in file.": "",
 	"No content to speak": "لا يوجد محتوى للتحدث عنه",
 	"No content to speak": "لا يوجد محتوى للتحدث عنه",
 	"No distance available": "لا توجد مسافة متاحة",
 	"No distance available": "لا توجد مسافة متاحة",
 	"No feedbacks found": "لم يتم العثور على ملاحظات",
 	"No feedbacks found": "لم يتم العثور على ملاحظات",
@@ -939,7 +956,7 @@
 	"Save Tag": "حفظ الوسم",
 	"Save Tag": "حفظ الوسم",
 	"Saved": "تم الحفظ",
 	"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": "لم يعد حفظ سجلات الدردشة مباشرة في مساحة تخزين متصفحك مدعومًا. يرجى تخصيص بعض الوقت لتنزيل وحذف سجلات الدردشة الخاصة بك عن طريق النقر على الزر أدناه. لا تقلق، يمكنك بسهولة إعادة استيراد سجلات الدردشة الخاصة بك إلى الواجهة الخلفية من خلاله",
 	"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 to bottom when switching between branches": "التمرير للأسفل عند التبديل بين الفروع",
+	"Scroll On Branch Change": "",
 	"Search": "البحث",
 	"Search": "البحث",
 	"Search a model": "البحث عن موديل",
 	"Search a model": "البحث عن موديل",
 	"Search Base": "قاعدة البحث",
 	"Search Base": "قاعدة البحث",

+ 18 - 1
src/lib/i18n/locales/bg-BG/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "Разреши изтриване на чат",
 	"Allow Chat Delete": "Разреши изтриване на чат",
 	"Allow Chat Deletion": "Позволи Изтриване на Чат",
 	"Allow Chat Deletion": "Позволи Изтриване на Чат",
 	"Allow Chat Edit": "Разреши редактиране на чат",
 	"Allow Chat Edit": "Разреши редактиране на чат",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "Разреши качване на файлове",
 	"Allow File Upload": "Разреши качване на файлове",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "Разреши нелокални гласове",
 	"Allow non-local voices": "Разреши нелокални гласове",
@@ -76,6 +78,7 @@
 	"Always": "Винаги",
 	"Always": "Винаги",
 	"Always Collapse Code Blocks": "",
 	"Always Collapse Code Blocks": "",
 	"Always Expand Details": "",
 	"Always Expand Details": "",
+	"Always Play Notification Sound": "",
 	"Amazing": "Невероятно",
 	"Amazing": "Невероятно",
 	"an assistant": "асистент",
 	"an assistant": "асистент",
 	"Analyzed": "Анализирано",
 	"Analyzed": "Анализирано",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "",
 	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "Въведете домейни, разделени със запетаи (напр. example.com,site.org)",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "Въведете домейни, разделени със запетаи (напр. example.com,site.org)",
 	"Enter Exa API Key": "Въведете API ключ за Exa",
 	"Enter Exa API Key": "Въведете API ключ за Exa",
+	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "Въведете URL адрес на Github Raw",
 	"Enter Github Raw URL": "Въведете URL адрес на Github Raw",
@@ -511,10 +518,15 @@
 	"Export Tools": "Експортиране на инструменти",
 	"Export Tools": "Експортиране на инструменти",
 	"External": "",
 	"External": "",
 	"External Models": "Външни модели",
 	"External Models": "Външни модели",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "Неуспешно добавяне на файл.",
 	"Failed to add file.": "Неуспешно добавяне на файл.",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "Неуспешно създаване на API ключ.",
 	"Failed to create API Key.": "Неуспешно създаване на API ключ.",
 	"Failed to fetch models": "Неуспешно извличане на модели",
 	"Failed to fetch models": "Неуспешно извличане на модели",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "Грешка при четене на съдържанието от клипборда",
 	"Failed to read clipboard contents": "Грешка при четене на съдържанието от клипборда",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "Неуспешно запазване на конфигурацията на моделите",
 	"Failed to save models configuration": "Неуспешно запазване на конфигурацията на моделите",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "Паметта е изтрита успешно",
 	"Memory deleted successfully": "Паметта е изтрита успешно",
 	"Memory updated successfully": "Паметта е актуализирана успешно",
 	"Memory updated successfully": "Паметта е актуализирана успешно",
 	"Merge Responses": "Обединяване на отговори",
 	"Merge Responses": "Обединяване на отговори",
+	"Merged Response": "Обединен отговор",
 	"Message rating should be enabled to use this feature": "Оценяването на съобщения трябва да бъде активирано, за да използвате тази функция",
 	"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 адреса ще могат да видят споделения чат.",
 	"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)": "",
 	"Min P": "Мин P",
 	"Min P": "Мин P",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "Нова парола",
 	"New Password": "Нова парола",
 	"new-channel": "нов-канал",
 	"new-channel": "нов-канал",
 	"No content found": "Не е намерено съдържание",
 	"No content found": "Не е намерено съдържание",
+	"No content found in file.": "",
 	"No content to speak": "Няма съдържание за изговаряне",
 	"No content to speak": "Няма съдържание за изговаряне",
 	"No distance available": "Няма налично разстояние",
 	"No distance available": "Няма налично разстояние",
 	"No feedbacks found": "Не са намерени обратни връзки",
 	"No feedbacks found": "Не са намерени обратни връзки",
@@ -939,7 +956,7 @@
 	"Save Tag": "Запиши таг",
 	"Save Tag": "Запиши таг",
 	"Saved": "Запазено",
 	"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": "Запазването на чат логове директно в хранилището на вашия браузър вече не се поддържа. Моля, отделете малко време, за да изтеглите и изтриете чат логовете си, като щракнете върху бутона по-долу. Не се притеснявайте, можете лесно да импортирате отново чат логовете си в бекенда чрез",
 	"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 to bottom when switching between branches": "Превъртане до дъното при превключване между клонове",
+	"Scroll On Branch Change": "",
 	"Search": "Търси",
 	"Search": "Търси",
 	"Search a model": "Търси модел",
 	"Search a model": "Търси модел",
 	"Search Base": "База за търсене",
 	"Search Base": "База за търсене",

+ 18 - 1
src/lib/i18n/locales/bn-BD/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "",
 	"Allow Chat Delete": "",
 	"Allow Chat Deletion": "চ্যাট ডিলিট করতে দিন",
 	"Allow Chat Deletion": "চ্যাট ডিলিট করতে দিন",
 	"Allow Chat Edit": "",
 	"Allow Chat Edit": "",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "",
 	"Allow File Upload": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "",
 	"Allow non-local voices": "",
@@ -76,6 +78,7 @@
 	"Always": "",
 	"Always": "",
 	"Always Collapse Code Blocks": "",
 	"Always Collapse Code Blocks": "",
 	"Always Expand Details": "",
 	"Always Expand Details": "",
+	"Always Play Notification Sound": "",
 	"Amazing": "",
 	"Amazing": "",
 	"an assistant": "একটা এসিস্ট্যান্ট",
 	"an assistant": "একটা এসিস্ট্যান্ট",
 	"Analyzed": "",
 	"Analyzed": "",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "",
 	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "গিটহাব কাঁচা URL লিখুন",
 	"Enter Github Raw URL": "গিটহাব কাঁচা URL লিখুন",
@@ -511,10 +518,15 @@
 	"Export Tools": "",
 	"Export Tools": "",
 	"External": "",
 	"External": "",
 	"External Models": "",
 	"External Models": "",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "",
 	"Failed to add file.": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "API Key তৈরি করা যায়নি।",
 	"Failed to create API Key.": "API Key তৈরি করা যায়নি।",
 	"Failed to fetch models": "",
 	"Failed to fetch models": "",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "ক্লিপবোর্ডের বিষয়বস্তু পড়া সম্ভব হয়নি",
 	"Failed to read clipboard contents": "ক্লিপবোর্ডের বিষয়বস্তু পড়া সম্ভব হয়নি",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "",
 	"Failed to save models configuration": "",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "",
 	"Memory deleted successfully": "",
 	"Memory updated successfully": "",
 	"Memory updated successfully": "",
 	"Merge Responses": "",
 	"Merge Responses": "",
+	"Merged Response": "একত্রিত প্রতিক্রিয়া ফলাফল",
 	"Message rating should be enabled to use this feature": "",
 	"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.": "আপনার লিঙ্ক তৈরি করার পরে আপনার পাঠানো বার্তাগুলি শেয়ার করা হবে না। ইউআরএল ব্যবহারকারীরা শেয়ার করা চ্যাট দেখতে পারবেন।",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "আপনার লিঙ্ক তৈরি করার পরে আপনার পাঠানো বার্তাগুলি শেয়ার করা হবে না। ইউআরএল ব্যবহারকারীরা শেয়ার করা চ্যাট দেখতে পারবেন।",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "",
 	"Min P": "",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "নতুন পাসওয়ার্ড",
 	"New Password": "নতুন পাসওয়ার্ড",
 	"new-channel": "",
 	"new-channel": "",
 	"No content found": "",
 	"No content found": "",
+	"No content found in file.": "",
 	"No content to speak": "",
 	"No content to speak": "",
 	"No distance available": "",
 	"No distance available": "",
 	"No feedbacks found": "",
 	"No feedbacks found": "",
@@ -939,7 +956,7 @@
 	"Save Tag": "",
 	"Save Tag": "",
 	"Saved": "",
 	"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": "মাধ্যমে",
 	"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 to bottom when switching between branches": "",
+	"Scroll On Branch Change": "",
 	"Search": "অনুসন্ধান",
 	"Search": "অনুসন্ধান",
 	"Search a model": "মডেল অনুসন্ধান করুন",
 	"Search a model": "মডেল অনুসন্ধান করুন",
 	"Search Base": "",
 	"Search Base": "",

+ 18 - 1
src/lib/i18n/locales/bo-TB/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "ཁ་བརྡ་བསུབ་པར་གནང་བ་སྤྲོད་པ།",
 	"Allow Chat Delete": "ཁ་བརྡ་བསུབ་པར་གནང་བ་སྤྲོད་པ།",
 	"Allow Chat Deletion": "ཁ་བརྡ་བསུབ་པར་གནང་བ་སྤྲོད་པ།",
 	"Allow Chat Deletion": "ཁ་བརྡ་བསུབ་པར་གནང་བ་སྤྲོད་པ།",
 	"Allow Chat Edit": "ཁ་བརྡ་ཞུ་དག་ལ་གནང་བ་སྤྲོད་པ།",
 	"Allow Chat Edit": "ཁ་བརྡ་ཞུ་དག་ལ་གནང་བ་སྤྲོད་པ།",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "ཡིག་ཆ་སྤར་བར་གནང་བ་སྤྲོད་པ།",
 	"Allow File Upload": "ཡིག་ཆ་སྤར་བར་གནང་བ་སྤྲོད་པ།",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "ས་གནས་མིན་པའི་སྐད་གདངས་ལ་གནང་བ་སྤྲོད་པ།",
 	"Allow non-local voices": "ས་གནས་མིན་པའི་སྐད་གདངས་ལ་གནང་བ་སྤྲོད་པ།",
@@ -76,6 +78,7 @@
 	"Always": "རྟག་ཏུ།",
 	"Always": "རྟག་ཏུ།",
 	"Always Collapse Code Blocks": "རྟག་ཏུ་ཀོཌ་གཏོགས་ཁོངས་བསྐུམ་པ།",
 	"Always Collapse Code Blocks": "རྟག་ཏུ་ཀོཌ་གཏོགས་ཁོངས་བསྐུམ་པ།",
 	"Always Expand Details": "རྟག་ཏུ་ཞིབ་ཕྲ་རྒྱ་བསྐྱེད་པ།",
 	"Always Expand Details": "རྟག་ཏུ་ཞིབ་ཕྲ་རྒྱ་བསྐྱེད་པ།",
+	"Always Play Notification Sound": "",
 	"Amazing": "ངོ་མཚར་ཆེན།",
 	"Amazing": "ངོ་མཚར་ཆེན།",
 	"an assistant": "ལག་རོགས་པ།",
 	"an assistant": "ལག་རོགས་པ།",
 	"Analyzed": "དབྱེ་ཞིབ་བྱས་པ།",
 	"Analyzed": "དབྱེ་ཞིབ་བྱས་པ།",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "ཡིག་ཆའི་རིག་ནུས་ལྡེ་མིག་འཇུག་པ།",
 	"Enter Document Intelligence Key": "ཡིག་ཆའི་རིག་ནུས་ལྡེ་མིག་འཇུག་པ།",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "ཚེག་བསྐུངས་ཀྱིས་ལོགས་སུ་བཀར་བའི་ཁྱབ་ཁོངས་འཇུག་པ། (དཔེར་ན། example.com,site.org)",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "ཚེག་བསྐུངས་ཀྱིས་ལོགས་སུ་བཀར་བའི་ཁྱབ་ཁོངས་འཇུག་པ། (དཔེར་ན། example.com,site.org)",
 	"Enter Exa API Key": "Exa API ལྡེ་མིག་འཇུག་པ།",
 	"Enter Exa API Key": "Exa API ལྡེ་མིག་འཇུག་པ།",
+	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "Github Raw URL འཇུག་པ།",
 	"Enter Github Raw URL": "Github Raw URL འཇུག་པ།",
@@ -511,10 +518,15 @@
 	"Export Tools": "ལག་ཆ་ཕྱིར་གཏོང་།",
 	"Export Tools": "ལག་ཆ་ཕྱིར་གཏོང་།",
 	"External": "ཕྱི་རོལ།",
 	"External": "ཕྱི་རོལ།",
 	"External Models": "ཕྱི་རོལ་གྱི་དཔེ་དབྱིབས།",
 	"External Models": "ཕྱི་རོལ་གྱི་དཔེ་དབྱིབས།",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "ཡིག་ཆ་སྣོན་པར་མ་ཐུབ།",
 	"Failed to add file.": "ཡིག་ཆ་སྣོན་པར་མ་ཐུབ།",
 	"Failed to connect to {{URL}} OpenAPI tool server": "{{URL}} OpenAPI ལག་ཆའི་སར་བར་ལ་སྦྲེལ་མཐུད་བྱེད་མ་ཐུབ།",
 	"Failed to connect to {{URL}} OpenAPI tool server": "{{URL}} OpenAPI ལག་ཆའི་སར་བར་ལ་སྦྲེལ་མཐུད་བྱེད་མ་ཐུབ།",
 	"Failed to create API Key.": "API ལྡེ་མིག་བཟོ་མ་ཐུབ།",
 	"Failed to create API Key.": "API ལྡེ་མིག་བཟོ་མ་ཐུབ།",
 	"Failed to fetch models": "དཔེ་དབྱིབས་ལེན་པར་མ་ཐུབ།",
 	"Failed to fetch models": "དཔེ་དབྱིབས་ལེན་པར་མ་ཐུབ།",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "སྦྱར་སྡེར་གྱི་ནང་དོན་ཀློག་མ་ཐུབ།",
 	"Failed to read clipboard contents": "སྦྱར་སྡེར་གྱི་ནང་དོན་ཀློག་མ་ཐུབ།",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "དཔེ་དབྱིབས་སྒྲིག་འགོད་ཉར་ཚགས་བྱེད་མ་ཐུབ།",
 	"Failed to save models configuration": "དཔེ་དབྱིབས་སྒྲིག་འགོད་ཉར་ཚགས་བྱེད་མ་ཐུབ།",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "དྲན་ཤེས་ལེགས་པར་བསུབས་ཟིན།",
 	"Memory deleted successfully": "དྲན་ཤེས་ལེགས་པར་བསུབས་ཟིན།",
 	"Memory updated successfully": "དྲན་ཤེས་ལེགས་པར་གསར་སྒྱུར་བྱས་ཟིན།",
 	"Memory updated successfully": "དྲན་ཤེས་ལེགས་པར་གསར་སྒྱུར་བྱས་ཟིན།",
 	"Merge Responses": "ལན་ཟླ་སྒྲིལ།",
 	"Merge Responses": "ལན་ཟླ་སྒྲིལ།",
+	"Merged Response": "བསྡུར་མཐུན་གྱི་ལན་གསལ་གནས་ཡོད།",
 	"Message rating should be enabled to use this feature": "ཁྱད་ཆོས་འདི་བེད་སྤྱོད་གཏོང་བར་འཕྲིན་ལ་སྐར་མ་སྤྲོད་པ་སྒུལ་བསྐྱོད་བྱེད་དགོས།",
 	"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 ཡོད་པའི་བེད་སྤྱོད་མཁན་ཚོས་མཉམ་སྤྱོད་ཁ་བརྡ་ལྟ་ཐུབ་ངེས།",
 	"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)": "",
 	"Min P": "P ཉུང་ཤོས།",
 	"Min P": "P ཉུང་ཤོས།",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "གསང་གྲངས་གསར་པ།",
 	"New Password": "གསང་གྲངས་གསར་པ།",
 	"new-channel": "བགྲོ་གླེང་གསར་པ།",
 	"new-channel": "བགྲོ་གླེང་གསར་པ།",
 	"No content found": "ནང་དོན་མ་རྙེད།",
 	"No content found": "ནང་དོན་མ་རྙེད།",
+	"No content found in file.": "",
 	"No content to speak": "བཤད་རྒྱུའི་ནང་དོན་མེད།",
 	"No content to speak": "བཤད་རྒྱུའི་ནང་དོན་མེད།",
 	"No distance available": "ཐག་རིང་ཚད་མེད།",
 	"No distance available": "ཐག་རིང་ཚད་མེད།",
 	"No feedbacks found": "བསམ་འཆར་མ་རྙེད།",
 	"No feedbacks found": "བསམ་འཆར་མ་རྙེད།",
@@ -939,7 +956,7 @@
 	"Save Tag": "རྟགས་ཉར་ཚགས།",
 	"Save Tag": "རྟགས་ཉར་ཚགས།",
 	"Saved": "ཉར་ཚགས་བྱས།",
 	"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": "ཁ་བརྡའི་ཟིན་ཐོ་ཐད་ཀར་ཁྱེད་ཀྱི་བརྡ་འཚོལ་ཆས་ཀྱི་གསོག་ཆས་སུ་ཉར་ཚགས་བྱེད་པར་ད་ནས་བཟུང་རྒྱབ་སྐྱོར་མེད། གཤམ་གྱི་མཐེབ་གནོན་མནན་ནས་ཁྱེད་ཀྱི་ཁ་བརྡའི་ཟིན་ཐོ་ཕབ་ལེན་དང་བསུབ་པར་དུས་ཚོད་ཅུང་ཟད་བླང་རོགས། སེམས་ཁྲལ་མེད། ཁྱེད་ཀྱིས་སྟབས་བདེ་པོར་ཁྱེད་ཀྱི་ཁ་བརྡའི་ཟིན་ཐོ་རྒྱབ་སྣེ་ལ་བསྐྱར་དུ་ནང་འདྲེན་བྱེད་ཐུབ།",
 	"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 to bottom when switching between branches": "ཡན་ལག་བརྗེ་སྐབས་མཐིལ་དུ་འགྲིལ་བ།",
+	"Scroll On Branch Change": "",
 	"Search": "འཚོལ་བཤེར།",
 	"Search": "འཚོལ་བཤེར།",
 	"Search a model": "དཔེ་དབྱིབས་ཤིག་འཚོལ་བ།",
 	"Search a model": "དཔེ་དབྱིབས་ཤིག་འཚོལ་བ།",
 	"Search Base": "འཚོལ་བཤེར་གཞི་རྩ།",
 	"Search Base": "འཚོལ་བཤེར་གཞི་རྩ།",

+ 50 - 33
src/lib/i18n/locales/ca-ES/translation.json

@@ -57,17 +57,19 @@
 	"All": "Tots",
 	"All": "Tots",
 	"All Documents": "Tots els documents",
 	"All Documents": "Tots els documents",
 	"All models deleted successfully": "Tots els models s'han eliminat correctament",
 	"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 Controls": "Permetre els controls de xat",
 	"Allow Chat Delete": "Permetre eliminar el xat",
 	"Allow Chat Delete": "Permetre eliminar el xat",
 	"Allow Chat Deletion": "Permetre la supressió del xat",
 	"Allow Chat Deletion": "Permetre la supressió del xat",
 	"Allow Chat Edit": "Permetre editar el xat",
 	"Allow Chat Edit": "Permetre editar el xat",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "Permetre la pujada d'arxius",
 	"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 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 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 User Location": "Permetre la ubicació de l'usuari",
 	"Allow Voice Interruption in Call": "Permetre la interrupció de la veu en una trucada",
 	"Allow Voice Interruption in Call": "Permetre la interrupció de la veu en una trucada",
 	"Allowed Endpoints": "Punts d'accés permesos",
 	"Allowed Endpoints": "Punts d'accés permesos",
@@ -76,6 +78,7 @@
 	"Always": "Sempre",
 	"Always": "Sempre",
 	"Always Collapse Code Blocks": "Reduir sempre els blocs de codi",
 	"Always Collapse Code Blocks": "Reduir sempre els blocs de codi",
 	"Always Expand Details": "Expandir sempre els detalls",
 	"Always Expand Details": "Expandir sempre els detalls",
+	"Always Play Notification Sound": "",
 	"Amazing": "Al·lucinant",
 	"Amazing": "Al·lucinant",
 	"an assistant": "un assistent",
 	"an assistant": "un assistent",
 	"Analyzed": "Analitzat",
 	"Analyzed": "Analitzat",
@@ -83,7 +86,7 @@
 	"and": "i",
 	"and": "i",
 	"and {{COUNT}} more": "i {{COUNT}} més",
 	"and {{COUNT}} more": "i {{COUNT}} més",
 	"and create a new shared link.": "i crear un nou enllaç compartit.",
 	"and create a new shared link.": "i crear un nou enllaç compartit.",
-	"Android": "",
+	"Android": "Android",
 	"API Base URL": "URL Base de l'API",
 	"API Base URL": "URL Base de l'API",
 	"API Key": "clau API",
 	"API Key": "clau API",
 	"API Key created.": "clau API creada.",
 	"API Key created.": "clau API creada.",
@@ -245,7 +248,7 @@
 	"Copied shared chat URL to clipboard!": "S'ha copiat l'URL compartida al porta-retalls!",
 	"Copied shared chat URL to clipboard!": "S'ha copiat l'URL compartida al porta-retalls!",
 	"Copied to clipboard": "Copiat al porta-retalls",
 	"Copied to clipboard": "Copiat al porta-retalls",
 	"Copy": "Copiar",
 	"Copy": "Copiar",
-	"Copy Formatted Text": "",
+	"Copy Formatted Text": "Copiar el text formatat",
 	"Copy last code block": "Copiar l'últim bloc de codi",
 	"Copy last code block": "Copiar l'últim bloc de codi",
 	"Copy last response": "Copiar l'última resposta",
 	"Copy last response": "Copiar l'última resposta",
 	"Copy Link": "Copiar l'enllaç",
 	"Copy Link": "Copiar l'enllaç",
@@ -308,7 +311,7 @@
 	"Deleted User": "Usuari eliminat",
 	"Deleted User": "Usuari eliminat",
 	"Describe your knowledge base and objectives": "Descriu la teva base de coneixement i objectius",
 	"Describe your knowledge base and objectives": "Descriu la teva base de coneixement i objectius",
 	"Description": "Descripció",
 	"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",
 	"Didn't fully follow instructions": "No s'han seguit les instruccions completament",
 	"Direct": "Directe",
 	"Direct": "Directe",
 	"Direct Connections": "Connexions directes",
 	"Direct Connections": "Connexions directes",
@@ -364,7 +367,7 @@
 	"e.g. my_filter": "p. ex. els_meus_filtres",
 	"e.g. my_filter": "p. ex. els_meus_filtres",
 	"e.g. my_tools": "p. ex. les_meves_eines",
 	"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. 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": "Editar",
 	"Edit Arena Model": "Editar model de l'Arena",
 	"Edit Arena Model": "Editar model de l'Arena",
 	"Edit Channel": "Editar el canal",
 	"Edit Channel": "Editar el canal",
@@ -414,8 +417,12 @@
 	"Enter Document Intelligence Key": "Introdueix la clau de Document Intelligence",
 	"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 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 Exa API Key": "Introdueix la clau API de d'EXA",
-	"Enter Firecrawl API Base URL": "",
-	"Enter Firecrawl 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": "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 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 API Key": "Introdueix la clau API de Google PSE",
 	"Enter Google PSE Engine Id": "Introdueix l'identificador del motor PSE de Google",
 	"Enter Google PSE Engine Id": "Introdueix l'identificador del motor PSE de Google",
@@ -433,8 +440,8 @@
 	"Enter Mojeek Search API Key": "Introdueix la clau API de Mojeek Search",
 	"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 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 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 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 reasoning effort": "Introdueix l'esforç de raonament",
 	"Enter Sampler (e.g. Euler a)": "Introdueix el mostrejador (p.ex. Euler a)",
 	"Enter Sampler (e.g. Euler a)": "Introdueix el mostrejador (p.ex. Euler a)",
@@ -452,13 +459,13 @@
 	"Enter server host": "Introdueix el servidor",
 	"Enter server host": "Introdueix el servidor",
 	"Enter server label": "Introdueix l'etiqueta del servidor",
 	"Enter server label": "Introdueix l'etiqueta del servidor",
 	"Enter server port": "Introdueix el port 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 stop sequence": "Introdueix la seqüència de parada",
 	"Enter system prompt": "Introdueix la indicació de sistema",
 	"Enter system prompt": "Introdueix la indicació de sistema",
 	"Enter system prompt here": "Entra la indicació de sistema aquí",
 	"Enter system prompt here": "Entra la indicació de sistema aquí",
 	"Enter Tavily API Key": "Introdueix la clau API de Tavily",
 	"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 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 Tika Server URL": "Introdueix l'URL del servidor Tika",
 	"Enter timeout in seconds": "Entra el temps màxim en segons",
 	"Enter timeout in seconds": "Entra el temps màxim en segons",
@@ -511,10 +518,15 @@
 	"Export Tools": "Exportar les eines",
 	"Export Tools": "Exportar les eines",
 	"External": "Extern",
 	"External": "Extern",
 	"External Models": "Models externs",
 	"External Models": "Models externs",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "No s'ha pogut afegir l'arxiu.",
 	"Failed to add file.": "No s'ha pogut afegir l'arxiu.",
 	"Failed to connect to {{URL}} OpenAPI tool server": "No s'ha pogut connecta al servidor d'eines OpenAPI {{URL}}",
 	"Failed to connect to {{URL}} OpenAPI tool server": "No s'ha pogut connecta al servidor d'eines OpenAPI {{URL}}",
 	"Failed to create API Key.": "No s'ha pogut crear la clau API.",
 	"Failed to create API Key.": "No s'ha pogut crear la clau API.",
 	"Failed to fetch models": "No s'han pogut obtenir els models",
 	"Failed to fetch models": "No s'han pogut obtenir els models",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "No s'ha pogut llegir el contingut del porta-retalls",
 	"Failed to read clipboard contents": "No s'ha pogut llegir el contingut del porta-retalls",
 	"Failed to save connections": "No s'han pogut desar les connexions",
 	"Failed to save connections": "No s'han pogut desar les connexions",
 	"Failed to save models configuration": "No s'ha pogut desar la configuració dels models",
 	"Failed to save models configuration": "No s'ha pogut desar la configuració dels models",
@@ -539,8 +551,8 @@
 	"Filter is now globally enabled": "El filtre ha estat activat globalment",
 	"Filter is now globally enabled": "El filtre ha estat activat globalment",
 	"Filters": "Filtres",
 	"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.",
 	"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",
 	"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",
 	"Focus chat input": "Estableix el focus a l'entrada del xat",
 	"Folder deleted successfully": "Carpeta eliminada correctament",
 	"Folder deleted successfully": "Carpeta eliminada correctament",
@@ -605,8 +617,8 @@
 	"Hybrid Search": "Cerca híbrida",
 	"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.",
 	"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",
 	"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",
 	"Ignite curiosity": "Despertar la curiositat",
 	"Image": "Imatge",
 	"Image": "Imatge",
 	"Image Compression": "Compressió d'imatges",
 	"Image Compression": "Compressió d'imatges",
@@ -667,7 +679,7 @@
 	"Label": "Etiqueta",
 	"Label": "Etiqueta",
 	"Landing Page Mode": "Mode de la pàgina d'entrada",
 	"Landing Page Mode": "Mode de la pàgina d'entrada",
 	"Language": "Idioma",
 	"Language": "Idioma",
-	"Language Locales": "",
+	"Language Locales": "Localització d'idiomes",
 	"Last Active": "Activitat recent",
 	"Last Active": "Activitat recent",
 	"Last Modified": "Modificació",
 	"Last Modified": "Modificació",
 	"Last reply": "Darrera resposta",
 	"Last reply": "Darrera resposta",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "Memòria eliminada correctament",
 	"Memory deleted successfully": "Memòria eliminada correctament",
 	"Memory updated successfully": "Memòria actualitzada correctament",
 	"Memory updated successfully": "Memòria actualitzada correctament",
 	"Merge Responses": "Fusionar les respostes",
 	"Merge Responses": "Fusionar les respostes",
+	"Merged Response": "Resposta combinada",
 	"Message rating should be enabled to use this feature": "La classificació dels missatges s'hauria d'activar per utilitzar aquesta funció",
 	"Message rating should be enabled to use this feature": "La classificació dels missatges s'hauria d'activar per utilitzar aquesta funció",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Els missatges enviats després de crear el teu enllaç no es compartiran. Els usuaris amb l'URL podran veure el xat compartit.",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Els missatges enviats després de crear el teu enllaç no es compartiran. Els usuaris amb l'URL podran veure el xat compartit.",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "Min P",
 	"Min P": "Min P",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Eta de Mirostat",
 	"Mirostat Eta": "Eta de Mirostat",
@@ -761,6 +777,7 @@
 	"New Password": "Nova contrasenya",
 	"New Password": "Nova contrasenya",
 	"new-channel": "nou-canal",
 	"new-channel": "nou-canal",
 	"No content found": "No s'ha trobat contingut",
 	"No content found": "No s'ha trobat contingut",
+	"No content found in file.": "",
 	"No content to speak": "No hi ha contingut per parlar",
 	"No content to speak": "No hi ha contingut per parlar",
 	"No distance available": "No hi ha distància disponible",
 	"No distance available": "No hi ha distància disponible",
 	"No feedbacks found": "No s'han trobat comentaris",
 	"No feedbacks found": "No s'han trobat comentaris",
@@ -851,8 +868,8 @@
 	"Pipelines Valves": "Vàlvules de les Pipelines",
 	"Pipelines Valves": "Vàlvules de les Pipelines",
 	"Plain text (.txt)": "Text pla (.txt)",
 	"Plain text (.txt)": "Text pla (.txt)",
 	"Playground": "Zona de jocs",
 	"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 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 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ó",
 	"Please enter a prompt": "Si us plau, entra una indicació",
@@ -898,11 +915,11 @@
 	"References from": "Referències de",
 	"References from": "Referències de",
 	"Refused when it shouldn't have": "Refusat quan no hauria d'haver estat",
 	"Refused when it shouldn't have": "Refusat quan no hauria d'haver estat",
 	"Regenerate": "Regenerar",
 	"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ó",
 	"Release Notes": "Notes de la versió",
 	"Relevance": "Rellevància",
 	"Relevance": "Rellevància",
-	"Relevance Threshold": "",
+	"Relevance Threshold": "Límit de rellevància",
 	"Remove": "Eliminar",
 	"Remove": "Eliminar",
 	"Remove Model": "Eliminar el model",
 	"Remove Model": "Eliminar el model",
 	"Rename": "Canviar el nom",
 	"Rename": "Canviar el nom",
@@ -939,7 +956,7 @@
 	"Save Tag": "Desar l'etiqueta",
 	"Save Tag": "Desar l'etiqueta",
 	"Saved": "Desat",
 	"Saved": "Desat",
 	"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": "Desar els registres de xat directament a l'emmagatzematge del teu navegador ja no està suportat. Si us plau, descarregr i elimina els registres de xat fent clic al botó de sota. No et preocupis, pots tornar a importar fàcilment els teus registres de xat al backend a través de",
 	"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": "Desar els registres de xat directament a l'emmagatzematge del teu navegador ja no està suportat. Si us plau, descarregr i elimina els registres de xat fent clic al botó de sota. No et preocupis, pots tornar a importar fàcilment els teus registres de xat al backend a través de",
-	"Scroll to bottom when switching between branches": "Desplaçar a la part inferior quan es canviï de branca",
+	"Scroll On Branch Change": "",
 	"Search": "Cercar",
 	"Search": "Cercar",
 	"Search a model": "Cercar un model",
 	"Search a model": "Cercar un model",
 	"Search Base": "Base de cerca",
 	"Search Base": "Base de cerca",
@@ -1032,8 +1049,8 @@
 	"Sign up to {{WEBUI_NAME}}": "Registrar-se a {{WEBUI_NAME}}",
 	"Sign up to {{WEBUI_NAME}}": "Registrar-se a {{WEBUI_NAME}}",
 	"Signing in to {{WEBUI_NAME}}": "Iniciant sessió a {{WEBUI_NAME}}",
 	"Signing in to {{WEBUI_NAME}}": "Iniciant sessió a {{WEBUI_NAME}}",
 	"sk-1234": "sk-1234",
 	"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",
 	"Source": "Font",
 	"Speech Playback Speed": "Velocitat de la parla",
 	"Speech Playback Speed": "Velocitat de la parla",
 	"Speech recognition error: {{error}}": "Error de reconeixement de veu: {{error}}",
 	"Speech recognition error: {{error}}": "Error de reconeixement de veu: {{error}}",
@@ -1061,7 +1078,7 @@
 	"Tap to interrupt": "Prem per interrompre",
 	"Tap to interrupt": "Prem per interrompre",
 	"Tasks": "Tasques",
 	"Tasks": "Tasques",
 	"Tavily API Key": "Clau API de Tavily",
 	"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ó:",
 	"Tell us more:": "Dona'ns més informació:",
 	"Temperature": "Temperatura",
 	"Temperature": "Temperatura",
 	"Template": "Plantilla",
 	"Template": "Plantilla",
@@ -1184,8 +1201,8 @@
 	"Use Gravatar": "Utilitzar Gravatar",
 	"Use Gravatar": "Utilitzar Gravatar",
 	"Use groups to group your users and assign permissions.": "Utilitza grups per agrupar els usuaris i assignar permisos.",
 	"Use groups to group your users and assign permissions.": "Utilitza grups per agrupar els usuaris i assignar permisos.",
 	"Use Initials": "Utilitzar inicials",
 	"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_mlock (Ollama)": "use_mlock (Ollama)",
 	"use_mmap (Ollama)": "use_mmap (Ollama)",
 	"use_mmap (Ollama)": "use_mmap (Ollama)",
 	"user": "usuari",
 	"user": "usuari",
@@ -1203,7 +1220,7 @@
 	"variable": "variable",
 	"variable": "variable",
 	"variable to have them replaced with clipboard content.": "variable per tenir-les reemplaçades amb el contingut del porta-retalls.",
 	"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 Connection": "Verificar la connexió",
-	"Verify SSL Certificate": "",
+	"Verify SSL Certificate": "Verificar el certificat SSL",
 	"Version": "Versió",
 	"Version": "Versió",
 	"Version {{selectedVersion}} of {{totalVersions}}": "Versió {{selectedVersion}} de {{totalVersions}}",
 	"Version {{selectedVersion}} of {{totalVersions}}": "Versió {{selectedVersion}} de {{totalVersions}}",
 	"View Replies": "Veure les respostes",
 	"View Replies": "Veure les respostes",
@@ -1218,7 +1235,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ó.",
 	"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": "Web",
 	"Web API": "Web API",
 	"Web API": "Web API",
-	"Web Loader Engine": "",
+	"Web Loader Engine": "Motor de càrrega Web",
 	"Web Search": "Cerca la web",
 	"Web Search": "Cerca la web",
 	"Web Search Engine": "Motor de cerca de la web",
 	"Web Search Engine": "Motor de cerca de la web",
 	"Web Search in Chat": "Cerca a internet al xat",
 	"Web Search in Chat": "Cerca a internet al xat",

+ 18 - 1
src/lib/i18n/locales/ceb-PH/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "",
 	"Allow Chat Delete": "",
 	"Allow Chat Deletion": "Tugoti nga mapapas ang mga chat",
 	"Allow Chat Deletion": "Tugoti nga mapapas ang mga chat",
 	"Allow Chat Edit": "",
 	"Allow Chat Edit": "",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "",
 	"Allow File Upload": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "",
 	"Allow non-local voices": "",
@@ -76,6 +78,7 @@
 	"Always": "",
 	"Always": "",
 	"Always Collapse Code Blocks": "",
 	"Always Collapse Code Blocks": "",
 	"Always Expand Details": "",
 	"Always Expand Details": "",
+	"Always Play Notification Sound": "",
 	"Amazing": "",
 	"Amazing": "",
 	"an assistant": "usa ka katabang",
 	"an assistant": "usa ka katabang",
 	"Analyzed": "",
 	"Analyzed": "",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "",
 	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "",
 	"Enter Github Raw URL": "",
@@ -511,10 +518,15 @@
 	"Export Tools": "",
 	"Export Tools": "",
 	"External": "",
 	"External": "",
 	"External Models": "",
 	"External Models": "",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "",
 	"Failed to add file.": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "",
 	"Failed to create API Key.": "",
 	"Failed to fetch models": "",
 	"Failed to fetch models": "",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "Napakyas sa pagbasa sa sulod sa clipboard",
 	"Failed to read clipboard contents": "Napakyas sa pagbasa sa sulod sa clipboard",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "",
 	"Failed to save models configuration": "",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "",
 	"Memory deleted successfully": "",
 	"Memory updated successfully": "",
 	"Memory updated successfully": "",
 	"Merge Responses": "",
 	"Merge Responses": "",
+	"Merged Response": "Gihiusa nga Resulta sa Tubag",
 	"Message rating should be enabled to use this feature": "",
 	"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.": "",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "",
 	"Min P": "",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "Bag-ong Password",
 	"New Password": "Bag-ong Password",
 	"new-channel": "",
 	"new-channel": "",
 	"No content found": "",
 	"No content found": "",
+	"No content found in file.": "",
 	"No content to speak": "",
 	"No content to speak": "",
 	"No distance available": "",
 	"No distance available": "",
 	"No feedbacks found": "",
 	"No feedbacks found": "",
@@ -939,7 +956,7 @@
 	"Save Tag": "",
 	"Save Tag": "",
 	"Saved": "",
 	"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": "Ang pag-save sa mga chat log direkta sa imong browser storage dili na suportado. ",
 	"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": "Ang pag-save sa mga chat log direkta sa imong browser storage dili na suportado. ",
-	"Scroll to bottom when switching between branches": "",
+	"Scroll On Branch Change": "",
 	"Search": "Pagpanukiduki",
 	"Search": "Pagpanukiduki",
 	"Search a model": "",
 	"Search a model": "",
 	"Search Base": "",
 	"Search Base": "",

+ 18 - 1
src/lib/i18n/locales/cs-CZ/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "Povolit odstranění chatu",
 	"Allow Chat Delete": "Povolit odstranění chatu",
 	"Allow Chat Deletion": "Povolit odstranění chatu",
 	"Allow Chat Deletion": "Povolit odstranění chatu",
 	"Allow Chat Edit": "Povolit úpravu chatu",
 	"Allow Chat Edit": "Povolit úpravu chatu",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "Povolit nahrávat soubory",
 	"Allow File Upload": "Povolit nahrávat soubory",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "Povolit ne-místní hlasy",
 	"Allow non-local voices": "Povolit ne-místní hlasy",
@@ -76,6 +78,7 @@
 	"Always": "",
 	"Always": "",
 	"Always Collapse Code Blocks": "",
 	"Always Collapse Code Blocks": "",
 	"Always Expand Details": "",
 	"Always Expand Details": "",
+	"Always Play Notification Sound": "",
 	"Amazing": "",
 	"Amazing": "",
 	"an assistant": "asistent",
 	"an assistant": "asistent",
 	"Analyzed": "",
 	"Analyzed": "",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "",
 	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "Zadejte URL adresu Github Raw",
 	"Enter Github Raw URL": "Zadejte URL adresu Github Raw",
@@ -511,10 +518,15 @@
 	"Export Tools": "Exportní nástroje",
 	"Export Tools": "Exportní nástroje",
 	"External": "",
 	"External": "",
 	"External Models": "Externí modely",
 	"External Models": "Externí modely",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "Nepodařilo se přidat soubor.",
 	"Failed to add file.": "Nepodařilo se přidat soubor.",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "Nepodařilo se vytvořit API klíč.",
 	"Failed to create API Key.": "Nepodařilo se vytvořit API klíč.",
 	"Failed to fetch models": "",
 	"Failed to fetch models": "",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "Nepodařilo se přečíst obsah schránky",
 	"Failed to read clipboard contents": "Nepodařilo se přečíst obsah schránky",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "",
 	"Failed to save models configuration": "",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "Paměť byla úspěšně smazána",
 	"Memory deleted successfully": "Paměť byla úspěšně smazána",
 	"Memory updated successfully": "Paměť úspěšně aktualizována",
 	"Memory updated successfully": "Paměť úspěšně aktualizována",
 	"Merge Responses": "Sloučit odpovědi",
 	"Merge Responses": "Sloučit odpovědi",
+	"Merged Response": "Sloučená odpověď",
 	"Message rating should be enabled to use this feature": "Hodnocení zpráv musí být povoleno, aby bylo možné tuto funkci používat.",
 	"Message rating should be enabled to use this feature": "Hodnocení zpráv musí být povoleno, aby bylo možné tuto funkci používat.",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Zprávy, které odešlete po vytvoření odkazu, nebudou sdíleny. Uživatelé s URL budou moci zobrazit sdílený chat.",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Zprávy, které odešlete po vytvoření odkazu, nebudou sdíleny. Uživatelé s URL budou moci zobrazit sdílený chat.",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "Min P",
 	"Min P": "Min P",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "Nové heslo",
 	"New Password": "Nové heslo",
 	"new-channel": "",
 	"new-channel": "",
 	"No content found": "Nebyly nalezeny žádné obsahové informace.",
 	"No content found": "Nebyly nalezeny žádné obsahové informace.",
+	"No content found in file.": "",
 	"No content to speak": "Žádný obsah k diskusi.",
 	"No content to speak": "Žádný obsah k diskusi.",
 	"No distance available": "Není dostupná žádná vzdálenost",
 	"No distance available": "Není dostupná žádná vzdálenost",
 	"No feedbacks found": "Žádná zpětná vazba nenalezena",
 	"No feedbacks found": "Žádná zpětná vazba nenalezena",
@@ -939,7 +956,7 @@
 	"Save Tag": "Uložit štítek",
 	"Save Tag": "Uložit štítek",
 	"Saved": "Uloženo",
 	"Saved": "Uloženo",
 	"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": "Ukládání záznamů chatu přímo do úložiště vašeho prohlížeče již není podporováno. Věnujte prosím chvíli stažení a smazání svých záznamů chatu kliknutím na tlačítko níže. Nemějte obavy, můžete snadno znovu importovat své záznamy chatu na backend prostřednictvím",
 	"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": "Ukládání záznamů chatu přímo do úložiště vašeho prohlížeče již není podporováno. Věnujte prosím chvíli stažení a smazání svých záznamů chatu kliknutím na tlačítko níže. Nemějte obavy, můžete snadno znovu importovat své záznamy chatu na backend prostřednictvím",
-	"Scroll to bottom when switching between branches": "Přejít na konec při přepínání mezi větvemi.",
+	"Scroll On Branch Change": "",
 	"Search": "Vyhledávání",
 	"Search": "Vyhledávání",
 	"Search a model": "Vyhledat model",
 	"Search a model": "Vyhledat model",
 	"Search Base": "",
 	"Search Base": "",

+ 15 - 1
src/lib/i18n/locales/da-DK/translation.json

@@ -414,6 +414,10 @@
 	"Enter Document Intelligence Key": "",
 	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "Indtast Github Raw URL",
 	"Enter Github Raw URL": "Indtast Github Raw URL",
@@ -511,10 +515,15 @@
 	"Export Tools": "Eksportér værktøjer",
 	"Export Tools": "Eksportér værktøjer",
 	"External": "",
 	"External": "",
 	"External Models": "Eksterne modeller",
 	"External Models": "Eksterne modeller",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "",
 	"Failed to add file.": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "Kunne ikke oprette API-nøgle.",
 	"Failed to create API Key.": "Kunne ikke oprette API-nøgle.",
 	"Failed to fetch models": "",
 	"Failed to fetch models": "",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "Kunne ikke læse indholdet af udklipsholderen",
 	"Failed to read clipboard contents": "Kunne ikke læse indholdet af udklipsholderen",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "",
 	"Failed to save models configuration": "",
@@ -718,8 +727,12 @@
 	"Memory deleted successfully": "Hukommelse slettet.",
 	"Memory deleted successfully": "Hukommelse slettet.",
 	"Memory updated successfully": "Hukommelse opdateret.",
 	"Memory updated successfully": "Hukommelse opdateret.",
 	"Merge Responses": "Flet svar",
 	"Merge Responses": "Flet svar",
+	"Merged Response": "Sammensat svar",
 	"Message rating should be enabled to use this feature": "",
 	"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.": "Beskeder, du sender efter at have oprettet dit link, deles ikke. Brugere med URL'en vil kunne se den delte chat.",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Beskeder, du sender efter at have oprettet dit link, deles ikke. Brugere med URL'en vil kunne se den delte chat.",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "Min P",
 	"Min P": "Min P",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +774,7 @@
 	"New Password": "Ny adgangskode",
 	"New Password": "Ny adgangskode",
 	"new-channel": "",
 	"new-channel": "",
 	"No content found": "",
 	"No content found": "",
+	"No content found in file.": "",
 	"No content to speak": "Intet indhold at tale",
 	"No content to speak": "Intet indhold at tale",
 	"No distance available": "",
 	"No distance available": "",
 	"No feedbacks found": "",
 	"No feedbacks found": "",
@@ -939,7 +953,7 @@
 	"Save Tag": "Gem tag",
 	"Save Tag": "Gem tag",
 	"Saved": "Gemt",
 	"Saved": "Gemt",
 	"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": "Lagring af chatlogs direkte i din browsers lager understøttes ikke længere. Download og slet dine chatlogs ved at klikke på knappen nedenfor. Du kan nemt importere dine chatlogs til backend igennem",
 	"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": "Lagring af chatlogs direkte i din browsers lager understøttes ikke længere. Download og slet dine chatlogs ved at klikke på knappen nedenfor. Du kan nemt importere dine chatlogs til backend igennem",
-	"Scroll to bottom when switching between branches": "Rul til bunden, når du skifter mellem grene",
+	"Scroll On Branch Change": "",
 	"Search": "Søg",
 	"Search": "Søg",
 	"Search a model": "Søg efter en model",
 	"Search a model": "Søg efter en model",
 	"Search Base": "",
 	"Search Base": "",

+ 20 - 3
src/lib/i18n/locales/de-DE/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "Löschen von Chats erlauben",
 	"Allow Chat Delete": "Löschen von Chats erlauben",
 	"Allow Chat Deletion": "Löschen von Chats erlauben",
 	"Allow Chat Deletion": "Löschen von Chats erlauben",
 	"Allow Chat Edit": "Bearbeiten von Chats erlauben",
 	"Allow Chat Edit": "Bearbeiten von Chats erlauben",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "Hochladen von Dateien erlauben",
 	"Allow File Upload": "Hochladen von Dateien erlauben",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "Nicht-lokale Stimmen erlauben",
 	"Allow non-local voices": "Nicht-lokale Stimmen erlauben",
@@ -76,6 +78,7 @@
 	"Always": "Immer",
 	"Always": "Immer",
 	"Always Collapse Code Blocks": "Code-Blöcke immer zuklappen",
 	"Always Collapse Code Blocks": "Code-Blöcke immer zuklappen",
 	"Always Expand Details": "Details immer aufklappen",
 	"Always Expand Details": "Details immer aufklappen",
+	"Always Play Notification Sound": "",
 	"Amazing": "Fantastisch",
 	"Amazing": "Fantastisch",
 	"an assistant": "ein Assistent",
 	"an assistant": "ein Assistent",
 	"Analyzed": "Analysiert",
 	"Analyzed": "Analysiert",
@@ -346,7 +349,7 @@
 	"Don't have an account?": "Haben Sie noch kein Benutzerkonto?",
 	"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 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 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",
 	"Done": "Erledigt",
 	"Download": "Exportieren",
 	"Download": "Exportieren",
 	"Download as SVG": "Exportieren als SVG",
 	"Download as SVG": "Exportieren als SVG",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "",
 	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "Geben Sie die Domains durch Kommas separiert ein (z.B. example.com,site.org)",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "Geben Sie die Domains durch Kommas separiert ein (z.B. example.com,site.org)",
 	"Enter Exa API Key": "Geben Sie den Exa-API-Schlüssel ein",
 	"Enter Exa API Key": "Geben Sie den Exa-API-Schlüssel ein",
+	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "Geben Sie die Github Raw-URL ein",
 	"Enter Github Raw URL": "Geben Sie die Github Raw-URL ein",
@@ -511,10 +518,15 @@
 	"Export Tools": "Werkzeuge exportieren",
 	"Export Tools": "Werkzeuge exportieren",
 	"External": "Extern",
 	"External": "Extern",
 	"External Models": "Externe Modelle",
 	"External Models": "Externe Modelle",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "Fehler beim Hinzufügen der Datei.",
 	"Failed to add file.": "Fehler beim Hinzufügen der Datei.",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "Fehler beim Erstellen des API-Schlüssels.",
 	"Failed to create API Key.": "Fehler beim Erstellen des API-Schlüssels.",
 	"Failed to fetch models": "Fehler beim Abrufen der Modelle",
 	"Failed to fetch models": "Fehler beim Abrufen der Modelle",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "Fehler beim Abruf der Zwischenablage",
 	"Failed to read clipboard contents": "Fehler beim Abruf der Zwischenablage",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "Fehler beim Speichern der Modellkonfiguration",
 	"Failed to save models configuration": "Fehler beim Speichern der Modellkonfiguration",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "Erinnerung erfolgreich gelöscht",
 	"Memory deleted successfully": "Erinnerung erfolgreich gelöscht",
 	"Memory updated successfully": "Erinnerung erfolgreich aktualisiert",
 	"Memory updated successfully": "Erinnerung erfolgreich aktualisiert",
 	"Merge Responses": "Antworten zusammenführen",
 	"Merge Responses": "Antworten zusammenführen",
+	"Merged Response": "Zusammengeführte Antwort",
 	"Message rating should be enabled to use this feature": "Antwortbewertung muss aktiviert sein, um diese Funktion zu verwenden",
 	"Message rating should be enabled to use this feature": "Antwortbewertung muss aktiviert sein, um diese Funktion zu verwenden",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Nachrichten, die Sie nach der Erstellung Ihres Links senden, werden nicht geteilt. Nutzer mit der URL können den freigegebenen Chat einsehen.",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Nachrichten, die Sie nach der Erstellung Ihres Links senden, werden nicht geteilt. Nutzer mit der URL können den freigegebenen Chat einsehen.",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "Min P",
 	"Min P": "Min P",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "Neues Passwort",
 	"New Password": "Neues Passwort",
 	"new-channel": "neuer-kanal",
 	"new-channel": "neuer-kanal",
 	"No content found": "Kein Inhalt gefunden",
 	"No content found": "Kein Inhalt gefunden",
+	"No content found in file.": "",
 	"No content to speak": "Kein Inhalt zum Vorlesen",
 	"No content to speak": "Kein Inhalt zum Vorlesen",
 	"No distance available": "Keine Distanz verfügbar",
 	"No distance available": "Keine Distanz verfügbar",
 	"No feedbacks found": "Kein Feedback gefunden",
 	"No feedbacks found": "Kein Feedback gefunden",
@@ -781,7 +798,7 @@
 	"No valves to update": "Keine Valves zum Aktualisieren",
 	"No valves to update": "Keine Valves zum Aktualisieren",
 	"None": "Nichts",
 	"None": "Nichts",
 	"Not factually correct": "Nicht sachlich korrekt",
 	"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.",
 	"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",
 	"Notes": "Notizen",
 	"Notification Sound": "Benachrichtigungston",
 	"Notification Sound": "Benachrichtigungston",
@@ -939,7 +956,7 @@
 	"Save Tag": "Tag speichern",
 	"Save Tag": "Tag speichern",
 	"Saved": "Gespeichert",
 	"Saved": "Gespeichert",
 	"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": "Das direkte Speichern von Chats im Browser-Speicher wird nicht mehr unterstützt. Bitte nehmen Sie einen Moment Zeit, um Ihre Chats zu exportieren und zu löschen, indem Sie auf die Schaltfläche unten klicken. Keine Sorge, Sie können Ihre Chats problemlos über das Backend wieder importieren.",
 	"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": "Das direkte Speichern von Chats im Browser-Speicher wird nicht mehr unterstützt. Bitte nehmen Sie einen Moment Zeit, um Ihre Chats zu exportieren und zu löschen, indem Sie auf die Schaltfläche unten klicken. Keine Sorge, Sie können Ihre Chats problemlos über das Backend wieder importieren.",
-	"Scroll to bottom when switching between branches": "Beim Wechsel zwischen Branches nach unten scrollen",
+	"Scroll On Branch Change": "",
 	"Search": "Suchen",
 	"Search": "Suchen",
 	"Search a model": "Modell suchen",
 	"Search a model": "Modell suchen",
 	"Search Base": "Suchbasis",
 	"Search Base": "Suchbasis",

+ 18 - 1
src/lib/i18n/locales/dg-DG/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "",
 	"Allow Chat Delete": "",
 	"Allow Chat Deletion": "Allow Delete Chats",
 	"Allow Chat Deletion": "Allow Delete Chats",
 	"Allow Chat Edit": "",
 	"Allow Chat Edit": "",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "",
 	"Allow File Upload": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "",
 	"Allow non-local voices": "",
@@ -76,6 +78,7 @@
 	"Always": "",
 	"Always": "",
 	"Always Collapse Code Blocks": "",
 	"Always Collapse Code Blocks": "",
 	"Always Expand Details": "",
 	"Always Expand Details": "",
+	"Always Play Notification Sound": "",
 	"Amazing": "",
 	"Amazing": "",
 	"an assistant": "such assistant",
 	"an assistant": "such assistant",
 	"Analyzed": "",
 	"Analyzed": "",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "",
 	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "",
 	"Enter Github Raw URL": "",
@@ -511,10 +518,15 @@
 	"Export Tools": "",
 	"Export Tools": "",
 	"External": "",
 	"External": "",
 	"External Models": "",
 	"External Models": "",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "",
 	"Failed to add file.": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "",
 	"Failed to create API Key.": "",
 	"Failed to fetch models": "",
 	"Failed to fetch models": "",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "Failed to read clipboard borks",
 	"Failed to read clipboard contents": "Failed to read clipboard borks",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "",
 	"Failed to save models configuration": "",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "",
 	"Memory deleted successfully": "",
 	"Memory updated successfully": "",
 	"Memory updated successfully": "",
 	"Merge Responses": "",
 	"Merge Responses": "",
+	"Merged Response": "",
 	"Message rating should be enabled to use this feature": "",
 	"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.": "",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "",
 	"Min P": "",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "New Barkword",
 	"New Password": "New Barkword",
 	"new-channel": "",
 	"new-channel": "",
 	"No content found": "",
 	"No content found": "",
+	"No content found in file.": "",
 	"No content to speak": "",
 	"No content to speak": "",
 	"No distance available": "",
 	"No distance available": "",
 	"No feedbacks found": "",
 	"No feedbacks found": "",
@@ -939,7 +956,7 @@
 	"Save Tag": "",
 	"Save Tag": "",
 	"Saved": "",
 	"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": "Saving chat logs in browser storage not support anymore. Pls download and delete your chat logs by click button below. Much easy re-import to backend through",
 	"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": "Saving chat logs in browser storage not support anymore. Pls download and delete your chat logs by click button below. Much easy re-import to backend through",
-	"Scroll to bottom when switching between branches": "",
+	"Scroll On Branch Change": "",
 	"Search": "Search very search",
 	"Search": "Search very search",
 	"Search a model": "",
 	"Search a model": "",
 	"Search Base": "",
 	"Search Base": "",

+ 18 - 1
src/lib/i18n/locales/el-GR/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "Επιτρέπεται η διαγραφή συνομιλίας",
 	"Allow Chat Delete": "Επιτρέπεται η διαγραφή συνομιλίας",
 	"Allow Chat Deletion": "Επιτρέπεται η Διαγραφή Συνομιλίας",
 	"Allow Chat Deletion": "Επιτρέπεται η Διαγραφή Συνομιλίας",
 	"Allow Chat Edit": "Επιτρέπεται η Επεξεργασία Συνομιλίας",
 	"Allow Chat Edit": "Επιτρέπεται η Επεξεργασία Συνομιλίας",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "Επιτρέπεται η Αποστολή Αρχείων",
 	"Allow File Upload": "Επιτρέπεται η Αποστολή Αρχείων",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "Επιτρέπονται μη τοπικές φωνές",
 	"Allow non-local voices": "Επιτρέπονται μη τοπικές φωνές",
@@ -76,6 +78,7 @@
 	"Always": "",
 	"Always": "",
 	"Always Collapse Code Blocks": "",
 	"Always Collapse Code Blocks": "",
 	"Always Expand Details": "",
 	"Always Expand Details": "",
+	"Always Play Notification Sound": "",
 	"Amazing": "Καταπληκτικό",
 	"Amazing": "Καταπληκτικό",
 	"an assistant": "ένας βοηθός",
 	"an assistant": "ένας βοηθός",
 	"Analyzed": "",
 	"Analyzed": "",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "",
 	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "Εισάγετε το Github Raw URL",
 	"Enter Github Raw URL": "Εισάγετε το Github Raw URL",
@@ -511,10 +518,15 @@
 	"Export Tools": "Εξαγωγή Εργαλείων",
 	"Export Tools": "Εξαγωγή Εργαλείων",
 	"External": "",
 	"External": "",
 	"External Models": "Εξωτερικά Μοντέλα",
 	"External Models": "Εξωτερικά Μοντέλα",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "Αποτυχία προσθήκης αρχείου.",
 	"Failed to add file.": "Αποτυχία προσθήκης αρχείου.",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "Αποτυχία δημιουργίας Κλειδιού API.",
 	"Failed to create API Key.": "Αποτυχία δημιουργίας Κλειδιού API.",
 	"Failed to fetch models": "",
 	"Failed to fetch models": "",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "Αποτυχία ανάγνωσης περιεχομένων πρόχειρου",
 	"Failed to read clipboard contents": "Αποτυχία ανάγνωσης περιεχομένων πρόχειρου",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "Αποτυχία αποθήκευσης ρυθμίσεων μοντέλων",
 	"Failed to save models configuration": "Αποτυχία αποθήκευσης ρυθμίσεων μοντέλων",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "Η μνήμη διαγράφηκε με επιτυχία",
 	"Memory deleted successfully": "Η μνήμη διαγράφηκε με επιτυχία",
 	"Memory updated successfully": "Η μνήμη ενημερώθηκε με επιτυχία",
 	"Memory updated successfully": "Η μνήμη ενημερώθηκε με επιτυχία",
 	"Merge Responses": "Συγχώνευση Απαντήσεων",
 	"Merge Responses": "Συγχώνευση Απαντήσεων",
+	"Merged Response": "Συγχωνευμένη απάντηση",
 	"Message rating should be enabled to use this feature": "Η αξιολόγηση μηνυμάτων πρέπει να είναι ενεργοποιημένη για να χρησιμοποιήσετε αυτή τη λειτουργία",
 	"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 θα μπορούν να δουν τη συνομιλία που μοιραστήκατε.",
 	"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)": "",
 	"Min P": "Min P",
 	"Min P": "Min P",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "Νέος Κωδικός",
 	"New Password": "Νέος Κωδικός",
 	"new-channel": "",
 	"new-channel": "",
 	"No content found": "Δεν βρέθηκε περιεχόμενο",
 	"No content found": "Δεν βρέθηκε περιεχόμενο",
+	"No content found in file.": "",
 	"No content to speak": "Δεν υπάρχει περιεχόμενο για ανάγνωση",
 	"No content to speak": "Δεν υπάρχει περιεχόμενο για ανάγνωση",
 	"No distance available": "Δεν υπάρχει διαθέσιμη απόσταση",
 	"No distance available": "Δεν υπάρχει διαθέσιμη απόσταση",
 	"No feedbacks found": "Δεν βρέθηκαν ανατροφοδοτήσεις",
 	"No feedbacks found": "Δεν βρέθηκαν ανατροφοδοτήσεις",
@@ -939,7 +956,7 @@
 	"Save Tag": "Αποθήκευση Ετικέτας",
 	"Save Tag": "Αποθήκευση Ετικέτας",
 	"Saved": "Αποθηκευμένο",
 	"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": "Η αποθήκευση των αρχείων συνομιλίας απευθείας στη μνήμη αποθήκευσης του προγράμματος περιήγησής σας δεν υποστηρίζεται πλέον. Παρακαλώ αφιερώστε λίγο χρόνο να κατεβάσετε και να διαγράψετε τα αρχεία συνομιλίας σας κάνοντας κλικ στο κουμπί παρακάτω. Μην ανησυχείτε, μπορείτε εύκολα να επαναφέρετε τα αρχεία συνομιλιών σας στο backend μέσω",
 	"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": "Η αποθήκευση των αρχείων συνομιλίας απευθείας στη μνήμη αποθήκευσης του προγράμματος περιήγησής σας δεν υποστηρίζεται πλέον. Παρακαλώ αφιερώστε λίγο χρόνο να κατεβάσετε και να διαγράψετε τα αρχεία συνομιλίας σας κάνοντας κλικ στο κουμπί παρακάτω. Μην ανησυχείτε, μπορείτε εύκολα να επαναφέρετε τα αρχεία συνομιλιών σας στο backend μέσω",
-	"Scroll to bottom when switching between branches": "Κύλιση προς τα κάτω όταν αλλάζετε μεταξύ κλάδων",
+	"Scroll On Branch Change": "",
 	"Search": "Αναζήτηση",
 	"Search": "Αναζήτηση",
 	"Search a model": "Αναζήτηση μοντέλου",
 	"Search a model": "Αναζήτηση μοντέλου",
 	"Search Base": "Βάση Αναζήτησης",
 	"Search Base": "Βάση Αναζήτησης",

+ 18 - 1
src/lib/i18n/locales/en-GB/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "",
 	"Allow Chat Delete": "",
 	"Allow Chat Deletion": "",
 	"Allow Chat Deletion": "",
 	"Allow Chat Edit": "",
 	"Allow Chat Edit": "",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "",
 	"Allow File Upload": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "",
 	"Allow non-local voices": "",
@@ -76,6 +78,7 @@
 	"Always": "",
 	"Always": "",
 	"Always Collapse Code Blocks": "",
 	"Always Collapse Code Blocks": "",
 	"Always Expand Details": "",
 	"Always Expand Details": "",
+	"Always Play Notification Sound": "",
 	"Amazing": "",
 	"Amazing": "",
 	"an assistant": "",
 	"an assistant": "",
 	"Analyzed": "",
 	"Analyzed": "",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "",
 	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "",
 	"Enter Github Raw URL": "",
@@ -511,10 +518,15 @@
 	"Export Tools": "",
 	"Export Tools": "",
 	"External": "",
 	"External": "",
 	"External Models": "",
 	"External Models": "",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "",
 	"Failed to add file.": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "",
 	"Failed to create API Key.": "",
 	"Failed to fetch models": "",
 	"Failed to fetch models": "",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "",
 	"Failed to read clipboard contents": "",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "",
 	"Failed to save models configuration": "",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "",
 	"Memory deleted successfully": "",
 	"Memory updated successfully": "",
 	"Memory updated successfully": "",
 	"Merge Responses": "",
 	"Merge Responses": "",
+	"Merged Response": "",
 	"Message rating should be enabled to use this feature": "",
 	"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.": "",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "",
 	"Min P": "",
 	"Mirostat": "",
 	"Mirostat": "",
 	"Mirostat Eta": "",
 	"Mirostat Eta": "",
@@ -761,6 +777,7 @@
 	"New Password": "",
 	"New Password": "",
 	"new-channel": "",
 	"new-channel": "",
 	"No content found": "",
 	"No content found": "",
+	"No content found in file.": "",
 	"No content to speak": "",
 	"No content to speak": "",
 	"No distance available": "",
 	"No distance available": "",
 	"No feedbacks found": "",
 	"No feedbacks found": "",
@@ -939,7 +956,7 @@
 	"Save Tag": "",
 	"Save Tag": "",
 	"Saved": "",
 	"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": "",
 	"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 to bottom when switching between branches": "",
+	"Scroll On Branch Change": "",
 	"Search": "",
 	"Search": "",
 	"Search a model": "",
 	"Search a model": "",
 	"Search Base": "",
 	"Search Base": "",

+ 18 - 1
src/lib/i18n/locales/en-US/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "",
 	"Allow Chat Delete": "",
 	"Allow Chat Deletion": "",
 	"Allow Chat Deletion": "",
 	"Allow Chat Edit": "",
 	"Allow Chat Edit": "",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "",
 	"Allow File Upload": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "",
 	"Allow non-local voices": "",
@@ -76,6 +78,7 @@
 	"Always": "",
 	"Always": "",
 	"Always Collapse Code Blocks": "",
 	"Always Collapse Code Blocks": "",
 	"Always Expand Details": "",
 	"Always Expand Details": "",
+	"Always Play Notification Sound": "",
 	"Amazing": "",
 	"Amazing": "",
 	"an assistant": "",
 	"an assistant": "",
 	"Analyzed": "",
 	"Analyzed": "",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "",
 	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "",
 	"Enter Github Raw URL": "",
@@ -511,10 +518,15 @@
 	"Export Tools": "",
 	"Export Tools": "",
 	"External": "",
 	"External": "",
 	"External Models": "",
 	"External Models": "",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "",
 	"Failed to add file.": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "",
 	"Failed to create API Key.": "",
 	"Failed to fetch models": "",
 	"Failed to fetch models": "",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "",
 	"Failed to read clipboard contents": "",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "",
 	"Failed to save models configuration": "",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "",
 	"Memory deleted successfully": "",
 	"Memory updated successfully": "",
 	"Memory updated successfully": "",
 	"Merge Responses": "",
 	"Merge Responses": "",
+	"Merged Response": "",
 	"Message rating should be enabled to use this feature": "",
 	"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.": "",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "",
 	"Min P": "",
 	"Mirostat": "",
 	"Mirostat": "",
 	"Mirostat Eta": "",
 	"Mirostat Eta": "",
@@ -761,6 +777,7 @@
 	"New Password": "",
 	"New Password": "",
 	"new-channel": "",
 	"new-channel": "",
 	"No content found": "",
 	"No content found": "",
+	"No content found in file.": "",
 	"No content to speak": "",
 	"No content to speak": "",
 	"No distance available": "",
 	"No distance available": "",
 	"No feedbacks found": "",
 	"No feedbacks found": "",
@@ -939,7 +956,7 @@
 	"Save Tag": "",
 	"Save Tag": "",
 	"Saved": "",
 	"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": "",
 	"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 to bottom when switching between branches": "",
+	"Scroll On Branch Change": "",
 	"Search": "",
 	"Search": "",
 	"Search a model": "",
 	"Search a model": "",
 	"Search Base": "",
 	"Search Base": "",

+ 114 - 97
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",
 	"*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 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 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",
 	"About": "Acerca de",
 	"Accept autocomplete generation / Jump to prompt variable": "Aceptar generación de autocompletado / Saltar a indicador variable",
 	"Accept autocomplete generation / Jump to prompt variable": "Aceptar generación de autocompletado / Saltar a indicador variable",
 	"Access": "Acceso",
 	"Access": "Acceso",
 	"Access Control": "Control de 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": "Cuenta",
 	"Account Activation Pending": "Activación de cuenta Pendiente",
 	"Account Activation Pending": "Activación de cuenta Pendiente",
 	"Accurate information": "Información precisa",
 	"Accurate information": "Información precisa",
 	"Actions": "Acciones",
 	"Actions": "Acciones",
 	"Activate": "Activar",
 	"Activate": "Activar",
 	"Activate this command by typing \"/{{COMMAND}}\" to chat input.": "Activar este comando escribiendo \"/{{COMMAND}}\" en el chat",
 	"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ñadir",
 	"Add a model ID": "Añadir un ID de modelo",
 	"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 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 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 Connection": "Añadir Conexión",
 	"Add Content": "Añadir Contenido",
 	"Add Content": "Añadir Contenido",
 	"Add content here": "Añadir contenido aquí",
 	"Add content here": "Añadir contenido aquí",
 	"Add custom prompt": "Añadir un indicador personalizado",
 	"Add custom prompt": "Añadir un indicador personalizado",
-	"Add Files": "Añadir Ficheros",
+	"Add Files": "Añadir Archivos",
 	"Add Group": "Añadir Grupo",
 	"Add Group": "Añadir Grupo",
 	"Add Memory": "Añadir Memoria",
 	"Add Memory": "Añadir Memoria",
 	"Add Model": "Añadir Modelo",
 	"Add Model": "Añadir Modelo",
@@ -44,31 +44,33 @@
 	"Add Tag": "Añadir etiqueta",
 	"Add Tag": "Añadir etiqueta",
 	"Add Tags": "Añadir etiquetas",
 	"Add Tags": "Añadir etiquetas",
 	"Add text content": "Añade contenido de texto",
 	"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": "Admin",
 	"Admin": "Admin",
 	"Admin Panel": "Administración",
 	"Admin Panel": "Administración",
 	"Admin Settings": "Ajustes de Admin",
 	"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 Parameters": "Parámetros Avanzados",
-	"Advanced Params": "Param. Avanz.",
+	"Advanced Params": "Parámetros Avanzados",
 	"All": "Todos",
 	"All": "Todos",
 	"All Documents": "Todos los Documentos",
 	"All Documents": "Todos los Documentos",
 	"All models deleted successfully": "Todos los modelos borrados correctamnete",
 	"All models deleted successfully": "Todos los modelos borrados correctamnete",
-	"Allow Call": "",
+	"Allow Call": "Permitir Llamada",
 	"Allow Chat Controls": "Permitir Controles del Chat",
 	"Allow Chat Controls": "Permitir Controles del Chat",
 	"Allow Chat Delete": "Permitir Borrar Chat",
 	"Allow Chat Delete": "Permitir Borrar Chat",
 	"Allow Chat Deletion": "Permitir Borrado de Chat",
 	"Allow Chat Deletion": "Permitir Borrado de Chat",
 	"Allow Chat Edit": "Pemritir Editar Chat",
 	"Allow Chat Edit": "Pemritir Editar Chat",
-	"Allow File Upload": "Permitir Subida de Ficheros",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
+	"Allow File Upload": "Permitir Subida de Archivos",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "Permitir voces no locales",
 	"Allow non-local voices": "Permitir voces no locales",
 	"Allow Speech to Text": "",
 	"Allow Speech to Text": "",
 	"Allow Temporary Chat": "Permitir Chat Temporal",
 	"Allow Temporary Chat": "Permitir Chat Temporal",
 	"Allow Text to Speech": "",
 	"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",
 	"Allow Voice Interruption in Call": "Permitir Interrupción de Voz en Llamada",
 	"Allowed Endpoints": "Endpoints Permitidos",
 	"Allowed Endpoints": "Endpoints Permitidos",
 	"Already have an account?": "¿Ya tienes una cuenta?",
 	"Already have an account?": "¿Ya tienes una cuenta?",
@@ -76,6 +78,7 @@
 	"Always": "Siempre",
 	"Always": "Siempre",
 	"Always Collapse Code Blocks": "Plegar Siempre los Bloques de Código",
 	"Always Collapse Code Blocks": "Plegar Siempre los Bloques de Código",
 	"Always Expand Details": "Expandir Siempre Detalles",
 	"Always Expand Details": "Expandir Siempre Detalles",
+	"Always Play Notification Sound": "",
 	"Amazing": "Emocionante",
 	"Amazing": "Emocionante",
 	"an assistant": "un asistente",
 	"an assistant": "un asistente",
 	"Analyzed": "Analizado",
 	"Analyzed": "Analizado",
@@ -91,34 +94,34 @@
 	"API keys": "Claves API",
 	"API keys": "Claves API",
 	"Application DN": "Aplicacion DN",
 	"Application DN": "Aplicacion DN",
 	"Application DN Password": "Contraseña 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",
 	"April": "Abril",
 	"Archive": "Archivar",
 	"Archive": "Archivar",
 	"Archive All Chats": "Archivar Todos los Chats",
 	"Archive All Chats": "Archivar Todos los Chats",
 	"Archived Chats": "Chats archivados",
 	"Archived Chats": "Chats archivados",
 	"archived-chat-export": "exportar 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",
 	"Arena Models": "Arena de Modelos",
 	"Artifacts": "Artefactos",
 	"Artifacts": "Artefactos",
 	"Ask": "Preguntar",
 	"Ask": "Preguntar",
 	"Ask a question": "Haz una pregunta",
 	"Ask a question": "Haz una pregunta",
 	"Assistant": "Asistente",
 	"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",
 	"Attention to detail": "Atención al detalle",
 	"Attribute for Mail": "Atributo para Correo",
 	"Attribute for Mail": "Atributo para Correo",
-	"Attribute for Username": "Atributo para Nombre de Usuari@",
+	"Attribute for Username": "Atributo para Nombre de Usuario",
 	"Audio": "Audio",
 	"Audio": "Audio",
 	"August": "Agosto",
 	"August": "Agosto",
 	"Auth": "Autorización",
 	"Auth": "Autorización",
 	"Authenticate": "Autentificar",
 	"Authenticate": "Autentificar",
-	"Authentication": "Autentificación",
+	"Authentication": "Autenticación",
 	"Auto": "Auto",
 	"Auto": "Auto",
 	"Auto-Copy Response to Clipboard": "AutoCopiado de respuesta al Portapapeles",
 	"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": "Generación de Autocompletado",
 	"Autocomplete Generation Input Max Length": "Max. Longitud de Entrada en Generación de Autocompletado",
 	"Autocomplete Generation Input Max Length": "Max. Longitud de Entrada en Generación de Autocompletado",
 	"Automatic1111": "AUTOMATIC1111",
 	"Automatic1111": "AUTOMATIC1111",
@@ -126,7 +129,7 @@
 	"AUTOMATIC1111 Base URL": "URL Base de AUTOMATIC1111",
 	"AUTOMATIC1111 Base URL": "URL Base de AUTOMATIC1111",
 	"AUTOMATIC1111 Base URL is required.": "la URL Base de AUTOMATIC1111 es necesaria.",
 	"AUTOMATIC1111 Base URL is required.": "la URL Base de AUTOMATIC1111 es necesaria.",
 	"Available list": "Lista disponible",
 	"Available list": "Lista disponible",
-	"Available Tools": "",
+	"Available Tools": "Herramientas Disponibles",
 	"available!": "¡disponible!",
 	"available!": "¡disponible!",
 	"Awful": "Horrible",
 	"Awful": "Horrible",
 	"Azure AI Speech": "Voz Azure AI",
 	"Azure AI Speech": "Voz Azure AI",
@@ -148,23 +151,23 @@
 	"Bypass Embedding and Retrieval": "Evitar Incrustración y Recuperación",
 	"Bypass Embedding and Retrieval": "Evitar Incrustración y Recuperación",
 	"Calendar": "Calendario",
 	"Calendar": "Calendario",
 	"Call": "Llamada",
 	"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",
 	"Camera": "Cámara",
 	"Cancel": "Cancelar",
 	"Cancel": "Cancelar",
 	"Capabilities": "Capacidades",
 	"Capabilities": "Capacidades",
 	"Capture": "Captura",
 	"Capture": "Captura",
 	"Certificate Path": "Ruta a Certificado",
 	"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",
 	"Channels": "Canal",
 	"Character": "Carácter",
 	"Character": "Carácter",
 	"Character limit for autocomplete generation input": "Límite de caracteres de entrada de la generación de autocompletado",
 	"Character limit for autocomplete generation input": "Límite de caracteres de entrada de la generación de autocompletado",
 	"Chart new frontiers": "Trazar nuevas fronteras",
 	"Chart new frontiers": "Trazar nuevas fronteras",
 	"Chat": "Chat",
 	"Chat": "Chat",
 	"Chat Background Image": "Imágen de Fondo del 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 Overview": "Vista General del Chat",
 	"Chat Permissions": "Permisos del Chat",
 	"Chat Permissions": "Permisos del Chat",
 	"Chat Tags Auto-Generation": "AutoGeneración de Etiquetas de Chat",
 	"Chat Tags Auto-Generation": "AutoGeneración de Etiquetas de Chat",
@@ -183,15 +186,15 @@
 	"Click here for filter guides.": "Pulsar aquí para guías de filtros",
 	"Click here for filter guides.": "Pulsar aquí para guías de filtros",
 	"Click here for help.": "Pulsar aquí para Ayuda.",
 	"Click here for help.": "Pulsar aquí para Ayuda.",
 	"Click here to": "Pulsa aquí para",
 	"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 see available models.": "Pulsa aquí para ver modelos disponibles.",
 	"Click here to select": "Pulsa aquí para seleccionar",
 	"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 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 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 to upload a workflow.json file.": "Pulsa aquí para subir un fichero workflow.json",
 	"click here.": "Pulsa aquí.",
 	"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.",
 	"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": "Clonar",
 	"Clone Chat": "Clonar Chat",
 	"Clone Chat": "Clonar Chat",
@@ -200,8 +203,8 @@
 	"Code execution": "Ejecución de Código",
 	"Code execution": "Ejecución de Código",
 	"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 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": "Interprete de Código",
 	"Code Interpreter Engine": "Motor del 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",
 	"Code Interpreter Prompt Template": "Plantilla del Indicador del Interprete de Código",
@@ -287,7 +290,7 @@
 	"Default to 389 or 636 if TLS is enabled": "Predeterminado a 389, o 636 si TLS está habilitado",
 	"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 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 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": "Borrar",
 	"Delete a model": "Borrar un modelo",
 	"Delete a model": "Borrar un modelo",
 	"Delete All Chats": "Borrar todos los chats",
 	"Delete All Chats": "Borrar todos los chats",
@@ -302,17 +305,17 @@
 	"Delete prompt?": "¿Borrar el indicador?",
 	"Delete prompt?": "¿Borrar el indicador?",
 	"delete this link": "Borrar este enlace",
 	"delete this link": "Borrar este enlace",
 	"Delete tool?": "¿Borrar la herramienta?",
 	"Delete tool?": "¿Borrar la herramienta?",
-	"Delete User": "Borrar Usuari@",
+	"Delete User": "Borrar Usuario",
 	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} Borrado",
 	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} Borrado",
 	"Deleted {{name}}": "{{nombre}} 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",
 	"Describe your knowledge base and objectives": "Describe tu Base de Conocimientos y sus objetivos",
 	"Description": "Descripción",
 	"Description": "Descripción",
-	"Detect Artifacts Automatically": "",
+	"Detect Artifacts Automatically": "Detectar Artefactos Automáticamente",
 	"Didn't fully follow instructions": "No seguiste completamente las instrucciones",
 	"Didn't fully follow instructions": "No seguiste completamente las instrucciones",
 	"Direct": "Directo",
 	"Direct": "Directo",
 	"Direct Connections": "Conexiones Directas",
 	"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 Connections settings updated": "Se actualizaron las configuraciones de las Conexiones Directas",
 	"Direct Tool Servers": "Servidores de Herramientas Directos",
 	"Direct Tool Servers": "Servidores de Herramientas Directos",
 	"Disabled": "Deshabilitado",
 	"Disabled": "Deshabilitado",
@@ -328,8 +331,8 @@
 	"Discover, download, and explore model presets": "Descubre, descarga y explora modelos con preajustados",
 	"Discover, download, and explore model presets": "Descubre, descarga y explora modelos con preajustados",
 	"Dismissible": "Desestimable",
 	"Dismissible": "Desestimable",
 	"Display": "Mostrar",
 	"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",
 	"Displays citations in the response": "Mostrar citas en la respuesta",
 	"Dive into knowledge": "Sumérgete en el conocimiento",
 	"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!",
 	"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 +347,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.",
 	"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",
 	"Domain Filter List": "Lista de Filtrado de Dominio",
 	"Don't have an account?": "¿No tienes una cuenta?",
 	"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?",
 	"Don't like the style": "¿No te gusta el estilo?",
 	"Done": "Hecho",
 	"Done": "Hecho",
 	"Download": "Descargar",
 	"Download": "Descargar",
@@ -358,21 +361,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. '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. \"json\" or a JSON schema": "p.ej. \"json\" o un esquema JSON",
 	"e.g. 60": "p.ej. 60",
 	"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 Filter": "p.ej. Mi Filtro",
 	"e.g. My Tools": "p.ej. Mis Herramientas",
 	"e.g. My Tools": "p.ej. Mis Herramientas",
 	"e.g. my_filter": "p.ej. mi_filtro",
 	"e.g. my_filter": "p.ej. mi_filtro",
 	"e.g. my_tools": "p.ej. mis_herramientas",
 	"e.g. my_tools": "p.ej. mis_herramientas",
 	"e.g. Tools for performing various operations": "p.ej. Herramientas para realizar varias operaciones",
 	"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": "Editar",
 	"Edit Arena Model": "Editar Modelo en Arena",
 	"Edit Arena Model": "Editar Modelo en Arena",
 	"Edit Channel": "Editar Canal",
 	"Edit Channel": "Editar Canal",
 	"Edit Connection": "Editar Conexión",
 	"Edit Connection": "Editar Conexión",
 	"Edit Default Permissions": "Editar Permisos Predeterminados",
 	"Edit Default Permissions": "Editar Permisos Predeterminados",
 	"Edit Memory": "Editar Memoria",
 	"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",
 	"ElevenLabs": "ElevenLabs",
 	"Email": "Email",
 	"Email": "Email",
 	"Embark on adventures": "Embarcate en aventuras",
 	"Embark on adventures": "Embarcate en aventuras",
@@ -390,13 +393,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 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 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 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",
 	"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.",
 	"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 {{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 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": "Ingresar el DN de la Aplicación",
 	"Enter Application DN Password": "Ingresar la Contraseña del 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",
 	"Enter Bing Search V7 Endpoint": "Ingresar el Endpoint de Bing Search V7",
@@ -414,8 +417,12 @@
 	"Enter Document Intelligence Key": "Ingresar Clave de Azure Document Intelligence",
 	"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 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 Exa API Key": "Ingresar Clave API de Exa",
-	"Enter Firecrawl API Base URL": "",
-	"Enter Firecrawl 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": "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 Github Raw URL": "Ingresar URL Github en Bruto(raw)",
 	"Enter Google PSE API Key": "Ingresar Clave API de Google PSE",
 	"Enter Google PSE API Key": "Ingresar Clave API de Google PSE",
 	"Enter Google PSE Engine Id": "Ingresa ID del Motor PSE de Google",
 	"Enter Google PSE Engine Id": "Ingresa ID del Motor PSE de Google",
@@ -433,8 +440,8 @@
 	"Enter Mojeek Search API Key": "Ingresar Clave API de Mojeek Search",
 	"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 Number of Steps (e.g. 50)": "Ingresar Número de Pasos (p.ej., 50)",
 	"Enter Perplexity API Key": "Ingresar Clave API de Perplexity",
 	"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 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 reasoning effort": "Ingresar esfuerzo de razonamiento",
 	"Enter Sampler (e.g. Euler a)": "Ingresar Muestreador (p.ej., Euler a)",
 	"Enter Sampler (e.g. Euler a)": "Ingresar Muestreador (p.ej., Euler a)",
@@ -452,16 +459,16 @@
 	"Enter server host": "Ingresar host del servidor",
 	"Enter server host": "Ingresar host del servidor",
 	"Enter server label": "Ingresar etiqueta del servidor",
 	"Enter server label": "Ingresar etiqueta del servidor",
 	"Enter server port": "Ingresar puerto 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 stop sequence": "Ingresar secuencia de parada",
 	"Enter system prompt": "Ingresar Indicador del sistema",
 	"Enter system prompt": "Ingresar Indicador del sistema",
 	"Enter system prompt here": "Ingresa aquí el indicador del sistema",
 	"Enter system prompt here": "Ingresa aquí el indicador del sistema",
 	"Enter Tavily API Key": "Ingresar Clave API de Tavily",
 	"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 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 to Send": "'Enter' para Enviar",
 	"Enter Top K": "Ingresar Top K",
 	"Enter Top K": "Ingresar Top K",
 	"Enter Top K Reranker": "Ingresar Top K Reclasificador",
 	"Enter Top K Reranker": "Ingresar Top K Reclasificador",
@@ -475,8 +482,8 @@
 	"Enter your new password": "Ingresa tu contraseña nueva",
 	"Enter your new password": "Ingresa tu contraseña nueva",
 	"Enter Your Password": "Ingresa tu contraseña",
 	"Enter Your Password": "Ingresa tu contraseña",
 	"Enter Your Role": "Ingresa tu rol",
 	"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": "ERROR",
 	"ERROR": "ERROR",
 	"Error accessing Google Drive: {{error}}": "Error accediendo a Google Drive: {{error}}",
 	"Error accessing Google Drive: {{error}}": "Error accediendo a Google Drive: {{error}}",
@@ -488,18 +495,18 @@
 	"Example: mail": "Ejemplo: correo",
 	"Example: mail": "Ejemplo: correo",
 	"Example: ou=users,dc=foo,dc=example": "Ejemplo: ou=usuarios,dc=foo,dc=ejemplo",
 	"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",
 	"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",
 	"Exclude": "Excluir",
 	"Execute code for analysis": "Ejecutar código para análisis",
 	"Execute code for analysis": "Ejecutar código para análisis",
-	"Executing **{{NAME}}**...": "",
+	"Executing **{{NAME}}**...": "Ejecutando **{{NAME}}**...",
 	"Expand": "Expandir",
 	"Expand": "Expandir",
 	"Experimental": "Experimental",
 	"Experimental": "Experimental",
 	"Explain": "Explicar",
 	"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",
 	"Explore the cosmos": "Explora el cosmos",
 	"Export": "Exportar",
 	"Export": "Exportar",
 	"Export All Archived Chats": "Exportar Todos los Chats Archivados",
 	"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 chat (.json)": "Exportar chat (.json)",
 	"Export Chats": "Exportar Chats",
 	"Export Chats": "Exportar Chats",
 	"Export Config to JSON File": "Exportar Configuración a archivo JSON",
 	"Export Config to JSON File": "Exportar Configuración a archivo JSON",
@@ -511,10 +518,15 @@
 	"Export Tools": "Exportar Herramientas",
 	"Export Tools": "Exportar Herramientas",
 	"External": "Externo",
 	"External": "Externo",
 	"External Models": "Modelos Externos",
 	"External Models": "Modelos Externos",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "Fallo al  añadir el archivo.",
 	"Failed to add file.": "Fallo al  añadir el archivo.",
 	"Failed to connect to {{URL}} OpenAPI tool server": "Fallo al conectar al servidor de herramientas {{URL}}",
 	"Failed to connect to {{URL}} OpenAPI tool server": "Fallo al conectar al servidor de herramientas {{URL}}",
 	"Failed to create API Key.": "Fallo al crear la Clave API.",
 	"Failed to create API Key.": "Fallo al crear la Clave API.",
 	"Failed to fetch models": "Fallo al obtener los modelos",
 	"Failed to fetch models": "Fallo al obtener los modelos",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "Fallo al leer el contenido del portapapeles",
 	"Failed to read clipboard contents": "Fallo al leer el contenido del portapapeles",
 	"Failed to save connections": "Fallo al grabar las conexiones",
 	"Failed to save connections": "Fallo al grabar las conexiones",
 	"Failed to save models configuration": "Fallo al guardar la configuración de los modelos",
 	"Failed to save models configuration": "Fallo al guardar la configuración de los modelos",
@@ -523,8 +535,8 @@
 	"Features": "Características",
 	"Features": "Características",
 	"Features Permissions": "Permisos de las Características",
 	"Features Permissions": "Permisos de las Características",
 	"February": "Febrero",
 	"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",
 	"Feel free to add specific details": "Añade libremente detalles específicos",
 	"File": "Archivo",
 	"File": "Archivo",
 	"File added successfully.": "Archivo añadido correctamente.",
 	"File added successfully.": "Archivo añadido correctamente.",
@@ -539,11 +551,11 @@
 	"Filter is now globally enabled": "El filtro ahora está habilitado globalmente",
 	"Filter is now globally enabled": "El filtro ahora está habilitado globalmente",
 	"Filters": "Filtros",
 	"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.",
 	"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",
 	"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 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",
 	"Folder name updated successfully": "Nombre de la carpeta actualizado correctamente",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "Memoria borrada correctamente",
 	"Memory deleted successfully": "Memoria borrada correctamente",
 	"Memory updated successfully": "Memoria actualizada correctamente",
 	"Memory updated successfully": "Memoria actualizada correctamente",
 	"Merge Responses": "Fusionar Respuestas",
 	"Merge Responses": "Fusionar Respuestas",
+	"Merged Response": "Respuesta combinada",
 	"Message rating should be enabled to use this feature": "Para usar esta función debe estar habilitada la calificación de mensajes",
 	"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.",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "Min P",
 	"Min P": "Min P",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "Nueva Contraseña",
 	"New Password": "Nueva Contraseña",
 	"new-channel": "nuevo-canal",
 	"new-channel": "nuevo-canal",
 	"No content found": "No se encontró contenido",
 	"No content found": "No se encontró contenido",
+	"No content found in file.": "",
 	"No content to speak": "No hay contenido para hablar",
 	"No content to speak": "No hay contenido para hablar",
 	"No distance available": "No hay distancia disponible",
 	"No distance available": "No hay distancia disponible",
 	"No feedbacks found": "No se encontraron realimentaciones",
 	"No feedbacks found": "No se encontraron realimentaciones",
@@ -777,7 +794,7 @@
 	"No results found": "No se encontraron resultados",
 	"No results found": "No se encontraron resultados",
 	"No search query generated": "No se generó ninguna consulta de búsqueda",
 	"No search query generated": "No se generó ninguna consulta de búsqueda",
 	"No source available": "No hay fuente disponible",
 	"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",
 	"No valves to update": "No hay válvulas para actualizar",
 	"None": "Ninguno",
 	"None": "Ninguno",
 	"Not factually correct": "No es correcto en todos los aspectos",
 	"Not factually correct": "No es correcto en todos los aspectos",
@@ -804,7 +821,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": "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 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 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! 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 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.",
 	"Oops! There was an error in the previous response.": "¡vaya! Hubo un error en la respuesta previa.",
@@ -824,7 +841,7 @@
 	"OpenAI URL/Key required.": "URL/Clave de OpenAI requerida.",
 	"OpenAI URL/Key required.": "URL/Clave de OpenAI requerida.",
 	"openapi.json Path": "Ruta a openapi.json",
 	"openapi.json Path": "Ruta a openapi.json",
 	"or": "o",
 	"or": "o",
-	"Organize your users": "Organiza tus usuari@s",
+	"Organize your users": "Organiza tus usuarios",
 	"Other": "Otro",
 	"Other": "Otro",
 	"OUTPUT": "SALIDA",
 	"OUTPUT": "SALIDA",
 	"Output format": "Formato de salida",
 	"Output format": "Formato de salida",
@@ -851,8 +868,8 @@
 	"Pipelines Valves": "Válvulas de Tuberías",
 	"Pipelines Valves": "Válvulas de Tuberías",
 	"Plain text (.txt)": "Texto plano (.txt)",
 	"Plain text (.txt)": "Texto plano (.txt)",
 	"Playground": "Zona de Pruebas",
 	"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 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 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",
 	"Please enter a prompt": "Por favor ingresar un indicador",
@@ -894,7 +911,7 @@
 	"Record voice": "Grabar voz",
 	"Record voice": "Grabar voz",
 	"Redirecting you to Open WebUI Community": "Redireccionando a la Comunidad Open-WebUI",
 	"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.",
 	"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",
 	"References from": "Referencias desde",
 	"Refused when it shouldn't have": "Rechazado cuando no debería haberlo hecho",
 	"Refused when it shouldn't have": "Rechazado cuando no debería haberlo hecho",
 	"Regenerate": "Regenerar",
 	"Regenerate": "Regenerar",
@@ -902,7 +919,7 @@
 	"Reindex Knowledge Base Vectors": "Reindexar Base Vectorial de Conocimiento",
 	"Reindex Knowledge Base Vectors": "Reindexar Base Vectorial de Conocimiento",
 	"Release Notes": "Notas de la Versión",
 	"Release Notes": "Notas de la Versión",
 	"Relevance": "Relevancia",
 	"Relevance": "Relevancia",
-	"Relevance Threshold": "",
+	"Relevance Threshold": "Umbral de Relevancia",
 	"Remove": "Eliminar",
 	"Remove": "Eliminar",
 	"Remove Model": "Eliminar Modelo",
 	"Remove Model": "Eliminar Modelo",
 	"Rename": "Renombrar",
 	"Rename": "Renombrar",
@@ -939,7 +956,7 @@
 	"Save Tag": "Guardar Etiqueta",
 	"Save Tag": "Guardar Etiqueta",
 	"Saved": "Guardado",
 	"Saved": "Guardado",
 	"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": "Ya no está soportado guardar registros de chat directamente en el almacenamiento del navegador. Por favor, dedica un momento a descargar y eliminar tus registros de chat pulsando en el botón de abajo. No te preocupes, puedes re-importar fácilmente tus registros desde las opciones de configuración",
 	"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": "Ya no está soportado guardar registros de chat directamente en el almacenamiento del navegador. Por favor, dedica un momento a descargar y eliminar tus registros de chat pulsando en el botón de abajo. No te preocupes, puedes re-importar fácilmente tus registros desde las opciones de configuración",
-	"Scroll to bottom when switching between branches": "Desplazar hacia abajo cuando se cambia de rama",
+	"Scroll On Branch Change": "",
 	"Search": "Buscar",
 	"Search": "Buscar",
 	"Search a model": "Buscar un Modelo",
 	"Search a model": "Buscar un Modelo",
 	"Search Base": "Busqueda Base",
 	"Search Base": "Busqueda Base",
@@ -1020,7 +1037,7 @@
 	"Show": "Mostrar",
 	"Show": "Mostrar",
 	"Show \"What's New\" modal on login": "Mostrar modal \"Qué hay de Nuevo\" al iniciar sesión",
 	"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 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 shortcuts": "Mostrar Atajos",
 	"Show your support!": "¡Muestra tu apoyo!",
 	"Show your support!": "¡Muestra tu apoyo!",
 	"Showcased creativity": "Creatividad exhibida",
 	"Showcased creativity": "Creatividad exhibida",
@@ -1061,7 +1078,7 @@
 	"Tap to interrupt": "Toca para interrumpir",
 	"Tap to interrupt": "Toca para interrumpir",
 	"Tasks": "Tareas",
 	"Tasks": "Tareas",
 	"Tavily API Key": "Clave API de Tavily",
 	"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:",
 	"Tell us more:": "Dinos algo más:",
 	"Temperature": "Temperatura",
 	"Temperature": "Temperatura",
 	"Template": "Plantilla",
 	"Template": "Plantilla",
@@ -1069,14 +1086,14 @@
 	"Text Splitter": "Divisor de Texto",
 	"Text Splitter": "Divisor de Texto",
 	"Text-to-Speech Engine": "Motor Texto a Voz(TTS)",
 	"Text-to-Speech Engine": "Motor Texto a Voz(TTS)",
 	"Tfs Z": "TFS Z",
 	"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 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 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 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 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 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.",
 	"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 +1131,7 @@
 	"TLS": "TLS",
 	"TLS": "TLS",
 	"To access the available model names for downloading,": "Para acceder a los nombres de modelos disponibles para descargar,",
 	"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 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 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 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.",
 	"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 +1199,18 @@
 	"URL Mode": "Modo URL",
 	"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 '#' 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 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 Initials": "Usar Iniciales",
 	"Use no proxy to fetch page contents.": "No usar proxy para extraer contenidos",
 	"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 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_mlock (Ollama)": "use_mlock (Ollama)",
 	"use_mmap (Ollama)": "use_mmap (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.",
 	"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",
 	"Utilize": "Utilizar",
 	"Valid time units:": "Unidades de tiempo válidas:",
 	"Valid time units:": "Unidades de tiempo válidas:",
@@ -1213,7 +1230,7 @@
 	"Voice Input": "Entrada de Voz",
 	"Voice Input": "Entrada de Voz",
 	"Warning": "Aviso",
 	"Warning": "Aviso",
 	"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: 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.",
 	"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",
 	"Web": "Web",

+ 18 - 1
src/lib/i18n/locales/et-EE/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "Luba vestluse kustutamine",
 	"Allow Chat Delete": "Luba vestluse kustutamine",
 	"Allow Chat Deletion": "Luba vestluse kustutamine",
 	"Allow Chat Deletion": "Luba vestluse kustutamine",
 	"Allow Chat Edit": "Luba vestluse muutmine",
 	"Allow Chat Edit": "Luba vestluse muutmine",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "Luba failide üleslaadimine",
 	"Allow File Upload": "Luba failide üleslaadimine",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "Luba mitte-lokaalsed hääled",
 	"Allow non-local voices": "Luba mitte-lokaalsed hääled",
@@ -76,6 +78,7 @@
 	"Always": "Alati",
 	"Always": "Alati",
 	"Always Collapse Code Blocks": "",
 	"Always Collapse Code Blocks": "",
 	"Always Expand Details": "",
 	"Always Expand Details": "",
+	"Always Play Notification Sound": "",
 	"Amazing": "Suurepärane",
 	"Amazing": "Suurepärane",
 	"an assistant": "assistent",
 	"an assistant": "assistent",
 	"Analyzed": "Analüüsitud",
 	"Analyzed": "Analüüsitud",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "Sisestage dokumendi intelligentsuse võti",
 	"Enter Document Intelligence Key": "Sisestage dokumendi intelligentsuse võti",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "Sisestage domeenid komadega eraldatult (nt example.com,site.org)",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "Sisestage domeenid komadega eraldatult (nt example.com,site.org)",
 	"Enter Exa API Key": "Sisestage Exa API võti",
 	"Enter Exa API Key": "Sisestage Exa API võti",
+	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "Sisestage Github toorURL",
 	"Enter Github Raw URL": "Sisestage Github toorURL",
@@ -511,10 +518,15 @@
 	"Export Tools": "Ekspordi tööriistad",
 	"Export Tools": "Ekspordi tööriistad",
 	"External": "",
 	"External": "",
 	"External Models": "Välised mudelid",
 	"External Models": "Välised mudelid",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "Faili lisamine ebaõnnestus.",
 	"Failed to add file.": "Faili lisamine ebaõnnestus.",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "API võtme loomine ebaõnnestus.",
 	"Failed to create API Key.": "API võtme loomine ebaõnnestus.",
 	"Failed to fetch models": "Mudelite toomine ebaõnnestus",
 	"Failed to fetch models": "Mudelite toomine ebaõnnestus",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "Lõikelaua sisu lugemine ebaõnnestus",
 	"Failed to read clipboard contents": "Lõikelaua sisu lugemine ebaõnnestus",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "Mudelite konfiguratsiooni salvestamine ebaõnnestus",
 	"Failed to save models configuration": "Mudelite konfiguratsiooni salvestamine ebaõnnestus",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "Mälu edukalt kustutatud",
 	"Memory deleted successfully": "Mälu edukalt kustutatud",
 	"Memory updated successfully": "Mälu edukalt uuendatud",
 	"Memory updated successfully": "Mälu edukalt uuendatud",
 	"Merge Responses": "Ühenda vastused",
 	"Merge Responses": "Ühenda vastused",
+	"Merged Response": "Kombineeritud vastus",
 	"Message rating should be enabled to use this feature": "Selle funktsiooni kasutamiseks peaks sõnumite hindamine olema lubatud",
 	"Message rating should be enabled to use this feature": "Selle funktsiooni kasutamiseks peaks sõnumite hindamine olema lubatud",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Teie saadetud sõnumeid pärast lingi loomist ei jagata. Kasutajad, kellel on URL, saavad vaadata jagatud vestlust.",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Teie saadetud sõnumeid pärast lingi loomist ei jagata. Kasutajad, kellel on URL, saavad vaadata jagatud vestlust.",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "Min P",
 	"Min P": "Min P",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "Uus parool",
 	"New Password": "Uus parool",
 	"new-channel": "uus-kanal",
 	"new-channel": "uus-kanal",
 	"No content found": "Sisu ei leitud",
 	"No content found": "Sisu ei leitud",
+	"No content found in file.": "",
 	"No content to speak": "Pole mida rääkida",
 	"No content to speak": "Pole mida rääkida",
 	"No distance available": "Kaugus pole saadaval",
 	"No distance available": "Kaugus pole saadaval",
 	"No feedbacks found": "Tagasisidet ei leitud",
 	"No feedbacks found": "Tagasisidet ei leitud",
@@ -939,7 +956,7 @@
 	"Save Tag": "Salvesta silt",
 	"Save Tag": "Salvesta silt",
 	"Saved": "Salvestatud",
 	"Saved": "Salvestatud",
 	"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": "Vestluslogi salvestamine otse teie brauseri mällu pole enam toetatud. Palun võtke hetk, et alla laadida ja kustutada oma vestluslogi, klõpsates allpool olevat nuppu. Ärge muretsege, saate hõlpsasti oma vestluslogi tagarakendusse uuesti importida, kasutades",
 	"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": "Vestluslogi salvestamine otse teie brauseri mällu pole enam toetatud. Palun võtke hetk, et alla laadida ja kustutada oma vestluslogi, klõpsates allpool olevat nuppu. Ärge muretsege, saate hõlpsasti oma vestluslogi tagarakendusse uuesti importida, kasutades",
-	"Scroll to bottom when switching between branches": "Keri alla harus liikumisel",
+	"Scroll On Branch Change": "",
 	"Search": "Otsing",
 	"Search": "Otsing",
 	"Search a model": "Otsi mudelit",
 	"Search a model": "Otsi mudelit",
 	"Search Base": "Otsingu baas",
 	"Search Base": "Otsingu baas",

+ 18 - 1
src/lib/i18n/locales/eu-ES/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "Baimendu Txata Ezabatzea",
 	"Allow Chat Delete": "Baimendu Txata Ezabatzea",
 	"Allow Chat Deletion": "Baimendu Txata Ezabatzea",
 	"Allow Chat Deletion": "Baimendu Txata Ezabatzea",
 	"Allow Chat Edit": "Baimendu Txata Editatzea",
 	"Allow Chat Edit": "Baimendu Txata Editatzea",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "Baimendu Fitxategiak Igotzea",
 	"Allow File Upload": "Baimendu Fitxategiak Igotzea",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "Baimendu urruneko ahotsak",
 	"Allow non-local voices": "Baimendu urruneko ahotsak",
@@ -76,6 +78,7 @@
 	"Always": "",
 	"Always": "",
 	"Always Collapse Code Blocks": "",
 	"Always Collapse Code Blocks": "",
 	"Always Expand Details": "",
 	"Always Expand Details": "",
+	"Always Play Notification Sound": "",
 	"Amazing": "Harrigarria",
 	"Amazing": "Harrigarria",
 	"an assistant": "laguntzaile bat",
 	"an assistant": "laguntzaile bat",
 	"Analyzed": "",
 	"Analyzed": "",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "",
 	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "Sartu Github Raw URLa",
 	"Enter Github Raw URL": "Sartu Github Raw URLa",
@@ -511,10 +518,15 @@
 	"Export Tools": "Esportatu Tresnak",
 	"Export Tools": "Esportatu Tresnak",
 	"External": "",
 	"External": "",
 	"External Models": "Kanpoko Ereduak",
 	"External Models": "Kanpoko Ereduak",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "Huts egin du fitxategia gehitzean.",
 	"Failed to add file.": "Huts egin du fitxategia gehitzean.",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "Huts egin du API Gakoa sortzean.",
 	"Failed to create API Key.": "Huts egin du API Gakoa sortzean.",
 	"Failed to fetch models": "",
 	"Failed to fetch models": "",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "Huts egin du arbelaren edukia irakurtzean",
 	"Failed to read clipboard contents": "Huts egin du arbelaren edukia irakurtzean",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "Huts egin du ereduen konfigurazioa gordetzean",
 	"Failed to save models configuration": "Huts egin du ereduen konfigurazioa gordetzean",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "Memoria ongi ezabatu da",
 	"Memory deleted successfully": "Memoria ongi ezabatu da",
 	"Memory updated successfully": "Memoria ongi eguneratu da",
 	"Memory updated successfully": "Memoria ongi eguneratu da",
 	"Merge Responses": "Batu erantzunak",
 	"Merge Responses": "Batu erantzunak",
+	"Merged Response": "Erantzun bateratua",
 	"Message rating should be enabled to use this feature": "Mezuen balorazioa gaitu behar da funtzionalitate hau erabiltzeko",
 	"Message rating should be enabled to use this feature": "Mezuen balorazioa gaitu behar da funtzionalitate hau erabiltzeko",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Esteka sortu ondoren bidaltzen dituzun mezuak ez dira partekatuko. URLa duten erabiltzaileek partekatutako txata ikusi ahal izango dute.",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Esteka sortu ondoren bidaltzen dituzun mezuak ez dira partekatuko. URLa duten erabiltzaileek partekatutako txata ikusi ahal izango dute.",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "Min P",
 	"Min P": "Min P",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "Pasahitz berria",
 	"New Password": "Pasahitz berria",
 	"new-channel": "",
 	"new-channel": "",
 	"No content found": "Ez da edukirik aurkitu",
 	"No content found": "Ez da edukirik aurkitu",
+	"No content found in file.": "",
 	"No content to speak": "Ez dago hitz egiteko edukirik",
 	"No content to speak": "Ez dago hitz egiteko edukirik",
 	"No distance available": "Ez dago distantziarik eskuragarri",
 	"No distance available": "Ez dago distantziarik eskuragarri",
 	"No feedbacks found": "Ez da iritzirik aurkitu",
 	"No feedbacks found": "Ez da iritzirik aurkitu",
@@ -939,7 +956,7 @@
 	"Save Tag": "Gorde etiketa",
 	"Save Tag": "Gorde etiketa",
 	"Saved": "Gordeta",
 	"Saved": "Gordeta",
 	"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": "Txat erregistroak zuzenean zure nabigatzailearen biltegian gordetzea ez da jadanik onartzen. Mesedez, hartu une bat zure txat erregistroak deskargatu eta ezabatzeko beheko botoia sakatuz. Ez kezkatu, zure txat erregistroak erraz inportatu ditzakezu berriro backendera honen bidez",
 	"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": "Txat erregistroak zuzenean zure nabigatzailearen biltegian gordetzea ez da jadanik onartzen. Mesedez, hartu une bat zure txat erregistroak deskargatu eta ezabatzeko beheko botoia sakatuz. Ez kezkatu, zure txat erregistroak erraz inportatu ditzakezu berriro backendera honen bidez",
-	"Scroll to bottom when switching between branches": "Joan behera adarren artean aldatzean",
+	"Scroll On Branch Change": "",
 	"Search": "Bilatu",
 	"Search": "Bilatu",
 	"Search a model": "Bilatu modelo bat",
 	"Search a model": "Bilatu modelo bat",
 	"Search Base": "Bilaketa oinarria",
 	"Search Base": "Bilaketa oinarria",

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 579 - 562
src/lib/i18n/locales/fa-IR/translation.json


+ 60 - 43
src/lib/i18n/locales/fi-FI/translation.json

@@ -57,17 +57,19 @@
 	"All": "Kaikki",
 	"All": "Kaikki",
 	"All Documents": "Kaikki asiakirjat",
 	"All Documents": "Kaikki asiakirjat",
 	"All models deleted successfully": "Kaikki mallit poistettu onnistuneesti",
 	"All models deleted successfully": "Kaikki mallit poistettu onnistuneesti",
-	"Allow Call": "",
+	"Allow Call": "Salli puhelut",
 	"Allow Chat Controls": "Salli keskustelujen hallinta",
 	"Allow Chat Controls": "Salli keskustelujen hallinta",
 	"Allow Chat Delete": "Salli keskustelujen poisto",
 	"Allow Chat Delete": "Salli keskustelujen poisto",
 	"Allow Chat Deletion": "Salli keskustelujen poisto",
 	"Allow Chat Deletion": "Salli keskustelujen poisto",
 	"Allow Chat Edit": "Salli keskustelujen muokkaus",
 	"Allow Chat Edit": "Salli keskustelujen muokkaus",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "Salli tiedostojen lataus",
 	"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 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 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 User Location": "Salli käyttäjän sijainti",
 	"Allow Voice Interruption in Call": "Salli äänen keskeytys puhelussa",
 	"Allow Voice Interruption in Call": "Salli äänen keskeytys puhelussa",
 	"Allowed Endpoints": "Hyväksytyt päätepisteet",
 	"Allowed Endpoints": "Hyväksytyt päätepisteet",
@@ -76,6 +78,7 @@
 	"Always": "Aina",
 	"Always": "Aina",
 	"Always Collapse Code Blocks": "Pienennä aina koodilohkot",
 	"Always Collapse Code Blocks": "Pienennä aina koodilohkot",
 	"Always Expand Details": "Laajenna aina tiedot",
 	"Always Expand Details": "Laajenna aina tiedot",
+	"Always Play Notification Sound": "",
 	"Amazing": "Hämmästyttävä",
 	"Amazing": "Hämmästyttävä",
 	"an assistant": "avustaja",
 	"an assistant": "avustaja",
 	"Analyzed": "Analysoitu",
 	"Analyzed": "Analysoitu",
@@ -83,7 +86,7 @@
 	"and": "ja",
 	"and": "ja",
 	"and {{COUNT}} more": "ja {{COUNT}} muuta",
 	"and {{COUNT}} more": "ja {{COUNT}} muuta",
 	"and create a new shared link.": "ja luo uusi jaettu linkki.",
 	"and create a new shared link.": "ja luo uusi jaettu linkki.",
-	"Android": "",
+	"Android": "Android",
 	"API Base URL": "API:n verkko-osoite",
 	"API Base URL": "API:n verkko-osoite",
 	"API Key": "API-avain",
 	"API Key": "API-avain",
 	"API Key created.": "API-avain luotu.",
 	"API Key created.": "API-avain luotu.",
@@ -116,7 +119,7 @@
 	"Auth": "Todennus",
 	"Auth": "Todennus",
 	"Authenticate": "Todentaa",
 	"Authenticate": "Todentaa",
 	"Authentication": "Todennus",
 	"Authentication": "Todennus",
-	"Auto": "",
+	"Auto": "Automaattinen",
 	"Auto-Copy Response to Clipboard": "Kopioi vastaus automaattisesti leikepöydälle",
 	"Auto-Copy Response to Clipboard": "Kopioi vastaus automaattisesti leikepöydälle",
 	"Auto-playback response": "Soita vastaus automaattisesti",
 	"Auto-playback response": "Soita vastaus automaattisesti",
 	"Autocomplete Generation": "Automaattisen täydennyksen luonti",
 	"Autocomplete Generation": "Automaattisen täydennyksen luonti",
@@ -157,7 +160,7 @@
 	"Change Password": "Vaihda salasana",
 	"Change Password": "Vaihda salasana",
 	"Channel Name": "Kanavan nimi",
 	"Channel Name": "Kanavan nimi",
 	"Channels": "Kanavat",
 	"Channels": "Kanavat",
-	"Character": "Hahmo",
+	"Character": "Kirjain",
 	"Character limit for autocomplete generation input": "Automaattisen täydennyksen syötteen merkkiraja",
 	"Character limit for autocomplete generation input": "Automaattisen täydennyksen syötteen merkkiraja",
 	"Chart new frontiers": "Kartoita uusia rajapintoja",
 	"Chart new frontiers": "Kartoita uusia rajapintoja",
 	"Chat": "Keskustelu",
 	"Chat": "Keskustelu",
@@ -224,10 +227,10 @@
 	"Confirm your new password": "Vahvista uusi salasanasi",
 	"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 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.",
 	"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": "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.": "",
 	"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",
 	"Contact Admin for WebUI Access": "Ota yhteyttä ylläpitäjään WebUI-käyttöä varten",
 	"Content": "Sisältö",
 	"Content": "Sisältö",
@@ -245,7 +248,7 @@
 	"Copied shared chat URL to clipboard!": "Jaettu keskustelulinkki kopioitu leikepöydälle!",
 	"Copied shared chat URL to clipboard!": "Jaettu keskustelulinkki kopioitu leikepöydälle!",
 	"Copied to clipboard": "Kopioitu leikepöydälle",
 	"Copied to clipboard": "Kopioitu leikepöydälle",
 	"Copy": "Kopioi",
 	"Copy": "Kopioi",
-	"Copy Formatted Text": "",
+	"Copy Formatted Text": "Kopioi muotoiltu teksti",
 	"Copy last code block": "Kopioi viimeisin koodilohko",
 	"Copy last code block": "Kopioi viimeisin koodilohko",
 	"Copy last response": "Kopioi viimeisin vastaus",
 	"Copy last response": "Kopioi viimeisin vastaus",
 	"Copy Link": "Kopioi linkki",
 	"Copy Link": "Kopioi linkki",
@@ -308,7 +311,7 @@
 	"Deleted User": "Käyttäjä poistettu",
 	"Deleted User": "Käyttäjä poistettu",
 	"Describe your knowledge base and objectives": "Kuvaa tietokantasi ja tavoitteesi",
 	"Describe your knowledge base and objectives": "Kuvaa tietokantasi ja tavoitteesi",
 	"Description": "Kuvaus",
 	"Description": "Kuvaus",
-	"Detect Artifacts Automatically": "",
+	"Detect Artifacts Automatically": "Tunnista artefaktit automaattisesti",
 	"Didn't fully follow instructions": "Ei noudattanut ohjeita täysin",
 	"Didn't fully follow instructions": "Ei noudattanut ohjeita täysin",
 	"Direct": "Suora",
 	"Direct": "Suora",
 	"Direct Connections": "Suorat yhteydet",
 	"Direct Connections": "Suorat yhteydet",
@@ -364,7 +367,7 @@
 	"e.g. my_filter": "esim. oma_suodatin",
 	"e.g. my_filter": "esim. oma_suodatin",
 	"e.g. my_tools": "esim. omat_työkalut",
 	"e.g. my_tools": "esim. omat_työkalut",
 	"e.g. Tools for performing various operations": "esim. työkaluja erilaisten toimenpiteiden suorittamiseen",
 	"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": "Muokkaa",
 	"Edit Arena Model": "Muokkaa Arena-mallia",
 	"Edit Arena Model": "Muokkaa Arena-mallia",
 	"Edit Channel": "Muokkaa kanavaa",
 	"Edit Channel": "Muokkaa kanavaa",
@@ -407,15 +410,19 @@
 	"Enter CFG Scale (e.g. 7.0)": "Kirjoita CFG-mitta (esim. 7.0)",
 	"Enter CFG Scale (e.g. 7.0)": "Kirjoita CFG-mitta (esim. 7.0)",
 	"Enter Chunk Overlap": "Syötä osien päällekkäisyys",
 	"Enter Chunk Overlap": "Syötä osien päällekkäisyys",
 	"Enter Chunk Size": "Syötä osien koko",
 	"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 description": "Kirjoita kuvaus",
 	"Enter Docling Server URL": "Kirjoita Docling palvelimen verkko-osoite",
 	"Enter Docling Server URL": "Kirjoita Docling palvelimen verkko-osoite",
 	"Enter Document Intelligence Endpoint": "Kirjoita asiakirja tiedustelun päätepiste",
 	"Enter Document Intelligence Endpoint": "Kirjoita asiakirja tiedustelun päätepiste",
 	"Enter Document Intelligence Key": "Kirjoiuta asiakirja tiedustelun avain",
 	"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 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 Exa API Key": "Kirjoita Exa API -avain",
-	"Enter Firecrawl API Base URL": "",
-	"Enter Firecrawl 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": "Kirjoita Firecrawl API -verkko-osoite",
+	"Enter Firecrawl API Key": "Kirjoita Firecrawl API-avain",
 	"Enter Github Raw URL": "Kirjoita Github Raw -verkko-osoite",
 	"Enter Github Raw URL": "Kirjoita Github Raw -verkko-osoite",
 	"Enter Google PSE API Key": "Kirjoita Google PSE API -avain",
 	"Enter Google PSE API Key": "Kirjoita Google PSE API -avain",
 	"Enter Google PSE Engine Id": "Kirjoita Google PSE -moottorin tunnus",
 	"Enter Google PSE Engine Id": "Kirjoita Google PSE -moottorin tunnus",
@@ -433,8 +440,8 @@
 	"Enter Mojeek Search API Key": "Kirjoita Mojeek Search API -avain",
 	"Enter Mojeek Search API Key": "Kirjoita Mojeek Search API -avain",
 	"Enter Number of Steps (e.g. 50)": "Kirjoita askelten määrä (esim. 50)",
 	"Enter Number of Steps (e.g. 50)": "Kirjoita askelten määrä (esim. 50)",
 	"Enter Perplexity API Key": "Aseta Perplexity API-avain",
 	"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 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 reasoning effort": "",
 	"Enter Sampler (e.g. Euler a)": "Kirjoita näytteistäjä (esim. Euler a)",
 	"Enter Sampler (e.g. Euler a)": "Kirjoita näytteistäjä (esim. Euler a)",
@@ -511,12 +518,17 @@
 	"Export Tools": "Vie työkalut",
 	"Export Tools": "Vie työkalut",
 	"External": "Ulkoiset",
 	"External": "Ulkoiset",
 	"External Models": "Ulkoiset mallit",
 	"External Models": "Ulkoiset mallit",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "Tiedoston lisääminen epäonnistui.",
 	"Failed to add file.": "Tiedoston lisääminen epäonnistui.",
 	"Failed to connect to {{URL}} OpenAPI tool server": "Yhdistäminen {{URL}} OpenAPI työkalu palvelimeen epäonnistui",
 	"Failed to connect to {{URL}} OpenAPI tool server": "Yhdistäminen {{URL}} OpenAPI työkalu palvelimeen epäonnistui",
 	"Failed to create API Key.": "API-avaimen luonti epäonnistui.",
 	"Failed to create API Key.": "API-avaimen luonti epäonnistui.",
 	"Failed to fetch models": "Mallien hakeminen epäonnistui",
 	"Failed to fetch models": "Mallien hakeminen epäonnistui",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "Leikepöydän sisällön lukeminen 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 save models configuration": "Mallien määrityksen tallentaminen epäonnistui",
 	"Failed to update settings": "Asetusten päivittäminen epäonnistui",
 	"Failed to update settings": "Asetusten päivittäminen epäonnistui",
 	"Failed to upload file.": "Tiedoston lataaminen epäonnistui.",
 	"Failed to upload file.": "Tiedoston lataaminen epäonnistui.",
@@ -539,8 +551,8 @@
 	"Filter is now globally enabled": "Suodatin on nyt otettu käyttöön globaalisti",
 	"Filter is now globally enabled": "Suodatin on nyt otettu käyttöön globaalisti",
 	"Filters": "Suodattimet",
 	"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.",
 	"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",
 	"Fluidly stream large external response chunks": "Virtaa suuria ulkoisia vastausosia joustavasti",
 	"Focus chat input": "Fokusoi syöttökenttään",
 	"Focus chat input": "Fokusoi syöttökenttään",
 	"Folder deleted successfully": "Kansio poistettu onnistuneesti",
 	"Folder deleted successfully": "Kansio poistettu onnistuneesti",
@@ -605,8 +617,8 @@
 	"Hybrid Search": "Hybridihaku",
 	"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.",
 	"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",
 	"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",
 	"Ignite curiosity": "Sytytä uteliaisuus",
 	"Image": "Kuva",
 	"Image": "Kuva",
 	"Image Compression": "Kuvan pakkaus",
 	"Image Compression": "Kuvan pakkaus",
@@ -667,14 +679,14 @@
 	"Label": "Tunniste",
 	"Label": "Tunniste",
 	"Landing Page Mode": "Etusivun tila",
 	"Landing Page Mode": "Etusivun tila",
 	"Language": "Kieli",
 	"Language": "Kieli",
-	"Language Locales": "",
+	"Language Locales": "Kielialueet",
 	"Last Active": "Viimeksi aktiivinen",
 	"Last Active": "Viimeksi aktiivinen",
 	"Last Modified": "Viimeksi muokattu",
 	"Last Modified": "Viimeksi muokattu",
 	"Last reply": "Viimeksi vastattu",
 	"Last reply": "Viimeksi vastattu",
 	"LDAP": "LDAP",
 	"LDAP": "LDAP",
 	"LDAP server updated": "LDAP-palvelin päivitetty",
 	"LDAP server updated": "LDAP-palvelin päivitetty",
 	"Leaderboard": "Tulosluettelo",
 	"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 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}}/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",
 	"Leave empty to include all models from \"{{url}}/models\" endpoint": "Jätä tyhjäksi sisällyttääksesi \"{{url}}/models\" päätepisteen mallit",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "Muisti poistettu onnistuneesti",
 	"Memory deleted successfully": "Muisti poistettu onnistuneesti",
 	"Memory updated successfully": "Muisti päivitetty onnistuneesti",
 	"Memory updated successfully": "Muisti päivitetty onnistuneesti",
 	"Merge Responses": "Yhdistä vastaukset",
 	"Merge Responses": "Yhdistä vastaukset",
+	"Merged Response": "Yhdistetty vastaus",
 	"Message rating should be enabled to use this feature": "Tämän toiminnon käyttämiseksi viestiarviointi on otettava käyttöön",
 	"Message rating should be enabled to use this feature": "Tämän toiminnon käyttämiseksi viestiarviointi on otettava käyttöön",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Linkin luomisen jälkeen lähettämäsi viestit eivät ole jaettuja. Käyttäjät, joilla on verkko-osoite, voivat tarkastella jaettua keskustelua.",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Linkin luomisen jälkeen lähettämäsi viestit eivät ole jaettuja. Käyttäjät, joilla on verkko-osoite, voivat tarkastella jaettua keskustelua.",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "Min P",
 	"Min P": "Min P",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "Uusi salasana",
 	"New Password": "Uusi salasana",
 	"new-channel": "uusi-kanava",
 	"new-channel": "uusi-kanava",
 	"No content found": "Sisältöä ei löytynyt",
 	"No content found": "Sisältöä ei löytynyt",
+	"No content found in file.": "",
 	"No content to speak": "Ei puhuttavaa sisältöä",
 	"No content to speak": "Ei puhuttavaa sisältöä",
 	"No distance available": "Etäisyyttä ei saatavilla",
 	"No distance available": "Etäisyyttä ei saatavilla",
 	"No feedbacks found": "Palautteita ei löytynyt",
 	"No feedbacks found": "Palautteita ei löytynyt",
@@ -812,7 +829,7 @@
 	"Open file": "Avaa tiedosto",
 	"Open file": "Avaa tiedosto",
 	"Open in full screen": "Avaa koko näytön tilaan",
 	"Open in full screen": "Avaa koko näytön tilaan",
 	"Open new chat": "Avaa uusi keskustelu",
 	"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 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 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}})",
 	"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 +868,13 @@
 	"Pipelines Valves": "Putkistojen venttiilit",
 	"Pipelines Valves": "Putkistojen venttiilit",
 	"Plain text (.txt)": "Pelkkä teksti (.txt)",
 	"Plain text (.txt)": "Pelkkä teksti (.txt)",
 	"Playground": "Leikkipaikka",
 	"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 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 do not close the settings page while loading the model.": "Älä sulje asetussivua mallin latautuessa.",
 	"Please enter a prompt": "Kirjoita kehote",
 	"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 fill in all fields.": "Täytä kaikki kentät.",
 	"Please select a model first.": "Valitse ensin malli.",
 	"Please select a model first.": "Valitse ensin malli.",
 	"Please select a model.": "Valitse malli.",
 	"Please select a model.": "Valitse malli.",
@@ -885,7 +902,7 @@
 	"Pull \"{{searchValue}}\" from Ollama.com": "Lataa \"{{searchValue}}\" Ollama.comista",
 	"Pull \"{{searchValue}}\" from Ollama.com": "Lataa \"{{searchValue}}\" Ollama.comista",
 	"Pull a model from Ollama.com": "Lataa malli Ollama.comista",
 	"Pull a model from Ollama.com": "Lataa malli Ollama.comista",
 	"Query Generation Prompt": "Kyselytulosten luontikehote",
 	"Query Generation Prompt": "Kyselytulosten luontikehote",
-	"RAG Template": "RAG-malline",
+	"RAG Template": "RAG-kehote",
 	"Rating": "Arviointi",
 	"Rating": "Arviointi",
 	"Re-rank models by topic similarity": "Uudelleenjärjestä mallit aiheyhteyden mukaan",
 	"Re-rank models by topic similarity": "Uudelleenjärjestä mallit aiheyhteyden mukaan",
 	"Read": "Lue",
 	"Read": "Lue",
@@ -898,11 +915,11 @@
 	"References from": "Viitteet lähteistä",
 	"References from": "Viitteet lähteistä",
 	"Refused when it shouldn't have": "Kieltäytyi, vaikka ei olisi pitänyt",
 	"Refused when it shouldn't have": "Kieltäytyi, vaikka ei olisi pitänyt",
 	"Regenerate": "Uudelleentuota",
 	"Regenerate": "Uudelleentuota",
-	"Reindex": "",
-	"Reindex Knowledge Base Vectors": "",
+	"Reindex": "Indeksoi uudelleen",
+	"Reindex Knowledge Base Vectors": "Indeksoi tietämyksen vektorit uudelleen",
 	"Release Notes": "Julkaisutiedot",
 	"Release Notes": "Julkaisutiedot",
 	"Relevance": "Relevanssi",
 	"Relevance": "Relevanssi",
-	"Relevance Threshold": "",
+	"Relevance Threshold": "Relevanssikynnys",
 	"Remove": "Poista",
 	"Remove": "Poista",
 	"Remove Model": "Poista malli",
 	"Remove Model": "Poista malli",
 	"Rename": "Nimeä uudelleen",
 	"Rename": "Nimeä uudelleen",
@@ -939,7 +956,7 @@
 	"Save Tag": "Tallenna tagi",
 	"Save Tag": "Tallenna tagi",
 	"Saved": "Tallennettu",
 	"Saved": "Tallennettu",
 	"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": "Keskustelulokien tallentaminen suoraan selaimen tallennustilaan ei ole enää tuettu. Lataa ja poista keskustelulokit napsauttamalla alla olevaa painiketta. Älä huoli, voit helposti tuoda keskustelulokit takaisin backendiin",
 	"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": "Keskustelulokien tallentaminen suoraan selaimen tallennustilaan ei ole enää tuettu. Lataa ja poista keskustelulokit napsauttamalla alla olevaa painiketta. Älä huoli, voit helposti tuoda keskustelulokit takaisin backendiin",
-	"Scroll to bottom when switching between branches": "Vierittää alaspäin vaihdettaessa haarojen välillä",
+	"Scroll On Branch Change": "",
 	"Search": "Haku",
 	"Search": "Haku",
 	"Search a model": "Hae mallia",
 	"Search a model": "Hae mallia",
 	"Search Base": "Hakupohja",
 	"Search Base": "Hakupohja",
@@ -1085,7 +1102,7 @@
 	"Theme": "Teema",
 	"Theme": "Teema",
 	"Thinking...": "Ajattelee...",
 	"Thinking...": "Ajattelee...",
 	"This action cannot be undone. Do you wish to continue?": "Tätä toimintoa ei voi peruuttaa. Haluatko jatkaa?",
 	"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 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 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.",
 	"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 +1161,7 @@
 	"Tools have a function calling system that allows arbitrary code execution.": "Työkalut sallivat mielivaltaisen koodin suorittamisen toimintokutsuilla.",
 	"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",
 	"Tools Public Sharing": "Työkalujen julkinen jakaminen",
 	"Top K": "Top K",
 	"Top K": "Top K",
-	"Top K Reranker": "",
+	"Top K Reranker": "Top K uudelleen sijoittaja",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Transformers": "Muunnokset",
 	"Transformers": "Muunnokset",
 	"Trouble accessing Ollama?": "Ongelmia Ollama-yhteydessä?",
 	"Trouble accessing Ollama?": "Ongelmia Ollama-yhteydessä?",
@@ -1170,7 +1187,7 @@
 	"Updated": "Päivitetty",
 	"Updated": "Päivitetty",
 	"Updated at": "Päivitetty",
 	"Updated at": "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": "Lataa",
 	"Upload a GGUF model": "Lataa GGUF-malli",
 	"Upload a GGUF model": "Lataa GGUF-malli",
 	"Upload directory": "Latauksen hakemisto",
 	"Upload directory": "Latauksen hakemisto",
@@ -1184,8 +1201,8 @@
 	"Use Gravatar": "Käytä Gravataria",
 	"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 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 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_mlock (Ollama)": "use_mlock (Ollama)",
 	"use_mmap (Ollama)": "use_mmap (Ollama)",
 	"use_mmap (Ollama)": "use_mmap (Ollama)",
 	"user": "käyttäjä",
 	"user": "käyttäjä",
@@ -1203,7 +1220,7 @@
 	"variable": "muuttuja",
 	"variable": "muuttuja",
 	"variable to have them replaced with clipboard content.": "muuttuja korvataan leikepöydän sisällöllä.",
 	"variable to have them replaced with clipboard content.": "muuttuja korvataan leikepöydän sisällöllä.",
 	"Verify Connection": "Tarkista yhteys",
 	"Verify Connection": "Tarkista yhteys",
-	"Verify SSL Certificate": "",
+	"Verify SSL Certificate": "Tarkista SSL-varmenne",
 	"Version": "Versio",
 	"Version": "Versio",
 	"Version {{selectedVersion}} of {{totalVersions}}": "Versio {{selectedVersion}} / {{totalVersions}}",
 	"Version {{selectedVersion}} of {{totalVersions}}": "Versio {{selectedVersion}} / {{totalVersions}}",
 	"View Replies": "Näytä vastaukset",
 	"View Replies": "Näytä vastaukset",
@@ -1218,7 +1235,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.",
 	"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": "Web",
 	"Web API": "Web-API",
 	"Web API": "Web-API",
-	"Web Loader Engine": "",
+	"Web Loader Engine": "Verkko lataaja moottori",
 	"Web Search": "Verkkohaku",
 	"Web Search": "Verkkohaku",
 	"Web Search Engine": "Hakukoneet",
 	"Web Search Engine": "Hakukoneet",
 	"Web Search in Chat": "Verkkohaku keskustelussa",
 	"Web Search in Chat": "Verkkohaku keskustelussa",
@@ -1248,7 +1265,7 @@
 	"Write your model template content here": "Kirjoita mallisi mallinnesisältö tähän",
 	"Write your model template content here": "Kirjoita mallisi mallinnesisältö tähän",
 	"Yesterday": "Eilen",
 	"Yesterday": "Eilen",
 	"You": "Sinä",
 	"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 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 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.",
 	"You cannot upload an empty file.": "Et voi ladata tyhjää tiedostoa.",

+ 18 - 1
src/lib/i18n/locales/fr-CA/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "",
 	"Allow Chat Delete": "",
 	"Allow Chat Deletion": "Autoriser la suppression de l'historique de chat",
 	"Allow Chat Deletion": "Autoriser la suppression de l'historique de chat",
 	"Allow Chat Edit": "",
 	"Allow Chat Edit": "",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "",
 	"Allow File Upload": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "Autoriser les voix non locales",
 	"Allow non-local voices": "Autoriser les voix non locales",
@@ -76,6 +78,7 @@
 	"Always": "",
 	"Always": "",
 	"Always Collapse Code Blocks": "",
 	"Always Collapse Code Blocks": "",
 	"Always Expand Details": "",
 	"Always Expand Details": "",
+	"Always Play Notification Sound": "",
 	"Amazing": "",
 	"Amazing": "",
 	"an assistant": "un assistant",
 	"an assistant": "un assistant",
 	"Analyzed": "",
 	"Analyzed": "",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "",
 	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "Entrez l'URL brute de GitHub",
 	"Enter Github Raw URL": "Entrez l'URL brute de GitHub",
@@ -511,10 +518,15 @@
 	"Export Tools": "Outils d'exportation",
 	"Export Tools": "Outils d'exportation",
 	"External": "",
 	"External": "",
 	"External Models": "Modèles externes",
 	"External Models": "Modèles externes",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "",
 	"Failed to add file.": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "Échec de la création de la clé API.",
 	"Failed to create API Key.": "Échec de la création de la clé API.",
 	"Failed to fetch models": "",
 	"Failed to fetch models": "",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "Échec de la lecture du contenu du presse-papiers",
 	"Failed to read clipboard contents": "Échec de la lecture du contenu du presse-papiers",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "",
 	"Failed to save models configuration": "",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "La mémoire a été supprimée avec succès",
 	"Memory deleted successfully": "La mémoire a été supprimée avec succès",
 	"Memory updated successfully": "La mémoire a été mise à jour avec succès",
 	"Memory updated successfully": "La mémoire a été mise à jour avec succès",
 	"Merge Responses": "",
 	"Merge Responses": "",
+	"Merged Response": "Réponse fusionnée",
 	"Message rating should be enabled to use this feature": "",
 	"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.": "Les messages que vous envoyez après avoir créé votre lien ne seront pas partagés. Les utilisateurs disposant de l'URL pourront voir le chat partagé.",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Les messages que vous envoyez après avoir créé votre lien ne seront pas partagés. Les utilisateurs disposant de l'URL pourront voir le chat partagé.",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "",
 	"Min P": "",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "Nouveau mot de passe",
 	"New Password": "Nouveau mot de passe",
 	"new-channel": "",
 	"new-channel": "",
 	"No content found": "",
 	"No content found": "",
+	"No content found in file.": "",
 	"No content to speak": "Rien à signaler",
 	"No content to speak": "Rien à signaler",
 	"No distance available": "",
 	"No distance available": "",
 	"No feedbacks found": "",
 	"No feedbacks found": "",
@@ -939,7 +956,7 @@
 	"Save Tag": "",
 	"Save Tag": "",
 	"Saved": "",
 	"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": "La sauvegarde des journaux de discussion directement dans le stockage de votre navigateur n'est plus prise en charge. Veuillez prendre un instant pour télécharger et supprimer vos journaux de discussion en cliquant sur le bouton ci-dessous. Pas de soucis, vous pouvez facilement les réimporter depuis le backend via l'interface ci-dessous",
 	"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": "La sauvegarde des journaux de discussion directement dans le stockage de votre navigateur n'est plus prise en charge. Veuillez prendre un instant pour télécharger et supprimer vos journaux de discussion en cliquant sur le bouton ci-dessous. Pas de soucis, vous pouvez facilement les réimporter depuis le backend via l'interface ci-dessous",
-	"Scroll to bottom when switching between branches": "",
+	"Scroll On Branch Change": "",
 	"Search": "Recherche",
 	"Search": "Recherche",
 	"Search a model": "Rechercher un modèle",
 	"Search a model": "Rechercher un modèle",
 	"Search Base": "",
 	"Search Base": "",

+ 18 - 1
src/lib/i18n/locales/fr-FR/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "Autoriser la suppression de la conversation",
 	"Allow Chat Delete": "Autoriser la suppression de la conversation",
 	"Allow Chat Deletion": "Autoriser la suppression de l'historique de chat",
 	"Allow Chat Deletion": "Autoriser la suppression de l'historique de chat",
 	"Allow Chat Edit": "Autoriser la modification de la conversation",
 	"Allow Chat Edit": "Autoriser la modification de la conversation",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "Autoriser le téléchargement de fichiers",
 	"Allow File Upload": "Autoriser le téléchargement de fichiers",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "Autoriser les voix non locales",
 	"Allow non-local voices": "Autoriser les voix non locales",
@@ -76,6 +78,7 @@
 	"Always": "",
 	"Always": "",
 	"Always Collapse Code Blocks": "",
 	"Always Collapse Code Blocks": "",
 	"Always Expand Details": "",
 	"Always Expand Details": "",
+	"Always Play Notification Sound": "",
 	"Amazing": "Incroyable",
 	"Amazing": "Incroyable",
 	"an assistant": "un assistant",
 	"an assistant": "un assistant",
 	"Analyzed": "",
 	"Analyzed": "",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "",
 	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "Entrez l'URL brute de GitHub",
 	"Enter Github Raw URL": "Entrez l'URL brute de GitHub",
@@ -511,10 +518,15 @@
 	"Export Tools": "Exporter des outils",
 	"Export Tools": "Exporter des outils",
 	"External": "",
 	"External": "",
 	"External Models": "Modèles externes",
 	"External Models": "Modèles externes",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "Échec de l'ajout du fichier.",
 	"Failed to add file.": "Échec de l'ajout du fichier.",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "Échec de la création de la clé API.",
 	"Failed to create API Key.": "Échec de la création de la clé API.",
 	"Failed to fetch models": "Échec de la récupération des modèles",
 	"Failed to fetch models": "Échec de la récupération des modèles",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "Échec de la lecture du contenu du presse-papiers",
 	"Failed to read clipboard contents": "Échec de la lecture du contenu du presse-papiers",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "Échec de la sauvegarde de la configuration des modèles",
 	"Failed to save models configuration": "Échec de la sauvegarde de la configuration des modèles",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "Le souvenir a été supprimé avec succès",
 	"Memory deleted successfully": "Le souvenir a été supprimé avec succès",
 	"Memory updated successfully": "Le souvenir a été mis à jour avec succès",
 	"Memory updated successfully": "Le souvenir a été mis à jour avec succès",
 	"Merge Responses": "Fusionner les réponses",
 	"Merge Responses": "Fusionner les réponses",
+	"Merged Response": "Réponse fusionnée",
 	"Message rating should be enabled to use this feature": "L'évaluation des messages doit être activée pour pouvoir utiliser cette fonctionnalité",
 	"Message rating should be enabled to use this feature": "L'évaluation des messages doit être activée pour pouvoir utiliser cette fonctionnalité",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Les messages que vous envoyez après avoir créé votre lien ne seront pas partagés. Les utilisateurs disposant de l'URL pourront voir la conversation partagée.",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Les messages que vous envoyez après avoir créé votre lien ne seront pas partagés. Les utilisateurs disposant de l'URL pourront voir la conversation partagée.",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "P min",
 	"Min P": "P min",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "Nouveau mot de passe",
 	"New Password": "Nouveau mot de passe",
 	"new-channel": "nouveau-canal",
 	"new-channel": "nouveau-canal",
 	"No content found": "Aucun contenu trouvé",
 	"No content found": "Aucun contenu trouvé",
+	"No content found in file.": "",
 	"No content to speak": "Rien à signaler",
 	"No content to speak": "Rien à signaler",
 	"No distance available": "Aucune distance disponible",
 	"No distance available": "Aucune distance disponible",
 	"No feedbacks found": "Aucun avis trouvé",
 	"No feedbacks found": "Aucun avis trouvé",
@@ -939,7 +956,7 @@
 	"Save Tag": "Enregistrer le tag",
 	"Save Tag": "Enregistrer le tag",
 	"Saved": "Enregistré",
 	"Saved": "Enregistré",
 	"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": "La sauvegarde des journaux de conversation directement dans le stockage de votre navigateur n'est plus prise en charge. Veuillez prendre un instant pour télécharger et supprimer vos journaux de conversation en cliquant sur le bouton ci-dessous. Ne vous inquiétez pas, vous pouvez facilement réimporter vos journaux de conversation dans le backend via",
 	"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": "La sauvegarde des journaux de conversation directement dans le stockage de votre navigateur n'est plus prise en charge. Veuillez prendre un instant pour télécharger et supprimer vos journaux de conversation en cliquant sur le bouton ci-dessous. Ne vous inquiétez pas, vous pouvez facilement réimporter vos journaux de conversation dans le backend via",
-	"Scroll to bottom when switching between branches": "Défiler vers le bas lors du passage d'une branche à l'autre",
+	"Scroll On Branch Change": "",
 	"Search": "Recherche",
 	"Search": "Recherche",
 	"Search a model": "Rechercher un modèle",
 	"Search a model": "Rechercher un modèle",
 	"Search Base": "Base de recherche",
 	"Search Base": "Base de recherche",

+ 1 - 0
src/lib/i18n/locales/gl-ES/translation.json

@@ -665,6 +665,7 @@
 	"Memory deleted successfully": "Memoria borrada correctamente",
 	"Memory deleted successfully": "Memoria borrada correctamente",
 	"Memory updated successfully": "Memoria actualizada correctamente",
 	"Memory updated successfully": "Memoria actualizada correctamente",
 	"Merge Responses": "Fusionar Respuestas",
 	"Merge Responses": "Fusionar Respuestas",
+	"Merged Response": "Resposta combinada",
 	"Message rating should be enabled to use this feature": "a calificación de mensaxes debe estar habilitada para usar esta función",
 	"Message rating should be enabled to use this feature": "a calificación de mensaxes debe estar habilitada para usar esta función",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Os mensaxes que envíe despois de xerar su enlace no compartiránse. os usuarios co enlace podrán ver o 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.": "Os mensaxes que envíe despois de xerar su enlace no compartiránse. os usuarios co enlace podrán ver o chat compartido.",
 	"Min P": "Min P",
 	"Min P": "Min P",

+ 18 - 1
src/lib/i18n/locales/he-IL/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "",
 	"Allow Chat Delete": "",
 	"Allow Chat Deletion": "אפשר מחיקת צ'אט",
 	"Allow Chat Deletion": "אפשר מחיקת צ'אט",
 	"Allow Chat Edit": "",
 	"Allow Chat Edit": "",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "",
 	"Allow File Upload": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "",
 	"Allow non-local voices": "",
@@ -76,6 +78,7 @@
 	"Always": "",
 	"Always": "",
 	"Always Collapse Code Blocks": "",
 	"Always Collapse Code Blocks": "",
 	"Always Expand Details": "",
 	"Always Expand Details": "",
+	"Always Play Notification Sound": "",
 	"Amazing": "",
 	"Amazing": "",
 	"an assistant": "עוזר",
 	"an assistant": "עוזר",
 	"Analyzed": "",
 	"Analyzed": "",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "",
 	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "הזן כתובת URL של Github Raw",
 	"Enter Github Raw URL": "הזן כתובת URL של Github Raw",
@@ -511,10 +518,15 @@
 	"Export Tools": "",
 	"Export Tools": "",
 	"External": "",
 	"External": "",
 	"External Models": "",
 	"External Models": "",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "",
 	"Failed to add file.": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "יצירת מפתח API נכשלה.",
 	"Failed to create API Key.": "יצירת מפתח API נכשלה.",
 	"Failed to fetch models": "",
 	"Failed to fetch models": "",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "קריאת תוכן הלוח נכשלה",
 	"Failed to read clipboard contents": "קריאת תוכן הלוח נכשלה",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "",
 	"Failed to save models configuration": "",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "",
 	"Memory deleted successfully": "",
 	"Memory updated successfully": "",
 	"Memory updated successfully": "",
 	"Merge Responses": "",
 	"Merge Responses": "",
+	"Merged Response": "תגובה ממוזגת",
 	"Message rating should be enabled to use this feature": "",
 	"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.": "הודעות שתשלח לאחר יצירת הקישור לא ישותפו. משתמשים עם כתובת האתר יוכלו לצפות בצ'אט המשותף.",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "הודעות שתשלח לאחר יצירת הקישור לא ישותפו. משתמשים עם כתובת האתר יוכלו לצפות בצ'אט המשותף.",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "",
 	"Min P": "",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "סיסמה חדשה",
 	"New Password": "סיסמה חדשה",
 	"new-channel": "",
 	"new-channel": "",
 	"No content found": "",
 	"No content found": "",
+	"No content found in file.": "",
 	"No content to speak": "",
 	"No content to speak": "",
 	"No distance available": "",
 	"No distance available": "",
 	"No feedbacks found": "",
 	"No feedbacks found": "",
@@ -939,7 +956,7 @@
 	"Save Tag": "",
 	"Save Tag": "",
 	"Saved": "",
 	"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": "שמירת יומני צ'אט ישירות באחסון הדפדפן שלך אינה נתמכת יותר. אנא הקדש רגע להוריד ולמחוק את יומני הצ'אט שלך על ידי לחיצה על הכפתור למטה. אל דאגה, באפשרותך לייבא מחדש בקלות את יומני הצ'אט שלך לשרת האחורי דרך",
 	"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 to bottom when switching between branches": "",
+	"Scroll On Branch Change": "",
 	"Search": "חפש",
 	"Search": "חפש",
 	"Search a model": "חפש מודל",
 	"Search a model": "חפש מודל",
 	"Search Base": "",
 	"Search Base": "",

+ 18 - 1
src/lib/i18n/locales/hi-IN/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "",
 	"Allow Chat Delete": "",
 	"Allow Chat Deletion": "चैट हटाने की अनुमति दें",
 	"Allow Chat Deletion": "चैट हटाने की अनुमति दें",
 	"Allow Chat Edit": "",
 	"Allow Chat Edit": "",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "",
 	"Allow File Upload": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "",
 	"Allow non-local voices": "",
@@ -76,6 +78,7 @@
 	"Always": "",
 	"Always": "",
 	"Always Collapse Code Blocks": "",
 	"Always Collapse Code Blocks": "",
 	"Always Expand Details": "",
 	"Always Expand Details": "",
+	"Always Play Notification Sound": "",
 	"Amazing": "",
 	"Amazing": "",
 	"an assistant": "एक सहायक",
 	"an assistant": "एक सहायक",
 	"Analyzed": "",
 	"Analyzed": "",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "",
 	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "Github Raw URL दर्ज करें",
 	"Enter Github Raw URL": "Github Raw URL दर्ज करें",
@@ -511,10 +518,15 @@
 	"Export Tools": "",
 	"Export Tools": "",
 	"External": "",
 	"External": "",
 	"External Models": "",
 	"External Models": "",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "",
 	"Failed to add file.": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "एपीआई कुंजी बनाने में विफल.",
 	"Failed to create API Key.": "एपीआई कुंजी बनाने में विफल.",
 	"Failed to fetch models": "",
 	"Failed to fetch models": "",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "क्लिपबोर्ड सामग्री पढ़ने में विफल",
 	"Failed to read clipboard contents": "क्लिपबोर्ड सामग्री पढ़ने में विफल",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "",
 	"Failed to save models configuration": "",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "",
 	"Memory deleted successfully": "",
 	"Memory updated successfully": "",
 	"Memory updated successfully": "",
 	"Merge Responses": "",
 	"Merge Responses": "",
+	"Merged Response": "मिली-जुली प्रतिक्रिया",
 	"Message rating should be enabled to use this feature": "",
 	"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.": "अपना लिंक बनाने के बाद आपके द्वारा भेजे गए संदेश साझा नहीं किए जाएंगे। यूआरएल वाले यूजर्स शेयर की गई चैट देख पाएंगे।",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "अपना लिंक बनाने के बाद आपके द्वारा भेजे गए संदेश साझा नहीं किए जाएंगे। यूआरएल वाले यूजर्स शेयर की गई चैट देख पाएंगे।",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "",
 	"Min P": "",
 	"Mirostat": "मिरोस्टा",
 	"Mirostat": "मिरोस्टा",
 	"Mirostat Eta": "मिरोस्टा ईटा",
 	"Mirostat Eta": "मिरोस्टा ईटा",
@@ -761,6 +777,7 @@
 	"New Password": "नया पासवर्ड",
 	"New Password": "नया पासवर्ड",
 	"new-channel": "",
 	"new-channel": "",
 	"No content found": "",
 	"No content found": "",
+	"No content found in file.": "",
 	"No content to speak": "",
 	"No content to speak": "",
 	"No distance available": "",
 	"No distance available": "",
 	"No feedbacks found": "",
 	"No feedbacks found": "",
@@ -939,7 +956,7 @@
 	"Save Tag": "",
 	"Save Tag": "",
 	"Saved": "",
 	"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": "चैट लॉग को सीधे आपके ब्राउज़र के स्टोरेज में सहेजना अब समर्थित नहीं है। कृपया नीचे दिए गए बटन पर क्लिक करके डाउनलोड करने और अपने चैट लॉग को हटाने के लिए कुछ समय दें। चिंता न करें, आप आसानी से अपने चैट लॉग को बैकएंड पर पुनः आयात कर सकते हैं",
 	"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 to bottom when switching between branches": "",
+	"Scroll On Branch Change": "",
 	"Search": "खोजें",
 	"Search": "खोजें",
 	"Search a model": "एक मॉडल खोजें",
 	"Search a model": "एक मॉडल खोजें",
 	"Search Base": "",
 	"Search Base": "",

+ 18 - 1
src/lib/i18n/locales/hr-HR/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "",
 	"Allow Chat Delete": "",
 	"Allow Chat Deletion": "Dopusti brisanje razgovora",
 	"Allow Chat Deletion": "Dopusti brisanje razgovora",
 	"Allow Chat Edit": "",
 	"Allow Chat Edit": "",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "",
 	"Allow File Upload": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "Dopusti nelokalne glasove",
 	"Allow non-local voices": "Dopusti nelokalne glasove",
@@ -76,6 +78,7 @@
 	"Always": "",
 	"Always": "",
 	"Always Collapse Code Blocks": "",
 	"Always Collapse Code Blocks": "",
 	"Always Expand Details": "",
 	"Always Expand Details": "",
+	"Always Play Notification Sound": "",
 	"Amazing": "",
 	"Amazing": "",
 	"an assistant": "asistent",
 	"an assistant": "asistent",
 	"Analyzed": "",
 	"Analyzed": "",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "",
 	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "Unesite Github sirovi URL",
 	"Enter Github Raw URL": "Unesite Github sirovi URL",
@@ -511,10 +518,15 @@
 	"Export Tools": "Izvoz alata",
 	"Export Tools": "Izvoz alata",
 	"External": "",
 	"External": "",
 	"External Models": "Vanjski modeli",
 	"External Models": "Vanjski modeli",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "",
 	"Failed to add file.": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "Neuspješno stvaranje API ključa.",
 	"Failed to create API Key.": "Neuspješno stvaranje API ključa.",
 	"Failed to fetch models": "",
 	"Failed to fetch models": "",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "Neuspješno čitanje sadržaja međuspremnika",
 	"Failed to read clipboard contents": "Neuspješno čitanje sadržaja međuspremnika",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "",
 	"Failed to save models configuration": "",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "",
 	"Memory deleted successfully": "",
 	"Memory updated successfully": "",
 	"Memory updated successfully": "",
 	"Merge Responses": "",
 	"Merge Responses": "",
+	"Merged Response": "Spojeni odgovor",
 	"Message rating should be enabled to use this feature": "",
 	"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.": "Poruke koje pošaljete nakon stvaranja veze neće se dijeliti. Korisnici s URL-om moći će vidjeti zajednički chat.",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Poruke koje pošaljete nakon stvaranja veze neće se dijeliti. Korisnici s URL-om moći će vidjeti zajednički chat.",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "",
 	"Min P": "",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "Nova lozinka",
 	"New Password": "Nova lozinka",
 	"new-channel": "",
 	"new-channel": "",
 	"No content found": "",
 	"No content found": "",
+	"No content found in file.": "",
 	"No content to speak": "",
 	"No content to speak": "",
 	"No distance available": "",
 	"No distance available": "",
 	"No feedbacks found": "",
 	"No feedbacks found": "",
@@ -939,7 +956,7 @@
 	"Save Tag": "",
 	"Save Tag": "",
 	"Saved": "",
 	"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": "Spremanje zapisnika razgovora izravno u pohranu vašeg preglednika više nije podržano. Molimo vas da odvojite trenutak za preuzimanje i brisanje zapisnika razgovora klikom na gumb ispod. Ne brinite, možete lako ponovno uvesti zapisnike razgovora u backend putem",
 	"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": "Spremanje zapisnika razgovora izravno u pohranu vašeg preglednika više nije podržano. Molimo vas da odvojite trenutak za preuzimanje i brisanje zapisnika razgovora klikom na gumb ispod. Ne brinite, možete lako ponovno uvesti zapisnike razgovora u backend putem",
-	"Scroll to bottom when switching between branches": "",
+	"Scroll On Branch Change": "",
 	"Search": "Pretraga",
 	"Search": "Pretraga",
 	"Search a model": "Pretraži model",
 	"Search a model": "Pretraži model",
 	"Search Base": "",
 	"Search Base": "",

+ 18 - 1
src/lib/i18n/locales/hu-HU/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "Csevegés törlésének engedélyezése",
 	"Allow Chat Delete": "Csevegés törlésének engedélyezése",
 	"Allow Chat Deletion": "Beszélgetések törlésének engedélyezése",
 	"Allow Chat Deletion": "Beszélgetések törlésének engedélyezése",
 	"Allow Chat Edit": "Csevegés szerkesztésének engedélyezése",
 	"Allow Chat Edit": "Csevegés szerkesztésének engedélyezése",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "Fájlfeltöltés engedélyezése",
 	"Allow File Upload": "Fájlfeltöltés engedélyezése",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "Nem helyi hangok engedélyezése",
 	"Allow non-local voices": "Nem helyi hangok engedélyezése",
@@ -76,6 +78,7 @@
 	"Always": "Mindig",
 	"Always": "Mindig",
 	"Always Collapse Code Blocks": "Kódblokkok mindig összecsukása",
 	"Always Collapse Code Blocks": "Kódblokkok mindig összecsukása",
 	"Always Expand Details": "Részletek mindig kibontása",
 	"Always Expand Details": "Részletek mindig kibontása",
+	"Always Play Notification Sound": "",
 	"Amazing": "Csodálatos",
 	"Amazing": "Csodálatos",
 	"an assistant": "egy asszisztens",
 	"an assistant": "egy asszisztens",
 	"Analyzed": "Elemezve",
 	"Analyzed": "Elemezve",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "Add meg a dokumentum intelligencia kulcsot",
 	"Enter Document Intelligence Key": "Add meg a dokumentum intelligencia kulcsot",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "Add meg a domaineket vesszővel elválasztva (pl. example.com,site.org)",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "Add meg a domaineket vesszővel elválasztva (pl. example.com,site.org)",
 	"Enter Exa API Key": "Add meg az Exa API kulcsot",
 	"Enter Exa API Key": "Add meg az Exa API kulcsot",
+	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "Add meg a Github Raw URL-t",
 	"Enter Github Raw URL": "Add meg a Github Raw URL-t",
@@ -511,10 +518,15 @@
 	"Export Tools": "Eszközök exportálása",
 	"Export Tools": "Eszközök exportálása",
 	"External": "Külső",
 	"External": "Külső",
 	"External Models": "Külső modellek",
 	"External Models": "Külső modellek",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "Nem sikerült hozzáadni a fájlt.",
 	"Failed to add file.": "Nem sikerült hozzáadni a fájlt.",
 	"Failed to connect to {{URL}} OpenAPI tool server": "Nem sikerült csatlakozni a {{URL}} OpenAPI eszköszerverhez",
 	"Failed to connect to {{URL}} OpenAPI tool server": "Nem sikerült csatlakozni a {{URL}} OpenAPI eszköszerverhez",
 	"Failed to create API Key.": "Nem sikerült létrehozni az API kulcsot.",
 	"Failed to create API Key.": "Nem sikerült létrehozni az API kulcsot.",
 	"Failed to fetch models": "Nem sikerült lekérni a modelleket",
 	"Failed to fetch models": "Nem sikerült lekérni a modelleket",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "Nem sikerült olvasni a vágólap tartalmát",
 	"Failed to read clipboard contents": "Nem sikerült olvasni a vágólap tartalmát",
 	"Failed to save connections": "Nem sikerült menteni a kapcsolatokat",
 	"Failed to save connections": "Nem sikerült menteni a kapcsolatokat",
 	"Failed to save models configuration": "Nem sikerült menteni a modellek konfigurációját",
 	"Failed to save models configuration": "Nem sikerült menteni a modellek konfigurációját",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "Memória sikeresen törölve",
 	"Memory deleted successfully": "Memória sikeresen törölve",
 	"Memory updated successfully": "Memória sikeresen frissítve",
 	"Memory updated successfully": "Memória sikeresen frissítve",
 	"Merge Responses": "Válaszok egyesítése",
 	"Merge Responses": "Válaszok egyesítése",
+	"Merged Response": "Összevont válasz",
 	"Message rating should be enabled to use this feature": "Az üzenetértékelésnek engedélyezve kell lennie ehhez a funkcióhoz",
 	"Message rating should be enabled to use this feature": "Az üzenetértékelésnek engedélyezve kell lennie ehhez a funkcióhoz",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "A link létrehozása után küldött üzenetei nem lesznek megosztva. A URL-lel rendelkező felhasználók megtekinthetik a megosztott beszélgetést.",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "A link létrehozása után küldött üzenetei nem lesznek megosztva. A URL-lel rendelkező felhasználók megtekinthetik a megosztott beszélgetést.",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "Min P",
 	"Min P": "Min P",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "Új jelszó",
 	"New Password": "Új jelszó",
 	"new-channel": "új csatorna",
 	"new-channel": "új csatorna",
 	"No content found": "Nem található tartalom",
 	"No content found": "Nem található tartalom",
+	"No content found in file.": "",
 	"No content to speak": "Nincs felolvasható tartalom",
 	"No content to speak": "Nincs felolvasható tartalom",
 	"No distance available": "Nincs elérhető távolság",
 	"No distance available": "Nincs elérhető távolság",
 	"No feedbacks found": "Nem található visszajelzés",
 	"No feedbacks found": "Nem található visszajelzés",
@@ -939,7 +956,7 @@
 	"Save Tag": "Címke mentése",
 	"Save Tag": "Címke mentése",
 	"Saved": "Mentve",
 	"Saved": "Mentve",
 	"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": "A csevegési naplók közvetlen mentése a böngésző tárolójába már nem támogatott. Kérjük, szánjon egy percet a csevegési naplók letöltésére és törlésére az alábbi gomb megnyomásával. Ne aggódjon, könnyen újra importálhatja a csevegési naplókat a backend-be",
 	"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": "A csevegési naplók közvetlen mentése a böngésző tárolójába már nem támogatott. Kérjük, szánjon egy percet a csevegési naplók letöltésére és törlésére az alábbi gomb megnyomásával. Ne aggódjon, könnyen újra importálhatja a csevegési naplókat a backend-be",
-	"Scroll to bottom when switching between branches": "Görgetés az aljára ágak közötti váltáskor",
+	"Scroll On Branch Change": "",
 	"Search": "Keresés",
 	"Search": "Keresés",
 	"Search a model": "Modell keresése",
 	"Search a model": "Modell keresése",
 	"Search Base": "Keresési alap",
 	"Search Base": "Keresési alap",

+ 18 - 1
src/lib/i18n/locales/id-ID/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "",
 	"Allow Chat Delete": "",
 	"Allow Chat Deletion": "Izinkan Penghapusan Obrolan",
 	"Allow Chat Deletion": "Izinkan Penghapusan Obrolan",
 	"Allow Chat Edit": "",
 	"Allow Chat Edit": "",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "",
 	"Allow File Upload": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "Izinkan suara non-lokal",
 	"Allow non-local voices": "Izinkan suara non-lokal",
@@ -76,6 +78,7 @@
 	"Always": "",
 	"Always": "",
 	"Always Collapse Code Blocks": "",
 	"Always Collapse Code Blocks": "",
 	"Always Expand Details": "",
 	"Always Expand Details": "",
+	"Always Play Notification Sound": "",
 	"Amazing": "",
 	"Amazing": "",
 	"an assistant": "asisten",
 	"an assistant": "asisten",
 	"Analyzed": "",
 	"Analyzed": "",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "",
 	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "Masukkan URL Mentah Github",
 	"Enter Github Raw URL": "Masukkan URL Mentah Github",
@@ -511,10 +518,15 @@
 	"Export Tools": "Alat Ekspor",
 	"Export Tools": "Alat Ekspor",
 	"External": "",
 	"External": "",
 	"External Models": "Model Eksternal",
 	"External Models": "Model Eksternal",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "",
 	"Failed to add file.": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "Gagal membuat API Key.",
 	"Failed to create API Key.": "Gagal membuat API Key.",
 	"Failed to fetch models": "",
 	"Failed to fetch models": "",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "Gagal membaca konten papan klip",
 	"Failed to read clipboard contents": "Gagal membaca konten papan klip",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "",
 	"Failed to save models configuration": "",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "Memori berhasil dihapus",
 	"Memory deleted successfully": "Memori berhasil dihapus",
 	"Memory updated successfully": "Memori berhasil diperbarui",
 	"Memory updated successfully": "Memori berhasil diperbarui",
 	"Merge Responses": "",
 	"Merge Responses": "",
+	"Merged Response": "Tanggapan yang Digabungkan",
 	"Message rating should be enabled to use this feature": "",
 	"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.": "Pesan yang Anda kirim setelah membuat tautan tidak akan dibagikan. Pengguna yang memiliki URL tersebut akan dapat melihat obrolan yang dibagikan.",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Pesan yang Anda kirim setelah membuat tautan tidak akan dibagikan. Pengguna yang memiliki URL tersebut akan dapat melihat obrolan yang dibagikan.",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "",
 	"Min P": "",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "Kata Sandi Baru",
 	"New Password": "Kata Sandi Baru",
 	"new-channel": "",
 	"new-channel": "",
 	"No content found": "",
 	"No content found": "",
+	"No content found in file.": "",
 	"No content to speak": "Tidak ada konten untuk dibicarakan",
 	"No content to speak": "Tidak ada konten untuk dibicarakan",
 	"No distance available": "",
 	"No distance available": "",
 	"No feedbacks found": "",
 	"No feedbacks found": "",
@@ -939,7 +956,7 @@
 	"Save Tag": "",
 	"Save Tag": "",
 	"Saved": "",
 	"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": "Menyimpan log obrolan secara langsung ke penyimpanan browser Anda tidak lagi didukung. Mohon luangkan waktu sejenak untuk mengunduh dan menghapus log obrolan Anda dengan mengeklik tombol di bawah ini. Jangan khawatir, Anda dapat dengan mudah mengimpor kembali log obrolan Anda ke backend melalui",
 	"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": "Menyimpan log obrolan secara langsung ke penyimpanan browser Anda tidak lagi didukung. Mohon luangkan waktu sejenak untuk mengunduh dan menghapus log obrolan Anda dengan mengeklik tombol di bawah ini. Jangan khawatir, Anda dapat dengan mudah mengimpor kembali log obrolan Anda ke backend melalui",
-	"Scroll to bottom when switching between branches": "",
+	"Scroll On Branch Change": "",
 	"Search": "Cari",
 	"Search": "Cari",
 	"Search a model": "Mencari model",
 	"Search a model": "Mencari model",
 	"Search Base": "",
 	"Search Base": "",

+ 149 - 132
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 --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`)",
 	"(e.g. `sh webui.sh --api`)": "(m.sh. `sh webui.sh --api`)",
 	"(latest)": "(is déanaí)",
 	"(latest)": "(is déanaí)",
-	"(Ollama)": "",
+	"(Ollama)": "(Ollama)",
 	"{{ models }}": "{{ models }}",
 	"{{ 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",
 	"{{COUNT}} Replies": "{{COUNT}} Freagra",
 	"{{user}}'s Chats": "Comhráite {{user}}",
 	"{{user}}'s Chats": "Comhráite {{user}}",
 	"{{webUIName}} Backend Required": "{{webUIName}} Ceoldeireadh Riachtanach",
 	"{{webUIName}} Backend Required": "{{webUIName}} Ceoldeireadh Riachtanach",
@@ -54,28 +54,31 @@
 	"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.",
 	"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 Parameters": "Paraiméadair Casta",
 	"Advanced Params": "Paraiméid Casta",
 	"Advanced Params": "Paraiméid Casta",
-	"All": "",
+	"All": "Gach",
 	"All Documents": "Gach Doiciméad",
 	"All Documents": "Gach Doiciméad",
 	"All models deleted successfully": "Scriosadh na múnlaí go léir go rathúil",
 	"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 Controls": "Ceadaigh Rialuithe Comhrá",
 	"Allow Chat Delete": "Ceadaigh Comhrá a Scriosadh",
 	"Allow Chat Delete": "Ceadaigh Comhrá a Scriosadh",
 	"Allow Chat Deletion": "Cead Scriosadh Comhrá",
 	"Allow Chat Deletion": "Cead Scriosadh Comhrá",
 	"Allow Chat Edit": "Ceadaigh Eagarthóireacht Comhrá",
 	"Allow Chat Edit": "Ceadaigh Eagarthóireacht Comhrá",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "Ceadaigh Uaslódáil Comhad",
 	"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 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 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 User Location": "Ceadaigh Suíomh Úsáideora",
 	"Allow Voice Interruption in Call": "Ceadaigh Briseadh Guth i nGlao",
 	"Allow Voice Interruption in Call": "Ceadaigh Briseadh Guth i nGlao",
 	"Allowed Endpoints": "Críochphointí Ceadaithe",
 	"Allowed Endpoints": "Críochphointí Ceadaithe",
 	"Already have an account?": "Tá cuntas agat cheana féin?",
 	"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": "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í",
+	"Always Play Notification Sound": "",
 	"Amazing": "Iontach",
 	"Amazing": "Iontach",
 	"an assistant": "cúntóir",
 	"an assistant": "cúntóir",
 	"Analyzed": "Anailísithe",
 	"Analyzed": "Anailísithe",
@@ -83,7 +86,7 @@
 	"and": "agus",
 	"and": "agus",
 	"and {{COUNT}} more": "agus {{COUNT}} eile",
 	"and {{COUNT}} more": "agus {{COUNT}} eile",
 	"and create a new shared link.": "agus cruthaigh nasc nua roinnte.",
 	"and create a new shared link.": "agus cruthaigh nasc nua roinnte.",
-	"Android": "",
+	"Android": "Android",
 	"API Base URL": "URL Bonn API",
 	"API Base URL": "URL Bonn API",
 	"API Key": "Eochair API",
 	"API Key": "Eochair API",
 	"API Key created.": "Cruthaíodh Eochair API.",
 	"API Key created.": "Cruthaíodh Eochair API.",
@@ -104,7 +107,7 @@
 	"Are you sure?": "An bhfuil tú cinnte?",
 	"Are you sure?": "An bhfuil tú cinnte?",
 	"Arena Models": "Múnlaí Airéine",
 	"Arena Models": "Múnlaí Airéine",
 	"Artifacts": "Déantáin",
 	"Artifacts": "Déantáin",
-	"Ask": "",
+	"Ask": "Fiafraigh",
 	"Ask a question": "Cuir ceist",
 	"Ask a question": "Cuir ceist",
 	"Assistant": "Cúntóir",
 	"Assistant": "Cúntóir",
 	"Attach file from knowledge": "Ceangail comhad ó eolas",
 	"Attach file from knowledge": "Ceangail comhad ó eolas",
@@ -113,10 +116,10 @@
 	"Attribute for Username": "Tréith don Ainm Úsáideora",
 	"Attribute for Username": "Tréith don Ainm Úsáideora",
 	"Audio": "Fuaim",
 	"Audio": "Fuaim",
 	"August": "Lúnasa",
 	"August": "Lúnasa",
-	"Auth": "",
+	"Auth": "Údarú",
 	"Authenticate": "Fíordheimhnigh",
 	"Authenticate": "Fíordheimhnigh",
 	"Authentication": "Fíordheimhniú",
 	"Authentication": "Fíordheimhniú",
-	"Auto": "",
+	"Auto": "Uath",
 	"Auto-Copy Response to Clipboard": "Freagra AutoCopy go Gearrthaisce",
 	"Auto-Copy Response to Clipboard": "Freagra AutoCopy go Gearrthaisce",
 	"Auto-playback response": "Freagra uathsheinm",
 	"Auto-playback response": "Freagra uathsheinm",
 	"Autocomplete Generation": "Giniúint Uathchríochnaithe",
 	"Autocomplete Generation": "Giniúint Uathchríochnaithe",
@@ -126,7 +129,7 @@
 	"AUTOMATIC1111 Base URL": "UATHOIBRÍOCH1111 Bun URL",
 	"AUTOMATIC1111 Base URL": "UATHOIBRÍOCH1111 Bun URL",
 	"AUTOMATIC1111 Base URL is required.": "Tá URL bonn UATHOIBRÍOCH1111 ag teastáil.",
 	"AUTOMATIC1111 Base URL is required.": "Tá URL bonn UATHOIBRÍOCH1111 ag teastáil.",
 	"Available list": "Liosta atá ar fáil",
 	"Available list": "Liosta atá ar fáil",
-	"Available Tools": "",
+	"Available Tools": "Uirlisí ar Fáil",
 	"available!": "ar fáil!",
 	"available!": "ar fáil!",
 	"Awful": "Uafásach",
 	"Awful": "Uafásach",
 	"Azure AI Speech": "Óráid Azure AI",
 	"Azure AI Speech": "Óráid Azure AI",
@@ -142,7 +145,7 @@
 	"Bing Search V7 Endpoint": "Cuardach Bing V7 Críochphointe",
 	"Bing Search V7 Endpoint": "Cuardach Bing V7 Críochphointe",
 	"Bing Search V7 Subscription Key": "Eochair Síntiúis Bing Cuardach V7",
 	"Bing Search V7 Subscription Key": "Eochair Síntiúis Bing Cuardach V7",
 	"Bocha Search API Key": "Eochair API Cuardach Bocha",
 	"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",
 	"Brave Search API Key": "Eochair API Cuardaigh Brave",
 	"By {{name}}": "Le {{name}}",
 	"By {{name}}": "Le {{name}}",
 	"Bypass Embedding and Retrieval": "Seachbhóthar Leabú agus Aisghabháil",
 	"Bypass Embedding and Retrieval": "Seachbhóthar Leabú agus Aisghabháil",
@@ -205,7 +208,7 @@
 	"Code Interpreter": "Ateangaire Cód",
 	"Code Interpreter": "Ateangaire Cód",
 	"Code Interpreter Engine": "Inneall Ateangaire Cóid",
 	"Code Interpreter Engine": "Inneall Ateangaire Cóid",
 	"Code Interpreter Prompt Template": "Teimpléad Pras Ateangaire Cód",
 	"Code Interpreter Prompt Template": "Teimpléad Pras Ateangaire Cód",
-	"Collapse": "",
+	"Collapse": "Laghdaigh",
 	"Collection": "Bailiúchán",
 	"Collection": "Bailiúchán",
 	"Color": "Dath",
 	"Color": "Dath",
 	"ComfyUI": "ComfyUI",
 	"ComfyUI": "ComfyUI",
@@ -223,12 +226,12 @@
 	"Confirm your action": "Deimhnigh do ghníomh",
 	"Confirm your action": "Deimhnigh do ghníomh",
 	"Confirm your new password": "Deimhnigh do phasfhocal nua",
 	"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 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": "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",
 	"Contact Admin for WebUI Access": "Déan teagmháil le Riarachán le haghaidh Rochtana WebUI",
 	"Content": "Ábhar",
 	"Content": "Ábhar",
 	"Content Extraction Engine": "Inneall Eastóscadh Ábhar",
 	"Content Extraction Engine": "Inneall Eastóscadh Ábhar",
@@ -240,12 +243,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 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)",
 	"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": "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": "Cóipeáladh",
 	"Copied shared chat URL to clipboard!": "Cóipeáladh URL an chomhrá roinnte chuig an ngearrthaisce!",
 	"Copied shared chat URL to clipboard!": "Cóipeáladh URL an chomhrá roinnte chuig an ngearrthaisce!",
 	"Copied to clipboard": "Cóipeáilte go gear",
 	"Copied to clipboard": "Cóipeáilte go gear",
 	"Copy": "Cóipeáil",
 	"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 code block": "Cóipeáil bloc cód deireanach",
 	"Copy last response": "Cóipeáil an fhreagairt",
 	"Copy last response": "Cóipeáil an fhreagairt",
 	"Copy Link": "Cóipeáil Nasc",
 	"Copy Link": "Cóipeáil Nasc",
@@ -266,7 +269,7 @@
 	"Created At": "Cruthaithe Ag",
 	"Created At": "Cruthaithe Ag",
 	"Created by": "Cruthaithe ag",
 	"Created by": "Cruthaithe ag",
 	"CSV Import": "Iompórtáil CSV",
 	"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 Model": "Múnla Reatha",
 	"Current Password": "Pasfhocal Reatha",
 	"Current Password": "Pasfhocal Reatha",
 	"Custom": "Saincheaptha",
 	"Custom": "Saincheaptha",
@@ -286,7 +289,7 @@
 	"Default Prompt Suggestions": "Moltaí Leid Réamhshocraithe",
 	"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 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 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",
 	"Default User Role": "Ról Úsáideora Réamhshocraithe",
 	"Delete": "Scrios",
 	"Delete": "Scrios",
 	"Delete a model": "Scrios múnla",
 	"Delete a model": "Scrios múnla",
@@ -308,13 +311,13 @@
 	"Deleted User": "Úsáideoir Scriosta",
 	"Deleted User": "Úsáideoir Scriosta",
 	"Describe your knowledge base and objectives": "Déan cur síos ar do bhunachar eolais agus do chuspóirí",
 	"Describe your knowledge base and objectives": "Déan cur síos ar do bhunachar eolais agus do chuspóirí",
 	"Description": "Cur síos",
 	"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",
 	"Didn't fully follow instructions": "Níor lean sé treoracha go hiomlán",
-	"Direct": "",
+	"Direct": "Díreach",
 	"Direct Connections": "Naisc Dhíreacha",
 	"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 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 Connections settings updated": "Nuashonraíodh socruithe Connections Direct",
-	"Direct Tool Servers": "",
+	"Direct Tool Servers": "Freastalaithe Uirlisí Díreacha",
 	"Disabled": "Díchumasaithe",
 	"Disabled": "Díchumasaithe",
 	"Discover a function": "Faigh amach feidhm",
 	"Discover a function": "Faigh amach feidhm",
 	"Discover a model": "Faigh amach múnla",
 	"Discover a model": "Faigh amach múnla",
@@ -334,8 +337,8 @@
 	"Dive into knowledge": "Léim isteach eolas",
 	"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 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.",
 	"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": "Doiciméad",
 	"Document Intelligence": "Faisnéise 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.",
 	"Document Intelligence endpoint and key required.": "Críochphointe Faisnéise Doiciméad agus eochair ag teastáil.",
@@ -356,15 +359,15 @@
 	"Draw": "Tarraing",
 	"Draw": "Tarraing",
 	"Drop any files here to add to the conversation": "Scaoil aon chomhaid anseo le cur leis an gcomhrá",
 	"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. '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. 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. 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 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_filter": "m.sh. mo_scagaire",
 	"e.g. my_tools": "m.sh. mo_uirlisí",
 	"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. 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": "Cuir in eagar",
 	"Edit Arena Model": "Cuir Samhail Airéine in Eagar",
 	"Edit Arena Model": "Cuir Samhail Airéine in Eagar",
 	"Edit Channel": "Cuir Cainéal in Eagar",
 	"Edit Channel": "Cuir Cainéal in Eagar",
@@ -383,16 +386,16 @@
 	"Embedding model set to \"{{embedding_model}}\"": "Múnla leabaithe socraithe go \"{{embedding_model}}\"",
 	"Embedding model set to \"{{embedding_model}}\"": "Múnla leabaithe socraithe go \"{{embedding_model}}\"",
 	"Enable API Key": "Cumasaigh Eochair API",
 	"Enable API Key": "Cumasaigh Eochair API",
 	"Enable autocomplete generation for chat messages": "Cumasaigh giniúint uathchríochnaithe le haghaidh teachtaireachtaí comhrá",
 	"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 Code Interpreter": "Cumasaigh Ateangaire Cóid",
 	"Enable Community Sharing": "Cumasaigh Comhroinnt Pobail",
 	"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 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 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 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",
 	"Enable New Sign Ups": "Cumasaigh Clárúcháin Nua",
 	"Enabled": "Cumasaithe",
 	"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.",
 	"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 {{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ú",
 	"Enter a detail about yourself for your LLMs to recall": "Cuir isteach mionsonraí fút féin chun do LLManna a mheabhrú",
@@ -407,15 +410,19 @@
 	"Enter CFG Scale (e.g. 7.0)": "Cuir isteach Scála CFG (m.sh. 7.0)",
 	"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 Overlap": "Cuir isteach Chunk Forluí",
 	"Enter Chunk Size": "Cuir isteach Méid an Smután",
 	"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 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 Endpoint": "Iontráil Críochphointe Faisnéise Doiciméid",
 	"Enter Document Intelligence Key": "Iontráil Eochair Faisnéise Doiciméad",
 	"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 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 Exa API Key": "Cuir isteach Eochair Exa API",
-	"Enter Firecrawl API Base URL": "",
-	"Enter Firecrawl 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": "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 Github Raw URL": "Cuir isteach URL Github Raw",
 	"Enter Google PSE API Key": "Cuir isteach Eochair API Google PSE",
 	"Enter Google PSE API Key": "Cuir isteach Eochair API Google PSE",
 	"Enter Google PSE Engine Id": "Cuir isteach ID Inneall Google PSE",
 	"Enter Google PSE Engine Id": "Cuir isteach ID Inneall Google PSE",
@@ -425,16 +432,16 @@
 	"Enter Jupyter Token": "Cuir isteach Jupyter Chomhartha",
 	"Enter Jupyter Token": "Cuir isteach Jupyter Chomhartha",
 	"Enter Jupyter URL": "Cuir isteach URL Jupyter",
 	"Enter Jupyter URL": "Cuir isteach URL Jupyter",
 	"Enter Kagi Search API Key": "Cuir isteach Eochair Kagi Cuardach API",
 	"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 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 ID": "Iontráil ID Mhúnla",
 	"Enter model tag (e.g. {{modelTag}})": "Cuir isteach chlib samhail (m.sh. {{modelTag}})",
 	"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 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 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 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 reasoning effort": "Cuir isteach iarracht réasúnaíochta",
 	"Enter Sampler (e.g. Euler a)": "Cuir isteach Sampler (m.sh. Euler a)",
 	"Enter Sampler (e.g. Euler a)": "Cuir isteach Sampler (m.sh. Euler a)",
@@ -452,26 +459,26 @@
 	"Enter server host": "Cuir isteach óstach freastalaí",
 	"Enter server host": "Cuir isteach óstach freastalaí",
 	"Enter server label": "Cuir isteach lipéad freastalaí",
 	"Enter server label": "Cuir isteach lipéad freastalaí",
 	"Enter server port": "Cuir isteach port 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 stop sequence": "Cuir isteach seicheamh stad",
 	"Enter system prompt": "Cuir isteach an chóras leid",
 	"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 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 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 Tika Server URL": "Cuir isteach URL freastalaí Tika",
 	"Enter timeout in seconds": "Cuir isteach an t-am istigh i soicindí",
 	"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": "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://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 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 current password": "Cuir isteach do phasfhocal reatha",
 	"Enter Your Email": "Cuir isteach do Ríomhphost",
 	"Enter Your Email": "Cuir isteach do Ríomhphost",
 	"Enter Your Full Name": "Cuir isteach d'Ainm Iomlán",
 	"Enter Your Full Name": "Cuir isteach d'Ainm Iomlán",
 	"Enter your message": "Cuir isteach do theachtaireacht",
 	"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 new password": "Cuir isteach do phasfhocal nua",
 	"Enter Your Password": "Cuir isteach do phasfhocal",
 	"Enter Your Password": "Cuir isteach do phasfhocal",
 	"Enter Your Role": "Cuir isteach do Ról",
 	"Enter Your Role": "Cuir isteach do Ról",
@@ -488,14 +495,14 @@
 	"Example: mail": "Sampla: ríomhphost",
 	"Example: mail": "Sampla: ríomhphost",
 	"Example: ou=users,dc=foo,dc=example": "Sampla: ou=úsáideoirí,dc=foo,dc=sampla",
 	"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",
 	"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",
 	"Exclude": "Eisigh",
 	"Execute code for analysis": "Íosluchtaigh cód le haghaidh anailíse",
 	"Execute code for analysis": "Íosluchtaigh cód le haghaidh anailíse",
-	"Executing **{{NAME}}**...": "",
-	"Expand": "",
+	"Executing **{{NAME}}**...": "**{{NAME}}** á rith...",
+	"Expand": "Leathnaigh",
 	"Experimental": "Turgnamhach",
 	"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",
 	"Explore the cosmos": "Déan iniúchadh ar an cosmos",
 	"Export": "Easpórtáil",
 	"Export": "Easpórtáil",
 	"Export All Archived Chats": "Easpórtáil Gach Comhrá Cartlainne",
 	"Export All Archived Chats": "Easpórtáil Gach Comhrá Cartlainne",
@@ -509,14 +516,19 @@
 	"Export Prompts": "Leideanna Easpórtála",
 	"Export Prompts": "Leideanna Easpórtála",
 	"Export to CSV": "Easpórtáil go CSV",
 	"Export to CSV": "Easpórtáil go CSV",
 	"Export Tools": "Uirlisí Easpór",
 	"Export Tools": "Uirlisí Easpór",
-	"External": "",
+	"External": "Seachtrach",
 	"External Models": "Múnlaí Seachtracha",
 	"External Models": "Múnlaí Seachtracha",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "Theip ar an gcomhad a chur leis.",
 	"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 create API Key.": "Theip ar an eochair API a chruthú.",
 	"Failed to fetch models": "Theip ar shamhlacha a fháil",
 	"Failed to fetch models": "Theip ar shamhlacha a fháil",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "Theip ar ábhar gearrthaisce a lé",
 	"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 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 update settings": "Theip ar shocruithe a nuashonrú",
 	"Failed to upload file.": "Theip ar uaslódáil an chomhaid.",
 	"Failed to upload file.": "Theip ar uaslódáil an chomhaid.",
@@ -539,8 +551,8 @@
 	"Filter is now globally enabled": "Tá an scagaire cumasaithe go domhanda anois",
 	"Filter is now globally enabled": "Tá an scagaire cumasaithe go domhanda anois",
 	"Filters": "Scagairí",
 	"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.",
 	"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",
 	"Fluidly stream large external response chunks": "Sruthaigh codanna móra freagartha seachtracha go sreabhach",
 	"Focus chat input": "Ionchur comhrá fócas",
 	"Focus chat input": "Ionchur comhrá fócas",
 	"Folder deleted successfully": "Scriosadh an fillteán go rathúil",
 	"Folder deleted successfully": "Scriosadh an fillteán go rathúil",
@@ -551,7 +563,7 @@
 	"Forge new paths": "Déan cosáin nua a chruthú",
 	"Forge new paths": "Déan cosáin nua a chruthú",
 	"Form": "Foirm",
 	"Form": "Foirm",
 	"Format your variables using brackets like this:": "Formáidigh na hathróga ag baint úsáide as lúibíní mar seo:",
 	"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",
 	"Frequency Penalty": "Pionós Minicíochta",
 	"Full Context Mode": "Mód Comhthéacs Iomlán",
 	"Full Context Mode": "Mód Comhthéacs Iomlán",
 	"Function": "Feidhm",
 	"Function": "Feidhm",
@@ -573,7 +585,7 @@
 	"Gemini API Key is required.": "Tá Eochair Gemini API ag teastáil.",
 	"Gemini API Key is required.": "Tá Eochair Gemini API ag teastáil.",
 	"General": "Ginearálta",
 	"General": "Ginearálta",
 	"Generate an image": "Gin íomhá",
 	"Generate an image": "Gin íomhá",
-	"Generate Image": "Ginigh Íomhá",
+	"Generate Image": "Gin Íomhá",
 	"Generate prompt pair": "Gin péire pras",
 	"Generate prompt pair": "Gin péire pras",
 	"Generating search query": "Giniúint ceist cuardaigh",
 	"Generating search query": "Giniúint ceist cuardaigh",
 	"Get started": "Cuir tús leis",
 	"Get started": "Cuir tús leis",
@@ -597,7 +609,7 @@
 	"Hex Color": "Dath Heics",
 	"Hex Color": "Dath Heics",
 	"Hex Color - Leave empty for default color": "Dath Heics - Fág folamh don dath réamhshocraithe",
 	"Hex Color - Leave empty for default color": "Dath Heics - Fág folamh don dath réamhshocraithe",
 	"Hide": "Folaigh",
 	"Hide": "Folaigh",
-	"Hide Model": "",
+	"Hide Model": "Folaigh Múnla",
 	"Home": "Baile",
 	"Home": "Baile",
 	"Host": "Óstach",
 	"Host": "Óstach",
 	"How can I help you today?": "Conas is féidir liom cabhrú leat inniu?",
 	"How can I help you today?": "Conas is féidir liom cabhrú leat inniu?",
@@ -605,8 +617,8 @@
 	"Hybrid Search": "Cuardach Hibrideach",
 	"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.",
 	"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",
 	"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",
 	"Ignite curiosity": "Las fiosracht",
 	"Image": "Íomhá",
 	"Image": "Íomhá",
 	"Image Compression": "Comhbhrú Íomhá",
 	"Image Compression": "Comhbhrú Íomhá",
@@ -628,16 +640,16 @@
 	"Include": "Cuir san áireamh",
 	"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-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",
 	"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",
 	"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",
 	"Input commands": "Orduithe ionchuir",
 	"Install from Github URL": "Suiteáil ó Github URL",
 	"Install from Github URL": "Suiteáil ó Github URL",
 	"Instant Auto-Send After Voice Transcription": "Seoladh Uathoibríoch Láithreach Tar éis",
 	"Instant Auto-Send After Voice Transcription": "Seoladh Uathoibríoch Láithreach Tar éis",
 	"Integration": "Comhtháthú",
 	"Integration": "Comhtháthú",
 	"Interface": "Comhéadan",
 	"Interface": "Comhéadan",
 	"Invalid file format.": "Formáid comhaid neamhbhailí.",
 	"Invalid file format.": "Formáid comhaid neamhbhailí.",
-	"Invalid JSON schema": "",
+	"Invalid JSON schema": "Scéimre JSON neamhbhailí",
 	"Invalid Tag": "Clib neamhbhailí",
 	"Invalid Tag": "Clib neamhbhailí",
 	"is typing...": "ag clóscríobh...",
 	"is typing...": "ag clóscríobh...",
 	"January": "Eanáir",
 	"January": "Eanáir",
@@ -645,7 +657,7 @@
 	"join our Discord for help.": "bí inár Discord chun cabhair a fháil.",
 	"join our Discord for help.": "bí inár Discord chun cabhair a fháil.",
 	"JSON": "JSON",
 	"JSON": "JSON",
 	"JSON Preview": "Réamhamharc JSON",
 	"JSON Preview": "Réamhamharc JSON",
-	"July": "Lúil",
+	"July": "Iúil",
 	"June": "Meitheamh",
 	"June": "Meitheamh",
 	"Jupyter Auth": "Fíordheimhniú Jupyter",
 	"Jupyter Auth": "Fíordheimhniú Jupyter",
 	"Jupyter URL": "URL Jupyter",
 	"Jupyter URL": "URL Jupyter",
@@ -659,7 +671,7 @@
 	"Knowledge Access": "Rochtain Eolais",
 	"Knowledge Access": "Rochtain Eolais",
 	"Knowledge created successfully.": "Eolas cruthaithe go rathúil.",
 	"Knowledge created successfully.": "Eolas cruthaithe go rathúil.",
 	"Knowledge deleted successfully.": "D'éirigh leis an eolas a scriosadh.",
 	"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 reset successfully.": "D'éirigh le hathshocrú eolais.",
 	"Knowledge updated successfully": "D'éirigh leis an eolas a nuashonrú",
 	"Knowledge updated successfully": "D'éirigh leis an eolas a nuashonrú",
 	"Kokoro.js (Browser)": "Kokoro.js (Brabhsálaí)",
 	"Kokoro.js (Browser)": "Kokoro.js (Brabhsálaí)",
@@ -667,17 +679,17 @@
 	"Label": "Lipéad",
 	"Label": "Lipéad",
 	"Landing Page Mode": "Mód Leathanach Tuirlingthe",
 	"Landing Page Mode": "Mód Leathanach Tuirlingthe",
 	"Language": "Teanga",
 	"Language": "Teanga",
-	"Language Locales": "",
+	"Language Locales": "Logánta Teanga",
 	"Last Active": "Gníomhach Deiridh",
 	"Last Active": "Gníomhach Deiridh",
 	"Last Modified": "Athraithe Deiridh",
 	"Last Modified": "Athraithe Deiridh",
 	"Last reply": "Freagra deiridh",
 	"Last reply": "Freagra deiridh",
 	"LDAP": "LDAP",
 	"LDAP": "LDAP",
 	"LDAP server updated": "Nuashonraíodh freastalaí LDAP",
 	"LDAP server updated": "Nuashonraíodh freastalaí LDAP",
 	"Leaderboard": "An Clár Ceannairí",
 	"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 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 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 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.",
 	"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 +703,7 @@
 	"Local": "Áitiúil",
 	"Local": "Áitiúil",
 	"Local Models": "Múnlaí Áitiúla",
 	"Local Models": "Múnlaí Áitiúla",
 	"Location access not allowed": "Ní cheadaítear rochtain suímh",
 	"Location access not allowed": "Ní cheadaítear rochtain suímh",
-	"Logit Bias": "",
+	"Logit Bias": "Bias Logit",
 	"Lost": "Cailleadh",
 	"Lost": "Cailleadh",
 	"LTR": "LTR",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "Déanta ag OpenWebUI Community",
 	"Made by Open WebUI Community": "Déanta ag OpenWebUI Community",
@@ -704,7 +716,7 @@
 	"Manage Ollama API Connections": "Bainistigh Naisc API Ollama",
 	"Manage Ollama API Connections": "Bainistigh Naisc API Ollama",
 	"Manage OpenAI API Connections": "Bainistigh Naisc API OpenAI",
 	"Manage OpenAI API Connections": "Bainistigh Naisc API OpenAI",
 	"Manage Pipelines": "Bainistigh píblín",
 	"Manage Pipelines": "Bainistigh píblín",
-	"Manage Tool Servers": "",
+	"Manage Tool Servers": "Bainistigh Freastalaithe Uirlisí",
 	"March": "Márta",
 	"March": "Márta",
 	"Max Tokens (num_predict)": "Comharthaí Uasta (num_predicate)",
 	"Max Tokens (num_predict)": "Comharthaí Uasta (num_predicate)",
 	"Max Upload Count": "Líon Uaslódála Max",
 	"Max Upload Count": "Líon Uaslódála Max",
@@ -718,22 +730,26 @@
 	"Memory deleted successfully": "Cuimhne scriosta go rathúil",
 	"Memory deleted successfully": "Cuimhne scriosta go rathúil",
 	"Memory updated successfully": "Cuimhne nuashonraithe",
 	"Memory updated successfully": "Cuimhne nuashonraithe",
 	"Merge Responses": "Cumaisc Freagraí",
 	"Merge Responses": "Cumaisc Freagraí",
+	"Merged Response": "Freagra Cumaiscthe",
 	"Message rating should be enabled to use this feature": "Ba cheart rátáil teachtaireachta a chumasú chun an ghné seo a úsáid",
 	"Message rating should be enabled to use this feature": "Ba cheart rátáil teachtaireachta a chumasú chun an ghné seo a úsáid",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Ní roinnfear teachtaireachtaí a sheolann tú tar éis do nasc a chruthú. Beidh úsáideoirí leis an URL in ann féachaint ar an gcomhrá roinnte.",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Ní roinnfear teachtaireachtaí a sheolann tú tar éis do nasc a chruthú. Beidh úsáideoirí leis an URL in ann féachaint ar an gcomhrá roinnte.",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "Min P",
 	"Min P": "Min P",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Tau": "Mirostat Tau",
 	"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": "Múnla",
 	"Model '{{modelName}}' has been successfully downloaded.": "Rinneadh an tsamhail '{{modelName}}' a íoslódáil go rathúil.",
 	"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 '{{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 {{modelId}} not found": "Múnla {{modelId}} gan aimsiú",
 	"Model {{modelName}} is not vision capable": "Níl samhail {{modelName}} in ann amharc",
 	"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 {{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 accepts image inputs": "Glacann múnla le hionchuir",
 	"Model created successfully!": "Cruthaíodh múnla go rathúil!",
 	"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.",
 	"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 +765,7 @@
 	"Models": "Múnlaí",
 	"Models": "Múnlaí",
 	"Models Access": "Rochtain Múnlaí",
 	"Models Access": "Rochtain Múnlaí",
 	"Models configuration saved successfully": "Sábháladh cumraíocht na múnlaí go rathúil",
 	"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",
 	"Mojeek Search API Key": "Eochair API Cuardach Mojeek",
 	"more": "níos mó",
 	"more": "níos mó",
 	"More": "Tuilleadh",
 	"More": "Tuilleadh",
@@ -761,6 +777,7 @@
 	"New Password": "Pasfhocal Nua",
 	"New Password": "Pasfhocal Nua",
 	"new-channel": "nua-chainéil",
 	"new-channel": "nua-chainéil",
 	"No content found": "Níor aimsíodh aon ábhar",
 	"No content found": "Níor aimsíodh aon ábhar",
+	"No content found in file.": "",
 	"No content to speak": "Níl aon ábhar le labhairt",
 	"No content to speak": "Níl aon ábhar le labhairt",
 	"No distance available": "Níl achar ar fáil",
 	"No distance available": "Níl achar ar fáil",
 	"No feedbacks found": "Níor aimsíodh aon aiseolas",
 	"No feedbacks found": "Níor aimsíodh aon aiseolas",
@@ -812,7 +829,7 @@
 	"Open file": "Oscail comhad",
 	"Open file": "Oscail comhad",
 	"Open in full screen": "Oscail i scáileán iomlán",
 	"Open in full screen": "Oscail i scáileán iomlán",
 	"Open new chat": "Oscail comhrá nua",
 	"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 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 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}})",
 	"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 +839,7 @@
 	"OpenAI API Key is required.": "Tá Eochair API OpenAI ag teastáil.",
 	"OpenAI API Key is required.": "Tá Eochair API OpenAI ag teastáil.",
 	"OpenAI API settings updated": "Nuashonraíodh socruithe OpenAI API",
 	"OpenAI API settings updated": "Nuashonraíodh socruithe OpenAI API",
 	"OpenAI URL/Key required.": "Teastaíonn URL/eochair OpenAI.",
 	"OpenAI URL/Key required.": "Teastaíonn URL/eochair OpenAI.",
-	"openapi.json Path": "",
+	"openapi.json Path": "Conair openapi.json",
 	"or": "nó",
 	"or": "nó",
 	"Organize your users": "Eagraigh do chuid úsáideoirí",
 	"Organize your users": "Eagraigh do chuid úsáideoirí",
 	"Other": "Eile",
 	"Other": "Eile",
@@ -839,7 +856,7 @@
 	"Permission denied when accessing microphone": "Cead diúltaithe agus tú ag rochtain ar",
 	"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}}",
 	"Permission denied when accessing microphone: {{error}}": "Cead diúltaithe agus tú ag teacht ar mhicreafón: {{error}}",
 	"Permissions": "Ceadanna",
 	"Permissions": "Ceadanna",
-	"Perplexity API Key": "",
+	"Perplexity API Key": "Eochair API Perplexity",
 	"Personalization": "Pearsantú",
 	"Personalization": "Pearsantú",
 	"Pin": "Bioráin",
 	"Pin": "Bioráin",
 	"Pinned": "Pinneáilte",
 	"Pinned": "Pinneáilte",
@@ -851,13 +868,13 @@
 	"Pipelines Valves": "Comhlaí Píblíne",
 	"Pipelines Valves": "Comhlaí Píblíne",
 	"Plain text (.txt)": "Téacs simplí (.txt)",
 	"Plain text (.txt)": "Téacs simplí (.txt)",
 	"Playground": "Clós súgartha",
 	"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 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 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 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 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 first.": "Roghnaigh munla ar dtús le do thoil.",
 	"Please select a model.": "Roghnaigh múnla le do thoil.",
 	"Please select a model.": "Roghnaigh múnla le do thoil.",
@@ -869,19 +886,19 @@
 	"Presence Penalty": "Pionós Láithreacht",
 	"Presence Penalty": "Pionós Láithreacht",
 	"Previous 30 days": "30 lá roimhe seo",
 	"Previous 30 days": "30 lá roimhe seo",
 	"Previous 7 days": "7 lá roimhe seo",
 	"Previous 7 days": "7 lá roimhe seo",
-	"Private": "",
+	"Private": "Príobháideach",
 	"Profile Image": "Íomhá Próifíl",
 	"Profile Image": "Íomhá Próifíl",
 	"Prompt": "Leid",
 	"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 (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 Content": "Ábhar Leid",
 	"Prompt created successfully": "Leid cruthaithe go rathúil",
 	"Prompt created successfully": "Leid cruthaithe go rathúil",
 	"Prompt suggestions": "Moltaí leid",
 	"Prompt suggestions": "Moltaí leid",
 	"Prompt updated successfully": "D'éirigh leis an leid a nuashonrú",
 	"Prompt updated successfully": "D'éirigh leis an leid a nuashonrú",
 	"Prompts": "Leabhair",
 	"Prompts": "Leabhair",
 	"Prompts Access": "Rochtain ar Chuirí",
 	"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 \"{{searchValue}}\" from Ollama.com": "Tarraing \"{{searchValue}}\" ó Ollama.com",
 	"Pull a model from Ollama.com": "Tarraing múnla ó Ollama.com",
 	"Pull a model from Ollama.com": "Tarraing múnla ó Ollama.com",
 	"Query Generation Prompt": "Cuirí Ginearáil Ceisteanna",
 	"Query Generation Prompt": "Cuirí Ginearáil Ceisteanna",
@@ -893,16 +910,16 @@
 	"Reasoning Effort": "Iarracht Réasúnúcháin",
 	"Reasoning Effort": "Iarracht Réasúnúcháin",
 	"Record voice": "Taifead guth",
 	"Record voice": "Taifead guth",
 	"Redirecting you to Open WebUI Community": "Tú a atreorú chuig OpenWebUI Community",
 	"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\")",
 	"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í ó",
 	"References from": "Tagairtí ó",
 	"Refused when it shouldn't have": "Diúltaíodh nuair nár chóir dó",
 	"Refused when it shouldn't have": "Diúltaíodh nuair nár chóir dó",
 	"Regenerate": "Athghiniúint",
 	"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",
 	"Release Notes": "Nótaí Scaoilte",
 	"Relevance": "Ábharthacht",
 	"Relevance": "Ábharthacht",
-	"Relevance Threshold": "",
+	"Relevance Threshold": "Tairseach Ábharthaíochta",
 	"Remove": "Bain",
 	"Remove": "Bain",
 	"Remove Model": "Bain Múnla",
 	"Remove Model": "Bain Múnla",
 	"Rename": "Athainmnigh",
 	"Rename": "Athainmnigh",
@@ -939,7 +956,7 @@
 	"Save Tag": "Sábháil Clib",
 	"Save Tag": "Sábháil Clib",
 	"Saved": "Shábháil",
 	"Saved": "Shábháil",
 	"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": "Ní thacaítear le logaí comhrá a shábháil go díreach chuig stóráil do bhrabhsálaí Tóg nóiméad chun do logaí comhrá a íoslódáil agus a scriosadh trí chliceáil an cnaipe thíos. Ná bíodh imní ort, is féidir leat do logaí comhrá a athiompórtáil go héasca chuig an gcúltaca trí",
 	"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": "Ní thacaítear le logaí comhrá a shábháil go díreach chuig stóráil do bhrabhsálaí Tóg nóiméad chun do logaí comhrá a íoslódáil agus a scriosadh trí chliceáil an cnaipe thíos. Ná bíodh imní ort, is féidir leat do logaí comhrá a athiompórtáil go héasca chuig an gcúltaca trí",
-	"Scroll to bottom when switching between branches": "Scrollaigh go bun agus tú ag athrú idir brainsí",
+	"Scroll On Branch Change": "",
 	"Search": "Cuardaigh",
 	"Search": "Cuardaigh",
 	"Search a model": "Cuardaigh múnla",
 	"Search a model": "Cuardaigh múnla",
 	"Search Base": "Bonn Cuardaigh",
 	"Search Base": "Bonn Cuardaigh",
@@ -1005,22 +1022,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 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 Voice": "Socraigh Guth",
 	"Set whisper model": "Socraigh múnla cogar",
 	"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.",
 	"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": "Socruithe",
 	"Settings saved successfully!": "Socruithe sábhálta go rathúil!",
 	"Settings saved successfully!": "Socruithe sábhálta go rathúil!",
 	"Share": "Comhroinn",
 	"Share": "Comhroinn",
 	"Share Chat": "Comhroinn Comhrá",
 	"Share Chat": "Comhroinn Comhrá",
 	"Share to Open WebUI Community": "Comhroinn le Pobal OpenWebUI",
 	"Share to Open WebUI Community": "Comhroinn le Pobal OpenWebUI",
-	"Sharing Permissions": "",
+	"Sharing Permissions": "Ceadanna a Roinnt",
 	"Show": "Taispeáin",
 	"Show": "Taispeáin",
 	"Show \"What's New\" modal on login": "Taispeáin módúil \"Cad atá Nua\" ar logáil isteach",
 	"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 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 shortcuts": "Taispeáin aicearraí",
 	"Show your support!": "Taispeáin do thacaíocht!",
 	"Show your support!": "Taispeáin do thacaíocht!",
 	"Showcased creativity": "Cruthaitheacht léirithe",
 	"Showcased creativity": "Cruthaitheacht léirithe",
@@ -1032,8 +1049,8 @@
 	"Sign up to {{WEBUI_NAME}}": "Cláraigh le {{WEBUI_NAME}}",
 	"Sign up to {{WEBUI_NAME}}": "Cláraigh le {{WEBUI_NAME}}",
 	"Signing in to {{WEBUI_NAME}}": "Ag síniú isteach ar {{WEBUI_NAME}}",
 	"Signing in to {{WEBUI_NAME}}": "Ag síniú isteach ar {{WEBUI_NAME}}",
 	"sk-1234": "sk-1234",
 	"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",
 	"Source": "Foinse",
 	"Speech Playback Speed": "Luas Athsheinm Urlabhra",
 	"Speech Playback Speed": "Luas Athsheinm Urlabhra",
 	"Speech recognition error: {{error}}": "Earráid aitheantais cainte: {{error}}",
 	"Speech recognition error: {{error}}": "Earráid aitheantais cainte: {{error}}",
@@ -1053,7 +1070,7 @@
 	"System": "Córas",
 	"System": "Córas",
 	"System Instructions": "Treoracha Córas",
 	"System Instructions": "Treoracha Córas",
 	"System Prompt": "Córas Leid",
 	"System Prompt": "Córas Leid",
-	"Tags": "",
+	"Tags": "Clibeanna",
 	"Tags Generation": "Giniúint Clibeanna",
 	"Tags Generation": "Giniúint Clibeanna",
 	"Tags Generation Prompt": "Clibeanna Giniúint Leid",
 	"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)",
 	"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 +1078,7 @@
 	"Tap to interrupt": "Tapáil chun cur isteach",
 	"Tap to interrupt": "Tapáil chun cur isteach",
 	"Tasks": "Tascanna",
 	"Tasks": "Tascanna",
 	"Tavily API Key": "Eochair API Tavily",
 	"Tavily API Key": "Eochair API Tavily",
-	"Tavily Extract Depth": "",
+	"Tavily Extract Depth": "Doimhneacht Sliocht Tavily",
 	"Tell us more:": "Inis dúinn níos mó:",
 	"Tell us more:": "Inis dúinn níos mó:",
 	"Temperature": "Teocht",
 	"Temperature": "Teocht",
 	"Template": "Teimpléad",
 	"Template": "Teimpléad",
@@ -1072,7 +1089,7 @@
 	"Thanks for your feedback!": "Go raibh maith agat as do chuid aiseolas!",
 	"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 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 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 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 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.",
 	"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 +1098,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 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 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 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",
 	"Theme": "Téama",
 	"Thinking...": "Ag smaoineamh...",
 	"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 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 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 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 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 response was generated by \"{{model}}\"": "Gin an freagra seo ag \"{{model}}\"",
 	"This will delete": "Scriosfaidh sé seo",
 	"This will delete": "Scriosfaidh sé seo",
@@ -1103,7 +1120,7 @@
 	"Thought for {{DURATION}} seconds": "Smaoineamh ar feadh {{DURATION}} soicind",
 	"Thought for {{DURATION}} seconds": "Smaoineamh ar feadh {{DURATION}} soicind",
 	"Tika": "Tika",
 	"Tika": "Tika",
 	"Tika Server URL required.": "Teastaíonn URL Freastalaí 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.",
 	"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": "Teideal",
 	"Title (e.g. Tell me a fun fact)": "Teideal (m.sh. inis dom fíric spraíúil)",
 	"Title (e.g. Tell me a fun fact)": "Teideal (m.sh. inis dom fíric spraíúil)",
@@ -1134,7 +1151,7 @@
 	"Tool ID": "ID Uirlis",
 	"Tool ID": "ID Uirlis",
 	"Tool imported successfully": "Uirlis iompórtáilte",
 	"Tool imported successfully": "Uirlis iompórtáilte",
 	"Tool Name": "Ainm Uirlis",
 	"Tool Name": "Ainm Uirlis",
-	"Tool Servers": "",
+	"Tool Servers": "Freastalaithe Uirlisí",
 	"Tool updated successfully": "An uirlis nuashonraithe",
 	"Tool updated successfully": "An uirlis nuashonraithe",
 	"Tools": "Uirlisí",
 	"Tools": "Uirlisí",
 	"Tools Access": "Rochtain Uirlisí",
 	"Tools Access": "Rochtain Uirlisí",
@@ -1142,9 +1159,9 @@
 	"Tools Function Calling Prompt": "Leid Glaonna Feidhm Uirlisí",
 	"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 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": "Barr K",
-	"Top K Reranker": "",
+	"Top K Reranker": "Barr K Reranker",
 	"Top P": "Barr P",
 	"Top P": "Barr P",
 	"Transformers": "Claochladáin",
 	"Transformers": "Claochladáin",
 	"Trouble accessing Ollama?": "Deacracht teacht ar Ollama?",
 	"Trouble accessing Ollama?": "Deacracht teacht ar Ollama?",
@@ -1184,14 +1201,14 @@
 	"Use Gravatar": "Úsáid Gravatar",
 	"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 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 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_mlock (Ollama)": "use_mlock (Ollama)",
 	"use_mmap (Ollama)": "use_mmap (Ollama)",
 	"use_mmap (Ollama)": "use_mmap (Ollama)",
 	"user": "úsáideoir",
 	"user": "úsáideoir",
 	"User": "Úsáideoir",
 	"User": "Úsáideoir",
 	"User location successfully retrieved.": "Fuarthas suíomh an úsáideora go rathúil.",
 	"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",
 	"Username": "Ainm Úsáideora",
 	"Users": "Úsáideoirí",
 	"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.",
 	"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 +1219,12 @@
 	"Valves updated successfully": "Comhlaí nuashonraíodh",
 	"Valves updated successfully": "Comhlaí nuashonraíodh",
 	"variable": "athraitheach",
 	"variable": "athraitheach",
 	"variable to have them replaced with clipboard content.": "athróg chun ábhar gearrthaisce a chur in ionad iad.",
 	"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": "Leagan",
 	"Version {{selectedVersion}} of {{totalVersions}}": "Leagan {{selectedVersion}} de {{totalVersions}}",
 	"Version {{selectedVersion}} of {{totalVersions}}": "Leagan {{selectedVersion}} de {{totalVersions}}",
 	"View Replies": "Féach ar Fhreagraí",
 	"View Replies": "Féach ar Fhreagraí",
-	"View Result from **{{NAME}}**": "",
+	"View Result from **{{NAME}}**": "Féach ar Thoradh ó **{{NAME}}**",
 	"Visibility": "Infheictheacht",
 	"Visibility": "Infheictheacht",
 	"Voice": "Guth",
 	"Voice": "Guth",
 	"Voice Input": "Ionchur Gutha",
 	"Voice Input": "Ionchur Gutha",
@@ -1218,7 +1235,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.",
 	"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": "Gréasán",
 	"Web API": "API Gréasáin",
 	"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": "Cuardach Gréasáin",
 	"Web Search Engine": "Inneall Cuardaigh Gréasáin",
 	"Web Search Engine": "Inneall Cuardaigh Gréasáin",
 	"Web Search in Chat": "Cuardach Gréasáin i gComhrá",
 	"Web Search in Chat": "Cuardach Gréasáin i gComhrá",
@@ -1226,7 +1243,7 @@
 	"Webhook URL": "URL Webhook",
 	"Webhook URL": "URL Webhook",
 	"WebUI Settings": "Socruithe WebUI",
 	"WebUI Settings": "Socruithe WebUI",
 	"WebUI URL": "URL 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}}/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\"",
 	"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?",
 	"What are you trying to achieve?": "Cad atá tú ag iarraidh a bhaint amach?",
@@ -1238,7 +1255,7 @@
 	"Why?": "Cén fáth?",
 	"Why?": "Cén fáth?",
 	"Widescreen Mode": "Mód Leathanscáileán",
 	"Widescreen Mode": "Mód Leathanscáileán",
 	"Won": "Bhuaigh",
 	"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": "Spás oibre",
 	"Workspace Permissions": "Ceadanna Spás Oibre",
 	"Workspace Permissions": "Ceadanna Spás Oibre",
 	"Write": "Scríobh",
 	"Write": "Scríobh",
@@ -1248,7 +1265,7 @@
 	"Write your model template content here": "Scríobh do mhúnla ábhar teimpléad anseo",
 	"Write your model template content here": "Scríobh do mhúnla ábhar teimpléad anseo",
 	"Yesterday": "Inné",
 	"Yesterday": "Inné",
 	"You": "Tú",
 	"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 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 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.",
 	"You cannot upload an empty file.": "Ní féidir leat comhad folamh a uaslódáil.",

+ 18 - 1
src/lib/i18n/locales/it-IT/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "",
 	"Allow Chat Delete": "",
 	"Allow Chat Deletion": "Consenti l'eliminazione della chat",
 	"Allow Chat Deletion": "Consenti l'eliminazione della chat",
 	"Allow Chat Edit": "",
 	"Allow Chat Edit": "",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "",
 	"Allow File Upload": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "",
 	"Allow non-local voices": "",
@@ -76,6 +78,7 @@
 	"Always": "",
 	"Always": "",
 	"Always Collapse Code Blocks": "",
 	"Always Collapse Code Blocks": "",
 	"Always Expand Details": "",
 	"Always Expand Details": "",
+	"Always Play Notification Sound": "",
 	"Amazing": "",
 	"Amazing": "",
 	"an assistant": "un assistente",
 	"an assistant": "un assistente",
 	"Analyzed": "",
 	"Analyzed": "",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "",
 	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "Immettere l'URL grezzo di Github",
 	"Enter Github Raw URL": "Immettere l'URL grezzo di Github",
@@ -511,10 +518,15 @@
 	"Export Tools": "",
 	"Export Tools": "",
 	"External": "",
 	"External": "",
 	"External Models": "",
 	"External Models": "",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "",
 	"Failed to add file.": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "Impossibile creare la chiave API.",
 	"Failed to create API Key.": "Impossibile creare la chiave API.",
 	"Failed to fetch models": "",
 	"Failed to fetch models": "",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "Impossibile leggere il contenuto degli appunti",
 	"Failed to read clipboard contents": "Impossibile leggere il contenuto degli appunti",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "",
 	"Failed to save models configuration": "",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "",
 	"Memory deleted successfully": "",
 	"Memory updated successfully": "",
 	"Memory updated successfully": "",
 	"Merge Responses": "",
 	"Merge Responses": "",
+	"Merged Response": "Risposta Unita",
 	"Message rating should be enabled to use this feature": "",
 	"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.": "I messaggi inviati dopo la creazione del link non verranno condivisi. Gli utenti con l'URL saranno in grado di visualizzare la chat condivisa.",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "I messaggi inviati dopo la creazione del link non verranno condivisi. Gli utenti con l'URL saranno in grado di visualizzare la chat condivisa.",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "",
 	"Min P": "",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "Nuova password",
 	"New Password": "Nuova password",
 	"new-channel": "",
 	"new-channel": "",
 	"No content found": "",
 	"No content found": "",
+	"No content found in file.": "",
 	"No content to speak": "",
 	"No content to speak": "",
 	"No distance available": "",
 	"No distance available": "",
 	"No feedbacks found": "",
 	"No feedbacks found": "",
@@ -939,7 +956,7 @@
 	"Save Tag": "",
 	"Save Tag": "",
 	"Saved": "",
 	"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": "Il salvataggio dei registri della chat direttamente nell'archivio del browser non è più supportato. Si prega di dedicare un momento per scaricare ed eliminare i registri della chat facendo clic sul pulsante in basso. Non preoccuparti, puoi facilmente reimportare i registri della chat nel backend tramite",
 	"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": "Il salvataggio dei registri della chat direttamente nell'archivio del browser non è più supportato. Si prega di dedicare un momento per scaricare ed eliminare i registri della chat facendo clic sul pulsante in basso. Non preoccuparti, puoi facilmente reimportare i registri della chat nel backend tramite",
-	"Scroll to bottom when switching between branches": "",
+	"Scroll On Branch Change": "",
 	"Search": "Cerca",
 	"Search": "Cerca",
 	"Search a model": "Cerca un modello",
 	"Search a model": "Cerca un modello",
 	"Search Base": "",
 	"Search Base": "",

+ 18 - 1
src/lib/i18n/locales/ja-JP/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "",
 	"Allow Chat Delete": "",
 	"Allow Chat Deletion": "チャットの削除を許可",
 	"Allow Chat Deletion": "チャットの削除を許可",
 	"Allow Chat Edit": "",
 	"Allow Chat Edit": "",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "",
 	"Allow File Upload": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "ローカル以外のボイスを許可",
 	"Allow non-local voices": "ローカル以外のボイスを許可",
@@ -76,6 +78,7 @@
 	"Always": "",
 	"Always": "",
 	"Always Collapse Code Blocks": "",
 	"Always Collapse Code Blocks": "",
 	"Always Expand Details": "",
 	"Always Expand Details": "",
+	"Always Play Notification Sound": "",
 	"Amazing": "",
 	"Amazing": "",
 	"an assistant": "アシスタント",
 	"an assistant": "アシスタント",
 	"Analyzed": "",
 	"Analyzed": "",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "",
 	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "Github Raw URLを入力",
 	"Enter Github Raw URL": "Github Raw URLを入力",
@@ -511,10 +518,15 @@
 	"Export Tools": "ツールのエクスポート",
 	"Export Tools": "ツールのエクスポート",
 	"External": "",
 	"External": "",
 	"External Models": "外部モデル",
 	"External Models": "外部モデル",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "",
 	"Failed to add file.": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "APIキーの作成に失敗しました。",
 	"Failed to create API Key.": "APIキーの作成に失敗しました。",
 	"Failed to fetch models": "",
 	"Failed to fetch models": "",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "クリップボードの内容を読み取れませんでした",
 	"Failed to read clipboard contents": "クリップボードの内容を読み取れませんでした",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "",
 	"Failed to save models configuration": "",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "メモリを削除しました。",
 	"Memory deleted successfully": "メモリを削除しました。",
 	"Memory updated successfully": "メモリアップデート成功",
 	"Memory updated successfully": "メモリアップデート成功",
 	"Merge Responses": "",
 	"Merge Responses": "",
+	"Merged Response": "統合された応答",
 	"Message rating should be enabled to use this feature": "",
 	"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 を持つユーザーは共有チャットを閲覧できます。",
 	"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)": "",
 	"Min P": "",
 	"Min P": "",
 	"Mirostat": "ミロスタット",
 	"Mirostat": "ミロスタット",
 	"Mirostat Eta": "ミロスタット Eta",
 	"Mirostat Eta": "ミロスタット Eta",
@@ -761,6 +777,7 @@
 	"New Password": "新しいパスワード",
 	"New Password": "新しいパスワード",
 	"new-channel": "",
 	"new-channel": "",
 	"No content found": "",
 	"No content found": "",
+	"No content found in file.": "",
 	"No content to speak": "",
 	"No content to speak": "",
 	"No distance available": "",
 	"No distance available": "",
 	"No feedbacks found": "",
 	"No feedbacks found": "",
@@ -939,7 +956,7 @@
 	"Save Tag": "",
 	"Save Tag": "",
 	"Saved": "",
 	"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": "チャットログをブラウザのストレージに直接保存する機能はサポートされなくなりました。下のボタンをクリックして、チャットログをダウンロードして削除してください。ご心配なく。チャットログは、次の方法でバックエンドに簡単に再インポートできます。",
 	"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 to bottom when switching between branches": "ブランチの切り替え時にボタンをスクロールする",
+	"Scroll On Branch Change": "",
 	"Search": "検索",
 	"Search": "検索",
 	"Search a model": "モデルを検索",
 	"Search a model": "モデルを検索",
 	"Search Base": "",
 	"Search Base": "",

+ 18 - 1
src/lib/i18n/locales/ka-GE/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "ჩატის წაშლის დაშვება",
 	"Allow Chat Delete": "ჩატის წაშლის დაშვება",
 	"Allow Chat Deletion": "ჩატის წაშლის დაშვება",
 	"Allow Chat Deletion": "ჩატის წაშლის დაშვება",
 	"Allow Chat Edit": "ჩატის ჩასწორების დაშვება",
 	"Allow Chat Edit": "ჩატის ჩასწორების დაშვება",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "ფაილის ატვირთვის დაშვება",
 	"Allow File Upload": "ფაილის ატვირთვის დაშვება",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "არალოკალური ხმების დაშვება",
 	"Allow non-local voices": "არალოკალური ხმების დაშვება",
@@ -76,6 +78,7 @@
 	"Always": "ყოველთვის",
 	"Always": "ყოველთვის",
 	"Always Collapse Code Blocks": "",
 	"Always Collapse Code Blocks": "",
 	"Always Expand Details": "",
 	"Always Expand Details": "",
+	"Always Play Notification Sound": "",
 	"Amazing": "გადასარევია",
 	"Amazing": "გადასარევია",
 	"an assistant": "დამხმარე",
 	"an assistant": "დამხმარე",
 	"Analyzed": "გაანაზლიებულია",
 	"Analyzed": "გაანაზლიებულია",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "",
 	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "შეიყვანეთ Github Raw URL",
 	"Enter Github Raw URL": "შეიყვანეთ Github Raw URL",
@@ -511,10 +518,15 @@
 	"Export Tools": "",
 	"Export Tools": "",
 	"External": "",
 	"External": "",
 	"External Models": "",
 	"External Models": "",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "ფაილის დამატების შეცდომა.",
 	"Failed to add file.": "ფაილის დამატების შეცდომა.",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "API-ის გასაღების შექმნა ჩავარდა.",
 	"Failed to create API Key.": "API-ის გასაღების შექმნა ჩავარდა.",
 	"Failed to fetch models": "",
 	"Failed to fetch models": "",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "ბუფერის შემცველობის წაკითხვა ჩავარდა",
 	"Failed to read clipboard contents": "ბუფერის შემცველობის წაკითხვა ჩავარდა",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "",
 	"Failed to save models configuration": "",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "",
 	"Memory deleted successfully": "",
 	"Memory updated successfully": "",
 	"Memory updated successfully": "",
 	"Merge Responses": "პასუხების შერწყმა",
 	"Merge Responses": "პასუხების შერწყმა",
+	"Merged Response": "შერწყმული პასუხი",
 	"Message rating should be enabled to use this feature": "",
 	"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– ის მქონე მომხმარებლებს შეეძლებათ ნახონ საერთო ჩატი.",
 	"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)": "",
 	"Min P": "",
 	"Min P": "",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "ახალი პაროლი",
 	"New Password": "ახალი პაროლი",
 	"new-channel": "new-channel",
 	"new-channel": "new-channel",
 	"No content found": "შემცველობა აღმოჩენილი არაა",
 	"No content found": "შემცველობა აღმოჩენილი არაა",
+	"No content found in file.": "",
 	"No content to speak": "წარმოსათქმელი შემცველობის გარეშე",
 	"No content to speak": "წარმოსათქმელი შემცველობის გარეშე",
 	"No distance available": "მანძილი ხელმისაწვდომი არაა",
 	"No distance available": "მანძილი ხელმისაწვდომი არაა",
 	"No feedbacks found": "",
 	"No feedbacks found": "",
@@ -939,7 +956,7 @@
 	"Save Tag": "ჭდის შენახვა",
 	"Save Tag": "ჭდის შენახვა",
 	"Saved": "შენახულია",
 	"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": "ჩეთის ისტორიის შენახვა პირდაპირ თქვენი ბრაუზერის საცავში აღარ არის მხარდაჭერილი. გთხოვთ, დაუთმოთ და წაშალოთ თქვენი ჩატის ჟურნალები ქვემოთ მოცემულ ღილაკზე დაწკაპუნებით. არ ინერვიულოთ, თქვენ შეგიძლიათ მარტივად ხელახლა შემოიტანოთ თქვენი ჩეთის ისტორია ბექენდში",
 	"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 to bottom when switching between branches": "",
+	"Scroll On Branch Change": "",
 	"Search": "ძებნა",
 	"Search": "ძებნა",
 	"Search a model": "მოდელის ძებნა",
 	"Search a model": "მოდელის ძებნა",
 	"Search Base": "ბაზის ძებნა",
 	"Search Base": "ბაზის ძებნა",

+ 19 - 2
src/lib/i18n/locales/ko-KR/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "채팅 삭제 허용",
 	"Allow Chat Delete": "채팅 삭제 허용",
 	"Allow Chat Deletion": "채팅 삭제 허용",
 	"Allow Chat Deletion": "채팅 삭제 허용",
 	"Allow Chat Edit": "채팅 수정 허용",
 	"Allow Chat Edit": "채팅 수정 허용",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "파일 업로드 허용",
 	"Allow File Upload": "파일 업로드 허용",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "외부 음성 허용",
 	"Allow non-local voices": "외부 음성 허용",
@@ -76,6 +78,7 @@
 	"Always": "",
 	"Always": "",
 	"Always Collapse Code Blocks": "",
 	"Always Collapse Code Blocks": "",
 	"Always Expand Details": "",
 	"Always Expand Details": "",
+	"Always Play Notification Sound": "",
 	"Amazing": "놀라움",
 	"Amazing": "놀라움",
 	"an assistant": "어시스턴트",
 	"an assistant": "어시스턴트",
 	"Analyzed": "",
 	"Analyzed": "",
@@ -128,7 +131,7 @@
 	"Available list": "가능한 목록",
 	"Available list": "가능한 목록",
 	"Available Tools": "",
 	"Available Tools": "",
 	"available!": "사용 가능!",
 	"available!": "사용 가능!",
-	"Awful": "끔찍함",
+	"Awful": "형편없음",
 	"Azure AI Speech": "Azure AI 음성",
 	"Azure AI Speech": "Azure AI 음성",
 	"Azure Region": "Azure 지역",
 	"Azure Region": "Azure 지역",
 	"Back": "뒤로가기",
 	"Back": "뒤로가기",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "",
 	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "Github Raw URL 입력",
 	"Enter Github Raw URL": "Github Raw URL 입력",
@@ -511,10 +518,15 @@
 	"Export Tools": "도구 내보내기",
 	"Export Tools": "도구 내보내기",
 	"External": "",
 	"External": "",
 	"External Models": "외부 모델",
 	"External Models": "외부 모델",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "파일추가에 실패했습니다",
 	"Failed to add file.": "파일추가에 실패했습니다",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "API 키 생성에 실패했습니다.",
 	"Failed to create API Key.": "API 키 생성에 실패했습니다.",
 	"Failed to fetch models": "",
 	"Failed to fetch models": "",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "클립보드 내용 가져오기를 실패하였습니다.",
 	"Failed to read clipboard contents": "클립보드 내용 가져오기를 실패하였습니다.",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "",
 	"Failed to save models configuration": "",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "성공적으로 메모리가 삭제되었습니다",
 	"Memory deleted successfully": "성공적으로 메모리가 삭제되었습니다",
 	"Memory updated successfully": "성공적으로 메모리가 업데이트되었습니다",
 	"Memory updated successfully": "성공적으로 메모리가 업데이트되었습니다",
 	"Merge Responses": "응답들 결합하기",
 	"Merge Responses": "응답들 결합하기",
+	"Merged Response": "결합된 응답",
 	"Message rating should be enabled to use this feature": "이 기능을 사용하려면 메시지 평가가 활성화되어야합니다",
 	"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이 있는 사용자는 공유된 채팅을 볼 수 있습니다.",
 	"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)": "",
 	"Min P": "최소 P",
 	"Min P": "최소 P",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "새 비밀번호",
 	"New Password": "새 비밀번호",
 	"new-channel": "",
 	"new-channel": "",
 	"No content found": "내용을 찾을 수 없음",
 	"No content found": "내용을 찾을 수 없음",
+	"No content found in file.": "",
 	"No content to speak": "음성 출력할 내용을 찾을 수 없음",
 	"No content to speak": "음성 출력할 내용을 찾을 수 없음",
 	"No distance available": "거리 불가능",
 	"No distance available": "거리 불가능",
 	"No feedbacks found": "피드백 없음",
 	"No feedbacks found": "피드백 없음",
@@ -939,7 +956,7 @@
 	"Save Tag": "태그 저장",
 	"Save Tag": "태그 저장",
 	"Saved": "저장됨",
 	"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": "브라우저의 저장소에 채팅 로그를 직접 저장하는 것은 더 이상 지원되지 않습니다. 아래 버튼을 클릭하여 채팅 로그를 다운로드하고 삭제하세요. 걱정 마세요. 백엔드를 통해 채팅 로그를 쉽게 다시 가져올 수 있습니다.",
 	"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 to bottom when switching between branches": "브랜치 간 전환시 밑으로 스크롤 하세요",
+	"Scroll On Branch Change": "",
 	"Search": "검색",
 	"Search": "검색",
 	"Search a model": "모델 검색",
 	"Search a model": "모델 검색",
 	"Search Base": "",
 	"Search Base": "",

+ 19 - 2
src/lib/i18n/locales/lt-LT/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "",
 	"Allow Chat Delete": "",
 	"Allow Chat Deletion": "Leisti pokalbių ištrynimą",
 	"Allow Chat Deletion": "Leisti pokalbių ištrynimą",
 	"Allow Chat Edit": "",
 	"Allow Chat Edit": "",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "",
 	"Allow File Upload": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "Leisti nelokalius balsus",
 	"Allow non-local voices": "Leisti nelokalius balsus",
@@ -76,6 +78,7 @@
 	"Always": "",
 	"Always": "",
 	"Always Collapse Code Blocks": "",
 	"Always Collapse Code Blocks": "",
 	"Always Expand Details": "",
 	"Always Expand Details": "",
+	"Always Play Notification Sound": "",
 	"Amazing": "",
 	"Amazing": "",
 	"an assistant": "assistentas",
 	"an assistant": "assistentas",
 	"Analyzed": "",
 	"Analyzed": "",
@@ -234,7 +237,7 @@
 	"Content Extraction Engine": "",
 	"Content Extraction Engine": "",
 	"Context Length": "Konteksto ilgis",
 	"Context Length": "Konteksto ilgis",
 	"Continue Response": "Tęsti atsakymą",
 	"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 Email": "",
 	"Continue with LDAP": "",
 	"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.": "",
 	"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.": "",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "",
 	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "Įveskite GitHub Raw nuorodą",
 	"Enter Github Raw URL": "Įveskite GitHub Raw nuorodą",
@@ -511,10 +518,15 @@
 	"Export Tools": "Eksportuoti įrankius",
 	"Export Tools": "Eksportuoti įrankius",
 	"External": "",
 	"External": "",
 	"External Models": "Išoriniai modeliai",
 	"External Models": "Išoriniai modeliai",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "",
 	"Failed to add file.": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "Nepavyko sukurti API rakto",
 	"Failed to create API Key.": "Nepavyko sukurti API rakto",
 	"Failed to fetch models": "",
 	"Failed to fetch models": "",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "Nepavyko perskaityti kopijuoklės",
 	"Failed to read clipboard contents": "Nepavyko perskaityti kopijuoklės",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "",
 	"Failed to save models configuration": "",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "Atmintis ištrinta sėkmingai",
 	"Memory deleted successfully": "Atmintis ištrinta sėkmingai",
 	"Memory updated successfully": "Atmintis atnaujinta sėkmingai",
 	"Memory updated successfully": "Atmintis atnaujinta sėkmingai",
 	"Merge Responses": "",
 	"Merge Responses": "",
+	"Merged Response": "Sujungtas atsakymas",
 	"Message rating should be enabled to use this feature": "",
 	"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.": "Žinutės, kurias siunčiate po nuorodos sukūrimo nebus matomos nuorodos turėtojams. Naudotojai su nuoroda matys žinutes iki nuorodos sukūrimo.",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Žinutės, kurias siunčiate po nuorodos sukūrimo nebus matomos nuorodos turėtojams. Naudotojai su nuoroda matys žinutes iki nuorodos sukūrimo.",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "Mažiausias p",
 	"Min P": "Mažiausias p",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "Naujas slaptažodis",
 	"New Password": "Naujas slaptažodis",
 	"new-channel": "",
 	"new-channel": "",
 	"No content found": "",
 	"No content found": "",
+	"No content found in file.": "",
 	"No content to speak": "Nėra turinio kalbėjimui",
 	"No content to speak": "Nėra turinio kalbėjimui",
 	"No distance available": "",
 	"No distance available": "",
 	"No feedbacks found": "",
 	"No feedbacks found": "",
@@ -939,7 +956,7 @@
 	"Save Tag": "Išsaugoti žymą",
 	"Save Tag": "Išsaugoti žymą",
 	"Saved": "",
 	"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": "Pokalbių saugojimas naršyklėje nebegalimas.",
 	"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": "Pokalbių saugojimas naršyklėje nebegalimas.",
-	"Scroll to bottom when switching between branches": "Slikite link apačios norėdami pakeisti šakas",
+	"Scroll On Branch Change": "",
 	"Search": "Ieškoti",
 	"Search": "Ieškoti",
 	"Search a model": "Ieškoti modelio",
 	"Search a model": "Ieškoti modelio",
 	"Search Base": "",
 	"Search Base": "",

+ 18 - 1
src/lib/i18n/locales/ms-MY/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "",
 	"Allow Chat Delete": "",
 	"Allow Chat Deletion": "Benarkan Penghapusan Perbualan",
 	"Allow Chat Deletion": "Benarkan Penghapusan Perbualan",
 	"Allow Chat Edit": "",
 	"Allow Chat Edit": "",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "",
 	"Allow File Upload": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "Benarkan suara bukan tempatan ",
 	"Allow non-local voices": "Benarkan suara bukan tempatan ",
@@ -76,6 +78,7 @@
 	"Always": "",
 	"Always": "",
 	"Always Collapse Code Blocks": "",
 	"Always Collapse Code Blocks": "",
 	"Always Expand Details": "",
 	"Always Expand Details": "",
+	"Always Play Notification Sound": "",
 	"Amazing": "",
 	"Amazing": "",
 	"an assistant": "seorang pembantu",
 	"an assistant": "seorang pembantu",
 	"Analyzed": "",
 	"Analyzed": "",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "",
 	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "Masukkan URL 'Github Raw'",
 	"Enter Github Raw URL": "Masukkan URL 'Github Raw'",
@@ -511,10 +518,15 @@
 	"Export Tools": "Eksport Alat",
 	"Export Tools": "Eksport Alat",
 	"External": "",
 	"External": "",
 	"External Models": "Model Luaran",
 	"External Models": "Model Luaran",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "",
 	"Failed to add file.": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "Gagal mencipta kekunci API",
 	"Failed to create API Key.": "Gagal mencipta kekunci API",
 	"Failed to fetch models": "",
 	"Failed to fetch models": "",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "Gagal membaca konten papan klip",
 	"Failed to read clipboard contents": "Gagal membaca konten papan klip",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "",
 	"Failed to save models configuration": "",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "Memori berjaya dihapuskan",
 	"Memory deleted successfully": "Memori berjaya dihapuskan",
 	"Memory updated successfully": "Memori berjaya dikemaskini",
 	"Memory updated successfully": "Memori berjaya dikemaskini",
 	"Merge Responses": "",
 	"Merge Responses": "",
+	"Merged Response": "Respons Digabungkan",
 	"Message rating should be enabled to use this feature": "",
 	"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.": "Mesej yang anda hantar selepas membuat pautan anda tidak akan dikongsi. Pengguna dengan URL akan dapat melihat perbualan yang dikongsi.",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Mesej yang anda hantar selepas membuat pautan anda tidak akan dikongsi. Pengguna dengan URL akan dapat melihat perbualan yang dikongsi.",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "P Minimum",
 	"Min P": "P Minimum",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "Kata Laluan Baru",
 	"New Password": "Kata Laluan Baru",
 	"new-channel": "",
 	"new-channel": "",
 	"No content found": "",
 	"No content found": "",
+	"No content found in file.": "",
 	"No content to speak": "Tiada kandungan untuk bercakap",
 	"No content to speak": "Tiada kandungan untuk bercakap",
 	"No distance available": "",
 	"No distance available": "",
 	"No feedbacks found": "",
 	"No feedbacks found": "",
@@ -939,7 +956,7 @@
 	"Save Tag": "Simpan Tag",
 	"Save Tag": "Simpan Tag",
 	"Saved": "",
 	"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": "Penyimpanan log perbualan terus ke storan pelayan web anda tidak lagi disokong. Sila luangkan sedikit masa untuk memuat turun dan memadam log perbualan anda dengan mengklik butang di bawah. Jangan risau, anda boleh mengimport semula log perbualan anda dengan mudah melalui 'backend'",
 	"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": "Penyimpanan log perbualan terus ke storan pelayan web anda tidak lagi disokong. Sila luangkan sedikit masa untuk memuat turun dan memadam log perbualan anda dengan mengklik butang di bawah. Jangan risau, anda boleh mengimport semula log perbualan anda dengan mudah melalui 'backend'",
-	"Scroll to bottom when switching between branches": "Skrol ke bawah apabila bertukar antara cawangan",
+	"Scroll On Branch Change": "",
 	"Search": "Carian",
 	"Search": "Carian",
 	"Search a model": "Cari Model",
 	"Search a model": "Cari Model",
 	"Search Base": "",
 	"Search Base": "",

+ 18 - 1
src/lib/i18n/locales/nb-NO/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "Tillat sletting av chatter",
 	"Allow Chat Delete": "Tillat sletting av chatter",
 	"Allow Chat Deletion": "Tillat sletting av chatter",
 	"Allow Chat Deletion": "Tillat sletting av chatter",
 	"Allow Chat Edit": "Tillat redigering av chatter",
 	"Allow Chat Edit": "Tillat redigering av chatter",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "Tillatt opplasting av filer",
 	"Allow File Upload": "Tillatt opplasting av filer",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "Tillat ikke-lokale stemmer",
 	"Allow non-local voices": "Tillat ikke-lokale stemmer",
@@ -76,6 +78,7 @@
 	"Always": "Alltid",
 	"Always": "Alltid",
 	"Always Collapse Code Blocks": "",
 	"Always Collapse Code Blocks": "",
 	"Always Expand Details": "",
 	"Always Expand Details": "",
+	"Always Play Notification Sound": "",
 	"Amazing": "Flott",
 	"Amazing": "Flott",
 	"an assistant": "en assistent",
 	"an assistant": "en assistent",
 	"Analyzed": "Analysert",
 	"Analyzed": "Analysert",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "Angi nøkkel for Intelligens i dokumenter",
 	"Enter Document Intelligence Key": "Angi nøkkel for Intelligens i dokumenter",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "Angi domener atskilt med komma (f.eks. eksempel.com, side.org)",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "Angi domener atskilt med komma (f.eks. eksempel.com, side.org)",
 	"Enter Exa API Key": "Angi API-nøkkel for Exa",
 	"Enter Exa API Key": "Angi API-nøkkel for Exa",
+	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "Angi Github Raw-URL",
 	"Enter Github Raw URL": "Angi Github Raw-URL",
@@ -511,10 +518,15 @@
 	"Export Tools": "Eksporter verktøy",
 	"Export Tools": "Eksporter verktøy",
 	"External": "",
 	"External": "",
 	"External Models": "Eksterne modeller",
 	"External Models": "Eksterne modeller",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "Kan ikke legge til filen.",
 	"Failed to add file.": "Kan ikke legge til filen.",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to connect to {{URL}} OpenAPI tool server": "",
 	"Failed to create API Key.": "Kan ikke opprette en API-nøkkel.",
 	"Failed to create API Key.": "Kan ikke opprette en API-nøkkel.",
 	"Failed to fetch models": "Kan ikke hente modeller",
 	"Failed to fetch models": "Kan ikke hente modeller",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "Kan ikke lese utklippstavlens innhold",
 	"Failed to read clipboard contents": "Kan ikke lese utklippstavlens innhold",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "Kan ikke lagre konfigurasjonen av modeller",
 	"Failed to save models configuration": "Kan ikke lagre konfigurasjonen av modeller",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "Minne slettet",
 	"Memory deleted successfully": "Minne slettet",
 	"Memory updated successfully": "Minne oppdatert",
 	"Memory updated successfully": "Minne oppdatert",
 	"Merge Responses": "Flette svar",
 	"Merge Responses": "Flette svar",
+	"Merged Response": "Sammenslått svar",
 	"Message rating should be enabled to use this feature": "Vurdering av meldinger må være aktivert for å ta i bruk denne funksjonen",
 	"Message rating should be enabled to use this feature": "Vurdering av meldinger må være aktivert for å ta i bruk denne funksjonen",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Meldinger du sender etter at du har opprettet lenken, blir ikke delt. Brukere med URL-en vil kunne se den delte chatten.",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Meldinger du sender etter at du har opprettet lenken, blir ikke delt. Brukere med URL-en vil kunne se den delte chatten.",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "Min P",
 	"Min P": "Min P",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "Nytt passord",
 	"New Password": "Nytt passord",
 	"new-channel": "ny-kanal",
 	"new-channel": "ny-kanal",
 	"No content found": "Finner ikke noe innhold",
 	"No content found": "Finner ikke noe innhold",
+	"No content found in file.": "",
 	"No content to speak": "Mangler innhold for tale",
 	"No content to speak": "Mangler innhold for tale",
 	"No distance available": "Ingen avstand tilgjengelig",
 	"No distance available": "Ingen avstand tilgjengelig",
 	"No feedbacks found": "Finner ingen tilbakemeldinger",
 	"No feedbacks found": "Finner ingen tilbakemeldinger",
@@ -939,7 +956,7 @@
 	"Save Tag": "Lagre etikett",
 	"Save Tag": "Lagre etikett",
 	"Saved": "Lagret",
 	"Saved": "Lagret",
 	"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": "Lagring av chattelogger direkte til nettleserens lagringsområde støttes ikke lenger. Ta et øyeblikk til å laste ned og slette chatteloggende dine ved å klikke på knappen nedenfor. Ikke bekymre deg, du kan enkelt importere chatteloggene dine til backend på nytt via",
 	"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": "Lagring av chattelogger direkte til nettleserens lagringsområde støttes ikke lenger. Ta et øyeblikk til å laste ned og slette chatteloggende dine ved å klikke på knappen nedenfor. Ikke bekymre deg, du kan enkelt importere chatteloggene dine til backend på nytt via",
-	"Scroll to bottom when switching between branches": "Bla til bunnen når du bytter mellom grener",
+	"Scroll On Branch Change": "",
 	"Search": "Søk",
 	"Search": "Søk",
 	"Search a model": "Søk etter en modell",
 	"Search a model": "Søk etter en modell",
 	"Search Base": "Søke etter base",
 	"Search Base": "Søke etter base",

+ 18 - 1
src/lib/i18n/locales/nl-NL/translation.json

@@ -62,6 +62,8 @@
 	"Allow Chat Delete": "Chatverwijdering toestaan",
 	"Allow Chat Delete": "Chatverwijdering toestaan",
 	"Allow Chat Deletion": "Chatverwijdering toestaan",
 	"Allow Chat Deletion": "Chatverwijdering toestaan",
 	"Allow Chat Edit": "Chatwijziging toestaan",
 	"Allow Chat Edit": "Chatwijziging toestaan",
+	"Allow Chat Export": "",
+	"Allow Chat Share": "",
 	"Allow File Upload": "Bestandenupload toestaan",
 	"Allow File Upload": "Bestandenupload toestaan",
 	"Allow Multiple Models in Chat": "",
 	"Allow Multiple Models in Chat": "",
 	"Allow non-local voices": "Niet-lokale stemmen toestaan",
 	"Allow non-local voices": "Niet-lokale stemmen toestaan",
@@ -76,6 +78,7 @@
 	"Always": "Altijd",
 	"Always": "Altijd",
 	"Always Collapse Code Blocks": "Codeblokken altijd inklappen",
 	"Always Collapse Code Blocks": "Codeblokken altijd inklappen",
 	"Always Expand Details": "Details altijd uitklappen",
 	"Always Expand Details": "Details altijd uitklappen",
+	"Always Play Notification Sound": "",
 	"Amazing": "Geweldig",
 	"Amazing": "Geweldig",
 	"an assistant": "een assistent",
 	"an assistant": "een assistent",
 	"Analyzed": "Geanalyseerd",
 	"Analyzed": "Geanalyseerd",
@@ -414,6 +417,10 @@
 	"Enter Document Intelligence Key": "Voer Document Intelligence sleutel in",
 	"Enter Document Intelligence Key": "Voer Document Intelligence sleutel in",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "Voer domeinen in gescheiden met komma's (bijv., voorbeeld.com,site.org)",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "Voer domeinen in gescheiden met komma's (bijv., voorbeeld.com,site.org)",
 	"Enter Exa API Key": "Voer Exa API-sleutel in",
 	"Enter Exa API Key": "Voer Exa API-sleutel in",
+	"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 Base URL": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Firecrawl API Key": "",
 	"Enter Github Raw URL": "Voer de Github Raw-URL in",
 	"Enter Github Raw URL": "Voer de Github Raw-URL in",
@@ -511,10 +518,15 @@
 	"Export Tools": "Exporteer gereedschappen",
 	"Export Tools": "Exporteer gereedschappen",
 	"External": "Extern",
 	"External": "Extern",
 	"External Models": "Externe modules",
 	"External Models": "Externe modules",
+	"External Web Loader API Key": "",
+	"External Web Loader URL": "",
+	"External Web Search API Key": "",
+	"External Web Search URL": "",
 	"Failed to add file.": "Het is niet gelukt om het bestand toe te voegen.",
 	"Failed to add file.": "Het is niet gelukt om het bestand toe te voegen.",
 	"Failed to connect to {{URL}} OpenAPI tool server": "Kan geen verbinding maken met {{URL}} OpenAPI gereedschapserver",
 	"Failed to connect to {{URL}} OpenAPI tool server": "Kan geen verbinding maken met {{URL}} OpenAPI gereedschapserver",
 	"Failed to create API Key.": "Kan API Key niet aanmaken.",
 	"Failed to create API Key.": "Kan API Key niet aanmaken.",
 	"Failed to fetch models": "Kan modellen niet ophalen",
 	"Failed to fetch models": "Kan modellen niet ophalen",
+	"Failed to load file content.": "",
 	"Failed to read clipboard contents": "Kan klembord inhoud niet lezen",
 	"Failed to read clipboard contents": "Kan klembord inhoud niet lezen",
 	"Failed to save connections": "",
 	"Failed to save connections": "",
 	"Failed to save models configuration": "Het is niet gelukt om de modelconfiguratie op te slaan",
 	"Failed to save models configuration": "Het is niet gelukt om de modelconfiguratie op te slaan",
@@ -718,8 +730,12 @@
 	"Memory deleted successfully": "Geheugen succesvol verwijderd",
 	"Memory deleted successfully": "Geheugen succesvol verwijderd",
 	"Memory updated successfully": "Geheugen succesvol bijgewerkt",
 	"Memory updated successfully": "Geheugen succesvol bijgewerkt",
 	"Merge Responses": "Voeg antwoorden samen",
 	"Merge Responses": "Voeg antwoorden samen",
+	"Merged Response": "Samengevoegd antwoord",
 	"Message rating should be enabled to use this feature": "Berichtbeoordeling moet ingeschakeld zijn om deze functie te gebruiken",
 	"Message rating should be enabled to use this feature": "Berichtbeoordeling moet ingeschakeld zijn om deze functie te gebruiken",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Berichten die je verzendt nadat je jouw link hebt gemaakt, worden niet gedeeld. Gebruikers met de URL kunnen de gedeelde chat bekijken.",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Berichten die je verzendt nadat je jouw link hebt gemaakt, worden niet gedeeld. Gebruikers met de URL kunnen de gedeelde chat bekijken.",
+	"Microsoft OneDrive": "",
+	"Microsoft OneDrive (personal)": "",
+	"Microsoft OneDrive (work/school)": "",
 	"Min P": "Min P",
 	"Min P": "Min P",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
@@ -761,6 +777,7 @@
 	"New Password": "Nieuw Wachtwoord",
 	"New Password": "Nieuw Wachtwoord",
 	"new-channel": "nieuw-kanaal",
 	"new-channel": "nieuw-kanaal",
 	"No content found": "Geen content gevonden",
 	"No content found": "Geen content gevonden",
+	"No content found in file.": "",
 	"No content to speak": "Geen inhoud om over te spreken",
 	"No content to speak": "Geen inhoud om over te spreken",
 	"No distance available": "Geen afstand beschikbaar",
 	"No distance available": "Geen afstand beschikbaar",
 	"No feedbacks found": "Geen feedback gevonden",
 	"No feedbacks found": "Geen feedback gevonden",
@@ -939,7 +956,7 @@
 	"Save Tag": "Bewaar Tag",
 	"Save Tag": "Bewaar Tag",
 	"Saved": "Opgeslagen",
 	"Saved": "Opgeslagen",
 	"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": "Chat logs direct opslaan in de opslag van je browser wordt niet langer ondersteund. Neem even de tijd om je chat logs te downloaden en te verwijderen door op de knop hieronder te klikken. Maak je geen zorgen, je kunt je chat logs eenvoudig opnieuw importeren naar de backend via",
 	"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": "Chat logs direct opslaan in de opslag van je browser wordt niet langer ondersteund. Neem even de tijd om je chat logs te downloaden en te verwijderen door op de knop hieronder te klikken. Maak je geen zorgen, je kunt je chat logs eenvoudig opnieuw importeren naar de backend via",
-	"Scroll to bottom when switching between branches": "Scroll naar onderen bij het wisselen tussen takken",
+	"Scroll On Branch Change": "",
 	"Search": "Zoeken",
 	"Search": "Zoeken",
 	"Search a model": "Zoek een model",
 	"Search a model": "Zoek een model",
 	"Search Base": "Zoeken naar basis",
 	"Search Base": "Zoeken naar basis",

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно