浏览代码

Merge pull request #3882 from open-webui/dev

0.3.9
Timothy Jaeryang Baek 10 月之前
父节点
当前提交
6e843ab563
共有 83 个文件被更改,包括 2596 次插入828 次删除
  1. 28 0
      CHANGELOG.md
  2. 1 1
      backend/apps/images/main.py
  3. 80 26
      backend/apps/ollama/main.py
  4. 21 20
      backend/apps/openai/main.py
  5. 18 6
      backend/apps/rag/main.py
  6. 31 0
      backend/apps/socket/main.py
  7. 43 4
      backend/apps/webui/main.py
  8. 9 0
      backend/apps/webui/models/functions.py
  9. 2 0
      backend/apps/webui/routers/files.py
  10. 2 0
      backend/apps/webui/utils.py
  11. 5 5
      backend/constants.py
  12. 1 1
      backend/data/config.json
  13. 208 46
      backend/main.py
  14. 1 1
      backend/migrations/env.py
  15. 5 5
      backend/requirements.txt
  16. 2 2
      package-lock.json
  17. 1 1
      package.json
  18. 39 0
      src/lib/apis/index.ts
  19. 1 1
      src/lib/apis/rag/index.ts
  20. 1 0
      src/lib/components/admin/Settings/Images.svelte
  21. 125 44
      src/lib/components/chat/Chat.svelte
  22. 11 0
      src/lib/components/chat/ChatControls.svelte
  23. 45 3
      src/lib/components/chat/Controls/Controls.svelte
  24. 30 143
      src/lib/components/chat/MessageInput.svelte
  25. 35 0
      src/lib/components/chat/MessageInput/FilesOverlay.svelte
  26. 4 0
      src/lib/components/chat/Messages.svelte
  27. 19 4
      src/lib/components/chat/Messages/CitationsModal.svelte
  28. 29 0
      src/lib/components/chat/Messages/ResponseMessage.svelte
  29. 4 98
      src/lib/components/chat/Messages/UserMessage.svelte
  30. 27 2
      src/lib/components/chat/Settings/Advanced/AdvancedParams.svelte
  31. 2 85
      src/lib/components/chat/Settings/Valves.svelte
  32. 16 1
      src/lib/components/common/ConfirmDialog.svelte
  33. 135 0
      src/lib/components/common/FileItem.svelte
  34. 2 1
      src/lib/components/common/SensitiveInput.svelte
  35. 95 0
      src/lib/components/common/Valves.svelte
  36. 19 0
      src/lib/components/icons/Sparkles.svelte
  37. 26 3
      src/lib/components/workspace/Documents.svelte
  38. 16 11
      src/lib/components/workspace/Functions.svelte
  39. 14 12
      src/lib/components/workspace/Functions/FunctionEditor.svelte
  40. 1 1
      src/lib/components/workspace/Functions/FunctionMenu.svelte
  41. 9 7
      src/lib/components/workspace/Tools.svelte
  42. 16 12
      src/lib/components/workspace/Tools/ToolkitEditor.svelte
  43. 12 10
      src/lib/components/workspace/common/ManifestModal.svelte
  44. 2 85
      src/lib/components/workspace/common/ValvesModal.svelte
  45. 32 0
      src/lib/i18n/locales/ar-BH/translation.json
  46. 32 0
      src/lib/i18n/locales/bg-BG/translation.json
  47. 32 0
      src/lib/i18n/locales/bn-BD/translation.json
  48. 32 0
      src/lib/i18n/locales/ca-ES/translation.json
  49. 32 0
      src/lib/i18n/locales/ceb-PH/translation.json
  50. 33 1
      src/lib/i18n/locales/de-DE/translation.json
  51. 32 0
      src/lib/i18n/locales/dg-DG/translation.json
  52. 32 0
      src/lib/i18n/locales/en-GB/translation.json
  53. 32 0
      src/lib/i18n/locales/en-US/translation.json
  54. 32 0
      src/lib/i18n/locales/es-ES/translation.json
  55. 32 0
      src/lib/i18n/locales/fa-IR/translation.json
  56. 32 0
      src/lib/i18n/locales/fi-FI/translation.json
  57. 32 0
      src/lib/i18n/locales/fr-CA/translation.json
  58. 32 0
      src/lib/i18n/locales/fr-FR/translation.json
  59. 32 0
      src/lib/i18n/locales/he-IL/translation.json
  60. 32 0
      src/lib/i18n/locales/hi-IN/translation.json
  61. 32 0
      src/lib/i18n/locales/hr-HR/translation.json
  62. 32 0
      src/lib/i18n/locales/id-ID/translation.json
  63. 32 0
      src/lib/i18n/locales/it-IT/translation.json
  64. 32 0
      src/lib/i18n/locales/ja-JP/translation.json
  65. 32 0
      src/lib/i18n/locales/ka-GE/translation.json
  66. 32 0
      src/lib/i18n/locales/ko-KR/translation.json
  67. 32 0
      src/lib/i18n/locales/lt-LT/translation.json
  68. 32 0
      src/lib/i18n/locales/nb-NO/translation.json
  69. 32 0
      src/lib/i18n/locales/nl-NL/translation.json
  70. 32 0
      src/lib/i18n/locales/pa-IN/translation.json
  71. 32 0
      src/lib/i18n/locales/pl-PL/translation.json
  72. 199 167
      src/lib/i18n/locales/pt-BR/translation.json
  73. 32 0
      src/lib/i18n/locales/pt-PT/translation.json
  74. 32 0
      src/lib/i18n/locales/ru-RU/translation.json
  75. 32 0
      src/lib/i18n/locales/sr-RS/translation.json
  76. 32 0
      src/lib/i18n/locales/sv-SE/translation.json
  77. 32 0
      src/lib/i18n/locales/tk-TW/translation.json
  78. 32 0
      src/lib/i18n/locales/tr-TR/translation.json
  79. 46 14
      src/lib/i18n/locales/uk-UA/translation.json
  80. 32 0
      src/lib/i18n/locales/vi-VN/translation.json
  81. 35 3
      src/lib/i18n/locales/zh-CN/translation.json
  82. 32 0
      src/lib/i18n/locales/zh-TW/translation.json
  83. 2 2
      src/routes/auth/+page.svelte

+ 28 - 0
CHANGELOG.md

@@ -5,6 +5,34 @@ All notable changes to this project will be documented in this file.
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
 
+## [0.3.9] - 2024-07-17
+
+### Added
+
+- **📁 Files Chat Controls**: We've reverted to the old file handling behavior where uploaded files are always included. You can now manage files directly within the chat controls section, giving you the ability to remove files as needed.
+- **🔧 "Action" Function Support**: Introducing a new "Action" function to write custom buttons to the message toolbar. This feature enables more interactive messaging, with documentation coming soon.
+- **📜 Citations Handling**: For newly uploaded files in documents workspace, citations will now display the actual filename. Additionally, you can click on these filenames to open the file in a new tab for easier access.
+- **🛠️ Event Emitter and Call Updates**: Enhanced 'event_emitter' to allow message replacement and 'event_call' to support text input for Tools and Functions. Detailed documentation will be provided shortly.
+- **🎨 Styling Refactor**: Various styling updates for a cleaner and more cohesive user interface.
+- **🌐 Enhanced Translations**: Improved translations for Catalan, Ukrainian, and Brazilian Portuguese.
+
+### Fixed
+
+- **🔧 Chat Controls Priority**: Resolved an issue where Chat Controls values were being overridden by model information parameters. The priority is now Chat Controls, followed by Global Settings, then Model Settings.
+- **🪲 Debug Logs**: Fixed an issue where debug logs were not being logged properly.
+- **🔑 Automatic1111 Auth Key**: The auth key for Automatic1111 is no longer required.
+- **📝 Title Generation**: Ensured that the title generation runs only once, even when multiple models are in a chat.
+- **✅ Boolean Values in Params**: Added support for boolean values in parameters.
+- **🖼️ Files Overlay Styling**: Fixed the styling issue with the files overlay.
+
+### Changed
+
+- **⬆️ Dependency Updates** 
+  - Upgraded 'pydantic' from version 2.7.1 to 2.8.2.
+  - Upgraded 'sqlalchemy' from version 2.0.30 to 2.0.31.
+  - Upgraded 'unstructured' from version 0.14.9 to 0.14.10.
+  - Upgraded 'chromadb' from version 0.5.3 to 0.5.4.
+
 ## [0.3.8] - 2024-07-09
 ## [0.3.8] - 2024-07-09
 
 
 ### Added
 ### Added

+ 1 - 1
backend/apps/images/main.py

@@ -421,7 +421,7 @@ def save_url_image(url):
 
 
 
 
 @app.post("/generations")
 @app.post("/generations")
-def generate_image(
+async def image_generations(
     form_data: GenerateImageForm,
     form_data: GenerateImageForm,
     user=Depends(get_verified_user),
     user=Depends(get_verified_user),
 ):
 ):

+ 80 - 26
backend/apps/ollama/main.py

@@ -728,8 +728,10 @@ async def generate_chat_completion(
     )
     )
 
 
     payload = {
     payload = {
-        **form_data.model_dump(exclude_none=True),
+        **form_data.model_dump(exclude_none=True, exclude=["metadata"]),
     }
     }
+    if "metadata" in payload:
+        del payload["metadata"]
 
 
     model_id = form_data.model
     model_id = form_data.model
     model_info = Models.get_model_by_id(model_id)
     model_info = Models.get_model_by_id(model_id)
@@ -741,52 +743,85 @@ async def generate_chat_completion(
         model_info.params = model_info.params.model_dump()
         model_info.params = model_info.params.model_dump()
 
 
         if model_info.params:
         if model_info.params:
-            payload["options"] = {}
+            if payload.get("options") is None:
+                payload["options"] = {}
 
 
-            if model_info.params.get("mirostat", None):
+            if (
+                model_info.params.get("mirostat", None)
+                and payload["options"].get("mirostat") is None
+            ):
                 payload["options"]["mirostat"] = model_info.params.get("mirostat", None)
                 payload["options"]["mirostat"] = model_info.params.get("mirostat", None)
 
 
-            if model_info.params.get("mirostat_eta", None):
+            if (
+                model_info.params.get("mirostat_eta", None)
+                and payload["options"].get("mirostat_eta") is None
+            ):
                 payload["options"]["mirostat_eta"] = model_info.params.get(
                 payload["options"]["mirostat_eta"] = model_info.params.get(
                     "mirostat_eta", None
                     "mirostat_eta", None
                 )
                 )
 
 
-            if model_info.params.get("mirostat_tau", None):
-
+            if (
+                model_info.params.get("mirostat_tau", None)
+                and payload["options"].get("mirostat_tau") is None
+            ):
                 payload["options"]["mirostat_tau"] = model_info.params.get(
                 payload["options"]["mirostat_tau"] = model_info.params.get(
                     "mirostat_tau", None
                     "mirostat_tau", None
                 )
                 )
 
 
-            if model_info.params.get("num_ctx", None):
+            if (
+                model_info.params.get("num_ctx", None)
+                and payload["options"].get("num_ctx") is None
+            ):
                 payload["options"]["num_ctx"] = model_info.params.get("num_ctx", None)
                 payload["options"]["num_ctx"] = model_info.params.get("num_ctx", None)
 
 
-            if model_info.params.get("num_batch", None):
+            if (
+                model_info.params.get("num_batch", None)
+                and payload["options"].get("num_batch") is None
+            ):
                 payload["options"]["num_batch"] = model_info.params.get(
                 payload["options"]["num_batch"] = model_info.params.get(
                     "num_batch", None
                     "num_batch", None
                 )
                 )
 
 
-            if model_info.params.get("num_keep", None):
+            if (
+                model_info.params.get("num_keep", None)
+                and payload["options"].get("num_keep") is None
+            ):
                 payload["options"]["num_keep"] = model_info.params.get("num_keep", None)
                 payload["options"]["num_keep"] = model_info.params.get("num_keep", None)
 
 
-            if model_info.params.get("repeat_last_n", None):
+            if (
+                model_info.params.get("repeat_last_n", None)
+                and payload["options"].get("repeat_last_n") is None
+            ):
                 payload["options"]["repeat_last_n"] = model_info.params.get(
                 payload["options"]["repeat_last_n"] = model_info.params.get(
                     "repeat_last_n", None
                     "repeat_last_n", None
                 )
                 )
 
 
-            if model_info.params.get("frequency_penalty", None):
+            if (
+                model_info.params.get("frequency_penalty", None)
+                and payload["options"].get("frequency_penalty") is None
+            ):
                 payload["options"]["repeat_penalty"] = model_info.params.get(
                 payload["options"]["repeat_penalty"] = model_info.params.get(
                     "frequency_penalty", None
                     "frequency_penalty", None
                 )
                 )
 
 
-            if model_info.params.get("temperature", None) is not None:
+            if (
+                model_info.params.get("temperature", None)
+                and payload["options"].get("temperature") is None
+            ):
                 payload["options"]["temperature"] = model_info.params.get(
                 payload["options"]["temperature"] = model_info.params.get(
                     "temperature", None
                     "temperature", None
                 )
                 )
 
 
-            if model_info.params.get("seed", None):
+            if (
+                model_info.params.get("seed", None)
+                and payload["options"].get("seed") is None
+            ):
                 payload["options"]["seed"] = model_info.params.get("seed", None)
                 payload["options"]["seed"] = model_info.params.get("seed", None)
 
 
-            if model_info.params.get("stop", None):
+            if (
+                model_info.params.get("stop", None)
+                and payload["options"].get("stop") is None
+            ):
                 payload["options"]["stop"] = (
                 payload["options"]["stop"] = (
                     [
                     [
                         bytes(stop, "utf-8").decode("unicode_escape")
                         bytes(stop, "utf-8").decode("unicode_escape")
@@ -796,37 +831,56 @@ async def generate_chat_completion(
                     else None
                     else None
                 )
                 )
 
 
-            if model_info.params.get("tfs_z", None):
+            if (
+                model_info.params.get("tfs_z", None)
+                and payload["options"].get("tfs_z") is None
+            ):
                 payload["options"]["tfs_z"] = model_info.params.get("tfs_z", None)
                 payload["options"]["tfs_z"] = model_info.params.get("tfs_z", None)
 
 
-            if model_info.params.get("max_tokens", None):
+            if (
+                model_info.params.get("max_tokens", None)
+                and payload["options"].get("max_tokens") is None
+            ):
                 payload["options"]["num_predict"] = model_info.params.get(
                 payload["options"]["num_predict"] = model_info.params.get(
                     "max_tokens", None
                     "max_tokens", None
                 )
                 )
 
 
-            if model_info.params.get("top_k", None):
+            if (
+                model_info.params.get("top_k", None)
+                and payload["options"].get("top_k") is None
+            ):
                 payload["options"]["top_k"] = model_info.params.get("top_k", None)
                 payload["options"]["top_k"] = model_info.params.get("top_k", None)
 
 
-            if model_info.params.get("top_p", None):
+            if (
+                model_info.params.get("top_p", None)
+                and payload["options"].get("top_p") is None
+            ):
                 payload["options"]["top_p"] = model_info.params.get("top_p", None)
                 payload["options"]["top_p"] = model_info.params.get("top_p", None)
 
 
-            if model_info.params.get("use_mmap", None):
+            if (
+                model_info.params.get("use_mmap", None)
+                and payload["options"].get("use_mmap") is None
+            ):
                 payload["options"]["use_mmap"] = model_info.params.get("use_mmap", None)
                 payload["options"]["use_mmap"] = model_info.params.get("use_mmap", None)
 
 
-            if model_info.params.get("use_mlock", None):
+            if (
+                model_info.params.get("use_mlock", None)
+                and payload["options"].get("use_mlock") is None
+            ):
                 payload["options"]["use_mlock"] = model_info.params.get(
                 payload["options"]["use_mlock"] = model_info.params.get(
                     "use_mlock", None
                     "use_mlock", None
                 )
                 )
 
 
-            if model_info.params.get("num_thread", None):
+            if (
+                model_info.params.get("num_thread", None)
+                and payload["options"].get("num_thread") is None
+            ):
                 payload["options"]["num_thread"] = model_info.params.get(
                 payload["options"]["num_thread"] = model_info.params.get(
                     "num_thread", None
                     "num_thread", None
                 )
                 )
 
 
         system = model_info.params.get("system", None)
         system = model_info.params.get("system", None)
         if system:
         if system:
-            # Check if the payload already has a system message
-            # If not, add a system message to the payload
             system = prompt_template(
             system = prompt_template(
                 system,
                 system,
                 **(
                 **(
@@ -893,10 +947,10 @@ async def generate_openai_chat_completion(
     user=Depends(get_verified_user),
     user=Depends(get_verified_user),
 ):
 ):
     form_data = OpenAIChatCompletionForm(**form_data)
     form_data = OpenAIChatCompletionForm(**form_data)
+    payload = {**form_data.model_dump(exclude_none=True, exclude=["metadata"])}
 
 
-    payload = {
-        **form_data.model_dump(exclude_none=True),
-    }
+    if "metadata" in payload:
+        del payload["metadata"]
 
 
     model_id = form_data.model
     model_id = form_data.model
     model_info = Models.get_model_by_id(model_id)
     model_info = Models.get_model_by_id(model_id)

+ 21 - 20
backend/apps/openai/main.py

@@ -21,6 +21,7 @@ from utils.utils import (
     get_admin_user,
     get_admin_user,
 )
 )
 from utils.task import prompt_template
 from utils.task import prompt_template
+from utils.misc import add_or_update_system_message
 
 
 from config import (
 from config import (
     SRC_LOG_LEVELS,
     SRC_LOG_LEVELS,
@@ -357,6 +358,8 @@ async def generate_chat_completion(
 ):
 ):
     idx = 0
     idx = 0
     payload = {**form_data}
     payload = {**form_data}
+    if "metadata" in payload:
+        del payload["metadata"]
 
 
     model_id = form_data.get("model")
     model_id = form_data.get("model")
     model_info = Models.get_model_by_id(model_id)
     model_info = Models.get_model_by_id(model_id)
@@ -368,24 +371,33 @@ async def generate_chat_completion(
         model_info.params = model_info.params.model_dump()
         model_info.params = model_info.params.model_dump()
 
 
         if model_info.params:
         if model_info.params:
-            if model_info.params.get("temperature", None) is not None:
+            if (
+                model_info.params.get("temperature", None)
+                and payload.get("temperature") is None
+            ):
                 payload["temperature"] = float(model_info.params.get("temperature"))
                 payload["temperature"] = float(model_info.params.get("temperature"))
 
 
-            if model_info.params.get("top_p", None):
+            if model_info.params.get("top_p", None) and payload.get("top_p") is None:
                 payload["top_p"] = int(model_info.params.get("top_p", None))
                 payload["top_p"] = int(model_info.params.get("top_p", None))
 
 
-            if model_info.params.get("max_tokens", None):
+            if (
+                model_info.params.get("max_tokens", None)
+                and payload.get("max_tokens") is None
+            ):
                 payload["max_tokens"] = int(model_info.params.get("max_tokens", None))
                 payload["max_tokens"] = int(model_info.params.get("max_tokens", None))
 
 
-            if model_info.params.get("frequency_penalty", None):
+            if (
+                model_info.params.get("frequency_penalty", None)
+                and payload.get("frequency_penalty") is None
+            ):
                 payload["frequency_penalty"] = int(
                 payload["frequency_penalty"] = int(
                     model_info.params.get("frequency_penalty", None)
                     model_info.params.get("frequency_penalty", None)
                 )
                 )
 
 
-            if model_info.params.get("seed", None):
+            if model_info.params.get("seed", None) and payload.get("seed") is None:
                 payload["seed"] = model_info.params.get("seed", None)
                 payload["seed"] = model_info.params.get("seed", None)
 
 
-            if model_info.params.get("stop", None):
+            if model_info.params.get("stop", None) and payload.get("stop") is None:
                 payload["stop"] = (
                 payload["stop"] = (
                     [
                     [
                         bytes(stop, "utf-8").decode("unicode_escape")
                         bytes(stop, "utf-8").decode("unicode_escape")
@@ -410,21 +422,10 @@ async def generate_chat_completion(
                     else {}
                     else {}
                 ),
                 ),
             )
             )
-            # Check if the payload already has a system message
-            # If not, add a system message to the payload
             if payload.get("messages"):
             if payload.get("messages"):
-                for message in payload["messages"]:
-                    if message.get("role") == "system":
-                        message["content"] = system + message["content"]
-                        break
-                else:
-                    payload["messages"].insert(
-                        0,
-                        {
-                            "role": "system",
-                            "content": system,
-                        },
-                    )
+                payload["messages"] = add_or_update_system_message(
+                    system, payload["messages"]
+                )
 
 
     else:
     else:
         pass
         pass

+ 18 - 6
backend/apps/rag/main.py

@@ -930,7 +930,9 @@ def store_web_search(form_data: SearchForm, user=Depends(get_verified_user)):
         )
         )
 
 
 
 
-def store_data_in_vector_db(data, collection_name, overwrite: bool = False) -> bool:
+def store_data_in_vector_db(
+    data, collection_name, metadata: Optional[dict] = None, overwrite: bool = False
+) -> bool:
 
 
     text_splitter = RecursiveCharacterTextSplitter(
     text_splitter = RecursiveCharacterTextSplitter(
         chunk_size=app.state.config.CHUNK_SIZE,
         chunk_size=app.state.config.CHUNK_SIZE,
@@ -942,7 +944,7 @@ def store_data_in_vector_db(data, collection_name, overwrite: bool = False) -> b
 
 
     if len(docs) > 0:
     if len(docs) > 0:
         log.info(f"store_data_in_vector_db {docs}")
         log.info(f"store_data_in_vector_db {docs}")
-        return store_docs_in_vector_db(docs, collection_name, overwrite), None
+        return store_docs_in_vector_db(docs, collection_name, metadata, overwrite), None
     else:
     else:
         raise ValueError(ERROR_MESSAGES.EMPTY_CONTENT)
         raise ValueError(ERROR_MESSAGES.EMPTY_CONTENT)
 
 
@@ -956,14 +958,16 @@ def store_text_in_vector_db(
         add_start_index=True,
         add_start_index=True,
     )
     )
     docs = text_splitter.create_documents([text], metadatas=[metadata])
     docs = text_splitter.create_documents([text], metadatas=[metadata])
-    return store_docs_in_vector_db(docs, collection_name, overwrite)
+    return store_docs_in_vector_db(docs, collection_name, overwrite=overwrite)
 
 
 
 
-def store_docs_in_vector_db(docs, collection_name, overwrite: bool = False) -> bool:
+def store_docs_in_vector_db(
+    docs, collection_name, metadata: Optional[dict] = None, overwrite: bool = False
+) -> bool:
     log.info(f"store_docs_in_vector_db {docs} {collection_name}")
     log.info(f"store_docs_in_vector_db {docs} {collection_name}")
 
 
     texts = [doc.page_content for doc in docs]
     texts = [doc.page_content for doc in docs]
-    metadatas = [doc.metadata for doc in docs]
+    metadatas = [{**doc.metadata, **(metadata if metadata else {})} for doc in docs]
 
 
     # ChromaDB does not like datetime formats
     # ChromaDB does not like datetime formats
     # for meta-data so convert them to string.
     # for meta-data so convert them to string.
@@ -1237,13 +1241,21 @@ def process_doc(
         data = loader.load()
         data = loader.load()
 
 
         try:
         try:
-            result = store_data_in_vector_db(data, collection_name)
+            result = store_data_in_vector_db(
+                data,
+                collection_name,
+                {
+                    "file_id": form_data.file_id,
+                    "name": file.meta.get("name", file.filename),
+                },
+            )
 
 
             if result:
             if result:
                 return {
                 return {
                     "status": True,
                     "status": True,
                     "collection_name": collection_name,
                     "collection_name": collection_name,
                     "known_type": known_type,
                     "known_type": known_type,
+                    "filename": file.meta.get("name", file.filename),
                 }
                 }
         except Exception as e:
         except Exception as e:
             raise HTTPException(
             raise HTTPException(

+ 31 - 0
backend/apps/socket/main.py

@@ -137,3 +137,34 @@ async def disconnect(sid):
         await sio.emit("user-count", {"count": len(USER_POOL)})
         await sio.emit("user-count", {"count": len(USER_POOL)})
     else:
     else:
         print(f"Unknown session ID {sid} disconnected")
         print(f"Unknown session ID {sid} disconnected")
+
+
+async def get_event_emitter(request_info):
+    async def __event_emitter__(event_data):
+        await sio.emit(
+            "chat-events",
+            {
+                "chat_id": request_info["chat_id"],
+                "message_id": request_info["message_id"],
+                "data": event_data,
+            },
+            to=request_info["session_id"],
+        )
+
+    return __event_emitter__
+
+
+async def get_event_call(request_info):
+    async def __event_call__(event_data):
+        response = await sio.call(
+            "chat-events",
+            {
+                "chat_id": request_info["chat_id"],
+                "message_id": request_info["message_id"],
+                "data": event_data,
+            },
+            to=request_info["session_id"],
+        )
+        return response
+
+    return __event_call__

+ 43 - 4
backend/apps/webui/main.py

@@ -20,7 +20,6 @@ from apps.webui.routers import (
 )
 )
 from apps.webui.models.functions import Functions
 from apps.webui.models.functions import Functions
 from apps.webui.models.models import Models
 from apps.webui.models.models import Models
-
 from apps.webui.utils import load_function_module_by_id
 from apps.webui.utils import load_function_module_by_id
 
 
 from utils.misc import stream_message_template
 from utils.misc import stream_message_template
@@ -48,12 +47,14 @@ from config import (
     OAUTH_PICTURE_CLAIM,
     OAUTH_PICTURE_CLAIM,
 )
 )
 
 
+from apps.socket.main import get_event_call, get_event_emitter
+
 import inspect
 import inspect
 import uuid
 import uuid
 import time
 import time
 import json
 import json
 
 
-from typing import Iterator, Generator
+from typing import Iterator, Generator, Optional
 from pydantic import BaseModel
 from pydantic import BaseModel
 
 
 app = FastAPI()
 app = FastAPI()
@@ -164,6 +165,10 @@ async def get_pipe_models():
                             f"{function_module.name}{manifold_pipe_name}"
                             f"{function_module.name}{manifold_pipe_name}"
                         )
                         )
 
 
+                    pipe_flag = {"type": pipe.type}
+                    if hasattr(function_module, "ChatValves"):
+                        pipe_flag["valves_spec"] = function_module.ChatValves.schema()
+
                     pipe_models.append(
                     pipe_models.append(
                         {
                         {
                             "id": manifold_pipe_id,
                             "id": manifold_pipe_id,
@@ -171,10 +176,14 @@ async def get_pipe_models():
                             "object": "model",
                             "object": "model",
                             "created": pipe.created_at,
                             "created": pipe.created_at,
                             "owned_by": "openai",
                             "owned_by": "openai",
-                            "pipe": {"type": pipe.type},
+                            "pipe": pipe_flag,
                         }
                         }
                     )
                     )
         else:
         else:
+            pipe_flag = {"type": "pipe"}
+            if hasattr(function_module, "ChatValves"):
+                pipe_flag["valves_spec"] = function_module.ChatValves.schema()
+
             pipe_models.append(
             pipe_models.append(
                 {
                 {
                     "id": pipe.id,
                     "id": pipe.id,
@@ -182,7 +191,7 @@ async def get_pipe_models():
                     "object": "model",
                     "object": "model",
                     "created": pipe.created_at,
                     "created": pipe.created_at,
                     "owned_by": "openai",
                     "owned_by": "openai",
-                    "pipe": {"type": "pipe"},
+                    "pipe": pipe_flag,
                 }
                 }
             )
             )
 
 
@@ -193,6 +202,27 @@ async def generate_function_chat_completion(form_data, user):
     model_id = form_data.get("model")
     model_id = form_data.get("model")
     model_info = Models.get_model_by_id(model_id)
     model_info = Models.get_model_by_id(model_id)
 
 
+    metadata = None
+    if "metadata" in form_data:
+        metadata = form_data["metadata"]
+        del form_data["metadata"]
+
+    __event_emitter__ = None
+    __event_call__ = None
+    __task__ = None
+
+    if metadata:
+        if (
+            metadata.get("session_id")
+            and metadata.get("chat_id")
+            and metadata.get("message_id")
+        ):
+            __event_emitter__ = await get_event_emitter(metadata)
+            __event_call__ = await get_event_call(metadata)
+
+        if metadata.get("task"):
+            __task__ = metadata.get("task")
+
     if model_info:
     if model_info:
         if model_info.base_model_id:
         if model_info.base_model_id:
             form_data["model"] = model_info.base_model_id
             form_data["model"] = model_info.base_model_id
@@ -307,6 +337,15 @@ async def generate_function_chat_completion(form_data, user):
 
 
             params = {**params, "__user__": __user__}
             params = {**params, "__user__": __user__}
 
 
+        if "__event_emitter__" in sig.parameters:
+            params = {**params, "__event_emitter__": __event_emitter__}
+
+        if "__event_call__" in sig.parameters:
+            params = {**params, "__event_call__": __event_call__}
+
+        if "__task__" in sig.parameters:
+            params = {**params, "__task__": __task__}
+
         if form_data["stream"]:
         if form_data["stream"]:
 
 
             async def stream_content():
             async def stream_content():

+ 9 - 0
backend/apps/webui/models/functions.py

@@ -167,6 +167,15 @@ class FunctionsTable:
                 .all()
                 .all()
             ]
             ]
 
 
+    def get_global_action_functions(self) -> List[FunctionModel]:
+        with get_db() as db:
+            return [
+                FunctionModel.model_validate(function)
+                for function in db.query(Function)
+                .filter_by(type="action", is_active=True, is_global=True)
+                .all()
+            ]
+
     def get_function_valves_by_id(self, id: str) -> Optional[dict]:
     def get_function_valves_by_id(self, id: str) -> Optional[dict]:
         with get_db() as db:
         with get_db() as db:
 
 

+ 2 - 0
backend/apps/webui/routers/files.py

@@ -58,6 +58,7 @@ def upload_file(file: UploadFile = File(...), user=Depends(get_verified_user)):
 
 
         # replace filename with uuid
         # replace filename with uuid
         id = str(uuid.uuid4())
         id = str(uuid.uuid4())
+        name = filename
         filename = f"{id}_{filename}"
         filename = f"{id}_{filename}"
         file_path = f"{UPLOAD_DIR}/{filename}"
         file_path = f"{UPLOAD_DIR}/{filename}"
 
 
@@ -73,6 +74,7 @@ def upload_file(file: UploadFile = File(...), user=Depends(get_verified_user)):
                     "id": id,
                     "id": id,
                     "filename": filename,
                     "filename": filename,
                     "meta": {
                     "meta": {
+                        "name": name,
                         "content_type": file.content_type,
                         "content_type": file.content_type,
                         "size": len(contents),
                         "size": len(contents),
                         "path": file_path,
                         "path": file_path,

+ 2 - 0
backend/apps/webui/utils.py

@@ -79,6 +79,8 @@ def load_function_module_by_id(function_id):
             return module.Pipe(), "pipe", frontmatter
             return module.Pipe(), "pipe", frontmatter
         elif hasattr(module, "Filter"):
         elif hasattr(module, "Filter"):
             return module.Filter(), "filter", frontmatter
             return module.Filter(), "filter", frontmatter
+        elif hasattr(module, "Action"):
+            return module.Action(), "action", frontmatter
         else:
         else:
             raise Exception("No Function class found")
             raise Exception("No Function class found")
     except Exception as e:
     except Exception as e:

+ 5 - 5
backend/constants.py

@@ -95,8 +95,8 @@ class TASKS(str, Enum):
     def __str__(self) -> str:
     def __str__(self) -> str:
         return super().__str__()
         return super().__str__()
 
 
-    DEFAULT = lambda task="": f"{task if task else 'default'}"
-    TITLE_GENERATION = "Title Generation"
-    EMOJI_GENERATION = "Emoji Generation"
-    QUERY_GENERATION = "Query Generation"
-    FUNCTION_CALLING = "Function Calling"
+    DEFAULT = lambda task="": f"{task if task else 'generation'}"
+    TITLE_GENERATION = "title_generation"
+    EMOJI_GENERATION = "emoji_generation"
+    QUERY_GENERATION = "query_generation"
+    FUNCTION_CALLING = "function_calling"

+ 1 - 1
backend/data/config.json

@@ -1,7 +1,7 @@
 {
 {
 	"version": 0,
 	"version": 0,
 	"ui": {
 	"ui": {
-		"default_locale": "en-US",
+		"default_locale": "",
 		"prompt_suggestions": [
 		"prompt_suggestions": [
 			{
 			{
 				"title": ["Help me study", "vocabulary for a college entrance exam"],
 				"title": ["Help me study", "vocabulary for a college entrance exam"],

+ 208 - 46
backend/main.py

@@ -29,7 +29,7 @@ from starlette.middleware.sessions import SessionMiddleware
 from starlette.responses import StreamingResponse, Response, RedirectResponse
 from starlette.responses import StreamingResponse, Response, RedirectResponse
 
 
 
 
-from apps.socket.main import sio, app as socket_app
+from apps.socket.main import sio, app as socket_app, get_event_emitter, get_event_call
 from apps.ollama.main import (
 from apps.ollama.main import (
     app as ollama_app,
     app as ollama_app,
     get_all_models as get_ollama_models,
     get_all_models as get_ollama_models,
@@ -317,7 +317,7 @@ async def get_function_call_response(
             {"role": "user", "content": f"Query: {prompt}"},
             {"role": "user", "content": f"Query: {prompt}"},
         ],
         ],
         "stream": False,
         "stream": False,
-        "task": TASKS.FUNCTION_CALLING,
+        "task": str(TASKS.FUNCTION_CALLING),
     }
     }
 
 
     try:
     try:
@@ -618,6 +618,12 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware):
                     content={"detail": str(e)},
                     content={"detail": str(e)},
                 )
                 )
 
 
+            # Extract valves from the request body
+            valves = None
+            if "valves" in body:
+                valves = body["valves"]
+                del body["valves"]
+
             # Extract session_id, chat_id and message_id from the request body
             # Extract session_id, chat_id and message_id from the request body
             session_id = None
             session_id = None
             if "session_id" in body:
             if "session_id" in body:
@@ -632,24 +638,12 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware):
                 message_id = body["id"]
                 message_id = body["id"]
                 del body["id"]
                 del body["id"]
 
 
-            async def __event_emitter__(data):
-                await sio.emit(
-                    "chat-events",
-                    {
-                        "chat_id": chat_id,
-                        "message_id": message_id,
-                        "data": data,
-                    },
-                    to=session_id,
-                )
-
-            async def __event_call__(data):
-                response = await sio.call(
-                    "chat-events",
-                    {"chat_id": chat_id, "message_id": message_id, "data": data},
-                    to=session_id,
-                )
-                return response
+            __event_emitter__ = await get_event_emitter(
+                {"chat_id": chat_id, "message_id": message_id, "session_id": session_id}
+            )
+            __event_call__ = await get_event_call(
+                {"chat_id": chat_id, "message_id": message_id, "session_id": session_id}
+            )
 
 
             # Initialize data_items to store additional data to be sent to the client
             # Initialize data_items to store additional data to be sent to the client
             data_items = []
             data_items = []
@@ -703,6 +697,13 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware):
             if len(citations) > 0:
             if len(citations) > 0:
                 data_items.append({"citations": citations})
                 data_items.append({"citations": citations})
 
 
+            body["metadata"] = {
+                "session_id": session_id,
+                "chat_id": chat_id,
+                "message_id": message_id,
+                "valves": valves,
+            }
+
             modified_body_bytes = json.dumps(body).encode("utf-8")
             modified_body_bytes = json.dumps(body).encode("utf-8")
             # Replace the request body with the modified one
             # Replace the request body with the modified one
             request._body = modified_body_bytes
             request._body = modified_body_bytes
@@ -823,9 +824,6 @@ def filter_pipeline(payload, user):
                 if "detail" in res:
                 if "detail" in res:
                     raise Exception(r.status_code, res["detail"])
                     raise Exception(r.status_code, res["detail"])
 
 
-    if "pipeline" not in app.state.MODELS[model_id] and "task" in payload:
-        del payload["task"]
-
     return payload
     return payload
 
 
 
 
@@ -935,6 +933,7 @@ webui_app.state.EMBEDDING_FUNCTION = rag_app.state.EMBEDDING_FUNCTION
 
 
 
 
 async def get_all_models():
 async def get_all_models():
+    # TODO: Optimize this function
     pipe_models = []
     pipe_models = []
     openai_models = []
     openai_models = []
     ollama_models = []
     ollama_models = []
@@ -961,6 +960,14 @@ async def get_all_models():
 
 
     models = pipe_models + openai_models + ollama_models
     models = pipe_models + openai_models + ollama_models
 
 
+    global_action_ids = [
+        function.id for function in Functions.get_global_action_functions()
+    ]
+    enabled_action_ids = [
+        function.id
+        for function in Functions.get_functions_by_type("action", active_only=True)
+    ]
+
     custom_models = Models.get_all_models()
     custom_models = Models.get_all_models()
     for custom_model in custom_models:
     for custom_model in custom_models:
         if custom_model.base_model_id == None:
         if custom_model.base_model_id == None:
@@ -971,9 +978,33 @@ async def get_all_models():
                 ):
                 ):
                     model["name"] = custom_model.name
                     model["name"] = custom_model.name
                     model["info"] = custom_model.model_dump()
                     model["info"] = custom_model.model_dump()
+
+                    action_ids = [] + global_action_ids
+                    if "info" in model and "meta" in model["info"]:
+                        action_ids.extend(model["info"]["meta"].get("actionIds", []))
+                        action_ids = list(set(action_ids))
+                    action_ids = [
+                        action_id
+                        for action_id in action_ids
+                        if action_id in enabled_action_ids
+                    ]
+
+                    model["actions"] = []
+                    for action_id in action_ids:
+                        action = Functions.get_function_by_id(action_id)
+                        model["actions"].append(
+                            {
+                                "id": action_id,
+                                "name": action.name,
+                                "description": action.meta.description,
+                                "icon_url": action.meta.manifest.get("icon_url", None),
+                            }
+                        )
+
         else:
         else:
             owned_by = "openai"
             owned_by = "openai"
             pipe = None
             pipe = None
+            actions = []
 
 
             for model in models:
             for model in models:
                 if (
                 if (
@@ -983,6 +1014,27 @@ async def get_all_models():
                     owned_by = model["owned_by"]
                     owned_by = model["owned_by"]
                     if "pipe" in model:
                     if "pipe" in model:
                         pipe = model["pipe"]
                         pipe = model["pipe"]
+
+                    action_ids = [] + global_action_ids
+                    if "info" in model and "meta" in model["info"]:
+                        action_ids.extend(model["info"]["meta"].get("actionIds", []))
+                        action_ids = list(set(action_ids))
+                    action_ids = [
+                        action_id
+                        for action_id in action_ids
+                        if action_id in enabled_action_ids
+                    ]
+
+                    actions = [
+                        {
+                            "id": action_id,
+                            "name": Functions.get_function_by_id(action_id).name,
+                            "description": Functions.get_function_by_id(
+                                action_id
+                            ).meta.description,
+                        }
+                        for action_id in action_ids
+                    ]
                     break
                     break
 
 
             models.append(
             models.append(
@@ -995,6 +1047,7 @@ async def get_all_models():
                     "info": custom_model.model_dump(),
                     "info": custom_model.model_dump(),
                     "preset": True,
                     "preset": True,
                     **({"pipe": pipe} if pipe is not None else {}),
                     **({"pipe": pipe} if pipe is not None else {}),
+                    "actions": actions,
                 }
                 }
             )
             )
 
 
@@ -1036,13 +1089,24 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u
             status_code=status.HTTP_404_NOT_FOUND,
             status_code=status.HTTP_404_NOT_FOUND,
             detail="Model not found",
             detail="Model not found",
         )
         )
-
     model = app.state.MODELS[model_id]
     model = app.state.MODELS[model_id]
 
 
-    pipe = model.get("pipe")
-    if pipe:
+    # `task` field is used to determine the type of the request, e.g. `title_generation`, `query_generation`, etc.
+    task = None
+    if "task" in form_data:
+        task = form_data["task"]
+        del form_data["task"]
+
+    if task:
+        if "metadata" in form_data:
+            form_data["metadata"]["task"] = task
+        else:
+            form_data["metadata"] = {"task": task}
+
+    if model.get("pipe"):
         return await generate_function_chat_completion(form_data, user=user)
         return await generate_function_chat_completion(form_data, user=user)
     if model["owned_by"] == "ollama":
     if model["owned_by"] == "ollama":
+        print("generate_ollama_chat_completion")
         return await generate_ollama_chat_completion(form_data, user=user)
         return await generate_ollama_chat_completion(form_data, user=user)
     else:
     else:
         return await generate_openai_chat_completion(form_data, user=user)
         return await generate_openai_chat_completion(form_data, user=user)
@@ -1107,24 +1171,21 @@ async def chat_completed(form_data: dict, user=Depends(get_verified_user)):
             else:
             else:
                 pass
                 pass
 
 
-    async def __event_emitter__(event_data):
-        await sio.emit(
-            "chat-events",
-            {
-                "chat_id": data["chat_id"],
-                "message_id": data["id"],
-                "data": event_data,
-            },
-            to=data["session_id"],
-        )
+    __event_emitter__ = await get_event_emitter(
+        {
+            "chat_id": data["chat_id"],
+            "message_id": data["id"],
+            "session_id": data["session_id"],
+        }
+    )
 
 
-    async def __event_call__(event_data):
-        response = await sio.call(
-            "chat-events",
-            {"chat_id": data["chat_id"], "message_id": data["id"], "data": event_data},
-            to=data["session_id"],
-        )
-        return response
+    __event_call__ = await get_event_call(
+        {
+            "chat_id": data["chat_id"],
+            "message_id": data["id"],
+            "session_id": data["session_id"],
+        }
+    )
 
 
     def get_priority(function_id):
     def get_priority(function_id):
         function = Functions.get_function_by_id(function_id)
         function = Functions.get_function_by_id(function_id)
@@ -1222,6 +1283,107 @@ async def chat_completed(form_data: dict, user=Depends(get_verified_user)):
     return data
     return data
 
 
 
 
+@app.post("/api/chat/actions/{action_id}")
+async def chat_completed(
+    action_id: str, form_data: dict, user=Depends(get_verified_user)
+):
+    action = Functions.get_function_by_id(action_id)
+    if not action:
+        raise HTTPException(
+            status_code=status.HTTP_404_NOT_FOUND,
+            detail="Action not found",
+        )
+
+    data = form_data
+    model_id = data["model"]
+    if model_id not in app.state.MODELS:
+        raise HTTPException(
+            status_code=status.HTTP_404_NOT_FOUND,
+            detail="Model not found",
+        )
+    model = app.state.MODELS[model_id]
+
+    __event_emitter__ = await get_event_emitter(
+        {
+            "chat_id": data["chat_id"],
+            "message_id": data["id"],
+            "session_id": data["session_id"],
+        }
+    )
+    __event_call__ = await get_event_call(
+        {
+            "chat_id": data["chat_id"],
+            "message_id": data["id"],
+            "session_id": data["session_id"],
+        }
+    )
+
+    if action_id in webui_app.state.FUNCTIONS:
+        function_module = webui_app.state.FUNCTIONS[action_id]
+    else:
+        function_module, _, _ = load_function_module_by_id(action_id)
+        webui_app.state.FUNCTIONS[action_id] = function_module
+
+    if hasattr(function_module, "valves") and hasattr(function_module, "Valves"):
+        valves = Functions.get_function_valves_by_id(action_id)
+        function_module.valves = function_module.Valves(**(valves if valves else {}))
+
+    if hasattr(function_module, "action"):
+        try:
+            action = function_module.action
+
+            # Get the signature of the function
+            sig = inspect.signature(action)
+            params = {"body": data}
+
+            # Extra parameters to be passed to the function
+            extra_params = {
+                "__model__": model,
+                "__id__": action_id,
+                "__event_emitter__": __event_emitter__,
+                "__event_call__": __event_call__,
+            }
+
+            # Add extra params in contained in function signature
+            for key, value in extra_params.items():
+                if key in sig.parameters:
+                    params[key] = value
+
+            if "__user__" in sig.parameters:
+                __user__ = {
+                    "id": user.id,
+                    "email": user.email,
+                    "name": user.name,
+                    "role": user.role,
+                }
+
+                try:
+                    if hasattr(function_module, "UserValves"):
+                        __user__["valves"] = function_module.UserValves(
+                            **Functions.get_user_valves_by_id_and_user_id(
+                                action_id, user.id
+                            )
+                        )
+                except Exception as e:
+                    print(e)
+
+                params = {**params, "__user__": __user__}
+
+            if inspect.iscoroutinefunction(action):
+                data = await action(**params)
+            else:
+                data = action(**params)
+
+        except Exception as e:
+            print(f"Error: {e}")
+            return JSONResponse(
+                status_code=status.HTTP_400_BAD_REQUEST,
+                content={"detail": str(e)},
+            )
+
+    return data
+
+
 ##################################
 ##################################
 #
 #
 # Task Endpoints
 # Task Endpoints
@@ -1314,7 +1476,7 @@ async def generate_title(form_data: dict, user=Depends(get_verified_user)):
         "stream": False,
         "stream": False,
         "max_tokens": 50,
         "max_tokens": 50,
         "chat_id": form_data.get("chat_id", None),
         "chat_id": form_data.get("chat_id", None),
-        "task": TASKS.TITLE_GENERATION,
+        "task": str(TASKS.TITLE_GENERATION),
     }
     }
 
 
     log.debug(payload)
     log.debug(payload)
@@ -1367,7 +1529,7 @@ async def generate_search_query(form_data: dict, user=Depends(get_verified_user)
         "messages": [{"role": "user", "content": content}],
         "messages": [{"role": "user", "content": content}],
         "stream": False,
         "stream": False,
         "max_tokens": 30,
         "max_tokens": 30,
-        "task": TASKS.QUERY_GENERATION,
+        "task": str(TASKS.QUERY_GENERATION),
     }
     }
 
 
     print(payload)
     print(payload)
@@ -1424,7 +1586,7 @@ Message: """{{prompt}}"""
         "stream": False,
         "stream": False,
         "max_tokens": 4,
         "max_tokens": 4,
         "chat_id": form_data.get("chat_id", None),
         "chat_id": form_data.get("chat_id", None),
-        "task": TASKS.EMOJI_GENERATION,
+        "task": str(TASKS.EMOJI_GENERATION),
     }
     }
 
 
     log.debug(payload)
     log.debug(payload)

+ 1 - 1
backend/migrations/env.py

@@ -27,7 +27,7 @@ config = context.config
 # Interpret the config file for Python logging.
 # Interpret the config file for Python logging.
 # This line sets up loggers basically.
 # This line sets up loggers basically.
 if config.config_file_name is not None:
 if config.config_file_name is not None:
-    fileConfig(config.config_file_name)
+    fileConfig(config.config_file_name, disable_existing_loggers=False)
 
 
 # add your model's MetaData object here
 # add your model's MetaData object here
 # for 'autogenerate' support
 # for 'autogenerate' support

+ 5 - 5
backend/requirements.txt

@@ -1,6 +1,6 @@
 fastapi==0.111.0
 fastapi==0.111.0
 uvicorn[standard]==0.22.0
 uvicorn[standard]==0.22.0
-pydantic==2.7.1
+pydantic==2.8.2
 python-multipart==0.0.9
 python-multipart==0.0.9
 
 
 Flask==3.0.3
 Flask==3.0.3
@@ -12,7 +12,7 @@ passlib[bcrypt]==1.7.4
 
 
 requests==2.32.3
 requests==2.32.3
 aiohttp==3.9.5
 aiohttp==3.9.5
-sqlalchemy==2.0.30
+sqlalchemy==2.0.31
 alembic==1.13.2
 alembic==1.13.2
 peewee==3.17.6
 peewee==3.17.6
 peewee-migrate==1.12.2
 peewee-migrate==1.12.2
@@ -38,12 +38,12 @@ langchain-community==0.2.6
 langchain-chroma==0.1.2
 langchain-chroma==0.1.2
 
 
 fake-useragent==1.5.1
 fake-useragent==1.5.1
-chromadb==0.5.3
+chromadb==0.5.4
 sentence-transformers==3.0.1
 sentence-transformers==3.0.1
 pypdf==4.2.0
 pypdf==4.2.0
 docx2txt==0.8
 docx2txt==0.8
 python-pptx==0.6.23
 python-pptx==0.6.23
-unstructured==0.14.9
+unstructured==0.14.10
 Markdown==3.6
 Markdown==3.6
 pypandoc==1.13
 pypandoc==1.13
 pandas==2.2.2
 pandas==2.2.2
@@ -71,7 +71,7 @@ pytube==15.0.0
 
 
 extract_msg
 extract_msg
 pydub
 pydub
-duckduckgo-search~=6.1.7
+duckduckgo-search~=6.1.12
 
 
 ## Tests
 ## Tests
 docker~=7.1.0
 docker~=7.1.0

+ 2 - 2
package-lock.json

@@ -1,12 +1,12 @@
 {
 {
 	"name": "open-webui",
 	"name": "open-webui",
-	"version": "0.3.8",
+	"version": "0.3.9",
 	"lockfileVersion": 3,
 	"lockfileVersion": 3,
 	"requires": true,
 	"requires": true,
 	"packages": {
 	"packages": {
 		"": {
 		"": {
 			"name": "open-webui",
 			"name": "open-webui",
-			"version": "0.3.8",
+			"version": "0.3.9",
 			"dependencies": {
 			"dependencies": {
 				"@codemirror/lang-javascript": "^6.2.2",
 				"@codemirror/lang-javascript": "^6.2.2",
 				"@codemirror/lang-python": "^6.1.6",
 				"@codemirror/lang-python": "^6.1.6",

+ 1 - 1
package.json

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

+ 39 - 0
src/lib/apis/index.ts

@@ -104,6 +104,45 @@ export const chatCompleted = async (token: string, body: ChatCompletedForm) => {
 	return res;
 	return res;
 };
 };
 
 
+type ChatActionForm = {
+	model: string;
+	messages: string[];
+	chat_id: string;
+};
+
+export const chatAction = async (token: string, action_id: string, body: ChatActionForm) => {
+	let error = null;
+
+	const res = await fetch(`${WEBUI_BASE_URL}/api/chat/actions/${action_id}`, {
+		method: 'POST',
+		headers: {
+			Accept: 'application/json',
+			'Content-Type': 'application/json',
+			...(token && { authorization: `Bearer ${token}` })
+		},
+		body: JSON.stringify(body)
+	})
+		.then(async (res) => {
+			if (!res.ok) throw await res.json();
+			return res.json();
+		})
+		.catch((err) => {
+			console.log(err);
+			if ('detail' in err) {
+				error = err.detail;
+			} else {
+				error = err;
+			}
+			return null;
+		});
+
+	if (error) {
+		throw error;
+	}
+
+	return res;
+};
+
 export const getTaskConfig = async (token: string = '') => {
 export const getTaskConfig = async (token: string = '') => {
 	let error = null;
 	let error = null;
 
 

+ 1 - 1
src/lib/apis/rag/index.ts

@@ -425,7 +425,7 @@ export const resetUploadDir = async (token: string) => {
 export const resetVectorDB = async (token: string) => {
 export const resetVectorDB = async (token: string) => {
 	let error = null;
 	let error = null;
 
 
-	const res = await fetch(`${RAG_API_BASE_URL}/reset`, {
+	const res = await fetch(`${RAG_API_BASE_URL}/reset/db`, {
 		method: 'GET',
 		method: 'GET',
 		headers: {
 		headers: {
 			Accept: 'application/json',
 			Accept: 'application/json',

+ 1 - 0
src/lib/components/admin/Settings/Images.svelte

@@ -282,6 +282,7 @@
 			<SensitiveInput
 			<SensitiveInput
 				placeholder={$i18n.t('Enter api auth string (e.g. username:password)')}
 				placeholder={$i18n.t('Enter api auth string (e.g. username:password)')}
 				bind:value={AUTOMATIC1111_API_AUTH}
 				bind:value={AUTOMATIC1111_API_AUTH}
+				required={false}
 			/>
 			/>
 
 
 			<div class="mt-2 text-xs text-gray-400 dark:text-gray-500">
 			<div class="mt-2 text-xs text-gray-400 dark:text-gray-500">

+ 125 - 44
src/lib/components/chat/Chat.svelte

@@ -52,7 +52,7 @@
 	import { createOpenAITextStream } from '$lib/apis/streaming';
 	import { createOpenAITextStream } from '$lib/apis/streaming';
 	import { queryMemory } from '$lib/apis/memories';
 	import { queryMemory } from '$lib/apis/memories';
 	import { getAndUpdateUserLocation, getUserSettings } from '$lib/apis/users';
 	import { getAndUpdateUserLocation, getUserSettings } from '$lib/apis/users';
-	import { chatCompleted, generateTitle, generateSearchQuery } from '$lib/apis';
+	import { chatCompleted, generateTitle, generateSearchQuery, chatAction } from '$lib/apis';
 
 
 	import Banner from '../common/Banner.svelte';
 	import Banner from '../common/Banner.svelte';
 	import MessageInput from '$lib/components/chat/MessageInput.svelte';
 	import MessageInput from '$lib/components/chat/MessageInput.svelte';
@@ -78,6 +78,8 @@
 	let showEventConfirmation = false;
 	let showEventConfirmation = false;
 	let eventConfirmationTitle = '';
 	let eventConfirmationTitle = '';
 	let eventConfirmationMessage = '';
 	let eventConfirmationMessage = '';
+	let eventConfirmationInput = false;
+	let eventConfirmationInputPlaceholder = '';
 	let eventCallback = null;
 	let eventCallback = null;
 
 
 	let showModelSelector = true;
 	let showModelSelector = true;
@@ -96,6 +98,8 @@
 
 
 	let title = '';
 	let title = '';
 	let prompt = '';
 	let prompt = '';
+
+	let chatFiles = [];
 	let files = [];
 	let files = [];
 	let messages = [];
 	let messages = [];
 	let history = {
 	let history = {
@@ -104,6 +108,7 @@
 	};
 	};
 
 
 	let params = {};
 	let params = {};
+	let valves = {};
 
 
 	$: if (history.currentId !== null) {
 	$: if (history.currentId !== null) {
 		let _messages = [];
 		let _messages = [];
@@ -156,12 +161,27 @@
 				} else {
 				} else {
 					message.citations = [data];
 					message.citations = [data];
 				}
 				}
+			} else if (type === 'message') {
+				message.content += data.content;
+			} else if (type === 'replace') {
+				message.content = data.content;
 			} else if (type === 'confirmation') {
 			} else if (type === 'confirmation') {
 				eventCallback = cb;
 				eventCallback = cb;
+
+				eventConfirmationInput = false;
 				showEventConfirmation = true;
 				showEventConfirmation = true;
 
 
 				eventConfirmationTitle = data.title;
 				eventConfirmationTitle = data.title;
 				eventConfirmationMessage = data.message;
 				eventConfirmationMessage = data.message;
+			} else if (type === 'input') {
+				eventCallback = cb;
+
+				eventConfirmationInput = true;
+				showEventConfirmation = true;
+
+				eventConfirmationTitle = data.title;
+				eventConfirmationMessage = data.message;
+				eventConfirmationInputPlaceholder = data.placeholder;
 			} else {
 			} else {
 				console.log('Unknown message type', data);
 				console.log('Unknown message type', data);
 			}
 			}
@@ -315,6 +335,7 @@
 				}
 				}
 
 
 				params = chatContent?.params ?? {};
 				params = chatContent?.params ?? {};
+				chatFiles = chatContent?.files ?? {};
 
 
 				autoScroll = true;
 				autoScroll = true;
 				await tick();
 				await tick();
@@ -347,7 +368,7 @@
 		}
 		}
 	};
 	};
 
 
-	const chatCompletedHandler = async (modelId, responseMessageId, messages) => {
+	const chatCompletedHandler = async (chatId, modelId, responseMessageId, messages) => {
 		await mermaid.run({
 		await mermaid.run({
 			querySelector: '.mermaid'
 			querySelector: '.mermaid'
 		});
 		});
@@ -361,7 +382,7 @@
 				info: m.info ? m.info : undefined,
 				info: m.info ? m.info : undefined,
 				timestamp: m.timestamp
 				timestamp: m.timestamp
 			})),
 			})),
-			chat_id: $chatId,
+			chat_id: chatId,
 			session_id: $socket?.id,
 			session_id: $socket?.id,
 			id: responseMessageId
 			id: responseMessageId
 		}).catch((error) => {
 		}).catch((error) => {
@@ -383,6 +404,65 @@
 				};
 				};
 			}
 			}
 		}
 		}
+
+		if ($chatId == chatId) {
+			if ($settings.saveChatHistory ?? true) {
+				chat = await updateChatById(localStorage.token, chatId, {
+					models: selectedModels,
+					messages: messages,
+					history: history,
+					params: params,
+					files: chatFiles
+				});
+				await chats.set(await getChatList(localStorage.token));
+			}
+		}
+	};
+
+	const chatActionHandler = async (chatId, actionId, modelId, responseMessageId) => {
+		const res = await chatAction(localStorage.token, actionId, {
+			model: modelId,
+			messages: messages.map((m) => ({
+				id: m.id,
+				role: m.role,
+				content: m.content,
+				info: m.info ? m.info : undefined,
+				timestamp: m.timestamp
+			})),
+			chat_id: chatId,
+			session_id: $socket?.id,
+			id: responseMessageId
+		}).catch((error) => {
+			toast.error(error);
+			messages.at(-1).error = { content: error };
+			return null;
+		});
+
+		if (res !== null) {
+			// Update chat history with the new messages
+			for (const message of res.messages) {
+				history.messages[message.id] = {
+					...history.messages[message.id],
+					...(history.messages[message.id].content !== message.content
+						? { originalContent: history.messages[message.id].content }
+						: {}),
+					...message
+				};
+			}
+		}
+
+		if ($chatId == chatId) {
+			if ($settings.saveChatHistory ?? true) {
+				chat = await updateChatById(localStorage.token, chatId, {
+					models: selectedModels,
+					messages: messages,
+					history: history,
+					params: params,
+					files: chatFiles
+				});
+				await chats.set(await getChatList(localStorage.token));
+			}
+		}
 	};
 	};
 
 
 	const getChatEventEmitter = async (modelId: string, chatId: string = '') => {
 	const getChatEventEmitter = async (modelId: string, chatId: string = '') => {
@@ -439,6 +519,13 @@
 			}
 			}
 
 
 			const _files = JSON.parse(JSON.stringify(files));
 			const _files = JSON.parse(JSON.stringify(files));
+			chatFiles.push(..._files.filter((item) => ['doc', 'file', 'collection'].includes(item.type)));
+			chatFiles = chatFiles.filter(
+				// Remove duplicates
+				(item, index, array) =>
+					array.findIndex((i) => JSON.stringify(i) === JSON.stringify(item)) === index
+			);
+
 			files = [];
 			files = [];
 
 
 			prompt = '';
 			prompt = '';
@@ -679,25 +766,10 @@
 			}
 			}
 		});
 		});
 
 
-		let files = [];
+		let files = JSON.parse(JSON.stringify(chatFiles));
 		if (model?.info?.meta?.knowledge ?? false) {
 		if (model?.info?.meta?.knowledge ?? false) {
-			files = model.info.meta.knowledge;
+			files.push(...model.info.meta.knowledge);
 		}
 		}
-		const lastUserMessage = messages.filter((message) => message.role === 'user').at(-1);
-
-		files = [
-			...files,
-			...(lastUserMessage?.files?.filter((item) =>
-				['doc', 'file', 'collection', 'web_search_results'].includes(item.type)
-			) ?? []),
-			...(responseMessage?.files?.filter((item) =>
-				['doc', 'file', 'collection', 'web_search_results'].includes(item.type)
-			) ?? [])
-		].filter(
-			// Remove duplicates
-			(item, index, array) =>
-				array.findIndex((i) => JSON.stringify(i) === JSON.stringify(item)) === index
-		);
 
 
 		eventTarget.dispatchEvent(
 		eventTarget.dispatchEvent(
 			new CustomEvent('chat:start', {
 			new CustomEvent('chat:start', {
@@ -729,6 +801,7 @@
 			keep_alive: $settings.keepAlive ?? undefined,
 			keep_alive: $settings.keepAlive ?? undefined,
 			tool_ids: selectedToolIds.length > 0 ? selectedToolIds : undefined,
 			tool_ids: selectedToolIds.length > 0 ? selectedToolIds : undefined,
 			files: files.length > 0 ? files : undefined,
 			files: files.length > 0 ? files : undefined,
+			...(Object.keys(valves).length ? { valves } : {}),
 			session_id: $socket?.id,
 			session_id: $socket?.id,
 			chat_id: $chatId,
 			chat_id: $chatId,
 			id: responseMessageId
 			id: responseMessageId
@@ -752,7 +825,7 @@
 						controller.abort('User: Stop Response');
 						controller.abort('User: Stop Response');
 					} else {
 					} else {
 						const messages = createMessagesList(responseMessageId);
 						const messages = createMessagesList(responseMessageId);
-						await chatCompletedHandler(model.id, responseMessageId, messages);
+						await chatCompletedHandler(_chatId, model.id, responseMessageId, messages);
 					}
 					}
 
 
 					_response = responseMessage.content;
 					_response = responseMessage.content;
@@ -860,7 +933,8 @@
 						messages: messages,
 						messages: messages,
 						history: history,
 						history: history,
 						models: selectedModels,
 						models: selectedModels,
-						params: params
+						params: params,
+						files: chatFiles
 					});
 					});
 					await chats.set(await getChatList(localStorage.token));
 					await chats.set(await getChatList(localStorage.token));
 				}
 				}
@@ -914,7 +988,7 @@
 			scrollToBottom();
 			scrollToBottom();
 		}
 		}
 
 
-		if (messages.length == 2 && messages.at(1).content !== '') {
+		if (messages.length == 2 && messages.at(1).content !== '' && selectedModels[0] === model.id) {
 			window.history.replaceState(history.state, '', `/c/${_chatId}`);
 			window.history.replaceState(history.state, '', `/c/${_chatId}`);
 			const _title = await generateChatTitle(userPrompt);
 			const _title = await generateChatTitle(userPrompt);
 			await setChatTitle(_chatId, _title);
 			await setChatTitle(_chatId, _title);
@@ -927,24 +1001,10 @@
 		let _response = null;
 		let _response = null;
 		const responseMessage = history.messages[responseMessageId];
 		const responseMessage = history.messages[responseMessageId];
 
 
-		let files = [];
+		let files = JSON.parse(JSON.stringify(chatFiles));
 		if (model?.info?.meta?.knowledge ?? false) {
 		if (model?.info?.meta?.knowledge ?? false) {
-			files = model.info.meta.knowledge;
+			files.push(...model.info.meta.knowledge);
 		}
 		}
-		const lastUserMessage = messages.filter((message) => message.role === 'user').at(-1);
-		files = [
-			...files,
-			...(lastUserMessage?.files?.filter((item) =>
-				['doc', 'file', 'collection', 'web_search_results'].includes(item.type)
-			) ?? []),
-			...(responseMessage?.files?.filter((item) =>
-				['doc', 'file', 'collection', 'web_search_results'].includes(item.type)
-			) ?? [])
-		].filter(
-			// Remove duplicates
-			(item, index, array) =>
-				array.findIndex((i) => JSON.stringify(i) === JSON.stringify(item)) === index
-		);
 
 
 		scrollToBottom();
 		scrollToBottom();
 
 
@@ -1033,6 +1093,7 @@
 					max_tokens: params?.max_tokens ?? $settings?.params?.max_tokens ?? undefined,
 					max_tokens: params?.max_tokens ?? $settings?.params?.max_tokens ?? undefined,
 					tool_ids: selectedToolIds.length > 0 ? selectedToolIds : undefined,
 					tool_ids: selectedToolIds.length > 0 ? selectedToolIds : undefined,
 					files: files.length > 0 ? files : undefined,
 					files: files.length > 0 ? files : undefined,
+					...(Object.keys(valves).length ? { valves } : {}),
 					session_id: $socket?.id,
 					session_id: $socket?.id,
 					chat_id: $chatId,
 					chat_id: $chatId,
 					id: responseMessageId
 					id: responseMessageId
@@ -1064,7 +1125,7 @@
 						} else {
 						} else {
 							const messages = createMessagesList(responseMessageId);
 							const messages = createMessagesList(responseMessageId);
 
 
-							await chatCompletedHandler(model.id, responseMessageId, messages);
+							await chatCompletedHandler(_chatId, model.id, responseMessageId, messages);
 						}
 						}
 
 
 						_response = responseMessage.content;
 						_response = responseMessage.content;
@@ -1137,7 +1198,8 @@
 							models: selectedModels,
 							models: selectedModels,
 							messages: messages,
 							messages: messages,
 							history: history,
 							history: history,
-							params: params
+							params: params,
+							files: chatFiles
 						});
 						});
 						await chats.set(await getChatList(localStorage.token));
 						await chats.set(await getChatList(localStorage.token));
 					}
 					}
@@ -1175,7 +1237,7 @@
 			scrollToBottom();
 			scrollToBottom();
 		}
 		}
 
 
-		if (messages.length == 2) {
+		if (messages.length == 2 && selectedModels[0] === model.id) {
 			window.history.replaceState(history.state, '', `/c/${_chatId}`);
 			window.history.replaceState(history.state, '', `/c/${_chatId}`);
 
 
 			const _title = await generateChatTitle(userPrompt);
 			const _title = await generateChatTitle(userPrompt);
@@ -1408,8 +1470,14 @@
 	bind:show={showEventConfirmation}
 	bind:show={showEventConfirmation}
 	title={eventConfirmationTitle}
 	title={eventConfirmationTitle}
 	message={eventConfirmationMessage}
 	message={eventConfirmationMessage}
+	input={eventConfirmationInput}
+	inputPlaceholder={eventConfirmationInputPlaceholder}
 	on:confirm={(e) => {
 	on:confirm={(e) => {
-		eventCallback(true);
+		if (e.detail) {
+			eventCallback(e.detail);
+		} else {
+			eventCallback(true);
+		}
 	}}
 	}}
 	on:cancel={() => {
 	on:cancel={() => {
 		eventCallback(false);
 		eventCallback(false);
@@ -1511,6 +1579,7 @@
 						{sendPrompt}
 						{sendPrompt}
 						{continueGeneration}
 						{continueGeneration}
 						{regenerateResponse}
 						{regenerateResponse}
+						{chatActionHandler}
 					/>
 					/>
 				</div>
 				</div>
 			</div>
 			</div>
@@ -1539,6 +1608,18 @@
 			</div>
 			</div>
 		</div>
 		</div>
 
 
-		<ChatControls bind:show={showControls} bind:params />
+		<ChatControls
+			models={selectedModelIds.reduce((a, e, i, arr) => {
+				const model = $models.find((m) => m.id === e);
+				if (model) {
+					return [...a, model];
+				}
+				return a;
+			}, [])}
+			bind:show={showControls}
+			bind:chatFiles
+			bind:params
+			bind:valves
+		/>
 	</div>
 	</div>
 {/if}
 {/if}

+ 11 - 0
src/lib/components/chat/ChatControls.svelte

@@ -6,7 +6,12 @@
 
 
 	export let show = false;
 	export let show = false;
 
 
+	export let models = [];
+
 	export let chatId = null;
 	export let chatId = null;
+
+	export let chatFiles = [];
+	export let valves = {};
 	export let params = {};
 	export let params = {};
 
 
 	let largeScreen = false;
 	let largeScreen = false;
@@ -43,6 +48,9 @@
 						on:close={() => {
 						on:close={() => {
 							show = false;
 							show = false;
 						}}
 						}}
+						{models}
+						bind:chatFiles
+						bind:valves
 						bind:params
 						bind:params
 					/>
 					/>
 				</div>
 				</div>
@@ -56,6 +64,9 @@
 				on:close={() => {
 				on:close={() => {
 					show = false;
 					show = false;
 				}}
 				}}
+				{models}
+				bind:chatFiles
+				bind:valves
 				bind:params
 				bind:params
 			/>
 			/>
 		</div>
 		</div>

+ 45 - 3
src/lib/components/chat/Controls/Controls.svelte

@@ -5,7 +5,13 @@
 
 
 	import XMark from '$lib/components/icons/XMark.svelte';
 	import XMark from '$lib/components/icons/XMark.svelte';
 	import AdvancedParams from '../Settings/Advanced/AdvancedParams.svelte';
 	import AdvancedParams from '../Settings/Advanced/AdvancedParams.svelte';
+	import Valves from '$lib/components/common/Valves.svelte';
+	import FileItem from '$lib/components/common/FileItem.svelte';
 
 
+	export let models = [];
+
+	export let chatFiles = [];
+	export let valves = {};
 	export let params = {};
 	export let params = {};
 </script>
 </script>
 
 
@@ -23,15 +29,51 @@
 	</div>
 	</div>
 
 
 	<div class=" dark:text-gray-200 text-sm font-primary">
 	<div class=" dark:text-gray-200 text-sm font-primary">
+		{#if chatFiles.length > 0}
+			<div>
+				<div class="mb-1.5 font-medium">{$i18n.t('Files')}</div>
+
+				<div>
+					{#each chatFiles as file}
+						<FileItem
+							className="w-full"
+							url={`${file?.url}`}
+							name={file.name}
+							type={file.type}
+							dismissible={true}
+							on:dismiss={() => {
+								// Remove the file from the chatFiles array
+								chatFiles = chatFiles.filter((f) => f.id !== file.id);
+							}}
+						/>
+					{/each}
+				</div>
+			</div>
+
+			<hr class="my-2 border-gray-100 dark:border-gray-800" />
+		{/if}
+
+		{#if models.length === 1 && models[0]?.pipe?.valves_spec}
+			<div>
+				<div class=" font-medium">{$i18n.t('Valves')}</div>
+
+				<div>
+					<Valves valvesSpec={models[0]?.pipe?.valves_spec} bind:valves />
+				</div>
+			</div>
+
+			<hr class="my-2 border-gray-100 dark:border-gray-800" />
+		{/if}
+
 		<div>
 		<div>
-			<div class="mb-1.5 font-medium">System Prompt</div>
+			<div class="mb-1.5 font-medium">{$i18n.t('System Prompt')}</div>
 
 
 			<div>
 			<div>
 				<textarea
 				<textarea
 					bind:value={params.system}
 					bind:value={params.system}
 					class="w-full rounded-lg px-4 py-3 text-sm dark:text-gray-300 dark:bg-gray-850 border border-gray-100 dark:border-gray-800 outline-none resize-none"
 					class="w-full rounded-lg px-4 py-3 text-sm dark:text-gray-300 dark:bg-gray-850 border border-gray-100 dark:border-gray-800 outline-none resize-none"
 					rows="3"
 					rows="3"
-					placeholder="Enter system prompt"
+					placeholder={$i18n.t('Enter system prompt')}
 				/>
 				/>
 			</div>
 			</div>
 		</div>
 		</div>
@@ -39,7 +81,7 @@
 		<hr class="my-2 border-gray-100 dark:border-gray-800" />
 		<hr class="my-2 border-gray-100 dark:border-gray-800" />
 
 
 		<div>
 		<div>
-			<div class="mb-1.5 font-medium">Advanced Params</div>
+			<div class="mb-1.5 font-medium">{$i18n.t('Advanced Params')}</div>
 
 
 			<div>
 			<div>
 				<AdvancedParams bind:params />
 				<AdvancedParams bind:params />

+ 30 - 143
src/lib/components/chat/MessageInput.svelte

@@ -40,6 +40,8 @@
 	import Headphone from '../icons/Headphone.svelte';
 	import Headphone from '../icons/Headphone.svelte';
 	import VoiceRecording from './MessageInput/VoiceRecording.svelte';
 	import VoiceRecording from './MessageInput/VoiceRecording.svelte';
 	import { transcribeAudio } from '$lib/apis/audio';
 	import { transcribeAudio } from '$lib/apis/audio';
+	import FileItem from '../common/FileItem.svelte';
+	import FilesOverlay from './MessageInput/FilesOverlay.svelte';
 
 
 	const i18n = getContext('i18n');
 	const i18n = getContext('i18n');
 
 
@@ -297,24 +299,7 @@
 	});
 	});
 </script>
 </script>
 
 
-{#if dragged}
-	<div
-		class="fixed {$showSidebar
-			? 'left-0 md:left-[260px] md:w-[calc(100%-260px)]'
-			: 'left-0'}  w-full h-full flex z-50 touch-none pointer-events-none"
-		id="dropzone"
-		role="region"
-		aria-label="Drag and Drop Container"
-	>
-		<div class="absolute w-full h-full backdrop-blur bg-gray-800/40 flex justify-center">
-			<div class="m-auto pt-64 flex flex-col justify-center">
-				<div class="max-w-md">
-					<AddFilesPlaceholder />
-				</div>
-			</div>
-		</div>
-	</div>
-{/if}
+<FilesOverlay show={dragged} />
 
 
 <div class="w-full font-primary">
 <div class="w-full font-primary">
 	<div class=" -mb-0.5 mx-auto inset-x-0 bg-transparent flex justify-center">
 	<div class=" -mb-0.5 mx-auto inset-x-0 bg-transparent flex justify-center">
@@ -500,10 +485,10 @@
 							dir={$settings?.chatDirection ?? 'LTR'}
 							dir={$settings?.chatDirection ?? 'LTR'}
 						>
 						>
 							{#if files.length > 0}
 							{#if files.length > 0}
-								<div class="mx-2 mt-2 mb-1 flex flex-wrap gap-2">
+								<div class="mx-1 mt-2.5 mb-1 flex flex-wrap gap-2">
 									{#each files as file, fileIdx}
 									{#each files as file, fileIdx}
-										<div class=" relative group">
-											{#if file.type === 'image'}
+										{#if file.type === 'image'}
+											<div class=" relative group">
 												<div class="relative">
 												<div class="relative">
 													<img
 													<img
 														src={file.url}
 														src={file.url}
@@ -534,137 +519,39 @@
 														</Tooltip>
 														</Tooltip>
 													{/if}
 													{/if}
 												</div>
 												</div>
-											{:else if ['doc', 'file'].includes(file.type)}
-												<div
-													class="h-16 w-[15rem] flex items-center space-x-3 px-2.5 dark:bg-gray-600 rounded-xl border border-gray-200 dark:border-none"
-												>
-													<div class="p-2.5 bg-red-400 text-white rounded-lg">
-														{#if file.status === 'processed'}
-															<svg
-																xmlns="http://www.w3.org/2000/svg"
-																viewBox="0 0 24 24"
-																fill="currentColor"
-																class="w-6 h-6"
-															>
-																<path
-																	fill-rule="evenodd"
-																	d="M5.625 1.5c-1.036 0-1.875.84-1.875 1.875v17.25c0 1.035.84 1.875 1.875 1.875h12.75c1.035 0 1.875-.84 1.875-1.875V12.75A3.75 3.75 0 0 0 16.5 9h-1.875a1.875 1.875 0 0 1-1.875-1.875V5.25A3.75 3.75 0 0 0 9 1.5H5.625ZM7.5 15a.75.75 0 0 1 .75-.75h7.5a.75.75 0 0 1 0 1.5h-7.5A.75.75 0 0 1 7.5 15Zm.75 2.25a.75.75 0 0 0 0 1.5H12a.75.75 0 0 0 0-1.5H8.25Z"
-																	clip-rule="evenodd"
-																/>
-																<path
-																	d="M12.971 1.816A5.23 5.23 0 0 1 14.25 5.25v1.875c0 .207.168.375.375.375H16.5a5.23 5.23 0 0 1 3.434 1.279 9.768 9.768 0 0 0-6.963-6.963Z"
-																/>
-															</svg>
-														{:else}
-															<svg
-																class=" w-6 h-6 translate-y-[0.5px]"
-																fill="currentColor"
-																viewBox="0 0 24 24"
-																xmlns="http://www.w3.org/2000/svg"
-																><style>
-																	.spinner_qM83 {
-																		animation: spinner_8HQG 1.05s infinite;
-																	}
-																	.spinner_oXPr {
-																		animation-delay: 0.1s;
-																	}
-																	.spinner_ZTLf {
-																		animation-delay: 0.2s;
-																	}
-																	@keyframes spinner_8HQG {
-																		0%,
-																		57.14% {
-																			animation-timing-function: cubic-bezier(0.33, 0.66, 0.66, 1);
-																			transform: translate(0);
-																		}
-																		28.57% {
-																			animation-timing-function: cubic-bezier(0.33, 0, 0.66, 0.33);
-																			transform: translateY(-6px);
-																		}
-																		100% {
-																			transform: translate(0);
-																		}
-																	}
-																</style><circle
-																	class="spinner_qM83"
-																	cx="4"
-																	cy="12"
-																	r="2.5"
-																/><circle
-																	class="spinner_qM83 spinner_oXPr"
-																	cx="12"
-																	cy="12"
-																	r="2.5"
-																/><circle
-																	class="spinner_qM83 spinner_ZTLf"
-																	cx="20"
-																	cy="12"
-																	r="2.5"
-																/></svg
-															>
-														{/if}
-													</div>
-
-													<div class="flex flex-col justify-center -space-y-0.5">
-														<div class=" dark:text-gray-100 text-sm font-medium line-clamp-1">
-															{file.name}
-														</div>
-
-														<div class=" text-gray-500 text-sm">{$i18n.t('Document')}</div>
-													</div>
-												</div>
-											{:else if file.type === 'collection'}
-												<div
-													class="h-16 w-[15rem] flex items-center space-x-3 px-2.5 dark:bg-gray-600 rounded-xl border border-gray-200 dark:border-none"
-												>
-													<div class="p-2.5 bg-red-400 text-white rounded-lg">
+												<div class=" absolute -top-1 -right-1">
+													<button
+														class=" bg-gray-400 text-white border border-white rounded-full group-hover:visible invisible transition"
+														type="button"
+														on:click={() => {
+															files.splice(fileIdx, 1);
+															files = files;
+														}}
+													>
 														<svg
 														<svg
 															xmlns="http://www.w3.org/2000/svg"
 															xmlns="http://www.w3.org/2000/svg"
-															viewBox="0 0 24 24"
+															viewBox="0 0 20 20"
 															fill="currentColor"
 															fill="currentColor"
-															class="w-6 h-6"
+															class="w-4 h-4"
 														>
 														>
 															<path
 															<path
-																d="M7.5 3.375c0-1.036.84-1.875 1.875-1.875h.375a3.75 3.75 0 0 1 3.75 3.75v1.875C13.5 8.161 14.34 9 15.375 9h1.875A3.75 3.75 0 0 1 21 12.75v3.375C21 17.16 20.16 18 19.125 18h-9.75A1.875 1.875 0 0 1 7.5 16.125V3.375Z"
-															/>
-															<path
-																d="M15 5.25a5.23 5.23 0 0 0-1.279-3.434 9.768 9.768 0 0 1 6.963 6.963A5.23 5.23 0 0 0 17.25 7.5h-1.875A.375.375 0 0 1 15 7.125V5.25ZM4.875 6H6v10.125A3.375 3.375 0 0 0 9.375 19.5H16.5v1.125c0 1.035-.84 1.875-1.875 1.875h-9.75A1.875 1.875 0 0 1 3 20.625V7.875C3 6.839 3.84 6 4.875 6Z"
+																d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"
 															/>
 															/>
 														</svg>
 														</svg>
-													</div>
-
-													<div class="flex flex-col justify-center -space-y-0.5">
-														<div class=" dark:text-gray-100 text-sm font-medium line-clamp-1">
-															{file?.title ?? `#${file.name}`}
-														</div>
-
-														<div class=" text-gray-500 text-sm">{$i18n.t('Collection')}</div>
-													</div>
+													</button>
 												</div>
 												</div>
-											{/if}
-
-											<div class=" absolute -top-1 -right-1">
-												<button
-													class=" bg-gray-400 text-white border border-white rounded-full group-hover:visible invisible transition"
-													type="button"
-													on:click={() => {
-														files.splice(fileIdx, 1);
-														files = files;
-													}}
-												>
-													<svg
-														xmlns="http://www.w3.org/2000/svg"
-														viewBox="0 0 20 20"
-														fill="currentColor"
-														class="w-4 h-4"
-													>
-														<path
-															d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"
-														/>
-													</svg>
-												</button>
 											</div>
 											</div>
-										</div>
+										{:else}
+											<FileItem
+												name={file.name}
+												type={file.type}
+												dismissible={true}
+												on:dismiss={() => {
+													files.splice(fileIdx, 1);
+													files = files;
+												}}
+											/>
+										{/if}
 									{/each}
 									{/each}
 								</div>
 								</div>
 							{/if}
 							{/if}

+ 35 - 0
src/lib/components/chat/MessageInput/FilesOverlay.svelte

@@ -0,0 +1,35 @@
+<script lang="ts">
+	import { showSidebar } from '$lib/stores';
+	import AddFilesPlaceholder from '$lib/components/AddFilesPlaceholder.svelte';
+
+	export let show = false;
+	let overlayElement = null;
+
+	$: if (show && overlayElement) {
+		document.body.appendChild(overlayElement);
+		document.body.style.overflow = 'hidden';
+	} else if (overlayElement) {
+		document.body.removeChild(overlayElement);
+		document.body.style.overflow = 'unset';
+	}
+</script>
+
+{#if show}
+	<div
+		bind:this={overlayElement}
+		class="fixed {$showSidebar
+			? 'left-0 md:left-[260px] md:w-[calc(100%-260px)]'
+			: 'left-0'}  fixed top-0 right-0 bottom-0 w-full h-full flex z-[9999] touch-none pointer-events-none"
+		id="dropzone"
+		role="region"
+		aria-label="Drag and Drop Container"
+	>
+		<div class="absolute w-full h-full backdrop-blur bg-gray-800/40 flex justify-center">
+			<div class="m-auto pt-64 flex flex-col justify-center">
+				<div class="max-w-md">
+					<AddFilesPlaceholder />
+				</div>
+			</div>
+		</div>
+	</div>
+{/if}

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

@@ -22,6 +22,7 @@
 	export let sendPrompt: Function;
 	export let sendPrompt: Function;
 	export let continueGeneration: Function;
 	export let continueGeneration: Function;
 	export let regenerateResponse: Function;
 	export let regenerateResponse: Function;
+	export let chatActionHandler: Function;
 
 
 	export let user = $_user;
 	export let user = $_user;
 	export let prompt;
 	export let prompt;
@@ -335,6 +336,9 @@
 										copyToClipboard={copyToClipboardWithToast}
 										copyToClipboard={copyToClipboardWithToast}
 										{continueGeneration}
 										{continueGeneration}
 										{regenerateResponse}
 										{regenerateResponse}
+										on:action={async (e) => {
+											await chatActionHandler(chatId, e.detail, message.model, message.id);
+										}}
 										on:save={async (e) => {
 										on:save={async (e) => {
 											console.log('save', e);
 											console.log('save', e);
 
 

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

@@ -1,6 +1,5 @@
 <script lang="ts">
 <script lang="ts">
 	import { getContext, onMount, tick } from 'svelte';
 	import { getContext, onMount, tick } from 'svelte';
-
 	import Modal from '$lib/components/common/Modal.svelte';
 	import Modal from '$lib/components/common/Modal.svelte';
 	const i18n = getContext('i18n');
 	const i18n = getContext('i18n');
 
 
@@ -54,9 +53,25 @@
 						<div class="text-sm font-medium dark:text-gray-300">
 						<div class="text-sm font-medium dark:text-gray-300">
 							{$i18n.t('Source')}
 							{$i18n.t('Source')}
 						</div>
 						</div>
-						<div class="text-sm dark:text-gray-400">
-							{document.source?.name ?? $i18n.t('No source available')}
-						</div>
+
+						{#if document.source?.name}
+							<div class="text-sm dark:text-gray-400">
+								<a
+									href={document?.metadata?.file_id
+										? `/api/v1/files/${document?.metadata?.file_id}/content`
+										: document.source.name.includes('http')
+										? document.source.name
+										: `#`}
+									target="_blank"
+								>
+									{document?.metadata?.name ?? document.source.name}
+								</a>
+							</div>
+						{:else}
+							<div class="text-sm dark:text-gray-400">
+								{$i18n.t('No source available')}
+							</div>
+						{/if}
 					</div>
 					</div>
 					<div class="flex flex-col w-full">
 					<div class="flex flex-col w-full">
 						<div class=" text-sm font-medium dark:text-gray-300">
 						<div class=" text-sm font-medium dark:text-gray-300">

+ 29 - 0
src/lib/components/chat/Messages/ResponseMessage.svelte

@@ -37,6 +37,7 @@
 	import CitationsModal from '$lib/components/chat/Messages/CitationsModal.svelte';
 	import CitationsModal from '$lib/components/chat/Messages/CitationsModal.svelte';
 	import Spinner from '$lib/components/common/Spinner.svelte';
 	import Spinner from '$lib/components/common/Spinner.svelte';
 	import WebSearchResults from './ResponseMessage/WebSearchResults.svelte';
 	import WebSearchResults from './ResponseMessage/WebSearchResults.svelte';
+	import Sparkles from '$lib/components/icons/Sparkles.svelte';
 
 
 	export let message;
 	export let message;
 	export let siblings;
 	export let siblings;
@@ -54,6 +55,7 @@
 	export let copyToClipboard: Function;
 	export let copyToClipboard: Function;
 	export let continueGeneration: Function;
 	export let continueGeneration: Function;
 	export let regenerateResponse: Function;
 	export let regenerateResponse: Function;
+	export let chatActionHandler: Function;
 
 
 	let model = null;
 	let model = null;
 	$: model = $models.find((m) => m.id === message.model);
 	$: model = $models.find((m) => m.id === message.model);
@@ -1020,6 +1022,33 @@
 														</svg>
 														</svg>
 													</button>
 													</button>
 												</Tooltip>
 												</Tooltip>
+
+												{#each model?.actions ?? [] as action}
+													<Tooltip content={action.name} placement="bottom">
+														<button
+															type="button"
+															class="{isLastMessage
+																? 'visible'
+																: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition regenerate-response-button"
+															on:click={() => {
+																dispatch('action', action.id);
+															}}
+														>
+															{#if action.icon_url}
+																<img
+																	src={action.icon_url}
+																	class="w-4 h-4 {action.icon_url.includes('svg')
+																		? 'dark:invert-[80%]'
+																		: ''}"
+																	style="fill: currentColor;"
+																	alt={action.name}
+																/>
+															{:else}
+																<Sparkles strokeWidth="2.1" className="size-4" />
+															{/if}
+														</button>
+													</Tooltip>
+												{/each}
 											{/if}
 											{/if}
 										{/if}
 										{/if}
 									{/if}
 									{/if}

+ 4 - 98
src/lib/components/chat/Messages/UserMessage.svelte

@@ -9,6 +9,7 @@
 
 
 	import { user as _user } from '$lib/stores';
 	import { user as _user } from '$lib/stores';
 	import { getFileContentById } from '$lib/apis/files';
 	import { getFileContentById } from '$lib/apis/files';
+	import FileItem from '$lib/components/common/FileItem.svelte';
 
 
 	const i18n = getContext('i18n');
 	const i18n = getContext('i18n');
 
 
@@ -99,106 +100,11 @@
 							{#if file.type === 'image'}
 							{#if file.type === 'image'}
 								<img src={file.url} alt="input" class=" max-h-96 rounded-lg" draggable="false" />
 								<img src={file.url} alt="input" class=" max-h-96 rounded-lg" draggable="false" />
 							{:else if file.type === 'file'}
 							{:else if file.type === 'file'}
-								<button
-									class="h-16 w-72 flex items-center space-x-3 px-2.5 dark:bg-gray-850 rounded-xl border border-gray-200 dark:border-none text-left"
-									type="button"
-									on:click={async () => {
-										if (file?.url) {
-											window.open(`${file?.url}/content`, '_blank').focus();
-										}
-									}}
-								>
-									<div class="p-2.5 bg-red-400 text-white rounded-lg">
-										<svg
-											xmlns="http://www.w3.org/2000/svg"
-											viewBox="0 0 24 24"
-											fill="currentColor"
-											class="w-6 h-6"
-										>
-											<path
-												fill-rule="evenodd"
-												d="M5.625 1.5c-1.036 0-1.875.84-1.875 1.875v17.25c0 1.035.84 1.875 1.875 1.875h12.75c1.035 0 1.875-.84 1.875-1.875V12.75A3.75 3.75 0 0 0 16.5 9h-1.875a1.875 1.875 0 0 1-1.875-1.875V5.25A3.75 3.75 0 0 0 9 1.5H5.625ZM7.5 15a.75.75 0 0 1 .75-.75h7.5a.75.75 0 0 1 0 1.5h-7.5A.75.75 0 0 1 7.5 15Zm.75 2.25a.75.75 0 0 0 0 1.5H12a.75.75 0 0 0 0-1.5H8.25Z"
-												clip-rule="evenodd"
-											/>
-											<path
-												d="M12.971 1.816A5.23 5.23 0 0 1 14.25 5.25v1.875c0 .207.168.375.375.375H16.5a5.23 5.23 0 0 1 3.434 1.279 9.768 9.768 0 0 0-6.963-6.963Z"
-											/>
-										</svg>
-									</div>
-
-									<div class="flex flex-col justify-center -space-y-0.5">
-										<div class=" dark:text-gray-100 text-sm font-medium line-clamp-1">
-											{file.name}
-										</div>
-
-										<div class=" text-gray-500 text-sm">{$i18n.t('File')}</div>
-									</div>
-								</button>
+								<FileItem url={`${file?.url}/content`} name={file.name} type={$i18n.t('File')} />
 							{:else if file.type === 'doc'}
 							{:else if file.type === 'doc'}
-								<button
-									class="h-16 w-72 flex items-center space-x-3 px-2.5 dark:bg-gray-850 rounded-xl border border-gray-200 dark:border-none text-left"
-									type="button"
-									on:click={() => {
-										if (file?.url) {
-											window.open(file?.url, '_blank').focus();
-										}
-									}}
-								>
-									<div class="p-2.5 bg-red-400 text-white rounded-lg">
-										<svg
-											xmlns="http://www.w3.org/2000/svg"
-											viewBox="0 0 24 24"
-											fill="currentColor"
-											class="w-6 h-6"
-										>
-											<path
-												fill-rule="evenodd"
-												d="M5.625 1.5c-1.036 0-1.875.84-1.875 1.875v17.25c0 1.035.84 1.875 1.875 1.875h12.75c1.035 0 1.875-.84 1.875-1.875V12.75A3.75 3.75 0 0 0 16.5 9h-1.875a1.875 1.875 0 0 1-1.875-1.875V5.25A3.75 3.75 0 0 0 9 1.5H5.625ZM7.5 15a.75.75 0 0 1 .75-.75h7.5a.75.75 0 0 1 0 1.5h-7.5A.75.75 0 0 1 7.5 15Zm.75 2.25a.75.75 0 0 0 0 1.5H12a.75.75 0 0 0 0-1.5H8.25Z"
-												clip-rule="evenodd"
-											/>
-											<path
-												d="M12.971 1.816A5.23 5.23 0 0 1 14.25 5.25v1.875c0 .207.168.375.375.375H16.5a5.23 5.23 0 0 1 3.434 1.279 9.768 9.768 0 0 0-6.963-6.963Z"
-											/>
-										</svg>
-									</div>
-
-									<div class="flex flex-col justify-center -space-y-0.5">
-										<div class=" dark:text-gray-100 text-sm font-medium line-clamp-1">
-											{file.name}
-										</div>
-
-										<div class=" text-gray-500 text-sm">{$i18n.t('Document')}</div>
-									</div>
-								</button>
+								<FileItem url={`${file?.url}`} name={file.name} type={$i18n.t('Document')} />
 							{:else if file.type === 'collection'}
 							{:else if file.type === 'collection'}
-								<button
-									class="h-16 w-72 flex items-center space-x-3 px-2.5 dark:bg-gray-600 rounded-xl border border-gray-200 dark:border-none text-left"
-									type="button"
-								>
-									<div class="p-2.5 bg-red-400 text-white rounded-lg">
-										<svg
-											xmlns="http://www.w3.org/2000/svg"
-											viewBox="0 0 24 24"
-											fill="currentColor"
-											class="w-6 h-6"
-										>
-											<path
-												d="M7.5 3.375c0-1.036.84-1.875 1.875-1.875h.375a3.75 3.75 0 0 1 3.75 3.75v1.875C13.5 8.161 14.34 9 15.375 9h1.875A3.75 3.75 0 0 1 21 12.75v3.375C21 17.16 20.16 18 19.125 18h-9.75A1.875 1.875 0 0 1 7.5 16.125V3.375Z"
-											/>
-											<path
-												d="M15 5.25a5.23 5.23 0 0 0-1.279-3.434 9.768 9.768 0 0 1 6.963 6.963A5.23 5.23 0 0 0 17.25 7.5h-1.875A.375.375 0 0 1 15 7.125V5.25ZM4.875 6H6v10.125A3.375 3.375 0 0 0 9.375 19.5H16.5v1.125c0 1.035-.84 1.875-1.875 1.875h-9.75A1.875 1.875 0 0 1 3 20.625V7.875C3 6.839 3.84 6 4.875 6Z"
-											/>
-										</svg>
-									</div>
-
-									<div class="flex flex-col justify-center -space-y-0.5">
-										<div class=" dark:text-gray-100 text-sm font-medium line-clamp-1">
-											{file?.title ?? `#${file.name}`}
-										</div>
-
-										<div class=" text-gray-500 text-sm">{$i18n.t('Collection')}</div>
-									</div>
-								</button>
+								<FileItem name={file?.title ?? `#${file.name}`} type={$i18n.t('Collection')} />
 							{/if}
 							{/if}
 						</div>
 						</div>
 					{/each}
 					{/each}

+ 27 - 2
src/lib/components/chat/Settings/Advanced/AdvancedParams.svelte

@@ -1,4 +1,5 @@
 <script lang="ts">
 <script lang="ts">
+	import Switch from '$lib/components/common/Switch.svelte';
 	import { getContext, createEventDispatcher } from 'svelte';
 	import { getContext, createEventDispatcher } from 'svelte';
 
 
 	const dispatch = createEventDispatcher();
 	const dispatch = createEventDispatcher();
@@ -720,10 +721,22 @@
 					{#if (params?.use_mmap ?? null) === null}
 					{#if (params?.use_mmap ?? null) === null}
 						<span class="ml-2 self-center">{$i18n.t('Default')}</span>
 						<span class="ml-2 self-center">{$i18n.t('Default')}</span>
 					{:else}
 					{:else}
-						<span class="ml-2 self-center">{$i18n.t('On')}</span>
+						<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
 					{/if}
 					{/if}
 				</button>
 				</button>
 			</div>
 			</div>
+
+			{#if (params?.use_mmap ?? null) !== null}
+				<div class="flex justify-between items-center mt-1">
+					<div class="text-xs text-gray-500">
+						{params.use_mmap ? 'Enabled' : 'Disabled'}
+					</div>
+
+					<div class=" pr-2">
+						<Switch bind:state={params.use_mmap} />
+					</div>
+				</div>
+			{/if}
 		</div>
 		</div>
 
 
 		<div class=" py-0.5 w-full justify-between">
 		<div class=" py-0.5 w-full justify-between">
@@ -740,10 +753,22 @@
 					{#if (params?.use_mlock ?? null) === null}
 					{#if (params?.use_mlock ?? null) === null}
 						<span class="ml-2 self-center">{$i18n.t('Default')}</span>
 						<span class="ml-2 self-center">{$i18n.t('Default')}</span>
 					{:else}
 					{:else}
-						<span class="ml-2 self-center">{$i18n.t('On')}</span>
+						<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
 					{/if}
 					{/if}
 				</button>
 				</button>
 			</div>
 			</div>
+
+			{#if (params?.use_mlock ?? null) !== null}
+				<div class="flex justify-between items-center mt-1">
+					<div class="text-xs text-gray-500">
+						{params.use_mlock ? 'Enabled' : 'Disabled'}
+					</div>
+
+					<div class=" pr-2">
+						<Switch bind:state={params.use_mlock} />
+					</div>
+				</div>
+			{/if}
 		</div>
 		</div>
 
 
 		<div class=" py-0.5 w-full justify-between">
 		<div class=" py-0.5 w-full justify-between">

+ 2 - 85
src/lib/components/chat/Settings/Valves.svelte

@@ -19,6 +19,7 @@
 	import Tooltip from '$lib/components/common/Tooltip.svelte';
 	import Tooltip from '$lib/components/common/Tooltip.svelte';
 	import Spinner from '$lib/components/common/Spinner.svelte';
 	import Spinner from '$lib/components/common/Spinner.svelte';
 	import Switch from '$lib/components/common/Switch.svelte';
 	import Switch from '$lib/components/common/Switch.svelte';
+	import Valves from '$lib/components/common/Valves.svelte';
 
 
 	const dispatch = createEventDispatcher();
 	const dispatch = createEventDispatcher();
 
 
@@ -170,91 +171,7 @@
 
 
 			<div>
 			<div>
 				{#if !loading}
 				{#if !loading}
-					{#if valvesSpec}
-						{#each Object.keys(valvesSpec.properties) as property, idx}
-							<div class=" py-0.5 w-full justify-between">
-								<div class="flex w-full justify-between">
-									<div class=" self-center text-xs font-medium">
-										{valvesSpec.properties[property].title}
-
-										{#if (valvesSpec?.required ?? []).includes(property)}
-											<span class=" text-gray-500">*required</span>
-										{/if}
-									</div>
-
-									<button
-										class="p-1 px-3 text-xs flex rounded transition"
-										type="button"
-										on:click={() => {
-											valves[property] =
-												(valves[property] ?? null) === null
-													? valvesSpec.properties[property]?.default ?? ''
-													: null;
-										}}
-									>
-										{#if (valves[property] ?? null) === null}
-											<span class="ml-2 self-center">
-												{#if (valvesSpec?.required ?? []).includes(property)}
-													{$i18n.t('None')}
-												{:else}
-													{$i18n.t('Default')}
-												{/if}
-											</span>
-										{:else}
-											<span class="ml-2 self-center"> {$i18n.t('Custom')} </span>
-										{/if}
-									</button>
-								</div>
-
-								{#if (valves[property] ?? null) !== null}
-									<!-- {valves[property]} -->
-									<div class="flex mt-0.5 mb-1.5 space-x-2">
-										<div class=" flex-1">
-											{#if valvesSpec.properties[property]?.enum ?? null}
-												<select
-													class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
-													bind:value={valves[property]}
-												>
-													{#each valvesSpec.properties[property].enum as option}
-														<option value={option} selected={option === valves[property]}>
-															{option}
-														</option>
-													{/each}
-												</select>
-											{:else if (valvesSpec.properties[property]?.type ?? null) === 'boolean'}
-												<div class="flex justify-between items-center">
-													<div class="text-xs text-gray-500">
-														{valves[property] ? 'Enabled' : 'Disabled'}
-													</div>
-
-													<div class=" pr-2">
-														<Switch bind:state={valves[property]} />
-													</div>
-												</div>
-											{:else}
-												<input
-													class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
-													type="text"
-													placeholder={valvesSpec.properties[property].title}
-													bind:value={valves[property]}
-													autocomplete="off"
-													required
-												/>
-											{/if}
-										</div>
-									</div>
-								{/if}
-
-								{#if (valvesSpec.properties[property]?.description ?? null) !== null}
-									<div class="text-xs text-gray-500">
-										{valvesSpec.properties[property].description}
-									</div>
-								{/if}
-							</div>
-						{/each}
-					{:else}
-						<div>No valves</div>
-					{/if}
+					<Valves {valvesSpec} bind:valves />
 				{:else}
 				{:else}
 					<Spinner className="size-5" />
 					<Spinner className="size-5" />
 				{/if}
 				{/if}

+ 16 - 1
src/lib/components/common/ConfirmDialog.svelte

@@ -13,9 +13,14 @@
 	export let cancelLabel = $i18n.t('Cancel');
 	export let cancelLabel = $i18n.t('Cancel');
 	export let confirmLabel = $i18n.t('Confirm');
 	export let confirmLabel = $i18n.t('Confirm');
 
 
+	export let input = false;
+	export let inputPlaceholder = '';
+
 	export let show = false;
 	export let show = false;
+
 	let modalElement = null;
 	let modalElement = null;
 	let mounted = false;
 	let mounted = false;
+	let inputValue = '';
 
 
 	const handleKeyDown = (event: KeyboardEvent) => {
 	const handleKeyDown = (event: KeyboardEvent) => {
 		if (event.key === 'Escape') {
 		if (event.key === 'Escape') {
@@ -73,6 +78,16 @@
 						{:else}
 						{:else}
 							{$i18n.t('This action cannot be undone. Do you wish to continue?')}
 							{$i18n.t('This action cannot be undone. Do you wish to continue?')}
 						{/if}
 						{/if}
+
+						{#if input}
+							<textarea
+								bind:value={inputValue}
+								placeholder={inputPlaceholder ? inputPlaceholder : $i18n.t('Enter your message')}
+								class="w-full mt-2 rounded-lg px-4 py-2 text-sm dark:text-gray-300 dark:bg-gray-900 outline-none resize-none"
+								rows="3"
+								required
+							/>
+						{/if}
 					</div>
 					</div>
 				</slot>
 				</slot>
 
 
@@ -91,7 +106,7 @@
 						class="bg-gray-900 hover:bg-gray-850 text-gray-100 dark:bg-gray-100 dark:hover:bg-white dark:text-gray-800 font-medium w-full py-2.5 rounded-lg transition"
 						class="bg-gray-900 hover:bg-gray-850 text-gray-100 dark:bg-gray-100 dark:hover:bg-white dark:text-gray-800 font-medium w-full py-2.5 rounded-lg transition"
 						on:click={() => {
 						on:click={() => {
 							show = false;
 							show = false;
-							dispatch('confirm');
+							dispatch('confirm', inputValue);
 						}}
 						}}
 						type="button"
 						type="button"
 					>
 					>

+ 135 - 0
src/lib/components/common/FileItem.svelte

@@ -0,0 +1,135 @@
+<script lang="ts">
+	import { createEventDispatcher, getContext } from 'svelte';
+
+	const i18n = getContext('i18n');
+	const dispatch = createEventDispatcher();
+
+	export let className = 'w-72';
+	export let url: string | null = null;
+
+	export let clickHandler: Function | null = null;
+
+	export let dismissible = false;
+	export let status = 'processed';
+
+	export let name: string;
+	export let type: string;
+</script>
+
+<div class="relative group">
+	<button
+		class="h-14 {className} flex items-center space-x-3 bg-white dark:bg-gray-800 rounded-xl border border-gray-100 dark:border-gray-800 text-left"
+		type="button"
+		on:click={async () => {
+			if (clickHandler === null) {
+				if (url) {
+					if (type === 'file') {
+						window.open(`${url}/content`, '_blank').focus();
+					} else {
+						window.open(`${url}`, '_blank').focus();
+					}
+				}
+			} else {
+				clickHandler();
+			}
+		}}
+	>
+		<div class="p-4 py-[1.1rem] bg-red-400 text-white rounded-l-xl">
+			{#if status === 'processed'}
+				<svg
+					xmlns="http://www.w3.org/2000/svg"
+					viewBox="0 0 24 24"
+					fill="currentColor"
+					class=" size-5"
+				>
+					<path
+						fill-rule="evenodd"
+						d="M5.625 1.5c-1.036 0-1.875.84-1.875 1.875v17.25c0 1.035.84 1.875 1.875 1.875h12.75c1.035 0 1.875-.84 1.875-1.875V12.75A3.75 3.75 0 0 0 16.5 9h-1.875a1.875 1.875 0 0 1-1.875-1.875V5.25A3.75 3.75 0 0 0 9 1.5H5.625ZM7.5 15a.75.75 0 0 1 .75-.75h7.5a.75.75 0 0 1 0 1.5h-7.5A.75.75 0 0 1 7.5 15Zm.75 2.25a.75.75 0 0 0 0 1.5H12a.75.75 0 0 0 0-1.5H8.25Z"
+						clip-rule="evenodd"
+					/>
+					<path
+						d="M12.971 1.816A5.23 5.23 0 0 1 14.25 5.25v1.875c0 .207.168.375.375.375H16.5a5.23 5.23 0 0 1 3.434 1.279 9.768 9.768 0 0 0-6.963-6.963Z"
+					/>
+				</svg>
+			{:else}
+				<svg
+					class=" size-5 translate-y-[0.5px]"
+					fill="currentColor"
+					viewBox="0 0 24 24"
+					xmlns="http://www.w3.org/2000/svg"
+					><style>
+						.spinner_qM83 {
+							animation: spinner_8HQG 1.05s infinite;
+						}
+						.spinner_oXPr {
+							animation-delay: 0.1s;
+						}
+						.spinner_ZTLf {
+							animation-delay: 0.2s;
+						}
+						@keyframes spinner_8HQG {
+							0%,
+							57.14% {
+								animation-timing-function: cubic-bezier(0.33, 0.66, 0.66, 1);
+								transform: translate(0);
+							}
+							28.57% {
+								animation-timing-function: cubic-bezier(0.33, 0, 0.66, 0.33);
+								transform: translateY(-6px);
+							}
+							100% {
+								transform: translate(0);
+							}
+						}
+					</style><circle class="spinner_qM83" cx="4" cy="12" r="2.5" /><circle
+						class="spinner_qM83 spinner_oXPr"
+						cx="12"
+						cy="12"
+						r="2.5"
+					/><circle class="spinner_qM83 spinner_ZTLf" cx="20" cy="12" r="2.5" /></svg
+				>
+			{/if}
+		</div>
+
+		<div class="flex flex-col justify-center -space-y-0.5 pl-1.5 pr-4 w-full">
+			<div class=" dark:text-gray-100 text-sm font-medium line-clamp-1">
+				{name}
+			</div>
+
+			<div class=" text-gray-500 text-xs">
+				{#if type === 'file'}
+					{$i18n.t('File')}
+				{:else if type === 'doc'}
+					{$i18n.t('Document')}
+				{:else if type === 'collection'}
+					{$i18n.t('Collection')}
+				{:else}
+					<span class=" capitalize">{type}</span>
+				{/if}
+			</div>
+		</div>
+	</button>
+
+	{#if dismissible}
+		<div class=" absolute -top-1 -right-1">
+			<button
+				class=" bg-gray-400 text-white border border-white rounded-full group-hover:visible invisible transition"
+				type="button"
+				on:click={() => {
+					dispatch('dismiss');
+				}}
+			>
+				<svg
+					xmlns="http://www.w3.org/2000/svg"
+					viewBox="0 0 20 20"
+					fill="currentColor"
+					class="w-4 h-4"
+				>
+					<path
+						d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"
+					/>
+				</svg>
+			</button>
+		</div>
+	{/if}
+</div>

+ 2 - 1
src/lib/components/common/SensitiveInput.svelte

@@ -1,6 +1,7 @@
 <script lang="ts">
 <script lang="ts">
 	export let value: string = '';
 	export let value: string = '';
 	export let placeholder = '';
 	export let placeholder = '';
+	export let required = true;
 	export let readOnly = false;
 	export let readOnly = false;
 	export let outerClassName = 'flex flex-1';
 	export let outerClassName = 'flex flex-1';
 	export let inputClassName =
 	export let inputClassName =
@@ -15,7 +16,7 @@
 		class={inputClassName}
 		class={inputClassName}
 		{placeholder}
 		{placeholder}
 		bind:value
 		bind:value
-		required={!readOnly}
+		required={required && !readOnly}
 		disabled={readOnly}
 		disabled={readOnly}
 		autocomplete="off"
 		autocomplete="off"
 		{...{ type: show ? 'text' : 'password' }}
 		{...{ type: show ? 'text' : 'password' }}

+ 95 - 0
src/lib/components/common/Valves.svelte

@@ -0,0 +1,95 @@
+<script>
+	import { onMount, getContext } from 'svelte';
+	const i18n = getContext('i18n');
+
+	import Switch from './Switch.svelte';
+
+	export let valvesSpec = null;
+	export let valves = {};
+</script>
+
+{#if valvesSpec}
+	{#each Object.keys(valvesSpec.properties) as property, idx}
+		<div class=" py-0.5 w-full justify-between">
+			<div class="flex w-full justify-between">
+				<div class=" self-center text-xs font-medium">
+					{valvesSpec.properties[property].title}
+
+					{#if (valvesSpec?.required ?? []).includes(property)}
+						<span class=" text-gray-500">*required</span>
+					{/if}
+				</div>
+
+				<button
+					class="p-1 px-3 text-xs flex rounded transition"
+					type="button"
+					on:click={() => {
+						valves[property] =
+							(valves[property] ?? null) === null
+								? valvesSpec.properties[property]?.default ?? ''
+								: null;
+					}}
+				>
+					{#if (valves[property] ?? null) === null}
+						<span class="ml-2 self-center">
+							{#if (valvesSpec?.required ?? []).includes(property)}
+								{$i18n.t('None')}
+							{:else}
+								{$i18n.t('Default')}
+							{/if}
+						</span>
+					{:else}
+						<span class="ml-2 self-center"> {$i18n.t('Custom')} </span>
+					{/if}
+				</button>
+			</div>
+
+			{#if (valves[property] ?? null) !== null}
+				<!-- {valves[property]} -->
+				<div class="flex mt-0.5 mb-1.5 space-x-2">
+					<div class=" flex-1">
+						{#if valvesSpec.properties[property]?.enum ?? null}
+							<select
+								class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none border border-gray-100 dark:border-gray-800"
+								bind:value={valves[property]}
+							>
+								{#each valvesSpec.properties[property].enum as option}
+									<option value={option} selected={option === valves[property]}>
+										{option}
+									</option>
+								{/each}
+							</select>
+						{:else if (valvesSpec.properties[property]?.type ?? null) === 'boolean'}
+							<div class="flex justify-between items-center">
+								<div class="text-xs text-gray-500">
+									{valves[property] ? 'Enabled' : 'Disabled'}
+								</div>
+
+								<div class=" pr-2">
+									<Switch bind:state={valves[property]} />
+								</div>
+							</div>
+						{:else}
+							<input
+								class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none border border-gray-100 dark:border-gray-800"
+								type="text"
+								placeholder={valvesSpec.properties[property].title}
+								bind:value={valves[property]}
+								autocomplete="off"
+								required
+							/>
+						{/if}
+					</div>
+				</div>
+			{/if}
+
+			{#if (valvesSpec.properties[property]?.description ?? null) !== null}
+				<div class="text-xs text-gray-500">
+					{valvesSpec.properties[property].description}
+				</div>
+			{/if}
+		</div>
+	{/each}
+{:else}
+	<div class="text-sm">No valves</div>
+{/if}

+ 19 - 0
src/lib/components/icons/Sparkles.svelte

@@ -0,0 +1,19 @@
+<script lang="ts">
+	export let className = 'w-4 h-4';
+	export let strokeWidth = '1.5';
+</script>
+
+<svg
+	xmlns="http://www.w3.org/2000/svg"
+	fill="none"
+	viewBox="0 0 24 24"
+	stroke-width={strokeWidth}
+	stroke="currentColor"
+	class={className}
+>
+	<path
+		stroke-linecap="round"
+		stroke-linejoin="round"
+		d="M9.813 15.904 9 18.75l-.813-2.846a4.5 4.5 0 0 0-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 0 0 3.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 0 0 3.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 0 0-3.09 3.09ZM18.259 8.715 18 9.75l-.259-1.035a3.375 3.375 0 0 0-2.455-2.456L14.25 6l1.036-.259a3.375 3.375 0 0 0 2.455-2.456L18 2.25l.259 1.035a3.375 3.375 0 0 0 2.456 2.456L21.75 6l-1.035.259a3.375 3.375 0 0 0-2.456 2.456ZM16.894 20.567 16.5 21.75l-.394-1.183a2.25 2.25 0 0 0-1.423-1.423L13.5 18.75l1.183-.394a2.25 2.25 0 0 0 1.423-1.423l.394-1.183.394 1.183a2.25 2.25 0 0 0 1.423 1.423l1.183.394-1.183.394a2.25 2.25 0 0 0-1.423 1.423Z"
+	/>
+</svg>

+ 26 - 3
src/lib/components/workspace/Documents.svelte

@@ -8,14 +8,16 @@
 	import { createNewDoc, deleteDocByName, getDocs } from '$lib/apis/documents';
 	import { createNewDoc, deleteDocByName, getDocs } from '$lib/apis/documents';
 
 
 	import { SUPPORTED_FILE_TYPE, SUPPORTED_FILE_EXTENSIONS } from '$lib/constants';
 	import { SUPPORTED_FILE_TYPE, SUPPORTED_FILE_EXTENSIONS } from '$lib/constants';
-	import { uploadDocToVectorDB } from '$lib/apis/rag';
-	import { transformFileName } from '$lib/utils';
+	import { processDocToVectorDB, uploadDocToVectorDB } from '$lib/apis/rag';
+	import { blobToFile, transformFileName } from '$lib/utils';
 
 
 	import Checkbox from '$lib/components/common/Checkbox.svelte';
 	import Checkbox from '$lib/components/common/Checkbox.svelte';
 
 
 	import EditDocModal from '$lib/components/documents/EditDocModal.svelte';
 	import EditDocModal from '$lib/components/documents/EditDocModal.svelte';
 	import AddFilesPlaceholder from '$lib/components/AddFilesPlaceholder.svelte';
 	import AddFilesPlaceholder from '$lib/components/AddFilesPlaceholder.svelte';
 	import AddDocModal from '$lib/components/documents/AddDocModal.svelte';
 	import AddDocModal from '$lib/components/documents/AddDocModal.svelte';
+	import { transcribeAudio } from '$lib/apis/audio';
+	import { uploadFile } from '$lib/apis/files';
 
 
 	const i18n = getContext('i18n');
 	const i18n = getContext('i18n');
 
 
@@ -50,7 +52,28 @@
 	};
 	};
 
 
 	const uploadDoc = async (file) => {
 	const uploadDoc = async (file) => {
-		const res = await uploadDocToVectorDB(localStorage.token, '', file).catch((error) => {
+		console.log(file);
+		// Check if the file is an audio file and transcribe/convert it to text file
+		if (['audio/mpeg', 'audio/wav'].includes(file['type'])) {
+			const transcribeRes = await transcribeAudio(localStorage.token, file).catch((error) => {
+				toast.error(error);
+				return null;
+			});
+
+			if (transcribeRes) {
+				console.log(transcribeRes);
+				const blob = new Blob([transcribeRes.text], { type: 'text/plain' });
+				file = blobToFile(blob, `${file.name}.txt`);
+			}
+		}
+
+		// Upload the file to the server
+		const uploadedFile = await uploadFile(localStorage.token, file).catch((error) => {
+			toast.error(error);
+			return null;
+		});
+
+		const res = await processDocToVectorDB(localStorage.token, uploadedFile.id).catch((error) => {
 			toast.error(error);
 			toast.error(error);
 			return null;
 			return null;
 		});
 		});

+ 16 - 11
src/lib/components/workspace/Functions.svelte

@@ -122,12 +122,17 @@
 
 
 		if (res) {
 		if (res) {
 			if (func.is_global) {
 			if (func.is_global) {
-				toast.success($i18n.t('Filter is now globally enabled'));
+				func.type === 'filter'
+					? toast.success($i18n.t('Filter is now globally enabled'))
+					: toast.success($i18n.t('Function is now globally enabled'));
 			} else {
 			} else {
-				toast.success($i18n.t('Filter is now globally disabled'));
+				func.type === 'filter'
+					? toast.success($i18n.t('Filter is now globally disabled'))
+					: toast.success($i18n.t('Function is now globally disabled'));
 			}
 			}
 
 
 			functions.set(await getFunctions(localStorage.token));
 			functions.set(await getFunctions(localStorage.token));
+			models.set(await getModels(localStorage.token));
 		}
 		}
 	};
 	};
 </script>
 </script>
@@ -230,7 +235,7 @@
 			</a>
 			</a>
 			<div class="flex flex-row gap-0.5 self-center">
 			<div class="flex flex-row gap-0.5 self-center">
 				{#if func?.meta?.manifest?.funding_url ?? false}
 				{#if func?.meta?.manifest?.funding_url ?? false}
-					<Tooltip content="Support">
+					<Tooltip content={$i18n.t('Support')}>
 						<button
 						<button
 							class="self-center w-fit text-sm px-2 py-2 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
 							class="self-center w-fit text-sm px-2 py-2 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
 							type="button"
 							type="button"
@@ -244,7 +249,7 @@
 					</Tooltip>
 					</Tooltip>
 				{/if}
 				{/if}
 
 
-				<Tooltip content="Valves">
+				<Tooltip content={$i18n.t('Valves')}>
 					<button
 					<button
 						class="self-center w-fit text-sm px-2 py-2 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
 						class="self-center w-fit text-sm px-2 py-2 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
 						type="button"
 						type="button"
@@ -294,7 +299,7 @@
 						showDeleteConfirm = true;
 						showDeleteConfirm = true;
 					}}
 					}}
 					toggleGlobalHandler={() => {
 					toggleGlobalHandler={() => {
-						if (func.type === 'filter') {
+						if (['filter', 'action'].includes(func.type)) {
 							toggleGlobalHandler(func);
 							toggleGlobalHandler(func);
 						}
 						}
 					}}
 					}}
@@ -309,7 +314,7 @@
 				</FunctionMenu>
 				</FunctionMenu>
 
 
 				<div class=" self-center mx-1">
 				<div class=" self-center mx-1">
-					<Tooltip content={func.is_active ? 'Enabled' : 'Disabled'}>
+					<Tooltip content={func.is_active ? $i18n.t('Enabled') : $i18n.t('Disabled')}>
 						<Switch
 						<Switch
 							bind:state={func.is_active}
 							bind:state={func.is_active}
 							on:change={async (e) => {
 							on:change={async (e) => {
@@ -489,15 +494,15 @@
 			<div>Please carefully review the following warnings:</div>
 			<div>Please carefully review the following warnings:</div>
 
 
 			<ul class=" mt-1 list-disc pl-4 text-xs">
 			<ul class=" mt-1 list-disc pl-4 text-xs">
-				<li>Functions allow arbitrary code execution.</li>
-				<li>Do not install functions from sources you do not fully trust.</li>
+				<li>{$i18n.t('Functions allow arbitrary code execution.')}</li>
+				<li>{$i18n.t('Do not install functions from sources you do not fully trust.')}</li>
 			</ul>
 			</ul>
 		</div>
 		</div>
 
 
 		<div class="my-3">
 		<div class="my-3">
-			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.
+			{$i18n.t(
+				'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.'
+			)}
 		</div>
 		</div>
 	</div>
 	</div>
 </ConfirmDialog>
 </ConfirmDialog>

+ 14 - 12
src/lib/components/workspace/Functions/FunctionEditor.svelte

@@ -309,7 +309,7 @@ class Pipe:
 						<input
 						<input
 							class="w-full px-3 py-2 text-sm font-medium bg-gray-50 dark:bg-gray-850 dark:text-gray-200 rounded-lg outline-none"
 							class="w-full px-3 py-2 text-sm font-medium bg-gray-50 dark:bg-gray-850 dark:text-gray-200 rounded-lg outline-none"
 							type="text"
 							type="text"
-							placeholder="Function Name (e.g. My Filter)"
+							placeholder={$i18n.t('Function Name (e.g. My Filter)')}
 							bind:value={name}
 							bind:value={name}
 							required
 							required
 						/>
 						/>
@@ -317,7 +317,7 @@ class Pipe:
 						<input
 						<input
 							class="w-full px-3 py-2 text-sm font-medium disabled:text-gray-300 dark:disabled:text-gray-700 bg-gray-50 dark:bg-gray-850 dark:text-gray-200 rounded-lg outline-none"
 							class="w-full px-3 py-2 text-sm font-medium disabled:text-gray-300 dark:disabled:text-gray-700 bg-gray-50 dark:bg-gray-850 dark:text-gray-200 rounded-lg outline-none"
 							type="text"
 							type="text"
-							placeholder="Function ID (e.g. my_filter)"
+							placeholder={$i18n.t('Function ID (e.g. my_filter)')}
 							bind:value={id}
 							bind:value={id}
 							required
 							required
 							disabled={edit}
 							disabled={edit}
@@ -326,7 +326,9 @@ class Pipe:
 					<input
 					<input
 						class="w-full px-3 py-2 text-sm font-medium bg-gray-50 dark:bg-gray-850 dark:text-gray-200 rounded-lg outline-none"
 						class="w-full px-3 py-2 text-sm font-medium bg-gray-50 dark:bg-gray-850 dark:text-gray-200 rounded-lg outline-none"
 						type="text"
 						type="text"
-						placeholder="Function Description (e.g. A filter to remove profanity from text)"
+						placeholder={$i18n.t(
+							'Function Description (e.g. A filter to remove profanity from text)'
+						)}
 						bind:value={meta.description}
 						bind:value={meta.description}
 						required
 						required
 					/>
 					/>
@@ -348,10 +350,10 @@ class Pipe:
 				<div class="pb-3 flex justify-between">
 				<div class="pb-3 flex justify-between">
 					<div class="flex-1 pr-3">
 					<div class="flex-1 pr-3">
 						<div class="text-xs text-gray-500 line-clamp-2">
 						<div class="text-xs text-gray-500 line-clamp-2">
-							<span class=" font-semibold dark:text-gray-200">Warning:</span> Functions allow
-							arbitrary code execution <br />—
+							<span class=" font-semibold dark:text-gray-200">{$i18n.t('Warning:')}</span>
+							{$i18n.t('Functions allow arbitrary code execution')} <br />—
 							<span class=" font-medium dark:text-gray-400"
 							<span class=" font-medium dark:text-gray-400"
-								>don't install random functions from sources you don't trust.</span
+								>{$i18n.t(`don't install random functions from sources you don't trust.`)}</span
 							>
 							>
 						</div>
 						</div>
 					</div>
 					</div>
@@ -376,18 +378,18 @@ class Pipe:
 >
 >
 	<div class="text-sm text-gray-500">
 	<div class="text-sm text-gray-500">
 		<div class=" bg-yellow-500/20 text-yellow-700 dark:text-yellow-200 rounded-lg px-4 py-3">
 		<div class=" bg-yellow-500/20 text-yellow-700 dark:text-yellow-200 rounded-lg px-4 py-3">
-			<div>Please carefully review the following warnings:</div>
+			<div>{$i18n.t('Please carefully review the following warnings:')}</div>
 
 
 			<ul class=" mt-1 list-disc pl-4 text-xs">
 			<ul class=" mt-1 list-disc pl-4 text-xs">
-				<li>Functions allow arbitrary code execution.</li>
-				<li>Do not install functions from sources you do not fully trust.</li>
+				<li>{$i18n.t('Functions allow arbitrary code execution.')}</li>
+				<li>{$i18n.t('Do not install functions from sources you do not fully trust.')}</li>
 			</ul>
 			</ul>
 		</div>
 		</div>
 
 
 		<div class="my-3">
 		<div class="my-3">
-			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.
+			{$i18n.t(
+				'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.'
+			)}
 		</div>
 		</div>
 	</div>
 	</div>
 </ConfirmDialog>
 </ConfirmDialog>

+ 1 - 1
src/lib/components/workspace/Functions/FunctionMenu.svelte

@@ -48,7 +48,7 @@
 			align="start"
 			align="start"
 			transition={flyAndScale}
 			transition={flyAndScale}
 		>
 		>
-			{#if func.type === 'filter'}
+			{#if ['filter', 'action'].includes(func.type)}
 				<div
 				<div
 					class="flex gap-2 justify-between items-center px-3 py-2 text-sm font-medium cursor-pointerrounded-md"
 					class="flex gap-2 justify-between items-center px-3 py-2 text-sm font-medium cursor-pointerrounded-md"
 				>
 				>

+ 9 - 7
src/lib/components/workspace/Tools.svelte

@@ -221,7 +221,7 @@
 					</Tooltip>
 					</Tooltip>
 				{/if}
 				{/if}
 
 
-				<Tooltip content="Valves">
+				<Tooltip content={$i18n.t('Valves')}>
 					<button
 					<button
 						class="self-center w-fit text-sm px-2 py-2 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
 						class="self-center w-fit text-sm px-2 py-2 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
 						type="button"
 						type="button"
@@ -436,18 +436,20 @@
 >
 >
 	<div class="text-sm text-gray-500">
 	<div class="text-sm text-gray-500">
 		<div class=" bg-yellow-500/20 text-yellow-700 dark:text-yellow-200 rounded-lg px-4 py-3">
 		<div class=" bg-yellow-500/20 text-yellow-700 dark:text-yellow-200 rounded-lg px-4 py-3">
-			<div>Please carefully review the following warnings:</div>
+			<div>{$i18n.t('Please carefully review the following warnings:')}</div>
 
 
 			<ul class=" mt-1 list-disc pl-4 text-xs">
 			<ul class=" mt-1 list-disc pl-4 text-xs">
-				<li>Tools have a function calling system that allows arbitrary code execution.</li>
-				<li>Do not install tools from sources you do not fully trust.</li>
+				<li>
+					{$i18n.t('Tools have a function calling system that allows arbitrary code execution')}.
+				</li>
+				<li>{$i18n.t('Do not install tools from sources you do not fully trust.')}</li>
 			</ul>
 			</ul>
 		</div>
 		</div>
 
 
 		<div class="my-3">
 		<div class="my-3">
-			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.
+			{$i18n.t(
+				'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.'
+			)}
 		</div>
 		</div>
 	</div>
 	</div>
 </ConfirmDialog>
 </ConfirmDialog>

+ 16 - 12
src/lib/components/workspace/Tools/ToolkitEditor.svelte

@@ -197,7 +197,7 @@ class Tools:
 						<input
 						<input
 							class="w-full px-3 py-2 text-sm font-medium bg-gray-50 dark:bg-gray-850 dark:text-gray-200 rounded-lg outline-none"
 							class="w-full px-3 py-2 text-sm font-medium bg-gray-50 dark:bg-gray-850 dark:text-gray-200 rounded-lg outline-none"
 							type="text"
 							type="text"
-							placeholder="Toolkit Name (e.g. My ToolKit)"
+							placeholder={$i18n.t('Toolkit Name (e.g. My ToolKit)')}
 							bind:value={name}
 							bind:value={name}
 							required
 							required
 						/>
 						/>
@@ -205,7 +205,7 @@ class Tools:
 						<input
 						<input
 							class="w-full px-3 py-2 text-sm font-medium disabled:text-gray-300 dark:disabled:text-gray-700 bg-gray-50 dark:bg-gray-850 dark:text-gray-200 rounded-lg outline-none"
 							class="w-full px-3 py-2 text-sm font-medium disabled:text-gray-300 dark:disabled:text-gray-700 bg-gray-50 dark:bg-gray-850 dark:text-gray-200 rounded-lg outline-none"
 							type="text"
 							type="text"
-							placeholder="Toolkit ID (e.g. my_toolkit)"
+							placeholder={$i18n.t('Toolkit ID (e.g. my_toolkit)')}
 							bind:value={id}
 							bind:value={id}
 							required
 							required
 							disabled={edit}
 							disabled={edit}
@@ -214,7 +214,9 @@ class Tools:
 					<input
 					<input
 						class="w-full px-3 py-2 text-sm font-medium bg-gray-50 dark:bg-gray-850 dark:text-gray-200 rounded-lg outline-none"
 						class="w-full px-3 py-2 text-sm font-medium bg-gray-50 dark:bg-gray-850 dark:text-gray-200 rounded-lg outline-none"
 						type="text"
 						type="text"
-						placeholder="Toolkit Description (e.g. A toolkit for performing various operations)"
+						placeholder={$i18n.t(
+							'Toolkit Description (e.g. A toolkit for performing various operations)'
+						)}
 						bind:value={meta.description}
 						bind:value={meta.description}
 						required
 						required
 					/>
 					/>
@@ -236,10 +238,10 @@ class Tools:
 				<div class="pb-3 flex justify-between">
 				<div class="pb-3 flex justify-between">
 					<div class="flex-1 pr-3">
 					<div class="flex-1 pr-3">
 						<div class="text-xs text-gray-500 line-clamp-2">
 						<div class="text-xs text-gray-500 line-clamp-2">
-							<span class=" font-semibold dark:text-gray-200">Warning:</span> Tools are a function
-							calling system with arbitrary code execution <br />—
+							<span class=" font-semibold dark:text-gray-200">{$i18n.t('Warning:')}</span>
+							{$i18n.t('Tools are a function calling system with arbitrary code execution')} <br />—
 							<span class=" font-medium dark:text-gray-400"
 							<span class=" font-medium dark:text-gray-400"
-								>don't install random tools from sources you don't trust.</span
+								>{$i18n.t(`don't install random tools from sources you don't trust.`)}</span
 							>
 							>
 						</div>
 						</div>
 					</div>
 					</div>
@@ -264,18 +266,20 @@ class Tools:
 >
 >
 	<div class="text-sm text-gray-500">
 	<div class="text-sm text-gray-500">
 		<div class=" bg-yellow-500/20 text-yellow-700 dark:text-yellow-200 rounded-lg px-4 py-3">
 		<div class=" bg-yellow-500/20 text-yellow-700 dark:text-yellow-200 rounded-lg px-4 py-3">
-			<div>Please carefully review the following warnings:</div>
+			<div>{$i18n.t('Please carefully review the following warnings:')}</div>
 
 
 			<ul class=" mt-1 list-disc pl-4 text-xs">
 			<ul class=" mt-1 list-disc pl-4 text-xs">
-				<li>Tools have a function calling system that allows arbitrary code execution.</li>
-				<li>Do not install tools from sources you do not fully trust.</li>
+				<li>
+					{$i18n.t('Tools have a function calling system that allows arbitrary code execution.')}
+				</li>
+				<li>{$i18n.t('Do not install tools from sources you do not fully trust.')}</li>
 			</ul>
 			</ul>
 		</div>
 		</div>
 
 
 		<div class="my-3">
 		<div class="my-3">
-			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.
+			{$i18n.t(
+				'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.'
+			)}
 		</div>
 		</div>
 	</div>
 	</div>
 </ConfirmDialog>
 </ConfirmDialog>

+ 12 - 10
src/lib/components/workspace/common/ManifestModal.svelte

@@ -44,23 +44,25 @@
 					}}
 					}}
 				>
 				>
 					<div class="px-1 text-sm">
 					<div class="px-1 text-sm">
-						<div class=" my-2">
-							The developers behind this plugin are passionate volunteers from the community. If you
-							find this plugin helpful, please consider contributing to its development.
+						<div class="my-2">
+							{$i18n.t(
+								'The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.'
+							)}
 						</div>
 						</div>
 
 
-						<div class=" my-2">
-							Your entire contribution will go directly to the plugin developer; Open WebUI does not
-							take any percentage. However, the chosen funding platform might have its own fees.
+						<div class="my-2">
+							{$i18n.t(
+								'Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.'
+							)}
 						</div>
 						</div>
 
 
-						<hr class=" dark:border-gray-800 my-3" />
-
+						<hr class="dark:border-gray-800 my-3" />
 						<div class="my-2">
 						<div class="my-2">
-							Support this plugin: <a
+							{$i18n.t('Support this plugin:')}
+							<a
 								href={manifest.funding_url}
 								href={manifest.funding_url}
 								target="_blank"
 								target="_blank"
-								class=" underline text-blue-400 hover:text-blue-300">{manifest.funding_url}</a
+								class="underline text-blue-400 hover:text-blue-300">{manifest.funding_url}</a
 							>
 							>
 						</div>
 						</div>
 					</div>
 					</div>

+ 2 - 85
src/lib/components/workspace/common/ValvesModal.svelte

@@ -13,6 +13,7 @@
 	import { getToolValvesById, getToolValvesSpecById, updateToolValvesById } from '$lib/apis/tools';
 	import { getToolValvesById, getToolValvesSpecById, updateToolValvesById } from '$lib/apis/tools';
 	import Spinner from '../../common/Spinner.svelte';
 	import Spinner from '../../common/Spinner.svelte';
 	import Switch from '$lib/components/common/Switch.svelte';
 	import Switch from '$lib/components/common/Switch.svelte';
+	import Valves from '$lib/components/common/Valves.svelte';
 
 
 	const i18n = getContext('i18n');
 	const i18n = getContext('i18n');
 	const dispatch = createEventDispatcher();
 	const dispatch = createEventDispatcher();
@@ -127,91 +128,7 @@
 				>
 				>
 					<div class="px-1">
 					<div class="px-1">
 						{#if !loading}
 						{#if !loading}
-							{#if valvesSpec}
-								{#each Object.keys(valvesSpec.properties) as property, idx}
-									<div class=" py-0.5 w-full justify-between">
-										<div class="flex w-full justify-between">
-											<div class=" self-center text-xs font-medium">
-												{valvesSpec.properties[property].title}
-
-												{#if (valvesSpec?.required ?? []).includes(property)}
-													<span class=" text-gray-500">*required</span>
-												{/if}
-											</div>
-
-											<button
-												class="p-1 px-3 text-xs flex rounded transition"
-												type="button"
-												on:click={() => {
-													valves[property] =
-														(valves[property] ?? null) === null
-															? valvesSpec.properties[property]?.default ?? ''
-															: null;
-												}}
-											>
-												{#if (valves[property] ?? null) === null}
-													<span class="ml-2 self-center">
-														{#if (valvesSpec?.required ?? []).includes(property)}
-															{$i18n.t('None')}
-														{:else}
-															{$i18n.t('Default')}
-														{/if}
-													</span>
-												{:else}
-													<span class="ml-2 self-center"> {$i18n.t('Custom')} </span>
-												{/if}
-											</button>
-										</div>
-
-										{#if (valves[property] ?? null) !== null}
-											<!-- {valves[property]} -->
-											<div class="flex mt-0.5 mb-1.5 space-x-2">
-												<div class=" flex-1">
-													{#if valvesSpec.properties[property]?.enum ?? null}
-														<select
-															class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
-															bind:value={valves[property]}
-														>
-															{#each valvesSpec.properties[property].enum as option}
-																<option value={option} selected={option === valves[property]}>
-																	{option}
-																</option>
-															{/each}
-														</select>
-													{:else if (valvesSpec.properties[property]?.type ?? null) === 'boolean'}
-														<div class="flex justify-between items-center">
-															<div class="text-xs text-gray-500">
-																{valves[property] ? 'Enabled' : 'Disabled'}
-															</div>
-
-															<div class=" pr-2">
-																<Switch bind:state={valves[property]} />
-															</div>
-														</div>
-													{:else}
-														<input
-															class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
-															type="text"
-															placeholder={valvesSpec.properties[property].title}
-															bind:value={valves[property]}
-															autocomplete="off"
-															required
-														/>
-													{/if}
-												</div>
-											</div>
-										{/if}
-
-										{#if (valvesSpec.properties[property]?.description ?? null) !== null}
-											<div class="text-xs text-gray-500">
-												{valvesSpec.properties[property].description}
-											</div>
-										{/if}
-									</div>
-								{/each}
-							{:else}
-								<div class="text-sm">No valves</div>
-							{/if}
+							<Valves {valvesSpec} bind:valves />
 						{:else}
 						{:else}
 							<Spinner className="size-5" />
 							<Spinner className="size-5" />
 						{/if}
 						{/if}

+ 32 - 0
src/lib/i18n/locales/ar-BH/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "حذف {{name}}",
 	"Deleted {{name}}": "حذف {{name}}",
 	"Description": "وصف",
 	"Description": "وصف",
 	"Didn't fully follow instructions": "لم أتبع التعليمات بشكل كامل",
 	"Didn't fully follow instructions": "لم أتبع التعليمات بشكل كامل",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "اكتشف نموذجا",
 	"Discover a model": "اكتشف نموذجا",
 	"Discover a prompt": "اكتشاف موجه",
 	"Discover a prompt": "اكتشاف موجه",
@@ -188,6 +189,8 @@
 	"Dismissible": "",
 	"Dismissible": "",
 	"Display Emoji in Call": "",
 	"Display Emoji in Call": "",
 	"Display the username instead of You in the Chat": "اعرض اسم المستخدم بدلاً منك في الدردشة",
 	"Display the username instead of You in the Chat": "اعرض اسم المستخدم بدلاً منك في الدردشة",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "المستند",
 	"Document": "المستند",
 	"Document Settings": "أعدادات المستند",
 	"Document Settings": "أعدادات المستند",
 	"Documentation": "",
 	"Documentation": "",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "لا يجري أي اتصالات خارجية، وتظل بياناتك آمنة على الخادم المستضاف محليًا.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "لا يجري أي اتصالات خارجية، وتظل بياناتك آمنة على الخادم المستضاف محليًا.",
 	"Don't Allow": "لا تسمح بذلك",
 	"Don't Allow": "لا تسمح بذلك",
 	"Don't have an account?": "ليس لديك حساب؟",
 	"Don't have an account?": "ليس لديك حساب؟",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "لا أحب النمط",
 	"Don't like the style": "لا أحب النمط",
 	"Done": "",
 	"Done": "",
 	"Download": "تحميل",
 	"Download": "تحميل",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "تمكين مشاركة المجتمع",
 	"Enable Community Sharing": "تمكين مشاركة المجتمع",
 	"Enable New Sign Ups": "تفعيل عمليات التسجيل الجديدة",
 	"Enable New Sign Ups": "تفعيل عمليات التسجيل الجديدة",
 	"Enable Web Search": "تمكين بحث الويب",
 	"Enable Web Search": "تمكين بحث الويب",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "تأكد من أن ملف CSV الخاص بك يتضمن 4 أعمدة بهذا الترتيب: Name, Email, Password, Role.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "تأكد من أن ملف CSV الخاص بك يتضمن 4 أعمدة بهذا الترتيب: Name, Email, Password, Role.",
 	"Enter {{role}} message here": "أدخل رسالة {{role}} هنا",
 	"Enter {{role}} message here": "أدخل رسالة {{role}} هنا",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "أدخل مفتاح واجهة برمجة تطبيقات Serpstack",
 	"Enter Serpstack API Key": "أدخل مفتاح واجهة برمجة تطبيقات Serpstack",
 	"Enter stop sequence": "أدخل تسلسل التوقف",
 	"Enter stop sequence": "أدخل تسلسل التوقف",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "",
 	"Enter Tavily API Key": "",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "أدخل Top K",
 	"Enter Top K": "أدخل Top K",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "URL (e.g. http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "URL (e.g. http://localhost:11434)",
 	"Enter Your Email": "أدخل البريد الاكتروني",
 	"Enter Your Email": "أدخل البريد الاكتروني",
 	"Enter Your Full Name": "أدخل الاسم كامل",
 	"Enter Your Full Name": "أدخل الاسم كامل",
+	"Enter your message": "",
 	"Enter Your Password": "ادخل كلمة المرور",
 	"Enter Your Password": "ادخل كلمة المرور",
 	"Enter Your Role": "أدخل الصلاحيات",
 	"Enter Your Role": "أدخل الصلاحيات",
 	"Error": "خطأ",
 	"Error": "خطأ",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "وضع الملف",
 	"File Mode": "وضع الملف",
 	"File not found.": "لم يتم العثور على الملف.",
 	"File not found.": "لم يتم العثور على الملف.",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "عقوبة التردد",
 	"Frequency Penalty": "عقوبة التردد",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "عام",
 	"General": "عام",
 	"General Settings": "الاعدادات العامة",
 	"General Settings": "الاعدادات العامة",
 	"Generate Image": "",
 	"Generate Image": "",
 	"Generating search query": "إنشاء استعلام بحث",
 	"Generating search query": "إنشاء استعلام بحث",
 	"Generation Info": "معلومات الجيل",
 	"Generation Info": "معلومات الجيل",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "استجابة جيدة",
 	"Good Response": "استجابة جيدة",
 	"Google PSE API Key": "مفتاح واجهة برمجة تطبيقات PSE من Google",
 	"Google PSE API Key": "مفتاح واجهة برمجة تطبيقات PSE من Google",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "كيف استطيع مساعدتك اليوم؟",
 	"How can I help you today?": "كيف استطيع مساعدتك اليوم؟",
 	"Hybrid Search": "البحث الهجين",
 	"Hybrid Search": "البحث الهجين",
+	"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
 	"Image Generation (Experimental)": "توليد الصور (تجريبي)",
 	"Image Generation (Experimental)": "توليد الصور (تجريبي)",
 	"Image Generation Engine": "محرك توليد الصور",
 	"Image Generation Engine": "محرك توليد الصور",
 	"Image Settings": "إعدادات الصورة",
 	"Image Settings": "إعدادات الصورة",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "اختصارات لوحة المفاتيح",
 	"Keyboard shortcuts": "اختصارات لوحة المفاتيح",
 	"Knowledge": "",
 	"Knowledge": "",
 	"Language": "اللغة",
 	"Language": "اللغة",
+	"large language models, locally.": "",
 	"Last Active": "آخر نشاط",
 	"Last Active": "آخر نشاط",
 	"Last Modified": "",
 	"Last Modified": "",
 	"Light": "فاتح",
 	"Light": "فاتح",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "صمامات خطوط الأنابيب",
 	"Pipelines Valves": "صمامات خطوط الأنابيب",
 	"Plain text (.txt)": "نص عادي (.txt)",
 	"Plain text (.txt)": "نص عادي (.txt)",
 	"Playground": "مكان التجربة",
 	"Playground": "مكان التجربة",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "موقف ايجابي",
 	"Positive attitude": "موقف ايجابي",
 	"Previous 30 days": "أخر 30 يوم",
 	"Previous 30 days": "أخر 30 يوم",
 	"Previous 7 days": "أخر 7 أيام",
 	"Previous 7 days": "أخر 7 أيام",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"RTL": "من اليمين إلى اليسار",
 	"RTL": "من اليمين إلى اليسار",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "",
 	"Running": "",
 	"Save": "حفظ",
 	"Save": "حفظ",
 	"Save & Create": "حفظ وإنشاء",
 	"Save & Create": "حفظ وإنشاء",
@@ -562,6 +583,8 @@
 	"Success": "نجاح",
 	"Success": "نجاح",
 	"Successfully updated.": "تم التحديث بنجاح",
 	"Successfully updated.": "تم التحديث بنجاح",
 	"Suggested": "مقترحات",
 	"Suggested": "مقترحات",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "النظام",
 	"System": "النظام",
 	"System Prompt": "محادثة النظام",
 	"System Prompt": "محادثة النظام",
 	"Tags": "الوسوم",
 	"Tags": "الوسوم",
@@ -574,6 +597,7 @@
 	"Text-to-Speech Engine": "محرك تحويل النص إلى كلام",
 	"Text-to-Speech Engine": "محرك تحويل النص إلى كلام",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "شكرا لملاحظاتك!",
 	"Thanks for your feedback!": "شكرا لملاحظاتك!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "يجب أن تكون النتيجة قيمة تتراوح بين 0.0 (0%) و1.0 (100%).",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "يجب أن تكون النتيجة قيمة تتراوح بين 0.0 (0%) و1.0 (100%).",
 	"Theme": "الثيم",
 	"Theme": "الثيم",
 	"Thinking...": "",
 	"Thinking...": "",
@@ -607,7 +631,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "",
 	"Tools": "",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Trouble accessing Ollama?": "هل تواجه مشكلة في الوصول",
 	"Trouble accessing Ollama?": "هل تواجه مشكلة في الوصول",
@@ -649,6 +679,7 @@
 	"Version": "إصدار",
 	"Version": "إصدار",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "تحذير",
 	"Warning": "تحذير",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "تحذير: إذا قمت بتحديث أو تغيير نموذج التضمين الخاص بك، فستحتاج إلى إعادة استيراد كافة المستندات.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "تحذير: إذا قمت بتحديث أو تغيير نموذج التضمين الخاص بك، فستحتاج إلى إعادة استيراد كافة المستندات.",
 	"Web": "Web",
 	"Web": "Web",
 	"Web API": "",
 	"Web API": "",
@@ -675,6 +706,7 @@
 	"You're a helpful assistant.": "مساعدك المفيد هنا",
 	"You're a helpful assistant.": "مساعدك المفيد هنا",
 	"You're now logged in.": "لقد قمت الآن بتسجيل الدخول.",
 	"You're now logged in.": "لقد قمت الآن بتسجيل الدخول.",
 	"Your account status is currently pending activation.": "",
 	"Your account status is currently pending activation.": "",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "Youtube",
 	"Youtube": "Youtube",
 	"Youtube Loader Settings": "Youtube تحميل اعدادات"
 	"Youtube Loader Settings": "Youtube تحميل اعدادات"
 }
 }

+ 32 - 0
src/lib/i18n/locales/bg-BG/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "Изтрито {{име}}",
 	"Deleted {{name}}": "Изтрито {{име}}",
 	"Description": "Описание",
 	"Description": "Описание",
 	"Didn't fully follow instructions": "Не следва инструкциите",
 	"Didn't fully follow instructions": "Не следва инструкциите",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "Открийте модел",
 	"Discover a model": "Открийте модел",
 	"Discover a prompt": "Откриване на промпт",
 	"Discover a prompt": "Откриване на промпт",
@@ -188,6 +189,8 @@
 	"Dismissible": "",
 	"Dismissible": "",
 	"Display Emoji in Call": "",
 	"Display Emoji in Call": "",
 	"Display the username instead of You in the Chat": "Показване на потребителското име вместо Вие в чата",
 	"Display the username instead of You in the Chat": "Показване на потребителското име вместо Вие в чата",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "Документ",
 	"Document": "Документ",
 	"Document Settings": "Документ Настройки",
 	"Document Settings": "Документ Настройки",
 	"Documentation": "",
 	"Documentation": "",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "няма външни връзки, и вашите данни остават сигурни на локално назначен сървър.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "няма външни връзки, и вашите данни остават сигурни на локално назначен сървър.",
 	"Don't Allow": "Не Позволявай",
 	"Don't Allow": "Не Позволявай",
 	"Don't have an account?": "Нямате акаунт?",
 	"Don't have an account?": "Нямате акаунт?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "Не харесваш стила?",
 	"Don't like the style": "Не харесваш стила?",
 	"Done": "",
 	"Done": "",
 	"Download": "Изтегляне отменено",
 	"Download": "Изтегляне отменено",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "Разрешаване на споделяне в общност",
 	"Enable Community Sharing": "Разрешаване на споделяне в общност",
 	"Enable New Sign Ups": "Вклюване на Нови Потребители",
 	"Enable New Sign Ups": "Вклюване на Нови Потребители",
 	"Enable Web Search": "Разрешаване на търсене в уеб",
 	"Enable Web Search": "Разрешаване на търсене в уеб",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Уверете се, че вашият CSV файл включва 4 колони в следния ред: Име, Имейл, Парола, Роля.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Уверете се, че вашият CSV файл включва 4 колони в следния ред: Име, Имейл, Парола, Роля.",
 	"Enter {{role}} message here": "Въведете съобщение за {{role}} тук",
 	"Enter {{role}} message here": "Въведете съобщение за {{role}} тук",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Въведете Serpstack API ключ",
 	"Enter Serpstack API Key": "Въведете Serpstack API ключ",
 	"Enter stop sequence": "Въведете стоп последователност",
 	"Enter stop sequence": "Въведете стоп последователност",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "",
 	"Enter Tavily API Key": "",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "Въведете Top K",
 	"Enter Top K": "Въведете Top K",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "Въведете URL (напр. http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "Въведете URL (напр. http://localhost:11434)",
 	"Enter Your Email": "Въведете имейл",
 	"Enter Your Email": "Въведете имейл",
 	"Enter Your Full Name": "Въведете вашето пълно име",
 	"Enter Your Full Name": "Въведете вашето пълно име",
+	"Enter your message": "",
 	"Enter Your Password": "Въведете вашата парола",
 	"Enter Your Password": "Въведете вашата парола",
 	"Enter Your Role": "Въведете вашата роля",
 	"Enter Your Role": "Въведете вашата роля",
 	"Error": "Грешка",
 	"Error": "Грешка",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "Файл Мод",
 	"File Mode": "Файл Мод",
 	"File not found.": "Файл не е намерен.",
 	"File not found.": "Файл не е намерен.",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "Наказание за честота",
 	"Frequency Penalty": "Наказание за честота",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "Основни",
 	"General": "Основни",
 	"General Settings": "Основни Настройки",
 	"General Settings": "Основни Настройки",
 	"Generate Image": "",
 	"Generate Image": "",
 	"Generating search query": "Генериране на заявка за търсене",
 	"Generating search query": "Генериране на заявка за търсене",
 	"Generation Info": "Информация за Генерация",
 	"Generation Info": "Информация за Генерация",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "Добра отговор",
 	"Good Response": "Добра отговор",
 	"Google PSE API Key": "Google PSE API ключ",
 	"Google PSE API Key": "Google PSE API ключ",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "Как мога да ви помогна днес?",
 	"How can I help you today?": "Как мога да ви помогна днес?",
 	"Hybrid Search": "Hybrid Search",
 	"Hybrid Search": "Hybrid Search",
+	"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
 	"Image Generation (Experimental)": "Генерация на изображения (Експериментално)",
 	"Image Generation (Experimental)": "Генерация на изображения (Експериментално)",
 	"Image Generation Engine": "Двигател за генериране на изображения",
 	"Image Generation Engine": "Двигател за генериране на изображения",
 	"Image Settings": "Настройки на изображения",
 	"Image Settings": "Настройки на изображения",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "Клавиши за бърз достъп",
 	"Keyboard shortcuts": "Клавиши за бърз достъп",
 	"Knowledge": "",
 	"Knowledge": "",
 	"Language": "Език",
 	"Language": "Език",
+	"large language models, locally.": "",
 	"Last Active": "Последни активни",
 	"Last Active": "Последни активни",
 	"Last Modified": "",
 	"Last Modified": "",
 	"Light": "Светъл",
 	"Light": "Светъл",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "Тръбопроводи Вентили",
 	"Pipelines Valves": "Тръбопроводи Вентили",
 	"Plain text (.txt)": "Plain text (.txt)",
 	"Plain text (.txt)": "Plain text (.txt)",
 	"Playground": "Плейграунд",
 	"Playground": "Плейграунд",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "Позитивна ативност",
 	"Positive attitude": "Позитивна ативност",
 	"Previous 30 days": "Предыдущите 30 дни",
 	"Previous 30 days": "Предыдущите 30 дни",
 	"Previous 7 days": "Предыдущите 7 дни",
 	"Previous 7 days": "Предыдущите 7 дни",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "",
 	"Running": "",
 	"Save": "Запис",
 	"Save": "Запис",
 	"Save & Create": "Запис & Създаване",
 	"Save & Create": "Запис & Създаване",
@@ -558,6 +579,8 @@
 	"Success": "Успех",
 	"Success": "Успех",
 	"Successfully updated.": "Успешно обновено.",
 	"Successfully updated.": "Успешно обновено.",
 	"Suggested": "Препоръчано",
 	"Suggested": "Препоръчано",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "Система",
 	"System": "Система",
 	"System Prompt": "Системен Промпт",
 	"System Prompt": "Системен Промпт",
 	"Tags": "Тагове",
 	"Tags": "Тагове",
@@ -570,6 +593,7 @@
 	"Text-to-Speech Engine": "Text-to-Speech Engine",
 	"Text-to-Speech Engine": "Text-to-Speech Engine",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Благодарим ви за вашия отзив!",
 	"Thanks for your feedback!": "Благодарим ви за вашия отзив!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "The score should be a value between 0.0 (0%) and 1.0 (100%).",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "The score should be a value between 0.0 (0%) and 1.0 (100%).",
 	"Theme": "Тема",
 	"Theme": "Тема",
 	"Thinking...": "",
 	"Thinking...": "",
@@ -603,7 +627,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "",
 	"Tools": "",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Trouble accessing Ollama?": "Проблеми с достъпът до Ollama?",
 	"Trouble accessing Ollama?": "Проблеми с достъпът до Ollama?",
@@ -645,6 +675,7 @@
 	"Version": "Версия",
 	"Version": "Версия",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "Предупреждение",
 	"Warning": "Предупреждение",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Предупреждение: Ако актуализирате или промените вашия модел за вграждане, трябва да повторите импортирането на всички документи.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Предупреждение: Ако актуализирате или промените вашия модел за вграждане, трябва да повторите импортирането на всички документи.",
 	"Web": "Уеб",
 	"Web": "Уеб",
 	"Web API": "",
 	"Web API": "",
@@ -671,6 +702,7 @@
 	"You're a helpful assistant.": "Вие сте полезен асистент.",
 	"You're a helpful assistant.": "Вие сте полезен асистент.",
 	"You're now logged in.": "Сега, вие влязохте в системата.",
 	"You're now logged in.": "Сега, вие влязохте в системата.",
 	"Your account status is currently pending activation.": "",
 	"Your account status is currently pending activation.": "",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "Youtube",
 	"Youtube": "Youtube",
 	"Youtube Loader Settings": "Youtube Loader Settings"
 	"Youtube Loader Settings": "Youtube Loader Settings"
 }
 }

+ 32 - 0
src/lib/i18n/locales/bn-BD/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "{{name}} মোছা হয়েছে",
 	"Deleted {{name}}": "{{name}} মোছা হয়েছে",
 	"Description": "বিবরণ",
 	"Description": "বিবরণ",
 	"Didn't fully follow instructions": "ইনস্ট্রাকশন সম্পূর্ণ অনুসরণ করা হয়নি",
 	"Didn't fully follow instructions": "ইনস্ট্রাকশন সম্পূর্ণ অনুসরণ করা হয়নি",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "একটি মডেল আবিষ্কার করুন",
 	"Discover a model": "একটি মডেল আবিষ্কার করুন",
 	"Discover a prompt": "একটি প্রম্পট খুঁজে বের করুন",
 	"Discover a prompt": "একটি প্রম্পট খুঁজে বের করুন",
@@ -188,6 +189,8 @@
 	"Dismissible": "",
 	"Dismissible": "",
 	"Display Emoji in Call": "",
 	"Display Emoji in Call": "",
 	"Display the username instead of You in the Chat": "চ্যাটে 'আপনি'-র পরবর্তে ইউজারনেম দেখান",
 	"Display the username instead of You in the Chat": "চ্যাটে 'আপনি'-র পরবর্তে ইউজারনেম দেখান",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "ডকুমেন্ট",
 	"Document": "ডকুমেন্ট",
 	"Document Settings": "ডকুমেন্ট সেটিংসমূহ",
 	"Document Settings": "ডকুমেন্ট সেটিংসমূহ",
 	"Documentation": "",
 	"Documentation": "",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "কোন এক্সটার্নাল কানেকশন তৈরি করে না, এবং আপনার ডেটা আর লোকালি হোস্টেড সার্ভারেই নিরাপদে থাকে।",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "কোন এক্সটার্নাল কানেকশন তৈরি করে না, এবং আপনার ডেটা আর লোকালি হোস্টেড সার্ভারেই নিরাপদে থাকে।",
 	"Don't Allow": "অনুমোদন দেবেন না",
 	"Don't Allow": "অনুমোদন দেবেন না",
 	"Don't have an account?": "একাউন্ট নেই?",
 	"Don't have an account?": "একাউন্ট নেই?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "স্টাইল পছন্দ করেন না",
 	"Don't like the style": "স্টাইল পছন্দ করেন না",
 	"Done": "",
 	"Done": "",
 	"Download": "ডাউনলোড",
 	"Download": "ডাউনলোড",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "সম্প্রদায় শেয়ারকরণ সক্ষম করুন",
 	"Enable Community Sharing": "সম্প্রদায় শেয়ারকরণ সক্ষম করুন",
 	"Enable New Sign Ups": "নতুন সাইনআপ চালু করুন",
 	"Enable New Sign Ups": "নতুন সাইনআপ চালু করুন",
 	"Enable Web Search": "ওয়েব অনুসন্ধান সক্ষম করুন",
 	"Enable Web Search": "ওয়েব অনুসন্ধান সক্ষম করুন",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "আপনার সিএসভি ফাইলটিতে এই ক্রমে 4 টি কলাম অন্তর্ভুক্ত রয়েছে তা নিশ্চিত করুন: নাম, ইমেল, পাসওয়ার্ড, ভূমিকা।.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "আপনার সিএসভি ফাইলটিতে এই ক্রমে 4 টি কলাম অন্তর্ভুক্ত রয়েছে তা নিশ্চিত করুন: নাম, ইমেল, পাসওয়ার্ড, ভূমিকা।.",
 	"Enter {{role}} message here": "{{role}} মেসেজ এখানে লিখুন",
 	"Enter {{role}} message here": "{{role}} মেসেজ এখানে লিখুন",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Serpstack API কী লিখুন",
 	"Enter Serpstack API Key": "Serpstack API কী লিখুন",
 	"Enter stop sequence": "স্টপ সিকোয়েন্স লিখুন",
 	"Enter stop sequence": "স্টপ সিকোয়েন্স লিখুন",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "",
 	"Enter Tavily API Key": "",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "Top K লিখুন",
 	"Enter Top K": "Top K লিখুন",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "ইউআরএল দিন (যেমন http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "ইউআরএল দিন (যেমন http://localhost:11434)",
 	"Enter Your Email": "আপনার ইমেইল লিখুন",
 	"Enter Your Email": "আপনার ইমেইল লিখুন",
 	"Enter Your Full Name": "আপনার পূর্ণ নাম লিখুন",
 	"Enter Your Full Name": "আপনার পূর্ণ নাম লিখুন",
+	"Enter your message": "",
 	"Enter Your Password": "আপনার পাসওয়ার্ড লিখুন",
 	"Enter Your Password": "আপনার পাসওয়ার্ড লিখুন",
 	"Enter Your Role": "আপনার রোল লিখুন",
 	"Enter Your Role": "আপনার রোল লিখুন",
 	"Error": "ত্রুটি",
 	"Error": "ত্রুটি",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "ফাইল মোড",
 	"File Mode": "ফাইল মোড",
 	"File not found.": "ফাইল পাওয়া যায়নি",
 	"File not found.": "ফাইল পাওয়া যায়নি",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "ফ্রিকোয়েন্সি পেনাল্টি",
 	"Frequency Penalty": "ফ্রিকোয়েন্সি পেনাল্টি",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "সাধারণ",
 	"General": "সাধারণ",
 	"General Settings": "সাধারণ সেটিংসমূহ",
 	"General Settings": "সাধারণ সেটিংসমূহ",
 	"Generate Image": "",
 	"Generate Image": "",
 	"Generating search query": "অনুসন্ধান ক্যোয়ারী তৈরি করা হচ্ছে",
 	"Generating search query": "অনুসন্ধান ক্যোয়ারী তৈরি করা হচ্ছে",
 	"Generation Info": "জেনারেশন ইনফো",
 	"Generation Info": "জেনারেশন ইনফো",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "ভালো সাড়া",
 	"Good Response": "ভালো সাড়া",
 	"Google PSE API Key": "গুগল পিএসই এপিআই কী",
 	"Google PSE API Key": "গুগল পিএসই এপিআই কী",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "আপনাকে আজ কিভাবে সাহায্য করতে পারি?",
 	"How can I help you today?": "আপনাকে আজ কিভাবে সাহায্য করতে পারি?",
 	"Hybrid Search": "হাইব্রিড অনুসন্ধান",
 	"Hybrid Search": "হাইব্রিড অনুসন্ধান",
+	"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
 	"Image Generation (Experimental)": "ইমেজ জেনারেশন (পরিক্ষামূলক)",
 	"Image Generation (Experimental)": "ইমেজ জেনারেশন (পরিক্ষামূলক)",
 	"Image Generation Engine": "ইমেজ জেনারেশন ইঞ্জিন",
 	"Image Generation Engine": "ইমেজ জেনারেশন ইঞ্জিন",
 	"Image Settings": "ছবির সেটিংসমূহ",
 	"Image Settings": "ছবির সেটিংসমূহ",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "কিবোর্ড শর্টকাটসমূহ",
 	"Keyboard shortcuts": "কিবোর্ড শর্টকাটসমূহ",
 	"Knowledge": "",
 	"Knowledge": "",
 	"Language": "ভাষা",
 	"Language": "ভাষা",
+	"large language models, locally.": "",
 	"Last Active": "সর্বশেষ সক্রিয়",
 	"Last Active": "সর্বশেষ সক্রিয়",
 	"Last Modified": "",
 	"Last Modified": "",
 	"Light": "লাইট",
 	"Light": "লাইট",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "পাইপলাইন ভালভ",
 	"Pipelines Valves": "পাইপলাইন ভালভ",
 	"Plain text (.txt)": "প্লায়েন টেক্সট (.txt)",
 	"Plain text (.txt)": "প্লায়েন টেক্সট (.txt)",
 	"Playground": "খেলাঘর",
 	"Playground": "খেলাঘর",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "পজিটিভ আক্রমণ",
 	"Positive attitude": "পজিটিভ আক্রমণ",
 	"Previous 30 days": "পূর্ব ৩০ দিন",
 	"Previous 30 days": "পূর্ব ৩০ দিন",
 	"Previous 7 days": "পূর্ব ৭ দিন",
 	"Previous 7 days": "পূর্ব ৭ দিন",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "রোজ পাইন",
 	"Rosé Pine": "রোজ পাইন",
 	"Rosé Pine Dawn": "ভোরের রোজ পাইন",
 	"Rosé Pine Dawn": "ভোরের রোজ পাইন",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "",
 	"Running": "",
 	"Save": "সংরক্ষণ",
 	"Save": "সংরক্ষণ",
 	"Save & Create": "সংরক্ষণ এবং তৈরি করুন",
 	"Save & Create": "সংরক্ষণ এবং তৈরি করুন",
@@ -558,6 +579,8 @@
 	"Success": "সফল",
 	"Success": "সফল",
 	"Successfully updated.": "সফলভাবে আপডেট হয়েছে",
 	"Successfully updated.": "সফলভাবে আপডেট হয়েছে",
 	"Suggested": "প্রস্তাবিত",
 	"Suggested": "প্রস্তাবিত",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "সিস্টেম",
 	"System": "সিস্টেম",
 	"System Prompt": "সিস্টেম প্রম্পট",
 	"System Prompt": "সিস্টেম প্রম্পট",
 	"Tags": "ট্যাগসমূহ",
 	"Tags": "ট্যাগসমূহ",
@@ -570,6 +593,7 @@
 	"Text-to-Speech Engine": "টেক্সট-টু-স্পিচ ইঞ্জিন",
 	"Text-to-Speech Engine": "টেক্সট-টু-স্পিচ ইঞ্জিন",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "আপনার মতামত ধন্যবাদ!",
 	"Thanks for your feedback!": "আপনার মতামত ধন্যবাদ!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "স্কোর একটি 0.0 (0%) এবং 1.0 (100%) এর মধ্যে একটি মান হওয়া উচিত।",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "স্কোর একটি 0.0 (0%) এবং 1.0 (100%) এর মধ্যে একটি মান হওয়া উচিত।",
 	"Theme": "থিম",
 	"Theme": "থিম",
 	"Thinking...": "",
 	"Thinking...": "",
@@ -603,7 +627,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "",
 	"Tools": "",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Trouble accessing Ollama?": "Ollama এক্সেস করতে সমস্যা হচ্ছে?",
 	"Trouble accessing Ollama?": "Ollama এক্সেস করতে সমস্যা হচ্ছে?",
@@ -645,6 +675,7 @@
 	"Version": "ভার্সন",
 	"Version": "ভার্সন",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "সতর্কীকরণ",
 	"Warning": "সতর্কীকরণ",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "সতর্কীকরণ: আপনি যদি আপনার এম্বেডিং মডেল আপডেট বা পরিবর্তন করেন, তাহলে আপনাকে সমস্ত নথি পুনরায় আমদানি করতে হবে।.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "সতর্কীকরণ: আপনি যদি আপনার এম্বেডিং মডেল আপডেট বা পরিবর্তন করেন, তাহলে আপনাকে সমস্ত নথি পুনরায় আমদানি করতে হবে।.",
 	"Web": "ওয়েব",
 	"Web": "ওয়েব",
 	"Web API": "",
 	"Web API": "",
@@ -671,6 +702,7 @@
 	"You're a helpful assistant.": "আপনি একজন উপকারী এসিস্ট্যান্ট",
 	"You're a helpful assistant.": "আপনি একজন উপকারী এসিস্ট্যান্ট",
 	"You're now logged in.": "আপনি এখন লগইন করা অবস্থায় আছেন",
 	"You're now logged in.": "আপনি এখন লগইন করা অবস্থায় আছেন",
 	"Your account status is currently pending activation.": "",
 	"Your account status is currently pending activation.": "",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "YouTube",
 	"Youtube": "YouTube",
 	"Youtube Loader Settings": "YouTube লোডার সেটিংস"
 	"Youtube Loader Settings": "YouTube লোডার সেটিংস"
 }
 }

+ 32 - 0
src/lib/i18n/locales/ca-ES/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "S'ha eliminat {{name}}",
 	"Deleted {{name}}": "S'ha eliminat {{name}}",
 	"Description": "Descripció",
 	"Description": "Descripció",
 	"Didn't fully follow instructions": "No s'han seguit les instruccions completament",
 	"Didn't fully follow instructions": "No s'han seguit les instruccions completament",
+	"Disabled": "Deshabilitat",
 	"Discover a function": "Descobrir una funció",
 	"Discover a function": "Descobrir una funció",
 	"Discover a model": "Descobrir un model",
 	"Discover a model": "Descobrir un model",
 	"Discover a prompt": "Descobrir una indicació",
 	"Discover a prompt": "Descobrir una indicació",
@@ -188,6 +189,8 @@
 	"Dismissible": "Descartable",
 	"Dismissible": "Descartable",
 	"Display Emoji in Call": "Mostrar emojis a la trucada",
 	"Display Emoji in Call": "Mostrar emojis a la trucada",
 	"Display the username instead of You in the Chat": "Mostrar el nom d'usuari en lloc de 'Tu' al xat",
 	"Display the username instead of You in the Chat": "Mostrar el nom d'usuari en lloc de 'Tu' al xat",
+	"Do not install functions from sources you do not fully trust.": "No instal·lis funcions de fonts en què no confiïs plenament.",
+	"Do not install tools from sources you do not fully trust.": "No instal·lis eines de fonts en què no confiïs plenament.",
 	"Document": "Document",
 	"Document": "Document",
 	"Document Settings": "Preferències de documents",
 	"Document Settings": "Preferències de documents",
 	"Documentation": "Documentació",
 	"Documentation": "Documentació",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "no realitza connexions externes, i les teves dades romanen segures al teu servidor allotjat localment.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "no realitza connexions externes, i les teves dades romanen segures al teu servidor allotjat localment.",
 	"Don't Allow": "No permetre",
 	"Don't Allow": "No permetre",
 	"Don't have an account?": "No tens un compte?",
 	"Don't have an account?": "No tens un compte?",
+	"don't install random functions from sources you don't trust.": "no instal·lis funcions aleatòries de fonts en què no confiïs.",
+	"don't install random tools from sources you don't trust.": "no instal·lis eines aleatòries de fonts en què no confiïs.",
 	"Don't like the style": "No t'agrada l'estil?",
 	"Don't like the style": "No t'agrada l'estil?",
 	"Done": "Fet",
 	"Done": "Fet",
 	"Download": "Descarregar",
 	"Download": "Descarregar",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "Activar l'ús compartit amb la comunitat",
 	"Enable Community Sharing": "Activar l'ús compartit amb la comunitat",
 	"Enable New Sign Ups": "Permetre nous registres",
 	"Enable New Sign Ups": "Permetre nous registres",
 	"Enable Web Search": "Activar la cerca web",
 	"Enable Web Search": "Activar la cerca web",
+	"Enabled": "Habilitat",
 	"Engine": "Motor",
 	"Engine": "Motor",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Assegura't que els teus fitxers CSV inclouen 4 columnes en aquest ordre: Nom, Correu electrònic, Contrasenya, Rol.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Assegura't que els teus fitxers CSV inclouen 4 columnes en aquest ordre: Nom, Correu electrònic, Contrasenya, Rol.",
 	"Enter {{role}} message here": "Introdueix aquí el missatge de {{role}}",
 	"Enter {{role}} message here": "Introdueix aquí el missatge de {{role}}",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "Introdueix la clau API Serply",
 	"Enter Serply API Key": "Introdueix la clau API Serply",
 	"Enter Serpstack API Key": "Introdueix la clau API Serpstack",
 	"Enter Serpstack API Key": "Introdueix la clau API Serpstack",
 	"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 Tavily API Key": "Introdueix la clau API de Tavily",
 	"Enter Tavily API Key": "Introdueix la clau API de Tavily",
 	"Enter Tika Server URL": "Introdueix l'URL del servidor Tika",
 	"Enter Tika Server URL": "Introdueix l'URL del servidor Tika",
 	"Enter Top K": "Introdueix Top K",
 	"Enter Top K": "Introdueix Top K",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "Introdueix l'URL (p. ex. http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "Introdueix l'URL (p. ex. http://localhost:11434)",
 	"Enter Your Email": "Introdueix el teu correu electrònic",
 	"Enter Your Email": "Introdueix el teu correu electrònic",
 	"Enter Your Full Name": "Introdueix el teu nom complet",
 	"Enter Your Full Name": "Introdueix el teu nom complet",
+	"Enter your message": "Introdueix el teu missatge",
 	"Enter Your Password": "Introdueix la teva contrasenya",
 	"Enter Your Password": "Introdueix la teva contrasenya",
 	"Enter Your Role": "Introdueix el teu rol",
 	"Enter Your Role": "Introdueix el teu rol",
 	"Error": "Error",
 	"Error": "Error",
@@ -266,6 +274,7 @@
 	"File": "Arxiu",
 	"File": "Arxiu",
 	"File Mode": "Mode d'arxiu",
 	"File Mode": "Mode d'arxiu",
 	"File not found.": "No s'ha trobat l'arxiu.",
 	"File not found.": "No s'ha trobat l'arxiu.",
+	"Files": "",
 	"Filter is now globally disabled": "El filtre ha estat desactivat globalment",
 	"Filter is now globally disabled": "El filtre ha estat desactivat globalment",
 	"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",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "Penalització per freqüència",
 	"Frequency Penalty": "Penalització per freqüència",
 	"Function created successfully": "La funció s'ha creat correctament",
 	"Function created successfully": "La funció s'ha creat correctament",
 	"Function deleted successfully": "La funció s'ha eliminat correctament",
 	"Function deleted successfully": "La funció s'ha eliminat correctament",
+	"Function Description (e.g. A filter to remove profanity from text)": "Descripció de la funció (per exemple, un filtre per eliminar paraules malsonants del text)",
+	"Function ID (e.g. my_filter)": "ID de la funció (per exemple, el_meu_filtre)",
+	"Function is now globally disabled": "La funció ha estat desactivada globalment",
+	"Function is now globally enabled": "La funció ha estat activada globalment",
+	"Function Name (e.g. My Filter)": "Nom de la funció (per exemple, El Meu Filtre)",
 	"Function updated successfully": "La funció s'ha actualitzat correctament",
 	"Function updated successfully": "La funció s'ha actualitzat correctament",
 	"Functions": "Funcions",
 	"Functions": "Funcions",
+	"Functions allow arbitrary code execution": "Les funcions permeten l'execució de codi arbitrari",
+	"Functions allow arbitrary code execution.": "Les funcions permeten l'execució de codi arbitrari.",
 	"Functions imported successfully": "Les funcions s'han importat correctament",
 	"Functions imported successfully": "Les funcions s'han importat correctament",
 	"General": "General",
 	"General": "General",
 	"General Settings": "Preferències generals",
 	"General Settings": "Preferències generals",
 	"Generate Image": "Generar imatge",
 	"Generate Image": "Generar imatge",
 	"Generating search query": "Generant consulta",
 	"Generating search query": "Generant consulta",
 	"Generation Info": "Informació sobre la generació",
 	"Generation Info": "Informació sobre la generació",
+	"Get up and running with": "Posa't en marxa amb",
 	"Global": "Global",
 	"Global": "Global",
 	"Good Response": "Bona resposta",
 	"Good Response": "Bona resposta",
 	"Google PSE API Key": "Clau API PSE de Google",
 	"Google PSE API Key": "Clau API PSE de Google",
@@ -298,6 +315,7 @@
 	"Hide Model": "Amagar el model",
 	"Hide Model": "Amagar el model",
 	"How can I help you today?": "Com et puc ajudar avui?",
 	"How can I help you today?": "Com et puc ajudar avui?",
 	"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.",
 	"Image Generation (Experimental)": "Generació d'imatges (Experimental)",
 	"Image Generation (Experimental)": "Generació d'imatges (Experimental)",
 	"Image Generation Engine": "Motor de generació d'imatges",
 	"Image Generation Engine": "Motor de generació d'imatges",
 	"Image Settings": "Preferències d'imatges",
 	"Image Settings": "Preferències d'imatges",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "Dreceres de teclat",
 	"Keyboard shortcuts": "Dreceres de teclat",
 	"Knowledge": "Coneixement",
 	"Knowledge": "Coneixement",
 	"Language": "Idioma",
 	"Language": "Idioma",
+	"large language models, locally.": "models de llenguatge extensos, localment",
 	"Last Active": "Activitat recent",
 	"Last Active": "Activitat recent",
 	"Last Modified": "Modificació",
 	"Last Modified": "Modificació",
 	"Light": "Clar",
 	"Light": "Clar",
@@ -438,6 +457,7 @@
 	"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",
+	"Please carefully review the following warnings:": "Si us plau, revisa els següents avisos amb cura:",
 	"Positive attitude": "Actitud positiva",
 	"Positive attitude": "Actitud positiva",
 	"Previous 30 days": "30 dies anteriors",
 	"Previous 30 days": "30 dies anteriors",
 	"Previous 7 days": "7 dies anteriors",
 	"Previous 7 days": "7 dies anteriors",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Albada Rosé Pine",
 	"Rosé Pine Dawn": "Albada Rosé Pine",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "Executa Llama 2, Code Llama, i altres models. Personalitza i crea els teus propis models.",
 	"Running": "S'està executant",
 	"Running": "S'està executant",
 	"Save": "Desar",
 	"Save": "Desar",
 	"Save & Create": "Desar i crear",
 	"Save & Create": "Desar i crear",
@@ -559,6 +580,8 @@
 	"Success": "Èxit",
 	"Success": "Èxit",
 	"Successfully updated.": "Actualitzat correctament.",
 	"Successfully updated.": "Actualitzat correctament.",
 	"Suggested": "Suggerit",
 	"Suggested": "Suggerit",
+	"Support": "Dona suport",
+	"Support this plugin:": "Dona suport a aquest complement:",
 	"System": "Sistema",
 	"System": "Sistema",
 	"System Prompt": "Indicació del Sistema",
 	"System Prompt": "Indicació del Sistema",
 	"Tags": "Etiquetes",
 	"Tags": "Etiquetes",
@@ -571,6 +594,7 @@
 	"Text-to-Speech Engine": "Motor de text a veu",
 	"Text-to-Speech Engine": "Motor de text a veu",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Gràcies pel teu comentari!",
 	"Thanks for your feedback!": "Gràcies pel teu comentari!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "Els desenvolupadors d'aquest complement són voluntaris apassionats de la comunitat. Si trobeu útil aquest complement, considereu contribuir al seu desenvolupament.",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "El valor de puntuació hauria de ser entre 0.0 (0%) i 1.0 (100%).",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "El valor de puntuació hauria de ser entre 0.0 (0%) i 1.0 (100%).",
 	"Theme": "Tema",
 	"Theme": "Tema",
 	"Thinking...": "Pensant...",
 	"Thinking...": "Pensant...",
@@ -604,7 +628,13 @@
 	"Tool deleted successfully": "Eina eliminada correctament",
 	"Tool deleted successfully": "Eina eliminada correctament",
 	"Tool imported successfully": "Eina importada correctament",
 	"Tool imported successfully": "Eina importada correctament",
 	"Tool updated successfully": "Eina actualitzada correctament",
 	"Tool updated successfully": "Eina actualitzada correctament",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "Descripció del kit d'eines (p. ex. Un kit d'eines per fer diverses operacions)",
+	"Toolkit ID (e.g. my_toolkit)": "ID del kit d'eines (p. ex. el_meu_kit)",
+	"Toolkit Name (e.g. My ToolKit)": "Nom del kit d'eines (p. ex. El meu kit)",
 	"Tools": "Eines",
 	"Tools": "Eines",
+	"Tools are a function calling system with arbitrary code execution": "Les eines són un sistema de crida a funcions amb execució de codi arbitrari",
+	"Tools have a function calling system that allows arbitrary code execution": "Les eines disposen d'un sistema de crida a funcions que permet execució de codi arbitrari",
+	"Tools have a function calling system that allows arbitrary code execution.": "Les eines disposen d'un sistema de crida a funcions que permet execució de codi arbitrari.",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Trouble accessing Ollama?": "Problemes en accedir a Ollama?",
 	"Trouble accessing Ollama?": "Problemes en accedir a Ollama?",
@@ -646,6 +676,7 @@
 	"Version": "Versió",
 	"Version": "Versió",
 	"Voice": "Veu",
 	"Voice": "Veu",
 	"Warning": "Avís",
 	"Warning": "Avís",
+	"Warning:": "Avís:",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Avís: Si s'actualitza o es canvia el model d'incrustació, s'hauran de tornar a importar tots els documents.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Avís: Si s'actualitza o es canvia el model d'incrustació, s'hauran de tornar a importar tots els documents.",
 	"Web": "Web",
 	"Web": "Web",
 	"Web API": "Web API",
 	"Web API": "Web API",
@@ -672,6 +703,7 @@
 	"You're a helpful assistant.": "Ets un assistent útil.",
 	"You're a helpful assistant.": "Ets un assistent útil.",
 	"You're now logged in.": "Ara estàs connectat.",
 	"You're now logged in.": "Ara estàs connectat.",
 	"Your account status is currently pending activation.": "El compte està actualment pendent d'activació",
 	"Your account status is currently pending activation.": "El compte està actualment pendent d'activació",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Tota la teva contribució anirà directament al desenvolupador del complement; Open WebUI no se'n queda cap percentatge. Tanmateix, la plataforma de finançament escollida pot tenir les seves pròpies comissions.",
 	"Youtube": "Youtube",
 	"Youtube": "Youtube",
 	"Youtube Loader Settings": "Preferències del carregador de Youtube"
 	"Youtube Loader Settings": "Preferències del carregador de Youtube"
 }
 }

+ 32 - 0
src/lib/i18n/locales/ceb-PH/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "",
 	"Deleted {{name}}": "",
 	"Description": "Deskripsyon",
 	"Description": "Deskripsyon",
 	"Didn't fully follow instructions": "",
 	"Didn't fully follow instructions": "",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "",
 	"Discover a model": "",
 	"Discover a prompt": "Pagkaplag usa ka prompt",
 	"Discover a prompt": "Pagkaplag usa ka prompt",
@@ -188,6 +189,8 @@
 	"Dismissible": "",
 	"Dismissible": "",
 	"Display Emoji in Call": "",
 	"Display Emoji in Call": "",
 	"Display the username instead of You in the Chat": "Ipakita ang username imbes nga 'Ikaw' sa Panaghisgutan",
 	"Display the username instead of You in the Chat": "Ipakita ang username imbes nga 'Ikaw' sa Panaghisgutan",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "Dokumento",
 	"Document": "Dokumento",
 	"Document Settings": "Mga Setting sa Dokumento",
 	"Document Settings": "Mga Setting sa Dokumento",
 	"Documentation": "",
 	"Documentation": "",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "wala maghimo ug eksternal nga koneksyon, ug ang imong data nagpabiling luwas sa imong lokal nga host server.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "wala maghimo ug eksternal nga koneksyon, ug ang imong data nagpabiling luwas sa imong lokal nga host server.",
 	"Don't Allow": "Dili tugotan",
 	"Don't Allow": "Dili tugotan",
 	"Don't have an account?": "Wala kay account ?",
 	"Don't have an account?": "Wala kay account ?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "",
 	"Don't like the style": "",
 	"Done": "",
 	"Done": "",
 	"Download": "",
 	"Download": "",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "",
 	"Enable Community Sharing": "",
 	"Enable New Sign Ups": "I-enable ang bag-ong mga rehistro",
 	"Enable New Sign Ups": "I-enable ang bag-ong mga rehistro",
 	"Enable Web Search": "",
 	"Enable Web Search": "",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
 	"Enter {{role}} message here": "Pagsulod sa mensahe {{role}} dinhi",
 	"Enter {{role}} message here": "Pagsulod sa mensahe {{role}} dinhi",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "",
 	"Enter Serpstack API Key": "",
 	"Enter stop sequence": "Pagsulod sa katapusan nga han-ay",
 	"Enter stop sequence": "Pagsulod sa katapusan nga han-ay",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "",
 	"Enter Tavily API Key": "",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "Pagsulod sa Top K",
 	"Enter Top K": "Pagsulod sa Top K",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "Pagsulod sa imong e-mail address",
 	"Enter Your Email": "Pagsulod sa imong e-mail address",
 	"Enter Your Full Name": "Ibutang ang imong tibuok nga ngalan",
 	"Enter Your Full Name": "Ibutang ang imong tibuok nga ngalan",
+	"Enter your message": "",
 	"Enter Your Password": "Ibutang ang imong password",
 	"Enter Your Password": "Ibutang ang imong password",
 	"Enter Your Role": "",
 	"Enter Your Role": "",
 	"Error": "",
 	"Error": "",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "File mode",
 	"File Mode": "File mode",
 	"File not found.": "Wala makit-an ang file.",
 	"File not found.": "Wala makit-an ang file.",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "",
 	"Frequency Penalty": "",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "Heneral",
 	"General": "Heneral",
 	"General Settings": "kinatibuk-ang mga setting",
 	"General Settings": "kinatibuk-ang mga setting",
 	"Generate Image": "",
 	"Generate Image": "",
 	"Generating search query": "",
 	"Generating search query": "",
 	"Generation Info": "",
 	"Generation Info": "",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "",
 	"Good Response": "",
 	"Google PSE API Key": "",
 	"Google PSE API Key": "",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "Unsaon nako pagtabang kanimo karon?",
 	"How can I help you today?": "Unsaon nako pagtabang kanimo karon?",
 	"Hybrid Search": "",
 	"Hybrid Search": "",
+	"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
 	"Image Generation (Experimental)": "Pagmugna og hulagway (Eksperimento)",
 	"Image Generation (Experimental)": "Pagmugna og hulagway (Eksperimento)",
 	"Image Generation Engine": "Makina sa paghimo og imahe",
 	"Image Generation Engine": "Makina sa paghimo og imahe",
 	"Image Settings": "Mga Setting sa Imahen",
 	"Image Settings": "Mga Setting sa Imahen",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "Mga shortcut sa keyboard",
 	"Keyboard shortcuts": "Mga shortcut sa keyboard",
 	"Knowledge": "",
 	"Knowledge": "",
 	"Language": "Pinulongan",
 	"Language": "Pinulongan",
+	"large language models, locally.": "",
 	"Last Active": "",
 	"Last Active": "",
 	"Last Modified": "",
 	"Last Modified": "",
 	"Light": "Kahayag",
 	"Light": "Kahayag",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "",
 	"Pipelines Valves": "",
 	"Plain text (.txt)": "",
 	"Plain text (.txt)": "",
 	"Playground": "Dulaanan",
 	"Playground": "Dulaanan",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "",
 	"Positive attitude": "",
 	"Previous 30 days": "",
 	"Previous 30 days": "",
 	"Previous 7 days": "",
 	"Previous 7 days": "",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Aube Pine Rosé",
 	"Rosé Pine Dawn": "Aube Pine Rosé",
 	"RTL": "",
 	"RTL": "",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "",
 	"Running": "",
 	"Save": "Tipigi",
 	"Save": "Tipigi",
 	"Save & Create": "I-save ug Paghimo",
 	"Save & Create": "I-save ug Paghimo",
@@ -558,6 +579,8 @@
 	"Success": "Kalampusan",
 	"Success": "Kalampusan",
 	"Successfully updated.": "Malampuson nga na-update.",
 	"Successfully updated.": "Malampuson nga na-update.",
 	"Suggested": "",
 	"Suggested": "",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "Sistema",
 	"System": "Sistema",
 	"System Prompt": "Madasig nga Sistema",
 	"System Prompt": "Madasig nga Sistema",
 	"Tags": "Mga tag",
 	"Tags": "Mga tag",
@@ -570,6 +593,7 @@
 	"Text-to-Speech Engine": "Text-to-speech nga makina",
 	"Text-to-Speech Engine": "Text-to-speech nga makina",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "",
 	"Thanks for your feedback!": "",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "",
 	"Theme": "Tema",
 	"Theme": "Tema",
 	"Thinking...": "",
 	"Thinking...": "",
@@ -603,7 +627,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "",
 	"Tools": "",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Ibabaw nga P",
 	"Top P": "Ibabaw nga P",
 	"Trouble accessing Ollama?": "Adunay mga problema sa pag-access sa Ollama?",
 	"Trouble accessing Ollama?": "Adunay mga problema sa pag-access sa Ollama?",
@@ -645,6 +675,7 @@
 	"Version": "Bersyon",
 	"Version": "Bersyon",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "",
 	"Warning": "",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Web",
 	"Web": "Web",
 	"Web API": "",
 	"Web API": "",
@@ -671,6 +702,7 @@
 	"You're a helpful assistant.": "Usa ka ka mapuslanon nga katabang",
 	"You're a helpful assistant.": "Usa ka ka mapuslanon nga katabang",
 	"You're now logged in.": "Konektado ka na karon.",
 	"You're now logged in.": "Konektado ka na karon.",
 	"Your account status is currently pending activation.": "",
 	"Your account status is currently pending activation.": "",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "",
 	"Youtube": "",
 	"Youtube Loader Settings": ""
 	"Youtube Loader Settings": ""
 }
 }

+ 33 - 1
src/lib/i18n/locales/de-DE/translation.json

@@ -130,7 +130,7 @@
 	"Content Extraction": "Inhaltsextraktion",
 	"Content Extraction": "Inhaltsextraktion",
 	"Context Length": "Kontextlänge",
 	"Context Length": "Kontextlänge",
 	"Continue Response": "Antwort fortsetzen",
 	"Continue Response": "Antwort fortsetzen",
-	"Continue with {{provider}}": "Mit {{Anbieter}} fortfahren",
+	"Continue with {{provider}}": "Mit {{provider}} fortfahren",
 	"Controls": "",
 	"Controls": "",
 	"Copied shared chat URL to clipboard!": "Freigabelink in die Zwischenablage kopiert!",
 	"Copied shared chat URL to clipboard!": "Freigabelink in die Zwischenablage kopiert!",
 	"Copy": "Kopieren",
 	"Copy": "Kopieren",
@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "{{name}} gelöscht",
 	"Deleted {{name}}": "{{name}} gelöscht",
 	"Description": "Beschreibung",
 	"Description": "Beschreibung",
 	"Didn't fully follow instructions": "Nicht genau den Answeisungen gefolgt",
 	"Didn't fully follow instructions": "Nicht genau den Answeisungen gefolgt",
+	"Disabled": "",
 	"Discover a function": "Entdecken Sie weitere Funktionen",
 	"Discover a function": "Entdecken Sie weitere Funktionen",
 	"Discover a model": "Entdecken Sie weitere Modelle",
 	"Discover a model": "Entdecken Sie weitere Modelle",
 	"Discover a prompt": "Entdecken Sie weitere Prompts",
 	"Discover a prompt": "Entdecken Sie weitere Prompts",
@@ -188,6 +189,8 @@
 	"Dismissible": "ausblendbar",
 	"Dismissible": "ausblendbar",
 	"Display Emoji in Call": "Emojis im Anruf anzeigen",
 	"Display Emoji in Call": "Emojis im Anruf anzeigen",
 	"Display the username instead of You in the Chat": "Soll \"Sie\" durch Ihren Benutzernamen ersetzt werden?",
 	"Display the username instead of You in the Chat": "Soll \"Sie\" durch Ihren Benutzernamen ersetzt werden?",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "Dokument",
 	"Document": "Dokument",
 	"Document Settings": "Dokumenteinstellungen",
 	"Document Settings": "Dokumenteinstellungen",
 	"Documentation": "Dokumentation",
 	"Documentation": "Dokumentation",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "stellt keine externen Verbindungen her, und Ihre Daten bleiben sicher auf Ihrem lokal gehosteten Server.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "stellt keine externen Verbindungen her, und Ihre Daten bleiben sicher auf Ihrem lokal gehosteten Server.",
 	"Don't Allow": "Verbieten",
 	"Don't Allow": "Verbieten",
 	"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.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "schlechter Schreibstil",
 	"Don't like the style": "schlechter Schreibstil",
 	"Done": "Erledigt",
 	"Done": "Erledigt",
 	"Download": "Exportieren",
 	"Download": "Exportieren",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "Community-Freigabe aktivieren",
 	"Enable Community Sharing": "Community-Freigabe aktivieren",
 	"Enable New Sign Ups": "Registrierung erlauben",
 	"Enable New Sign Ups": "Registrierung erlauben",
 	"Enable Web Search": "Websuche aktivieren",
 	"Enable Web Search": "Websuche aktivieren",
+	"Enabled": "",
 	"Engine": "Engine",
 	"Engine": "Engine",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Stellen Sie sicher, dass Ihre CSV-Datei 4 Spalten in dieser Reihenfolge enthält: Name, E-Mail, Passwort, Rolle.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Stellen Sie sicher, dass Ihre CSV-Datei 4 Spalten in dieser Reihenfolge enthält: Name, E-Mail, Passwort, Rolle.",
 	"Enter {{role}} message here": "Geben Sie die {{role}}-Nachricht hier ein",
 	"Enter {{role}} message here": "Geben Sie die {{role}}-Nachricht hier ein",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "Geben Sie den",
 	"Enter Serply API Key": "Geben Sie den",
 	"Enter Serpstack API Key": "Geben Sie den Serpstack-API-Schlüssel ein",
 	"Enter Serpstack API Key": "Geben Sie den Serpstack-API-Schlüssel ein",
 	"Enter stop sequence": "Stop-Sequenz eingeben",
 	"Enter stop sequence": "Stop-Sequenz eingeben",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "Geben Sie den Tavily-API-Schlüssel ein",
 	"Enter Tavily API Key": "Geben Sie den Tavily-API-Schlüssel ein",
 	"Enter Tika Server URL": "Geben Sie die Tika-Server-URL ein",
 	"Enter Tika Server URL": "Geben Sie die Tika-Server-URL ein",
 	"Enter Top K": "Geben Sie Top K ein",
 	"Enter Top K": "Geben Sie Top K ein",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "Geben Sie die URL ein (z. B. http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "Geben Sie die URL ein (z. B. http://localhost:11434)",
 	"Enter Your Email": "Geben Sie Ihre E-Mail-Adresse ein",
 	"Enter Your Email": "Geben Sie Ihre E-Mail-Adresse ein",
 	"Enter Your Full Name": "Geben Sie Ihren vollständigen Namen ein",
 	"Enter Your Full Name": "Geben Sie Ihren vollständigen Namen ein",
+	"Enter your message": "",
 	"Enter Your Password": "Geben Sie Ihr Passwort ein",
 	"Enter Your Password": "Geben Sie Ihr Passwort ein",
 	"Enter Your Role": "Geben Sie Ihre Rolle ein",
 	"Enter Your Role": "Geben Sie Ihre Rolle ein",
 	"Error": "Fehler",
 	"Error": "Fehler",
@@ -266,6 +274,7 @@
 	"File": "Datei",
 	"File": "Datei",
 	"File Mode": "Datei-Modus",
 	"File Mode": "Datei-Modus",
 	"File not found.": "Datei nicht gefunden.",
 	"File not found.": "Datei nicht gefunden.",
+	"Files": "",
 	"Filter is now globally disabled": "Filter ist jetzt global deaktiviert",
 	"Filter is now globally disabled": "Filter ist jetzt global deaktiviert",
 	"Filter is now globally enabled": "Filter ist jetzt global aktiviert",
 	"Filter is now globally enabled": "Filter ist jetzt global aktiviert",
 	"Filters": "Filter",
 	"Filters": "Filter",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "Frequenzstrafe",
 	"Frequency Penalty": "Frequenzstrafe",
 	"Function created successfully": "Funktion erfolgreich erstellt",
 	"Function created successfully": "Funktion erfolgreich erstellt",
 	"Function deleted successfully": "Funktion erfolgreich gelöscht",
 	"Function deleted successfully": "Funktion erfolgreich gelöscht",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "Funktion erfolgreich aktualisiert",
 	"Function updated successfully": "Funktion erfolgreich aktualisiert",
 	"Functions": "Funktionen",
 	"Functions": "Funktionen",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "Funktionen erfolgreich importiert",
 	"Functions imported successfully": "Funktionen erfolgreich importiert",
 	"General": "Allgemein",
 	"General": "Allgemein",
 	"General Settings": "Allgemeine Einstellungen",
 	"General Settings": "Allgemeine Einstellungen",
 	"Generate Image": "Bild erzeugen",
 	"Generate Image": "Bild erzeugen",
 	"Generating search query": "Suchanfrage wird erstellt",
 	"Generating search query": "Suchanfrage wird erstellt",
 	"Generation Info": "Generierungsinformationen",
 	"Generation Info": "Generierungsinformationen",
+	"Get up and running with": "",
 	"Global": "Global",
 	"Global": "Global",
 	"Good Response": "Gute Antwort",
 	"Good Response": "Gute Antwort",
 	"Google PSE API Key": "Google PSE-API-Schlüssel",
 	"Google PSE API Key": "Google PSE-API-Schlüssel",
@@ -298,6 +315,7 @@
 	"Hide Model": "Modell ausblenden",
 	"Hide Model": "Modell ausblenden",
 	"How can I help you today?": "Wie kann ich Ihnen heute helfen?",
 	"How can I help you today?": "Wie kann ich Ihnen heute helfen?",
 	"Hybrid Search": "Hybride Suche",
 	"Hybrid Search": "Hybride Suche",
+	"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.": "",
 	"Image Generation (Experimental)": "Bildgenerierung (experimentell)",
 	"Image Generation (Experimental)": "Bildgenerierung (experimentell)",
 	"Image Generation Engine": "Bildgenerierungs-Engine",
 	"Image Generation Engine": "Bildgenerierungs-Engine",
 	"Image Settings": "Bildeinstellungen",
 	"Image Settings": "Bildeinstellungen",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "Tastenkombinationen",
 	"Keyboard shortcuts": "Tastenkombinationen",
 	"Knowledge": "Wissen",
 	"Knowledge": "Wissen",
 	"Language": "Sprache",
 	"Language": "Sprache",
+	"large language models, locally.": "",
 	"Last Active": "Zuletzt aktiv",
 	"Last Active": "Zuletzt aktiv",
 	"Last Modified": "Zuletzt bearbeitet",
 	"Last Modified": "Zuletzt bearbeitet",
 	"Light": "Hell",
 	"Light": "Hell",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "Pipeline Valves",
 	"Pipelines Valves": "Pipeline Valves",
 	"Plain text (.txt)": "Nur Text (.txt)",
 	"Plain text (.txt)": "Nur Text (.txt)",
 	"Playground": "Testumgebung",
 	"Playground": "Testumgebung",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "Positive Einstellung",
 	"Positive attitude": "Positive Einstellung",
 	"Previous 30 days": "Vorherige 30 Tage",
 	"Previous 30 days": "Vorherige 30 Tage",
 	"Previous 7 days": "Vorherige 7 Tage",
 	"Previous 7 days": "Vorherige 7 Tage",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "Läuft",
 	"Running": "Läuft",
 	"Save": "Speichern",
 	"Save": "Speichern",
 	"Save & Create": "Erstellen",
 	"Save & Create": "Erstellen",
@@ -558,6 +579,8 @@
 	"Success": "Erfolg",
 	"Success": "Erfolg",
 	"Successfully updated.": "Erfolgreich aktualisiert.",
 	"Successfully updated.": "Erfolgreich aktualisiert.",
 	"Suggested": "Vorgeschlagen",
 	"Suggested": "Vorgeschlagen",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "System",
 	"System": "System",
 	"System Prompt": "System-Prompt",
 	"System Prompt": "System-Prompt",
 	"Tags": "Tags",
 	"Tags": "Tags",
@@ -570,6 +593,7 @@
 	"Text-to-Speech Engine": "Text-zu-Sprache-Engine",
 	"Text-to-Speech Engine": "Text-zu-Sprache-Engine",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Danke für Ihr Feedback!",
 	"Thanks for your feedback!": "Danke für Ihr Feedback!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Die Punktzahl sollte ein Wert zwischen 0,0 (0 %) und 1,0 (100 %) sein.",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Die Punktzahl sollte ein Wert zwischen 0,0 (0 %) und 1,0 (100 %) sein.",
 	"Theme": "Design",
 	"Theme": "Design",
 	"Thinking...": "Denke nach...",
 	"Thinking...": "Denke nach...",
@@ -603,7 +627,13 @@
 	"Tool deleted successfully": "Werkzeug erfolgreich gelöscht",
 	"Tool deleted successfully": "Werkzeug erfolgreich gelöscht",
 	"Tool imported successfully": "Werkzeug erfolgreich importiert",
 	"Tool imported successfully": "Werkzeug erfolgreich importiert",
 	"Tool updated successfully": "Werkzeug erfolgreich aktualisiert",
 	"Tool updated successfully": "Werkzeug erfolgreich aktualisiert",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "Werkzeuge",
 	"Tools": "Werkzeuge",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Trouble accessing Ollama?": "Probleme beim Zugriff auf Ollama?",
 	"Trouble accessing Ollama?": "Probleme beim Zugriff auf Ollama?",
@@ -645,6 +675,7 @@
 	"Version": "Version",
 	"Version": "Version",
 	"Voice": "Stimme",
 	"Voice": "Stimme",
 	"Warning": "Warnung",
 	"Warning": "Warnung",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Warnung: Wenn Sie das Einbettungsmodell aktualisieren oder ändern, müssen Sie alle Dokumente erneut importieren.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Warnung: Wenn Sie das Einbettungsmodell aktualisieren oder ändern, müssen Sie alle Dokumente erneut importieren.",
 	"Web": "Web",
 	"Web": "Web",
 	"Web API": "Web-API",
 	"Web API": "Web-API",
@@ -671,6 +702,7 @@
 	"You're a helpful assistant.": "Du bist ein hilfreicher Assistent.",
 	"You're a helpful assistant.": "Du bist ein hilfreicher Assistent.",
 	"You're now logged in.": "Sie sind jetzt eingeloggt.",
 	"You're now logged in.": "Sie sind jetzt eingeloggt.",
 	"Your account status is currently pending activation.": "Ihr Kontostatus ist derzeit ausstehend und wartet auf Aktivierung.",
 	"Your account status is currently pending activation.": "Ihr Kontostatus ist derzeit ausstehend und wartet auf Aktivierung.",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "YouTube",
 	"Youtube": "YouTube",
 	"Youtube Loader Settings": "YouTube-Ladeeinstellungen"
 	"Youtube Loader Settings": "YouTube-Ladeeinstellungen"
 }
 }

+ 32 - 0
src/lib/i18n/locales/dg-DG/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "",
 	"Deleted {{name}}": "",
 	"Description": "Description",
 	"Description": "Description",
 	"Didn't fully follow instructions": "",
 	"Didn't fully follow instructions": "",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "",
 	"Discover a model": "",
 	"Discover a prompt": "Discover a prompt",
 	"Discover a prompt": "Discover a prompt",
@@ -188,6 +189,8 @@
 	"Dismissible": "",
 	"Dismissible": "",
 	"Display Emoji in Call": "",
 	"Display Emoji in Call": "",
 	"Display the username instead of You in the Chat": "Display username instead of You in Chat",
 	"Display the username instead of You in the Chat": "Display username instead of You in Chat",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "Document",
 	"Document": "Document",
 	"Document Settings": "Document Settings",
 	"Document Settings": "Document Settings",
 	"Documentation": "",
 	"Documentation": "",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "does not connect external, data stays safe locally.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "does not connect external, data stays safe locally.",
 	"Don't Allow": "Don't Allow",
 	"Don't Allow": "Don't Allow",
 	"Don't have an account?": "No account? Much sad.",
 	"Don't have an account?": "No account? Much sad.",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "",
 	"Don't like the style": "",
 	"Done": "",
 	"Done": "",
 	"Download": "",
 	"Download": "",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "",
 	"Enable Community Sharing": "",
 	"Enable New Sign Ups": "Enable New Bark Ups",
 	"Enable New Sign Ups": "Enable New Bark Ups",
 	"Enable Web Search": "",
 	"Enable Web Search": "",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
 	"Enter {{role}} message here": "Enter {{role}} bork here",
 	"Enter {{role}} message here": "Enter {{role}} bork here",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "",
 	"Enter Serpstack API Key": "",
 	"Enter stop sequence": "Enter stop bark",
 	"Enter stop sequence": "Enter stop bark",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "",
 	"Enter Tavily API Key": "",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "Enter Top Wow",
 	"Enter Top K": "Enter Top Wow",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "Enter Your Dogemail",
 	"Enter Your Email": "Enter Your Dogemail",
 	"Enter Your Full Name": "Enter Your Full Wow",
 	"Enter Your Full Name": "Enter Your Full Wow",
+	"Enter your message": "",
 	"Enter Your Password": "Enter Your Barkword",
 	"Enter Your Password": "Enter Your Barkword",
 	"Enter Your Role": "",
 	"Enter Your Role": "",
 	"Error": "",
 	"Error": "",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "Bark Mode",
 	"File Mode": "Bark Mode",
 	"File not found.": "Bark not found.",
 	"File not found.": "Bark not found.",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "",
 	"Frequency Penalty": "",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "Woweral",
 	"General": "Woweral",
 	"General Settings": "General Doge Settings",
 	"General Settings": "General Doge Settings",
 	"Generate Image": "",
 	"Generate Image": "",
 	"Generating search query": "",
 	"Generating search query": "",
 	"Generation Info": "",
 	"Generation Info": "",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "",
 	"Good Response": "",
 	"Google PSE API Key": "",
 	"Google PSE API Key": "",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "How can I halp u today?",
 	"How can I help you today?": "How can I halp u today?",
 	"Hybrid Search": "",
 	"Hybrid Search": "",
+	"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
 	"Image Generation (Experimental)": "Image Wow (Much Experiment)",
 	"Image Generation (Experimental)": "Image Wow (Much Experiment)",
 	"Image Generation Engine": "Image Engine",
 	"Image Generation Engine": "Image Engine",
 	"Image Settings": "Settings for Wowmage",
 	"Image Settings": "Settings for Wowmage",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "Keyboard Barkcuts",
 	"Keyboard shortcuts": "Keyboard Barkcuts",
 	"Knowledge": "",
 	"Knowledge": "",
 	"Language": "Doge Speak",
 	"Language": "Doge Speak",
+	"large language models, locally.": "",
 	"Last Active": "",
 	"Last Active": "",
 	"Last Modified": "",
 	"Last Modified": "",
 	"Light": "Light",
 	"Light": "Light",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "",
 	"Pipelines Valves": "",
 	"Plain text (.txt)": "Plain text (.txt)",
 	"Plain text (.txt)": "Plain text (.txt)",
 	"Playground": "Playground",
 	"Playground": "Playground",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "",
 	"Positive attitude": "",
 	"Previous 30 days": "",
 	"Previous 30 days": "",
 	"Previous 7 days": "",
 	"Previous 7 days": "",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"RTL": "",
 	"RTL": "",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "",
 	"Running": "",
 	"Save": "Save much wow",
 	"Save": "Save much wow",
 	"Save & Create": "Save & Create much create",
 	"Save & Create": "Save & Create much create",
@@ -560,6 +581,8 @@
 	"Success": "Success very success",
 	"Success": "Success very success",
 	"Successfully updated.": "Successfully updated. Very updated.",
 	"Successfully updated.": "Successfully updated. Very updated.",
 	"Suggested": "",
 	"Suggested": "",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "System very system",
 	"System": "System very system",
 	"System Prompt": "System Prompt much prompt",
 	"System Prompt": "System Prompt much prompt",
 	"Tags": "Tags very tags",
 	"Tags": "Tags very tags",
@@ -572,6 +595,7 @@
 	"Text-to-Speech Engine": "Text-to-Speech Engine much speak",
 	"Text-to-Speech Engine": "Text-to-Speech Engine much speak",
 	"Tfs Z": "Tfs Z much Z",
 	"Tfs Z": "Tfs Z much Z",
 	"Thanks for your feedback!": "",
 	"Thanks for your feedback!": "",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "",
 	"Theme": "Theme much theme",
 	"Theme": "Theme much theme",
 	"Thinking...": "",
 	"Thinking...": "",
@@ -605,7 +629,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "",
 	"Tools": "",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Top K very top",
 	"Top K": "Top K very top",
 	"Top P": "Top P very top",
 	"Top P": "Top P very top",
 	"Trouble accessing Ollama?": "Trouble accessing Ollama? Much trouble?",
 	"Trouble accessing Ollama?": "Trouble accessing Ollama? Much trouble?",
@@ -647,6 +677,7 @@
 	"Version": "Version much version",
 	"Version": "Version much version",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "",
 	"Warning": "",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Web very web",
 	"Web": "Web very web",
 	"Web API": "",
 	"Web API": "",
@@ -673,6 +704,7 @@
 	"You're a helpful assistant.": "You're a helpful assistant. Much helpful.",
 	"You're a helpful assistant.": "You're a helpful assistant. Much helpful.",
 	"You're now logged in.": "You're now logged in. Much logged.",
 	"You're now logged in.": "You're now logged in. Much logged.",
 	"Your account status is currently pending activation.": "",
 	"Your account status is currently pending activation.": "",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "",
 	"Youtube": "",
 	"Youtube Loader Settings": ""
 	"Youtube Loader Settings": ""
 }
 }

+ 32 - 0
src/lib/i18n/locales/en-GB/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "",
 	"Deleted {{name}}": "",
 	"Description": "",
 	"Description": "",
 	"Didn't fully follow instructions": "",
 	"Didn't fully follow instructions": "",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "",
 	"Discover a model": "",
 	"Discover a prompt": "",
 	"Discover a prompt": "",
@@ -188,6 +189,8 @@
 	"Dismissible": "",
 	"Dismissible": "",
 	"Display Emoji in Call": "",
 	"Display Emoji in Call": "",
 	"Display the username instead of You in the Chat": "",
 	"Display the username instead of You in the Chat": "",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "",
 	"Document": "",
 	"Document Settings": "",
 	"Document Settings": "",
 	"Documentation": "",
 	"Documentation": "",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "",
 	"Don't Allow": "",
 	"Don't Allow": "",
 	"Don't have an account?": "",
 	"Don't have an account?": "",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "",
 	"Don't like the style": "",
 	"Done": "",
 	"Done": "",
 	"Download": "",
 	"Download": "",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "",
 	"Enable Community Sharing": "",
 	"Enable New Sign Ups": "",
 	"Enable New Sign Ups": "",
 	"Enable Web Search": "",
 	"Enable Web Search": "",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
 	"Enter {{role}} message here": "",
 	"Enter {{role}} message here": "",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "",
 	"Enter Serpstack API Key": "",
 	"Enter stop sequence": "",
 	"Enter stop sequence": "",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "",
 	"Enter Tavily API Key": "",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "",
 	"Enter Top K": "",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "",
 	"Enter Your Email": "",
 	"Enter Your Full Name": "",
 	"Enter Your Full Name": "",
+	"Enter your message": "",
 	"Enter Your Password": "",
 	"Enter Your Password": "",
 	"Enter Your Role": "",
 	"Enter Your Role": "",
 	"Error": "",
 	"Error": "",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "",
 	"File Mode": "",
 	"File not found.": "",
 	"File not found.": "",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "",
 	"Frequency Penalty": "",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "",
 	"General": "",
 	"General Settings": "",
 	"General Settings": "",
 	"Generate Image": "",
 	"Generate Image": "",
 	"Generating search query": "",
 	"Generating search query": "",
 	"Generation Info": "",
 	"Generation Info": "",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "",
 	"Good Response": "",
 	"Google PSE API Key": "",
 	"Google PSE API Key": "",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "",
 	"How can I help you today?": "",
 	"Hybrid Search": "",
 	"Hybrid Search": "",
+	"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
 	"Image Generation (Experimental)": "",
 	"Image Generation (Experimental)": "",
 	"Image Generation Engine": "",
 	"Image Generation Engine": "",
 	"Image Settings": "",
 	"Image Settings": "",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "",
 	"Keyboard shortcuts": "",
 	"Knowledge": "",
 	"Knowledge": "",
 	"Language": "",
 	"Language": "",
+	"large language models, locally.": "",
 	"Last Active": "",
 	"Last Active": "",
 	"Last Modified": "",
 	"Last Modified": "",
 	"Light": "",
 	"Light": "",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "",
 	"Pipelines Valves": "",
 	"Plain text (.txt)": "",
 	"Plain text (.txt)": "",
 	"Playground": "",
 	"Playground": "",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "",
 	"Positive attitude": "",
 	"Previous 30 days": "",
 	"Previous 30 days": "",
 	"Previous 7 days": "",
 	"Previous 7 days": "",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "",
 	"Rosé Pine": "",
 	"Rosé Pine Dawn": "",
 	"Rosé Pine Dawn": "",
 	"RTL": "",
 	"RTL": "",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "",
 	"Running": "",
 	"Save": "",
 	"Save": "",
 	"Save & Create": "",
 	"Save & Create": "",
@@ -558,6 +579,8 @@
 	"Success": "",
 	"Success": "",
 	"Successfully updated.": "",
 	"Successfully updated.": "",
 	"Suggested": "",
 	"Suggested": "",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "",
 	"System": "",
 	"System Prompt": "",
 	"System Prompt": "",
 	"Tags": "",
 	"Tags": "",
@@ -570,6 +593,7 @@
 	"Text-to-Speech Engine": "",
 	"Text-to-Speech Engine": "",
 	"Tfs Z": "",
 	"Tfs Z": "",
 	"Thanks for your feedback!": "",
 	"Thanks for your feedback!": "",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "",
 	"Theme": "",
 	"Theme": "",
 	"Thinking...": "",
 	"Thinking...": "",
@@ -603,7 +627,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "",
 	"Tools": "",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "",
 	"Top K": "",
 	"Top P": "",
 	"Top P": "",
 	"Trouble accessing Ollama?": "",
 	"Trouble accessing Ollama?": "",
@@ -645,6 +675,7 @@
 	"Version": "",
 	"Version": "",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "",
 	"Warning": "",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "",
 	"Web": "",
 	"Web API": "",
 	"Web API": "",
@@ -671,6 +702,7 @@
 	"You're a helpful assistant.": "",
 	"You're a helpful assistant.": "",
 	"You're now logged in.": "",
 	"You're now logged in.": "",
 	"Your account status is currently pending activation.": "",
 	"Your account status is currently pending activation.": "",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "",
 	"Youtube": "",
 	"Youtube Loader Settings": ""
 	"Youtube Loader Settings": ""
 }
 }

+ 32 - 0
src/lib/i18n/locales/en-US/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "",
 	"Deleted {{name}}": "",
 	"Description": "",
 	"Description": "",
 	"Didn't fully follow instructions": "",
 	"Didn't fully follow instructions": "",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "",
 	"Discover a model": "",
 	"Discover a prompt": "",
 	"Discover a prompt": "",
@@ -188,6 +189,8 @@
 	"Dismissible": "",
 	"Dismissible": "",
 	"Display Emoji in Call": "",
 	"Display Emoji in Call": "",
 	"Display the username instead of You in the Chat": "",
 	"Display the username instead of You in the Chat": "",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "",
 	"Document": "",
 	"Document Settings": "",
 	"Document Settings": "",
 	"Documentation": "",
 	"Documentation": "",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "",
 	"Don't Allow": "",
 	"Don't Allow": "",
 	"Don't have an account?": "",
 	"Don't have an account?": "",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "",
 	"Don't like the style": "",
 	"Done": "",
 	"Done": "",
 	"Download": "",
 	"Download": "",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "",
 	"Enable Community Sharing": "",
 	"Enable New Sign Ups": "",
 	"Enable New Sign Ups": "",
 	"Enable Web Search": "",
 	"Enable Web Search": "",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
 	"Enter {{role}} message here": "",
 	"Enter {{role}} message here": "",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "",
 	"Enter Serpstack API Key": "",
 	"Enter stop sequence": "",
 	"Enter stop sequence": "",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "",
 	"Enter Tavily API Key": "",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "",
 	"Enter Top K": "",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "",
 	"Enter Your Email": "",
 	"Enter Your Full Name": "",
 	"Enter Your Full Name": "",
+	"Enter your message": "",
 	"Enter Your Password": "",
 	"Enter Your Password": "",
 	"Enter Your Role": "",
 	"Enter Your Role": "",
 	"Error": "",
 	"Error": "",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "",
 	"File Mode": "",
 	"File not found.": "",
 	"File not found.": "",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "",
 	"Frequency Penalty": "",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "",
 	"General": "",
 	"General Settings": "",
 	"General Settings": "",
 	"Generate Image": "",
 	"Generate Image": "",
 	"Generating search query": "",
 	"Generating search query": "",
 	"Generation Info": "",
 	"Generation Info": "",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "",
 	"Good Response": "",
 	"Google PSE API Key": "",
 	"Google PSE API Key": "",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "",
 	"How can I help you today?": "",
 	"Hybrid Search": "",
 	"Hybrid Search": "",
+	"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
 	"Image Generation (Experimental)": "",
 	"Image Generation (Experimental)": "",
 	"Image Generation Engine": "",
 	"Image Generation Engine": "",
 	"Image Settings": "",
 	"Image Settings": "",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "",
 	"Keyboard shortcuts": "",
 	"Knowledge": "",
 	"Knowledge": "",
 	"Language": "",
 	"Language": "",
+	"large language models, locally.": "",
 	"Last Active": "",
 	"Last Active": "",
 	"Last Modified": "",
 	"Last Modified": "",
 	"Light": "",
 	"Light": "",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "",
 	"Pipelines Valves": "",
 	"Plain text (.txt)": "",
 	"Plain text (.txt)": "",
 	"Playground": "",
 	"Playground": "",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "",
 	"Positive attitude": "",
 	"Previous 30 days": "",
 	"Previous 30 days": "",
 	"Previous 7 days": "",
 	"Previous 7 days": "",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "",
 	"Rosé Pine": "",
 	"Rosé Pine Dawn": "",
 	"Rosé Pine Dawn": "",
 	"RTL": "",
 	"RTL": "",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "",
 	"Running": "",
 	"Save": "",
 	"Save": "",
 	"Save & Create": "",
 	"Save & Create": "",
@@ -558,6 +579,8 @@
 	"Success": "",
 	"Success": "",
 	"Successfully updated.": "",
 	"Successfully updated.": "",
 	"Suggested": "",
 	"Suggested": "",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "",
 	"System": "",
 	"System Prompt": "",
 	"System Prompt": "",
 	"Tags": "",
 	"Tags": "",
@@ -570,6 +593,7 @@
 	"Text-to-Speech Engine": "",
 	"Text-to-Speech Engine": "",
 	"Tfs Z": "",
 	"Tfs Z": "",
 	"Thanks for your feedback!": "",
 	"Thanks for your feedback!": "",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "",
 	"Theme": "",
 	"Theme": "",
 	"Thinking...": "",
 	"Thinking...": "",
@@ -603,7 +627,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "",
 	"Tools": "",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "",
 	"Top K": "",
 	"Top P": "",
 	"Top P": "",
 	"Trouble accessing Ollama?": "",
 	"Trouble accessing Ollama?": "",
@@ -645,6 +675,7 @@
 	"Version": "",
 	"Version": "",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "",
 	"Warning": "",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "",
 	"Web": "",
 	"Web API": "",
 	"Web API": "",
@@ -671,6 +702,7 @@
 	"You're a helpful assistant.": "",
 	"You're a helpful assistant.": "",
 	"You're now logged in.": "",
 	"You're now logged in.": "",
 	"Your account status is currently pending activation.": "",
 	"Your account status is currently pending activation.": "",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "",
 	"Youtube": "",
 	"Youtube Loader Settings": ""
 	"Youtube Loader Settings": ""
 }
 }

+ 32 - 0
src/lib/i18n/locales/es-ES/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "Eliminado {{nombre}}",
 	"Deleted {{name}}": "Eliminado {{nombre}}",
 	"Description": "Descripción",
 	"Description": "Descripción",
 	"Didn't fully follow instructions": "No siguió las instrucciones",
 	"Didn't fully follow instructions": "No siguió las instrucciones",
+	"Disabled": "",
 	"Discover a function": "Descubre una función",
 	"Discover a function": "Descubre una función",
 	"Discover a model": "Descubrir un modelo",
 	"Discover a model": "Descubrir un modelo",
 	"Discover a prompt": "Descubre un Prompt",
 	"Discover a prompt": "Descubre un Prompt",
@@ -188,6 +189,8 @@
 	"Dismissible": "Desestimable",
 	"Dismissible": "Desestimable",
 	"Display Emoji in Call": "Muestra Emoji en llamada",
 	"Display Emoji in Call": "Muestra Emoji en llamada",
 	"Display the username instead of You in the Chat": "Mostrar el nombre de usuario en lugar de Usted en el chat",
 	"Display the username instead of You in the Chat": "Mostrar el nombre de usuario en lugar de Usted en el chat",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "Documento",
 	"Document": "Documento",
 	"Document Settings": "Configuración del Documento",
 	"Document Settings": "Configuración del Documento",
 	"Documentation": "Documentación",
 	"Documentation": "Documentación",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "no realiza ninguna conexión externa y sus datos permanecen seguros en su servidor alojado localmente.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "no realiza ninguna conexión externa y sus datos permanecen seguros en su servidor alojado localmente.",
 	"Don't Allow": "No Permitir",
 	"Don't Allow": "No Permitir",
 	"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.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"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",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "Habilitar el uso compartido de la comunidad",
 	"Enable Community Sharing": "Habilitar el uso compartido de la comunidad",
 	"Enable New Sign Ups": "Habilitar Nuevos Registros",
 	"Enable New Sign Ups": "Habilitar Nuevos Registros",
 	"Enable Web Search": "Habilitar la búsqueda web",
 	"Enable Web Search": "Habilitar la búsqueda web",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"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": "Ingrese el mensaje {{role}} aquí",
 	"Enter {{role}} message here": "Ingrese el mensaje {{role}} aquí",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "Ingrese la clave API de Serply",
 	"Enter Serply API Key": "Ingrese la clave API de Serply",
 	"Enter Serpstack API Key": "Ingrese la clave API de Serpstack",
 	"Enter Serpstack API Key": "Ingrese la clave API de Serpstack",
 	"Enter stop sequence": "Ingrese la secuencia de parada",
 	"Enter stop sequence": "Ingrese la secuencia de parada",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "Ingrese la clave API de Tavily",
 	"Enter Tavily API Key": "Ingrese la clave API de Tavily",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "Ingrese el Top K",
 	"Enter Top K": "Ingrese el Top K",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "Ingrese la URL (p.ej., http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "Ingrese la URL (p.ej., http://localhost:11434)",
 	"Enter Your Email": "Ingrese su correo electrónico",
 	"Enter Your Email": "Ingrese su correo electrónico",
 	"Enter Your Full Name": "Ingrese su nombre completo",
 	"Enter Your Full Name": "Ingrese su nombre completo",
+	"Enter your message": "",
 	"Enter Your Password": "Ingrese su contraseña",
 	"Enter Your Password": "Ingrese su contraseña",
 	"Enter Your Role": "Ingrese su rol",
 	"Enter Your Role": "Ingrese su rol",
 	"Error": "Error",
 	"Error": "Error",
@@ -266,6 +274,7 @@
 	"File": "Archivo",
 	"File": "Archivo",
 	"File Mode": "Modo de archivo",
 	"File Mode": "Modo de archivo",
 	"File not found.": "Archivo no encontrado.",
 	"File not found.": "Archivo no encontrado.",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "Filtros",
 	"Filters": "Filtros",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "Penalización de frecuencia",
 	"Frequency Penalty": "Penalización de frecuencia",
 	"Function created successfully": "Función creada exitosamente",
 	"Function created successfully": "Función creada exitosamente",
 	"Function deleted successfully": "Función borrada exitosamente",
 	"Function deleted successfully": "Función borrada exitosamente",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "Función actualizada exitosamente",
 	"Function updated successfully": "Función actualizada exitosamente",
 	"Functions": "Funciones",
 	"Functions": "Funciones",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "Funciones importadas exitosamente",
 	"Functions imported successfully": "Funciones importadas exitosamente",
 	"General": "General",
 	"General": "General",
 	"General Settings": "Opciones Generales",
 	"General Settings": "Opciones Generales",
 	"Generate Image": "Generar imagen",
 	"Generate Image": "Generar imagen",
 	"Generating search query": "Generación de consultas de búsqueda",
 	"Generating search query": "Generación de consultas de búsqueda",
 	"Generation Info": "Información de Generación",
 	"Generation Info": "Información de Generación",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "Buena Respuesta",
 	"Good Response": "Buena Respuesta",
 	"Google PSE API Key": "Clave API de Google PSE",
 	"Google PSE API Key": "Clave API de Google PSE",
@@ -298,6 +315,7 @@
 	"Hide Model": "Esconder Modelo",
 	"Hide Model": "Esconder Modelo",
 	"How can I help you today?": "¿Cómo puedo ayudarte hoy?",
 	"How can I help you today?": "¿Cómo puedo ayudarte hoy?",
 	"Hybrid Search": "Búsqueda Híbrida",
 	"Hybrid Search": "Búsqueda 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.": "",
 	"Image Generation (Experimental)": "Generación de imágenes (experimental)",
 	"Image Generation (Experimental)": "Generación de imágenes (experimental)",
 	"Image Generation Engine": "Motor de generación de imágenes",
 	"Image Generation Engine": "Motor de generación de imágenes",
 	"Image Settings": "Ajustes de la Imágen",
 	"Image Settings": "Ajustes de la Imágen",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "Atajos de teclado",
 	"Keyboard shortcuts": "Atajos de teclado",
 	"Knowledge": "Conocimiento",
 	"Knowledge": "Conocimiento",
 	"Language": "Lenguaje",
 	"Language": "Lenguaje",
+	"large language models, locally.": "",
 	"Last Active": "Última Actividad",
 	"Last Active": "Última Actividad",
 	"Last Modified": "Modificado por última vez",
 	"Last Modified": "Modificado por última vez",
 	"Light": "Claro",
 	"Light": "Claro",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "Tuberías Válvulas",
 	"Pipelines Valves": "Tuberías Válvulas",
 	"Plain text (.txt)": "Texto plano (.txt)",
 	"Plain text (.txt)": "Texto plano (.txt)",
 	"Playground": "Patio de juegos",
 	"Playground": "Patio de juegos",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "Actitud positiva",
 	"Positive attitude": "Actitud positiva",
 	"Previous 30 days": "Últimos 30 días",
 	"Previous 30 days": "Últimos 30 días",
 	"Previous 7 days": "Últimos 7 días",
 	"Previous 7 days": "Últimos 7 días",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "Ejecutando",
 	"Running": "Ejecutando",
 	"Save": "Guardar",
 	"Save": "Guardar",
 	"Save & Create": "Guardar y Crear",
 	"Save & Create": "Guardar y Crear",
@@ -559,6 +580,8 @@
 	"Success": "Éxito",
 	"Success": "Éxito",
 	"Successfully updated.": "Actualizado exitosamente.",
 	"Successfully updated.": "Actualizado exitosamente.",
 	"Suggested": "Sugerido",
 	"Suggested": "Sugerido",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "Sistema",
 	"System": "Sistema",
 	"System Prompt": "Prompt del sistema",
 	"System Prompt": "Prompt del sistema",
 	"Tags": "Etiquetas",
 	"Tags": "Etiquetas",
@@ -571,6 +594,7 @@
 	"Text-to-Speech Engine": "Motor de texto a voz",
 	"Text-to-Speech Engine": "Motor de texto a voz",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "¡Gracias por tu retroalimentación!",
 	"Thanks for your feedback!": "¡Gracias por tu retroalimentación!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "El puntaje debe ser un valor entre 0.0 (0%) y 1.0 (100%).",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "El puntaje debe ser un valor entre 0.0 (0%) y 1.0 (100%).",
 	"Theme": "Tema",
 	"Theme": "Tema",
 	"Thinking...": "Pensando...",
 	"Thinking...": "Pensando...",
@@ -604,7 +628,13 @@
 	"Tool deleted successfully": "Herramienta eliminada con éxito",
 	"Tool deleted successfully": "Herramienta eliminada con éxito",
 	"Tool imported successfully": "Herramienta importada con éxito",
 	"Tool imported successfully": "Herramienta importada con éxito",
 	"Tool updated successfully": "Herramienta actualizada con éxito",
 	"Tool updated successfully": "Herramienta actualizada con éxito",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "Herramientas",
 	"Tools": "Herramientas",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Trouble accessing Ollama?": "¿Problemas para acceder a Ollama?",
 	"Trouble accessing Ollama?": "¿Problemas para acceder a Ollama?",
@@ -646,6 +676,7 @@
 	"Version": "Versión",
 	"Version": "Versión",
 	"Voice": "Voz",
 	"Voice": "Voz",
 	"Warning": "Advertencia",
 	"Warning": "Advertencia",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Advertencia: Si actualiza o cambia su modelo de inserción, necesitará volver a importar todos los documentos.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Advertencia: Si actualiza o cambia su modelo de inserción, necesitará volver a importar todos los documentos.",
 	"Web": "Web",
 	"Web": "Web",
 	"Web API": "API Web",
 	"Web API": "API Web",
@@ -672,6 +703,7 @@
 	"You're a helpful assistant.": "Usted es un asistente útil.",
 	"You're a helpful assistant.": "Usted es un asistente útil.",
 	"You're now logged in.": "Usted ahora está conectado.",
 	"You're now logged in.": "Usted ahora está conectado.",
 	"Your account status is currently pending activation.": "El estado de su cuenta actualmente se encuentra pendiente de activación.",
 	"Your account status is currently pending activation.": "El estado de su cuenta actualmente se encuentra pendiente de activación.",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "Youtube",
 	"Youtube": "Youtube",
 	"Youtube Loader Settings": "Configuración del cargador de Youtube"
 	"Youtube Loader Settings": "Configuración del cargador de Youtube"
 }
 }

+ 32 - 0
src/lib/i18n/locales/fa-IR/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "حذف شده {{name}}",
 	"Deleted {{name}}": "حذف شده {{name}}",
 	"Description": "توضیحات",
 	"Description": "توضیحات",
 	"Didn't fully follow instructions": "نمی تواند دستورالعمل را کامل پیگیری کند",
 	"Didn't fully follow instructions": "نمی تواند دستورالعمل را کامل پیگیری کند",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "کشف یک مدل",
 	"Discover a model": "کشف یک مدل",
 	"Discover a prompt": "یک اعلان را کشف کنید",
 	"Discover a prompt": "یک اعلان را کشف کنید",
@@ -188,6 +189,8 @@
 	"Dismissible": "",
 	"Dismissible": "",
 	"Display Emoji in Call": "",
 	"Display Emoji in Call": "",
 	"Display the username instead of You in the Chat": "نمایش نام کاربری به جای «شما» در چت",
 	"Display the username instead of You in the Chat": "نمایش نام کاربری به جای «شما» در چت",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "سند",
 	"Document": "سند",
 	"Document Settings": "تنظیمات سند",
 	"Document Settings": "تنظیمات سند",
 	"Documentation": "",
 	"Documentation": "",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "هیچ اتصال خارجی ایجاد نمی کند و داده های شما به طور ایمن در سرور میزبان محلی شما باقی می ماند.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "هیچ اتصال خارجی ایجاد نمی کند و داده های شما به طور ایمن در سرور میزبان محلی شما باقی می ماند.",
 	"Don't Allow": "اجازه نده",
 	"Don't Allow": "اجازه نده",
 	"Don't have an account?": "حساب کاربری ندارید؟",
 	"Don't have an account?": "حساب کاربری ندارید؟",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "نظری ندارید؟",
 	"Don't like the style": "نظری ندارید؟",
 	"Done": "",
 	"Done": "",
 	"Download": "دانلود کن",
 	"Download": "دانلود کن",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "فعالسازی اشتراک انجمن",
 	"Enable Community Sharing": "فعالسازی اشتراک انجمن",
 	"Enable New Sign Ups": "فعال کردن ثبت نام\u200cهای جدید",
 	"Enable New Sign Ups": "فعال کردن ثبت نام\u200cهای جدید",
 	"Enable Web Search": "فعالسازی جستجوی وب",
 	"Enable Web Search": "فعالسازی جستجوی وب",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "اطمینان حاصل کنید که فایل CSV شما شامل چهار ستون در این ترتیب است: نام، ایمیل، رمز عبور، نقش.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "اطمینان حاصل کنید که فایل CSV شما شامل چهار ستون در این ترتیب است: نام، ایمیل، رمز عبور، نقش.",
 	"Enter {{role}} message here": "پیام {{role}} را اینجا وارد کنید",
 	"Enter {{role}} message here": "پیام {{role}} را اینجا وارد کنید",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "کلید API Serpstack را وارد کنید",
 	"Enter Serpstack API Key": "کلید API Serpstack را وارد کنید",
 	"Enter stop sequence": "توالی توقف را وارد کنید",
 	"Enter stop sequence": "توالی توقف را وارد کنید",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "",
 	"Enter Tavily API Key": "",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "مقدار Top K را وارد کنید",
 	"Enter Top K": "مقدار Top K را وارد کنید",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "مقدار URL را وارد کنید (مثال http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "مقدار URL را وارد کنید (مثال http://localhost:11434)",
 	"Enter Your Email": "ایمیل خود را وارد کنید",
 	"Enter Your Email": "ایمیل خود را وارد کنید",
 	"Enter Your Full Name": "نام کامل خود را وارد کنید",
 	"Enter Your Full Name": "نام کامل خود را وارد کنید",
+	"Enter your message": "",
 	"Enter Your Password": "رمز عبور خود را وارد کنید",
 	"Enter Your Password": "رمز عبور خود را وارد کنید",
 	"Enter Your Role": "نقش خود را وارد کنید",
 	"Enter Your Role": "نقش خود را وارد کنید",
 	"Error": "خطا",
 	"Error": "خطا",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "حالت فایل",
 	"File Mode": "حالت فایل",
 	"File not found.": "فایل یافت نشد.",
 	"File not found.": "فایل یافت نشد.",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "مجازات فرکانس",
 	"Frequency Penalty": "مجازات فرکانس",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "عمومی",
 	"General": "عمومی",
 	"General Settings": "تنظیمات عمومی",
 	"General Settings": "تنظیمات عمومی",
 	"Generate Image": "",
 	"Generate Image": "",
 	"Generating search query": "در حال تولید پرسوجوی جستجو",
 	"Generating search query": "در حال تولید پرسوجوی جستجو",
 	"Generation Info": "اطلاعات تولید",
 	"Generation Info": "اطلاعات تولید",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "پاسخ خوب",
 	"Good Response": "پاسخ خوب",
 	"Google PSE API Key": "گوگل PSE API کلید",
 	"Google PSE API Key": "گوگل PSE API کلید",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "امروز چطور می توانم کمک تان کنم؟",
 	"How can I help you today?": "امروز چطور می توانم کمک تان کنم؟",
 	"Hybrid Search": "جستجوی همزمان",
 	"Hybrid Search": "جستجوی همزمان",
+	"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
 	"Image Generation (Experimental)": "تولید تصویر (آزمایشی)",
 	"Image Generation (Experimental)": "تولید تصویر (آزمایشی)",
 	"Image Generation Engine": "موتور تولید تصویر",
 	"Image Generation Engine": "موتور تولید تصویر",
 	"Image Settings": "تنظیمات تصویر",
 	"Image Settings": "تنظیمات تصویر",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "میانبرهای صفحه کلید",
 	"Keyboard shortcuts": "میانبرهای صفحه کلید",
 	"Knowledge": "",
 	"Knowledge": "",
 	"Language": "زبان",
 	"Language": "زبان",
+	"large language models, locally.": "",
 	"Last Active": "آخرین فعال",
 	"Last Active": "آخرین فعال",
 	"Last Modified": "",
 	"Last Modified": "",
 	"Light": "روشن",
 	"Light": "روشن",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "شیرالات خطوط لوله",
 	"Pipelines Valves": "شیرالات خطوط لوله",
 	"Plain text (.txt)": "متن ساده (.txt)",
 	"Plain text (.txt)": "متن ساده (.txt)",
 	"Playground": "زمین بازی",
 	"Playground": "زمین بازی",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "نظرات مثبت",
 	"Positive attitude": "نظرات مثبت",
 	"Previous 30 days": "30 روز قبل",
 	"Previous 30 days": "30 روز قبل",
 	"Previous 7 days": "7 روز قبل",
 	"Previous 7 days": "7 روز قبل",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "",
 	"Running": "",
 	"Save": "ذخیره",
 	"Save": "ذخیره",
 	"Save & Create": "ذخیره و ایجاد",
 	"Save & Create": "ذخیره و ایجاد",
@@ -558,6 +579,8 @@
 	"Success": "موفقیت",
 	"Success": "موفقیت",
 	"Successfully updated.": "با موفقیت به روز شد",
 	"Successfully updated.": "با موفقیت به روز شد",
 	"Suggested": "پیشنهادی",
 	"Suggested": "پیشنهادی",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "سیستم",
 	"System": "سیستم",
 	"System Prompt": "پرامپت سیستم",
 	"System Prompt": "پرامپت سیستم",
 	"Tags": "تگ\u200cها",
 	"Tags": "تگ\u200cها",
@@ -570,6 +593,7 @@
 	"Text-to-Speech Engine": "موتور تبدیل متن به گفتار",
 	"Text-to-Speech Engine": "موتور تبدیل متن به گفتار",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "با تشکر از بازخورد شما!",
 	"Thanks for your feedback!": "با تشکر از بازخورد شما!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "امتیاز باید یک مقدار بین 0.0 (0%) و 1.0 (100%) باشد.",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "امتیاز باید یک مقدار بین 0.0 (0%) و 1.0 (100%) باشد.",
 	"Theme": "قالب",
 	"Theme": "قالب",
 	"Thinking...": "",
 	"Thinking...": "",
@@ -603,7 +627,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "",
 	"Tools": "",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Trouble accessing Ollama?": "در دسترسی به اولاما مشکل دارید؟",
 	"Trouble accessing Ollama?": "در دسترسی به اولاما مشکل دارید؟",
@@ -645,6 +675,7 @@
 	"Version": "نسخه",
 	"Version": "نسخه",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "هشدار",
 	"Warning": "هشدار",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "هشدار: اگر شما به روز کنید یا تغییر دهید مدل شما، باید تمام سند ها را مجددا وارد کنید.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "هشدار: اگر شما به روز کنید یا تغییر دهید مدل شما، باید تمام سند ها را مجددا وارد کنید.",
 	"Web": "وب",
 	"Web": "وب",
 	"Web API": "",
 	"Web API": "",
@@ -671,6 +702,7 @@
 	"You're a helpful assistant.": "تو یک دستیار سودمند هستی.",
 	"You're a helpful assistant.": "تو یک دستیار سودمند هستی.",
 	"You're now logged in.": "شما اکنون وارد شده\u200cاید.",
 	"You're now logged in.": "شما اکنون وارد شده\u200cاید.",
 	"Your account status is currently pending activation.": "",
 	"Your account status is currently pending activation.": "",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "یوتیوب",
 	"Youtube": "یوتیوب",
 	"Youtube Loader Settings": "تنظیمات لودر یوتیوب"
 	"Youtube Loader Settings": "تنظیمات لودر یوتیوب"
 }
 }

+ 32 - 0
src/lib/i18n/locales/fi-FI/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "Poistettu {{nimi}}",
 	"Deleted {{name}}": "Poistettu {{nimi}}",
 	"Description": "Kuvaus",
 	"Description": "Kuvaus",
 	"Didn't fully follow instructions": "Ei noudattanut ohjeita täysin",
 	"Didn't fully follow instructions": "Ei noudattanut ohjeita täysin",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "Tutustu malliin",
 	"Discover a model": "Tutustu malliin",
 	"Discover a prompt": "Löydä kehote",
 	"Discover a prompt": "Löydä kehote",
@@ -188,6 +189,8 @@
 	"Dismissible": "",
 	"Dismissible": "",
 	"Display Emoji in Call": "",
 	"Display Emoji in Call": "",
 	"Display the username instead of You in the Chat": "Näytä käyttäjänimi keskustelussa",
 	"Display the username instead of You in the Chat": "Näytä käyttäjänimi keskustelussa",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "Asiakirja",
 	"Document": "Asiakirja",
 	"Document Settings": "Asiakirja-asetukset",
 	"Document Settings": "Asiakirja-asetukset",
 	"Documentation": "",
 	"Documentation": "",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "ei tee ulkoisia yhteyksiä, ja tietosi pysyvät turvallisesti paikallisesti isännöidyllä palvelimellasi.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "ei tee ulkoisia yhteyksiä, ja tietosi pysyvät turvallisesti paikallisesti isännöidyllä palvelimellasi.",
 	"Don't Allow": "Älä salli",
 	"Don't Allow": "Älä salli",
 	"Don't have an account?": "Eikö sinulla ole tiliä?",
 	"Don't have an account?": "Eikö sinulla ole tiliä?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "En pidä tyylistä",
 	"Don't like the style": "En pidä tyylistä",
 	"Done": "",
 	"Done": "",
 	"Download": "Lataa",
 	"Download": "Lataa",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "Ota yhteisön jakaminen käyttöön",
 	"Enable Community Sharing": "Ota yhteisön jakaminen käyttöön",
 	"Enable New Sign Ups": "Salli uudet rekisteröitymiset",
 	"Enable New Sign Ups": "Salli uudet rekisteröitymiset",
 	"Enable Web Search": "Ota verkkohaku käyttöön",
 	"Enable Web Search": "Ota verkkohaku käyttöön",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Varmista, että CSV-tiedostossasi on 4 saraketta seuraavassa järjestyksessä: Nimi, Sähköposti, Salasana, Rooli.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Varmista, että CSV-tiedostossasi on 4 saraketta seuraavassa järjestyksessä: Nimi, Sähköposti, Salasana, Rooli.",
 	"Enter {{role}} message here": "Kirjoita {{role}} viesti tähän",
 	"Enter {{role}} message here": "Kirjoita {{role}} viesti tähän",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Anna Serpstack API -avain",
 	"Enter Serpstack API Key": "Anna Serpstack API -avain",
 	"Enter stop sequence": "Syötä lopetussekvenssi",
 	"Enter stop sequence": "Syötä lopetussekvenssi",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "",
 	"Enter Tavily API Key": "",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "Syötä Top K",
 	"Enter Top K": "Syötä Top K",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "Syötä URL (esim. http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "Syötä URL (esim. http://localhost:11434)",
 	"Enter Your Email": "Syötä sähköpostiosoitteesi",
 	"Enter Your Email": "Syötä sähköpostiosoitteesi",
 	"Enter Your Full Name": "Syötä koko nimesi",
 	"Enter Your Full Name": "Syötä koko nimesi",
+	"Enter your message": "",
 	"Enter Your Password": "Syötä salasanasi",
 	"Enter Your Password": "Syötä salasanasi",
 	"Enter Your Role": "Syötä roolisi",
 	"Enter Your Role": "Syötä roolisi",
 	"Error": "Virhe",
 	"Error": "Virhe",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "Tiedostotila",
 	"File Mode": "Tiedostotila",
 	"File not found.": "Tiedostoa ei löytynyt.",
 	"File not found.": "Tiedostoa ei löytynyt.",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "Taajuussakko",
 	"Frequency Penalty": "Taajuussakko",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "Yleinen",
 	"General": "Yleinen",
 	"General Settings": "Yleisasetukset",
 	"General Settings": "Yleisasetukset",
 	"Generate Image": "",
 	"Generate Image": "",
 	"Generating search query": "Hakukyselyn luominen",
 	"Generating search query": "Hakukyselyn luominen",
 	"Generation Info": "Generointitiedot",
 	"Generation Info": "Generointitiedot",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "Hyvä vastaus",
 	"Good Response": "Hyvä vastaus",
 	"Google PSE API Key": "Google PSE API -avain",
 	"Google PSE API Key": "Google PSE API -avain",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "Kuinka voin auttaa tänään?",
 	"How can I help you today?": "Kuinka voin auttaa tänään?",
 	"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.": "",
 	"Image Generation (Experimental)": "Kuvagenerointi (kokeellinen)",
 	"Image Generation (Experimental)": "Kuvagenerointi (kokeellinen)",
 	"Image Generation Engine": "Kuvagenerointimoottori",
 	"Image Generation Engine": "Kuvagenerointimoottori",
 	"Image Settings": "Kuva-asetukset",
 	"Image Settings": "Kuva-asetukset",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "Pikanäppäimet",
 	"Keyboard shortcuts": "Pikanäppäimet",
 	"Knowledge": "",
 	"Knowledge": "",
 	"Language": "Kieli",
 	"Language": "Kieli",
+	"large language models, locally.": "",
 	"Last Active": "Viimeksi aktiivinen",
 	"Last Active": "Viimeksi aktiivinen",
 	"Last Modified": "",
 	"Last Modified": "",
 	"Light": "Vaalea",
 	"Light": "Vaalea",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "Putkistot Venttiilit",
 	"Pipelines Valves": "Putkistot Venttiilit",
 	"Plain text (.txt)": "Pelkkä teksti (.txt)",
 	"Plain text (.txt)": "Pelkkä teksti (.txt)",
 	"Playground": "Leikkipaikka",
 	"Playground": "Leikkipaikka",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "Positiivinen asenne",
 	"Positive attitude": "Positiivinen asenne",
 	"Previous 30 days": "Edelliset 30 päivää",
 	"Previous 30 days": "Edelliset 30 päivää",
 	"Previous 7 days": "Edelliset 7 päivää",
 	"Previous 7 days": "Edelliset 7 päivää",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Rosee-mänty",
 	"Rosé Pine": "Rosee-mänty",
 	"Rosé Pine Dawn": "Aamuinen Rosee-mänty",
 	"Rosé Pine Dawn": "Aamuinen Rosee-mänty",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "",
 	"Running": "",
 	"Save": "Tallenna",
 	"Save": "Tallenna",
 	"Save & Create": "Tallenna ja luo",
 	"Save & Create": "Tallenna ja luo",
@@ -558,6 +579,8 @@
 	"Success": "Onnistui",
 	"Success": "Onnistui",
 	"Successfully updated.": "Päivitetty onnistuneesti.",
 	"Successfully updated.": "Päivitetty onnistuneesti.",
 	"Suggested": "Suositeltu",
 	"Suggested": "Suositeltu",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "Järjestelmä",
 	"System": "Järjestelmä",
 	"System Prompt": "Järjestelmäkehote",
 	"System Prompt": "Järjestelmäkehote",
 	"Tags": "Tagit",
 	"Tags": "Tagit",
@@ -570,6 +593,7 @@
 	"Text-to-Speech Engine": "Puhemoottori",
 	"Text-to-Speech Engine": "Puhemoottori",
 	"Tfs Z": "TFS Z",
 	"Tfs Z": "TFS Z",
 	"Thanks for your feedback!": "Kiitos palautteestasi!",
 	"Thanks for your feedback!": "Kiitos palautteestasi!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Pisteytyksen tulee olla arvo välillä 0.0 (0%) ja 1.0 (100%).",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Pisteytyksen tulee olla arvo välillä 0.0 (0%) ja 1.0 (100%).",
 	"Theme": "Teema",
 	"Theme": "Teema",
 	"Thinking...": "",
 	"Thinking...": "",
@@ -603,7 +627,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "",
 	"Tools": "",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Trouble accessing Ollama?": "Ongelmia Ollama-yhteydessä?",
 	"Trouble accessing Ollama?": "Ongelmia Ollama-yhteydessä?",
@@ -645,6 +675,7 @@
 	"Version": "Versio",
 	"Version": "Versio",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "Varoitus",
 	"Warning": "Varoitus",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Varoitus: Jos päivität tai vaihdat upotusmallia, sinun on tuotava kaikki asiakirjat uudelleen.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Varoitus: Jos päivität tai vaihdat upotusmallia, sinun on tuotava kaikki asiakirjat uudelleen.",
 	"Web": "Web",
 	"Web": "Web",
 	"Web API": "",
 	"Web API": "",
@@ -671,6 +702,7 @@
 	"You're a helpful assistant.": "Olet avulias apulainen.",
 	"You're a helpful assistant.": "Olet avulias apulainen.",
 	"You're now logged in.": "Olet nyt kirjautunut sisään.",
 	"You're now logged in.": "Olet nyt kirjautunut sisään.",
 	"Your account status is currently pending activation.": "",
 	"Your account status is currently pending activation.": "",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "Youtube",
 	"Youtube": "Youtube",
 	"Youtube Loader Settings": "Youtube Loader-asetukset"
 	"Youtube Loader Settings": "Youtube Loader-asetukset"
 }
 }

+ 32 - 0
src/lib/i18n/locales/fr-CA/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "Supprimé {{name}}",
 	"Deleted {{name}}": "Supprimé {{name}}",
 	"Description": "Description",
 	"Description": "Description",
 	"Didn't fully follow instructions": "N'a pas entièrement respecté les instructions",
 	"Didn't fully follow instructions": "N'a pas entièrement respecté les instructions",
+	"Disabled": "",
 	"Discover a function": "Découvrez une fonction",
 	"Discover a function": "Découvrez une fonction",
 	"Discover a model": "Découvrir un modèle",
 	"Discover a model": "Découvrir un modèle",
 	"Discover a prompt": "Découvrir une suggestion",
 	"Discover a prompt": "Découvrir une suggestion",
@@ -188,6 +189,8 @@
 	"Dismissible": "Fermeture",
 	"Dismissible": "Fermeture",
 	"Display Emoji in Call": "Afficher les emojis pendant l'appel",
 	"Display Emoji in Call": "Afficher les emojis pendant l'appel",
 	"Display the username instead of You in the Chat": "Afficher le nom d'utilisateur à la place de \"Vous\" dans le Chat",
 	"Display the username instead of You in the Chat": "Afficher le nom d'utilisateur à la place de \"Vous\" dans le Chat",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "Document",
 	"Document": "Document",
 	"Document Settings": "Paramètres du document",
 	"Document Settings": "Paramètres du document",
 	"Documentation": "Documentation",
 	"Documentation": "Documentation",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "ne fait aucune connexion externe et garde vos données en sécurité sur votre serveur local.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "ne fait aucune connexion externe et garde vos données en sécurité sur votre serveur local.",
 	"Don't Allow": "Ne pas autoriser",
 	"Don't Allow": "Ne pas autoriser",
 	"Don't have an account?": "Vous n'avez pas de compte ?",
 	"Don't have an account?": "Vous n'avez pas de compte ?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "N'apprécie pas le style",
 	"Don't like the style": "N'apprécie pas le style",
 	"Done": "Terminé",
 	"Done": "Terminé",
 	"Download": "Télécharger",
 	"Download": "Télécharger",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "Activer le partage communautaire",
 	"Enable Community Sharing": "Activer le partage communautaire",
 	"Enable New Sign Ups": "Activer les nouvelles inscriptions",
 	"Enable New Sign Ups": "Activer les nouvelles inscriptions",
 	"Enable Web Search": "Activer la recherche sur le Web",
 	"Enable Web Search": "Activer la recherche sur le Web",
+	"Enabled": "",
 	"Engine": "Moteur",
 	"Engine": "Moteur",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Vérifiez que votre fichier CSV comprenne les 4 colonnes dans cet ordre : Name, Email, Password, Role.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Vérifiez que votre fichier CSV comprenne les 4 colonnes dans cet ordre : Name, Email, Password, Role.",
 	"Enter {{role}} message here": "Entrez le message {{role}} ici",
 	"Enter {{role}} message here": "Entrez le message {{role}} ici",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "Entrez la clé API Serply",
 	"Enter Serply API Key": "Entrez la clé API Serply",
 	"Enter Serpstack API Key": "Entrez la clé API Serpstack",
 	"Enter Serpstack API Key": "Entrez la clé API Serpstack",
 	"Enter stop sequence": "Entrez la séquence d'arrêt",
 	"Enter stop sequence": "Entrez la séquence d'arrêt",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "Entrez la clé API Tavily",
 	"Enter Tavily API Key": "Entrez la clé API Tavily",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "Entrez les Top K",
 	"Enter Top K": "Entrez les Top K",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "Entrez l'URL (par ex. http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "Entrez l'URL (par ex. http://localhost:11434)",
 	"Enter Your Email": "Entrez votre adresse e-mail",
 	"Enter Your Email": "Entrez votre adresse e-mail",
 	"Enter Your Full Name": "Entrez votre nom complet",
 	"Enter Your Full Name": "Entrez votre nom complet",
+	"Enter your message": "",
 	"Enter Your Password": "Entrez votre mot de passe",
 	"Enter Your Password": "Entrez votre mot de passe",
 	"Enter Your Role": "Entrez votre rôle",
 	"Enter Your Role": "Entrez votre rôle",
 	"Error": "Erreur",
 	"Error": "Erreur",
@@ -266,6 +274,7 @@
 	"File": "Fichier",
 	"File": "Fichier",
 	"File Mode": "Mode fichier",
 	"File Mode": "Mode fichier",
 	"File not found.": "Fichier introuvable.",
 	"File not found.": "Fichier introuvable.",
+	"Files": "",
 	"Filter is now globally disabled": "Le filtre est maintenant désactivé globalement",
 	"Filter is now globally disabled": "Le filtre est maintenant désactivé globalement",
 	"Filter is now globally enabled": "Le filtre est désormais activé globalement",
 	"Filter is now globally enabled": "Le filtre est désormais activé globalement",
 	"Filters": "Filtres",
 	"Filters": "Filtres",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "Pénalité de fréquence",
 	"Frequency Penalty": "Pénalité de fréquence",
 	"Function created successfully": "La fonction a été créée avec succès",
 	"Function created successfully": "La fonction a été créée avec succès",
 	"Function deleted successfully": "Fonction supprimée avec succès",
 	"Function deleted successfully": "Fonction supprimée avec succès",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "La fonction a été mise à jour avec succès",
 	"Function updated successfully": "La fonction a été mise à jour avec succès",
 	"Functions": "Fonctions",
 	"Functions": "Fonctions",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "Fonctions importées avec succès",
 	"Functions imported successfully": "Fonctions importées avec succès",
 	"General": "Général",
 	"General": "Général",
 	"General Settings": "Paramètres Généraux",
 	"General Settings": "Paramètres Généraux",
 	"Generate Image": "Générer une image",
 	"Generate Image": "Générer une image",
 	"Generating search query": "Génération d'une requête de recherche",
 	"Generating search query": "Génération d'une requête de recherche",
 	"Generation Info": "Informations sur la génération",
 	"Generation Info": "Informations sur la génération",
+	"Get up and running with": "",
 	"Global": "Mondial",
 	"Global": "Mondial",
 	"Good Response": "Bonne réponse",
 	"Good Response": "Bonne réponse",
 	"Google PSE API Key": "Clé API Google PSE",
 	"Google PSE API Key": "Clé API Google PSE",
@@ -298,6 +315,7 @@
 	"Hide Model": "Masquer le modèle",
 	"Hide Model": "Masquer le modèle",
 	"How can I help you today?": "Comment puis-je vous être utile aujourd'hui ?",
 	"How can I help you today?": "Comment puis-je vous être utile aujourd'hui ?",
 	"Hybrid Search": "Recherche hybride",
 	"Hybrid Search": "Recherche hybride",
+	"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.": "",
 	"Image Generation (Experimental)": "Génération d'images (expérimental)",
 	"Image Generation (Experimental)": "Génération d'images (expérimental)",
 	"Image Generation Engine": "Moteur de génération d'images",
 	"Image Generation Engine": "Moteur de génération d'images",
 	"Image Settings": "Paramètres de l'image",
 	"Image Settings": "Paramètres de l'image",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "Raccourcis clavier",
 	"Keyboard shortcuts": "Raccourcis clavier",
 	"Knowledge": "Connaissance",
 	"Knowledge": "Connaissance",
 	"Language": "Langue",
 	"Language": "Langue",
+	"large language models, locally.": "",
 	"Last Active": "Dernière activité",
 	"Last Active": "Dernière activité",
 	"Last Modified": "Dernière modification",
 	"Last Modified": "Dernière modification",
 	"Light": "Lumineux",
 	"Light": "Lumineux",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "Vannes de Pipelines",
 	"Pipelines Valves": "Vannes de Pipelines",
 	"Plain text (.txt)": "Texte simple (.txt)",
 	"Plain text (.txt)": "Texte simple (.txt)",
 	"Playground": "Aire de jeux",
 	"Playground": "Aire de jeux",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "Attitude positive",
 	"Positive attitude": "Attitude positive",
 	"Previous 30 days": "30 derniers jours",
 	"Previous 30 days": "30 derniers jours",
 	"Previous 7 days": "7 derniers jours",
 	"Previous 7 days": "7 derniers jours",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Pin rosé",
 	"Rosé Pine": "Pin rosé",
 	"Rosé Pine Dawn": "Aube de Pin Rosé",
 	"Rosé Pine Dawn": "Aube de Pin Rosé",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "Courir",
 	"Running": "Courir",
 	"Save": "Enregistrer",
 	"Save": "Enregistrer",
 	"Save & Create": "Enregistrer & Créer",
 	"Save & Create": "Enregistrer & Créer",
@@ -559,6 +580,8 @@
 	"Success": "Réussite",
 	"Success": "Réussite",
 	"Successfully updated.": "Mise à jour réussie.",
 	"Successfully updated.": "Mise à jour réussie.",
 	"Suggested": "Sugéré",
 	"Suggested": "Sugéré",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "Système",
 	"System": "Système",
 	"System Prompt": "Prompt du système",
 	"System Prompt": "Prompt du système",
 	"Tags": "Balises",
 	"Tags": "Balises",
@@ -571,6 +594,7 @@
 	"Text-to-Speech Engine": "Moteur de synthèse vocale",
 	"Text-to-Speech Engine": "Moteur de synthèse vocale",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Merci pour vos commentaires !",
 	"Thanks for your feedback!": "Merci pour vos commentaires !",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Le score doit être une valeur comprise entre 0,0 (0\u00a0%) et 1,0 (100\u00a0%).",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Le score doit être une valeur comprise entre 0,0 (0\u00a0%) et 1,0 (100\u00a0%).",
 	"Theme": "Thème",
 	"Theme": "Thème",
 	"Thinking...": "En train de réfléchir...",
 	"Thinking...": "En train de réfléchir...",
@@ -604,7 +628,13 @@
 	"Tool deleted successfully": "Outil supprimé avec succès",
 	"Tool deleted successfully": "Outil supprimé avec succès",
 	"Tool imported successfully": "Outil importé avec succès",
 	"Tool imported successfully": "Outil importé avec succès",
 	"Tool updated successfully": "L'outil a été mis à jour avec succès",
 	"Tool updated successfully": "L'outil a été mis à jour avec succès",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "Outils",
 	"Tools": "Outils",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Trouble accessing Ollama?": "Rencontrez-vous des difficultés pour accéder à Ollama ?",
 	"Trouble accessing Ollama?": "Rencontrez-vous des difficultés pour accéder à Ollama ?",
@@ -646,6 +676,7 @@
 	"Version": "Version améliorée",
 	"Version": "Version améliorée",
 	"Voice": "Voix",
 	"Voice": "Voix",
 	"Warning": "Avertissement !",
 	"Warning": "Avertissement !",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Avertissement : Si vous mettez à jour ou modifiez votre modèle d'encodage, vous devrez réimporter tous les documents.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Avertissement : Si vous mettez à jour ou modifiez votre modèle d'encodage, vous devrez réimporter tous les documents.",
 	"Web": "Web",
 	"Web": "Web",
 	"Web API": "API Web",
 	"Web API": "API Web",
@@ -672,6 +703,7 @@
 	"You're a helpful assistant.": "Vous êtes un assistant serviable.",
 	"You're a helpful assistant.": "Vous êtes un assistant serviable.",
 	"You're now logged in.": "Vous êtes désormais connecté.",
 	"You're now logged in.": "Vous êtes désormais connecté.",
 	"Your account status is currently pending activation.": "Votre statut de compte est actuellement en attente d'activation.",
 	"Your account status is currently pending activation.": "Votre statut de compte est actuellement en attente d'activation.",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "YouTube",
 	"Youtube": "YouTube",
 	"Youtube Loader Settings": "Paramètres de l'outil de téléchargement YouTube"
 	"Youtube Loader Settings": "Paramètres de l'outil de téléchargement YouTube"
 }
 }

+ 32 - 0
src/lib/i18n/locales/fr-FR/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "Supprimé {{name}}",
 	"Deleted {{name}}": "Supprimé {{name}}",
 	"Description": "Description",
 	"Description": "Description",
 	"Didn't fully follow instructions": "N'a pas entièrement respecté les instructions",
 	"Didn't fully follow instructions": "N'a pas entièrement respecté les instructions",
+	"Disabled": "",
 	"Discover a function": "Découvrez une fonction",
 	"Discover a function": "Découvrez une fonction",
 	"Discover a model": "Découvrir un modèle",
 	"Discover a model": "Découvrir un modèle",
 	"Discover a prompt": "Découvrir une suggestion",
 	"Discover a prompt": "Découvrir une suggestion",
@@ -188,6 +189,8 @@
 	"Dismissible": "Fermeture",
 	"Dismissible": "Fermeture",
 	"Display Emoji in Call": "Afficher les emojis pendant l'appel",
 	"Display Emoji in Call": "Afficher les emojis pendant l'appel",
 	"Display the username instead of You in the Chat": "Afficher le nom d'utilisateur à la place de \"Vous\" dans le Chat",
 	"Display the username instead of You in the Chat": "Afficher le nom d'utilisateur à la place de \"Vous\" dans le Chat",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "Document",
 	"Document": "Document",
 	"Document Settings": "Paramètres du document",
 	"Document Settings": "Paramètres du document",
 	"Documentation": "Documentation",
 	"Documentation": "Documentation",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "ne fait aucune connexion externe et garde vos données en sécurité sur votre serveur local.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "ne fait aucune connexion externe et garde vos données en sécurité sur votre serveur local.",
 	"Don't Allow": "Ne pas autoriser",
 	"Don't Allow": "Ne pas autoriser",
 	"Don't have an account?": "Vous n'avez pas de compte ?",
 	"Don't have an account?": "Vous n'avez pas de compte ?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "N'apprécie pas le style",
 	"Don't like the style": "N'apprécie pas le style",
 	"Done": "Terminé",
 	"Done": "Terminé",
 	"Download": "Télécharger",
 	"Download": "Télécharger",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "Activer le partage communautaire",
 	"Enable Community Sharing": "Activer le partage communautaire",
 	"Enable New Sign Ups": "Activer les nouvelles inscriptions",
 	"Enable New Sign Ups": "Activer les nouvelles inscriptions",
 	"Enable Web Search": "Activer la recherche web",
 	"Enable Web Search": "Activer la recherche web",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Vérifiez que votre fichier CSV comprenne les 4 colonnes dans cet ordre : Name, Email, Password, Role.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Vérifiez que votre fichier CSV comprenne les 4 colonnes dans cet ordre : Name, Email, Password, Role.",
 	"Enter {{role}} message here": "Entrez le message {{role}} ici",
 	"Enter {{role}} message here": "Entrez le message {{role}} ici",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "Entrez la clé API Serply",
 	"Enter Serply API Key": "Entrez la clé API Serply",
 	"Enter Serpstack API Key": "Entrez la clé API Serpstack",
 	"Enter Serpstack API Key": "Entrez la clé API Serpstack",
 	"Enter stop sequence": "Entrez la séquence d'arrêt",
 	"Enter stop sequence": "Entrez la séquence d'arrêt",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "Entrez la clé API Tavily",
 	"Enter Tavily API Key": "Entrez la clé API Tavily",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "Entrez les Top K",
 	"Enter Top K": "Entrez les Top K",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "Entrez l'URL (par ex. http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "Entrez l'URL (par ex. http://localhost:11434)",
 	"Enter Your Email": "Entrez votre adresse e-mail",
 	"Enter Your Email": "Entrez votre adresse e-mail",
 	"Enter Your Full Name": "Entrez votre nom complet",
 	"Enter Your Full Name": "Entrez votre nom complet",
+	"Enter your message": "",
 	"Enter Your Password": "Entrez votre mot de passe",
 	"Enter Your Password": "Entrez votre mot de passe",
 	"Enter Your Role": "Entrez votre rôle",
 	"Enter Your Role": "Entrez votre rôle",
 	"Error": "Erreur",
 	"Error": "Erreur",
@@ -266,6 +274,7 @@
 	"File": "Fichier",
 	"File": "Fichier",
 	"File Mode": "Mode fichier",
 	"File Mode": "Mode fichier",
 	"File not found.": "Fichier introuvable.",
 	"File not found.": "Fichier introuvable.",
+	"Files": "",
 	"Filter is now globally disabled": "Le filtre est maintenant désactivé globalement",
 	"Filter is now globally disabled": "Le filtre est maintenant désactivé globalement",
 	"Filter is now globally enabled": "Le filtre est désormais activé globalement",
 	"Filter is now globally enabled": "Le filtre est désormais activé globalement",
 	"Filters": "Filtres",
 	"Filters": "Filtres",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "Pénalité de fréquence",
 	"Frequency Penalty": "Pénalité de fréquence",
 	"Function created successfully": "La fonction a été créée avec succès",
 	"Function created successfully": "La fonction a été créée avec succès",
 	"Function deleted successfully": "Fonction supprimée avec succès",
 	"Function deleted successfully": "Fonction supprimée avec succès",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "La fonction a été mise à jour avec succès",
 	"Function updated successfully": "La fonction a été mise à jour avec succès",
 	"Functions": "Fonctions",
 	"Functions": "Fonctions",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "Fonctions importées avec succès",
 	"Functions imported successfully": "Fonctions importées avec succès",
 	"General": "Général",
 	"General": "Général",
 	"General Settings": "Paramètres Généraux",
 	"General Settings": "Paramètres Généraux",
 	"Generate Image": "Générer une image",
 	"Generate Image": "Générer une image",
 	"Generating search query": "Génération d'une requête de recherche",
 	"Generating search query": "Génération d'une requête de recherche",
 	"Generation Info": "Informations sur la génération",
 	"Generation Info": "Informations sur la génération",
+	"Get up and running with": "",
 	"Global": "Mondial",
 	"Global": "Mondial",
 	"Good Response": "Bonne réponse",
 	"Good Response": "Bonne réponse",
 	"Google PSE API Key": "Clé API Google PSE",
 	"Google PSE API Key": "Clé API Google PSE",
@@ -298,6 +315,7 @@
 	"Hide Model": "Masquer le modèle",
 	"Hide Model": "Masquer le modèle",
 	"How can I help you today?": "Comment puis-je vous être utile aujourd'hui ?",
 	"How can I help you today?": "Comment puis-je vous être utile aujourd'hui ?",
 	"Hybrid Search": "Recherche hybride",
 	"Hybrid Search": "Recherche hybride",
+	"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.": "",
 	"Image Generation (Experimental)": "Génération d'images (expérimental)",
 	"Image Generation (Experimental)": "Génération d'images (expérimental)",
 	"Image Generation Engine": "Moteur de génération d'images",
 	"Image Generation Engine": "Moteur de génération d'images",
 	"Image Settings": "Paramètres de l'image",
 	"Image Settings": "Paramètres de l'image",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "Raccourcis clavier",
 	"Keyboard shortcuts": "Raccourcis clavier",
 	"Knowledge": "Connaissance",
 	"Knowledge": "Connaissance",
 	"Language": "Langue",
 	"Language": "Langue",
+	"large language models, locally.": "",
 	"Last Active": "Dernière activité",
 	"Last Active": "Dernière activité",
 	"Last Modified": "Dernière modification",
 	"Last Modified": "Dernière modification",
 	"Light": "Lumineux",
 	"Light": "Lumineux",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "Vannes de Pipelines",
 	"Pipelines Valves": "Vannes de Pipelines",
 	"Plain text (.txt)": "Texte simple (.txt)",
 	"Plain text (.txt)": "Texte simple (.txt)",
 	"Playground": "Aire de jeux",
 	"Playground": "Aire de jeux",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "Attitude positive",
 	"Positive attitude": "Attitude positive",
 	"Previous 30 days": "30 derniers jours",
 	"Previous 30 days": "30 derniers jours",
 	"Previous 7 days": "7 derniers jours",
 	"Previous 7 days": "7 derniers jours",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Pin rosé",
 	"Rosé Pine": "Pin rosé",
 	"Rosé Pine Dawn": "Aube de Pin Rosé",
 	"Rosé Pine Dawn": "Aube de Pin Rosé",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "Courir",
 	"Running": "Courir",
 	"Save": "Enregistrer",
 	"Save": "Enregistrer",
 	"Save & Create": "Enregistrer & Créer",
 	"Save & Create": "Enregistrer & Créer",
@@ -559,6 +580,8 @@
 	"Success": "Réussite",
 	"Success": "Réussite",
 	"Successfully updated.": "Mise à jour réussie.",
 	"Successfully updated.": "Mise à jour réussie.",
 	"Suggested": "Sugéré",
 	"Suggested": "Sugéré",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "Système",
 	"System": "Système",
 	"System Prompt": "Prompt du système",
 	"System Prompt": "Prompt du système",
 	"Tags": "Balises",
 	"Tags": "Balises",
@@ -571,6 +594,7 @@
 	"Text-to-Speech Engine": "Moteur de synthèse vocale",
 	"Text-to-Speech Engine": "Moteur de synthèse vocale",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Merci pour vos commentaires !",
 	"Thanks for your feedback!": "Merci pour vos commentaires !",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Le score doit être une valeur comprise entre 0,0 (0\u00a0%) et 1,0 (100\u00a0%).",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Le score doit être une valeur comprise entre 0,0 (0\u00a0%) et 1,0 (100\u00a0%).",
 	"Theme": "Thème",
 	"Theme": "Thème",
 	"Thinking...": "En train de réfléchir...",
 	"Thinking...": "En train de réfléchir...",
@@ -604,7 +628,13 @@
 	"Tool deleted successfully": "Outil supprimé avec succès",
 	"Tool deleted successfully": "Outil supprimé avec succès",
 	"Tool imported successfully": "Outil importé avec succès",
 	"Tool imported successfully": "Outil importé avec succès",
 	"Tool updated successfully": "L'outil a été mis à jour avec succès",
 	"Tool updated successfully": "L'outil a été mis à jour avec succès",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "Outils",
 	"Tools": "Outils",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Trouble accessing Ollama?": "Rencontrez-vous des difficultés pour accéder à Ollama ?",
 	"Trouble accessing Ollama?": "Rencontrez-vous des difficultés pour accéder à Ollama ?",
@@ -646,6 +676,7 @@
 	"Version": "Version améliorée",
 	"Version": "Version améliorée",
 	"Voice": "Voix",
 	"Voice": "Voix",
 	"Warning": "Avertissement !",
 	"Warning": "Avertissement !",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Avertissement : Si vous mettez à jour ou modifiez votre modèle d'encodage, vous devrez réimporter tous les documents.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Avertissement : Si vous mettez à jour ou modifiez votre modèle d'encodage, vous devrez réimporter tous les documents.",
 	"Web": "Web",
 	"Web": "Web",
 	"Web API": "API Web",
 	"Web API": "API Web",
@@ -672,6 +703,7 @@
 	"You're a helpful assistant.": "Vous êtes un assistant serviable.",
 	"You're a helpful assistant.": "Vous êtes un assistant serviable.",
 	"You're now logged in.": "Vous êtes désormais connecté.",
 	"You're now logged in.": "Vous êtes désormais connecté.",
 	"Your account status is currently pending activation.": "Votre statut de compte est actuellement en attente d'activation.",
 	"Your account status is currently pending activation.": "Votre statut de compte est actuellement en attente d'activation.",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "YouTube",
 	"Youtube": "YouTube",
 	"Youtube Loader Settings": "Paramètres de l'outil de téléchargement YouTube"
 	"Youtube Loader Settings": "Paramètres de l'outil de téléchargement YouTube"
 }
 }

+ 32 - 0
src/lib/i18n/locales/he-IL/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "נמחק {{name}}",
 	"Deleted {{name}}": "נמחק {{name}}",
 	"Description": "תיאור",
 	"Description": "תיאור",
 	"Didn't fully follow instructions": "לא עקב אחרי ההוראות באופן מלא",
 	"Didn't fully follow instructions": "לא עקב אחרי ההוראות באופן מלא",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "גלה מודל",
 	"Discover a model": "גלה מודל",
 	"Discover a prompt": "גלה פקודה",
 	"Discover a prompt": "גלה פקודה",
@@ -188,6 +189,8 @@
 	"Dismissible": "",
 	"Dismissible": "",
 	"Display Emoji in Call": "",
 	"Display Emoji in Call": "",
 	"Display the username instead of You in the Chat": "הצג את שם המשתמש במקום 'אתה' בצ'אט",
 	"Display the username instead of You in the Chat": "הצג את שם המשתמש במקום 'אתה' בצ'אט",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "מסמך",
 	"Document": "מסמך",
 	"Document Settings": "הגדרות מסמך",
 	"Document Settings": "הגדרות מסמך",
 	"Documentation": "",
 	"Documentation": "",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "לא מבצע חיבורים חיצוניים, והנתונים שלך נשמרים באופן מאובטח בשרת המקומי שלך.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "לא מבצע חיבורים חיצוניים, והנתונים שלך נשמרים באופן מאובטח בשרת המקומי שלך.",
 	"Don't Allow": "אל תאפשר",
 	"Don't Allow": "אל תאפשר",
 	"Don't have an account?": "אין לך חשבון?",
 	"Don't have an account?": "אין לך חשבון?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "לא אוהב את הסגנון",
 	"Don't like the style": "לא אוהב את הסגנון",
 	"Done": "",
 	"Done": "",
 	"Download": "הורד",
 	"Download": "הורד",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "הפיכת שיתוף קהילה לזמין",
 	"Enable Community Sharing": "הפיכת שיתוף קהילה לזמין",
 	"Enable New Sign Ups": "אפשר הרשמות חדשות",
 	"Enable New Sign Ups": "אפשר הרשמות חדשות",
 	"Enable Web Search": "הפיכת חיפוש באינטרנט לזמין",
 	"Enable Web Search": "הפיכת חיפוש באינטרנט לזמין",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "ודא שקובץ ה-CSV שלך כולל 4 עמודות בסדר הבא: שם, דוא\"ל, סיסמה, תפקיד.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "ודא שקובץ ה-CSV שלך כולל 4 עמודות בסדר הבא: שם, דוא\"ל, סיסמה, תפקיד.",
 	"Enter {{role}} message here": "הזן הודעת {{role}} כאן",
 	"Enter {{role}} message here": "הזן הודעת {{role}} כאן",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "הזן מפתח API של Serpstack",
 	"Enter Serpstack API Key": "הזן מפתח API של Serpstack",
 	"Enter stop sequence": "הזן רצף עצירה",
 	"Enter stop sequence": "הזן רצף עצירה",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "",
 	"Enter Tavily API Key": "",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "הזן Top K",
 	"Enter Top K": "הזן Top K",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "הזן כתובת URL (למשל http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "הזן כתובת URL (למשל http://localhost:11434)",
 	"Enter Your Email": "הזן את דוא\"ל שלך",
 	"Enter Your Email": "הזן את דוא\"ל שלך",
 	"Enter Your Full Name": "הזן את שמך המלא",
 	"Enter Your Full Name": "הזן את שמך המלא",
+	"Enter your message": "",
 	"Enter Your Password": "הזן את הסיסמה שלך",
 	"Enter Your Password": "הזן את הסיסמה שלך",
 	"Enter Your Role": "הזן את התפקיד שלך",
 	"Enter Your Role": "הזן את התפקיד שלך",
 	"Error": "שגיאה",
 	"Error": "שגיאה",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "מצב קובץ",
 	"File Mode": "מצב קובץ",
 	"File not found.": "הקובץ לא נמצא.",
 	"File not found.": "הקובץ לא נמצא.",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "עונש תדירות",
 	"Frequency Penalty": "עונש תדירות",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "כללי",
 	"General": "כללי",
 	"General Settings": "הגדרות כלליות",
 	"General Settings": "הגדרות כלליות",
 	"Generate Image": "",
 	"Generate Image": "",
 	"Generating search query": "יצירת שאילתת חיפוש",
 	"Generating search query": "יצירת שאילתת חיפוש",
 	"Generation Info": "מידע על היצירה",
 	"Generation Info": "מידע על היצירה",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "תגובה טובה",
 	"Good Response": "תגובה טובה",
 	"Google PSE API Key": "מפתח API של Google PSE",
 	"Google PSE API Key": "מפתח API של Google PSE",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "כיצד אוכל לעזור לך היום?",
 	"How can I help you today?": "כיצד אוכל לעזור לך היום?",
 	"Hybrid Search": "חיפוש היברידי",
 	"Hybrid Search": "חיפוש היברידי",
+	"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
 	"Image Generation (Experimental)": "יצירת תמונות (ניסיוני)",
 	"Image Generation (Experimental)": "יצירת תמונות (ניסיוני)",
 	"Image Generation Engine": "מנוע יצירת תמונות",
 	"Image Generation Engine": "מנוע יצירת תמונות",
 	"Image Settings": "הגדרות תמונה",
 	"Image Settings": "הגדרות תמונה",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "קיצורי מקלדת",
 	"Keyboard shortcuts": "קיצורי מקלדת",
 	"Knowledge": "",
 	"Knowledge": "",
 	"Language": "שפה",
 	"Language": "שפה",
+	"large language models, locally.": "",
 	"Last Active": "פעיל לאחרונה",
 	"Last Active": "פעיל לאחרונה",
 	"Last Modified": "",
 	"Last Modified": "",
 	"Light": "בהיר",
 	"Light": "בהיר",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "צינורות שסתומים",
 	"Pipelines Valves": "צינורות שסתומים",
 	"Plain text (.txt)": "טקסט פשוט (.txt)",
 	"Plain text (.txt)": "טקסט פשוט (.txt)",
 	"Playground": "אזור משחקים",
 	"Playground": "אזור משחקים",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "גישה חיובית",
 	"Positive attitude": "גישה חיובית",
 	"Previous 30 days": "30 הימים הקודמים",
 	"Previous 30 days": "30 הימים הקודמים",
 	"Previous 7 days": "7 הימים הקודמים",
 	"Previous 7 days": "7 הימים הקודמים",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "",
 	"Running": "",
 	"Save": "שמור",
 	"Save": "שמור",
 	"Save & Create": "שמור וצור",
 	"Save & Create": "שמור וצור",
@@ -559,6 +580,8 @@
 	"Success": "הצלחה",
 	"Success": "הצלחה",
 	"Successfully updated.": "עדכון הצלחה.",
 	"Successfully updated.": "עדכון הצלחה.",
 	"Suggested": "מומלץ",
 	"Suggested": "מומלץ",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "מערכת",
 	"System": "מערכת",
 	"System Prompt": "תגובת מערכת",
 	"System Prompt": "תגובת מערכת",
 	"Tags": "תגיות",
 	"Tags": "תגיות",
@@ -571,6 +594,7 @@
 	"Text-to-Speech Engine": "מנוע טקסט לדיבור",
 	"Text-to-Speech Engine": "מנוע טקסט לדיבור",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "תודה על המשוב שלך!",
 	"Thanks for your feedback!": "תודה על המשוב שלך!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "ציון צריך להיות ערך בין 0.0 (0%) ל-1.0 (100%)",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "ציון צריך להיות ערך בין 0.0 (0%) ל-1.0 (100%)",
 	"Theme": "נושא",
 	"Theme": "נושא",
 	"Thinking...": "",
 	"Thinking...": "",
@@ -604,7 +628,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "",
 	"Tools": "",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Trouble accessing Ollama?": "קשה לגשת לOllama?",
 	"Trouble accessing Ollama?": "קשה לגשת לOllama?",
@@ -646,6 +676,7 @@
 	"Version": "גרסה",
 	"Version": "גרסה",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "אזהרה",
 	"Warning": "אזהרה",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "אזהרה: אם תעדכן או תשנה את מודל ההטבעה שלך, יהיה עליך לייבא מחדש את כל המסמכים.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "אזהרה: אם תעדכן או תשנה את מודל ההטבעה שלך, יהיה עליך לייבא מחדש את כל המסמכים.",
 	"Web": "רשת",
 	"Web": "רשת",
 	"Web API": "",
 	"Web API": "",
@@ -672,6 +703,7 @@
 	"You're a helpful assistant.": "אתה עוזר מועיל.",
 	"You're a helpful assistant.": "אתה עוזר מועיל.",
 	"You're now logged in.": "כעת אתה מחובר.",
 	"You're now logged in.": "כעת אתה מחובר.",
 	"Your account status is currently pending activation.": "",
 	"Your account status is currently pending activation.": "",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "Youtube",
 	"Youtube": "Youtube",
 	"Youtube Loader Settings": "הגדרות Youtube Loader"
 	"Youtube Loader Settings": "הגדרות Youtube Loader"
 }
 }

+ 32 - 0
src/lib/i18n/locales/hi-IN/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "{{name}} हटा दिया गया",
 	"Deleted {{name}}": "{{name}} हटा दिया गया",
 	"Description": "विवरण",
 	"Description": "विवरण",
 	"Didn't fully follow instructions": "निर्देशों का पूरी तरह से पालन नहीं किया",
 	"Didn't fully follow instructions": "निर्देशों का पूरी तरह से पालन नहीं किया",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "एक मॉडल की खोज करें",
 	"Discover a model": "एक मॉडल की खोज करें",
 	"Discover a prompt": "प्रॉम्प्ट खोजें",
 	"Discover a prompt": "प्रॉम्प्ट खोजें",
@@ -188,6 +189,8 @@
 	"Dismissible": "",
 	"Dismissible": "",
 	"Display Emoji in Call": "",
 	"Display Emoji in Call": "",
 	"Display the username instead of You in the Chat": "चैट में 'आप' के स्थान पर उपयोगकर्ता नाम प्रदर्शित करें",
 	"Display the username instead of You in the Chat": "चैट में 'आप' के स्थान पर उपयोगकर्ता नाम प्रदर्शित करें",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "दस्तावेज़",
 	"Document": "दस्तावेज़",
 	"Document Settings": "दस्तावेज़ सेटिंग्स",
 	"Document Settings": "दस्तावेज़ सेटिंग्स",
 	"Documentation": "",
 	"Documentation": "",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "कोई बाहरी कनेक्शन नहीं बनाता है, और आपका डेटा आपके स्थानीय रूप से होस्ट किए गए सर्वर पर सुरक्षित रूप से रहता है।",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "कोई बाहरी कनेक्शन नहीं बनाता है, और आपका डेटा आपके स्थानीय रूप से होस्ट किए गए सर्वर पर सुरक्षित रूप से रहता है।",
 	"Don't Allow": "अनुमति न दें",
 	"Don't Allow": "अनुमति न दें",
 	"Don't have an account?": "कोई खाता नहीं है?",
 	"Don't have an account?": "कोई खाता नहीं है?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "शैली पसंद नहीं है",
 	"Don't like the style": "शैली पसंद नहीं है",
 	"Done": "",
 	"Done": "",
 	"Download": "डाउनलोड",
 	"Download": "डाउनलोड",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "समुदाय साझाकरण सक्षम करें",
 	"Enable Community Sharing": "समुदाय साझाकरण सक्षम करें",
 	"Enable New Sign Ups": "नए साइन अप सक्रिय करें",
 	"Enable New Sign Ups": "नए साइन अप सक्रिय करें",
 	"Enable Web Search": "वेब खोज सक्षम करें",
 	"Enable Web Search": "वेब खोज सक्षम करें",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "सुनिश्चित करें कि आपकी CSV फ़ाइल में इस क्रम में 4 कॉलम शामिल हैं: नाम, ईमेल, पासवर्ड, भूमिका।",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "सुनिश्चित करें कि आपकी CSV फ़ाइल में इस क्रम में 4 कॉलम शामिल हैं: नाम, ईमेल, पासवर्ड, भूमिका।",
 	"Enter {{role}} message here": "यहां {{role}} संदेश दर्ज करें",
 	"Enter {{role}} message here": "यहां {{role}} संदेश दर्ज करें",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "सर्पस्टैक एपीआई कुंजी दर्ज करें",
 	"Enter Serpstack API Key": "सर्पस्टैक एपीआई कुंजी दर्ज करें",
 	"Enter stop sequence": "स्टॉप अनुक्रम दर्ज करें",
 	"Enter stop sequence": "स्टॉप अनुक्रम दर्ज करें",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "",
 	"Enter Tavily API Key": "",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "शीर्ष K दर्ज करें",
 	"Enter Top K": "शीर्ष K दर्ज करें",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "यूआरएल दर्ज करें (उदा. http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "यूआरएल दर्ज करें (उदा. http://localhost:11434)",
 	"Enter Your Email": "अपना ईमेल दर्ज करें",
 	"Enter Your Email": "अपना ईमेल दर्ज करें",
 	"Enter Your Full Name": "अपना पूरा नाम भरें",
 	"Enter Your Full Name": "अपना पूरा नाम भरें",
+	"Enter your message": "",
 	"Enter Your Password": "अपना पासवर्ड भरें",
 	"Enter Your Password": "अपना पासवर्ड भरें",
 	"Enter Your Role": "अपनी भूमिका दर्ज करें",
 	"Enter Your Role": "अपनी भूमिका दर्ज करें",
 	"Error": "चूक",
 	"Error": "चूक",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "फ़ाइल मोड",
 	"File Mode": "फ़ाइल मोड",
 	"File not found.": "फ़ाइल प्राप्त नहीं हुई।",
 	"File not found.": "फ़ाइल प्राप्त नहीं हुई।",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "फ्रीक्वेंसी पेनल्टी",
 	"Frequency Penalty": "फ्रीक्वेंसी पेनल्टी",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "सामान्य",
 	"General": "सामान्य",
 	"General Settings": "सामान्य सेटिंग्स",
 	"General Settings": "सामान्य सेटिंग्स",
 	"Generate Image": "",
 	"Generate Image": "",
 	"Generating search query": "खोज क्वेरी जनरेट करना",
 	"Generating search query": "खोज क्वेरी जनरेट करना",
 	"Generation Info": "जनरेशन की जानकारी",
 	"Generation Info": "जनरेशन की जानकारी",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "अच्छी प्रतिक्रिया",
 	"Good Response": "अच्छी प्रतिक्रिया",
 	"Google PSE API Key": "Google PSE API कुंजी",
 	"Google PSE API Key": "Google PSE API कुंजी",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "आज मैं आपकी कैसे मदद कर सकता हूँ?",
 	"How can I help you today?": "आज मैं आपकी कैसे मदद कर सकता हूँ?",
 	"Hybrid Search": "हाइब्रिड खोज",
 	"Hybrid Search": "हाइब्रिड खोज",
+	"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
 	"Image Generation (Experimental)": "छवि निर्माण (प्रायोगिक)",
 	"Image Generation (Experimental)": "छवि निर्माण (प्रायोगिक)",
 	"Image Generation Engine": "छवि निर्माण इंजन",
 	"Image Generation Engine": "छवि निर्माण इंजन",
 	"Image Settings": "छवि सेटिंग्स",
 	"Image Settings": "छवि सेटिंग्स",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "कीबोर्ड शॉर्टकट",
 	"Keyboard shortcuts": "कीबोर्ड शॉर्टकट",
 	"Knowledge": "",
 	"Knowledge": "",
 	"Language": "भाषा",
 	"Language": "भाषा",
+	"large language models, locally.": "",
 	"Last Active": "पिछली बार सक्रिय",
 	"Last Active": "पिछली बार सक्रिय",
 	"Last Modified": "",
 	"Last Modified": "",
 	"Light": "सुन",
 	"Light": "सुन",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "पाइपलाइन वाल्व",
 	"Pipelines Valves": "पाइपलाइन वाल्व",
 	"Plain text (.txt)": "सादा पाठ (.txt)",
 	"Plain text (.txt)": "सादा पाठ (.txt)",
 	"Playground": "कार्यक्षेत्र",
 	"Playground": "कार्यक्षेत्र",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "सकारात्मक रवैया",
 	"Positive attitude": "सकारात्मक रवैया",
 	"Previous 30 days": "पिछले 30 दिन",
 	"Previous 30 days": "पिछले 30 दिन",
 	"Previous 7 days": "पिछले 7 दिन",
 	"Previous 7 days": "पिछले 7 दिन",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "रोसे पिन",
 	"Rosé Pine": "रोसे पिन",
 	"Rosé Pine Dawn": "रोसे पिन डेन",
 	"Rosé Pine Dawn": "रोसे पिन डेन",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "",
 	"Running": "",
 	"Save": "सहेजें",
 	"Save": "सहेजें",
 	"Save & Create": "सहेजें और बनाएं",
 	"Save & Create": "सहेजें और बनाएं",
@@ -558,6 +579,8 @@
 	"Success": "संपन्न",
 	"Success": "संपन्न",
 	"Successfully updated.": "सफलतापूर्वक उत्परिवर्तित।",
 	"Successfully updated.": "सफलतापूर्वक उत्परिवर्तित।",
 	"Suggested": "सुझावी",
 	"Suggested": "सुझावी",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "सिस्टम",
 	"System": "सिस्टम",
 	"System Prompt": "सिस्टम प्रॉम्प्ट",
 	"System Prompt": "सिस्टम प्रॉम्प्ट",
 	"Tags": "टैग",
 	"Tags": "टैग",
@@ -570,6 +593,7 @@
 	"Text-to-Speech Engine": "टेक्स्ट-टू-स्पीच इंजन",
 	"Text-to-Speech Engine": "टेक्स्ट-टू-स्पीच इंजन",
 	"Tfs Z": "टफ्स Z",
 	"Tfs Z": "टफ्स Z",
 	"Thanks for your feedback!": "आपकी प्रतिक्रिया के लिए धन्यवाद!",
 	"Thanks for your feedback!": "आपकी प्रतिक्रिया के लिए धन्यवाद!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "स्कोर का मान 0.0 (0%) और 1.0 (100%) के बीच होना चाहिए।",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "स्कोर का मान 0.0 (0%) और 1.0 (100%) के बीच होना चाहिए।",
 	"Theme": "थीम",
 	"Theme": "थीम",
 	"Thinking...": "",
 	"Thinking...": "",
@@ -603,7 +627,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "",
 	"Tools": "",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "शीर्ष  K",
 	"Top K": "शीर्ष  K",
 	"Top P": "शीर्ष  P",
 	"Top P": "शीर्ष  P",
 	"Trouble accessing Ollama?": "Ollama तक पहुँचने में परेशानी हो रही है?",
 	"Trouble accessing Ollama?": "Ollama तक पहुँचने में परेशानी हो रही है?",
@@ -645,6 +675,7 @@
 	"Version": "संस्करण",
 	"Version": "संस्करण",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "चेतावनी",
 	"Warning": "चेतावनी",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "चेतावनी: यदि आप अपने एम्बेडिंग मॉडल को अपडेट या बदलते हैं, तो आपको सभी दस्तावेज़ों को फिर से आयात करने की आवश्यकता होगी।",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "चेतावनी: यदि आप अपने एम्बेडिंग मॉडल को अपडेट या बदलते हैं, तो आपको सभी दस्तावेज़ों को फिर से आयात करने की आवश्यकता होगी।",
 	"Web": "वेब",
 	"Web": "वेब",
 	"Web API": "",
 	"Web API": "",
@@ -671,6 +702,7 @@
 	"You're a helpful assistant.": "आप एक सहायक सहायक हैं",
 	"You're a helpful assistant.": "आप एक सहायक सहायक हैं",
 	"You're now logged in.": "अब आप लॉग इन हो गए हैं",
 	"You're now logged in.": "अब आप लॉग इन हो गए हैं",
 	"Your account status is currently pending activation.": "",
 	"Your account status is currently pending activation.": "",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "Youtube",
 	"Youtube": "Youtube",
 	"Youtube Loader Settings": "यूट्यूब लोडर सेटिंग्स"
 	"Youtube Loader Settings": "यूट्यूब लोडर सेटिंग्स"
 }
 }

+ 32 - 0
src/lib/i18n/locales/hr-HR/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "Izbrisano {{name}}",
 	"Deleted {{name}}": "Izbrisano {{name}}",
 	"Description": "Opis",
 	"Description": "Opis",
 	"Didn't fully follow instructions": "Nije u potpunosti slijedio upute",
 	"Didn't fully follow instructions": "Nije u potpunosti slijedio upute",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "Otkrijte model",
 	"Discover a model": "Otkrijte model",
 	"Discover a prompt": "Otkrijte prompt",
 	"Discover a prompt": "Otkrijte prompt",
@@ -188,6 +189,8 @@
 	"Dismissible": "Odbaciti",
 	"Dismissible": "Odbaciti",
 	"Display Emoji in Call": "",
 	"Display Emoji in Call": "",
 	"Display the username instead of You in the Chat": "Prikaži korisničko ime umjesto Vas u razgovoru",
 	"Display the username instead of You in the Chat": "Prikaži korisničko ime umjesto Vas u razgovoru",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "Dokument",
 	"Document": "Dokument",
 	"Document Settings": "Postavke dokumenta",
 	"Document Settings": "Postavke dokumenta",
 	"Documentation": "Dokumentacija",
 	"Documentation": "Dokumentacija",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "ne uspostavlja vanjske veze, a vaši podaci ostaju sigurno na vašem lokalno hostiranom poslužitelju.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "ne uspostavlja vanjske veze, a vaši podaci ostaju sigurno na vašem lokalno hostiranom poslužitelju.",
 	"Don't Allow": "Ne dopuštaj",
 	"Don't Allow": "Ne dopuštaj",
 	"Don't have an account?": "Nemate račun?",
 	"Don't have an account?": "Nemate račun?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "Ne sviđa mi se stil",
 	"Don't like the style": "Ne sviđa mi se stil",
 	"Done": "",
 	"Done": "",
 	"Download": "Preuzimanje",
 	"Download": "Preuzimanje",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "Omogući zajedničko korištenje zajednice",
 	"Enable Community Sharing": "Omogući zajedničko korištenje zajednice",
 	"Enable New Sign Ups": "Omogući nove prijave",
 	"Enable New Sign Ups": "Omogući nove prijave",
 	"Enable Web Search": "Omogući pretraživanje weba",
 	"Enable Web Search": "Omogući pretraživanje weba",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Provjerite da vaša CSV datoteka uključuje 4 stupca u ovom redoslijedu: Name, Email, Password, Role.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Provjerite da vaša CSV datoteka uključuje 4 stupca u ovom redoslijedu: Name, Email, Password, Role.",
 	"Enter {{role}} message here": "Unesite {{role}} poruku ovdje",
 	"Enter {{role}} message here": "Unesite {{role}} poruku ovdje",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "Unesite Serply API ključ",
 	"Enter Serply API Key": "Unesite Serply API ključ",
 	"Enter Serpstack API Key": "Unesite Serpstack API ključ",
 	"Enter Serpstack API Key": "Unesite Serpstack API ključ",
 	"Enter stop sequence": "Unesite sekvencu zaustavljanja",
 	"Enter stop sequence": "Unesite sekvencu zaustavljanja",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "",
 	"Enter Tavily API Key": "",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "Unesite Top K",
 	"Enter Top K": "Unesite Top K",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "Unesite URL (npr. http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "Unesite URL (npr. http://localhost:11434)",
 	"Enter Your Email": "Unesite svoj email",
 	"Enter Your Email": "Unesite svoj email",
 	"Enter Your Full Name": "Unesite svoje puno ime",
 	"Enter Your Full Name": "Unesite svoje puno ime",
+	"Enter your message": "",
 	"Enter Your Password": "Unesite svoju lozinku",
 	"Enter Your Password": "Unesite svoju lozinku",
 	"Enter Your Role": "Unesite svoju ulogu",
 	"Enter Your Role": "Unesite svoju ulogu",
 	"Error": "Greška",
 	"Error": "Greška",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "Način datoteke",
 	"File Mode": "Način datoteke",
 	"File not found.": "Datoteka nije pronađena.",
 	"File not found.": "Datoteka nije pronađena.",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "Kazna za učestalost",
 	"Frequency Penalty": "Kazna za učestalost",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "Općenito",
 	"General": "Općenito",
 	"General Settings": "Opće postavke",
 	"General Settings": "Opće postavke",
 	"Generate Image": "Gneriraj sliku",
 	"Generate Image": "Gneriraj sliku",
 	"Generating search query": "Generiranje upita za pretraživanje",
 	"Generating search query": "Generiranje upita za pretraživanje",
 	"Generation Info": "Informacije o generaciji",
 	"Generation Info": "Informacije o generaciji",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "Dobar odgovor",
 	"Good Response": "Dobar odgovor",
 	"Google PSE API Key": "Google PSE API ključ",
 	"Google PSE API Key": "Google PSE API ključ",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "Kako vam mogu pomoći danas?",
 	"How can I help you today?": "Kako vam mogu pomoći danas?",
 	"Hybrid Search": "Hibridna pretraga",
 	"Hybrid Search": "Hibridna pretraga",
+	"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.": "",
 	"Image Generation (Experimental)": "Generiranje slika (eksperimentalno)",
 	"Image Generation (Experimental)": "Generiranje slika (eksperimentalno)",
 	"Image Generation Engine": "Stroj za generiranje slika",
 	"Image Generation Engine": "Stroj za generiranje slika",
 	"Image Settings": "Postavke slike",
 	"Image Settings": "Postavke slike",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "Tipkovnički prečaci",
 	"Keyboard shortcuts": "Tipkovnički prečaci",
 	"Knowledge": "Znanje",
 	"Knowledge": "Znanje",
 	"Language": "Jezik",
 	"Language": "Jezik",
+	"large language models, locally.": "",
 	"Last Active": "Zadnja aktivnost",
 	"Last Active": "Zadnja aktivnost",
 	"Last Modified": "",
 	"Last Modified": "",
 	"Light": "Svijetlo",
 	"Light": "Svijetlo",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "Ventili za cjevovode",
 	"Pipelines Valves": "Ventili za cjevovode",
 	"Plain text (.txt)": "Običan tekst (.txt)",
 	"Plain text (.txt)": "Običan tekst (.txt)",
 	"Playground": "Igralište",
 	"Playground": "Igralište",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "Pozitivan stav",
 	"Positive attitude": "Pozitivan stav",
 	"Previous 30 days": "Prethodnih 30 dana",
 	"Previous 30 days": "Prethodnih 30 dana",
 	"Previous 7 days": "Prethodnih 7 dana",
 	"Previous 7 days": "Prethodnih 7 dana",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "Pokrenuto",
 	"Running": "Pokrenuto",
 	"Save": "Spremi",
 	"Save": "Spremi",
 	"Save & Create": "Spremi i stvori",
 	"Save & Create": "Spremi i stvori",
@@ -559,6 +580,8 @@
 	"Success": "Uspjeh",
 	"Success": "Uspjeh",
 	"Successfully updated.": "Uspješno ažurirano.",
 	"Successfully updated.": "Uspješno ažurirano.",
 	"Suggested": "Predloženo",
 	"Suggested": "Predloženo",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "Sustav",
 	"System": "Sustav",
 	"System Prompt": "Sistemski prompt",
 	"System Prompt": "Sistemski prompt",
 	"Tags": "Oznake",
 	"Tags": "Oznake",
@@ -571,6 +594,7 @@
 	"Text-to-Speech Engine": "Stroj za pretvorbu teksta u govor",
 	"Text-to-Speech Engine": "Stroj za pretvorbu teksta u govor",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Hvala na povratnim informacijama!",
 	"Thanks for your feedback!": "Hvala na povratnim informacijama!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Ocjena treba biti vrijednost između 0,0 (0%) i 1,0 (100%).",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Ocjena treba biti vrijednost između 0,0 (0%) i 1,0 (100%).",
 	"Theme": "Tema",
 	"Theme": "Tema",
 	"Thinking...": "Razmišljam",
 	"Thinking...": "Razmišljam",
@@ -604,7 +628,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "Alati",
 	"Tools": "Alati",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Trouble accessing Ollama?": "Problemi s pristupom Ollama?",
 	"Trouble accessing Ollama?": "Problemi s pristupom Ollama?",
@@ -646,6 +676,7 @@
 	"Version": "Verzija",
 	"Version": "Verzija",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "Upozorenje",
 	"Warning": "Upozorenje",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Upozorenje: Ako ažurirate ili promijenite svoj model za umetanje, morat ćete ponovno uvesti sve dokumente.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Upozorenje: Ako ažurirate ili promijenite svoj model za umetanje, morat ćete ponovno uvesti sve dokumente.",
 	"Web": "Web",
 	"Web": "Web",
 	"Web API": "Web API",
 	"Web API": "Web API",
@@ -672,6 +703,7 @@
 	"You're a helpful assistant.": "Vi ste korisni asistent.",
 	"You're a helpful assistant.": "Vi ste korisni asistent.",
 	"You're now logged in.": "Sada ste prijavljeni.",
 	"You're now logged in.": "Sada ste prijavljeni.",
 	"Your account status is currently pending activation.": "Status vašeg računa trenutno čeka aktivaciju.",
 	"Your account status is currently pending activation.": "Status vašeg računa trenutno čeka aktivaciju.",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "YouTube",
 	"Youtube": "YouTube",
 	"Youtube Loader Settings": "YouTube postavke učitavanja"
 	"Youtube Loader Settings": "YouTube postavke učitavanja"
 }
 }

+ 32 - 0
src/lib/i18n/locales/id-ID/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "Menghapus {{name}}",
 	"Deleted {{name}}": "Menghapus {{name}}",
 	"Description": "Deskripsi",
 	"Description": "Deskripsi",
 	"Didn't fully follow instructions": "Tidak sepenuhnya mengikuti instruksi",
 	"Didn't fully follow instructions": "Tidak sepenuhnya mengikuti instruksi",
+	"Disabled": "",
 	"Discover a function": "Menemukan sebuah fungsi",
 	"Discover a function": "Menemukan sebuah fungsi",
 	"Discover a model": "Menemukan sebuah model",
 	"Discover a model": "Menemukan sebuah model",
 	"Discover a prompt": "Temukan petunjuk",
 	"Discover a prompt": "Temukan petunjuk",
@@ -188,6 +189,8 @@
 	"Dismissible": "Tidak dapat digunakan",
 	"Dismissible": "Tidak dapat digunakan",
 	"Display Emoji in Call": "Menampilkan Emoji dalam Panggilan",
 	"Display Emoji in Call": "Menampilkan Emoji dalam Panggilan",
 	"Display the username instead of You in the Chat": "Menampilkan nama pengguna, bukan Anda di Obrolan",
 	"Display the username instead of You in the Chat": "Menampilkan nama pengguna, bukan Anda di Obrolan",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "Dokumen",
 	"Document": "Dokumen",
 	"Document Settings": "Pengaturan Dokumen",
 	"Document Settings": "Pengaturan Dokumen",
 	"Documentation": "Dokumentasi",
 	"Documentation": "Dokumentasi",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "tidak membuat koneksi eksternal apa pun, dan data Anda tetap aman di server yang dihosting secara lokal.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "tidak membuat koneksi eksternal apa pun, dan data Anda tetap aman di server yang dihosting secara lokal.",
 	"Don't Allow": "Jangan Izinkan",
 	"Don't Allow": "Jangan Izinkan",
 	"Don't have an account?": "Tidak memiliki akun?",
 	"Don't have an account?": "Tidak memiliki akun?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "Tidak suka gayanya",
 	"Don't like the style": "Tidak suka gayanya",
 	"Done": "Selesai",
 	"Done": "Selesai",
 	"Download": "Unduh",
 	"Download": "Unduh",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "Aktifkan Berbagi Komunitas",
 	"Enable Community Sharing": "Aktifkan Berbagi Komunitas",
 	"Enable New Sign Ups": "Aktifkan Pendaftaran Baru",
 	"Enable New Sign Ups": "Aktifkan Pendaftaran Baru",
 	"Enable Web Search": "Aktifkan Pencarian Web",
 	"Enable Web Search": "Aktifkan Pencarian Web",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Pastikan file CSV Anda menyertakan 4 kolom dengan urutan sebagai berikut: Nama, Email, Kata Sandi, Peran.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Pastikan file CSV Anda menyertakan 4 kolom dengan urutan sebagai berikut: Nama, Email, Kata Sandi, Peran.",
 	"Enter {{role}} message here": "Masukkan pesan {{role}} di sini",
 	"Enter {{role}} message here": "Masukkan pesan {{role}} di sini",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "Masukkan Kunci API Serply",
 	"Enter Serply API Key": "Masukkan Kunci API Serply",
 	"Enter Serpstack API Key": "Masukkan Kunci API Serpstack",
 	"Enter Serpstack API Key": "Masukkan Kunci API Serpstack",
 	"Enter stop sequence": "Masukkan urutan berhenti",
 	"Enter stop sequence": "Masukkan urutan berhenti",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "Masukkan Kunci API Tavily",
 	"Enter Tavily API Key": "Masukkan Kunci API Tavily",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "Masukkan Top K",
 	"Enter Top K": "Masukkan Top K",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "Masukkan URL (mis. http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "Masukkan URL (mis. http://localhost:11434)",
 	"Enter Your Email": "Masukkan Email Anda",
 	"Enter Your Email": "Masukkan Email Anda",
 	"Enter Your Full Name": "Masukkan Nama Lengkap Anda",
 	"Enter Your Full Name": "Masukkan Nama Lengkap Anda",
+	"Enter your message": "",
 	"Enter Your Password": "Masukkan Kata Sandi Anda",
 	"Enter Your Password": "Masukkan Kata Sandi Anda",
 	"Enter Your Role": "Masukkan Peran Anda",
 	"Enter Your Role": "Masukkan Peran Anda",
 	"Error": "Kesalahan",
 	"Error": "Kesalahan",
@@ -266,6 +274,7 @@
 	"File": "Berkas",
 	"File": "Berkas",
 	"File Mode": "Mode File",
 	"File Mode": "Mode File",
 	"File not found.": "File tidak ditemukan.",
 	"File not found.": "File tidak ditemukan.",
+	"Files": "",
 	"Filter is now globally disabled": "Filter sekarang dinonaktifkan secara global",
 	"Filter is now globally disabled": "Filter sekarang dinonaktifkan secara global",
 	"Filter is now globally enabled": "Filter sekarang diaktifkan secara global",
 	"Filter is now globally enabled": "Filter sekarang diaktifkan secara global",
 	"Filters": "Filter",
 	"Filters": "Filter",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "Penalti Frekuensi",
 	"Frequency Penalty": "Penalti Frekuensi",
 	"Function created successfully": "Fungsi berhasil dibuat",
 	"Function created successfully": "Fungsi berhasil dibuat",
 	"Function deleted successfully": "Fungsi berhasil dihapus",
 	"Function deleted successfully": "Fungsi berhasil dihapus",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "Fungsi berhasil diperbarui",
 	"Function updated successfully": "Fungsi berhasil diperbarui",
 	"Functions": "Fungsi",
 	"Functions": "Fungsi",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "Fungsi berhasil diimpor",
 	"Functions imported successfully": "Fungsi berhasil diimpor",
 	"General": "Umum",
 	"General": "Umum",
 	"General Settings": "Pengaturan Umum",
 	"General Settings": "Pengaturan Umum",
 	"Generate Image": "Menghasilkan Gambar",
 	"Generate Image": "Menghasilkan Gambar",
 	"Generating search query": "Membuat kueri penelusuran",
 	"Generating search query": "Membuat kueri penelusuran",
 	"Generation Info": "Info Pembuatan",
 	"Generation Info": "Info Pembuatan",
+	"Get up and running with": "",
 	"Global": "Global",
 	"Global": "Global",
 	"Good Response": "Respons yang Baik",
 	"Good Response": "Respons yang Baik",
 	"Google PSE API Key": "Kunci API Google PSE",
 	"Google PSE API Key": "Kunci API Google PSE",
@@ -298,6 +315,7 @@
 	"Hide Model": "Sembunyikan Model",
 	"Hide Model": "Sembunyikan Model",
 	"How can I help you today?": "Ada yang bisa saya bantu hari ini?",
 	"How can I help you today?": "Ada yang bisa saya bantu hari ini?",
 	"Hybrid Search": "Pencarian Hibrida",
 	"Hybrid Search": "Pencarian Hibrida",
+	"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.": "",
 	"Image Generation (Experimental)": "Pembuatan Gambar (Eksperimental)",
 	"Image Generation (Experimental)": "Pembuatan Gambar (Eksperimental)",
 	"Image Generation Engine": "Mesin Pembuat Gambar",
 	"Image Generation Engine": "Mesin Pembuat Gambar",
 	"Image Settings": "Pengaturan Gambar",
 	"Image Settings": "Pengaturan Gambar",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "Pintasan keyboard",
 	"Keyboard shortcuts": "Pintasan keyboard",
 	"Knowledge": "Pengetahuan",
 	"Knowledge": "Pengetahuan",
 	"Language": "Bahasa",
 	"Language": "Bahasa",
+	"large language models, locally.": "",
 	"Last Active": "Terakhir Aktif",
 	"Last Active": "Terakhir Aktif",
 	"Last Modified": "Terakhir Dimodifikasi",
 	"Last Modified": "Terakhir Dimodifikasi",
 	"Light": "Cahaya",
 	"Light": "Cahaya",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "Katup Saluran Pipa",
 	"Pipelines Valves": "Katup Saluran Pipa",
 	"Plain text (.txt)": "Teks biasa (.txt)",
 	"Plain text (.txt)": "Teks biasa (.txt)",
 	"Playground": "Taman bermain",
 	"Playground": "Taman bermain",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "Sikap positif",
 	"Positive attitude": "Sikap positif",
 	"Previous 30 days": "30 hari sebelumnya",
 	"Previous 30 days": "30 hari sebelumnya",
 	"Previous 7 days": "7 hari sebelumnya",
 	"Previous 7 days": "7 hari sebelumnya",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Pinus Rosé",
 	"Rosé Pine": "Pinus Rosé",
 	"Rosé Pine Dawn": "Rosé Pine Fajar",
 	"Rosé Pine Dawn": "Rosé Pine Fajar",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "Berjalan",
 	"Running": "Berjalan",
 	"Save": "Simpan",
 	"Save": "Simpan",
 	"Save & Create": "Simpan & Buat",
 	"Save & Create": "Simpan & Buat",
@@ -558,6 +579,8 @@
 	"Success": "Berhasil",
 	"Success": "Berhasil",
 	"Successfully updated.": "Berhasil diperbarui.",
 	"Successfully updated.": "Berhasil diperbarui.",
 	"Suggested": "Disarankan",
 	"Suggested": "Disarankan",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "Sistem",
 	"System": "Sistem",
 	"System Prompt": "Permintaan Sistem",
 	"System Prompt": "Permintaan Sistem",
 	"Tags": "Tag",
 	"Tags": "Tag",
@@ -570,6 +593,7 @@
 	"Text-to-Speech Engine": "Mesin Teks-ke-Suara",
 	"Text-to-Speech Engine": "Mesin Teks-ke-Suara",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Terima kasih atas umpan balik Anda!",
 	"Thanks for your feedback!": "Terima kasih atas umpan balik Anda!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Nilai yang diberikan haruslah nilai antara 0,0 (0%) dan 1,0 (100%).",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Nilai yang diberikan haruslah nilai antara 0,0 (0%) dan 1,0 (100%).",
 	"Theme": "Tema",
 	"Theme": "Tema",
 	"Thinking...": "Berpikir",
 	"Thinking...": "Berpikir",
@@ -603,7 +627,13 @@
 	"Tool deleted successfully": "Alat berhasil dihapus",
 	"Tool deleted successfully": "Alat berhasil dihapus",
 	"Tool imported successfully": "Alat berhasil diimpor",
 	"Tool imported successfully": "Alat berhasil diimpor",
 	"Tool updated successfully": "Alat berhasil diperbarui",
 	"Tool updated successfully": "Alat berhasil diperbarui",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "Alat",
 	"Tools": "Alat",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "K atas",
 	"Top K": "K atas",
 	"Top P": "P Atas",
 	"Top P": "P Atas",
 	"Trouble accessing Ollama?": "Kesulitan mengakses Ollama?",
 	"Trouble accessing Ollama?": "Kesulitan mengakses Ollama?",
@@ -645,6 +675,7 @@
 	"Version": "Versi",
 	"Version": "Versi",
 	"Voice": "Suara",
 	"Voice": "Suara",
 	"Warning": "Peringatan",
 	"Warning": "Peringatan",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Peringatan: Jika Anda memperbarui atau mengubah model penyematan, Anda harus mengimpor ulang semua dokumen.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Peringatan: Jika Anda memperbarui atau mengubah model penyematan, Anda harus mengimpor ulang semua dokumen.",
 	"Web": "Web",
 	"Web": "Web",
 	"Web API": "API Web",
 	"Web API": "API Web",
@@ -671,6 +702,7 @@
 	"You're a helpful assistant.": "Anda adalah asisten yang membantu.",
 	"You're a helpful assistant.": "Anda adalah asisten yang membantu.",
 	"You're now logged in.": "Anda sekarang sudah masuk.",
 	"You're now logged in.": "Anda sekarang sudah masuk.",
 	"Your account status is currently pending activation.": "Status akun Anda saat ini sedang menunggu aktivasi.",
 	"Your account status is currently pending activation.": "Status akun Anda saat ini sedang menunggu aktivasi.",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "Youtube",
 	"Youtube": "Youtube",
 	"Youtube Loader Settings": "Pengaturan Pemuat Youtube"
 	"Youtube Loader Settings": "Pengaturan Pemuat Youtube"
 }
 }

+ 32 - 0
src/lib/i18n/locales/it-IT/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "Eliminato {{name}}",
 	"Deleted {{name}}": "Eliminato {{name}}",
 	"Description": "Descrizione",
 	"Description": "Descrizione",
 	"Didn't fully follow instructions": "Non ha seguito completamente le istruzioni",
 	"Didn't fully follow instructions": "Non ha seguito completamente le istruzioni",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "Scopri un modello",
 	"Discover a model": "Scopri un modello",
 	"Discover a prompt": "Scopri un prompt",
 	"Discover a prompt": "Scopri un prompt",
@@ -188,6 +189,8 @@
 	"Dismissible": "",
 	"Dismissible": "",
 	"Display Emoji in Call": "",
 	"Display Emoji in Call": "",
 	"Display the username instead of You in the Chat": "Visualizza il nome utente invece di Tu nella chat",
 	"Display the username instead of You in the Chat": "Visualizza il nome utente invece di Tu nella chat",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "Documento",
 	"Document": "Documento",
 	"Document Settings": "Impostazioni documento",
 	"Document Settings": "Impostazioni documento",
 	"Documentation": "",
 	"Documentation": "",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "non effettua connessioni esterne e i tuoi dati rimangono al sicuro sul tuo server ospitato localmente.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "non effettua connessioni esterne e i tuoi dati rimangono al sicuro sul tuo server ospitato localmente.",
 	"Don't Allow": "Non consentire",
 	"Don't Allow": "Non consentire",
 	"Don't have an account?": "Non hai un account?",
 	"Don't have an account?": "Non hai un account?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "Non ti piace lo stile",
 	"Don't like the style": "Non ti piace lo stile",
 	"Done": "",
 	"Done": "",
 	"Download": "Scarica",
 	"Download": "Scarica",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "Abilita la condivisione della community",
 	"Enable Community Sharing": "Abilita la condivisione della community",
 	"Enable New Sign Ups": "Abilita nuove iscrizioni",
 	"Enable New Sign Ups": "Abilita nuove iscrizioni",
 	"Enable Web Search": "Abilita ricerca Web",
 	"Enable Web Search": "Abilita ricerca Web",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Assicurati che il tuo file CSV includa 4 colonne in questo ordine: Nome, Email, Password, Ruolo.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Assicurati che il tuo file CSV includa 4 colonne in questo ordine: Nome, Email, Password, Ruolo.",
 	"Enter {{role}} message here": "Inserisci il messaggio per {{role}} qui",
 	"Enter {{role}} message here": "Inserisci il messaggio per {{role}} qui",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Inserisci la chiave API Serpstack",
 	"Enter Serpstack API Key": "Inserisci la chiave API Serpstack",
 	"Enter stop sequence": "Inserisci la sequenza di arresto",
 	"Enter stop sequence": "Inserisci la sequenza di arresto",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "",
 	"Enter Tavily API Key": "",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "Inserisci Top K",
 	"Enter Top K": "Inserisci Top K",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "Inserisci URL (ad esempio http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "Inserisci URL (ad esempio http://localhost:11434)",
 	"Enter Your Email": "Inserisci la tua email",
 	"Enter Your Email": "Inserisci la tua email",
 	"Enter Your Full Name": "Inserisci il tuo nome completo",
 	"Enter Your Full Name": "Inserisci il tuo nome completo",
+	"Enter your message": "",
 	"Enter Your Password": "Inserisci la tua password",
 	"Enter Your Password": "Inserisci la tua password",
 	"Enter Your Role": "Inserisci il tuo ruolo",
 	"Enter Your Role": "Inserisci il tuo ruolo",
 	"Error": "Errore",
 	"Error": "Errore",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "Modalità file",
 	"File Mode": "Modalità file",
 	"File not found.": "File non trovato.",
 	"File not found.": "File non trovato.",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "Penalità di frequenza",
 	"Frequency Penalty": "Penalità di frequenza",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "Generale",
 	"General": "Generale",
 	"General Settings": "Impostazioni generali",
 	"General Settings": "Impostazioni generali",
 	"Generate Image": "",
 	"Generate Image": "",
 	"Generating search query": "Generazione di query di ricerca",
 	"Generating search query": "Generazione di query di ricerca",
 	"Generation Info": "Informazioni generazione",
 	"Generation Info": "Informazioni generazione",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "Buona risposta",
 	"Good Response": "Buona risposta",
 	"Google PSE API Key": "Chiave API PSE di Google",
 	"Google PSE API Key": "Chiave API PSE di Google",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "Come posso aiutarti oggi?",
 	"How can I help you today?": "Come posso aiutarti oggi?",
 	"Hybrid Search": "Ricerca ibrida",
 	"Hybrid Search": "Ricerca ibrida",
+	"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.": "",
 	"Image Generation (Experimental)": "Generazione di immagini (sperimentale)",
 	"Image Generation (Experimental)": "Generazione di immagini (sperimentale)",
 	"Image Generation Engine": "Motore di generazione immagini",
 	"Image Generation Engine": "Motore di generazione immagini",
 	"Image Settings": "Impostazioni immagine",
 	"Image Settings": "Impostazioni immagine",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "Scorciatoie da tastiera",
 	"Keyboard shortcuts": "Scorciatoie da tastiera",
 	"Knowledge": "",
 	"Knowledge": "",
 	"Language": "Lingua",
 	"Language": "Lingua",
+	"large language models, locally.": "",
 	"Last Active": "Ultima attività",
 	"Last Active": "Ultima attività",
 	"Last Modified": "",
 	"Last Modified": "",
 	"Light": "Chiaro",
 	"Light": "Chiaro",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "Valvole per tubazioni",
 	"Pipelines Valves": "Valvole per tubazioni",
 	"Plain text (.txt)": "Testo normale (.txt)",
 	"Plain text (.txt)": "Testo normale (.txt)",
 	"Playground": "Terreno di gioco",
 	"Playground": "Terreno di gioco",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "Attitudine positiva",
 	"Positive attitude": "Attitudine positiva",
 	"Previous 30 days": "Ultimi 30 giorni",
 	"Previous 30 days": "Ultimi 30 giorni",
 	"Previous 7 days": "Ultimi 7 giorni",
 	"Previous 7 days": "Ultimi 7 giorni",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "",
 	"Running": "",
 	"Save": "Salva",
 	"Save": "Salva",
 	"Save & Create": "Salva e crea",
 	"Save & Create": "Salva e crea",
@@ -559,6 +580,8 @@
 	"Success": "Successo",
 	"Success": "Successo",
 	"Successfully updated.": "Aggiornato con successo.",
 	"Successfully updated.": "Aggiornato con successo.",
 	"Suggested": "Suggerito",
 	"Suggested": "Suggerito",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "Sistema",
 	"System": "Sistema",
 	"System Prompt": "Prompt di sistema",
 	"System Prompt": "Prompt di sistema",
 	"Tags": "Tag",
 	"Tags": "Tag",
@@ -571,6 +594,7 @@
 	"Text-to-Speech Engine": "Motore da testo a voce",
 	"Text-to-Speech Engine": "Motore da testo a voce",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Grazie per il tuo feedback!",
 	"Thanks for your feedback!": "Grazie per il tuo feedback!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Il punteggio dovrebbe essere un valore compreso tra 0.0 (0%) e 1.0 (100%).",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Il punteggio dovrebbe essere un valore compreso tra 0.0 (0%) e 1.0 (100%).",
 	"Theme": "Tema",
 	"Theme": "Tema",
 	"Thinking...": "",
 	"Thinking...": "",
@@ -604,7 +628,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "",
 	"Tools": "",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Trouble accessing Ollama?": "Problemi di accesso a Ollama?",
 	"Trouble accessing Ollama?": "Problemi di accesso a Ollama?",
@@ -646,6 +676,7 @@
 	"Version": "Versione",
 	"Version": "Versione",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "Avvertimento",
 	"Warning": "Avvertimento",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Attenzione: se aggiorni o cambi il tuo modello di embedding, dovrai reimportare tutti i documenti.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Attenzione: se aggiorni o cambi il tuo modello di embedding, dovrai reimportare tutti i documenti.",
 	"Web": "Web",
 	"Web": "Web",
 	"Web API": "",
 	"Web API": "",
@@ -672,6 +703,7 @@
 	"You're a helpful assistant.": "Sei un assistente utile.",
 	"You're a helpful assistant.": "Sei un assistente utile.",
 	"You're now logged in.": "Ora hai effettuato l'accesso.",
 	"You're now logged in.": "Ora hai effettuato l'accesso.",
 	"Your account status is currently pending activation.": "",
 	"Your account status is currently pending activation.": "",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "Youtube",
 	"Youtube": "Youtube",
 	"Youtube Loader Settings": "Impostazioni del caricatore Youtube"
 	"Youtube Loader Settings": "Impostazioni del caricatore Youtube"
 }
 }

+ 32 - 0
src/lib/i18n/locales/ja-JP/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "{{name}}を削除しました",
 	"Deleted {{name}}": "{{name}}を削除しました",
 	"Description": "説明",
 	"Description": "説明",
 	"Didn't fully follow instructions": "説明に沿って操作していませんでした",
 	"Didn't fully follow instructions": "説明に沿って操作していませんでした",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "モデルを検出する",
 	"Discover a model": "モデルを検出する",
 	"Discover a prompt": "プロンプトを見つける",
 	"Discover a prompt": "プロンプトを見つける",
@@ -188,6 +189,8 @@
 	"Dismissible": "",
 	"Dismissible": "",
 	"Display Emoji in Call": "",
 	"Display Emoji in Call": "",
 	"Display the username instead of You in the Chat": "チャットで「あなた」の代わりにユーザー名を表示",
 	"Display the username instead of You in the Chat": "チャットで「あなた」の代わりにユーザー名を表示",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "ドキュメント",
 	"Document": "ドキュメント",
 	"Document Settings": "ドキュメント設定",
 	"Document Settings": "ドキュメント設定",
 	"Documentation": "",
 	"Documentation": "",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "外部接続を行わず、データはローカルでホストされているサーバー上に安全に保持されます。",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "外部接続を行わず、データはローカルでホストされているサーバー上に安全に保持されます。",
 	"Don't Allow": "許可しない",
 	"Don't Allow": "許可しない",
 	"Don't have an account?": "アカウントをお持ちではありませんか?",
 	"Don't have an account?": "アカウントをお持ちではありませんか?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "デザインが好きでない",
 	"Don't like the style": "デザインが好きでない",
 	"Done": "",
 	"Done": "",
 	"Download": "ダウンロードをキャンセルしました",
 	"Download": "ダウンロードをキャンセルしました",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "コミュニティ共有の有効化",
 	"Enable Community Sharing": "コミュニティ共有の有効化",
 	"Enable New Sign Ups": "新規登録を有効化",
 	"Enable New Sign Ups": "新規登録を有効化",
 	"Enable Web Search": "Web 検索を有効にする",
 	"Enable Web Search": "Web 検索を有効にする",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "CSVファイルに4つの列が含まれていることを確認してください: Name, Email, Password, Role.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "CSVファイルに4つの列が含まれていることを確認してください: Name, Email, Password, Role.",
 	"Enter {{role}} message here": "{{role}} メッセージをここに入力してください",
 	"Enter {{role}} message here": "{{role}} メッセージをここに入力してください",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Serpstack APIキーの入力",
 	"Enter Serpstack API Key": "Serpstack APIキーの入力",
 	"Enter stop sequence": "ストップシーケンスを入力してください",
 	"Enter stop sequence": "ストップシーケンスを入力してください",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "",
 	"Enter Tavily API Key": "",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "トップ K を入力してください",
 	"Enter Top K": "トップ K を入力してください",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "URL を入力してください (例: http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "URL を入力してください (例: http://localhost:11434)",
 	"Enter Your Email": "メールアドレスを入力してください",
 	"Enter Your Email": "メールアドレスを入力してください",
 	"Enter Your Full Name": "フルネームを入力してください",
 	"Enter Your Full Name": "フルネームを入力してください",
+	"Enter your message": "",
 	"Enter Your Password": "パスワードを入力してください",
 	"Enter Your Password": "パスワードを入力してください",
 	"Enter Your Role": "ロールを入力してください",
 	"Enter Your Role": "ロールを入力してください",
 	"Error": "エラー",
 	"Error": "エラー",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "ファイルモード",
 	"File Mode": "ファイルモード",
 	"File not found.": "ファイルが見つかりません。",
 	"File not found.": "ファイルが見つかりません。",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "周波数ペナルティ",
 	"Frequency Penalty": "周波数ペナルティ",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "一般",
 	"General": "一般",
 	"General Settings": "一般設定",
 	"General Settings": "一般設定",
 	"Generate Image": "",
 	"Generate Image": "",
 	"Generating search query": "検索クエリの生成",
 	"Generating search query": "検索クエリの生成",
 	"Generation Info": "生成情報",
 	"Generation Info": "生成情報",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "良い応答",
 	"Good Response": "良い応答",
 	"Google PSE API Key": "Google PSE APIキー",
 	"Google PSE API Key": "Google PSE APIキー",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "今日はどのようにお手伝いしましょうか?",
 	"How can I help you today?": "今日はどのようにお手伝いしましょうか?",
 	"Hybrid Search": "ブリッジ検索",
 	"Hybrid Search": "ブリッジ検索",
+	"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
 	"Image Generation (Experimental)": "画像生成 (実験的)",
 	"Image Generation (Experimental)": "画像生成 (実験的)",
 	"Image Generation Engine": "画像生成エンジン",
 	"Image Generation Engine": "画像生成エンジン",
 	"Image Settings": "画像設定",
 	"Image Settings": "画像設定",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "キーボードショートカット",
 	"Keyboard shortcuts": "キーボードショートカット",
 	"Knowledge": "",
 	"Knowledge": "",
 	"Language": "言語",
 	"Language": "言語",
+	"large language models, locally.": "",
 	"Last Active": "最終アクティブ",
 	"Last Active": "最終アクティブ",
 	"Last Modified": "",
 	"Last Modified": "",
 	"Light": "ライト",
 	"Light": "ライト",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "パイプラインバルブ",
 	"Pipelines Valves": "パイプラインバルブ",
 	"Plain text (.txt)": "プレーンテキスト (.txt)",
 	"Plain text (.txt)": "プレーンテキスト (.txt)",
 	"Playground": "プレイグラウンド",
 	"Playground": "プレイグラウンド",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "陽気な態度",
 	"Positive attitude": "陽気な態度",
 	"Previous 30 days": "前の30日間",
 	"Previous 30 days": "前の30日間",
 	"Previous 7 days": "前の7日間",
 	"Previous 7 days": "前の7日間",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "",
 	"Running": "",
 	"Save": "保存",
 	"Save": "保存",
 	"Save & Create": "保存して作成",
 	"Save & Create": "保存して作成",
@@ -557,6 +578,8 @@
 	"Success": "成功",
 	"Success": "成功",
 	"Successfully updated.": "正常に更新されました。",
 	"Successfully updated.": "正常に更新されました。",
 	"Suggested": "提案",
 	"Suggested": "提案",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "システム",
 	"System": "システム",
 	"System Prompt": "システムプロンプト",
 	"System Prompt": "システムプロンプト",
 	"Tags": "タグ",
 	"Tags": "タグ",
@@ -569,6 +592,7 @@
 	"Text-to-Speech Engine": "テキスト音声変換エンジン",
 	"Text-to-Speech Engine": "テキスト音声変換エンジン",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "ご意見ありがとうございます!",
 	"Thanks for your feedback!": "ご意見ありがとうございます!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "スコアは0.0(0%)から1.0(100%)の間の値にしてください。",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "スコアは0.0(0%)から1.0(100%)の間の値にしてください。",
 	"Theme": "テーマ",
 	"Theme": "テーマ",
 	"Thinking...": "",
 	"Thinking...": "",
@@ -602,7 +626,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "",
 	"Tools": "",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "トップ K",
 	"Top K": "トップ K",
 	"Top P": "トップ P",
 	"Top P": "トップ P",
 	"Trouble accessing Ollama?": "Ollama へのアクセスに問題がありますか?",
 	"Trouble accessing Ollama?": "Ollama へのアクセスに問題がありますか?",
@@ -644,6 +674,7 @@
 	"Version": "バージョン",
 	"Version": "バージョン",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "警告",
 	"Warning": "警告",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "警告: 埋め込みモデルを更新または変更した場合は、すべてのドキュメントを再インポートする必要があります。",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "警告: 埋め込みモデルを更新または変更した場合は、すべてのドキュメントを再インポートする必要があります。",
 	"Web": "ウェブ",
 	"Web": "ウェブ",
 	"Web API": "",
 	"Web API": "",
@@ -670,6 +701,7 @@
 	"You're a helpful assistant.": "あなたは役に立つアシスタントです。",
 	"You're a helpful assistant.": "あなたは役に立つアシスタントです。",
 	"You're now logged in.": "ログインしました。",
 	"You're now logged in.": "ログインしました。",
 	"Your account status is currently pending activation.": "",
 	"Your account status is currently pending activation.": "",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "YouTube",
 	"Youtube": "YouTube",
 	"Youtube Loader Settings": "Youtubeローダー設定"
 	"Youtube Loader Settings": "Youtubeローダー設定"
 }
 }

+ 32 - 0
src/lib/i18n/locales/ka-GE/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "Deleted {{name}}",
 	"Deleted {{name}}": "Deleted {{name}}",
 	"Description": "აღწერა",
 	"Description": "აღწერა",
 	"Didn't fully follow instructions": "ვერ ყველა ინფორმაციისთვის ვერ ხელახლა ჩაწერე",
 	"Didn't fully follow instructions": "ვერ ყველა ინფორმაციისთვის ვერ ხელახლა ჩაწერე",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "გაიგეთ მოდელი",
 	"Discover a model": "გაიგეთ მოდელი",
 	"Discover a prompt": "აღმოაჩინეთ მოთხოვნა",
 	"Discover a prompt": "აღმოაჩინეთ მოთხოვნა",
@@ -188,6 +189,8 @@
 	"Dismissible": "",
 	"Dismissible": "",
 	"Display Emoji in Call": "",
 	"Display Emoji in Call": "",
 	"Display the username instead of You in the Chat": "ჩატში აჩვენე მომხმარებლის სახელი თქვენს ნაცვლად",
 	"Display the username instead of You in the Chat": "ჩატში აჩვენე მომხმარებლის სახელი თქვენს ნაცვლად",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "დოკუმენტი",
 	"Document": "დოკუმენტი",
 	"Document Settings": "დოკუმენტის პარამეტრები",
 	"Document Settings": "დოკუმენტის პარამეტრები",
 	"Documentation": "",
 	"Documentation": "",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "არ ამყარებს გარე კავშირებს და თქვენი მონაცემები უსაფრთხოდ რჩება თქვენს ადგილობრივ სერვერზე.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "არ ამყარებს გარე კავშირებს და თქვენი მონაცემები უსაფრთხოდ რჩება თქვენს ადგილობრივ სერვერზე.",
 	"Don't Allow": "არ დაუშვა",
 	"Don't Allow": "არ დაუშვა",
 	"Don't have an account?": "არ გაქვს ანგარიში?",
 	"Don't have an account?": "არ გაქვს ანგარიში?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "არ ეთიკურია ფართოდ",
 	"Don't like the style": "არ ეთიკურია ფართოდ",
 	"Done": "",
 	"Done": "",
 	"Download": "ჩამოტვირთვა გაუქმებულია",
 	"Download": "ჩამოტვირთვა გაუქმებულია",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "საზოგადოების გაზიარების ჩართვა",
 	"Enable Community Sharing": "საზოგადოების გაზიარების ჩართვა",
 	"Enable New Sign Ups": "ახალი რეგისტრაციების ჩართვა",
 	"Enable New Sign Ups": "ახალი რეგისტრაციების ჩართვა",
 	"Enable Web Search": "ვებ ძიების ჩართვა",
 	"Enable Web Search": "ვებ ძიების ჩართვა",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "გთხოვთ, უზრუნველყოთ, რომთქვევის CSV-ფაილი შეიცავს 4 ველი, ჩაწერილი ორივე ველი უდრის პირველი ველით.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "გთხოვთ, უზრუნველყოთ, რომთქვევის CSV-ფაილი შეიცავს 4 ველი, ჩაწერილი ორივე ველი უდრის პირველი ველით.",
 	"Enter {{role}} message here": "შეიყვანე {{role}} შეტყობინება აქ",
 	"Enter {{role}} message here": "შეიყვანე {{role}} შეტყობინება აქ",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "შეიყვანეთ Serpstack API Key",
 	"Enter Serpstack API Key": "შეიყვანეთ Serpstack API Key",
 	"Enter stop sequence": "შეიყვანეთ ტოპ თანმიმდევრობა",
 	"Enter stop sequence": "შეიყვანეთ ტოპ თანმიმდევრობა",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "",
 	"Enter Tavily API Key": "",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "შეიყვანეთ Top K",
 	"Enter Top K": "შეიყვანეთ Top K",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "შეიყვანეთ მისამართი (მაგალითად http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "შეიყვანეთ მისამართი (მაგალითად http://localhost:11434)",
 	"Enter Your Email": "შეიყვანეთ თქვენი ელ-ფოსტა",
 	"Enter Your Email": "შეიყვანეთ თქვენი ელ-ფოსტა",
 	"Enter Your Full Name": "შეიყვანეთ თქვენი სრული სახელი",
 	"Enter Your Full Name": "შეიყვანეთ თქვენი სრული სახელი",
+	"Enter your message": "",
 	"Enter Your Password": "შეიყვანეთ თქვენი პაროლი",
 	"Enter Your Password": "შეიყვანეთ თქვენი პაროლი",
 	"Enter Your Role": "შეიყვანეთ თქვენი როლი",
 	"Enter Your Role": "შეიყვანეთ თქვენი როლი",
 	"Error": "შეცდომა",
 	"Error": "შეცდომა",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "ფაილური რეჟიმი",
 	"File Mode": "ფაილური რეჟიმი",
 	"File not found.": "ფაილი ვერ მოიძებნა",
 	"File not found.": "ფაილი ვერ მოიძებნა",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "სიხშირის ჯარიმა",
 	"Frequency Penalty": "სიხშირის ჯარიმა",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "ზოგადი",
 	"General": "ზოგადი",
 	"General Settings": "ზოგადი პარამეტრები",
 	"General Settings": "ზოგადი პარამეტრები",
 	"Generate Image": "",
 	"Generate Image": "",
 	"Generating search query": "საძიებო მოთხოვნის გენერირება",
 	"Generating search query": "საძიებო მოთხოვნის გენერირება",
 	"Generation Info": "გენერაციის ინფორმაცია",
 	"Generation Info": "გენერაციის ინფორმაცია",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "დიდი პასუხი",
 	"Good Response": "დიდი პასუხი",
 	"Google PSE API Key": "Google PSE API გასაღები",
 	"Google PSE API Key": "Google PSE API გასაღები",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "როგორ შემიძლია დაგეხმარო დღეს?",
 	"How can I help you today?": "როგორ შემიძლია დაგეხმარო დღეს?",
 	"Hybrid Search": "ჰიბრიდური ძებნა",
 	"Hybrid Search": "ჰიბრიდური ძებნა",
+	"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
 	"Image Generation (Experimental)": "სურათების გენერაცია (ექსპერიმენტული)",
 	"Image Generation (Experimental)": "სურათების გენერაცია (ექსპერიმენტული)",
 	"Image Generation Engine": "სურათის გენერაციის ძრავა",
 	"Image Generation Engine": "სურათის გენერაციის ძრავა",
 	"Image Settings": "სურათის პარამეტრები",
 	"Image Settings": "სურათის პარამეტრები",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "კლავიატურის მალსახმობები",
 	"Keyboard shortcuts": "კლავიატურის მალსახმობები",
 	"Knowledge": "",
 	"Knowledge": "",
 	"Language": "ენა",
 	"Language": "ენა",
+	"large language models, locally.": "",
 	"Last Active": "ბოლო აქტიური",
 	"Last Active": "ბოლო აქტიური",
 	"Last Modified": "",
 	"Last Modified": "",
 	"Light": "მსუბუქი",
 	"Light": "მსუბუქი",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "მილსადენების სარქველები",
 	"Pipelines Valves": "მილსადენების სარქველები",
 	"Plain text (.txt)": "ტექსტი (.txt)",
 	"Plain text (.txt)": "ტექსტი (.txt)",
 	"Playground": "სათამაშო მოედანი",
 	"Playground": "სათამაშო მოედანი",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "პოზიტიური ანგარიში",
 	"Positive attitude": "პოზიტიური ანგარიში",
 	"Previous 30 days": "უკან 30 დღე",
 	"Previous 30 days": "უკან 30 დღე",
 	"Previous 7 days": "უკან 7 დღე",
 	"Previous 7 days": "უკან 7 დღე",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "ვარდისფერი ფიჭვის ხე",
 	"Rosé Pine": "ვარდისფერი ფიჭვის ხე",
 	"Rosé Pine Dawn": "ვარდისფერი ფიჭვის გარიჟრაჟი",
 	"Rosé Pine Dawn": "ვარდისფერი ფიჭვის გარიჟრაჟი",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "",
 	"Running": "",
 	"Save": "შენახვა",
 	"Save": "შენახვა",
 	"Save & Create": "დამახსოვრება და შექმნა",
 	"Save & Create": "დამახსოვრება და შექმნა",
@@ -558,6 +579,8 @@
 	"Success": "წარმატება",
 	"Success": "წარმატება",
 	"Successfully updated.": "წარმატებით განახლდა",
 	"Successfully updated.": "წარმატებით განახლდა",
 	"Suggested": "პირდაპირ პოპულარული",
 	"Suggested": "პირდაპირ პოპულარული",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "სისტემა",
 	"System": "სისტემა",
 	"System Prompt": "სისტემური მოთხოვნა",
 	"System Prompt": "სისტემური მოთხოვნა",
 	"Tags": "ტეგები",
 	"Tags": "ტეგები",
@@ -570,6 +593,7 @@
 	"Text-to-Speech Engine": "ტექსტურ-ხმოვანი ძრავი",
 	"Text-to-Speech Engine": "ტექსტურ-ხმოვანი ძრავი",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "მადლობა გამოხმაურებისთვის!",
 	"Thanks for your feedback!": "მადლობა გამოხმაურებისთვის!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "ქულა 0.0 (0%) და 1.0 (100%) ჩაშენებული უნდა იყოს.",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "ქულა 0.0 (0%) და 1.0 (100%) ჩაშენებული უნდა იყოს.",
 	"Theme": "თემა",
 	"Theme": "თემა",
 	"Thinking...": "",
 	"Thinking...": "",
@@ -603,7 +627,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "",
 	"Tools": "",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "ტოპ K",
 	"Top K": "ტოპ K",
 	"Top P": "ტოპ P",
 	"Top P": "ტოპ P",
 	"Trouble accessing Ollama?": "Ollama-ს ვერ უკავშირდები?",
 	"Trouble accessing Ollama?": "Ollama-ს ვერ უკავშირდები?",
@@ -645,6 +675,7 @@
 	"Version": "ვერსია",
 	"Version": "ვერსია",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "გაფრთხილება",
 	"Warning": "გაფრთხილება",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "გაფრთხილება: თუ განაახლებთ ან შეცვლით ჩანერგვის მოდელს, მოგიწევთ ყველა დოკუმენტის ხელახლა იმპორტი.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "გაფრთხილება: თუ განაახლებთ ან შეცვლით ჩანერგვის მოდელს, მოგიწევთ ყველა დოკუმენტის ხელახლა იმპორტი.",
 	"Web": "ვები",
 	"Web": "ვები",
 	"Web API": "",
 	"Web API": "",
@@ -671,6 +702,7 @@
 	"You're a helpful assistant.": "თქვენ სასარგებლო ასისტენტი ხართ.",
 	"You're a helpful assistant.": "თქვენ სასარგებლო ასისტენტი ხართ.",
 	"You're now logged in.": "თქვენ შესული ხართ.",
 	"You're now logged in.": "თქვენ შესული ხართ.",
 	"Your account status is currently pending activation.": "",
 	"Your account status is currently pending activation.": "",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "Youtube",
 	"Youtube": "Youtube",
 	"Youtube Loader Settings": "Youtube Loader Settings"
 	"Youtube Loader Settings": "Youtube Loader Settings"
 }
 }

+ 32 - 0
src/lib/i18n/locales/ko-KR/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "{{name}}을(를) 삭제했습니다.",
 	"Deleted {{name}}": "{{name}}을(를) 삭제했습니다.",
 	"Description": "설명",
 	"Description": "설명",
 	"Didn't fully follow instructions": "완전히 지침을 따르지 않음",
 	"Didn't fully follow instructions": "완전히 지침을 따르지 않음",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "모델 검색",
 	"Discover a model": "모델 검색",
 	"Discover a prompt": "프롬프트 검색",
 	"Discover a prompt": "프롬프트 검색",
@@ -188,6 +189,8 @@
 	"Dismissible": "제외가능",
 	"Dismissible": "제외가능",
 	"Display Emoji in Call": "콜(call)에서 이모지 표시",
 	"Display Emoji in Call": "콜(call)에서 이모지 표시",
 	"Display the username instead of You in the Chat": "채팅에서 '당신' 대신 사용자 이름 표시",
 	"Display the username instead of You in the Chat": "채팅에서 '당신' 대신 사용자 이름 표시",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "문서",
 	"Document": "문서",
 	"Document Settings": "문서 설정",
 	"Document Settings": "문서 설정",
 	"Documentation": "문서 조사",
 	"Documentation": "문서 조사",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "어떠한 외부 연결도 하지 않으며, 데이터는 로컬에서 호스팅되는 서버에 안전하게 유지됩니다.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "어떠한 외부 연결도 하지 않으며, 데이터는 로컬에서 호스팅되는 서버에 안전하게 유지됩니다.",
 	"Don't Allow": "허용 안 함",
 	"Don't Allow": "허용 안 함",
 	"Don't have an account?": "계정이 없으신가요?",
 	"Don't have an account?": "계정이 없으신가요?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "스타일을 좋아하지 않으세요?",
 	"Don't like the style": "스타일을 좋아하지 않으세요?",
 	"Done": "",
 	"Done": "",
 	"Download": "다운로드",
 	"Download": "다운로드",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "커뮤니티 공유 활성화",
 	"Enable Community Sharing": "커뮤니티 공유 활성화",
 	"Enable New Sign Ups": "새 회원가입 활성화",
 	"Enable New Sign Ups": "새 회원가입 활성화",
 	"Enable Web Search": "웹 검색 활성화",
 	"Enable Web Search": "웹 검색 활성화",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "CSV 파일에 이름, 이메일, 비밀번호, 역할 4개의 컬럼이 순서대로 포함되어 있는지 확인하세요.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "CSV 파일에 이름, 이메일, 비밀번호, 역할 4개의 컬럼이 순서대로 포함되어 있는지 확인하세요.",
 	"Enter {{role}} message here": "여기에 {{role}} 메시지 입력",
 	"Enter {{role}} message here": "여기에 {{role}} 메시지 입력",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "Serply API 키 입력",
 	"Enter Serply API Key": "Serply API 키 입력",
 	"Enter Serpstack API Key": "Serpstack API 키 입력",
 	"Enter Serpstack API Key": "Serpstack API 키 입력",
 	"Enter stop sequence": "중지 시퀀스 입력",
 	"Enter stop sequence": "중지 시퀀스 입력",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "Tavily API 키 입력",
 	"Enter Tavily API Key": "Tavily API 키 입력",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "Top K 입력",
 	"Enter Top K": "Top K 입력",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "URL 입력(예: http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "URL 입력(예: http://localhost:11434)",
 	"Enter Your Email": "이메일 입력",
 	"Enter Your Email": "이메일 입력",
 	"Enter Your Full Name": "이름 입력",
 	"Enter Your Full Name": "이름 입력",
+	"Enter your message": "",
 	"Enter Your Password": "비밀번호 입력",
 	"Enter Your Password": "비밀번호 입력",
 	"Enter Your Role": "역할 입력",
 	"Enter Your Role": "역할 입력",
 	"Error": "오류",
 	"Error": "오류",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "파일 모드",
 	"File Mode": "파일 모드",
 	"File not found.": "파일을 찾을 수 없습니다.",
 	"File not found.": "파일을 찾을 수 없습니다.",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "프리퀀시 페널티",
 	"Frequency Penalty": "프리퀀시 페널티",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "일반",
 	"General": "일반",
 	"General Settings": "일반 설정",
 	"General Settings": "일반 설정",
 	"Generate Image": "이미지 생성",
 	"Generate Image": "이미지 생성",
 	"Generating search query": "검색 쿼리 생성",
 	"Generating search query": "검색 쿼리 생성",
 	"Generation Info": "생성 정보",
 	"Generation Info": "생성 정보",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "좋은 응답",
 	"Good Response": "좋은 응답",
 	"Google PSE API Key": "Google PSE API 키",
 	"Google PSE API Key": "Google PSE API 키",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "오늘 어떻게 도와드릴까요?",
 	"How can I help you today?": "오늘 어떻게 도와드릴까요?",
 	"Hybrid Search": "하이브리드 검색",
 	"Hybrid Search": "하이브리드 검색",
+	"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
 	"Image Generation (Experimental)": "이미지 생성(실험적)",
 	"Image Generation (Experimental)": "이미지 생성(실험적)",
 	"Image Generation Engine": "이미지 생성 엔진",
 	"Image Generation Engine": "이미지 생성 엔진",
 	"Image Settings": "이미지 설정",
 	"Image Settings": "이미지 설정",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "키보드 단축키",
 	"Keyboard shortcuts": "키보드 단축키",
 	"Knowledge": "지식 기반",
 	"Knowledge": "지식 기반",
 	"Language": "언어",
 	"Language": "언어",
+	"large language models, locally.": "",
 	"Last Active": "최근 활동",
 	"Last Active": "최근 활동",
 	"Last Modified": "마지막 수정",
 	"Last Modified": "마지막 수정",
 	"Light": "Light",
 	"Light": "Light",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "파이프라인 밸브",
 	"Pipelines Valves": "파이프라인 밸브",
 	"Plain text (.txt)": "일반 텍스트(.txt)",
 	"Plain text (.txt)": "일반 텍스트(.txt)",
 	"Playground": "놀이터",
 	"Playground": "놀이터",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "긍정적인 자세",
 	"Positive attitude": "긍정적인 자세",
 	"Previous 30 days": "이전 30일",
 	"Previous 30 days": "이전 30일",
 	"Previous 7 days": "이전 7일",
 	"Previous 7 days": "이전 7일",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "실행 중",
 	"Running": "실행 중",
 	"Save": "저장",
 	"Save": "저장",
 	"Save & Create": "저장 및 생성",
 	"Save & Create": "저장 및 생성",
@@ -558,6 +579,8 @@
 	"Success": "성공",
 	"Success": "성공",
 	"Successfully updated.": "성공적으로 업데이트되었습니다.",
 	"Successfully updated.": "성공적으로 업데이트되었습니다.",
 	"Suggested": "제안",
 	"Suggested": "제안",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "시스템",
 	"System": "시스템",
 	"System Prompt": "시스템 프롬프트",
 	"System Prompt": "시스템 프롬프트",
 	"Tags": "태그",
 	"Tags": "태그",
@@ -570,6 +593,7 @@
 	"Text-to-Speech Engine": "텍스트-음성 변환 엔진",
 	"Text-to-Speech Engine": "텍스트-음성 변환 엔진",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "피드백 감사합니다!",
 	"Thanks for your feedback!": "피드백 감사합니다!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "점수는 0.0(0%)에서 1.0(100%) 사이의 값이어야 합니다.",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "점수는 0.0(0%)에서 1.0(100%) 사이의 값이어야 합니다.",
 	"Theme": "테마",
 	"Theme": "테마",
 	"Thinking...": "생각 중...",
 	"Thinking...": "생각 중...",
@@ -603,7 +627,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "도구",
 	"Tools": "도구",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Trouble accessing Ollama?": "Ollama에 접근하는 데 문제가 있나요?",
 	"Trouble accessing Ollama?": "Ollama에 접근하는 데 문제가 있나요?",
@@ -645,6 +675,7 @@
 	"Version": "버전",
 	"Version": "버전",
 	"Voice": "음성",
 	"Voice": "음성",
 	"Warning": "경고",
 	"Warning": "경고",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "주의: 기존 임베딩 모델을 변경 또는 업데이트하는 경우, 모든 문서를 다시 가져와야 합니다.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "주의: 기존 임베딩 모델을 변경 또는 업데이트하는 경우, 모든 문서를 다시 가져와야 합니다.",
 	"Web": "웹",
 	"Web": "웹",
 	"Web API": "웹 API",
 	"Web API": "웹 API",
@@ -671,6 +702,7 @@
 	"You're a helpful assistant.": "당신은 유용한 어시스턴트입니다.",
 	"You're a helpful assistant.": "당신은 유용한 어시스턴트입니다.",
 	"You're now logged in.": "로그인되었습니다.",
 	"You're now logged in.": "로그인되었습니다.",
 	"Your account status is currently pending activation.": "현재 계정은 아직 활성화되지 않았습니다.",
 	"Your account status is currently pending activation.": "현재 계정은 아직 활성화되지 않았습니다.",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "유튜브",
 	"Youtube": "유튜브",
 	"Youtube Loader Settings": "유튜브 로더 설정"
 	"Youtube Loader Settings": "유튜브 로더 설정"
 }
 }

+ 32 - 0
src/lib/i18n/locales/lt-LT/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "",
 	"Deleted {{name}}": "",
 	"Description": "Aprašymas",
 	"Description": "Aprašymas",
 	"Didn't fully follow instructions": "Pilnai nesekė instrukcijų",
 	"Didn't fully follow instructions": "Pilnai nesekė instrukcijų",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "",
 	"Discover a model": "",
 	"Discover a prompt": "Atrasti užklausas",
 	"Discover a prompt": "Atrasti užklausas",
@@ -188,6 +189,8 @@
 	"Dismissible": "",
 	"Dismissible": "",
 	"Display Emoji in Call": "",
 	"Display Emoji in Call": "",
 	"Display the username instead of You in the Chat": "Rodyti naudotojo vardą vietoje žodžio Jūs pokalbyje",
 	"Display the username instead of You in the Chat": "Rodyti naudotojo vardą vietoje žodžio Jūs pokalbyje",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "Dokumentas",
 	"Document": "Dokumentas",
 	"Document Settings": "Dokumento nuostatos",
 	"Document Settings": "Dokumento nuostatos",
 	"Documentation": "",
 	"Documentation": "",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "neturi jokių išorinių ryšių ir duomenys lieka serveryje.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "neturi jokių išorinių ryšių ir duomenys lieka serveryje.",
 	"Don't Allow": "Neleisti",
 	"Don't Allow": "Neleisti",
 	"Don't have an account?": "Neturite paskyros?",
 	"Don't have an account?": "Neturite paskyros?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "Nepatinka stilius",
 	"Don't like the style": "Nepatinka stilius",
 	"Done": "",
 	"Done": "",
 	"Download": "Parsisiųsti",
 	"Download": "Parsisiųsti",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "",
 	"Enable Community Sharing": "",
 	"Enable New Sign Ups": "Aktyvuoti naujas registracijas",
 	"Enable New Sign Ups": "Aktyvuoti naujas registracijas",
 	"Enable Web Search": "",
 	"Enable Web Search": "",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Įsitikinkite, kad CSV failas turi 4 kolonas šiuo eiliškumu: Name, Email, Password, Role.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Įsitikinkite, kad CSV failas turi 4 kolonas šiuo eiliškumu: Name, Email, Password, Role.",
 	"Enter {{role}} message here": "Įveskite {{role}} žinutę čia",
 	"Enter {{role}} message here": "Įveskite {{role}} žinutę čia",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "",
 	"Enter Serpstack API Key": "",
 	"Enter stop sequence": "Įveskite pabaigos sekvenciją",
 	"Enter stop sequence": "Įveskite pabaigos sekvenciją",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "",
 	"Enter Tavily API Key": "",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "Įveskite Top K",
 	"Enter Top K": "Įveskite Top K",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "Įveskite nuorododą (pvz. http://localhost:11434",
 	"Enter URL (e.g. http://localhost:11434)": "Įveskite nuorododą (pvz. http://localhost:11434",
 	"Enter Your Email": "Įveskite el. pašto adresą",
 	"Enter Your Email": "Įveskite el. pašto adresą",
 	"Enter Your Full Name": "Įveskite vardą bei pavardę",
 	"Enter Your Full Name": "Įveskite vardą bei pavardę",
+	"Enter your message": "",
 	"Enter Your Password": "Įveskite slaptažodį",
 	"Enter Your Password": "Įveskite slaptažodį",
 	"Enter Your Role": "Įveskite savo rolę",
 	"Enter Your Role": "Įveskite savo rolę",
 	"Error": "",
 	"Error": "",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "Dokumentų rėžimas",
 	"File Mode": "Dokumentų rėžimas",
 	"File not found.": "Failas nerastas.",
 	"File not found.": "Failas nerastas.",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "",
 	"Frequency Penalty": "",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "Bendri",
 	"General": "Bendri",
 	"General Settings": "Bendri nustatymai",
 	"General Settings": "Bendri nustatymai",
 	"Generate Image": "",
 	"Generate Image": "",
 	"Generating search query": "",
 	"Generating search query": "",
 	"Generation Info": "Generavimo informacija",
 	"Generation Info": "Generavimo informacija",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "Geras atsakymas",
 	"Good Response": "Geras atsakymas",
 	"Google PSE API Key": "",
 	"Google PSE API Key": "",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "Kuo galėčiau Jums padėti ?",
 	"How can I help you today?": "Kuo galėčiau Jums padėti ?",
 	"Hybrid Search": "Hibridinė paieška",
 	"Hybrid Search": "Hibridinė paieška",
+	"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.": "",
 	"Image Generation (Experimental)": "Vaizdų generavimas (eksperimentinis)",
 	"Image Generation (Experimental)": "Vaizdų generavimas (eksperimentinis)",
 	"Image Generation Engine": "Vaizdų generavimo variklis",
 	"Image Generation Engine": "Vaizdų generavimo variklis",
 	"Image Settings": "Vaizdų nustatymai",
 	"Image Settings": "Vaizdų nustatymai",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "Klaviatūros trumpiniai",
 	"Keyboard shortcuts": "Klaviatūros trumpiniai",
 	"Knowledge": "",
 	"Knowledge": "",
 	"Language": "Kalba",
 	"Language": "Kalba",
+	"large language models, locally.": "",
 	"Last Active": "Paskutinį kartą aktyvus",
 	"Last Active": "Paskutinį kartą aktyvus",
 	"Last Modified": "",
 	"Last Modified": "",
 	"Light": "Šviesus",
 	"Light": "Šviesus",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "",
 	"Pipelines Valves": "",
 	"Plain text (.txt)": "Grynas tekstas (.txt)",
 	"Plain text (.txt)": "Grynas tekstas (.txt)",
 	"Playground": "Eksperimentavimo erdvė",
 	"Playground": "Eksperimentavimo erdvė",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "Pozityvus elgesys",
 	"Positive attitude": "Pozityvus elgesys",
 	"Previous 30 days": "Paskutinės 30 dienų",
 	"Previous 30 days": "Paskutinės 30 dienų",
 	"Previous 7 days": "Paskutinės 7 dienos",
 	"Previous 7 days": "Paskutinės 7 dienos",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"RTL": "",
 	"RTL": "",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "",
 	"Running": "",
 	"Save": "Išsaugoti",
 	"Save": "Išsaugoti",
 	"Save & Create": "Išsaugoti ir sukurti",
 	"Save & Create": "Išsaugoti ir sukurti",
@@ -560,6 +581,8 @@
 	"Success": "Sėkmingai",
 	"Success": "Sėkmingai",
 	"Successfully updated.": "Sėkmingai atnaujinta.",
 	"Successfully updated.": "Sėkmingai atnaujinta.",
 	"Suggested": "Siūloma",
 	"Suggested": "Siūloma",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "Sistema",
 	"System": "Sistema",
 	"System Prompt": "Sistemos užklausa",
 	"System Prompt": "Sistemos užklausa",
 	"Tags": "Žymos",
 	"Tags": "Žymos",
@@ -572,6 +595,7 @@
 	"Text-to-Speech Engine": "Balso sintezės modelis",
 	"Text-to-Speech Engine": "Balso sintezės modelis",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Ačiū už atsiliepimus",
 	"Thanks for your feedback!": "Ačiū už atsiliepimus",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Rezultatas turėtų būti tarp 0.0 (0%) ir 1.0 (100%)",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Rezultatas turėtų būti tarp 0.0 (0%) ir 1.0 (100%)",
 	"Theme": "Tema",
 	"Theme": "Tema",
 	"Thinking...": "",
 	"Thinking...": "",
@@ -605,7 +629,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "",
 	"Tools": "",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Trouble accessing Ollama?": "Problemos prieinant prie Ollama?",
 	"Trouble accessing Ollama?": "Problemos prieinant prie Ollama?",
@@ -647,6 +677,7 @@
 	"Version": "Versija",
 	"Version": "Versija",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "",
 	"Warning": "",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Jei pakeisite embedding modelį, turėsite reimportuoti visus dokumentus",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Jei pakeisite embedding modelį, turėsite reimportuoti visus dokumentus",
 	"Web": "Web",
 	"Web": "Web",
 	"Web API": "",
 	"Web API": "",
@@ -673,6 +704,7 @@
 	"You're a helpful assistant.": "Esi asistentas.",
 	"You're a helpful assistant.": "Esi asistentas.",
 	"You're now logged in.": "Esate prisijungę.",
 	"You're now logged in.": "Esate prisijungę.",
 	"Your account status is currently pending activation.": "",
 	"Your account status is currently pending activation.": "",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "Youtube",
 	"Youtube": "Youtube",
 	"Youtube Loader Settings": "Youtube krovimo nustatymai"
 	"Youtube Loader Settings": "Youtube krovimo nustatymai"
 }
 }

+ 32 - 0
src/lib/i18n/locales/nb-NO/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "Slettet {{name}}",
 	"Deleted {{name}}": "Slettet {{name}}",
 	"Description": "Beskrivelse",
 	"Description": "Beskrivelse",
 	"Didn't fully follow instructions": "Fulgte ikke instruksjonene fullt ut",
 	"Didn't fully follow instructions": "Fulgte ikke instruksjonene fullt ut",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "Oppdag en modell",
 	"Discover a model": "Oppdag en modell",
 	"Discover a prompt": "Oppdag en prompt",
 	"Discover a prompt": "Oppdag en prompt",
@@ -188,6 +189,8 @@
 	"Dismissible": "",
 	"Dismissible": "",
 	"Display Emoji in Call": "",
 	"Display Emoji in Call": "",
 	"Display the username instead of You in the Chat": "Vis brukernavnet i stedet for Du i chatten",
 	"Display the username instead of You in the Chat": "Vis brukernavnet i stedet for Du i chatten",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "Dokument",
 	"Document": "Dokument",
 	"Document Settings": "Dokumentinnstillinger",
 	"Document Settings": "Dokumentinnstillinger",
 	"Documentation": "Dokumentasjon",
 	"Documentation": "Dokumentasjon",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "lager ingen eksterne tilkoblinger, og dataene dine forblir trygt på din lokalt hostede server.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "lager ingen eksterne tilkoblinger, og dataene dine forblir trygt på din lokalt hostede server.",
 	"Don't Allow": "Ikke tillat",
 	"Don't Allow": "Ikke tillat",
 	"Don't have an account?": "Har du ikke en konto?",
 	"Don't have an account?": "Har du ikke en konto?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "Liker ikke stilen",
 	"Don't like the style": "Liker ikke stilen",
 	"Done": "",
 	"Done": "",
 	"Download": "Last ned",
 	"Download": "Last ned",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "Aktiver deling i fellesskap",
 	"Enable Community Sharing": "Aktiver deling i fellesskap",
 	"Enable New Sign Ups": "Aktiver nye registreringer",
 	"Enable New Sign Ups": "Aktiver nye registreringer",
 	"Enable Web Search": "Aktiver websøk",
 	"Enable Web Search": "Aktiver websøk",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Sørg for at CSV-filen din inkluderer 4 kolonner i denne rekkefølgen: Navn, E-post, Passord, Rolle.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Sørg for at CSV-filen din inkluderer 4 kolonner i denne rekkefølgen: Navn, E-post, Passord, Rolle.",
 	"Enter {{role}} message here": "Skriv inn {{role}} melding her",
 	"Enter {{role}} message here": "Skriv inn {{role}} melding her",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Skriv inn Serpstack API-nøkkel",
 	"Enter Serpstack API Key": "Skriv inn Serpstack API-nøkkel",
 	"Enter stop sequence": "Skriv inn stoppsekvens",
 	"Enter stop sequence": "Skriv inn stoppsekvens",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "",
 	"Enter Tavily API Key": "",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "Skriv inn Top K",
 	"Enter Top K": "Skriv inn Top K",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "Skriv inn URL (f.eks. http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "Skriv inn URL (f.eks. http://localhost:11434)",
 	"Enter Your Email": "Skriv inn din e-post",
 	"Enter Your Email": "Skriv inn din e-post",
 	"Enter Your Full Name": "Skriv inn ditt fulle navn",
 	"Enter Your Full Name": "Skriv inn ditt fulle navn",
+	"Enter your message": "",
 	"Enter Your Password": "Skriv inn ditt passord",
 	"Enter Your Password": "Skriv inn ditt passord",
 	"Enter Your Role": "Skriv inn din rolle",
 	"Enter Your Role": "Skriv inn din rolle",
 	"Error": "Feil",
 	"Error": "Feil",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "Filmodus",
 	"File Mode": "Filmodus",
 	"File not found.": "Fil ikke funnet.",
 	"File not found.": "Fil ikke funnet.",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "Frekvensstraff",
 	"Frequency Penalty": "Frekvensstraff",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "Generelt",
 	"General": "Generelt",
 	"General Settings": "Generelle innstillinger",
 	"General Settings": "Generelle innstillinger",
 	"Generate Image": "",
 	"Generate Image": "",
 	"Generating search query": "Genererer søkeforespørsel",
 	"Generating search query": "Genererer søkeforespørsel",
 	"Generation Info": "Generasjonsinfo",
 	"Generation Info": "Generasjonsinfo",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "Godt svar",
 	"Good Response": "Godt svar",
 	"Google PSE API Key": "Google PSE API-nøkkel",
 	"Google PSE API Key": "Google PSE API-nøkkel",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "Hvordan kan jeg hjelpe deg i dag?",
 	"How can I help you today?": "Hvordan kan jeg hjelpe deg i dag?",
 	"Hybrid Search": "Hybrid-søk",
 	"Hybrid Search": "Hybrid-søk",
+	"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.": "",
 	"Image Generation (Experimental)": "Bildegenerering (Eksperimentell)",
 	"Image Generation (Experimental)": "Bildegenerering (Eksperimentell)",
 	"Image Generation Engine": "Bildegenereringsmotor",
 	"Image Generation Engine": "Bildegenereringsmotor",
 	"Image Settings": "Bildeinnstillinger",
 	"Image Settings": "Bildeinnstillinger",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "Hurtigtaster",
 	"Keyboard shortcuts": "Hurtigtaster",
 	"Knowledge": "",
 	"Knowledge": "",
 	"Language": "Språk",
 	"Language": "Språk",
+	"large language models, locally.": "",
 	"Last Active": "Sist aktiv",
 	"Last Active": "Sist aktiv",
 	"Last Modified": "",
 	"Last Modified": "",
 	"Light": "Lys",
 	"Light": "Lys",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "Pipeline-ventiler",
 	"Pipelines Valves": "Pipeline-ventiler",
 	"Plain text (.txt)": "Ren tekst (.txt)",
 	"Plain text (.txt)": "Ren tekst (.txt)",
 	"Playground": "Lekeplass",
 	"Playground": "Lekeplass",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "Positiv holdning",
 	"Positive attitude": "Positiv holdning",
 	"Previous 30 days": "Forrige 30 dager",
 	"Previous 30 days": "Forrige 30 dager",
 	"Previous 7 days": "Forrige 7 dager",
 	"Previous 7 days": "Forrige 7 dager",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "",
 	"Running": "",
 	"Save": "Lagre",
 	"Save": "Lagre",
 	"Save & Create": "Lagre og opprett",
 	"Save & Create": "Lagre og opprett",
@@ -558,6 +579,8 @@
 	"Success": "Suksess",
 	"Success": "Suksess",
 	"Successfully updated.": "Oppdatert.",
 	"Successfully updated.": "Oppdatert.",
 	"Suggested": "Foreslått",
 	"Suggested": "Foreslått",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "System",
 	"System": "System",
 	"System Prompt": "Systemprompt",
 	"System Prompt": "Systemprompt",
 	"Tags": "Tagger",
 	"Tags": "Tagger",
@@ -570,6 +593,7 @@
 	"Text-to-Speech Engine": "Tekst-til-tale-motor",
 	"Text-to-Speech Engine": "Tekst-til-tale-motor",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Takk for tilbakemeldingen!",
 	"Thanks for your feedback!": "Takk for tilbakemeldingen!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Poengsummen skal være en verdi mellom 0,0 (0%) og 1,0 (100%).",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Poengsummen skal være en verdi mellom 0,0 (0%) og 1,0 (100%).",
 	"Theme": "Tema",
 	"Theme": "Tema",
 	"Thinking...": "",
 	"Thinking...": "",
@@ -603,7 +627,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "",
 	"Tools": "",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Trouble accessing Ollama?": "Problemer med tilgang til Ollama?",
 	"Trouble accessing Ollama?": "Problemer med tilgang til Ollama?",
@@ -645,6 +675,7 @@
 	"Version": "Versjon",
 	"Version": "Versjon",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "Advarsel",
 	"Warning": "Advarsel",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Advarsel: Hvis du oppdaterer eller endrer embedding-modellen din, må du re-importere alle dokumenter.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Advarsel: Hvis du oppdaterer eller endrer embedding-modellen din, må du re-importere alle dokumenter.",
 	"Web": "Web",
 	"Web": "Web",
 	"Web API": "",
 	"Web API": "",
@@ -671,6 +702,7 @@
 	"You're a helpful assistant.": "Du er en hjelpsom assistent.",
 	"You're a helpful assistant.": "Du er en hjelpsom assistent.",
 	"You're now logged in.": "Du er nå logget inn.",
 	"You're now logged in.": "Du er nå logget inn.",
 	"Your account status is currently pending activation.": "",
 	"Your account status is currently pending activation.": "",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "Youtube",
 	"Youtube": "Youtube",
 	"Youtube Loader Settings": "Youtube-lasterinnstillinger"
 	"Youtube Loader Settings": "Youtube-lasterinnstillinger"
 }
 }

+ 32 - 0
src/lib/i18n/locales/nl-NL/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "{{name}} verwijderd",
 	"Deleted {{name}}": "{{name}} verwijderd",
 	"Description": "Beschrijving",
 	"Description": "Beschrijving",
 	"Didn't fully follow instructions": "Ik heb niet alle instructies volgt",
 	"Didn't fully follow instructions": "Ik heb niet alle instructies volgt",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "Ontdek een model",
 	"Discover a model": "Ontdek een model",
 	"Discover a prompt": "Ontdek een prompt",
 	"Discover a prompt": "Ontdek een prompt",
@@ -188,6 +189,8 @@
 	"Dismissible": "",
 	"Dismissible": "",
 	"Display Emoji in Call": "",
 	"Display Emoji in Call": "",
 	"Display the username instead of You in the Chat": "Toon de gebruikersnaam in plaats van Jij in de Chat",
 	"Display the username instead of You in the Chat": "Toon de gebruikersnaam in plaats van Jij in de Chat",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "Document",
 	"Document": "Document",
 	"Document Settings": "Document Instellingen",
 	"Document Settings": "Document Instellingen",
 	"Documentation": "",
 	"Documentation": "",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "maakt geen externe verbindingen, en je gegevens blijven veilig op je lokaal gehoste server.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "maakt geen externe verbindingen, en je gegevens blijven veilig op je lokaal gehoste server.",
 	"Don't Allow": "Niet Toestaan",
 	"Don't Allow": "Niet Toestaan",
 	"Don't have an account?": "Heb je geen account?",
 	"Don't have an account?": "Heb je geen account?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "Je vindt het stijl niet?",
 	"Don't like the style": "Je vindt het stijl niet?",
 	"Done": "",
 	"Done": "",
 	"Download": "Download",
 	"Download": "Download",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "Delen via de community inschakelen",
 	"Enable Community Sharing": "Delen via de community inschakelen",
 	"Enable New Sign Ups": "Schakel Nieuwe Registraties in",
 	"Enable New Sign Ups": "Schakel Nieuwe Registraties in",
 	"Enable Web Search": "Zoeken op het web inschakelen",
 	"Enable Web Search": "Zoeken op het web inschakelen",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Zorg ervoor dat uw CSV-bestand de volgende vier kolommen in deze volgorde bevat: Naam, E-mail, Wachtwoord, Rol.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Zorg ervoor dat uw CSV-bestand de volgende vier kolommen in deze volgorde bevat: Naam, E-mail, Wachtwoord, Rol.",
 	"Enter {{role}} message here": "Voeg {{role}} bericht hier toe",
 	"Enter {{role}} message here": "Voeg {{role}} bericht hier toe",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Voer de Serpstack API-sleutel in",
 	"Enter Serpstack API Key": "Voer de Serpstack API-sleutel in",
 	"Enter stop sequence": "Zet stop sequentie",
 	"Enter stop sequence": "Zet stop sequentie",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "",
 	"Enter Tavily API Key": "",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "Voeg Top K toe",
 	"Enter Top K": "Voeg Top K toe",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "Zet URL (Bijv. http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "Zet URL (Bijv. http://localhost:11434)",
 	"Enter Your Email": "Voer je Email in",
 	"Enter Your Email": "Voer je Email in",
 	"Enter Your Full Name": "Voer je Volledige Naam in",
 	"Enter Your Full Name": "Voer je Volledige Naam in",
+	"Enter your message": "",
 	"Enter Your Password": "Voer je Wachtwoord in",
 	"Enter Your Password": "Voer je Wachtwoord in",
 	"Enter Your Role": "Voer je Rol in",
 	"Enter Your Role": "Voer je Rol in",
 	"Error": "Fout",
 	"Error": "Fout",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "Bestandsmodus",
 	"File Mode": "Bestandsmodus",
 	"File not found.": "Bestand niet gevonden.",
 	"File not found.": "Bestand niet gevonden.",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "Frequentie Straf",
 	"Frequency Penalty": "Frequentie Straf",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "Algemeen",
 	"General": "Algemeen",
 	"General Settings": "Algemene Instellingen",
 	"General Settings": "Algemene Instellingen",
 	"Generate Image": "",
 	"Generate Image": "",
 	"Generating search query": "Zoekopdracht genereren",
 	"Generating search query": "Zoekopdracht genereren",
 	"Generation Info": "Generatie Info",
 	"Generation Info": "Generatie Info",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "Goede Antwoord",
 	"Good Response": "Goede Antwoord",
 	"Google PSE API Key": "Google PSE API-sleutel",
 	"Google PSE API Key": "Google PSE API-sleutel",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "Hoe kan ik je vandaag helpen?",
 	"How can I help you today?": "Hoe kan ik je vandaag helpen?",
 	"Hybrid Search": "Hybride Zoeken",
 	"Hybrid Search": "Hybride Zoeken",
+	"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.": "",
 	"Image Generation (Experimental)": "Afbeelding Generatie (Experimenteel)",
 	"Image Generation (Experimental)": "Afbeelding Generatie (Experimenteel)",
 	"Image Generation Engine": "Afbeelding Generatie Engine",
 	"Image Generation Engine": "Afbeelding Generatie Engine",
 	"Image Settings": "Afbeelding Instellingen",
 	"Image Settings": "Afbeelding Instellingen",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "Toetsenbord snelkoppelingen",
 	"Keyboard shortcuts": "Toetsenbord snelkoppelingen",
 	"Knowledge": "",
 	"Knowledge": "",
 	"Language": "Taal",
 	"Language": "Taal",
+	"large language models, locally.": "",
 	"Last Active": "Laatst Actief",
 	"Last Active": "Laatst Actief",
 	"Last Modified": "",
 	"Last Modified": "",
 	"Light": "Licht",
 	"Light": "Licht",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "Pijpleidingen Kleppen",
 	"Pipelines Valves": "Pijpleidingen Kleppen",
 	"Plain text (.txt)": "Platte tekst (.txt)",
 	"Plain text (.txt)": "Platte tekst (.txt)",
 	"Playground": "Speeltuin",
 	"Playground": "Speeltuin",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "Positieve positie",
 	"Positive attitude": "Positieve positie",
 	"Previous 30 days": "Vorige 30 dagen",
 	"Previous 30 days": "Vorige 30 dagen",
 	"Previous 7 days": "Vorige 7 dagen",
 	"Previous 7 days": "Vorige 7 dagen",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "",
 	"Running": "",
 	"Save": "Opslaan",
 	"Save": "Opslaan",
 	"Save & Create": "Opslaan & Creëren",
 	"Save & Create": "Opslaan & Creëren",
@@ -558,6 +579,8 @@
 	"Success": "Succes",
 	"Success": "Succes",
 	"Successfully updated.": "Succesvol bijgewerkt.",
 	"Successfully updated.": "Succesvol bijgewerkt.",
 	"Suggested": "Suggestie",
 	"Suggested": "Suggestie",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "Systeem",
 	"System": "Systeem",
 	"System Prompt": "Systeem Prompt",
 	"System Prompt": "Systeem Prompt",
 	"Tags": "Tags",
 	"Tags": "Tags",
@@ -570,6 +593,7 @@
 	"Text-to-Speech Engine": "Tekst-naar-Spraak Engine",
 	"Text-to-Speech Engine": "Tekst-naar-Spraak Engine",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Bedankt voor uw feedback!",
 	"Thanks for your feedback!": "Bedankt voor uw feedback!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Het score moet een waarde zijn tussen 0.0 (0%) en 1.0 (100%).",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Het score moet een waarde zijn tussen 0.0 (0%) en 1.0 (100%).",
 	"Theme": "Thema",
 	"Theme": "Thema",
 	"Thinking...": "",
 	"Thinking...": "",
@@ -603,7 +627,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "",
 	"Tools": "",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Trouble accessing Ollama?": "Problemen met toegang tot Ollama?",
 	"Trouble accessing Ollama?": "Problemen met toegang tot Ollama?",
@@ -645,6 +675,7 @@
 	"Version": "Versie",
 	"Version": "Versie",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "Waarschuwing",
 	"Warning": "Waarschuwing",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Warning: Als je de embedding model bijwerkt of wijzigt, moet je alle documenten opnieuw importeren.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Warning: Als je de embedding model bijwerkt of wijzigt, moet je alle documenten opnieuw importeren.",
 	"Web": "Web",
 	"Web": "Web",
 	"Web API": "",
 	"Web API": "",
@@ -671,6 +702,7 @@
 	"You're a helpful assistant.": "Jij bent een behulpzame assistent.",
 	"You're a helpful assistant.": "Jij bent een behulpzame assistent.",
 	"You're now logged in.": "Je bent nu ingelogd.",
 	"You're now logged in.": "Je bent nu ingelogd.",
 	"Your account status is currently pending activation.": "",
 	"Your account status is currently pending activation.": "",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "Youtube",
 	"Youtube": "Youtube",
 	"Youtube Loader Settings": "Youtube-laderinstellingen"
 	"Youtube Loader Settings": "Youtube-laderinstellingen"
 }
 }

+ 32 - 0
src/lib/i18n/locales/pa-IN/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "ਮਿਟਾ ਦਿੱਤਾ ਗਿਆ {{name}}",
 	"Deleted {{name}}": "ਮਿਟਾ ਦਿੱਤਾ ਗਿਆ {{name}}",
 	"Description": "ਵਰਣਨਾ",
 	"Description": "ਵਰਣਨਾ",
 	"Didn't fully follow instructions": "ਹਦਾਇਤਾਂ ਨੂੰ ਪੂਰੀ ਤਰ੍ਹਾਂ ਫਾਲੋ ਨਹੀਂ ਕੀਤਾ",
 	"Didn't fully follow instructions": "ਹਦਾਇਤਾਂ ਨੂੰ ਪੂਰੀ ਤਰ੍ਹਾਂ ਫਾਲੋ ਨਹੀਂ ਕੀਤਾ",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "ਇੱਕ ਮਾਡਲ ਲੱਭੋ",
 	"Discover a model": "ਇੱਕ ਮਾਡਲ ਲੱਭੋ",
 	"Discover a prompt": "ਇੱਕ ਪ੍ਰੰਪਟ ਖੋਜੋ",
 	"Discover a prompt": "ਇੱਕ ਪ੍ਰੰਪਟ ਖੋਜੋ",
@@ -188,6 +189,8 @@
 	"Dismissible": "",
 	"Dismissible": "",
 	"Display Emoji in Call": "",
 	"Display Emoji in Call": "",
 	"Display the username instead of You in the Chat": "ਗੱਲਬਾਤ 'ਚ ਤੁਹਾਡੇ ਸਥਾਨ 'ਤੇ ਉਪਭੋਗਤਾ ਨਾਮ ਦਿਖਾਓ",
 	"Display the username instead of You in the Chat": "ਗੱਲਬਾਤ 'ਚ ਤੁਹਾਡੇ ਸਥਾਨ 'ਤੇ ਉਪਭੋਗਤਾ ਨਾਮ ਦਿਖਾਓ",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "ਡਾਕੂਮੈਂਟ",
 	"Document": "ਡਾਕੂਮੈਂਟ",
 	"Document Settings": "ਡਾਕੂਮੈਂਟ ਸੈਟਿੰਗਾਂ",
 	"Document Settings": "ਡਾਕੂਮੈਂਟ ਸੈਟਿੰਗਾਂ",
 	"Documentation": "",
 	"Documentation": "",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "ਕੋਈ ਬਾਹਰੀ ਕਨੈਕਸ਼ਨ ਨਹੀਂ ਬਣਾਉਂਦਾ, ਅਤੇ ਤੁਹਾਡਾ ਡਾਟਾ ਤੁਹਾਡੇ ਸਥਾਨਕ ਸਰਵਰ 'ਤੇ ਸੁਰੱਖਿਅਤ ਰਹਿੰਦਾ ਹੈ।",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "ਕੋਈ ਬਾਹਰੀ ਕਨੈਕਸ਼ਨ ਨਹੀਂ ਬਣਾਉਂਦਾ, ਅਤੇ ਤੁਹਾਡਾ ਡਾਟਾ ਤੁਹਾਡੇ ਸਥਾਨਕ ਸਰਵਰ 'ਤੇ ਸੁਰੱਖਿਅਤ ਰਹਿੰਦਾ ਹੈ।",
 	"Don't Allow": "ਆਗਿਆ ਨਾ ਦਿਓ",
 	"Don't Allow": "ਆਗਿਆ ਨਾ ਦਿਓ",
 	"Don't have an account?": "ਖਾਤਾ ਨਹੀਂ ਹੈ?",
 	"Don't have an account?": "ਖਾਤਾ ਨਹੀਂ ਹੈ?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "ਸਟਾਈਲ ਪਸੰਦ ਨਹੀਂ ਹੈ",
 	"Don't like the style": "ਸਟਾਈਲ ਪਸੰਦ ਨਹੀਂ ਹੈ",
 	"Done": "",
 	"Done": "",
 	"Download": "ਡਾਊਨਲੋਡ",
 	"Download": "ਡਾਊਨਲੋਡ",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "ਕਮਿਊਨਿਟੀ ਸ਼ੇਅਰਿੰਗ ਨੂੰ ਸਮਰੱਥ ਕਰੋ",
 	"Enable Community Sharing": "ਕਮਿਊਨਿਟੀ ਸ਼ੇਅਰਿੰਗ ਨੂੰ ਸਮਰੱਥ ਕਰੋ",
 	"Enable New Sign Ups": "ਨਵੇਂ ਸਾਈਨ ਅਪ ਯੋਗ ਕਰੋ",
 	"Enable New Sign Ups": "ਨਵੇਂ ਸਾਈਨ ਅਪ ਯੋਗ ਕਰੋ",
 	"Enable Web Search": "ਵੈੱਬ ਖੋਜ ਨੂੰ ਸਮਰੱਥ ਕਰੋ",
 	"Enable Web Search": "ਵੈੱਬ ਖੋਜ ਨੂੰ ਸਮਰੱਥ ਕਰੋ",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "ਸੁਨਿਸ਼ਚਿਤ ਕਰੋ ਕਿ ਤੁਹਾਡੀ CSV ਫਾਈਲ ਵਿੱਚ ਇਸ ਕ੍ਰਮ ਵਿੱਚ 4 ਕਾਲਮ ਹਨ: ਨਾਮ, ਈਮੇਲ, ਪਾਸਵਰਡ, ਭੂਮਿਕਾ।",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "ਸੁਨਿਸ਼ਚਿਤ ਕਰੋ ਕਿ ਤੁਹਾਡੀ CSV ਫਾਈਲ ਵਿੱਚ ਇਸ ਕ੍ਰਮ ਵਿੱਚ 4 ਕਾਲਮ ਹਨ: ਨਾਮ, ਈਮੇਲ, ਪਾਸਵਰਡ, ਭੂਮਿਕਾ।",
 	"Enter {{role}} message here": "{{role}} ਸੁਨੇਹਾ ਇੱਥੇ ਦਰਜ ਕਰੋ",
 	"Enter {{role}} message here": "{{role}} ਸੁਨੇਹਾ ਇੱਥੇ ਦਰਜ ਕਰੋ",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Serpstack API ਕੁੰਜੀ ਦਾਖਲ ਕਰੋ",
 	"Enter Serpstack API Key": "Serpstack API ਕੁੰਜੀ ਦਾਖਲ ਕਰੋ",
 	"Enter stop sequence": "ਰੋਕਣ ਦਾ ਕ੍ਰਮ ਦਰਜ ਕਰੋ",
 	"Enter stop sequence": "ਰੋਕਣ ਦਾ ਕ੍ਰਮ ਦਰਜ ਕਰੋ",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "",
 	"Enter Tavily API Key": "",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "ਸਿਖਰ K ਦਰਜ ਕਰੋ",
 	"Enter Top K": "ਸਿਖਰ K ਦਰਜ ਕਰੋ",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "URL ਦਰਜ ਕਰੋ (ਉਦਾਹਰਣ ਲਈ http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "URL ਦਰਜ ਕਰੋ (ਉਦਾਹਰਣ ਲਈ http://localhost:11434)",
 	"Enter Your Email": "ਆਪਣੀ ਈਮੇਲ ਦਰਜ ਕਰੋ",
 	"Enter Your Email": "ਆਪਣੀ ਈਮੇਲ ਦਰਜ ਕਰੋ",
 	"Enter Your Full Name": "ਆਪਣਾ ਪੂਰਾ ਨਾਮ ਦਰਜ ਕਰੋ",
 	"Enter Your Full Name": "ਆਪਣਾ ਪੂਰਾ ਨਾਮ ਦਰਜ ਕਰੋ",
+	"Enter your message": "",
 	"Enter Your Password": "ਆਪਣਾ ਪਾਸਵਰਡ ਦਰਜ ਕਰੋ",
 	"Enter Your Password": "ਆਪਣਾ ਪਾਸਵਰਡ ਦਰਜ ਕਰੋ",
 	"Enter Your Role": "ਆਪਣੀ ਭੂਮਿਕਾ ਦਰਜ ਕਰੋ",
 	"Enter Your Role": "ਆਪਣੀ ਭੂਮਿਕਾ ਦਰਜ ਕਰੋ",
 	"Error": "ਗਲਤੀ",
 	"Error": "ਗਲਤੀ",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "ਫਾਈਲ ਮੋਡ",
 	"File Mode": "ਫਾਈਲ ਮੋਡ",
 	"File not found.": "ਫਾਈਲ ਨਹੀਂ ਮਿਲੀ।",
 	"File not found.": "ਫਾਈਲ ਨਹੀਂ ਮਿਲੀ।",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "ਬਾਰੰਬਾਰਤਾ ਜੁਰਮਾਨਾ",
 	"Frequency Penalty": "ਬਾਰੰਬਾਰਤਾ ਜੁਰਮਾਨਾ",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "ਆਮ",
 	"General": "ਆਮ",
 	"General Settings": "ਆਮ ਸੈਟਿੰਗਾਂ",
 	"General Settings": "ਆਮ ਸੈਟਿੰਗਾਂ",
 	"Generate Image": "",
 	"Generate Image": "",
 	"Generating search query": "ਖੋਜ ਪੁੱਛਗਿੱਛ ਤਿਆਰ ਕਰਨਾ",
 	"Generating search query": "ਖੋਜ ਪੁੱਛਗਿੱਛ ਤਿਆਰ ਕਰਨਾ",
 	"Generation Info": "ਜਨਰੇਸ਼ਨ ਜਾਣਕਾਰੀ",
 	"Generation Info": "ਜਨਰੇਸ਼ਨ ਜਾਣਕਾਰੀ",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "ਵਧੀਆ ਜਵਾਬ",
 	"Good Response": "ਵਧੀਆ ਜਵਾਬ",
 	"Google PSE API Key": "Google PSE API ਕੁੰਜੀ",
 	"Google PSE API Key": "Google PSE API ਕੁੰਜੀ",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "ਮੈਂ ਅੱਜ ਤੁਹਾਡੀ ਕਿਵੇਂ ਮਦਦ ਕਰ ਸਕਦਾ ਹਾਂ?",
 	"How can I help you today?": "ਮੈਂ ਅੱਜ ਤੁਹਾਡੀ ਕਿਵੇਂ ਮਦਦ ਕਰ ਸਕਦਾ ਹਾਂ?",
 	"Hybrid Search": "ਹਾਈਬ੍ਰਿਡ ਖੋਜ",
 	"Hybrid Search": "ਹਾਈਬ੍ਰਿਡ ਖੋਜ",
+	"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
 	"Image Generation (Experimental)": "ਚਿੱਤਰ ਜਨਰੇਸ਼ਨ (ਪਰਮਾਣੂਕ੍ਰਿਤ)",
 	"Image Generation (Experimental)": "ਚਿੱਤਰ ਜਨਰੇਸ਼ਨ (ਪਰਮਾਣੂਕ੍ਰਿਤ)",
 	"Image Generation Engine": "ਚਿੱਤਰ ਜਨਰੇਸ਼ਨ ਇੰਜਣ",
 	"Image Generation Engine": "ਚਿੱਤਰ ਜਨਰੇਸ਼ਨ ਇੰਜਣ",
 	"Image Settings": "ਚਿੱਤਰ ਸੈਟਿੰਗਾਂ",
 	"Image Settings": "ਚਿੱਤਰ ਸੈਟਿੰਗਾਂ",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "ਕੀਬੋਰਡ ਸ਼ਾਰਟਕਟ",
 	"Keyboard shortcuts": "ਕੀਬੋਰਡ ਸ਼ਾਰਟਕਟ",
 	"Knowledge": "",
 	"Knowledge": "",
 	"Language": "ਭਾਸ਼ਾ",
 	"Language": "ਭਾਸ਼ਾ",
+	"large language models, locally.": "",
 	"Last Active": "ਆਖਰੀ ਸਰਗਰਮ",
 	"Last Active": "ਆਖਰੀ ਸਰਗਰਮ",
 	"Last Modified": "",
 	"Last Modified": "",
 	"Light": "ਹਲਕਾ",
 	"Light": "ਹਲਕਾ",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "ਪਾਈਪਲਾਈਨਾਂ ਵਾਲਵ",
 	"Pipelines Valves": "ਪਾਈਪਲਾਈਨਾਂ ਵਾਲਵ",
 	"Plain text (.txt)": "ਸਧਾਰਨ ਪਾਠ (.txt)",
 	"Plain text (.txt)": "ਸਧਾਰਨ ਪਾਠ (.txt)",
 	"Playground": "ਖੇਡ ਦਾ ਮੈਦਾਨ",
 	"Playground": "ਖੇਡ ਦਾ ਮੈਦਾਨ",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "ਸਕਾਰਾਤਮਕ ਰਵੱਈਆ",
 	"Positive attitude": "ਸਕਾਰਾਤਮਕ ਰਵੱਈਆ",
 	"Previous 30 days": "ਪਿਛਲੇ 30 ਦਿਨ",
 	"Previous 30 days": "ਪਿਛਲੇ 30 ਦਿਨ",
 	"Previous 7 days": "ਪਿਛਲੇ 7 ਦਿਨ",
 	"Previous 7 days": "ਪਿਛਲੇ 7 ਦਿਨ",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "ਰੋਜ਼ ਪਾਈਨ",
 	"Rosé Pine": "ਰੋਜ਼ ਪਾਈਨ",
 	"Rosé Pine Dawn": "ਰੋਜ਼ ਪਾਈਨ ਡਾਨ",
 	"Rosé Pine Dawn": "ਰੋਜ਼ ਪਾਈਨ ਡਾਨ",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "",
 	"Running": "",
 	"Save": "ਸੰਭਾਲੋ",
 	"Save": "ਸੰਭਾਲੋ",
 	"Save & Create": "ਸੰਭਾਲੋ ਅਤੇ ਬਣਾਓ",
 	"Save & Create": "ਸੰਭਾਲੋ ਅਤੇ ਬਣਾਓ",
@@ -558,6 +579,8 @@
 	"Success": "ਸਫਲਤਾ",
 	"Success": "ਸਫਲਤਾ",
 	"Successfully updated.": "ਸਫਲਤਾਪੂਰਵਕ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ।",
 	"Successfully updated.": "ਸਫਲਤਾਪੂਰਵਕ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ।",
 	"Suggested": "ਸੁਝਾਇਆ ਗਿਆ",
 	"Suggested": "ਸੁਝਾਇਆ ਗਿਆ",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "ਸਿਸਟਮ",
 	"System": "ਸਿਸਟਮ",
 	"System Prompt": "ਸਿਸਟਮ ਪ੍ਰੰਪਟ",
 	"System Prompt": "ਸਿਸਟਮ ਪ੍ਰੰਪਟ",
 	"Tags": "ਟੈਗ",
 	"Tags": "ਟੈਗ",
@@ -570,6 +593,7 @@
 	"Text-to-Speech Engine": "ਪਾਠ-ਤੋਂ-ਬੋਲ ਇੰਜਣ",
 	"Text-to-Speech Engine": "ਪਾਠ-ਤੋਂ-ਬੋਲ ਇੰਜਣ",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "ਤੁਹਾਡੇ ਫੀਡਬੈਕ ਲਈ ਧੰਨਵਾਦ!",
 	"Thanks for your feedback!": "ਤੁਹਾਡੇ ਫੀਡਬੈਕ ਲਈ ਧੰਨਵਾਦ!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "ਸਕੋਰ 0.0 (0%) ਅਤੇ 1.0 (100%) ਦੇ ਵਿਚਕਾਰ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "ਸਕੋਰ 0.0 (0%) ਅਤੇ 1.0 (100%) ਦੇ ਵਿਚਕਾਰ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।",
 	"Theme": "ਥੀਮ",
 	"Theme": "ਥੀਮ",
 	"Thinking...": "",
 	"Thinking...": "",
@@ -603,7 +627,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "",
 	"Tools": "",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "ਸਿਖਰ K",
 	"Top K": "ਸਿਖਰ K",
 	"Top P": "ਸਿਖਰ P",
 	"Top P": "ਸਿਖਰ P",
 	"Trouble accessing Ollama?": "ਓਲਾਮਾ ਤੱਕ ਪਹੁੰਚਣ ਵਿੱਚ ਮੁਸ਼ਕਲ?",
 	"Trouble accessing Ollama?": "ਓਲਾਮਾ ਤੱਕ ਪਹੁੰਚਣ ਵਿੱਚ ਮੁਸ਼ਕਲ?",
@@ -645,6 +675,7 @@
 	"Version": "ਵਰਜਨ",
 	"Version": "ਵਰਜਨ",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "ਚੇਤਾਵਨੀ",
 	"Warning": "ਚੇਤਾਵਨੀ",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "ਚੇਤਾਵਨੀ: ਜੇ ਤੁਸੀਂ ਆਪਣਾ ਐਮਬੈੱਡਿੰਗ ਮਾਡਲ ਅੱਪਡੇਟ ਜਾਂ ਬਦਲਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਨੂੰ ਸਾਰੇ ਡਾਕੂਮੈਂਟ ਮੁੜ ਆਯਾਤ ਕਰਨ ਦੀ ਲੋੜ ਹੋਵੇਗੀ।",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "ਚੇਤਾਵਨੀ: ਜੇ ਤੁਸੀਂ ਆਪਣਾ ਐਮਬੈੱਡਿੰਗ ਮਾਡਲ ਅੱਪਡੇਟ ਜਾਂ ਬਦਲਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਨੂੰ ਸਾਰੇ ਡਾਕੂਮੈਂਟ ਮੁੜ ਆਯਾਤ ਕਰਨ ਦੀ ਲੋੜ ਹੋਵੇਗੀ।",
 	"Web": "ਵੈਬ",
 	"Web": "ਵੈਬ",
 	"Web API": "",
 	"Web API": "",
@@ -671,6 +702,7 @@
 	"You're a helpful assistant.": "ਤੁਸੀਂ ਇੱਕ ਮਦਦਗਾਰ ਸਹਾਇਕ ਹੋ।",
 	"You're a helpful assistant.": "ਤੁਸੀਂ ਇੱਕ ਮਦਦਗਾਰ ਸਹਾਇਕ ਹੋ।",
 	"You're now logged in.": "ਤੁਸੀਂ ਹੁਣ ਲੌਗ ਇਨ ਹੋ ਗਏ ਹੋ।",
 	"You're now logged in.": "ਤੁਸੀਂ ਹੁਣ ਲੌਗ ਇਨ ਹੋ ਗਏ ਹੋ।",
 	"Your account status is currently pending activation.": "",
 	"Your account status is currently pending activation.": "",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "ਯੂਟਿਊਬ",
 	"Youtube": "ਯੂਟਿਊਬ",
 	"Youtube Loader Settings": "ਯੂਟਿਊਬ ਲੋਡਰ ਸੈਟਿੰਗਾਂ"
 	"Youtube Loader Settings": "ਯੂਟਿਊਬ ਲੋਡਰ ਸੈਟਿੰਗਾਂ"
 }
 }

+ 32 - 0
src/lib/i18n/locales/pl-PL/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "Usunięto {{name}}",
 	"Deleted {{name}}": "Usunięto {{name}}",
 	"Description": "Opis",
 	"Description": "Opis",
 	"Didn't fully follow instructions": "Nie postępował zgodnie z instrukcjami",
 	"Didn't fully follow instructions": "Nie postępował zgodnie z instrukcjami",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "Odkryj model",
 	"Discover a model": "Odkryj model",
 	"Discover a prompt": "Odkryj prompt",
 	"Discover a prompt": "Odkryj prompt",
@@ -188,6 +189,8 @@
 	"Dismissible": "",
 	"Dismissible": "",
 	"Display Emoji in Call": "",
 	"Display Emoji in Call": "",
 	"Display the username instead of You in the Chat": "Wyświetl nazwę użytkownika zamiast Ty w czacie",
 	"Display the username instead of You in the Chat": "Wyświetl nazwę użytkownika zamiast Ty w czacie",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "Dokument",
 	"Document": "Dokument",
 	"Document Settings": "Ustawienia dokumentu",
 	"Document Settings": "Ustawienia dokumentu",
 	"Documentation": "",
 	"Documentation": "",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "nie nawiązuje żadnych zewnętrznych połączeń, a Twoje dane pozostają bezpiecznie na Twoim lokalnie hostowanym serwerze.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "nie nawiązuje żadnych zewnętrznych połączeń, a Twoje dane pozostają bezpiecznie na Twoim lokalnie hostowanym serwerze.",
 	"Don't Allow": "Nie zezwalaj",
 	"Don't Allow": "Nie zezwalaj",
 	"Don't have an account?": "Nie masz konta?",
 	"Don't have an account?": "Nie masz konta?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "Nie podobał mi się styl",
 	"Don't like the style": "Nie podobał mi się styl",
 	"Done": "",
 	"Done": "",
 	"Download": "Pobieranie",
 	"Download": "Pobieranie",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "Włączanie udostępniania społecznościowego",
 	"Enable Community Sharing": "Włączanie udostępniania społecznościowego",
 	"Enable New Sign Ups": "Włącz nowe rejestracje",
 	"Enable New Sign Ups": "Włącz nowe rejestracje",
 	"Enable Web Search": "Włączanie wyszukiwania w Internecie",
 	"Enable Web Search": "Włączanie wyszukiwania w Internecie",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Upewnij się, że twój plik CSV zawiera 4 kolumny w następującym porządku: Nazwa, Email, Hasło, Rola.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Upewnij się, że twój plik CSV zawiera 4 kolumny w następującym porządku: Nazwa, Email, Hasło, Rola.",
 	"Enter {{role}} message here": "Wprowadź wiadomość {{role}} tutaj",
 	"Enter {{role}} message here": "Wprowadź wiadomość {{role}} tutaj",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Wprowadź klucz API Serpstack",
 	"Enter Serpstack API Key": "Wprowadź klucz API Serpstack",
 	"Enter stop sequence": "Wprowadź sekwencję zatrzymania",
 	"Enter stop sequence": "Wprowadź sekwencję zatrzymania",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "",
 	"Enter Tavily API Key": "",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "Wprowadź Top K",
 	"Enter Top K": "Wprowadź Top K",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "Wprowadź adres URL (np. http://localhost:11434/)",
 	"Enter URL (e.g. http://localhost:11434)": "Wprowadź adres URL (np. http://localhost:11434/)",
 	"Enter Your Email": "Wprowadź swój adres email",
 	"Enter Your Email": "Wprowadź swój adres email",
 	"Enter Your Full Name": "Wprowadź swoje imię i nazwisko",
 	"Enter Your Full Name": "Wprowadź swoje imię i nazwisko",
+	"Enter your message": "",
 	"Enter Your Password": "Wprowadź swoje hasło",
 	"Enter Your Password": "Wprowadź swoje hasło",
 	"Enter Your Role": "Wprowadź swoją rolę",
 	"Enter Your Role": "Wprowadź swoją rolę",
 	"Error": "Błąd",
 	"Error": "Błąd",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "Tryb pliku",
 	"File Mode": "Tryb pliku",
 	"File not found.": "Plik nie został znaleziony.",
 	"File not found.": "Plik nie został znaleziony.",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "Kara za częstotliwość",
 	"Frequency Penalty": "Kara za częstotliwość",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "Ogólne",
 	"General": "Ogólne",
 	"General Settings": "Ogólne ustawienia",
 	"General Settings": "Ogólne ustawienia",
 	"Generate Image": "",
 	"Generate Image": "",
 	"Generating search query": "Generowanie zapytania",
 	"Generating search query": "Generowanie zapytania",
 	"Generation Info": "Informacja o generacji",
 	"Generation Info": "Informacja o generacji",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "Dobra odpowiedź",
 	"Good Response": "Dobra odpowiedź",
 	"Google PSE API Key": "Klucz API Google PSE",
 	"Google PSE API Key": "Klucz API Google PSE",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "Jak mogę Ci dzisiaj pomóc?",
 	"How can I help you today?": "Jak mogę Ci dzisiaj pomóc?",
 	"Hybrid Search": "Szukanie hybrydowe",
 	"Hybrid Search": "Szukanie hybrydowe",
+	"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.": "",
 	"Image Generation (Experimental)": "Generowanie obrazu (eksperymentalne)",
 	"Image Generation (Experimental)": "Generowanie obrazu (eksperymentalne)",
 	"Image Generation Engine": "Silnik generowania obrazu",
 	"Image Generation Engine": "Silnik generowania obrazu",
 	"Image Settings": "Ustawienia obrazu",
 	"Image Settings": "Ustawienia obrazu",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "Skróty klawiszowe",
 	"Keyboard shortcuts": "Skróty klawiszowe",
 	"Knowledge": "",
 	"Knowledge": "",
 	"Language": "Język",
 	"Language": "Język",
+	"large language models, locally.": "",
 	"Last Active": "Ostatnio aktywny",
 	"Last Active": "Ostatnio aktywny",
 	"Last Modified": "",
 	"Last Modified": "",
 	"Light": "Jasny",
 	"Light": "Jasny",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "Rurociągi Zawory",
 	"Pipelines Valves": "Rurociągi Zawory",
 	"Plain text (.txt)": "Zwykły tekst (.txt)",
 	"Plain text (.txt)": "Zwykły tekst (.txt)",
 	"Playground": "Plac zabaw",
 	"Playground": "Plac zabaw",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "Pozytywne podejście",
 	"Positive attitude": "Pozytywne podejście",
 	"Previous 30 days": "Poprzednie 30 dni",
 	"Previous 30 days": "Poprzednie 30 dni",
 	"Previous 7 days": "Poprzednie 7 dni",
 	"Previous 7 days": "Poprzednie 7 dni",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"RTL": "RLT",
 	"RTL": "RLT",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "",
 	"Running": "",
 	"Save": "Zapisz",
 	"Save": "Zapisz",
 	"Save & Create": "Zapisz i utwórz",
 	"Save & Create": "Zapisz i utwórz",
@@ -560,6 +581,8 @@
 	"Success": "Sukces",
 	"Success": "Sukces",
 	"Successfully updated.": "Pomyślnie zaktualizowano.",
 	"Successfully updated.": "Pomyślnie zaktualizowano.",
 	"Suggested": "Sugerowane",
 	"Suggested": "Sugerowane",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "System",
 	"System": "System",
 	"System Prompt": "Prompt systemowy",
 	"System Prompt": "Prompt systemowy",
 	"Tags": "Tagi",
 	"Tags": "Tagi",
@@ -572,6 +595,7 @@
 	"Text-to-Speech Engine": "Silnik tekstu na mowę",
 	"Text-to-Speech Engine": "Silnik tekstu na mowę",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Dzięki za informację zwrotną!",
 	"Thanks for your feedback!": "Dzięki za informację zwrotną!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Wynik powinien być wartością pomiędzy 0.0 (0%) a 1.0 (100%).",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Wynik powinien być wartością pomiędzy 0.0 (0%) a 1.0 (100%).",
 	"Theme": "Motyw",
 	"Theme": "Motyw",
 	"Thinking...": "",
 	"Thinking...": "",
@@ -605,7 +629,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "",
 	"Tools": "",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Najlepsze K",
 	"Top K": "Najlepsze K",
 	"Top P": "Najlepsze P",
 	"Top P": "Najlepsze P",
 	"Trouble accessing Ollama?": "Problemy z dostępem do Ollama?",
 	"Trouble accessing Ollama?": "Problemy z dostępem do Ollama?",
@@ -647,6 +677,7 @@
 	"Version": "Wersja",
 	"Version": "Wersja",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "Ostrzeżenie",
 	"Warning": "Ostrzeżenie",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Uwaga: Jeśli uaktualnisz lub zmienisz model osadzania, będziesz musiał ponownie zaimportować wszystkie dokumenty.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Uwaga: Jeśli uaktualnisz lub zmienisz model osadzania, będziesz musiał ponownie zaimportować wszystkie dokumenty.",
 	"Web": "Sieć",
 	"Web": "Sieć",
 	"Web API": "",
 	"Web API": "",
@@ -673,6 +704,7 @@
 	"You're a helpful assistant.": "Jesteś pomocnym asystentem.",
 	"You're a helpful assistant.": "Jesteś pomocnym asystentem.",
 	"You're now logged in.": "Jesteś teraz zalogowany.",
 	"You're now logged in.": "Jesteś teraz zalogowany.",
 	"Your account status is currently pending activation.": "",
 	"Your account status is currently pending activation.": "",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "Youtube",
 	"Youtube": "Youtube",
 	"Youtube Loader Settings": "Ustawienia pobierania z Youtube"
 	"Youtube Loader Settings": "Ustawienia pobierania z Youtube"
 }
 }

+ 199 - 167
src/lib/i18n/locales/pt-BR/translation.json

@@ -13,38 +13,38 @@
 	"a user": "um usuário",
 	"a user": "um usuário",
 	"About": "Sobre",
 	"About": "Sobre",
 	"Account": "Conta",
 	"Account": "Conta",
-	"Account Activation Pending": "",
+	"Account Activation Pending": "Ativação de Conta Pendente",
 	"Accurate information": "Informações precisas",
 	"Accurate information": "Informações precisas",
-	"Active Users": "",
+	"Active Users": "Usuários Ativos",
 	"Add": "Adicionar",
 	"Add": "Adicionar",
-	"Add a model id": "Adicionar uma ID de modelo",
+	"Add a model id": "Adicionar um ID de modelo",
 	"Add a short description about what this model does": "Adicione uma breve descrição sobre o que este modelo faz",
 	"Add a short description about what this model does": "Adicione uma breve descrição sobre o que este modelo faz",
 	"Add a short title for this prompt": "Adicione um título curto para este prompt",
 	"Add a short title for this prompt": "Adicione um título curto para este prompt",
 	"Add a tag": "Adicionar uma tag",
 	"Add a tag": "Adicionar uma tag",
 	"Add custom prompt": "Adicionar prompt personalizado",
 	"Add custom prompt": "Adicionar prompt personalizado",
 	"Add Docs": "Adicionar Documentos",
 	"Add Docs": "Adicionar Documentos",
 	"Add Files": "Adicionar Arquivos",
 	"Add Files": "Adicionar Arquivos",
-	"Add Memory": "Adicionar memória",
+	"Add Memory": "Adicionar Memória",
 	"Add message": "Adicionar mensagem",
 	"Add message": "Adicionar mensagem",
-	"Add Model": "Adicionar modelo",
-	"Add Tags": "adicionar tags",
+	"Add Model": "Adicionar Modelo",
+	"Add Tags": "adicionar Tags",
 	"Add User": "Adicionar Usuário",
 	"Add User": "Adicionar Usuário",
 	"Adjusting these settings will apply changes universally to all users.": "Ajustar essas configurações aplicará alterações universalmente a todos os usuários.",
 	"Adjusting these settings will apply changes universally to all users.": "Ajustar essas configurações aplicará alterações universalmente a todos os usuários.",
 	"admin": "administrador",
 	"admin": "administrador",
-	"Admin": "",
+	"Admin": "Administrador",
 	"Admin Panel": "Painel do Administrador",
 	"Admin Panel": "Painel do Administrador",
 	"Admin Settings": "Configurações do Administrador",
 	"Admin Settings": "Configurações do Administrador",
-	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
+	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Adminstradores têm acesso a todas as ferramentas o tempo todo; os usuários precisam de ferramentas atribuídas por modelo no espaço de trabalho.",
 	"Advanced Parameters": "Parâmetros Avançados",
 	"Advanced Parameters": "Parâmetros Avançados",
-	"Advanced Params": "Params Avançados",
+	"Advanced Params": "Parâmetros Avançados",
 	"all": "todos",
 	"all": "todos",
 	"All Documents": "Todos os Documentos",
 	"All Documents": "Todos os Documentos",
 	"All Users": "Todos os Usuários",
 	"All Users": "Todos os Usuários",
 	"Allow": "Permitir",
 	"Allow": "Permitir",
 	"Allow Chat Deletion": "Permitir Exclusão de Bate-papo",
 	"Allow Chat Deletion": "Permitir Exclusão de Bate-papo",
-	"Allow non-local voices": "",
-	"Allow User Location": "",
-	"Allow Voice Interruption in Call": "",
+	"Allow non-local voices": "Permitir vozes não locais",
+	"Allow User Location": "Permitir Localização do Usuário",
+	"Allow Voice Interruption in Call": "Permitir Interrupção de Voz na Chamada",
 	"alphanumeric characters and hyphens": "caracteres alfanuméricos e hífens",
 	"alphanumeric characters and hyphens": "caracteres alfanuméricos e hífens",
 	"Already have an account?": "Já tem uma conta?",
 	"Already have an account?": "Já tem uma conta?",
 	"an assistant": "um assistente",
 	"an assistant": "um assistente",
@@ -63,7 +63,7 @@
 	"Attach file": "Anexar arquivo",
 	"Attach file": "Anexar arquivo",
 	"Attention to detail": "Detalhado",
 	"Attention to detail": "Detalhado",
 	"Audio": "Áudio",
 	"Audio": "Áudio",
-	"Audio settings updated successfully": "",
+	"Audio settings updated successfully": "Configurações de áudio atualizadas com sucesso",
 	"August": "Agosto",
 	"August": "Agosto",
 	"Auto-playback response": "Reprodução automática da resposta",
 	"Auto-playback response": "Reprodução automática da resposta",
 	"AUTOMATIC1111 Api Auth String": "",
 	"AUTOMATIC1111 Api Auth String": "",
@@ -74,21 +74,21 @@
 	"Bad Response": "Resposta ruim",
 	"Bad Response": "Resposta ruim",
 	"Banners": "Banners",
 	"Banners": "Banners",
 	"Base Model (From)": "Modelo Base (De)",
 	"Base Model (From)": "Modelo Base (De)",
-	"Batch Size (num_batch)": "",
+	"Batch Size (num_batch)": "Tamanho do Lote (num_batch)",
 	"before": "antes",
 	"before": "antes",
 	"Being lazy": "Ser preguiçoso",
 	"Being lazy": "Ser preguiçoso",
 	"Brave Search API Key": "Chave da API de pesquisa do Brave",
 	"Brave Search API Key": "Chave da API de pesquisa do Brave",
 	"Bypass SSL verification for Websites": "Ignorar verificação SSL para sites",
 	"Bypass SSL verification for Websites": "Ignorar verificação SSL para sites",
-	"Call": "",
-	"Call feature is not supported when using Web STT engine": "",
-	"Camera": "",
+	"Call": "Chamada",
+	"Call feature is not supported when using Web STT engine": "Chamada não é suportada ao usar o mecanismo Web STT",
+	"Camera": "Camera",
 	"Cancel": "Cancelar",
 	"Cancel": "Cancelar",
 	"Capabilities": "Capacidades",
 	"Capabilities": "Capacidades",
 	"Change Password": "Alterar Senha",
 	"Change Password": "Alterar Senha",
 	"Chat": "Bate-papo",
 	"Chat": "Bate-papo",
-	"Chat Background Image": "",
+	"Chat Background Image": "Image de Fundo do Bate-papo",
 	"Chat Bubble UI": "UI de Bala de Bate-papo",
 	"Chat Bubble UI": "UI de Bala de Bate-papo",
-	"Chat Controls": "",
+	"Chat Controls": "Controles de Bate-papo",
 	"Chat direction": "Direção do Bate-papo",
 	"Chat direction": "Direção do Bate-papo",
 	"Chat History": "Histórico de Bate-papo",
 	"Chat History": "Histórico de Bate-papo",
 	"Chat History is off for this browser.": "O histórico de bate-papo está desativado para este navegador.",
 	"Chat History is off for this browser.": "O histórico de bate-papo está desativado para este navegador.",
@@ -101,37 +101,37 @@
 	"Chunk Params": "Parâmetros de Fragmento",
 	"Chunk Params": "Parâmetros de Fragmento",
 	"Chunk Size": "Tamanho do Fragmento",
 	"Chunk Size": "Tamanho do Fragmento",
 	"Citation": "Citação",
 	"Citation": "Citação",
-	"Clear memory": "",
+	"Clear memory": "Limpar memória",
 	"Click here for help.": "Clique aqui para obter ajuda.",
 	"Click here for help.": "Clique aqui para obter ajuda.",
 	"Click here to": "Clique aqui para",
 	"Click here to": "Clique aqui para",
-	"Click here to download user import template file.": "",
+	"Click here to download user import template file.": "Clique aqui para baixar o arquivo de modelo de importação de usuário.",
 	"Click here to select": "Clique aqui para selecionar",
 	"Click here to select": "Clique aqui para selecionar",
 	"Click here to select a csv file.": "Clique aqui para selecionar um arquivo csv.",
 	"Click here to select a csv file.": "Clique aqui para selecionar um arquivo csv.",
-	"Click here to select a py file.": "",
+	"Click here to select a py file.": "Clique aqui para selecionar um arquivo py.",
 	"Click here to select documents.": "Clique aqui para selecionar documentos.",
 	"Click here to select documents.": "Clique aqui para selecionar documentos.",
 	"click here.": "clique aqui.",
 	"click here.": "clique aqui.",
 	"Click on the user role button to change a user's role.": "Clique no botão de função do usuário para alterar a função de um usuário.",
 	"Click on the user role button to change a user's role.": "Clique no botão de função do usuário para alterar a função de um usuário.",
-	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "",
+	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Permissão de gravação da área de transferência negada. Verifique as configurações do seu navegador para conceder o acesso necessário.",
 	"Clone": "Clone",
 	"Clone": "Clone",
 	"Close": "Fechar",
 	"Close": "Fechar",
-	"Code formatted successfully": "",
+	"Code formatted successfully": "Código formatado com sucesso",
 	"Collection": "Coleção",
 	"Collection": "Coleção",
 	"ComfyUI": "ComfyUI",
 	"ComfyUI": "ComfyUI",
 	"ComfyUI Base URL": "URL Base do ComfyUI",
 	"ComfyUI Base URL": "URL Base do ComfyUI",
 	"ComfyUI Base URL is required.": "A URL Base do ComfyUI é obrigatória.",
 	"ComfyUI Base URL is required.": "A URL Base do ComfyUI é obrigatória.",
 	"Command": "Comando",
 	"Command": "Comando",
 	"Concurrent Requests": "Solicitações simultâneas",
 	"Concurrent Requests": "Solicitações simultâneas",
-	"Confirm": "",
+	"Confirm": "Confirmar",
 	"Confirm Password": "Confirmar Senha",
 	"Confirm Password": "Confirmar Senha",
-	"Confirm your action": "",
+	"Confirm your action": "Confirmar sua ação",
 	"Connections": "Conexões",
 	"Connections": "Conexões",
-	"Contact Admin for WebUI Access": "",
+	"Contact Admin for WebUI Access": "Contate o Administrador para Acesso ao WebUI",
 	"Content": "Conteúdo",
 	"Content": "Conteúdo",
-	"Content Extraction": "",
+	"Content Extraction": "Extração de Conteúdo",
 	"Context Length": "Comprimento do Contexto",
 	"Context Length": "Comprimento do Contexto",
 	"Continue Response": "Continuar resposta",
 	"Continue Response": "Continuar resposta",
-	"Continue with {{provider}}": "",
-	"Controls": "",
+	"Continue with {{provider}}": "Continuar com {{provider}}",
+	"Controls": "Controles",
 	"Copied shared chat URL to clipboard!": "URL de bate-papo compartilhado copiada com sucesso!",
 	"Copied shared chat URL to clipboard!": "URL de bate-papo compartilhado copiada com sucesso!",
 	"Copy": "Copiar",
 	"Copy": "Copiar",
 	"Copy last code block": "Copiar último bloco de código",
 	"Copy last code block": "Copiar último bloco de código",
@@ -143,15 +143,15 @@
 	"Create new key": "Criar nova chave",
 	"Create new key": "Criar nova chave",
 	"Create new secret key": "Criar nova chave secreta",
 	"Create new secret key": "Criar nova chave secreta",
 	"Created at": "Criado em",
 	"Created at": "Criado em",
-	"Created At": "Criado em",
-	"Created by": "",
-	"CSV Import": "",
+	"Created At": "Criado Em",
+	"Created by": "Criado por",
+	"CSV Import": "Importação CSV",
 	"Current Model": "Modelo Atual",
 	"Current Model": "Modelo Atual",
 	"Current Password": "Senha Atual",
 	"Current Password": "Senha Atual",
 	"Custom": "Personalizado",
 	"Custom": "Personalizado",
 	"Customize models for a specific purpose": "Personalizar modelos para uma finalidade específica",
 	"Customize models for a specific purpose": "Personalizar modelos para uma finalidade específica",
 	"Dark": "Escuro",
 	"Dark": "Escuro",
-	"Dashboard": "",
+	"Dashboard": "Dashboard",
 	"Database": "Banco de dados",
 	"Database": "Banco de dados",
 	"December": "Dezembro",
 	"December": "Dezembro",
 	"Default": "Padrão",
 	"Default": "Padrão",
@@ -167,36 +167,41 @@
 	"Delete All Chats": "Excluir todos os bate-papos",
 	"Delete All Chats": "Excluir todos os bate-papos",
 	"Delete chat": "Excluir bate-papo",
 	"Delete chat": "Excluir bate-papo",
 	"Delete Chat": "Excluir Bate-papo",
 	"Delete Chat": "Excluir Bate-papo",
-	"Delete chat?": "",
-	"Delete function?": "",
-	"Delete prompt?": "",
+	"Delete chat?": "Excluir bate-papo?",
+	"Delete function?": "Excluir função?",
+	"Delete prompt?": "Excluir prompt?",
 	"delete this link": "excluir este link",
 	"delete this link": "excluir este link",
-	"Delete tool?": "",
+	"Delete tool?": "Deletar ferramenta?",
 	"Delete User": "Excluir Usuário",
 	"Delete User": "Excluir Usuário",
 	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} excluído",
 	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} excluído",
 	"Deleted {{name}}": "Excluído {{nome}}",
 	"Deleted {{name}}": "Excluído {{nome}}",
 	"Description": "Descrição",
 	"Description": "Descrição",
 	"Didn't fully follow instructions": "Não seguiu instruções com precisão",
 	"Didn't fully follow instructions": "Não seguiu instruções com precisão",
-	"Discover a function": "",
+	"Disabled": "Desativado",
+	"Discover a function": "Descobrir uma função",
 	"Discover a model": "Descubra um modelo",
 	"Discover a model": "Descubra um modelo",
 	"Discover a prompt": "Descobrir um prompt",
 	"Discover a prompt": "Descobrir um prompt",
-	"Discover a tool": "",
-	"Discover, download, and explore custom functions": "",
-	"Discover, download, and explore custom prompts": "Descubra, baixe e explore prompts personalizados",
-	"Discover, download, and explore custom tools": "",
-	"Discover, download, and explore model presets": "Descubra, baixe e explore predefinições de modelo",
-	"Dismissible": "",
-	"Display Emoji in Call": "",
+	"Discover a tool": "Descobrir uma ferramenta",
+	"Discover, download, and explore custom functions": "Descobrir, baixar e explorar funções personalizadas",
+	"Discover, download, and explore custom prompts": "Descobrir, baixar e explorar prompts personalizados",
+	"Discover, download, and explore custom tools": "Descobrir, baixar e explorar ferramentas personalizadas",
+	"Discover, download, and explore model presets": "Descobrir, baixar e explorar predefinições de modelo",
+	"Dismissible": "Dismissível",
+	"Display Emoji in Call": "Exibir Emoji na Chamada",
 	"Display the username instead of You in the Chat": "Exibir o nome de usuário em vez de Você no Bate-papo",
 	"Display the username instead of You in the Chat": "Exibir o nome de usuário em vez de Você no Bate-papo",
+	"Do not install functions from sources you do not fully trust.": "Não instale funções de fontes que você não confia totalmente.",
+	"Do not install tools from sources you do not fully trust.": "Não instale ferramentas de fontes que você não confia totalmente.",
 	"Document": "Documento",
 	"Document": "Documento",
 	"Document Settings": "Configurações de Documento",
 	"Document Settings": "Configurações de Documento",
-	"Documentation": "",
+	"Documentation": "Documentação",
 	"Documents": "Documentos",
 	"Documents": "Documentos",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "não faz conexões externas e seus dados permanecem seguros em seu servidor hospedado localmente.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "não faz conexões externas e seus dados permanecem seguros em seu servidor hospedado localmente.",
 	"Don't Allow": "Não Permitir",
 	"Don't Allow": "Não Permitir",
 	"Don't have an account?": "Não tem uma conta?",
 	"Don't have an account?": "Não tem uma conta?",
+	"don't install random functions from sources you don't trust.": "não instale funções aleatórias de fontes que você não confia.",
+	"don't install random tools from sources you don't trust.": "não instale ferramentas aleatórias de fontes que você não confia.",
 	"Don't like the style": "Não gosta do estilo",
 	"Don't like the style": "Não gosta do estilo",
-	"Done": "",
+	"Done": "Feito",
 	"Download": "Baixar",
 	"Download": "Baixar",
 	"Download canceled": "Download cancelado",
 	"Download canceled": "Download cancelado",
 	"Download Database": "Baixar Banco de Dados",
 	"Download Database": "Baixar Banco de Dados",
@@ -204,10 +209,10 @@
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "por exemplo, '30s', '10m'. Unidades de tempo válidas são 's', 'm', 'h'.",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "por exemplo, '30s', '10m'. Unidades de tempo válidas são 's', 'm', 'h'.",
 	"Edit": "Editar",
 	"Edit": "Editar",
 	"Edit Doc": "Editar Documento",
 	"Edit Doc": "Editar Documento",
-	"Edit Memory": "",
+	"Edit Memory": "Editar Memória",
 	"Edit User": "Editar Usuário",
 	"Edit User": "Editar Usuário",
 	"Email": "E-mail",
 	"Email": "E-mail",
-	"Embedding Batch Size": "",
+	"Embedding Batch Size": "Tamanho do Lote de Embedding",
 	"Embedding Model": "Modelo de Embedding",
 	"Embedding Model": "Modelo de Embedding",
 	"Embedding Model Engine": "Motor de Modelo de Embedding",
 	"Embedding Model Engine": "Motor de Modelo de Embedding",
 	"Embedding model set to \"{{embedding_model}}\"": "Modelo de Embedding definido como \"{{embedding_model}}\"",
 	"Embedding model set to \"{{embedding_model}}\"": "Modelo de Embedding definido como \"{{embedding_model}}\"",
@@ -215,11 +220,12 @@
 	"Enable Community Sharing": "Habilitar o compartilhamento da comunidade",
 	"Enable Community Sharing": "Habilitar o compartilhamento da comunidade",
 	"Enable New Sign Ups": "Ativar Novas Inscrições",
 	"Enable New Sign Ups": "Ativar Novas Inscrições",
 	"Enable Web Search": "Habilitar a Pesquisa na Web",
 	"Enable Web Search": "Habilitar a Pesquisa na Web",
-	"Engine": "",
+	"Enabled": "Habilitado",
+	"Engine": "Motor",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Garanta que seu arquivo CSV inclua 4 colunas nesta ordem: Nome, E-mail, Senha, Função.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Garanta que seu arquivo CSV inclua 4 colunas nesta ordem: Nome, E-mail, Senha, Função.",
 	"Enter {{role}} message here": "Digite a mensagem de {{role}} aqui",
 	"Enter {{role}} message here": "Digite a mensagem de {{role}} aqui",
 	"Enter a detail about yourself for your LLMs to recall": "Digite um detalhe sobre você para que seus LLMs possam lembrar",
 	"Enter a detail about yourself for your LLMs to recall": "Digite um detalhe sobre você para que seus LLMs possam lembrar",
-	"Enter api auth string (e.g. username:password)": "",
+	"Enter api auth string (e.g. username:password)": "Digite a string de autenticação da API (por exemplo, nome de usuário:senha)",
 	"Enter Brave Search API Key": "Insira a chave da API do Brave Search",
 	"Enter Brave Search API Key": "Insira a chave da API do Brave Search",
 	"Enter Chunk Overlap": "Digite a Sobreposição de Fragmento",
 	"Enter Chunk Overlap": "Digite a Sobreposição de Fragmento",
 	"Enter Chunk Size": "Digite o Tamanho do Fragmento",
 	"Enter Chunk Size": "Digite o Tamanho do Fragmento",
@@ -233,60 +239,71 @@
 	"Enter Score": "Digite a Pontuação",
 	"Enter Score": "Digite a Pontuação",
 	"Enter Searxng Query URL": "Insira a URL de consulta do Searxng",
 	"Enter Searxng Query URL": "Insira a URL de consulta do Searxng",
 	"Enter Serper API Key": "Digite a chave da API do Serper",
 	"Enter Serper API Key": "Digite a chave da API do Serper",
-	"Enter Serply API Key": "",
+	"Enter Serply API Key": "Digite a chave da API do Serply",
 	"Enter Serpstack API Key": "Digite a chave da API Serpstack",
 	"Enter Serpstack API Key": "Digite a chave da API Serpstack",
 	"Enter stop sequence": "Digite a sequência de parada",
 	"Enter stop sequence": "Digite a sequência de parada",
-	"Enter Tavily API Key": "",
-	"Enter Tika Server URL": "",
+	"Enter system prompt": "Digite o prompt do sistema",
+	"Enter Tavily API Key": "Digite a chave da API Tavily",
+	"Enter Tika Server URL": "Digite a URL do Servidor Tika",
 	"Enter Top K": "Digite o Top K",
 	"Enter Top K": "Digite o Top K",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "Digite a URL (por exemplo, http://127.0.0.1:7860/)",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "Digite a URL (por exemplo, http://127.0.0.1:7860/)",
 	"Enter URL (e.g. http://localhost:11434)": "Digite a URL (por exemplo, http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "Digite a URL (por exemplo, http://localhost:11434)",
 	"Enter Your Email": "Digite seu E-mail",
 	"Enter Your Email": "Digite seu E-mail",
 	"Enter Your Full Name": "Digite seu Nome Completo",
 	"Enter Your Full Name": "Digite seu Nome Completo",
+	"Enter your message": "Digite sua mensagem",
 	"Enter Your Password": "Digite sua Senha",
 	"Enter Your Password": "Digite sua Senha",
 	"Enter Your Role": "Digite sua Função",
 	"Enter Your Role": "Digite sua Função",
 	"Error": "Erro",
 	"Error": "Erro",
 	"Experimental": "Experimental",
 	"Experimental": "Experimental",
 	"Export": "Exportação",
 	"Export": "Exportação",
 	"Export All Chats (All Users)": "Exportar Todos os Bate-papos (Todos os Usuários)",
 	"Export All Chats (All Users)": "Exportar Todos os Bate-papos (Todos os Usuários)",
-	"Export chat (.json)": "",
+	"Export chat (.json)": "Exportar chat (.json)",
 	"Export Chats": "Exportar Bate-papos",
 	"Export Chats": "Exportar Bate-papos",
 	"Export Documents Mapping": "Exportar Mapeamento de Documentos",
 	"Export Documents Mapping": "Exportar Mapeamento de Documentos",
-	"Export Functions": "",
-	"Export LiteLLM config.yaml": "",
+	"Export Functions": "Exportar Funções",
+	"Export LiteLLM config.yaml": "Exportar config.yaml do LiteLLM",
 	"Export Models": "Modelos de Exportação",
 	"Export Models": "Modelos de Exportação",
 	"Export Prompts": "Exportar Prompts",
 	"Export Prompts": "Exportar Prompts",
-	"Export Tools": "",
-	"External Models": "",
+	"Export Tools": "Exportar Ferramentas",
+	"External Models": "Modelos Externos",
 	"Failed to create API Key.": "Falha ao criar a Chave da API.",
 	"Failed to create API Key.": "Falha ao criar a Chave da API.",
 	"Failed to read clipboard contents": "Falha ao ler o conteúdo da área de transferência",
 	"Failed to read clipboard contents": "Falha ao ler o conteúdo da área de transferência",
-	"Failed to update settings": "",
+	"Failed to update settings": "Falha ao atualizar as configurações",
 	"February": "Fevereiro",
 	"February": "Fevereiro",
 	"Feel free to add specific details": "Sinta-se à vontade para adicionar detalhes específicos",
 	"Feel free to add specific details": "Sinta-se à vontade para adicionar detalhes específicos",
-	"File": "",
+	"File": "Arquivo",
 	"File Mode": "Modo de Arquivo",
 	"File Mode": "Modo de Arquivo",
 	"File not found.": "Arquivo não encontrado.",
 	"File not found.": "Arquivo não encontrado.",
-	"Filter is now globally disabled": "",
-	"Filter is now globally enabled": "",
-	"Filters": "",
+	"Files": "",
+	"Filter is now globally disabled": "O filtro agora está globalmente desativado",
+	"Filter is now globally enabled": "O filtro agora está globalmente ativado",
+	"Filters": "Filtros",
 	"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Impostação de impressão digital detectada: Não é possível usar iniciais como avatar. Padronizando para imagem de perfil padrão.",
 	"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Impostação de impressão digital detectada: Não é possível usar iniciais como avatar. Padronizando para imagem de perfil padrão.",
 	"Fluidly stream large external response chunks": "Transmita com fluidez grandes blocos de resposta externa",
 	"Fluidly stream large external response chunks": "Transmita com fluidez grandes blocos de resposta externa",
 	"Focus chat input": "Focar entrada de bate-papo",
 	"Focus chat input": "Focar entrada de bate-papo",
 	"Followed instructions perfectly": "Seguiu instruções perfeitamente",
 	"Followed instructions perfectly": "Seguiu instruções perfeitamente",
-	"Form": "",
+	"Form": "Formulário",
 	"Format your variables using square brackets like this:": "Formate suas variáveis usando colchetes como este:",
 	"Format your variables using square brackets like this:": "Formate suas variáveis usando colchetes como este:",
 	"Frequency Penalty": "Penalidade de Frequência",
 	"Frequency Penalty": "Penalidade de Frequência",
-	"Function created successfully": "",
-	"Function deleted successfully": "",
-	"Function updated successfully": "",
-	"Functions": "",
-	"Functions imported successfully": "",
+	"Function created successfully": "Função criada com sucesso",
+	"Function deleted successfully": "Função deletada com sucesso",
+	"Function Description (e.g. A filter to remove profanity from text)": "Descrição da Função (por exemplo, Um filtro para remover palavrões do texto)",
+	"Function ID (e.g. my_filter)": "ID da Função (por exemplo, meu_filtro)",
+	"Function is now globally disabled": "A função agora está globalmente desativada",
+	"Function is now globally enabled": "A função agora está globalmente ativada",
+	"Function Name (e.g. My Filter)": "Nome da Função (por exemplo, Meu Filtro)",
+	"Function updated successfully": "Função atualizada com sucesso",
+	"Functions": "Funções",
+	"Functions allow arbitrary code execution": "Funções permitem a execução de código arbitrário",
+	"Functions allow arbitrary code execution.": "Funções permitem a execução de código arbitrário.",
+	"Functions imported successfully": "Funções importadas com sucesso",
 	"General": "Geral",
 	"General": "Geral",
 	"General Settings": "Configurações Gerais",
 	"General Settings": "Configurações Gerais",
-	"Generate Image": "",
+	"Generate Image": "Gerar imagem",
 	"Generating search query": "Gerando consulta de pesquisa",
 	"Generating search query": "Gerando consulta de pesquisa",
 	"Generation Info": "Informações de Geração",
 	"Generation Info": "Informações de Geração",
-	"Global": "",
+	"Get up and running with": "Comece a trabalhar com",
+	"Global": "Global",
 	"Good Response": "Boa Resposta",
 	"Good Response": "Boa Resposta",
 	"Google PSE API Key": "Chave de API PSE do Google",
 	"Google PSE API Key": "Chave de API PSE do Google",
 	"Google PSE Engine Id": "ID do mecanismo PSE do Google",
 	"Google PSE Engine Id": "ID do mecanismo PSE do Google",
@@ -295,25 +312,26 @@
 	"Hello, {{name}}": "Olá, {{name}}",
 	"Hello, {{name}}": "Olá, {{name}}",
 	"Help": "Ajuda",
 	"Help": "Ajuda",
 	"Hide": "Ocultar",
 	"Hide": "Ocultar",
-	"Hide Model": "",
+	"Hide Model": "Esconder modelo",
 	"How can I help you today?": "Como posso ajudá-lo hoje?",
 	"How can I help you today?": "Como posso ajudá-lo hoje?",
 	"Hybrid Search": "Pesquisa Híbrida",
 	"Hybrid Search": "Pesquisa 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.": "",
 	"Image Generation (Experimental)": "Geração de Imagens (Experimental)",
 	"Image Generation (Experimental)": "Geração de Imagens (Experimental)",
 	"Image Generation Engine": "Mecanismo de Geração de Imagens",
 	"Image Generation Engine": "Mecanismo de Geração de Imagens",
 	"Image Settings": "Configurações de Imagem",
 	"Image Settings": "Configurações de Imagem",
 	"Images": "Imagens",
 	"Images": "Imagens",
 	"Import Chats": "Importar Bate-papos",
 	"Import Chats": "Importar Bate-papos",
 	"Import Documents Mapping": "Importar Mapeamento de Documentos",
 	"Import Documents Mapping": "Importar Mapeamento de Documentos",
-	"Import Functions": "",
+	"Import Functions": "Importar Funções",
 	"Import Models": "Modelos de Importação",
 	"Import Models": "Modelos de Importação",
 	"Import Prompts": "Importar Prompts",
 	"Import Prompts": "Importar Prompts",
-	"Import Tools": "",
-	"Include `--api-auth` flag when running stable-diffusion-webui": "",
+	"Import Tools": "Importar Ferramentas",
+	"Include `--api-auth` flag when running stable-diffusion-webui": "Inclua a flag `--api-auth` ao executar stable-diffusion-webui",
 	"Include `--api` flag when running stable-diffusion-webui": "Inclua a flag `--api` ao executar stable-diffusion-webui",
 	"Include `--api` flag when running stable-diffusion-webui": "Inclua a flag `--api` ao executar stable-diffusion-webui",
 	"Info": "Informação",
 	"Info": "Informação",
 	"Input commands": "Comandos de entrada",
 	"Input commands": "Comandos de entrada",
 	"Install from Github URL": "Instalar a partir do URL do Github",
 	"Install from Github URL": "Instalar a partir do URL do Github",
-	"Instant Auto-Send After Voice Transcription": "",
+	"Instant Auto-Send After Voice Transcription": "Autoenvio Instantâneo Após Transcrição de Voz",
 	"Interface": "Interface",
 	"Interface": "Interface",
 	"Invalid Tag": "Etiqueta Inválida",
 	"Invalid Tag": "Etiqueta Inválida",
 	"January": "Janeiro",
 	"January": "Janeiro",
@@ -326,32 +344,33 @@
 	"JWT Token": "Token JWT",
 	"JWT Token": "Token JWT",
 	"Keep Alive": "Manter Vivo",
 	"Keep Alive": "Manter Vivo",
 	"Keyboard shortcuts": "Atalhos de teclado",
 	"Keyboard shortcuts": "Atalhos de teclado",
-	"Knowledge": "",
+	"Knowledge": "Conhecimento",
 	"Language": "Idioma",
 	"Language": "Idioma",
-	"Last Active": "Último Ativo",
-	"Last Modified": "",
+	"large language models, locally.": "modelos largos de linguagem, localmente",
+	"Last Active": "Ativo por último",
+	"Last Modified": "Ultima Modificação",
 	"Light": "Claro",
 	"Light": "Claro",
-	"Listening...": "",
+	"Listening...": "Escutando...",
 	"LLMs can make mistakes. Verify important information.": "LLMs podem cometer erros. Verifique informações importantes.",
 	"LLMs can make mistakes. Verify important information.": "LLMs podem cometer erros. Verifique informações importantes.",
-	"Local Models": "",
+	"Local Models": "Modelos Locais",
 	"LTR": "LTR",
 	"LTR": "LTR",
 	"Made by OpenWebUI Community": "Feito pela Comunidade OpenWebUI",
 	"Made by OpenWebUI Community": "Feito pela Comunidade OpenWebUI",
 	"Make sure to enclose them with": "Certifique-se de colocá-los entre",
 	"Make sure to enclose them with": "Certifique-se de colocá-los entre",
-	"Manage": "",
+	"Manage": "Gerenciar",
 	"Manage Models": "Gerenciar Modelos",
 	"Manage Models": "Gerenciar Modelos",
 	"Manage Ollama Models": "Gerenciar Modelos Ollama",
 	"Manage Ollama Models": "Gerenciar Modelos Ollama",
-	"Manage Pipelines": "Gerenciar pipelines",
-	"Manage Valves": "",
+	"Manage Pipelines": "Gerenciar Pipelines",
+	"Manage Valves": "Gerenciar Válvulas",
 	"March": "Março",
 	"March": "Março",
 	"Max Tokens (num_predict)": "Fichas máximas (num_predict)",
 	"Max Tokens (num_predict)": "Fichas máximas (num_predict)",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Máximo de 3 modelos podem ser baixados simultaneamente. Tente novamente mais tarde.",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Máximo de 3 modelos podem ser baixados simultaneamente. Tente novamente mais tarde.",
 	"May": "Maio",
 	"May": "Maio",
 	"Memories accessible by LLMs will be shown here.": "Memórias acessíveis por LLMs serão mostradas aqui.",
 	"Memories accessible by LLMs will be shown here.": "Memórias acessíveis por LLMs serão mostradas aqui.",
 	"Memory": "Memória",
 	"Memory": "Memória",
-	"Memory added successfully": "",
-	"Memory cleared successfully": "",
-	"Memory deleted successfully": "",
-	"Memory updated successfully": "",
+	"Memory added successfully": "Memória adicionada com sucesso",
+	"Memory cleared successfully": "Memória limpa com sucesso",
+	"Memory deleted successfully": "Memória excluída com sucesso",
+	"Memory updated successfully": "Memória atualizada com sucesso",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Mensagens que você enviar após criar seu link não serão compartilhadas. Os usuários com o URL poderão visualizar o bate-papo compartilhado.",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Mensagens que você enviar após criar seu link não serão compartilhadas. Os usuários com o URL poderão visualizar o bate-papo compartilhado.",
 	"Minimum Score": "Pontuação Mínima",
 	"Minimum Score": "Pontuação Mínima",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
@@ -359,18 +378,18 @@
 	"Mirostat Tau": "Mirostat Tau",
 	"Mirostat Tau": "Mirostat Tau",
 	"MMMM DD, YYYY": "DD/MM/YYYY",
 	"MMMM DD, YYYY": "DD/MM/YYYY",
 	"MMMM DD, YYYY HH:mm": "DD/MM/YYYY HH:mm",
 	"MMMM DD, YYYY HH:mm": "DD/MM/YYYY HH:mm",
-	"MMMM DD, YYYY hh:mm:ss A": "",
+	"MMMM DD, YYYY hh:mm:ss A": "DD/MM/YYYY hh:mm:ss A",
 	"Model '{{modelName}}' has been successfully downloaded.": "O modelo '{{modelName}}' foi baixado com sucesso.",
 	"Model '{{modelName}}' has been successfully downloaded.": "O modelo '{{modelName}}' foi baixado com sucesso.",
 	"Model '{{modelTag}}' is already in queue for downloading.": "O modelo '{{modelTag}}' já está na fila para download.",
 	"Model '{{modelTag}}' is already in queue for downloading.": "O modelo '{{modelTag}}' já está na fila para download.",
 	"Model {{modelId}} not found": "Modelo {{modelId}} não encontrado",
 	"Model {{modelId}} not found": "Modelo {{modelId}} não encontrado",
 	"Model {{modelName}} is not vision capable": "O modelo {{modelName}} não é capaz de visão",
 	"Model {{modelName}} is not vision capable": "O modelo {{modelName}} não é capaz de visão",
 	"Model {{name}} is now {{status}}": "O modelo {{name}} agora é {{status}}",
 	"Model {{name}} is now {{status}}": "O modelo {{name}} agora é {{status}}",
-	"Model created successfully!": "",
+	"Model created successfully!": "Modelo criado com sucesso!",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Otkrivena putanja datoteke modela. Skraćeno ime modela je potrebno za ažuriranje, ne može se nastaviti.",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Otkrivena putanja datoteke modela. Skraćeno ime modela je potrebno za ažuriranje, ne može se nastaviti.",
 	"Model ID": "ID do modelo",
 	"Model ID": "ID do modelo",
 	"Model not selected": "Modelo não selecionado",
 	"Model not selected": "Modelo não selecionado",
 	"Model Params": "Params Modelo",
 	"Model Params": "Params Modelo",
-	"Model updated successfully": "",
+	"Model updated successfully": "Modelo atualizado com sucesso",
 	"Model Whitelisting": "Lista de Permissões de Modelo",
 	"Model Whitelisting": "Lista de Permissões de Modelo",
 	"Model(s) Whitelisted": "Modelo(s) na Lista de Permissões",
 	"Model(s) Whitelisted": "Modelo(s) na Lista de Permissões",
 	"Modelfile Content": "Conteúdo do Arquivo de Modelo",
 	"Modelfile Content": "Conteúdo do Arquivo de Modelo",
@@ -381,20 +400,20 @@
 	"Name your model": "Nomeie seu modelo",
 	"Name your model": "Nomeie seu modelo",
 	"New Chat": "Novo Bate-papo",
 	"New Chat": "Novo Bate-papo",
 	"New Password": "Nova Senha",
 	"New Password": "Nova Senha",
-	"No content to speak": "",
-	"No documents found": "",
-	"No file selected": "",
+	"No content to speak": "Nenhum conteudo para falar",
+	"No documents found": "Nenhuma documento encontrado",
+	"No file selected": "Nenhum arquivo selecionado",
 	"No results found": "Nenhum resultado encontrado",
 	"No results found": "Nenhum resultado encontrado",
 	"No search query generated": "Nenhuma consulta de pesquisa gerada",
 	"No search query generated": "Nenhuma consulta de pesquisa gerada",
 	"No source available": "Nenhuma fonte disponível",
 	"No source available": "Nenhuma fonte disponível",
-	"No valves to update": "",
+	"No valves to update": "Nenhuma válvula para atualizar",
 	"None": "Nenhum",
 	"None": "Nenhum",
 	"Not factually correct": "Não é correto em termos factuais",
 	"Not factually correct": "Não é correto em termos factuais",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Nota: Se você definir uma pontuação mínima, a pesquisa só retornará documentos com uma pontuação maior ou igual à pontuação mínima.",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Nota: Se você definir uma pontuação mínima, a pesquisa só retornará documentos com uma pontuação maior ou igual à pontuação mínima.",
 	"Notifications": "Notificações da Área de Trabalho",
 	"Notifications": "Notificações da Área de Trabalho",
 	"November": "Novembro",
 	"November": "Novembro",
 	"num_thread (Ollama)": "num_thread (Ollama)",
 	"num_thread (Ollama)": "num_thread (Ollama)",
-	"OAuth ID": "",
+	"OAuth ID": "OAuth ID",
 	"October": "Outubro",
 	"October": "Outubro",
 	"Off": "Desligado",
 	"Off": "Desligado",
 	"Okay, Let's Go!": "Ok, Vamos Lá!",
 	"Okay, Let's Go!": "Ok, Vamos Lá!",
@@ -413,7 +432,7 @@
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Opa! Você está usando um método não suportado (somente frontend). Por favor, sirva o WebUI a partir do backend.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Opa! Você está usando um método não suportado (somente frontend). Por favor, sirva o WebUI a partir do backend.",
 	"Open AI (Dall-E)": "OpenAI (Dall-E)",
 	"Open AI (Dall-E)": "OpenAI (Dall-E)",
 	"Open new chat": "Abrir novo bate-papo",
 	"Open new chat": "Abrir novo bate-papo",
-	"Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "",
+	"Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "A versão do Open WebUI (v{{OPEN_WEBUI_VERSION}}) é inferior à versão necessária (v{{REQUIRED_VERSION}})",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",
 	"OpenAI API": "API OpenAI",
 	"OpenAI API": "API OpenAI",
 	"OpenAI API Config": "Configuração da API OpenAI",
 	"OpenAI API Config": "Configuração da API OpenAI",
@@ -425,19 +444,20 @@
 	"PDF document (.pdf)": "Documento PDF (.pdf)",
 	"PDF document (.pdf)": "Documento PDF (.pdf)",
 	"PDF Extract Images (OCR)": "Extrair Imagens de PDF (OCR)",
 	"PDF Extract Images (OCR)": "Extrair Imagens de PDF (OCR)",
 	"pending": "pendente",
 	"pending": "pendente",
-	"Permission denied when accessing media devices": "",
-	"Permission denied when accessing microphone": "",
+	"Permission denied when accessing media devices": "Permissão negada ao acessar dispositivos de mídia",
+	"Permission denied when accessing microphone": "Permissão negada ao acessar o microfone",
 	"Permission denied when accessing microphone: {{error}}": "Permissão negada ao acessar o microfone: {{error}}",
 	"Permission denied when accessing microphone: {{error}}": "Permissão negada ao acessar o microfone: {{error}}",
 	"Personalization": "Personalização",
 	"Personalization": "Personalização",
-	"Pin": "",
-	"Pinned": "",
-	"Pipeline deleted successfully": "",
-	"Pipeline downloaded successfully": "",
+	"Pin": "Fixar",
+	"Pinned": "Fixada",
+	"Pipeline deleted successfully": "Pipeline excluída com sucesso",
+	"Pipeline downloaded successfully": "Pipeline baixada com sucesso",
 	"Pipelines": "Pipelines",
 	"Pipelines": "Pipelines",
-	"Pipelines Not Detected": "",
+	"Pipelines Not Detected": "Pipelines não detectado",
 	"Pipelines Valves": "Válvulas de Dutos",
 	"Pipelines Valves": "Válvulas de Dutos",
 	"Plain text (.txt)": "Texto sem formatação (.txt)",
 	"Plain text (.txt)": "Texto sem formatação (.txt)",
 	"Playground": "Parque infantil",
 	"Playground": "Parque infantil",
+	"Please carefully review the following warnings:": "Por favor, revise cuidadosamente os seguintes avisos:",
 	"Positive attitude": "Atitude Positiva",
 	"Positive attitude": "Atitude Positiva",
 	"Previous 30 days": "Últimos 30 dias",
 	"Previous 30 days": "Últimos 30 dias",
 	"Previous 7 days": "Últimos 7 dias",
 	"Previous 7 days": "Últimos 7 dias",
@@ -466,16 +486,17 @@
 	"Reranking Model": "Modelo de Reranking",
 	"Reranking Model": "Modelo de Reranking",
 	"Reranking model disabled": "Modelo de Reranking desativado",
 	"Reranking model disabled": "Modelo de Reranking desativado",
 	"Reranking model set to \"{{reranking_model}}\"": "Modelo de Reranking definido como \"{{reranking_model}}\"",
 	"Reranking model set to \"{{reranking_model}}\"": "Modelo de Reranking definido como \"{{reranking_model}}\"",
-	"Reset": "",
-	"Reset Upload Directory": "",
+	"Reset": "Resetar",
+	"Reset Upload Directory": "Resetar Diretório de Upload",
 	"Reset Vector Storage": "Redefinir Armazenamento de Vetor",
 	"Reset Vector Storage": "Redefinir Armazenamento de Vetor",
 	"Response AutoCopy to Clipboard": "Cópia Automática da Resposta para a Área de Transferência",
 	"Response AutoCopy to Clipboard": "Cópia Automática da Resposta para a Área de Transferência",
-	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
+	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Notificações de resposta não podem ser ativadas, pois as permissões do site foram negadas. Visite as configurações do seu navegador para conceder o acesso necessário.",
 	"Role": "Função",
 	"Role": "Função",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"RTL": "RTL",
 	"RTL": "RTL",
-	"Running": "",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "Execute Llama 2, Code Llama e outros modelos. Personalize e crie o seu próprio.",
+	"Running": "Executando",
 	"Save": "Salvar",
 	"Save": "Salvar",
 	"Save & Create": "Salvar e Criar",
 	"Save & Create": "Salvar e Criar",
 	"Save & Update": "Salvar e Atualizar",
 	"Save & Update": "Salvar e Atualizar",
@@ -487,40 +508,40 @@
 	"Search a model": "Pesquisar um modelo",
 	"Search a model": "Pesquisar um modelo",
 	"Search Chats": "Pesquisar bate-papos",
 	"Search Chats": "Pesquisar bate-papos",
 	"Search Documents": "Pesquisar Documentos",
 	"Search Documents": "Pesquisar Documentos",
-	"Search Functions": "",
-	"Search Models": "Modelos de Pesquisa",
+	"Search Functions": "Pesquisar Funções",
+	"Search Models": "Pesquisar Modelos",
 	"Search Prompts": "Pesquisar Prompts",
 	"Search Prompts": "Pesquisar Prompts",
 	"Search Query Generation Prompt": "",
 	"Search Query Generation Prompt": "",
-	"Search Query Generation Prompt Length Threshold": "",
+	"Search Query Generation Prompt Length Threshold": "Limite de comprimento do prompt de geração de consulta de pesquisa",
 	"Search Result Count": "Contagem de resultados de pesquisa",
 	"Search Result Count": "Contagem de resultados de pesquisa",
-	"Search Tools": "",
+	"Search Tools": "Ferramentas de Pesquisa",
 	"Searched {{count}} sites_one": "Pesquisado {{count}} sites_one",
 	"Searched {{count}} sites_one": "Pesquisado {{count}} sites_one",
 	"Searched {{count}} sites_many": "Pesquisado {{count}} sites_many",
 	"Searched {{count}} sites_many": "Pesquisado {{count}} sites_many",
 	"Searched {{count}} sites_other": "Pesquisado {{count}} sites_other",
 	"Searched {{count}} sites_other": "Pesquisado {{count}} sites_other",
-	"Searching \"{{searchQuery}}\"": "",
+	"Searching \"{{searchQuery}}\"": "Pesquisando \"{{searchQuery}}\"",
 	"Searxng Query URL": "URL de consulta Searxng",
 	"Searxng Query URL": "URL de consulta Searxng",
 	"See readme.md for instructions": "Consulte readme.md para obter instruções",
 	"See readme.md for instructions": "Consulte readme.md para obter instruções",
 	"See what's new": "Veja o que há de novo",
 	"See what's new": "Veja o que há de novo",
 	"Seed": "Semente",
 	"Seed": "Semente",
 	"Select a base model": "Selecione um modelo base",
 	"Select a base model": "Selecione um modelo base",
-	"Select a engine": "",
-	"Select a function": "",
+	"Select a engine": "Selecione um motor",
+	"Select a function": "Selecione uma função",
 	"Select a mode": "Selecione um modo",
 	"Select a mode": "Selecione um modo",
 	"Select a model": "Selecione um modelo",
 	"Select a model": "Selecione um modelo",
 	"Select a pipeline": "Selecione um pipeline",
 	"Select a pipeline": "Selecione um pipeline",
 	"Select a pipeline url": "Selecione uma URL de pipeline",
 	"Select a pipeline url": "Selecione uma URL de pipeline",
-	"Select a tool": "",
+	"Select a tool": "Selecione uma ferramenta",
 	"Select an Ollama instance": "Selecione uma instância Ollama",
 	"Select an Ollama instance": "Selecione uma instância Ollama",
-	"Select Documents": "",
+	"Select Documents": "Selecione Documentos",
 	"Select model": "Selecione um modelo",
 	"Select model": "Selecione um modelo",
-	"Select only one model to call": "",
+	"Select only one model to call": "Selecione apenas um modelo para chamar",
 	"Selected model(s) do not support image inputs": "O(s) modelo(s) selecionado(s) não suporta(m) entrada(s) de imagem",
 	"Selected model(s) do not support image inputs": "O(s) modelo(s) selecionado(s) não suporta(m) entrada(s) de imagem",
 	"Send": "Enviar",
 	"Send": "Enviar",
 	"Send a Message": "Enviar uma Mensagem",
 	"Send a Message": "Enviar uma Mensagem",
 	"Send message": "Enviar mensagem",
 	"Send message": "Enviar mensagem",
 	"September": "Setembro",
 	"September": "Setembro",
 	"Serper API Key": "Chave de API Serper",
 	"Serper API Key": "Chave de API Serper",
-	"Serply API Key": "",
+	"Serply API Key": "Chave de API Serply",
 	"Serpstack API Key": "Chave de API Serpstack",
 	"Serpstack API Key": "Chave de API Serpstack",
 	"Server connection verified": "Conexão com o servidor verificada",
 	"Server connection verified": "Conexão com o servidor verificada",
 	"Set as default": "Definir como padrão",
 	"Set as default": "Definir como padrão",
@@ -533,16 +554,16 @@
 	"Set Voice": "Definir Voz",
 	"Set Voice": "Definir Voz",
 	"Settings": "Configurações",
 	"Settings": "Configurações",
 	"Settings saved successfully!": "Configurações salvas com sucesso!",
 	"Settings saved successfully!": "Configurações salvas com sucesso!",
-	"Settings updated successfully": "",
+	"Settings updated successfully": "Configurações atualizadas com sucesso",
 	"Share": "Compartilhar",
 	"Share": "Compartilhar",
 	"Share Chat": "Compartilhar Bate-papo",
 	"Share Chat": "Compartilhar Bate-papo",
 	"Share to OpenWebUI Community": "Compartilhar com a Comunidade OpenWebUI",
 	"Share to OpenWebUI Community": "Compartilhar com a Comunidade OpenWebUI",
 	"short-summary": "resumo-curto",
 	"short-summary": "resumo-curto",
 	"Show": "Mostrar",
 	"Show": "Mostrar",
-	"Show Admin Details in Account Pending Overlay": "",
-	"Show Model": "",
+	"Show Admin Details in Account Pending Overlay": "Mostrar Detalhes do Administrador na Sobreposição de Conta Pendente",
+	"Show Model": "Mostrar Modelo",
 	"Show shortcuts": "Mostrar",
 	"Show shortcuts": "Mostrar",
-	"Show your support!": "",
+	"Show your support!": "Mostre seu apoio!",
 	"Showcased creativity": "Criatividade Exibida",
 	"Showcased creativity": "Criatividade Exibida",
 	"Sign in": "Entrar",
 	"Sign in": "Entrar",
 	"Sign Out": "Sair",
 	"Sign Out": "Sair",
@@ -552,18 +573,20 @@
 	"Speech recognition error: {{error}}": "Erro de reconhecimento de fala: {{error}}",
 	"Speech recognition error: {{error}}": "Erro de reconhecimento de fala: {{error}}",
 	"Speech-to-Text Engine": "Mecanismo de Fala para Texto",
 	"Speech-to-Text Engine": "Mecanismo de Fala para Texto",
 	"Stop Sequence": "Sequência de Parada",
 	"Stop Sequence": "Sequência de Parada",
-	"STT Model": "",
+	"STT Model": "Modelo STT",
 	"STT Settings": "Configurações STT",
 	"STT Settings": "Configurações STT",
 	"Submit": "Enviar",
 	"Submit": "Enviar",
 	"Subtitle (e.g. about the Roman Empire)": "Subtítulo (ex.: sobre o Império Romano)",
 	"Subtitle (e.g. about the Roman Empire)": "Subtítulo (ex.: sobre o Império Romano)",
 	"Success": "Sucesso",
 	"Success": "Sucesso",
 	"Successfully updated.": "Atualizado com sucesso.",
 	"Successfully updated.": "Atualizado com sucesso.",
 	"Suggested": "Sugerido",
 	"Suggested": "Sugerido",
+	"Support": "Suporte",
+	"Support this plugin:": "Suporte esse plugin:",
 	"System": "Sistema",
 	"System": "Sistema",
 	"System Prompt": "Prompt do Sistema",
 	"System Prompt": "Prompt do Sistema",
 	"Tags": "Tags",
 	"Tags": "Tags",
-	"Tap to interrupt": "",
-	"Tavily API Key": "",
+	"Tap to interrupt": "Toque para interromper",
+	"Tavily API Key": "Chave da API Tavily",
 	"Tell us more:": "Dê-nos mais:",
 	"Tell us more:": "Dê-nos mais:",
 	"Temperature": "Temperatura",
 	"Temperature": "Temperatura",
 	"Template": "Modelo",
 	"Template": "Modelo",
@@ -571,61 +594,68 @@
 	"Text-to-Speech Engine": "Mecanismo de Texto para Fala",
 	"Text-to-Speech Engine": "Mecanismo de Texto para Fala",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Obrigado pelo seu feedback!",
 	"Thanks for your feedback!": "Obrigado pelo seu feedback!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "Os desenvolvedores por trás deste plugin são voluntários apaixonados da comunidade. Se você achar este plugin útil, considere contribuir para o seu desenvolvimento.",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "O score deve ser um valor entre 0.0 (0%) e 1.0 (100%).",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "O score deve ser um valor entre 0.0 (0%) e 1.0 (100%).",
 	"Theme": "Tema",
 	"Theme": "Tema",
-	"Thinking...": "",
-	"This action cannot be undone. Do you wish to continue?": "",
+	"Thinking...": "Pensando...",
+	"This action cannot be undone. Do you wish to continue?": "Essa ação não pode ser desfeita. Deseja continuar?",
 	"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Isso garante que suas conversas valiosas sejam salvas com segurança em seu banco de dados de backend. Obrigado!",
 	"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Isso garante que suas conversas valiosas sejam salvas com segurança em seu banco de dados de backend. Obrigado!",
-	"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
+	"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Essa é uma funcionalidade experimental, pode não funcionar como esperado e está sujeita a alterações a qualquer momento.",
 	"This setting does not sync across browsers or devices.": "Esta configuração não sincroniza entre navegadores ou dispositivos.",
 	"This setting does not sync across browsers or devices.": "Esta configuração não sincroniza entre navegadores ou dispositivos.",
-	"This will delete": "",
+	"This will delete": "Isso irá apagar",
 	"Thorough explanation": "Explicação Completa",
 	"Thorough explanation": "Explicação Completa",
-	"Tika": "",
-	"Tika Server URL required.": "",
+	"Tika": "Tika",
+	"Tika Server URL required.": "Url do Servidor Tika é obrigatória.",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Dica: Atualize vários slots de variáveis consecutivamente pressionando a tecla Tab na entrada de bate-papo após cada substituição.",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Dica: Atualize vários slots de variáveis consecutivamente pressionando a tecla Tab na entrada de bate-papo após cada substituição.",
 	"Title": "Título",
 	"Title": "Título",
-	"Title (e.g. Tell me a fun fact)": "Título (ex.: Dê-me um fatídico fatídico)",
+	"Title (e.g. Tell me a fun fact)": "Título (ex.: Dê-me uma curiosidade)",
 	"Title Auto-Generation": "Geração Automática de Título",
 	"Title Auto-Generation": "Geração Automática de Título",
 	"Title cannot be an empty string.": "Título não pode ser uma string vazia.",
 	"Title cannot be an empty string.": "Título não pode ser uma string vazia.",
 	"Title Generation Prompt": "Prompt de Geração de Título",
 	"Title Generation Prompt": "Prompt de Geração de Título",
 	"to": "para",
 	"to": "para",
 	"To access the available model names for downloading,": "Para acessar os nomes de modelo disponíveis para download,",
 	"To access the available model names for downloading,": "Para acessar os nomes de modelo disponíveis para download,",
 	"To access the GGUF models available for downloading,": "Para acessar os modelos GGUF disponíveis para download,",
 	"To access the GGUF models available for downloading,": "Para acessar os modelos GGUF disponíveis para download,",
-	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
-	"To add documents here, upload them to the \"Documents\" workspace first.": "",
+	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Para acessar o WebUI, entre em contato com o administrador. Os administradores podem gerenciar os status dos usuários no Painel de Administração.",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "Para adicionar documentos aqui, carregue-os primeiro para o espaço de trabalho \"Documentos\".",
 	"to chat input.": "para a entrada de bate-papo.",
 	"to chat input.": "para a entrada de bate-papo.",
-	"To select filters here, add them to the \"Functions\" workspace first.": "",
-	"To select toolkits here, add them to the \"Tools\" workspace first.": "",
+	"To select filters here, add them to the \"Functions\" workspace first.": "Para selecionar filtros aqui, adicione-os primeiro ao espaço de trabalho \"Funções\".",
+	"To select toolkits here, add them to the \"Tools\" workspace first.": "Para selecionar toolkits aqui, adicione-os primeiro ao espaço de trabalho \"Ferramentas\".",
 	"Today": "Hoje",
 	"Today": "Hoje",
 	"Toggle settings": "Alternar configurações",
 	"Toggle settings": "Alternar configurações",
 	"Toggle sidebar": "Alternar barra lateral",
 	"Toggle sidebar": "Alternar barra lateral",
-	"Tokens To Keep On Context Refresh (num_keep)": "",
-	"Tool created successfully": "",
-	"Tool deleted successfully": "",
-	"Tool imported successfully": "",
-	"Tool updated successfully": "",
-	"Tools": "",
+	"Tokens To Keep On Context Refresh (num_keep)": "Tokens a Manter na Atualização de Contexto (num_keep)",
+	"Tool created successfully": "Ferramenta criada com sucesso",
+	"Tool deleted successfully": "Ferramenta excluída com sucesso",
+	"Tool imported successfully": "Ferramenta importada com sucesso",
+	"Tool updated successfully": "Ferramenta atualizada com sucesso",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "Descrição do Toolkit (por exemplo, Um toolkit para realizar várias operações)",
+	"Toolkit ID (e.g. my_toolkit)": "Identificação do Toolkit (por exemplo, meu_toolkit)",
+	"Toolkit Name (e.g. My ToolKit)": "Nome do Toolkit (por exemplo, Meu Toolkit)",
+	"Tools": "Ferramentas",
+	"Tools are a function calling system with arbitrary code execution": "Ferramentas são um sistema de chamada de função com execução de código arbitrário",
+	"Tools have a function calling system that allows arbitrary code execution": "Ferramentas têm um sistema de chamada de função que permite a execução de código arbitrário",
+	"Tools have a function calling system that allows arbitrary code execution.": "Ferramentas têm um sistema de chamada de função que permite a execução de código arbitrário.",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Trouble accessing Ollama?": "Problemas para acessar o Ollama?",
 	"Trouble accessing Ollama?": "Problemas para acessar o Ollama?",
-	"TTS Model": "",
+	"TTS Model": "Modelo TTS",
 	"TTS Settings": "Configurações TTS",
 	"TTS Settings": "Configurações TTS",
-	"TTS Voice": "",
+	"TTS Voice": "Voz TTS",
 	"Type": "Tipo",
 	"Type": "Tipo",
 	"Type Hugging Face Resolve (Download) URL": "Digite a URL do Hugging Face Resolve (Download)",
 	"Type Hugging Face Resolve (Download) URL": "Digite a URL do Hugging Face Resolve (Download)",
 	"Uh-oh! There was an issue connecting to {{provider}}.": "Opa! Houve um problema ao conectar-se a {{provider}}.",
 	"Uh-oh! There was an issue connecting to {{provider}}.": "Opa! Houve um problema ao conectar-se a {{provider}}.",
-	"UI": "",
-	"Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "",
-	"Unpin": "",
-	"Update": "",
+	"UI": "UI",
+	"Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "tipo de arquivo desconhecido '{{file_type}}'. Prosseguindo com o upload do arquivo de qualquer maneira.",
+	"Unpin": "Desfixar",
+	"Update": "Atualizar",
 	"Update and Copy Link": "Atualizar e Copiar Link",
 	"Update and Copy Link": "Atualizar e Copiar Link",
 	"Update password": "Atualizar senha",
 	"Update password": "Atualizar senha",
-	"Updated at": "",
-	"Upload": "",
-	"Upload a GGUF model": "Carregar um modelo GGUF",
-	"Upload Files": "Carregar arquivos",
-	"Upload Pipeline": "",
-	"Upload Progress": "Progresso do Carregamento",
+	"Updated at": "Atualizado em",
+	"Upload": "Upload",
+	"Upload a GGUF model": "Upload de modelo GGUF",
+	"Upload Files": "Upload de Arquivos",
+	"Upload Pipeline": "Upload de Pipeline",
+	"Upload Progress": "Progresso de Upload",
 	"URL Mode": "Modo de URL",
 	"URL Mode": "Modo de URL",
 	"Use '#' in the prompt input to load and select your documents.": "Use '#' na entrada do prompt para carregar e selecionar seus documentos.",
 	"Use '#' in the prompt input to load and select your documents.": "Use '#' na entrada do prompt para carregar e selecionar seus documentos.",
 	"Use Gravatar": "Usar Gravatar",
 	"Use Gravatar": "Usar Gravatar",
@@ -633,22 +663,23 @@
 	"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": "usuário",
 	"user": "usuário",
-	"User location successfully retrieved.": "",
+	"User location successfully retrieved.": "Localização do usuário recuperada com sucesso.",
 	"User Permissions": "Permissões do Usuário",
 	"User Permissions": "Permissões do Usuário",
 	"Users": "Usuários",
 	"Users": "Usuários",
 	"Utilize": "Utilizar",
 	"Utilize": "Utilizar",
 	"Valid time units:": "Unidades de tempo válidas:",
 	"Valid time units:": "Unidades de tempo válidas:",
-	"Valves": "",
-	"Valves updated": "",
-	"Valves updated successfully": "",
+	"Valves": "Válvulas",
+	"Valves updated": "Válvulas atualizadas",
+	"Valves updated successfully": "Válvulas atualizadas com sucesso",
 	"variable": "variável",
 	"variable": "variável",
 	"variable to have them replaced with clipboard content.": "variável para que sejam substituídos pelo conteúdo da área de transferência.",
 	"variable to have them replaced with clipboard content.": "variável para que sejam substituídos pelo conteúdo da área de transferência.",
 	"Version": "Versão",
 	"Version": "Versão",
-	"Voice": "",
+	"Voice": "Voz",
 	"Warning": "Aviso",
 	"Warning": "Aviso",
+	"Warning:": "Aviso:",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Aviso: Se você atualizar ou alterar seu modelo de incorporação, você precisará reimportar todos os documentos.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Aviso: Se você atualizar ou alterar seu modelo de incorporação, você precisará reimportar todos os documentos.",
 	"Web": "Web",
 	"Web": "Web",
-	"Web API": "",
+	"Web API": "Web API",
 	"Web Loader Settings": "Configurações do Carregador da Web",
 	"Web Loader Settings": "Configurações do Carregador da Web",
 	"Web Params": "Parâmetros da Web",
 	"Web Params": "Parâmetros da Web",
 	"Web Search": "Pesquisa na Web",
 	"Web Search": "Pesquisa na Web",
@@ -658,20 +689,21 @@
 	"WebUI will make requests to": "WebUI fará solicitações para",
 	"WebUI will make requests to": "WebUI fará solicitações para",
 	"What’s New in": "O que há de novo em",
 	"What’s New in": "O que há de novo em",
 	"When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Quando o histórico está desativado, novos bate-papos neste navegador não aparecerão em seu histórico em nenhum dos seus dispositivos.",
 	"When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Quando o histórico está desativado, novos bate-papos neste navegador não aparecerão em seu histórico em nenhum dos seus dispositivos.",
-	"Whisper (Local)": "",
-	"Widescreen Mode": "",
+	"Whisper (Local)": "Whisper (Local)",
+	"Widescreen Mode": "Modo de Tela Larga",
 	"Workspace": "Espaço de trabalho",
 	"Workspace": "Espaço de trabalho",
 	"Write a prompt suggestion (e.g. Who are you?)": "Escreva uma sugestão de prompt (por exemplo, Quem é você?)",
 	"Write a prompt suggestion (e.g. Who are you?)": "Escreva uma sugestão de prompt (por exemplo, Quem é você?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Escreva um resumo em 50 palavras que resuma [tópico ou palavra-chave].",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Escreva um resumo em 50 palavras que resuma [tópico ou palavra-chave].",
 	"Yesterday": "Ontem",
 	"Yesterday": "Ontem",
 	"You": "Você",
 	"You": "Você",
-	"You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "",
+	"You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "Você pode personalizar suas interações com LLMs adicionando memórias através do botão 'Gerenciar' abaixo, tornando-as mais úteis e adaptadas a você.",
 	"You cannot clone a base model": "Não é possível clonar um modelo base",
 	"You cannot clone a base model": "Não é possível clonar um modelo base",
 	"You have no archived conversations.": "Você não tem conversas arquivadas.",
 	"You have no archived conversations.": "Você não tem conversas arquivadas.",
 	"You have shared this chat": "Você compartilhou esta conversa",
 	"You have shared this chat": "Você compartilhou esta conversa",
 	"You're a helpful assistant.": "Você é um assistente útil.",
 	"You're a helpful assistant.": "Você é um assistente útil.",
 	"You're now logged in.": "Você está conectado agora.",
 	"You're now logged in.": "Você está conectado agora.",
-	"Your account status is currently pending activation.": "",
+	"Your account status is currently pending activation.": "Sua conta está atualmente pendente de ativação.",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Sua contribuição inteira irá diretamente para o desenvolvedor do plugin; Open WebUI não cobra nenhuma porcentagem. No entanto, a plataforma de financiamento escolhida pode ter suas próprias taxas.",
 	"Youtube": "Youtube",
 	"Youtube": "Youtube",
 	"Youtube Loader Settings": "Configurações do carregador do Youtube"
 	"Youtube Loader Settings": "Configurações do carregador do Youtube"
 }
 }

+ 32 - 0
src/lib/i18n/locales/pt-PT/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "Apagado {{name}}",
 	"Deleted {{name}}": "Apagado {{name}}",
 	"Description": "Descrição",
 	"Description": "Descrição",
 	"Didn't fully follow instructions": "Não seguiu instruções com precisão",
 	"Didn't fully follow instructions": "Não seguiu instruções com precisão",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "Descubra um modelo",
 	"Discover a model": "Descubra um modelo",
 	"Discover a prompt": "Descobrir um prompt",
 	"Discover a prompt": "Descobrir um prompt",
@@ -188,6 +189,8 @@
 	"Dismissible": "Dispensável",
 	"Dismissible": "Dispensável",
 	"Display Emoji in Call": "",
 	"Display Emoji in Call": "",
 	"Display the username instead of You in the Chat": "Exibir o nome de utilizador em vez de Você na Conversa",
 	"Display the username instead of You in the Chat": "Exibir o nome de utilizador em vez de Você na Conversa",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "Documento",
 	"Document": "Documento",
 	"Document Settings": "Configurações de Documento",
 	"Document Settings": "Configurações de Documento",
 	"Documentation": "Documentação",
 	"Documentation": "Documentação",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "não faz conexões externas e os seus dados permanecem seguros no seu servidor alojado localmente.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "não faz conexões externas e os seus dados permanecem seguros no seu servidor alojado localmente.",
 	"Don't Allow": "Não Permitir",
 	"Don't Allow": "Não Permitir",
 	"Don't have an account?": "Não tem uma conta?",
 	"Don't have an account?": "Não tem uma conta?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "Não gosta do estilo",
 	"Don't like the style": "Não gosta do estilo",
 	"Done": "",
 	"Done": "",
 	"Download": "Descarregar",
 	"Download": "Descarregar",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "Active a Partilha da Comunidade",
 	"Enable Community Sharing": "Active a Partilha da Comunidade",
 	"Enable New Sign Ups": "Ativar Novas Inscrições",
 	"Enable New Sign Ups": "Ativar Novas Inscrições",
 	"Enable Web Search": "Ativar pesquisa na Web",
 	"Enable Web Search": "Ativar pesquisa na Web",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Confirme que o seu ficheiro CSV inclui 4 colunas nesta ordem: Nome, E-mail, Senha, Função.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Confirme que o seu ficheiro CSV inclui 4 colunas nesta ordem: Nome, E-mail, Senha, Função.",
 	"Enter {{role}} message here": "Escreva a mensagem de {{role}} aqui",
 	"Enter {{role}} message here": "Escreva a mensagem de {{role}} aqui",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Escreva a chave da API Serpstack",
 	"Enter Serpstack API Key": "Escreva a chave da API Serpstack",
 	"Enter stop sequence": "Escreva a sequência de paragem",
 	"Enter stop sequence": "Escreva a sequência de paragem",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "",
 	"Enter Tavily API Key": "",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "Escreva o Top K",
 	"Enter Top K": "Escreva o Top K",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "Escreva o URL (por exemplo, http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "Escreva o URL (por exemplo, http://localhost:11434)",
 	"Enter Your Email": "Escreva o seu E-mail",
 	"Enter Your Email": "Escreva o seu E-mail",
 	"Enter Your Full Name": "Escreva o seu Nome Completo",
 	"Enter Your Full Name": "Escreva o seu Nome Completo",
+	"Enter your message": "",
 	"Enter Your Password": "Escreva a sua Senha",
 	"Enter Your Password": "Escreva a sua Senha",
 	"Enter Your Role": "Escreva a sua Função",
 	"Enter Your Role": "Escreva a sua Função",
 	"Error": "Erro",
 	"Error": "Erro",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "Modo de Ficheiro",
 	"File Mode": "Modo de Ficheiro",
 	"File not found.": "Ficheiro não encontrado.",
 	"File not found.": "Ficheiro não encontrado.",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "Penalidade de Frequência",
 	"Frequency Penalty": "Penalidade de Frequência",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "Geral",
 	"General": "Geral",
 	"General Settings": "Configurações Gerais",
 	"General Settings": "Configurações Gerais",
 	"Generate Image": "Gerar imagem",
 	"Generate Image": "Gerar imagem",
 	"Generating search query": "A gerar a consulta da pesquisa",
 	"Generating search query": "A gerar a consulta da pesquisa",
 	"Generation Info": "Informações de Geração",
 	"Generation Info": "Informações de Geração",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "Boa Resposta",
 	"Good Response": "Boa Resposta",
 	"Google PSE API Key": "Chave da API PSE do Google",
 	"Google PSE API Key": "Chave da API PSE do Google",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "Como posso ajudá-lo hoje?",
 	"How can I help you today?": "Como posso ajudá-lo hoje?",
 	"Hybrid Search": "Pesquisa Híbrida",
 	"Hybrid Search": "Pesquisa 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.": "",
 	"Image Generation (Experimental)": "Geração de Imagens (Experimental)",
 	"Image Generation (Experimental)": "Geração de Imagens (Experimental)",
 	"Image Generation Engine": "Mecanismo de Geração de Imagens",
 	"Image Generation Engine": "Mecanismo de Geração de Imagens",
 	"Image Settings": "Configurações da Imagem",
 	"Image Settings": "Configurações da Imagem",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "Atalhos de teclado",
 	"Keyboard shortcuts": "Atalhos de teclado",
 	"Knowledge": "Conhecimento",
 	"Knowledge": "Conhecimento",
 	"Language": "Idioma",
 	"Language": "Idioma",
+	"large language models, locally.": "",
 	"Last Active": "Último Ativo",
 	"Last Active": "Último Ativo",
 	"Last Modified": "",
 	"Last Modified": "",
 	"Light": "Claro",
 	"Light": "Claro",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "Válvulas de Condutas",
 	"Pipelines Valves": "Válvulas de Condutas",
 	"Plain text (.txt)": "Texto sem formatação (.txt)",
 	"Plain text (.txt)": "Texto sem formatação (.txt)",
 	"Playground": "Recreio",
 	"Playground": "Recreio",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "Atitude Positiva",
 	"Positive attitude": "Atitude Positiva",
 	"Previous 30 days": "Últimos 30 dias",
 	"Previous 30 days": "Últimos 30 dias",
 	"Previous 7 days": "Últimos 7 dias",
 	"Previous 7 days": "Últimos 7 dias",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "A correr",
 	"Running": "A correr",
 	"Save": "Guardar",
 	"Save": "Guardar",
 	"Save & Create": "Guardar e Criar",
 	"Save & Create": "Guardar e Criar",
@@ -559,6 +580,8 @@
 	"Success": "Sucesso",
 	"Success": "Sucesso",
 	"Successfully updated.": "Atualizado com sucesso.",
 	"Successfully updated.": "Atualizado com sucesso.",
 	"Suggested": "Sugerido",
 	"Suggested": "Sugerido",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "Sistema",
 	"System": "Sistema",
 	"System Prompt": "Prompt do Sistema",
 	"System Prompt": "Prompt do Sistema",
 	"Tags": "Etiquetas",
 	"Tags": "Etiquetas",
@@ -571,6 +594,7 @@
 	"Text-to-Speech Engine": "Motor de Texto para Fala",
 	"Text-to-Speech Engine": "Motor de Texto para Fala",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Obrigado pelo seu feedback!",
 	"Thanks for your feedback!": "Obrigado pelo seu feedback!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "A pontuação deve ser um valor entre 0.0 (0%) e 1.0 (100%).",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "A pontuação deve ser um valor entre 0.0 (0%) e 1.0 (100%).",
 	"Theme": "Tema",
 	"Theme": "Tema",
 	"Thinking...": "A pensar...",
 	"Thinking...": "A pensar...",
@@ -604,7 +628,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "",
 	"Tools": "",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Trouble accessing Ollama?": "Problemas a aceder ao Ollama?",
 	"Trouble accessing Ollama?": "Problemas a aceder ao Ollama?",
@@ -646,6 +676,7 @@
 	"Version": "Versão",
 	"Version": "Versão",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "Aviso",
 	"Warning": "Aviso",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Aviso: Se você atualizar ou alterar o seu modelo de vetorização, você tem de reimportar todos os documentos.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Aviso: Se você atualizar ou alterar o seu modelo de vetorização, você tem de reimportar todos os documentos.",
 	"Web": "Web",
 	"Web": "Web",
 	"Web API": "Web API",
 	"Web API": "Web API",
@@ -672,6 +703,7 @@
 	"You're a helpful assistant.": "Você é um assistente útil.",
 	"You're a helpful assistant.": "Você é um assistente útil.",
 	"You're now logged in.": "Você agora está conectado.",
 	"You're now logged in.": "Você agora está conectado.",
 	"Your account status is currently pending activation.": "O status da sua conta está atualmente com a ativação pendente.",
 	"Your account status is currently pending activation.": "O status da sua conta está atualmente com a ativação pendente.",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "Youtube",
 	"Youtube": "Youtube",
 	"Youtube Loader Settings": "Configurações do Carregador do Youtube"
 	"Youtube Loader Settings": "Configurações do Carregador do Youtube"
 }
 }

+ 32 - 0
src/lib/i18n/locales/ru-RU/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "Удалено {{name}}",
 	"Deleted {{name}}": "Удалено {{name}}",
 	"Description": "Описание",
 	"Description": "Описание",
 	"Didn't fully follow instructions": "Не полностью следул инструкциям",
 	"Didn't fully follow instructions": "Не полностью следул инструкциям",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "Откройте для себя модель",
 	"Discover a model": "Откройте для себя модель",
 	"Discover a prompt": "Найти промт",
 	"Discover a prompt": "Найти промт",
@@ -188,6 +189,8 @@
 	"Dismissible": "",
 	"Dismissible": "",
 	"Display Emoji in Call": "",
 	"Display Emoji in Call": "",
 	"Display the username instead of You in the Chat": "Отображать имя пользователя вместо 'Вы' в чате",
 	"Display the username instead of You in the Chat": "Отображать имя пользователя вместо 'Вы' в чате",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "Документ",
 	"Document": "Документ",
 	"Document Settings": "Настройки документа",
 	"Document Settings": "Настройки документа",
 	"Documentation": "",
 	"Documentation": "",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "не устанавливает никаких внешних соединений, и ваши данные остаются безопасно на вашем локальном сервере.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "не устанавливает никаких внешних соединений, и ваши данные остаются безопасно на вашем локальном сервере.",
 	"Don't Allow": "Не разрешать",
 	"Don't Allow": "Не разрешать",
 	"Don't have an account?": "у вас не есть аккаунт?",
 	"Don't have an account?": "у вас не есть аккаунт?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "Не нравится стиль",
 	"Don't like the style": "Не нравится стиль",
 	"Done": "",
 	"Done": "",
 	"Download": "Загрузить",
 	"Download": "Загрузить",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "Включить общий доступ к сообществу",
 	"Enable Community Sharing": "Включить общий доступ к сообществу",
 	"Enable New Sign Ups": "Разрешить новые регистрации",
 	"Enable New Sign Ups": "Разрешить новые регистрации",
 	"Enable Web Search": "Включить поиск в Интернете",
 	"Enable Web Search": "Включить поиск в Интернете",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Убедитесь, что ваш CSV-файл включает в себя 4 столбца в следующем порядке: Имя, Электронная почта, Пароль, Роль.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Убедитесь, что ваш CSV-файл включает в себя 4 столбца в следующем порядке: Имя, Электронная почта, Пароль, Роль.",
 	"Enter {{role}} message here": "Введите сообщение {{role}} здесь",
 	"Enter {{role}} message here": "Введите сообщение {{role}} здесь",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Введите ключ API Serpstack",
 	"Enter Serpstack API Key": "Введите ключ API Serpstack",
 	"Enter stop sequence": "Введите последовательность остановки",
 	"Enter stop sequence": "Введите последовательность остановки",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "",
 	"Enter Tavily API Key": "",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "Введите Top K",
 	"Enter Top K": "Введите Top K",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "Введите URL-адрес (например, http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "Введите URL-адрес (например, http://localhost:11434)",
 	"Enter Your Email": "Введите вашу электронную почту",
 	"Enter Your Email": "Введите вашу электронную почту",
 	"Enter Your Full Name": "Введите ваше полное имя",
 	"Enter Your Full Name": "Введите ваше полное имя",
+	"Enter your message": "",
 	"Enter Your Password": "Введите ваш пароль",
 	"Enter Your Password": "Введите ваш пароль",
 	"Enter Your Role": "Введите вашу роль",
 	"Enter Your Role": "Введите вашу роль",
 	"Error": "Ошибка",
 	"Error": "Ошибка",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "Режим файла",
 	"File Mode": "Режим файла",
 	"File not found.": "Файл не найден.",
 	"File not found.": "Файл не найден.",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "Штраф за частоту",
 	"Frequency Penalty": "Штраф за частоту",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "Общее",
 	"General": "Общее",
 	"General Settings": "Общие настройки",
 	"General Settings": "Общие настройки",
 	"Generate Image": "",
 	"Generate Image": "",
 	"Generating search query": "Генерация поискового запроса",
 	"Generating search query": "Генерация поискового запроса",
 	"Generation Info": "Информация о генерации",
 	"Generation Info": "Информация о генерации",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "Хороший ответ",
 	"Good Response": "Хороший ответ",
 	"Google PSE API Key": "Ключ API Google PSE",
 	"Google PSE API Key": "Ключ API Google PSE",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "Чем я могу помочь вам сегодня?",
 	"How can I help you today?": "Чем я могу помочь вам сегодня?",
 	"Hybrid Search": "Гибридная поисковая система",
 	"Hybrid Search": "Гибридная поисковая система",
+	"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
 	"Image Generation (Experimental)": "Генерация изображений (Экспериментально)",
 	"Image Generation (Experimental)": "Генерация изображений (Экспериментально)",
 	"Image Generation Engine": "Механизм генерации изображений",
 	"Image Generation Engine": "Механизм генерации изображений",
 	"Image Settings": "Настройки изображения",
 	"Image Settings": "Настройки изображения",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "Горячие клавиши",
 	"Keyboard shortcuts": "Горячие клавиши",
 	"Knowledge": "",
 	"Knowledge": "",
 	"Language": "Язык",
 	"Language": "Язык",
+	"large language models, locally.": "",
 	"Last Active": "Последний активный",
 	"Last Active": "Последний активный",
 	"Last Modified": "",
 	"Last Modified": "",
 	"Light": "Светлый",
 	"Light": "Светлый",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "Трубопроводы Клапаны",
 	"Pipelines Valves": "Трубопроводы Клапаны",
 	"Plain text (.txt)": "Текст в формате .txt",
 	"Plain text (.txt)": "Текст в формате .txt",
 	"Playground": "Площадка",
 	"Playground": "Площадка",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "Позитивная атмосфера",
 	"Positive attitude": "Позитивная атмосфера",
 	"Previous 30 days": "Предыдущие 30 дней",
 	"Previous 30 days": "Предыдущие 30 дней",
 	"Previous 7 days": "Предыдущие 7 дней",
 	"Previous 7 days": "Предыдущие 7 дней",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Розовое сосновое дерево",
 	"Rosé Pine": "Розовое сосновое дерево",
 	"Rosé Pine Dawn": "Розовое сосновое дерево рассвет",
 	"Rosé Pine Dawn": "Розовое сосновое дерево рассвет",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "",
 	"Running": "",
 	"Save": "Сохранить",
 	"Save": "Сохранить",
 	"Save & Create": "Сохранить и создать",
 	"Save & Create": "Сохранить и создать",
@@ -560,6 +581,8 @@
 	"Success": "Успех",
 	"Success": "Успех",
 	"Successfully updated.": "Успешно обновлено.",
 	"Successfully updated.": "Успешно обновлено.",
 	"Suggested": "Предложено",
 	"Suggested": "Предложено",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "Система",
 	"System": "Система",
 	"System Prompt": "Системный промпт",
 	"System Prompt": "Системный промпт",
 	"Tags": "Теги",
 	"Tags": "Теги",
@@ -572,6 +595,7 @@
 	"Text-to-Speech Engine": "Система синтеза речи",
 	"Text-to-Speech Engine": "Система синтеза речи",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Спасибо за ваше мнение!",
 	"Thanks for your feedback!": "Спасибо за ваше мнение!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Оценка должна быть значением между 0,0 (0%) и 1,0 (100%).",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Оценка должна быть значением между 0,0 (0%) и 1,0 (100%).",
 	"Theme": "Тема",
 	"Theme": "Тема",
 	"Thinking...": "",
 	"Thinking...": "",
@@ -605,7 +629,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "",
 	"Tools": "",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Trouble accessing Ollama?": "Проблемы с доступом к Ollama?",
 	"Trouble accessing Ollama?": "Проблемы с доступом к Ollama?",
@@ -647,6 +677,7 @@
 	"Version": "Версия",
 	"Version": "Версия",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "Предупреждение",
 	"Warning": "Предупреждение",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Предупреждение: Если вы обновите или измените модель эмбеддинга, вам нужно будет повторно импортировать все документы.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Предупреждение: Если вы обновите или измените модель эмбеддинга, вам нужно будет повторно импортировать все документы.",
 	"Web": "Веб",
 	"Web": "Веб",
 	"Web API": "",
 	"Web API": "",
@@ -673,6 +704,7 @@
 	"You're a helpful assistant.": "Вы полезный ассистент.",
 	"You're a helpful assistant.": "Вы полезный ассистент.",
 	"You're now logged in.": "Вы вошли в систему.",
 	"You're now logged in.": "Вы вошли в систему.",
 	"Your account status is currently pending activation.": "",
 	"Your account status is currently pending activation.": "",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "Ютуб",
 	"Youtube": "Ютуб",
 	"Youtube Loader Settings": "Настройки загрузчика YouTube"
 	"Youtube Loader Settings": "Настройки загрузчика YouTube"
 }
 }

+ 32 - 0
src/lib/i18n/locales/sr-RS/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "Избрисано {{наме}}",
 	"Deleted {{name}}": "Избрисано {{наме}}",
 	"Description": "Опис",
 	"Description": "Опис",
 	"Didn't fully follow instructions": "Упутства нису праћена у потпуности",
 	"Didn't fully follow instructions": "Упутства нису праћена у потпуности",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "Откријте модел",
 	"Discover a model": "Откријте модел",
 	"Discover a prompt": "Откриј упит",
 	"Discover a prompt": "Откриј упит",
@@ -188,6 +189,8 @@
 	"Dismissible": "",
 	"Dismissible": "",
 	"Display Emoji in Call": "",
 	"Display Emoji in Call": "",
 	"Display the username instead of You in the Chat": "Прикажи корисничко име уместо Ти у чату",
 	"Display the username instead of You in the Chat": "Прикажи корисничко име уместо Ти у чату",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "Документ",
 	"Document": "Документ",
 	"Document Settings": "Подешавања документа",
 	"Document Settings": "Подешавања документа",
 	"Documentation": "",
 	"Documentation": "",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "не отвара никакве спољне везе и ваши подаци остају сигурно на вашем локално хостованом серверу.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "не отвара никакве спољне везе и ваши подаци остају сигурно на вашем локално хостованом серверу.",
 	"Don't Allow": "Не дозволи",
 	"Don't Allow": "Не дозволи",
 	"Don't have an account?": "Немате налог?",
 	"Don't have an account?": "Немате налог?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "Не свиђа ми се стил",
 	"Don't like the style": "Не свиђа ми се стил",
 	"Done": "",
 	"Done": "",
 	"Download": "Преузми",
 	"Download": "Преузми",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "Омогући дељење заједнице",
 	"Enable Community Sharing": "Омогући дељење заједнице",
 	"Enable New Sign Ups": "Омогући нове пријаве",
 	"Enable New Sign Ups": "Омогући нове пријаве",
 	"Enable Web Search": "Омогући Wеб претрагу",
 	"Enable Web Search": "Омогући Wеб претрагу",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Уверите се да ваша CSV датотека укључује 4 колоне у овом редоследу: Име, Е-пошта, Лозинка, Улога.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Уверите се да ваша CSV датотека укључује 4 колоне у овом редоследу: Име, Е-пошта, Лозинка, Улога.",
 	"Enter {{role}} message here": "Унесите {{role}} поруку овде",
 	"Enter {{role}} message here": "Унесите {{role}} поруку овде",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Унесите Серпстацк АПИ кључ",
 	"Enter Serpstack API Key": "Унесите Серпстацк АПИ кључ",
 	"Enter stop sequence": "Унесите секвенцу заустављања",
 	"Enter stop sequence": "Унесите секвенцу заустављања",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "",
 	"Enter Tavily API Key": "",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "Унесите Топ К",
 	"Enter Top K": "Унесите Топ К",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "Унесите адресу (нпр. http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "Унесите адресу (нпр. http://localhost:11434)",
 	"Enter Your Email": "Унесите вашу е-пошту",
 	"Enter Your Email": "Унесите вашу е-пошту",
 	"Enter Your Full Name": "Унесите ваше име и презиме",
 	"Enter Your Full Name": "Унесите ваше име и презиме",
+	"Enter your message": "",
 	"Enter Your Password": "Унесите вашу лозинку",
 	"Enter Your Password": "Унесите вашу лозинку",
 	"Enter Your Role": "Унесите вашу улогу",
 	"Enter Your Role": "Унесите вашу улогу",
 	"Error": "Грешка",
 	"Error": "Грешка",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "Режим датотеке",
 	"File Mode": "Режим датотеке",
 	"File not found.": "Датотека није пронађена.",
 	"File not found.": "Датотека није пронађена.",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "Фреквентна казна",
 	"Frequency Penalty": "Фреквентна казна",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "Опште",
 	"General": "Опште",
 	"General Settings": "Општа подешавања",
 	"General Settings": "Општа подешавања",
 	"Generate Image": "",
 	"Generate Image": "",
 	"Generating search query": "Генерисање упита претраге",
 	"Generating search query": "Генерисање упита претраге",
 	"Generation Info": "Информације о стварању",
 	"Generation Info": "Информације о стварању",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "Добар одговор",
 	"Good Response": "Добар одговор",
 	"Google PSE API Key": "Гоогле ПСЕ АПИ кључ",
 	"Google PSE API Key": "Гоогле ПСЕ АПИ кључ",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "Како могу да вам помогнем данас?",
 	"How can I help you today?": "Како могу да вам помогнем данас?",
 	"Hybrid Search": "Хибридна претрага",
 	"Hybrid Search": "Хибридна претрага",
+	"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
 	"Image Generation (Experimental)": "Стварање слика (експериментално)",
 	"Image Generation (Experimental)": "Стварање слика (експериментално)",
 	"Image Generation Engine": "Мотор за стварање слика",
 	"Image Generation Engine": "Мотор за стварање слика",
 	"Image Settings": "Подешавања слике",
 	"Image Settings": "Подешавања слике",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "Пречице на тастатури",
 	"Keyboard shortcuts": "Пречице на тастатури",
 	"Knowledge": "",
 	"Knowledge": "",
 	"Language": "Језик",
 	"Language": "Језик",
+	"large language models, locally.": "",
 	"Last Active": "Последња активност",
 	"Last Active": "Последња активност",
 	"Last Modified": "",
 	"Last Modified": "",
 	"Light": "Светла",
 	"Light": "Светла",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "Вентили за цевоводе",
 	"Pipelines Valves": "Вентили за цевоводе",
 	"Plain text (.txt)": "Обичан текст (.txt)",
 	"Plain text (.txt)": "Обичан текст (.txt)",
 	"Playground": "Игралиште",
 	"Playground": "Игралиште",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "Позитиван став",
 	"Positive attitude": "Позитиван став",
 	"Previous 30 days": "Претходних 30 дана",
 	"Previous 30 days": "Претходних 30 дана",
 	"Previous 7 days": "Претходних 7 дана",
 	"Previous 7 days": "Претходних 7 дана",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"RTL": "ДНЛ",
 	"RTL": "ДНЛ",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "",
 	"Running": "",
 	"Save": "Сачувај",
 	"Save": "Сачувај",
 	"Save & Create": "Сачувај и направи",
 	"Save & Create": "Сачувај и направи",
@@ -559,6 +580,8 @@
 	"Success": "Успех",
 	"Success": "Успех",
 	"Successfully updated.": "Успешно ажурирано.",
 	"Successfully updated.": "Успешно ажурирано.",
 	"Suggested": "Предложено",
 	"Suggested": "Предложено",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "Систем",
 	"System": "Систем",
 	"System Prompt": "Системски упит",
 	"System Prompt": "Системски упит",
 	"Tags": "Ознаке",
 	"Tags": "Ознаке",
@@ -571,6 +594,7 @@
 	"Text-to-Speech Engine": "Мотор за текст у говор",
 	"Text-to-Speech Engine": "Мотор за текст у говор",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Хвала на вашем коментару!",
 	"Thanks for your feedback!": "Хвала на вашем коментару!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Резултат треба да буде вредност између 0.0 (0%) и 1.0 (100%).",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Резултат треба да буде вредност између 0.0 (0%) и 1.0 (100%).",
 	"Theme": "Тема",
 	"Theme": "Тема",
 	"Thinking...": "",
 	"Thinking...": "",
@@ -604,7 +628,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "",
 	"Tools": "",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Топ К",
 	"Top K": "Топ К",
 	"Top P": "Топ П",
 	"Top P": "Топ П",
 	"Trouble accessing Ollama?": "Проблеми са приступом Ollama-и?",
 	"Trouble accessing Ollama?": "Проблеми са приступом Ollama-и?",
@@ -646,6 +676,7 @@
 	"Version": "Издање",
 	"Version": "Издање",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "Упозорење",
 	"Warning": "Упозорење",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Упозорење: ако ажурирате или промените ваш модел уградње, мораћете поново да увезете све документе.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Упозорење: ако ажурирате или промените ваш модел уградње, мораћете поново да увезете све документе.",
 	"Web": "Веб",
 	"Web": "Веб",
 	"Web API": "",
 	"Web API": "",
@@ -672,6 +703,7 @@
 	"You're a helpful assistant.": "Ти си користан помоћник.",
 	"You're a helpful assistant.": "Ти си користан помоћник.",
 	"You're now logged in.": "Сада сте пријављени.",
 	"You're now logged in.": "Сада сте пријављени.",
 	"Your account status is currently pending activation.": "",
 	"Your account status is currently pending activation.": "",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "Јутјуб",
 	"Youtube": "Јутјуб",
 	"Youtube Loader Settings": "Подешавања Јутјуб учитавача"
 	"Youtube Loader Settings": "Подешавања Јутјуб учитавача"
 }
 }

+ 32 - 0
src/lib/i18n/locales/sv-SE/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "Borttagen {{name}}",
 	"Deleted {{name}}": "Borttagen {{name}}",
 	"Description": "Beskrivning",
 	"Description": "Beskrivning",
 	"Didn't fully follow instructions": "Följde inte instruktionerna",
 	"Didn't fully follow instructions": "Följde inte instruktionerna",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "Upptäck en modell",
 	"Discover a model": "Upptäck en modell",
 	"Discover a prompt": "Upptäck en instruktion",
 	"Discover a prompt": "Upptäck en instruktion",
@@ -188,6 +189,8 @@
 	"Dismissible": "Kan stängas",
 	"Dismissible": "Kan stängas",
 	"Display Emoji in Call": "Visa Emoji under samtal",
 	"Display Emoji in Call": "Visa Emoji under samtal",
 	"Display the username instead of You in the Chat": "Visa användarnamnet istället för du i chatten",
 	"Display the username instead of You in the Chat": "Visa användarnamnet istället för du i chatten",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "Dokument",
 	"Document": "Dokument",
 	"Document Settings": "Dokumentinställningar",
 	"Document Settings": "Dokumentinställningar",
 	"Documentation": "Dokumentation",
 	"Documentation": "Dokumentation",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "gör inga externa anslutningar, och dina data förblir säkra på din lokalt värdade server.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "gör inga externa anslutningar, och dina data förblir säkra på din lokalt värdade server.",
 	"Don't Allow": "Tillåt inte",
 	"Don't Allow": "Tillåt inte",
 	"Don't have an account?": "Har du inget konto?",
 	"Don't have an account?": "Har du inget konto?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "Tycker inte om utseendet",
 	"Don't like the style": "Tycker inte om utseendet",
 	"Done": "",
 	"Done": "",
 	"Download": "Ladda ner",
 	"Download": "Ladda ner",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "Aktivera community-delning",
 	"Enable Community Sharing": "Aktivera community-delning",
 	"Enable New Sign Ups": "Aktivera nya registreringar",
 	"Enable New Sign Ups": "Aktivera nya registreringar",
 	"Enable Web Search": "Aktivera webbsökning",
 	"Enable Web Search": "Aktivera webbsökning",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Se till att din CSV-fil innehåller fyra kolumner i denna ordning: Name, Email, Password, Role.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Se till att din CSV-fil innehåller fyra kolumner i denna ordning: Name, Email, Password, Role.",
 	"Enter {{role}} message here": "Skriv {{role}} meddelande här",
 	"Enter {{role}} message here": "Skriv {{role}} meddelande här",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "Ange Serply API-nyckel",
 	"Enter Serply API Key": "Ange Serply API-nyckel",
 	"Enter Serpstack API Key": "Ange Serpstack API-nyckel",
 	"Enter Serpstack API Key": "Ange Serpstack API-nyckel",
 	"Enter stop sequence": "Ange stoppsekvens",
 	"Enter stop sequence": "Ange stoppsekvens",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "",
 	"Enter Tavily API Key": "",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "Ange Top K",
 	"Enter Top K": "Ange Top K",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "Ange URL (t.ex. http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "Ange URL (t.ex. http://localhost:11434)",
 	"Enter Your Email": "Ange din e-post",
 	"Enter Your Email": "Ange din e-post",
 	"Enter Your Full Name": "Ange ditt fullständiga namn",
 	"Enter Your Full Name": "Ange ditt fullständiga namn",
+	"Enter your message": "",
 	"Enter Your Password": "Ange ditt lösenord",
 	"Enter Your Password": "Ange ditt lösenord",
 	"Enter Your Role": "Ange din roll",
 	"Enter Your Role": "Ange din roll",
 	"Error": "Fel",
 	"Error": "Fel",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "Fil-läge",
 	"File Mode": "Fil-läge",
 	"File not found.": "Fil hittades inte.",
 	"File not found.": "Fil hittades inte.",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "Straff för frekvens",
 	"Frequency Penalty": "Straff för frekvens",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "Allmän",
 	"General": "Allmän",
 	"General Settings": "Allmänna inställningar",
 	"General Settings": "Allmänna inställningar",
 	"Generate Image": "Generera bild",
 	"Generate Image": "Generera bild",
 	"Generating search query": "Genererar sökfråga",
 	"Generating search query": "Genererar sökfråga",
 	"Generation Info": "Info om generation",
 	"Generation Info": "Info om generation",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "Bra svar",
 	"Good Response": "Bra svar",
 	"Google PSE API Key": "Google PSE API-nyckel",
 	"Google PSE API Key": "Google PSE API-nyckel",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "Hur kan jag hjälpa dig idag?",
 	"How can I help you today?": "Hur kan jag hjälpa dig idag?",
 	"Hybrid Search": "Hybrid sökning",
 	"Hybrid Search": "Hybrid sökning",
+	"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.": "",
 	"Image Generation (Experimental)": "Bildgenerering (experimentell)",
 	"Image Generation (Experimental)": "Bildgenerering (experimentell)",
 	"Image Generation Engine": "Bildgenereringsmotor",
 	"Image Generation Engine": "Bildgenereringsmotor",
 	"Image Settings": "Bildinställningar",
 	"Image Settings": "Bildinställningar",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "Tangentbordsgenvägar",
 	"Keyboard shortcuts": "Tangentbordsgenvägar",
 	"Knowledge": "Kunskap",
 	"Knowledge": "Kunskap",
 	"Language": "Språk",
 	"Language": "Språk",
+	"large language models, locally.": "",
 	"Last Active": "Senast aktiv",
 	"Last Active": "Senast aktiv",
 	"Last Modified": "",
 	"Last Modified": "",
 	"Light": "Ljus",
 	"Light": "Ljus",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "Ventiler för rörledningar",
 	"Pipelines Valves": "Ventiler för rörledningar",
 	"Plain text (.txt)": "Text (.txt)",
 	"Plain text (.txt)": "Text (.txt)",
 	"Playground": "Lekplats",
 	"Playground": "Lekplats",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "Positivt inställning",
 	"Positive attitude": "Positivt inställning",
 	"Previous 30 days": "Föregående 30 dagar",
 	"Previous 30 days": "Föregående 30 dagar",
 	"Previous 7 days": "Föregående 7 dagar",
 	"Previous 7 days": "Föregående 7 dagar",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "Kör",
 	"Running": "Kör",
 	"Save": "Spara",
 	"Save": "Spara",
 	"Save & Create": "Spara och skapa",
 	"Save & Create": "Spara och skapa",
@@ -558,6 +579,8 @@
 	"Success": "Framgång",
 	"Success": "Framgång",
 	"Successfully updated.": "Uppdaterades framgångsrikt.",
 	"Successfully updated.": "Uppdaterades framgångsrikt.",
 	"Suggested": "Föreslagen",
 	"Suggested": "Föreslagen",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "System",
 	"System": "System",
 	"System Prompt": "Systeminstruktion",
 	"System Prompt": "Systeminstruktion",
 	"Tags": "Taggar",
 	"Tags": "Taggar",
@@ -570,6 +593,7 @@
 	"Text-to-Speech Engine": "Text-till-tal-motor",
 	"Text-to-Speech Engine": "Text-till-tal-motor",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Tack för din feedback!",
 	"Thanks for your feedback!": "Tack för din feedback!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Betyget ska vara ett värde mellan 0.0 (0%) och 1.0 (100%).",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Betyget ska vara ett värde mellan 0.0 (0%) och 1.0 (100%).",
 	"Theme": "Tema",
 	"Theme": "Tema",
 	"Thinking...": "",
 	"Thinking...": "",
@@ -603,7 +627,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "Verktyg",
 	"Tools": "Verktyg",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Topp K",
 	"Top K": "Topp K",
 	"Top P": "Topp P",
 	"Top P": "Topp P",
 	"Trouble accessing Ollama?": "Problem med att komma åt Ollama?",
 	"Trouble accessing Ollama?": "Problem med att komma åt Ollama?",
@@ -645,6 +675,7 @@
 	"Version": "Version",
 	"Version": "Version",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "Varning",
 	"Warning": "Varning",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Varning: Om du uppdaterar eller ändrar din embedding modell måste du importera alla dokument igen.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Varning: Om du uppdaterar eller ändrar din embedding modell måste du importera alla dokument igen.",
 	"Web": "Webb",
 	"Web": "Webb",
 	"Web API": "Webb-API",
 	"Web API": "Webb-API",
@@ -671,6 +702,7 @@
 	"You're a helpful assistant.": "Du är en hjälpsam assistent.",
 	"You're a helpful assistant.": "Du är en hjälpsam assistent.",
 	"You're now logged in.": "Du är nu inloggad.",
 	"You're now logged in.": "Du är nu inloggad.",
 	"Your account status is currently pending activation.": "Ditt konto väntar på att bli aktiverat",
 	"Your account status is currently pending activation.": "Ditt konto väntar på att bli aktiverat",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "Youtube",
 	"Youtube": "Youtube",
 	"Youtube Loader Settings": "Youtube Loader-inställningar"
 	"Youtube Loader Settings": "Youtube Loader-inställningar"
 }
 }

+ 32 - 0
src/lib/i18n/locales/tk-TW/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "",
 	"Deleted {{name}}": "",
 	"Description": "",
 	"Description": "",
 	"Didn't fully follow instructions": "",
 	"Didn't fully follow instructions": "",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "",
 	"Discover a model": "",
 	"Discover a prompt": "",
 	"Discover a prompt": "",
@@ -188,6 +189,8 @@
 	"Dismissible": "",
 	"Dismissible": "",
 	"Display Emoji in Call": "",
 	"Display Emoji in Call": "",
 	"Display the username instead of You in the Chat": "",
 	"Display the username instead of You in the Chat": "",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "",
 	"Document": "",
 	"Document Settings": "",
 	"Document Settings": "",
 	"Documentation": "",
 	"Documentation": "",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "",
 	"Don't Allow": "",
 	"Don't Allow": "",
 	"Don't have an account?": "",
 	"Don't have an account?": "",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "",
 	"Don't like the style": "",
 	"Done": "",
 	"Done": "",
 	"Download": "",
 	"Download": "",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "",
 	"Enable Community Sharing": "",
 	"Enable New Sign Ups": "",
 	"Enable New Sign Ups": "",
 	"Enable Web Search": "",
 	"Enable Web Search": "",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
 	"Enter {{role}} message here": "",
 	"Enter {{role}} message here": "",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "",
 	"Enter Serpstack API Key": "",
 	"Enter stop sequence": "",
 	"Enter stop sequence": "",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "",
 	"Enter Tavily API Key": "",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "",
 	"Enter Top K": "",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "",
 	"Enter Your Email": "",
 	"Enter Your Full Name": "",
 	"Enter Your Full Name": "",
+	"Enter your message": "",
 	"Enter Your Password": "",
 	"Enter Your Password": "",
 	"Enter Your Role": "",
 	"Enter Your Role": "",
 	"Error": "",
 	"Error": "",
@@ -266,6 +274,7 @@
 	"File": "",
 	"File": "",
 	"File Mode": "",
 	"File Mode": "",
 	"File not found.": "",
 	"File not found.": "",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "",
 	"Filters": "",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "",
 	"Frequency Penalty": "",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "",
 	"General": "",
 	"General Settings": "",
 	"General Settings": "",
 	"Generate Image": "",
 	"Generate Image": "",
 	"Generating search query": "",
 	"Generating search query": "",
 	"Generation Info": "",
 	"Generation Info": "",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "",
 	"Good Response": "",
 	"Google PSE API Key": "",
 	"Google PSE API Key": "",
@@ -298,6 +315,7 @@
 	"Hide Model": "",
 	"Hide Model": "",
 	"How can I help you today?": "",
 	"How can I help you today?": "",
 	"Hybrid Search": "",
 	"Hybrid Search": "",
+	"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
 	"Image Generation (Experimental)": "",
 	"Image Generation (Experimental)": "",
 	"Image Generation Engine": "",
 	"Image Generation Engine": "",
 	"Image Settings": "",
 	"Image Settings": "",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "",
 	"Keyboard shortcuts": "",
 	"Knowledge": "",
 	"Knowledge": "",
 	"Language": "",
 	"Language": "",
+	"large language models, locally.": "",
 	"Last Active": "",
 	"Last Active": "",
 	"Last Modified": "",
 	"Last Modified": "",
 	"Light": "",
 	"Light": "",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "",
 	"Pipelines Valves": "",
 	"Plain text (.txt)": "",
 	"Plain text (.txt)": "",
 	"Playground": "",
 	"Playground": "",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "",
 	"Positive attitude": "",
 	"Previous 30 days": "",
 	"Previous 30 days": "",
 	"Previous 7 days": "",
 	"Previous 7 days": "",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "",
 	"Rosé Pine": "",
 	"Rosé Pine Dawn": "",
 	"Rosé Pine Dawn": "",
 	"RTL": "",
 	"RTL": "",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "",
 	"Running": "",
 	"Save": "",
 	"Save": "",
 	"Save & Create": "",
 	"Save & Create": "",
@@ -558,6 +579,8 @@
 	"Success": "",
 	"Success": "",
 	"Successfully updated.": "",
 	"Successfully updated.": "",
 	"Suggested": "",
 	"Suggested": "",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "",
 	"System": "",
 	"System Prompt": "",
 	"System Prompt": "",
 	"Tags": "",
 	"Tags": "",
@@ -570,6 +593,7 @@
 	"Text-to-Speech Engine": "",
 	"Text-to-Speech Engine": "",
 	"Tfs Z": "",
 	"Tfs Z": "",
 	"Thanks for your feedback!": "",
 	"Thanks for your feedback!": "",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "",
 	"Theme": "",
 	"Theme": "",
 	"Thinking...": "",
 	"Thinking...": "",
@@ -603,7 +627,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "",
 	"Tools": "",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "",
 	"Top K": "",
 	"Top P": "",
 	"Top P": "",
 	"Trouble accessing Ollama?": "",
 	"Trouble accessing Ollama?": "",
@@ -645,6 +675,7 @@
 	"Version": "",
 	"Version": "",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "",
 	"Warning": "",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "",
 	"Web": "",
 	"Web API": "",
 	"Web API": "",
@@ -671,6 +702,7 @@
 	"You're a helpful assistant.": "",
 	"You're a helpful assistant.": "",
 	"You're now logged in.": "",
 	"You're now logged in.": "",
 	"Your account status is currently pending activation.": "",
 	"Your account status is currently pending activation.": "",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "",
 	"Youtube": "",
 	"Youtube Loader Settings": ""
 	"Youtube Loader Settings": ""
 }
 }

+ 32 - 0
src/lib/i18n/locales/tr-TR/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "{{name}} silindi",
 	"Deleted {{name}}": "{{name}} silindi",
 	"Description": "Açıklama",
 	"Description": "Açıklama",
 	"Didn't fully follow instructions": "Talimatları tam olarak takip etmedi",
 	"Didn't fully follow instructions": "Talimatları tam olarak takip etmedi",
+	"Disabled": "",
 	"Discover a function": "Bir fonksiyon keşfedin",
 	"Discover a function": "Bir fonksiyon keşfedin",
 	"Discover a model": "Bir model keşfedin",
 	"Discover a model": "Bir model keşfedin",
 	"Discover a prompt": "Bir prompt keşfedin",
 	"Discover a prompt": "Bir prompt keşfedin",
@@ -188,6 +189,8 @@
 	"Dismissible": "Reddedilebilir",
 	"Dismissible": "Reddedilebilir",
 	"Display Emoji in Call": "Aramada Emoji Göster",
 	"Display Emoji in Call": "Aramada Emoji Göster",
 	"Display the username instead of You in the Chat": "Sohbet'te Siz yerine kullanıcı adını göster",
 	"Display the username instead of You in the Chat": "Sohbet'te Siz yerine kullanıcı adını göster",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "Belge",
 	"Document": "Belge",
 	"Document Settings": "Belge Ayarları",
 	"Document Settings": "Belge Ayarları",
 	"Documentation": "Dökümantasyon",
 	"Documentation": "Dökümantasyon",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "herhangi bir harici bağlantı yapmaz ve verileriniz güvenli bir şekilde yerel olarak barındırılan sunucunuzda kalır.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "herhangi bir harici bağlantı yapmaz ve verileriniz güvenli bir şekilde yerel olarak barındırılan sunucunuzda kalır.",
 	"Don't Allow": "İzin Verme",
 	"Don't Allow": "İzin Verme",
 	"Don't have an account?": "Hesabınız yok mu?",
 	"Don't have an account?": "Hesabınız yok mu?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "Tarzını beğenmedim",
 	"Don't like the style": "Tarzını beğenmedim",
 	"Done": "Tamamlandı",
 	"Done": "Tamamlandı",
 	"Download": "İndir",
 	"Download": "İndir",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "Topluluk Paylaşımını Etkinleştir",
 	"Enable Community Sharing": "Topluluk Paylaşımını Etkinleştir",
 	"Enable New Sign Ups": "Yeni Kayıtları Etkinleştir",
 	"Enable New Sign Ups": "Yeni Kayıtları Etkinleştir",
 	"Enable Web Search": "Web Aramasını Etkinleştir",
 	"Enable Web Search": "Web Aramasını Etkinleştir",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "CSV dosyanızın şu sırayla 4 sütun içerdiğinden emin olun: İsim, E-posta, Şifre, Rol.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "CSV dosyanızın şu sırayla 4 sütun içerdiğinden emin olun: İsim, E-posta, Şifre, Rol.",
 	"Enter {{role}} message here": "Buraya {{role}} mesajını girin",
 	"Enter {{role}} message here": "Buraya {{role}} mesajını girin",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "Serply API Anahtarını Girin",
 	"Enter Serply API Key": "Serply API Anahtarını Girin",
 	"Enter Serpstack API Key": "Serpstack API Anahtarını Girin",
 	"Enter Serpstack API Key": "Serpstack API Anahtarını Girin",
 	"Enter stop sequence": "Durdurma dizisini girin",
 	"Enter stop sequence": "Durdurma dizisini girin",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "Tavily API Anahtarını Girin",
 	"Enter Tavily API Key": "Tavily API Anahtarını Girin",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "Top K'yı girin",
 	"Enter Top K": "Top K'yı girin",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "URL'yi Girin (e.g. http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "URL'yi Girin (e.g. http://localhost:11434)",
 	"Enter Your Email": "E-postanızı Girin",
 	"Enter Your Email": "E-postanızı Girin",
 	"Enter Your Full Name": "Tam Adınızı Girin",
 	"Enter Your Full Name": "Tam Adınızı Girin",
+	"Enter your message": "",
 	"Enter Your Password": "Parolanızı Girin",
 	"Enter Your Password": "Parolanızı Girin",
 	"Enter Your Role": "Rolünüzü Girin",
 	"Enter Your Role": "Rolünüzü Girin",
 	"Error": "Hata",
 	"Error": "Hata",
@@ -266,6 +274,7 @@
 	"File": "Dosya",
 	"File": "Dosya",
 	"File Mode": "Dosya Modu",
 	"File Mode": "Dosya Modu",
 	"File not found.": "Dosya bulunamadı.",
 	"File not found.": "Dosya bulunamadı.",
+	"Files": "",
 	"Filter is now globally disabled": "Filtre artık global olarak devre dışı",
 	"Filter is now globally disabled": "Filtre artık global olarak devre dışı",
 	"Filter is now globally enabled": "Filtre artık global olarak devrede",
 	"Filter is now globally enabled": "Filtre artık global olarak devrede",
 	"Filters": "Filtreler",
 	"Filters": "Filtreler",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "Frekans Cezası",
 	"Frequency Penalty": "Frekans Cezası",
 	"Function created successfully": "Fonksiyon başarıyla oluşturuldu",
 	"Function created successfully": "Fonksiyon başarıyla oluşturuldu",
 	"Function deleted successfully": "Fonksiyon başarıyla silindi",
 	"Function deleted successfully": "Fonksiyon başarıyla silindi",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "Fonksiyon başarıyla güncellendi",
 	"Function updated successfully": "Fonksiyon başarıyla güncellendi",
 	"Functions": "Fonksiyonlar",
 	"Functions": "Fonksiyonlar",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "Fonksiyonlar başarıyla içe aktarıldı",
 	"Functions imported successfully": "Fonksiyonlar başarıyla içe aktarıldı",
 	"General": "Genel",
 	"General": "Genel",
 	"General Settings": "Genel Ayarlar",
 	"General Settings": "Genel Ayarlar",
 	"Generate Image": "Görsel Üret",
 	"Generate Image": "Görsel Üret",
 	"Generating search query": "Arama sorgusu oluşturma",
 	"Generating search query": "Arama sorgusu oluşturma",
 	"Generation Info": "Üretim Bilgisi",
 	"Generation Info": "Üretim Bilgisi",
+	"Get up and running with": "",
 	"Global": "Global",
 	"Global": "Global",
 	"Good Response": "İyi Yanıt",
 	"Good Response": "İyi Yanıt",
 	"Google PSE API Key": "Google PSE API Anahtarı",
 	"Google PSE API Key": "Google PSE API Anahtarı",
@@ -298,6 +315,7 @@
 	"Hide Model": "Modeli Gizle",
 	"Hide Model": "Modeli Gizle",
 	"How can I help you today?": "Bugün size nasıl yardımcı olabilirim?",
 	"How can I help you today?": "Bugün size nasıl yardımcı olabilirim?",
 	"Hybrid Search": "Karma Arama",
 	"Hybrid Search": "Karma Arama",
+	"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.": "",
 	"Image Generation (Experimental)": "Görüntü Oluşturma (Deneysel)",
 	"Image Generation (Experimental)": "Görüntü Oluşturma (Deneysel)",
 	"Image Generation Engine": "Görüntü Oluşturma Motoru",
 	"Image Generation Engine": "Görüntü Oluşturma Motoru",
 	"Image Settings": "Görüntü Ayarları",
 	"Image Settings": "Görüntü Ayarları",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "Klavye kısayolları",
 	"Keyboard shortcuts": "Klavye kısayolları",
 	"Knowledge": "Bilgi",
 	"Knowledge": "Bilgi",
 	"Language": "Dil",
 	"Language": "Dil",
+	"large language models, locally.": "",
 	"Last Active": "Son Aktivite",
 	"Last Active": "Son Aktivite",
 	"Last Modified": "Son Düzenleme",
 	"Last Modified": "Son Düzenleme",
 	"Light": "Açık",
 	"Light": "Açık",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "Pipeline Valvleri",
 	"Pipelines Valves": "Pipeline Valvleri",
 	"Plain text (.txt)": "Düz metin (.txt)",
 	"Plain text (.txt)": "Düz metin (.txt)",
 	"Playground": "Oyun Alanı",
 	"Playground": "Oyun Alanı",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "Olumlu yaklaşım",
 	"Positive attitude": "Olumlu yaklaşım",
 	"Previous 30 days": "Önceki 30 gün",
 	"Previous 30 days": "Önceki 30 gün",
 	"Previous 7 days": "Önceki 7 gün",
 	"Previous 7 days": "Önceki 7 gün",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "Çalışıyor",
 	"Running": "Çalışıyor",
 	"Save": "Kaydet",
 	"Save": "Kaydet",
 	"Save & Create": "Kaydet ve Oluştur",
 	"Save & Create": "Kaydet ve Oluştur",
@@ -558,6 +579,8 @@
 	"Success": "Başarılı",
 	"Success": "Başarılı",
 	"Successfully updated.": "Başarıyla güncellendi.",
 	"Successfully updated.": "Başarıyla güncellendi.",
 	"Suggested": "Önerilen",
 	"Suggested": "Önerilen",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "Sistem",
 	"System": "Sistem",
 	"System Prompt": "Sistem Promptu",
 	"System Prompt": "Sistem Promptu",
 	"Tags": "Etiketler",
 	"Tags": "Etiketler",
@@ -570,6 +593,7 @@
 	"Text-to-Speech Engine": "Metinden Sese Motoru",
 	"Text-to-Speech Engine": "Metinden Sese Motoru",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Geri bildiriminiz için teşekkürler!",
 	"Thanks for your feedback!": "Geri bildiriminiz için teşekkürler!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Puan 0.0 (%0) ile 1.0 (%100) arasında bir değer olmalıdır.",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Puan 0.0 (%0) ile 1.0 (%100) arasında bir değer olmalıdır.",
 	"Theme": "Tema",
 	"Theme": "Tema",
 	"Thinking...": "Düşünüyor...",
 	"Thinking...": "Düşünüyor...",
@@ -603,7 +627,13 @@
 	"Tool deleted successfully": "Araç başarıyla silindi",
 	"Tool deleted successfully": "Araç başarıyla silindi",
 	"Tool imported successfully": "Araç başarıyla içe aktarıldı",
 	"Tool imported successfully": "Araç başarıyla içe aktarıldı",
 	"Tool updated successfully": "Araç başarıyla güncellendi",
 	"Tool updated successfully": "Araç başarıyla güncellendi",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "Araçlar",
 	"Tools": "Araçlar",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Trouble accessing Ollama?": "Ollama'ya erişmede sorun mu yaşıyorsunuz?",
 	"Trouble accessing Ollama?": "Ollama'ya erişmede sorun mu yaşıyorsunuz?",
@@ -645,6 +675,7 @@
 	"Version": "Sürüm",
 	"Version": "Sürüm",
 	"Voice": "Ses",
 	"Voice": "Ses",
 	"Warning": "Uyarı",
 	"Warning": "Uyarı",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Uyarı: Gömme modelinizi günceller veya değiştirirseniz, tüm belgeleri yeniden içe aktarmanız gerekecektir.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Uyarı: Gömme modelinizi günceller veya değiştirirseniz, tüm belgeleri yeniden içe aktarmanız gerekecektir.",
 	"Web": "Web",
 	"Web": "Web",
 	"Web API": "Web API",
 	"Web API": "Web API",
@@ -671,6 +702,7 @@
 	"You're a helpful assistant.": "Sen yardımsever bir asistansın.",
 	"You're a helpful assistant.": "Sen yardımsever bir asistansın.",
 	"You're now logged in.": "Şimdi giriş yaptınız.",
 	"You're now logged in.": "Şimdi giriş yaptınız.",
 	"Your account status is currently pending activation.": "Hesap durumunuz şu anda etkinleştirilmeyi bekliyor.",
 	"Your account status is currently pending activation.": "Hesap durumunuz şu anda etkinleştirilmeyi bekliyor.",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "Youtube",
 	"Youtube": "Youtube",
 	"Youtube Loader Settings": "Youtube Yükleyici Ayarları"
 	"Youtube Loader Settings": "Youtube Yükleyici Ayarları"
 }
 }

+ 46 - 14
src/lib/i18n/locales/uk-UA/translation.json

@@ -88,7 +88,7 @@
 	"Chat": "Чат",
 	"Chat": "Чат",
 	"Chat Background Image": "Фонове зображення чату",
 	"Chat Background Image": "Фонове зображення чату",
 	"Chat Bubble UI": "Чат у вигляді бульбашок",
 	"Chat Bubble UI": "Чат у вигляді бульбашок",
-	"Chat Controls": "",
+	"Chat Controls": "Керування чатом",
 	"Chat direction": "Напрям чату",
 	"Chat direction": "Напрям чату",
 	"Chat History": "Історія чату",
 	"Chat History": "Історія чату",
 	"Chat History is off for this browser.": "Історія чату вимкнена для цього браузера.",
 	"Chat History is off for this browser.": "Історія чату вимкнена для цього браузера.",
@@ -127,11 +127,11 @@
 	"Connections": "З'єднання",
 	"Connections": "З'єднання",
 	"Contact Admin for WebUI Access": "Зверніться до адміна для отримання доступу до WebUI",
 	"Contact Admin for WebUI Access": "Зверніться до адміна для отримання доступу до WebUI",
 	"Content": "Зміст",
 	"Content": "Зміст",
-	"Content Extraction": "",
+	"Content Extraction": "Вилучення вмісту",
 	"Context Length": "Довжина контексту",
 	"Context Length": "Довжина контексту",
 	"Continue Response": "Продовжити відповідь",
 	"Continue Response": "Продовжити відповідь",
 	"Continue with {{provider}}": "Продовжити з {{provider}}",
 	"Continue with {{provider}}": "Продовжити з {{provider}}",
-	"Controls": "",
+	"Controls": "Керування",
 	"Copied shared chat URL to clipboard!": "Скопійовано URL-адресу спільного чату в буфер обміну!",
 	"Copied shared chat URL to clipboard!": "Скопійовано URL-адресу спільного чату в буфер обміну!",
 	"Copy": "Копіювати",
 	"Copy": "Копіювати",
 	"Copy last code block": "Копіювати останній блок коду",
 	"Copy last code block": "Копіювати останній блок коду",
@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "Видалено {{name}}",
 	"Deleted {{name}}": "Видалено {{name}}",
 	"Description": "Опис",
 	"Description": "Опис",
 	"Didn't fully follow instructions": "Не повністю дотримувалися інструкцій",
 	"Didn't fully follow instructions": "Не повністю дотримувалися інструкцій",
+	"Disabled": "Вимкнено",
 	"Discover a function": "Знайдіть функцію",
 	"Discover a function": "Знайдіть функцію",
 	"Discover a model": "Знайдіть модель",
 	"Discover a model": "Знайдіть модель",
 	"Discover a prompt": "Знайдіть промт",
 	"Discover a prompt": "Знайдіть промт",
@@ -188,6 +189,8 @@
 	"Dismissible": "Неприйнятно",
 	"Dismissible": "Неприйнятно",
 	"Display Emoji in Call": "Відображати емодзі у викликах",
 	"Display Emoji in Call": "Відображати емодзі у викликах",
 	"Display the username instead of You in the Chat": "Показувати ім'я користувача замість 'Ви' в чаті",
 	"Display the username instead of You in the Chat": "Показувати ім'я користувача замість 'Ви' в чаті",
+	"Do not install functions from sources you do not fully trust.": "Не встановлюйте функції з джерел, яким ви не повністю довіряєте.",
+	"Do not install tools from sources you do not fully trust.": "Не встановлюйте інструменти з джерел, яким ви не повністю довіряєте.",
 	"Document": "Документ",
 	"Document": "Документ",
 	"Document Settings": "Налаштування документа",
 	"Document Settings": "Налаштування документа",
 	"Documentation": "Документація",
 	"Documentation": "Документація",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "не встановлює жодних зовнішніх з'єднань, і ваші дані залишаються в безпеці на вашому локальному сервері.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "не встановлює жодних зовнішніх з'єднань, і ваші дані залишаються в безпеці на вашому локальному сервері.",
 	"Don't Allow": "Не дозволяти",
 	"Don't Allow": "Не дозволяти",
 	"Don't have an account?": "Немає облікового запису?",
 	"Don't have an account?": "Немає облікового запису?",
+	"don't install random functions from sources you don't trust.": "не встановлюйте випадкові функції з джерел, яким ви не довіряєте.",
+	"don't install random tools from sources you don't trust.": "не встановлюйте випадкові інструменти з джерел, яким ви не довіряєте.",
 	"Don't like the style": "Не подобається стиль",
 	"Don't like the style": "Не подобається стиль",
 	"Done": "Готово",
 	"Done": "Готово",
 	"Download": "Завантажити",
 	"Download": "Завантажити",
@@ -215,7 +220,8 @@
 	"Enable Community Sharing": "Увімкнути спільний доступ",
 	"Enable Community Sharing": "Увімкнути спільний доступ",
 	"Enable New Sign Ups": "Дозволити нові реєстрації",
 	"Enable New Sign Ups": "Дозволити нові реєстрації",
 	"Enable Web Search": "Увімкнути веб-пошук",
 	"Enable Web Search": "Увімкнути веб-пошук",
-	"Engine": "",
+	"Enabled": "Увімкнено",
+	"Engine": "Рушій",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Переконайтеся, що ваш CSV-файл містить 4 колонки в такому порядку: Ім'я, Email, Пароль, Роль.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Переконайтеся, що ваш CSV-файл містить 4 колонки в такому порядку: Ім'я, Email, Пароль, Роль.",
 	"Enter {{role}} message here": "Введіть повідомлення {{role}} тут",
 	"Enter {{role}} message here": "Введіть повідомлення {{role}} тут",
 	"Enter a detail about yourself for your LLMs to recall": "Введіть відомості про себе для запам'ятовування вашими LLM.",
 	"Enter a detail about yourself for your LLMs to recall": "Введіть відомості про себе для запам'ятовування вашими LLM.",
@@ -236,13 +242,15 @@
 	"Enter Serply API Key": "Введіть ключ API Serply",
 	"Enter Serply API Key": "Введіть ключ API Serply",
 	"Enter Serpstack API Key": "Введіть ключ API Serpstack",
 	"Enter Serpstack API Key": "Введіть ключ API Serpstack",
 	"Enter stop sequence": "Введіть символ зупинки",
 	"Enter stop sequence": "Введіть символ зупинки",
+	"Enter system prompt": "Введіть системний промт",
 	"Enter Tavily API Key": "Введіть ключ API Tavily",
 	"Enter Tavily API Key": "Введіть ключ API Tavily",
-	"Enter Tika Server URL": "",
+	"Enter Tika Server URL": "Введіть URL-адресу сервера Tika ",
 	"Enter Top K": "Введіть Top K",
 	"Enter Top K": "Введіть Top K",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "Введіть URL-адресу (напр., http://127.0.0.1:7860/)",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "Введіть URL-адресу (напр., http://127.0.0.1:7860/)",
 	"Enter URL (e.g. http://localhost:11434)": "Введіть URL-адресу (напр., http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "Введіть URL-адресу (напр., http://localhost:11434)",
 	"Enter Your Email": "Введіть вашу електронну пошту",
 	"Enter Your Email": "Введіть вашу електронну пошту",
 	"Enter Your Full Name": "Введіть ваше ім'я",
 	"Enter Your Full Name": "Введіть ваше ім'я",
+	"Enter your message": "Введіть повідомлення ",
 	"Enter Your Password": "Введіть ваш пароль",
 	"Enter Your Password": "Введіть ваш пароль",
 	"Enter Your Role": "Введіть вашу роль",
 	"Enter Your Role": "Введіть вашу роль",
 	"Error": "Помилка",
 	"Error": "Помилка",
@@ -266,8 +274,9 @@
 	"File": "Файл",
 	"File": "Файл",
 	"File Mode": "Файловий режим",
 	"File Mode": "Файловий режим",
 	"File not found.": "Файл не знайдено.",
 	"File not found.": "Файл не знайдено.",
-	"Filter is now globally disabled": "",
-	"Filter is now globally enabled": "",
+	"Files": "",
+	"Filter is now globally disabled": "Фільтр глобально вимкнено",
+	"Filter is now globally enabled": "Фільтр увімкнено глобально",
 	"Filters": "Фільтри",
 	"Filters": "Фільтри",
 	"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Виявлено підробку відбитків: Неможливо використовувати ініціали як аватар. Повернення до зображення профілю за замовчуванням.",
 	"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Виявлено підробку відбитків: Неможливо використовувати ініціали як аватар. Повернення до зображення профілю за замовчуванням.",
 	"Fluidly stream large external response chunks": "Плавно передавати великі фрагменти зовнішніх відповідей",
 	"Fluidly stream large external response chunks": "Плавно передавати великі фрагменти зовнішніх відповідей",
@@ -278,15 +287,23 @@
 	"Frequency Penalty": "Штраф за частоту",
 	"Frequency Penalty": "Штраф за частоту",
 	"Function created successfully": "Функцію успішно створено",
 	"Function created successfully": "Функцію успішно створено",
 	"Function deleted successfully": "Функцію успішно видалено",
 	"Function deleted successfully": "Функцію успішно видалено",
+	"Function Description (e.g. A filter to remove profanity from text)": "Опис функції (напр., фільтр для видалення ненормативної лексики з тексту)",
+	"Function ID (e.g. my_filter)": "Ідентифікатор функції (напр., my_filter)",
+	"Function is now globally disabled": "Функція зараз глобально вимкнена",
+	"Function is now globally enabled": "Функція зараз глобально увімкнена ",
+	"Function Name (e.g. My Filter)": "Назва функції (напр., My Filter)",
 	"Function updated successfully": "Функцію успішно оновлено",
 	"Function updated successfully": "Функцію успішно оновлено",
 	"Functions": "Функції",
 	"Functions": "Функції",
+	"Functions allow arbitrary code execution": "Функції дозволяють виконання довільного коду",
+	"Functions allow arbitrary code execution.": "Функції дозволяють виконання довільного коду.",
 	"Functions imported successfully": "Функції успішно імпортовано",
 	"Functions imported successfully": "Функції успішно імпортовано",
 	"General": "Загальні",
 	"General": "Загальні",
 	"General Settings": "Загальні налаштування",
 	"General Settings": "Загальні налаштування",
 	"Generate Image": "Створити зображення",
 	"Generate Image": "Створити зображення",
 	"Generating search query": "Сформувати пошуковий запит",
 	"Generating search query": "Сформувати пошуковий запит",
 	"Generation Info": "Інформація про генерацію",
 	"Generation Info": "Інформація про генерацію",
-	"Global": "",
+	"Get up and running with": "Почніть працювати з",
+	"Global": "Глоб.",
 	"Good Response": "Гарна відповідь",
 	"Good Response": "Гарна відповідь",
 	"Google PSE API Key": "Ключ API Google PSE",
 	"Google PSE API Key": "Ключ API Google PSE",
 	"Google PSE Engine Id": "Id рушія Google PSE",
 	"Google PSE Engine Id": "Id рушія Google PSE",
@@ -298,6 +315,7 @@
 	"Hide Model": "Приховати модель",
 	"Hide Model": "Приховати модель",
 	"How can I help you today?": "Чим я можу допомогти вам сьогодні?",
 	"How can I help you today?": "Чим я можу допомогти вам сьогодні?",
 	"Hybrid Search": "Гібридний пошук",
 	"Hybrid Search": "Гібридний пошук",
+	"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Я підтверджую, що прочитав і розумію наслідки своїх дій. Я усвідомлюю ризики, пов'язані з виконанням довільного коду, і перевірив надійність джерела.",
 	"Image Generation (Experimental)": "Генерування зображень (експериментально)",
 	"Image Generation (Experimental)": "Генерування зображень (експериментально)",
 	"Image Generation Engine": "Механізм генерації зображень",
 	"Image Generation Engine": "Механізм генерації зображень",
 	"Image Settings": "Налаштування зображення",
 	"Image Settings": "Налаштування зображення",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "Клавіатурні скорочення",
 	"Keyboard shortcuts": "Клавіатурні скорочення",
 	"Knowledge": "Знання",
 	"Knowledge": "Знання",
 	"Language": "Мова",
 	"Language": "Мова",
+	"large language models, locally.": "великими мовними моделями, локально.",
 	"Last Active": "Остання активність",
 	"Last Active": "Остання активність",
 	"Last Modified": "Востаннє змінено",
 	"Last Modified": "Востаннє змінено",
 	"Light": "Світла",
 	"Light": "Світла",
@@ -413,7 +432,7 @@
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Упс! Ви використовуєте непідтримуваний метод (тільки для фронтенду). Будь ласка, обслуговуйте WebUI з бекенду.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Упс! Ви використовуєте непідтримуваний метод (тільки для фронтенду). Будь ласка, обслуговуйте WebUI з бекенду.",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "Відкрити новий чат",
 	"Open new chat": "Відкрити новий чат",
-	"Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "",
+	"Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Open WebUI версія (v{{OPEN_WEBUI_VERSION}}) нижча за необхідну версію (v{{REQUIRED_VERSION}})",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",
 	"OpenAI API": "OpenAI API",
 	"OpenAI API": "OpenAI API",
 	"OpenAI API Config": "Конфігурація OpenAI API",
 	"OpenAI API Config": "Конфігурація OpenAI API",
@@ -429,8 +448,8 @@
 	"Permission denied when accessing microphone": "Відмовлено у доступі до мікрофона",
 	"Permission denied when accessing microphone": "Відмовлено у доступі до мікрофона",
 	"Permission denied when accessing microphone: {{error}}": "Доступ до мікрофона заборонено: {{error}}",
 	"Permission denied when accessing microphone: {{error}}": "Доступ до мікрофона заборонено: {{error}}",
 	"Personalization": "Персоналізація",
 	"Personalization": "Персоналізація",
-	"Pin": "",
-	"Pinned": "",
+	"Pin": "Зачепити",
+	"Pinned": "Зачеплено",
 	"Pipeline deleted successfully": "Конвеєр успішно видалено",
 	"Pipeline deleted successfully": "Конвеєр успішно видалено",
 	"Pipeline downloaded successfully": "Конвеєр успішно завантажено",
 	"Pipeline downloaded successfully": "Конвеєр успішно завантажено",
 	"Pipelines": "Конвеєри",
 	"Pipelines": "Конвеєри",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "Клапани конвеєрів",
 	"Pipelines Valves": "Клапани конвеєрів",
 	"Plain text (.txt)": "Простий текст (.txt)",
 	"Plain text (.txt)": "Простий текст (.txt)",
 	"Playground": "Майданчик",
 	"Playground": "Майданчик",
+	"Please carefully review the following warnings:": "Будь ласка, уважно ознайомтеся з наступними попередженнями:",
 	"Positive attitude": "Позитивне ставлення",
 	"Positive attitude": "Позитивне ставлення",
 	"Previous 30 days": "Попередні 30 днів",
 	"Previous 30 days": "Попередні 30 днів",
 	"Previous 7 days": "Попередні 7 днів",
 	"Previous 7 days": "Попередні 7 днів",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "Запустіть Llama 2, Code Llama та інші моделі. Налаштуйте та створіть власну.",
 	"Running": "Виконується",
 	"Running": "Виконується",
 	"Save": "Зберегти",
 	"Save": "Зберегти",
 	"Save & Create": "Зберегти та створити",
 	"Save & Create": "Зберегти та створити",
@@ -560,6 +581,8 @@
 	"Success": "Успіх",
 	"Success": "Успіх",
 	"Successfully updated.": "Успішно оновлено.",
 	"Successfully updated.": "Успішно оновлено.",
 	"Suggested": "Запропоновано",
 	"Suggested": "Запропоновано",
+	"Support": "Підтримати",
+	"Support this plugin:": "Підтримайте цей плагін:",
 	"System": "Система",
 	"System": "Система",
 	"System Prompt": "Системний промт",
 	"System Prompt": "Системний промт",
 	"Tags": "Теги",
 	"Tags": "Теги",
@@ -572,6 +595,7 @@
 	"Text-to-Speech Engine": "Система синтезу мови",
 	"Text-to-Speech Engine": "Система синтезу мови",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Дякуємо за ваш відгук!",
 	"Thanks for your feedback!": "Дякуємо за ваш відгук!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "Розробники цього плагіна - пристрасні волонтери зі спільноти. Якщо ви вважаєте цей плагін корисним, будь ласка, зробіть свій внесок у його розвиток.",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Оцінка повинна бути в діапазоні від 0.0 (0%) до 1.0 (100%).",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Оцінка повинна бути в діапазоні від 0.0 (0%) до 1.0 (100%).",
 	"Theme": "Тема",
 	"Theme": "Тема",
 	"Thinking...": "Думаю...",
 	"Thinking...": "Думаю...",
@@ -581,8 +605,8 @@
 	"This setting does not sync across browsers or devices.": "Це налаштування не синхронізується між браузерами або пристроями.",
 	"This setting does not sync across browsers or devices.": "Це налаштування не синхронізується між браузерами або пристроями.",
 	"This will delete": "Це призведе до видалення",
 	"This will delete": "Це призведе до видалення",
 	"Thorough explanation": "Детальне пояснення",
 	"Thorough explanation": "Детальне пояснення",
-	"Tika": "",
-	"Tika Server URL required.": "",
+	"Tika": "Tika",
+	"Tika Server URL required.": "Потрібна URL-адреса сервера Tika.",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Порада: Оновіть кілька слотів змінних послідовно, натискаючи клавішу табуляції у вікні чату після кожної заміни.",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Порада: Оновіть кілька слотів змінних послідовно, натискаючи клавішу табуляції у вікні чату після кожної заміни.",
 	"Title": "Заголовок",
 	"Title": "Заголовок",
 	"Title (e.g. Tell me a fun fact)": "Заголовок (напр., Розкажіть мені цікавий факт)",
 	"Title (e.g. Tell me a fun fact)": "Заголовок (напр., Розкажіть мені цікавий факт)",
@@ -605,7 +629,13 @@
 	"Tool deleted successfully": "Інструмент успішно видалено",
 	"Tool deleted successfully": "Інструмент успішно видалено",
 	"Tool imported successfully": "Інструмент успішно імпортовано",
 	"Tool imported successfully": "Інструмент успішно імпортовано",
 	"Tool updated successfully": "Інструмент успішно оновлено",
 	"Tool updated successfully": "Інструмент успішно оновлено",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "Опис інструментарію (напр., набір інструментів для виконання різних операцій)",
+	"Toolkit ID (e.g. my_toolkit)": "Ідентифікатор набору інструментів (напр., my_toolkit)",
+	"Toolkit Name (e.g. My ToolKit)": "Назва інструментарію (напр., My ToolKit)",
 	"Tools": "Інструменти",
 	"Tools": "Інструменти",
+	"Tools are a function calling system with arbitrary code execution": "Інструменти - це система виклику функцій з довільним виконанням коду",
+	"Tools have a function calling system that allows arbitrary code execution": "Інструменти мають систему виклику функцій, яка дозволяє виконання довільного коду",
+	"Tools have a function calling system that allows arbitrary code execution.": "Інструменти мають систему виклику функцій, яка дозволяє виконання довільного коду.",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Trouble accessing Ollama?": "Проблеми з доступом до Ollama?",
 	"Trouble accessing Ollama?": "Проблеми з доступом до Ollama?",
@@ -617,7 +647,7 @@
 	"Uh-oh! There was an issue connecting to {{provider}}.": "Ой! Виникла проблема при підключенні до {{provider}}.",
 	"Uh-oh! There was an issue connecting to {{provider}}.": "Ой! Виникла проблема при підключенні до {{provider}}.",
 	"UI": "Користувацький інтерфейс",
 	"UI": "Користувацький інтерфейс",
 	"Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "Невідомий тип файлу '{{file_type}}'. Завантаження файлу все одно продовжується.",
 	"Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "Невідомий тип файлу '{{file_type}}'. Завантаження файлу все одно продовжується.",
-	"Unpin": "",
+	"Unpin": "Відчепити",
 	"Update": "Оновлення",
 	"Update": "Оновлення",
 	"Update and Copy Link": "Оновлення та копіювання посилання",
 	"Update and Copy Link": "Оновлення та копіювання посилання",
 	"Update password": "Оновити пароль",
 	"Update password": "Оновити пароль",
@@ -647,6 +677,7 @@
 	"Version": "Версія",
 	"Version": "Версія",
 	"Voice": "Голос",
 	"Voice": "Голос",
 	"Warning": "Увага!",
 	"Warning": "Увага!",
+	"Warning:": "Увага:",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Попередження: Якщо ви оновлюєте або змінюєте модель вбудовування, вам потрібно буде повторно імпортувати всі документи.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Попередження: Якщо ви оновлюєте або змінюєте модель вбудовування, вам потрібно буде повторно імпортувати всі документи.",
 	"Web": "Веб",
 	"Web": "Веб",
 	"Web API": "Веб-API",
 	"Web API": "Веб-API",
@@ -673,6 +704,7 @@
 	"You're a helpful assistant.": "Ви корисний асистент.",
 	"You're a helpful assistant.": "Ви корисний асистент.",
 	"You're now logged in.": "Ви увійшли в систему.",
 	"You're now logged in.": "Ви увійшли в систему.",
 	"Your account status is currently pending activation.": "Статус вашого облікового запису наразі очікує на активацію.",
 	"Your account status is currently pending activation.": "Статус вашого облікового запису наразі очікує на активацію.",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Весь ваш внесок піде безпосередньо розробнику плагіна; Open WebUI не бере жодних відсотків. Однак, обрана платформа фінансування може мати свої власні збори.",
 	"Youtube": "Youtube",
 	"Youtube": "Youtube",
 	"Youtube Loader Settings": "Налаштування завантажувача Youtube"
 	"Youtube Loader Settings": "Налаштування завантажувача Youtube"
 }
 }

+ 32 - 0
src/lib/i18n/locales/vi-VN/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "Đã xóa {{name}}",
 	"Deleted {{name}}": "Đã xóa {{name}}",
 	"Description": "Mô tả",
 	"Description": "Mô tả",
 	"Didn't fully follow instructions": "Không tuân theo chỉ dẫn một cách đầy đủ",
 	"Didn't fully follow instructions": "Không tuân theo chỉ dẫn một cách đầy đủ",
+	"Disabled": "",
 	"Discover a function": "Khám phá function",
 	"Discover a function": "Khám phá function",
 	"Discover a model": "Khám phá model",
 	"Discover a model": "Khám phá model",
 	"Discover a prompt": "Khám phá thêm prompt mới",
 	"Discover a prompt": "Khám phá thêm prompt mới",
@@ -188,6 +189,8 @@
 	"Dismissible": "Có thể loại bỏ",
 	"Dismissible": "Có thể loại bỏ",
 	"Display Emoji in Call": "Hiển thị Emoji trong cuộc gọi",
 	"Display Emoji in Call": "Hiển thị Emoji trong cuộc gọi",
 	"Display the username instead of You in the Chat": "Hiển thị tên người sử dụng thay vì 'Bạn' trong nội dung chat",
 	"Display the username instead of You in the Chat": "Hiển thị tên người sử dụng thay vì 'Bạn' trong nội dung chat",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "Tài liệu",
 	"Document": "Tài liệu",
 	"Document Settings": "Cấu hình kho tài liệu",
 	"Document Settings": "Cấu hình kho tài liệu",
 	"Documentation": "Tài liệu",
 	"Documentation": "Tài liệu",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "không thực hiện bất kỳ kết nối ngoài nào, và dữ liệu của bạn vẫn được lưu trữ an toàn trên máy chủ lưu trữ cục bộ của bạn.",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "không thực hiện bất kỳ kết nối ngoài nào, và dữ liệu của bạn vẫn được lưu trữ an toàn trên máy chủ lưu trữ cục bộ của bạn.",
 	"Don't Allow": "Không Cho phép",
 	"Don't Allow": "Không Cho phép",
 	"Don't have an account?": "Không có tài khoản?",
 	"Don't have an account?": "Không có tài khoản?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "Không thích phong cách trả lời",
 	"Don't like the style": "Không thích phong cách trả lời",
 	"Done": "Hoàn thành",
 	"Done": "Hoàn thành",
 	"Download": "Tải về",
 	"Download": "Tải về",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "Kích hoạt Chia sẻ Cộng đồng",
 	"Enable Community Sharing": "Kích hoạt Chia sẻ Cộng đồng",
 	"Enable New Sign Ups": "Cho phép đăng ký mới",
 	"Enable New Sign Ups": "Cho phép đăng ký mới",
 	"Enable Web Search": "Kích hoạt tìm kiếm Web",
 	"Enable Web Search": "Kích hoạt tìm kiếm Web",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Đảm bảo tệp CSV của bạn bao gồm 4 cột theo thứ tự sau: Name, Email, Password, Role.",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Đảm bảo tệp CSV của bạn bao gồm 4 cột theo thứ tự sau: Name, Email, Password, Role.",
 	"Enter {{role}} message here": "Nhập yêu cầu của {{role}} ở đây",
 	"Enter {{role}} message here": "Nhập yêu cầu của {{role}} ở đây",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "Nhập Serply API Key",
 	"Enter Serply API Key": "Nhập Serply API Key",
 	"Enter Serpstack API Key": "Nhập Serpstack API Key",
 	"Enter Serpstack API Key": "Nhập Serpstack API Key",
 	"Enter stop sequence": "Nhập stop sequence",
 	"Enter stop sequence": "Nhập stop sequence",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "Nhập Tavily API Key",
 	"Enter Tavily API Key": "Nhập Tavily API Key",
 	"Enter Tika Server URL": "Nhập URL cho  Tika Server",
 	"Enter Tika Server URL": "Nhập URL cho  Tika Server",
 	"Enter Top K": "Nhập Top K",
 	"Enter Top K": "Nhập Top K",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "Nhập URL (vd: http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "Nhập URL (vd: http://localhost:11434)",
 	"Enter Your Email": "Nhập Email của bạn",
 	"Enter Your Email": "Nhập Email của bạn",
 	"Enter Your Full Name": "Nhập Họ và Tên của bạn",
 	"Enter Your Full Name": "Nhập Họ và Tên của bạn",
+	"Enter your message": "",
 	"Enter Your Password": "Nhập Mật khẩu của bạn",
 	"Enter Your Password": "Nhập Mật khẩu của bạn",
 	"Enter Your Role": "Nhập vai trò của bạn",
 	"Enter Your Role": "Nhập vai trò của bạn",
 	"Error": "Lỗi",
 	"Error": "Lỗi",
@@ -266,6 +274,7 @@
 	"File": "Tệp",
 	"File": "Tệp",
 	"File Mode": "Chế độ Tệp văn bản",
 	"File Mode": "Chế độ Tệp văn bản",
 	"File not found.": "Không tìm thấy tệp.",
 	"File not found.": "Không tìm thấy tệp.",
+	"Files": "",
 	"Filter is now globally disabled": "Bộ lọc hiện đã bị vô hiệu hóa trên toàn hệ thống",
 	"Filter is now globally disabled": "Bộ lọc hiện đã bị vô hiệu hóa trên toàn hệ thống",
 	"Filter is now globally enabled": "Bộ lọc hiện được kích hoạt trên toàn hệ thống",
 	"Filter is now globally enabled": "Bộ lọc hiện được kích hoạt trên toàn hệ thống",
 	"Filters": "Lọc",
 	"Filters": "Lọc",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "Hình phạt tần số",
 	"Frequency Penalty": "Hình phạt tần số",
 	"Function created successfully": "Function được tạo thành công",
 	"Function created successfully": "Function được tạo thành công",
 	"Function deleted successfully": "Function đã bị xóa",
 	"Function deleted successfully": "Function đã bị xóa",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "Function được cập nhật thành công",
 	"Function updated successfully": "Function được cập nhật thành công",
 	"Functions": "",
 	"Functions": "",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "Các function đã được nạp thành công",
 	"Functions imported successfully": "Các function đã được nạp thành công",
 	"General": "Cài đặt chung",
 	"General": "Cài đặt chung",
 	"General Settings": "Cấu hình chung",
 	"General Settings": "Cấu hình chung",
 	"Generate Image": "Sinh ảnh",
 	"Generate Image": "Sinh ảnh",
 	"Generating search query": "Tạo truy vấn tìm kiếm",
 	"Generating search query": "Tạo truy vấn tìm kiếm",
 	"Generation Info": "Thông tin chung",
 	"Generation Info": "Thông tin chung",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "Trả lời tốt",
 	"Good Response": "Trả lời tốt",
 	"Google PSE API Key": "Khóa API Google PSE",
 	"Google PSE API Key": "Khóa API Google PSE",
@@ -298,6 +315,7 @@
 	"Hide Model": "Ẩn mô hình",
 	"Hide Model": "Ẩn mô hình",
 	"How can I help you today?": "Tôi có thể giúp gì cho bạn hôm nay?",
 	"How can I help you today?": "Tôi có thể giúp gì cho bạn hôm nay?",
 	"Hybrid Search": "Tìm kiếm Hybrid",
 	"Hybrid Search": "Tìm kiếm Hybrid",
+	"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.": "",
 	"Image Generation (Experimental)": "Tạo ảnh (thử nghiệm)",
 	"Image Generation (Experimental)": "Tạo ảnh (thử nghiệm)",
 	"Image Generation Engine": "Công cụ tạo ảnh",
 	"Image Generation Engine": "Công cụ tạo ảnh",
 	"Image Settings": "Cài đặt ảnh",
 	"Image Settings": "Cài đặt ảnh",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "Phím tắt",
 	"Keyboard shortcuts": "Phím tắt",
 	"Knowledge": "Kiến thức",
 	"Knowledge": "Kiến thức",
 	"Language": "Ngôn ngữ",
 	"Language": "Ngôn ngữ",
+	"large language models, locally.": "",
 	"Last Active": "Truy cập gần nhất",
 	"Last Active": "Truy cập gần nhất",
 	"Last Modified": "Lần sửa gần nhất",
 	"Last Modified": "Lần sửa gần nhất",
 	"Light": "Sáng",
 	"Light": "Sáng",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "",
 	"Pipelines Valves": "",
 	"Plain text (.txt)": "Văn bản thô (.txt)",
 	"Plain text (.txt)": "Văn bản thô (.txt)",
 	"Playground": "Thử nghiệm (Playground)",
 	"Playground": "Thử nghiệm (Playground)",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "Thái độ tích cực",
 	"Positive attitude": "Thái độ tích cực",
 	"Previous 30 days": "30 ngày trước",
 	"Previous 30 days": "30 ngày trước",
 	"Previous 7 days": "7 ngày trước",
 	"Previous 7 days": "7 ngày trước",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "Đang chạy",
 	"Running": "Đang chạy",
 	"Save": "Lưu",
 	"Save": "Lưu",
 	"Save & Create": "Lưu & Tạo",
 	"Save & Create": "Lưu & Tạo",
@@ -557,6 +578,8 @@
 	"Success": "Thành công",
 	"Success": "Thành công",
 	"Successfully updated.": "Đã cập nhật thành công.",
 	"Successfully updated.": "Đã cập nhật thành công.",
 	"Suggested": "Gợi ý một số mẫu prompt",
 	"Suggested": "Gợi ý một số mẫu prompt",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "Hệ thống",
 	"System": "Hệ thống",
 	"System Prompt": "Prompt Hệ thống (System Prompt)",
 	"System Prompt": "Prompt Hệ thống (System Prompt)",
 	"Tags": "Thẻ",
 	"Tags": "Thẻ",
@@ -569,6 +592,7 @@
 	"Text-to-Speech Engine": "Công cụ Chuyển Văn bản thành Giọng nói",
 	"Text-to-Speech Engine": "Công cụ Chuyển Văn bản thành Giọng nói",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Cám ơn bạn đã gửi phản hồi!",
 	"Thanks for your feedback!": "Cám ơn bạn đã gửi phản hồi!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Điểm (score) phải có giá trị từ 0,0 (0%) đến 1,0 (100%).",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Điểm (score) phải có giá trị từ 0,0 (0%) đến 1,0 (100%).",
 	"Theme": "Chủ đề",
 	"Theme": "Chủ đề",
 	"Thinking...": "Đang suy luận...",
 	"Thinking...": "Đang suy luận...",
@@ -602,7 +626,13 @@
 	"Tool deleted successfully": "Tool đã bị xóa",
 	"Tool deleted successfully": "Tool đã bị xóa",
 	"Tool imported successfully": "Tool đã được nạp thành công",
 	"Tool imported successfully": "Tool đã được nạp thành công",
 	"Tool updated successfully": "Tool đã được cập nhật thành công",
 	"Tool updated successfully": "Tool đã được cập nhật thành công",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "",
 	"Tools": "",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Trouble accessing Ollama?": "Gặp vấn đề khi truy cập Ollama?",
 	"Trouble accessing Ollama?": "Gặp vấn đề khi truy cập Ollama?",
@@ -644,6 +674,7 @@
 	"Version": "Version",
 	"Version": "Version",
 	"Voice": "Giọng nói",
 	"Voice": "Giọng nói",
 	"Warning": "Cảnh báo",
 	"Warning": "Cảnh báo",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Cảnh báo: Nếu cập nhật hoặc thay đổi embedding model, bạn sẽ cần cập nhật lại tất cả tài liệu.",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Cảnh báo: Nếu cập nhật hoặc thay đổi embedding model, bạn sẽ cần cập nhật lại tất cả tài liệu.",
 	"Web": "Web",
 	"Web": "Web",
 	"Web API": "",
 	"Web API": "",
@@ -670,6 +701,7 @@
 	"You're a helpful assistant.": "Bạn là một trợ lý hữu ích.",
 	"You're a helpful assistant.": "Bạn là một trợ lý hữu ích.",
 	"You're now logged in.": "Bạn đã đăng nhập.",
 	"You're now logged in.": "Bạn đã đăng nhập.",
 	"Your account status is currently pending activation.": "Tài khoản của bạn hiện đang ở trạng thái chờ kích hoạt.",
 	"Your account status is currently pending activation.": "Tài khoản của bạn hiện đang ở trạng thái chờ kích hoạt.",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "Youtube",
 	"Youtube": "Youtube",
 	"Youtube Loader Settings": "Cài đặt Youtube Loader"
 	"Youtube Loader Settings": "Cài đặt Youtube Loader"
 }
 }

+ 35 - 3
src/lib/i18n/locales/zh-CN/translation.json

@@ -88,7 +88,7 @@
 	"Chat": "对话",
 	"Chat": "对话",
 	"Chat Background Image": "对话背景图片",
 	"Chat Background Image": "对话背景图片",
 	"Chat Bubble UI": "气泡样式对话",
 	"Chat Bubble UI": "气泡样式对话",
-	"Chat Controls": "",
+	"Chat Controls": "对话高级设置",
 	"Chat direction": "对话样式方向",
 	"Chat direction": "对话样式方向",
 	"Chat History": "对话历史记录",
 	"Chat History": "对话历史记录",
 	"Chat History is off for this browser.": "此浏览器已关闭对话历史记录功能。",
 	"Chat History is off for this browser.": "此浏览器已关闭对话历史记录功能。",
@@ -131,7 +131,7 @@
 	"Context Length": "上下文长度",
 	"Context Length": "上下文长度",
 	"Continue Response": "继续生成",
 	"Continue Response": "继续生成",
 	"Continue with {{provider}}": "使用 {{provider}} 继续",
 	"Continue with {{provider}}": "使用 {{provider}} 继续",
-	"Controls": "",
+	"Controls": "对话高级设置",
 	"Copied shared chat URL to clipboard!": "已复制此对话分享链接至剪贴板!",
 	"Copied shared chat URL to clipboard!": "已复制此对话分享链接至剪贴板!",
 	"Copy": "复制",
 	"Copy": "复制",
 	"Copy last code block": "复制最后一个代码块中的代码",
 	"Copy last code block": "复制最后一个代码块中的代码",
@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "已删除 {{name}}",
 	"Deleted {{name}}": "已删除 {{name}}",
 	"Description": "描述",
 	"Description": "描述",
 	"Didn't fully follow instructions": "没有完全遵照指示",
 	"Didn't fully follow instructions": "没有完全遵照指示",
+	"Disabled": "",
 	"Discover a function": "发现更多函数",
 	"Discover a function": "发现更多函数",
 	"Discover a model": "发现更多模型",
 	"Discover a model": "发现更多模型",
 	"Discover a prompt": "发现更多提示词",
 	"Discover a prompt": "发现更多提示词",
@@ -188,6 +189,8 @@
 	"Dismissible": "是否可关闭",
 	"Dismissible": "是否可关闭",
 	"Display Emoji in Call": "在通话中显示 Emoji 表情符号",
 	"Display Emoji in Call": "在通话中显示 Emoji 表情符号",
 	"Display the username instead of You in the Chat": "在对话中显示用户名而不是“你”",
 	"Display the username instead of You in the Chat": "在对话中显示用户名而不是“你”",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "文档",
 	"Document": "文档",
 	"Document Settings": "文档设置",
 	"Document Settings": "文档设置",
 	"Documentation": "帮助文档",
 	"Documentation": "帮助文档",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "不会与外部建立任何连接,您的数据会安全地存储在本地托管的服务器上。",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "不会与外部建立任何连接,您的数据会安全地存储在本地托管的服务器上。",
 	"Don't Allow": "不允许",
 	"Don't Allow": "不允许",
 	"Don't have an account?": "没有账号?",
 	"Don't have an account?": "没有账号?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "不喜欢这个文风",
 	"Don't like the style": "不喜欢这个文风",
 	"Done": "完成",
 	"Done": "完成",
 	"Download": "下载",
 	"Download": "下载",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "启用分享至社区",
 	"Enable Community Sharing": "启用分享至社区",
 	"Enable New Sign Ups": "允许新用户注册",
 	"Enable New Sign Ups": "允许新用户注册",
 	"Enable Web Search": "启用网络搜索",
 	"Enable Web Search": "启用网络搜索",
+	"Enabled": "",
 	"Engine": "引擎",
 	"Engine": "引擎",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "确保您的 CSV 文件按以下顺序包含 4 列: 姓名、电子邮箱、密码、角色。",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "确保您的 CSV 文件按以下顺序包含 4 列: 姓名、电子邮箱、密码、角色。",
 	"Enter {{role}} message here": "在此处输入 {{role}} 信息",
 	"Enter {{role}} message here": "在此处输入 {{role}} 信息",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "输入 Serply API 密钥",
 	"Enter Serply API Key": "输入 Serply API 密钥",
 	"Enter Serpstack API Key": "输入 Serpstack API 密钥",
 	"Enter Serpstack API Key": "输入 Serpstack API 密钥",
 	"Enter stop sequence": "输入停止序列 (Stop Sequence)",
 	"Enter stop sequence": "输入停止序列 (Stop Sequence)",
+	"Enter system prompt": "输入系统提示词 (Prompt)",
 	"Enter Tavily API Key": "输入 Tavily API 密钥",
 	"Enter Tavily API Key": "输入 Tavily API 密钥",
 	"Enter Tika Server URL": "输入 Tika 服务器地址",
 	"Enter Tika Server URL": "输入 Tika 服务器地址",
 	"Enter Top K": "输入 Top K",
 	"Enter Top K": "输入 Top K",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "输入地址 (例如:http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "输入地址 (例如:http://localhost:11434)",
 	"Enter Your Email": "输入您的电子邮箱",
 	"Enter Your Email": "输入您的电子邮箱",
 	"Enter Your Full Name": "输入您的名称",
 	"Enter Your Full Name": "输入您的名称",
+	"Enter your message": "输入您的消息",
 	"Enter Your Password": "输入您的密码",
 	"Enter Your Password": "输入您的密码",
 	"Enter Your Role": "输入您的权限组",
 	"Enter Your Role": "输入您的权限组",
 	"Error": "错误",
 	"Error": "错误",
@@ -266,6 +274,7 @@
 	"File": "文件",
 	"File": "文件",
 	"File Mode": "文件模式",
 	"File Mode": "文件模式",
 	"File not found.": "文件未找到。",
 	"File not found.": "文件未找到。",
+	"Files": "",
 	"Filter is now globally disabled": "过滤器已全局禁用",
 	"Filter is now globally disabled": "过滤器已全局禁用",
 	"Filter is now globally enabled": "过滤器已全局启用",
 	"Filter is now globally enabled": "过滤器已全局启用",
 	"Filters": "过滤器",
 	"Filters": "过滤器",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "频率惩罚",
 	"Frequency Penalty": "频率惩罚",
 	"Function created successfully": "函数创建成功",
 	"Function created successfully": "函数创建成功",
 	"Function deleted successfully": "函数删除成功",
 	"Function deleted successfully": "函数删除成功",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "函数全局已禁用",
+	"Function is now globally enabled": "函数全局已启用",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "函数更新成功",
 	"Function updated successfully": "函数更新成功",
 	"Functions": "函数",
 	"Functions": "函数",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "函数导入成功",
 	"Functions imported successfully": "函数导入成功",
 	"General": "通用",
 	"General": "通用",
 	"General Settings": "通用设置",
 	"General Settings": "通用设置",
 	"Generate Image": "生成图像",
 	"Generate Image": "生成图像",
 	"Generating search query": "生成搜索查询",
 	"Generating search query": "生成搜索查询",
 	"Generation Info": "生成信息",
 	"Generation Info": "生成信息",
+	"Get up and running with": "",
 	"Global": "全局",
 	"Global": "全局",
 	"Good Response": "点赞此回答",
 	"Good Response": "点赞此回答",
 	"Google PSE API Key": "Google PSE API 密钥",
 	"Google PSE API Key": "Google PSE API 密钥",
@@ -298,6 +315,7 @@
 	"Hide Model": "隐藏",
 	"Hide Model": "隐藏",
 	"How can I help you today?": "有什么我能帮您的吗?",
 	"How can I help you today?": "有什么我能帮您的吗?",
 	"Hybrid Search": "混合搜索",
 	"Hybrid Search": "混合搜索",
+	"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
 	"Image Generation (Experimental)": "图像生成(实验性)",
 	"Image Generation (Experimental)": "图像生成(实验性)",
 	"Image Generation Engine": "图像生成引擎",
 	"Image Generation Engine": "图像生成引擎",
 	"Image Settings": "图像设置",
 	"Image Settings": "图像设置",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "键盘快捷键",
 	"Keyboard shortcuts": "键盘快捷键",
 	"Knowledge": "知识库",
 	"Knowledge": "知识库",
 	"Language": "语言",
 	"Language": "语言",
+	"large language models, locally.": "",
 	"Last Active": "最后在线时间",
 	"Last Active": "最后在线时间",
 	"Last Modified": "最后修改时间",
 	"Last Modified": "最后修改时间",
 	"Light": "浅色",
 	"Light": "浅色",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "Pipeline 值",
 	"Pipelines Valves": "Pipeline 值",
 	"Plain text (.txt)": "TXT 文档 (.txt)",
 	"Plain text (.txt)": "TXT 文档 (.txt)",
 	"Playground": "AI 对话游乐场",
 	"Playground": "AI 对话游乐场",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "积极的态度",
 	"Positive attitude": "积极的态度",
 	"Previous 30 days": "过去 30 天",
 	"Previous 30 days": "过去 30 天",
 	"Previous 7 days": "过去 7 天",
 	"Previous 7 days": "过去 7 天",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"RTL": "从右至左",
 	"RTL": "从右至左",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "运行中",
 	"Running": "运行中",
 	"Save": "保存",
 	"Save": "保存",
 	"Save & Create": "保存并创建",
 	"Save & Create": "保存并创建",
@@ -557,8 +578,10 @@
 	"Success": "成功",
 	"Success": "成功",
 	"Successfully updated.": "成功更新。",
 	"Successfully updated.": "成功更新。",
 	"Suggested": "建议",
 	"Suggested": "建议",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "系统",
 	"System": "系统",
-	"System Prompt": "系统提示词",
+	"System Prompt": "系统提示词 (System Prompt)",
 	"Tags": "标签",
 	"Tags": "标签",
 	"Tap to interrupt": "点击以中断",
 	"Tap to interrupt": "点击以中断",
 	"Tavily API Key": "Tavily API 密钥",
 	"Tavily API Key": "Tavily API 密钥",
@@ -569,6 +592,7 @@
 	"Text-to-Speech Engine": "文本转语音引擎",
 	"Text-to-Speech Engine": "文本转语音引擎",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "感谢您的反馈!",
 	"Thanks for your feedback!": "感谢您的反馈!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "分值应介于 0.0(0%)和 1.0(100%)之间。",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "分值应介于 0.0(0%)和 1.0(100%)之间。",
 	"Theme": "主题",
 	"Theme": "主题",
 	"Thinking...": "正在思考...",
 	"Thinking...": "正在思考...",
@@ -602,7 +626,13 @@
 	"Tool deleted successfully": "工具删除成功",
 	"Tool deleted successfully": "工具删除成功",
 	"Tool imported successfully": "工具导入成功",
 	"Tool imported successfully": "工具导入成功",
 	"Tool updated successfully": "工具更新成功",
 	"Tool updated successfully": "工具更新成功",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "工具",
 	"Tools": "工具",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Trouble accessing Ollama?": "访问 Ollama 时遇到问题?",
 	"Trouble accessing Ollama?": "访问 Ollama 时遇到问题?",
@@ -644,6 +674,7 @@
 	"Version": "版本",
 	"Version": "版本",
 	"Voice": "语音",
 	"Voice": "语音",
 	"Warning": "警告",
 	"Warning": "警告",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "警告:如果您修改了语义向量模型,则需要重新导入所有文档。",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "警告:如果您修改了语义向量模型,则需要重新导入所有文档。",
 	"Web": "网页",
 	"Web": "网页",
 	"Web API": "网页 API",
 	"Web API": "网页 API",
@@ -670,6 +701,7 @@
 	"You're a helpful assistant.": "你是一个有帮助的助手。",
 	"You're a helpful assistant.": "你是一个有帮助的助手。",
 	"You're now logged in.": "已登录。",
 	"You're now logged in.": "已登录。",
 	"Your account status is currently pending activation.": "您的账号当前状态为待激活。",
 	"Your account status is currently pending activation.": "您的账号当前状态为待激活。",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "YouTube",
 	"Youtube": "YouTube",
 	"Youtube Loader Settings": "YouTube 爬取设置"
 	"Youtube Loader Settings": "YouTube 爬取设置"
 }
 }

+ 32 - 0
src/lib/i18n/locales/zh-TW/translation.json

@@ -177,6 +177,7 @@
 	"Deleted {{name}}": "已刪除 {{name}}",
 	"Deleted {{name}}": "已刪除 {{name}}",
 	"Description": "描述",
 	"Description": "描述",
 	"Didn't fully follow instructions": "未完全遵循指示",
 	"Didn't fully follow instructions": "未完全遵循指示",
+	"Disabled": "",
 	"Discover a function": "",
 	"Discover a function": "",
 	"Discover a model": "發現新模型",
 	"Discover a model": "發現新模型",
 	"Discover a prompt": "發現新提示詞",
 	"Discover a prompt": "發現新提示詞",
@@ -188,6 +189,8 @@
 	"Dismissible": "可忽略",
 	"Dismissible": "可忽略",
 	"Display Emoji in Call": "在呼叫中顯示表情符號",
 	"Display Emoji in Call": "在呼叫中顯示表情符號",
 	"Display the username instead of You in the Chat": "在聊天中顯示使用者名稱而不是「您」",
 	"Display the username instead of You in the Chat": "在聊天中顯示使用者名稱而不是「您」",
+	"Do not install functions from sources you do not fully trust.": "",
+	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "文件",
 	"Document": "文件",
 	"Document Settings": "文件設定",
 	"Document Settings": "文件設定",
 	"Documentation": "文件",
 	"Documentation": "文件",
@@ -195,6 +198,8 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "不會與外部連線,您的資料會安全地留在您的本機伺服器上。",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "不會與外部連線,您的資料會安全地留在您的本機伺服器上。",
 	"Don't Allow": "不允許",
 	"Don't Allow": "不允許",
 	"Don't have an account?": "還沒有註冊帳號?",
 	"Don't have an account?": "還沒有註冊帳號?",
+	"don't install random functions from sources you don't trust.": "",
+	"don't install random tools from sources you don't trust.": "",
 	"Don't like the style": "不喜歡這個樣式?",
 	"Don't like the style": "不喜歡這個樣式?",
 	"Done": "",
 	"Done": "",
 	"Download": "下載",
 	"Download": "下載",
@@ -215,6 +220,7 @@
 	"Enable Community Sharing": "啟用社群分享",
 	"Enable Community Sharing": "啟用社群分享",
 	"Enable New Sign Ups": "允許註冊新帳號",
 	"Enable New Sign Ups": "允許註冊新帳號",
 	"Enable Web Search": "啟用網頁搜尋",
 	"Enable Web Search": "啟用網頁搜尋",
+	"Enabled": "",
 	"Engine": "",
 	"Engine": "",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "請確保您的 CSV 檔案包含這四個欄位,並按照此順序:名稱、電子郵件、密碼、角色。",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "請確保您的 CSV 檔案包含這四個欄位,並按照此順序:名稱、電子郵件、密碼、角色。",
 	"Enter {{role}} message here": "在這裡輸入 {{role}} 訊息",
 	"Enter {{role}} message here": "在這裡輸入 {{role}} 訊息",
@@ -236,6 +242,7 @@
 	"Enter Serply API Key": "輸入 Serply API 金鑰",
 	"Enter Serply API Key": "輸入 Serply API 金鑰",
 	"Enter Serpstack API Key": "輸入 Serpstack API 金鑰",
 	"Enter Serpstack API Key": "輸入 Serpstack API 金鑰",
 	"Enter stop sequence": "輸入停止序列",
 	"Enter stop sequence": "輸入停止序列",
+	"Enter system prompt": "",
 	"Enter Tavily API Key": "輸入 Tavily API 金鑰",
 	"Enter Tavily API Key": "輸入 Tavily API 金鑰",
 	"Enter Tika Server URL": "",
 	"Enter Tika Server URL": "",
 	"Enter Top K": "輸入 Top K",
 	"Enter Top K": "輸入 Top K",
@@ -243,6 +250,7 @@
 	"Enter URL (e.g. http://localhost:11434)": "輸入 URL(例如 http://localhost:11434)",
 	"Enter URL (e.g. http://localhost:11434)": "輸入 URL(例如 http://localhost:11434)",
 	"Enter Your Email": "輸入您的電子郵件",
 	"Enter Your Email": "輸入您的電子郵件",
 	"Enter Your Full Name": "輸入您的全名",
 	"Enter Your Full Name": "輸入您的全名",
+	"Enter your message": "",
 	"Enter Your Password": "輸入您的密碼",
 	"Enter Your Password": "輸入您的密碼",
 	"Enter Your Role": "輸入您的角色",
 	"Enter Your Role": "輸入您的角色",
 	"Error": "錯誤",
 	"Error": "錯誤",
@@ -266,6 +274,7 @@
 	"File": "檔案",
 	"File": "檔案",
 	"File Mode": "檔案模式",
 	"File Mode": "檔案模式",
 	"File not found.": "找不到檔案。",
 	"File not found.": "找不到檔案。",
+	"Files": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally disabled": "",
 	"Filter is now globally enabled": "",
 	"Filter is now globally enabled": "",
 	"Filters": "篩選器",
 	"Filters": "篩選器",
@@ -278,14 +287,22 @@
 	"Frequency Penalty": "頻率懲罰",
 	"Frequency Penalty": "頻率懲罰",
 	"Function created successfully": "",
 	"Function created successfully": "",
 	"Function deleted successfully": "",
 	"Function deleted successfully": "",
+	"Function Description (e.g. A filter to remove profanity from text)": "",
+	"Function ID (e.g. my_filter)": "",
+	"Function is now globally disabled": "",
+	"Function is now globally enabled": "",
+	"Function Name (e.g. My Filter)": "",
 	"Function updated successfully": "",
 	"Function updated successfully": "",
 	"Functions": "功能",
 	"Functions": "功能",
+	"Functions allow arbitrary code execution": "",
+	"Functions allow arbitrary code execution.": "",
 	"Functions imported successfully": "",
 	"Functions imported successfully": "",
 	"General": "常用",
 	"General": "常用",
 	"General Settings": "常用設定",
 	"General Settings": "常用設定",
 	"Generate Image": "生成圖片",
 	"Generate Image": "生成圖片",
 	"Generating search query": "生成搜尋查詢",
 	"Generating search query": "生成搜尋查詢",
 	"Generation Info": "生成資訊",
 	"Generation Info": "生成資訊",
+	"Get up and running with": "",
 	"Global": "",
 	"Global": "",
 	"Good Response": "優秀的回應",
 	"Good Response": "優秀的回應",
 	"Google PSE API Key": "Google PSE API 金鑰",
 	"Google PSE API Key": "Google PSE API 金鑰",
@@ -298,6 +315,7 @@
 	"Hide Model": "隱藏模型",
 	"Hide Model": "隱藏模型",
 	"How can I help you today?": "今天能為您做些什麼?",
 	"How can I help you today?": "今天能為您做些什麼?",
 	"Hybrid Search": "混合搜尋",
 	"Hybrid Search": "混合搜尋",
+	"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
 	"Image Generation (Experimental)": "影像生成(實驗性功能)",
 	"Image Generation (Experimental)": "影像生成(實驗性功能)",
 	"Image Generation Engine": "影像生成引擎",
 	"Image Generation Engine": "影像生成引擎",
 	"Image Settings": "圖片設定",
 	"Image Settings": "圖片設定",
@@ -328,6 +346,7 @@
 	"Keyboard shortcuts": "鍵盤快速鍵",
 	"Keyboard shortcuts": "鍵盤快速鍵",
 	"Knowledge": "知識",
 	"Knowledge": "知識",
 	"Language": "語言",
 	"Language": "語言",
+	"large language models, locally.": "",
 	"Last Active": "最後活動",
 	"Last Active": "最後活動",
 	"Last Modified": "最後修改",
 	"Last Modified": "最後修改",
 	"Light": "亮色",
 	"Light": "亮色",
@@ -438,6 +457,7 @@
 	"Pipelines Valves": "管線閥門",
 	"Pipelines Valves": "管線閥門",
 	"Plain text (.txt)": "純文字 (.txt)",
 	"Plain text (.txt)": "純文字 (.txt)",
 	"Playground": "AI 對話遊樂場",
 	"Playground": "AI 對話遊樂場",
+	"Please carefully review the following warnings:": "",
 	"Positive attitude": "積極態度",
 	"Positive attitude": "積極態度",
 	"Previous 30 days": "前 30 天",
 	"Previous 30 days": "前 30 天",
 	"Previous 7 days": "前 7 天",
 	"Previous 7 days": "前 7 天",
@@ -475,6 +495,7 @@
 	"Rosé Pine": "玫瑰松",
 	"Rosé Pine": "玫瑰松",
 	"Rosé Pine Dawn": "黎明玫瑰松",
 	"Rosé Pine Dawn": "黎明玫瑰松",
 	"RTL": "RTL",
 	"RTL": "RTL",
+	"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
 	"Running": "運作中",
 	"Running": "運作中",
 	"Save": "儲存",
 	"Save": "儲存",
 	"Save & Create": "儲存並建立",
 	"Save & Create": "儲存並建立",
@@ -557,6 +578,8 @@
 	"Success": "成功",
 	"Success": "成功",
 	"Successfully updated.": "更新成功。",
 	"Successfully updated.": "更新成功。",
 	"Suggested": "建議",
 	"Suggested": "建議",
+	"Support": "",
+	"Support this plugin:": "",
 	"System": "系統",
 	"System": "系統",
 	"System Prompt": "系統提示詞",
 	"System Prompt": "系統提示詞",
 	"Tags": "標籤",
 	"Tags": "標籤",
@@ -569,6 +592,7 @@
 	"Text-to-Speech Engine": "文字轉語音引擎",
 	"Text-to-Speech Engine": "文字轉語音引擎",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "感謝您的回饋!",
 	"Thanks for your feedback!": "感謝您的回饋!",
+	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "分數應該介於 0.0(0%)和 1.0(100%)之間。",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "分數應該介於 0.0(0%)和 1.0(100%)之間。",
 	"Theme": "主題",
 	"Theme": "主題",
 	"Thinking...": "正在思考...",
 	"Thinking...": "正在思考...",
@@ -602,7 +626,13 @@
 	"Tool deleted successfully": "",
 	"Tool deleted successfully": "",
 	"Tool imported successfully": "",
 	"Tool imported successfully": "",
 	"Tool updated successfully": "",
 	"Tool updated successfully": "",
+	"Toolkit Description (e.g. A toolkit for performing various operations)": "",
+	"Toolkit ID (e.g. my_toolkit)": "",
+	"Toolkit Name (e.g. My ToolKit)": "",
 	"Tools": "工具",
 	"Tools": "工具",
+	"Tools are a function calling system with arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution": "",
+	"Tools have a function calling system that allows arbitrary code execution.": "",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
 	"Trouble accessing Ollama?": "存取 Ollama 時遇到問題?",
 	"Trouble accessing Ollama?": "存取 Ollama 時遇到問題?",
@@ -644,6 +674,7 @@
 	"Version": "版本",
 	"Version": "版本",
 	"Voice": "",
 	"Voice": "",
 	"Warning": "警告",
 	"Warning": "警告",
+	"Warning:": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "警告:如果更新或更改您的嵌入模型,則需要重新匯入所有文件",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "警告:如果更新或更改您的嵌入模型,則需要重新匯入所有文件",
 	"Web": "網頁",
 	"Web": "網頁",
 	"Web API": "網頁 API",
 	"Web API": "網頁 API",
@@ -670,6 +701,7 @@
 	"You're a helpful assistant.": "您是一位善於協助他人的助手。",
 	"You're a helpful assistant.": "您是一位善於協助他人的助手。",
 	"You're now logged in.": "已登入。",
 	"You're now logged in.": "已登入。",
 	"Your account status is currently pending activation.": "您的帳號狀態目前待啟用。",
 	"Your account status is currently pending activation.": "您的帳號狀態目前待啟用。",
+	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
 	"Youtube": "Youtube",
 	"Youtube": "Youtube",
 	"Youtube Loader Settings": "Youtube 載入器設定"
 	"Youtube Loader Settings": "Youtube 載入器設定"
 }
 }

+ 2 - 2
src/routes/auth/+page.svelte

@@ -121,11 +121,11 @@
 			<div class=" my-auto pb-16 text-left">
 			<div class=" my-auto pb-16 text-left">
 				<div>
 				<div>
 					<div class=" font-semibold text-yellow-600 text-4xl">
 					<div class=" font-semibold text-yellow-600 text-4xl">
-						Get up and running with <br />large language models, locally.
+						{$i18n.t('Get up and running with')} <br /> {$i18n.t('large language models, locally.')}
 					</div>
 					</div>
 
 
 					<div class="mt-2 text-yellow-600 text-xl">
 					<div class="mt-2 text-yellow-600 text-xl">
-						Run Llama 2, Code Llama, and other models. Customize and create your own.
+						{$i18n.t('Run Llama 2, Code Llama, and other models. Customize and create your own.')}
 					</div>
 					</div>
 				</div>
 				</div>
 			</div>
 			</div>