浏览代码

Merge branch 'dev' into improve-swedish-translation

Timothy Jaeryang Baek 2 月之前
父节点
当前提交
54d7bf8f28
共有 100 个文件被更改,包括 2192 次插入1102 次删除
  1. 31 3
      backend/open_webui/config.py
  2. 6 3
      backend/open_webui/functions.py
  3. 12 2
      backend/open_webui/main.py
  4. 8 5
      backend/open_webui/models/chats.py
  5. 1 1
      backend/open_webui/models/feedbacks.py
  6. 1 1
      backend/open_webui/models/files.py
  7. 1 1
      backend/open_webui/models/folders.py
  8. 4 4
      backend/open_webui/models/functions.py
  9. 2 3
      backend/open_webui/models/models.py
  10. 1 1
      backend/open_webui/models/tags.py
  11. 4 4
      backend/open_webui/models/tools.py
  12. 22 0
      backend/open_webui/retrieval/loaders/main.py
  13. 7 1
      backend/open_webui/retrieval/models/colbert.py
  14. 4 4
      backend/open_webui/retrieval/utils.py
  15. 6 1
      backend/open_webui/retrieval/vector/dbs/chroma.py
  16. 8 4
      backend/open_webui/retrieval/vector/dbs/milvus.py
  17. 21 15
      backend/open_webui/retrieval/vector/dbs/pgvector.py
  18. 7 2
      backend/open_webui/retrieval/vector/dbs/qdrant.py
  19. 50 13
      backend/open_webui/routers/audio.py
  20. 1 14
      backend/open_webui/routers/auths.py
  21. 1 1
      backend/open_webui/routers/files.py
  22. 10 4
      backend/open_webui/routers/functions.py
  23. 11 5
      backend/open_webui/routers/groups.py
  24. 1 1
      backend/open_webui/routers/images.py
  25. 1 1
      backend/open_webui/routers/knowledge.py
  26. 130 16
      backend/open_webui/routers/ollama.py
  27. 44 11
      backend/open_webui/routers/openai.py
  28. 10 10
      backend/open_webui/routers/pipelines.py
  29. 39 4
      backend/open_webui/routers/retrieval.py
  30. 46 0
      backend/open_webui/routers/tasks.py
  31. 9 4
      backend/open_webui/routers/tools.py
  32. 6 2
      backend/open_webui/routers/utils.py
  33. 18 3
      backend/open_webui/storage/provider.py
  34. 7 4
      backend/open_webui/utils/auth.py
  35. 5 5
      backend/open_webui/utils/chat.py
  36. 14 3
      backend/open_webui/utils/filter.py
  37. 196 121
      backend/open_webui/utils/middleware.py
  38. 5 1
      backend/open_webui/utils/misc.py
  39. 6 5
      backend/open_webui/utils/models.py
  40. 1 10
      backend/open_webui/utils/oauth.py
  41. 7 1
      backend/open_webui/utils/payload.py
  42. 1 1
      backend/open_webui/utils/plugin.py
  43. 2 2
      backend/open_webui/utils/response.py
  44. 1 0
      backend/requirements.txt
  45. 2 2
      package-lock.json
  46. 1 1
      package.json
  47. 1 0
      pyproject.toml
  48. 7 0
      src/lib/apis/retrieval/index.ts
  49. 7 6
      src/lib/components/admin/Functions/FunctionEditor.svelte
  50. 49 1
      src/lib/components/admin/Settings/Documents.svelte
  51. 13 0
      src/lib/components/admin/Settings/WebSearch.svelte
  52. 21 4
      src/lib/components/chat/Chat.svelte
  53. 3 1
      src/lib/components/chat/ChatPlaceholder.svelte
  54. 36 9
      src/lib/components/chat/MessageInput.svelte
  55. 7 1
      src/lib/components/chat/MessageInput/Commands/Prompts.svelte
  56. 93 0
      src/lib/components/chat/MessageInput/InputMenu.svelte
  57. 2 0
      src/lib/components/chat/Messages.svelte
  58. 11 18
      src/lib/components/chat/Messages/CodeBlock.svelte
  59. 4 4
      src/lib/components/chat/Messages/Markdown/MarkdownTokens.svelte
  60. 32 18
      src/lib/components/chat/Messages/ResponseMessage.svelte
  61. 2 1
      src/lib/components/chat/Placeholder.svelte
  62. 40 2
      src/lib/components/chat/ShortcutsModal.svelte
  63. 12 3
      src/lib/components/common/CodeEditor.svelte
  64. 0 1
      src/lib/components/workspace/Models/ModelEditor.svelte
  65. 7 7
      src/lib/components/workspace/Tools/ToolkitEditor.svelte
  66. 12 2
      src/lib/i18n/locales/ar-BH/translation.json
  67. 12 2
      src/lib/i18n/locales/bg-BG/translation.json
  68. 12 2
      src/lib/i18n/locales/bn-BD/translation.json
  69. 62 52
      src/lib/i18n/locales/ca-ES/translation.json
  70. 12 2
      src/lib/i18n/locales/ceb-PH/translation.json
  71. 12 2
      src/lib/i18n/locales/cs-CZ/translation.json
  72. 12 2
      src/lib/i18n/locales/da-DK/translation.json
  73. 12 2
      src/lib/i18n/locales/de-DE/translation.json
  74. 12 2
      src/lib/i18n/locales/dg-DG/translation.json
  75. 12 2
      src/lib/i18n/locales/el-GR/translation.json
  76. 12 2
      src/lib/i18n/locales/en-GB/translation.json
  77. 12 2
      src/lib/i18n/locales/en-US/translation.json
  78. 12 2
      src/lib/i18n/locales/es-ES/translation.json
  79. 12 2
      src/lib/i18n/locales/eu-ES/translation.json
  80. 12 2
      src/lib/i18n/locales/fa-IR/translation.json
  81. 79 69
      src/lib/i18n/locales/fi-FI/translation.json
  82. 12 2
      src/lib/i18n/locales/fr-CA/translation.json
  83. 12 2
      src/lib/i18n/locales/fr-FR/translation.json
  84. 12 2
      src/lib/i18n/locales/he-IL/translation.json
  85. 12 2
      src/lib/i18n/locales/hi-IN/translation.json
  86. 12 2
      src/lib/i18n/locales/hr-HR/translation.json
  87. 12 2
      src/lib/i18n/locales/hu-HU/translation.json
  88. 12 2
      src/lib/i18n/locales/id-ID/translation.json
  89. 12 2
      src/lib/i18n/locales/ie-GA/translation.json
  90. 12 2
      src/lib/i18n/locales/it-IT/translation.json
  91. 12 2
      src/lib/i18n/locales/ja-JP/translation.json
  92. 429 421
      src/lib/i18n/locales/ka-GE/translation.json
  93. 12 2
      src/lib/i18n/locales/ko-KR/translation.json
  94. 12 2
      src/lib/i18n/locales/lt-LT/translation.json
  95. 12 2
      src/lib/i18n/locales/ms-MY/translation.json
  96. 12 2
      src/lib/i18n/locales/nb-NO/translation.json
  97. 12 2
      src/lib/i18n/locales/nl-NL/translation.json
  98. 12 2
      src/lib/i18n/locales/pa-IN/translation.json
  99. 132 122
      src/lib/i18n/locales/pl-PL/translation.json
  100. 12 2
      src/lib/i18n/locales/pt-BR/translation.json

+ 31 - 3
backend/open_webui/config.py

@@ -44,7 +44,7 @@ logging.getLogger("uvicorn.access").addFilter(EndpointFilter())
 
 # Function to run the alembic migrations
 def run_migrations():
-    print("Running migrations")
+    log.info("Running migrations")
     try:
         from alembic import command
         from alembic.config import Config
@@ -57,7 +57,7 @@ def run_migrations():
 
         command.upgrade(alembic_cfg, "head")
     except Exception as e:
-        print(f"Error: {e}")
+        log.exception(f"Error running migrations: {e}")
 
 
 run_migrations()
@@ -678,6 +678,10 @@ S3_REGION_NAME = os.environ.get("S3_REGION_NAME", None)
 S3_BUCKET_NAME = os.environ.get("S3_BUCKET_NAME", None)
 S3_KEY_PREFIX = os.environ.get("S3_KEY_PREFIX", None)
 S3_ENDPOINT_URL = os.environ.get("S3_ENDPOINT_URL", None)
+S3_USE_ACCELERATE_ENDPOINT = (
+    os.environ.get("S3_USE_ACCELERATE_ENDPOINT", "False").lower() == "true"
+)
+S3_ADDRESSING_STYLE = os.environ.get("S3_ADDRESSING_STYLE", None)
 
 GCS_BUCKET_NAME = os.environ.get("GCS_BUCKET_NAME", None)
 GOOGLE_APPLICATION_CREDENTIALS_JSON = os.environ.get(
@@ -1094,7 +1098,7 @@ try:
     banners = json.loads(os.environ.get("WEBUI_BANNERS", "[]"))
     banners = [BannerModel(**banner) for banner in banners]
 except Exception as e:
-    print(f"Error loading WEBUI_BANNERS: {e}")
+    log.exception(f"Error loading WEBUI_BANNERS: {e}")
     banners = []
 
 WEBUI_BANNERS = PersistentConfig("WEBUI_BANNERS", "ui.banners", banners)
@@ -1566,6 +1570,18 @@ GOOGLE_DRIVE_API_KEY = PersistentConfig(
     os.environ.get("GOOGLE_DRIVE_API_KEY", ""),
 )
 
+ENABLE_ONEDRIVE_INTEGRATION = PersistentConfig(
+    "ENABLE_ONEDRIVE_INTEGRATION",
+    "onedrive.enable",
+    os.getenv("ENABLE_ONEDRIVE_INTEGRATION", "False").lower() == "true",
+)
+
+ONEDRIVE_CLIENT_ID = PersistentConfig(
+    "ONEDRIVE_CLIENT_ID",
+    "onedrive.client_id",
+    os.environ.get("ONEDRIVE_CLIENT_ID", ""),
+)
+
 # RAG Content Extraction
 CONTENT_EXTRACTION_ENGINE = PersistentConfig(
     "CONTENT_EXTRACTION_ENGINE",
@@ -1579,6 +1595,18 @@ TIKA_SERVER_URL = PersistentConfig(
     os.getenv("TIKA_SERVER_URL", "http://tika:9998"),  # Default for sidecar deployment
 )
 
+DOCUMENT_INTELLIGENCE_ENDPOINT = PersistentConfig(
+    "DOCUMENT_INTELLIGENCE_ENDPOINT",
+    "rag.document_intelligence_endpoint",
+    os.getenv("DOCUMENT_INTELLIGENCE_ENDPOINT", ""),
+)
+
+DOCUMENT_INTELLIGENCE_KEY = PersistentConfig(
+    "DOCUMENT_INTELLIGENCE_KEY",
+    "rag.document_intelligence_key",
+    os.getenv("DOCUMENT_INTELLIGENCE_KEY", ""),
+)
+
 RAG_TOP_K = PersistentConfig(
     "RAG_TOP_K", "rag.top_k", int(os.environ.get("RAG_TOP_K", "3"))
 )

+ 6 - 3
backend/open_webui/functions.py

@@ -2,6 +2,7 @@ import logging
 import sys
 import inspect
 import json
+import asyncio
 
 from pydantic import BaseModel
 from typing import AsyncGenerator, Generator, Iterator
@@ -76,11 +77,13 @@ async def get_function_models(request):
         if hasattr(function_module, "pipes"):
             sub_pipes = []
 
-            # Check if pipes is a function or a list
-
+            # Handle pipes being a list, sync function, or async function
             try:
                 if callable(function_module.pipes):
-                    sub_pipes = function_module.pipes()
+                    if asyncio.iscoroutinefunction(function_module.pipes):
+                        sub_pipes = await function_module.pipes()
+                    else:
+                        sub_pipes = function_module.pipes()
                 else:
                     sub_pipes = function_module.pipes
             except Exception as e:

+ 12 - 2
backend/open_webui/main.py

@@ -95,6 +95,7 @@ from open_webui.config import (
     OLLAMA_API_CONFIGS,
     # OpenAI
     ENABLE_OPENAI_API,
+    ONEDRIVE_CLIENT_ID,
     OPENAI_API_BASE_URLS,
     OPENAI_API_KEYS,
     OPENAI_API_CONFIGS,
@@ -180,6 +181,8 @@ from open_webui.config import (
     CHUNK_SIZE,
     CONTENT_EXTRACTION_ENGINE,
     TIKA_SERVER_URL,
+    DOCUMENT_INTELLIGENCE_ENDPOINT,
+    DOCUMENT_INTELLIGENCE_KEY,
     RAG_TOP_K,
     RAG_TEXT_SPLITTER,
     TIKTOKEN_ENCODING_NAME,
@@ -215,11 +218,13 @@ from open_webui.config import (
     GOOGLE_PSE_ENGINE_ID,
     GOOGLE_DRIVE_CLIENT_ID,
     GOOGLE_DRIVE_API_KEY,
+    ONEDRIVE_CLIENT_ID,
     ENABLE_RAG_HYBRID_SEARCH,
     ENABLE_RAG_LOCAL_WEB_FETCH,
     ENABLE_RAG_WEB_LOADER_SSL_VERIFICATION,
     ENABLE_RAG_WEB_SEARCH,
     ENABLE_GOOGLE_DRIVE_INTEGRATION,
+    ENABLE_ONEDRIVE_INTEGRATION,
     UPLOAD_DIR,
     # WebUI
     WEBUI_AUTH,
@@ -533,6 +538,8 @@ app.state.config.ENABLE_RAG_WEB_LOADER_SSL_VERIFICATION = (
 
 app.state.config.CONTENT_EXTRACTION_ENGINE = CONTENT_EXTRACTION_ENGINE
 app.state.config.TIKA_SERVER_URL = TIKA_SERVER_URL
+app.state.config.DOCUMENT_INTELLIGENCE_ENDPOINT = DOCUMENT_INTELLIGENCE_ENDPOINT
+app.state.config.DOCUMENT_INTELLIGENCE_KEY = DOCUMENT_INTELLIGENCE_KEY
 
 app.state.config.TEXT_SPLITTER = RAG_TEXT_SPLITTER
 app.state.config.TIKTOKEN_ENCODING_NAME = TIKTOKEN_ENCODING_NAME
@@ -564,6 +571,7 @@ app.state.config.RAG_WEB_SEARCH_FULL_CONTEXT = RAG_WEB_SEARCH_FULL_CONTEXT
 app.state.config.RAG_WEB_SEARCH_DOMAIN_FILTER_LIST = RAG_WEB_SEARCH_DOMAIN_FILTER_LIST
 
 app.state.config.ENABLE_GOOGLE_DRIVE_INTEGRATION = ENABLE_GOOGLE_DRIVE_INTEGRATION
+app.state.config.ENABLE_ONEDRIVE_INTEGRATION = ENABLE_ONEDRIVE_INTEGRATION
 app.state.config.SEARXNG_QUERY_URL = SEARXNG_QUERY_URL
 app.state.config.GOOGLE_PSE_API_KEY = GOOGLE_PSE_API_KEY
 app.state.config.GOOGLE_PSE_ENGINE_ID = GOOGLE_PSE_ENGINE_ID
@@ -911,7 +919,7 @@ async def get_models(request: Request, user=Depends(get_verified_user)):
 
         return filtered_models
 
-    models = await get_all_models(request)
+    models = await get_all_models(request, user=user)
 
     # Filter out filter pipelines
     models = [
@@ -951,7 +959,7 @@ async def chat_completion(
     user=Depends(get_verified_user),
 ):
     if not request.app.state.MODELS:
-        await get_all_models(request)
+        await get_all_models(request, user=user)
 
     model_item = form_data.pop("model_item", {})
     tasks = form_data.pop("background_tasks", None)
@@ -1146,6 +1154,7 @@ async def get_app_config(request: Request):
                     "enable_admin_export": ENABLE_ADMIN_EXPORT,
                     "enable_admin_chat_access": ENABLE_ADMIN_CHAT_ACCESS,
                     "enable_google_drive_integration": app.state.config.ENABLE_GOOGLE_DRIVE_INTEGRATION,
+                    "enable_onedrive_integration": app.state.config.ENABLE_ONEDRIVE_INTEGRATION,
                 }
                 if user is not None
                 else {}
@@ -1177,6 +1186,7 @@ async def get_app_config(request: Request):
                     "client_id": GOOGLE_DRIVE_CLIENT_ID.value,
                     "api_key": GOOGLE_DRIVE_API_KEY.value,
                 },
+                "onedrive": {"client_id": ONEDRIVE_CLIENT_ID.value},
             }
             if user is not None
             else {}

+ 8 - 5
backend/open_webui/models/chats.py

@@ -1,3 +1,4 @@
+import logging
 import json
 import time
 import uuid
@@ -5,7 +6,7 @@ from typing import Optional
 
 from open_webui.internal.db import Base, get_db
 from open_webui.models.tags import TagModel, Tag, Tags
-
+from open_webui.env import SRC_LOG_LEVELS
 
 from pydantic import BaseModel, ConfigDict
 from sqlalchemy import BigInteger, Boolean, Column, String, Text, JSON
@@ -16,6 +17,8 @@ from sqlalchemy.sql import exists
 # Chat DB Schema
 ####################
 
+log = logging.getLogger(__name__)
+log.setLevel(SRC_LOG_LEVELS["MODELS"])
 
 class Chat(Base):
     __tablename__ = "chat"
@@ -670,7 +673,7 @@ class ChatTable:
             # Perform pagination at the SQL level
             all_chats = query.offset(skip).limit(limit).all()
 
-            print(len(all_chats))
+            log.info(f"The number of chats: {len(all_chats)}")
 
             # Validate and return chats
             return [ChatModel.model_validate(chat) for chat in all_chats]
@@ -731,7 +734,7 @@ class ChatTable:
             query = db.query(Chat).filter_by(user_id=user_id)
             tag_id = tag_name.replace(" ", "_").lower()
 
-            print(db.bind.dialect.name)
+            log.info(f"DB dialect name: {db.bind.dialect.name}")
             if db.bind.dialect.name == "sqlite":
                 # SQLite JSON1 querying for tags within the meta JSON field
                 query = query.filter(
@@ -752,7 +755,7 @@ class ChatTable:
                 )
 
             all_chats = query.all()
-            print("all_chats", all_chats)
+            log.debug(f"all_chats: {all_chats}")
             return [ChatModel.model_validate(chat) for chat in all_chats]
 
     def add_chat_tag_by_id_and_user_id_and_tag_name(
@@ -810,7 +813,7 @@ class ChatTable:
             count = query.count()
 
             # Debugging output for inspection
-            print(f"Count of chats for tag '{tag_name}':", count)
+            log.info(f"Count of chats for tag '{tag_name}': {count}")
 
             return count
 

+ 1 - 1
backend/open_webui/models/feedbacks.py

@@ -118,7 +118,7 @@ class FeedbackTable:
                 else:
                     return None
             except Exception as e:
-                print(e)
+                log.exception(f"Error creating a new feedback: {e}")
                 return None
 
     def get_feedback_by_id(self, id: str) -> Optional[FeedbackModel]:

+ 1 - 1
backend/open_webui/models/files.py

@@ -119,7 +119,7 @@ class FilesTable:
                 else:
                     return None
             except Exception as e:
-                print(f"Error creating tool: {e}")
+                log.exception(f"Error inserting a new file: {e}")
                 return None
 
     def get_file_by_id(self, id: str) -> Optional[FileModel]:

+ 1 - 1
backend/open_webui/models/folders.py

@@ -82,7 +82,7 @@ class FolderTable:
                 else:
                     return None
             except Exception as e:
-                print(e)
+                log.exception(f"Error inserting a new folder: {e}")
                 return None
 
     def get_folder_by_id_and_user_id(

+ 4 - 4
backend/open_webui/models/functions.py

@@ -105,7 +105,7 @@ class FunctionsTable:
                 else:
                     return None
         except Exception as e:
-            print(f"Error creating tool: {e}")
+            log.exception(f"Error creating a new function: {e}")
             return None
 
     def get_function_by_id(self, id: str) -> Optional[FunctionModel]:
@@ -170,7 +170,7 @@ class FunctionsTable:
                 function = db.get(Function, id)
                 return function.valves if function.valves else {}
             except Exception as e:
-                print(f"An error occurred: {e}")
+                log.exception(f"Error getting function valves by id {id}: {e}")
                 return None
 
     def update_function_valves_by_id(
@@ -202,7 +202,7 @@ class FunctionsTable:
 
             return user_settings["functions"]["valves"].get(id, {})
         except Exception as e:
-            print(f"An error occurred: {e}")
+            log.exception(f"Error getting user values by id {id} and user id {user_id}: {e}")
             return None
 
     def update_user_valves_by_id_and_user_id(
@@ -225,7 +225,7 @@ class FunctionsTable:
 
             return user_settings["functions"]["valves"][id]
         except Exception as e:
-            print(f"An error occurred: {e}")
+            log.exception(f"Error updating user valves by id {id} and user_id {user_id}: {e}")
             return None
 
     def update_function_by_id(self, id: str, updated: dict) -> Optional[FunctionModel]:

+ 2 - 3
backend/open_webui/models/models.py

@@ -166,7 +166,7 @@ class ModelsTable:
                 else:
                     return None
         except Exception as e:
-            print(e)
+            log.exception(f"Failed to insert a new model: {e}")
             return None
 
     def get_all_models(self) -> list[ModelModel]:
@@ -246,8 +246,7 @@ class ModelsTable:
                 db.refresh(model)
                 return ModelModel.model_validate(model)
         except Exception as e:
-            print(e)
-
+            log.exception(f"Failed to update the model by id {id}: {e}")
             return None
 
     def delete_model_by_id(self, id: str) -> bool:

+ 1 - 1
backend/open_webui/models/tags.py

@@ -61,7 +61,7 @@ class TagTable:
                 else:
                     return None
             except Exception as e:
-                print(e)
+                log.exception(f"Error inserting a new tag: {e}")
                 return None
 
     def get_tag_by_name_and_user_id(

+ 4 - 4
backend/open_webui/models/tools.py

@@ -131,7 +131,7 @@ class ToolsTable:
                 else:
                     return None
             except Exception as e:
-                print(f"Error creating tool: {e}")
+                log.exception(f"Error creating a new tool: {e}")
                 return None
 
     def get_tool_by_id(self, id: str) -> Optional[ToolModel]:
@@ -175,7 +175,7 @@ class ToolsTable:
                 tool = db.get(Tool, id)
                 return tool.valves if tool.valves else {}
         except Exception as e:
-            print(f"An error occurred: {e}")
+            log.exception(f"Error getting tool valves by id {id}: {e}")
             return None
 
     def update_tool_valves_by_id(self, id: str, valves: dict) -> Optional[ToolValves]:
@@ -204,7 +204,7 @@ class ToolsTable:
 
             return user_settings["tools"]["valves"].get(id, {})
         except Exception as e:
-            print(f"An error occurred: {e}")
+            log.exception(f"Error getting user values by id {id} and user_id {user_id}: {e}")
             return None
 
     def update_user_valves_by_id_and_user_id(
@@ -227,7 +227,7 @@ class ToolsTable:
 
             return user_settings["tools"]["valves"][id]
         except Exception as e:
-            print(f"An error occurred: {e}")
+            log.exception(f"Error updating user valves by id {id} and user_id {user_id}: {e}")
             return None
 
     def update_tool_by_id(self, id: str, updated: dict) -> Optional[ToolModel]:

+ 22 - 0
backend/open_webui/retrieval/loaders/main.py

@@ -4,6 +4,7 @@ import ftfy
 import sys
 
 from langchain_community.document_loaders import (
+    AzureAIDocumentIntelligenceLoader,
     BSHTMLLoader,
     CSVLoader,
     Docx2txtLoader,
@@ -147,6 +148,27 @@ class Loader:
                     file_path=file_path,
                     mime_type=file_content_type,
                 )
+        elif (
+            self.engine == "document_intelligence"
+            and self.kwargs.get("DOCUMENT_INTELLIGENCE_ENDPOINT") != ""
+            and self.kwargs.get("DOCUMENT_INTELLIGENCE_KEY") != ""
+            and (
+                file_ext in ["pdf", "xls", "xlsx", "docx", "ppt", "pptx"]
+                or file_content_type
+                in [
+                    "application/vnd.ms-excel",
+                    "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
+                    "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
+                    "application/vnd.ms-powerpoint",
+                    "application/vnd.openxmlformats-officedocument.presentationml.presentation",
+                ]
+            )
+        ):
+            loader = AzureAIDocumentIntelligenceLoader(
+                file_path=file_path,
+                api_endpoint=self.kwargs.get("DOCUMENT_INTELLIGENCE_ENDPOINT"),
+                api_key=self.kwargs.get("DOCUMENT_INTELLIGENCE_KEY"),
+            )
         else:
             if file_ext == "pdf":
                 loader = PyPDFLoader(

+ 7 - 1
backend/open_webui/retrieval/models/colbert.py

@@ -1,13 +1,19 @@
 import os
+import logging
 import torch
 import numpy as np
 from colbert.infra import ColBERTConfig
 from colbert.modeling.checkpoint import Checkpoint
 
+from open_webui.env import SRC_LOG_LEVELS
+
+log = logging.getLogger(__name__)
+log.setLevel(SRC_LOG_LEVELS["RAG"])
+
 
 class ColBERT:
     def __init__(self, name, **kwargs) -> None:
-        print("ColBERT: Loading model", name)
+        log.info("ColBERT: Loading model", name)
         self.device = "cuda" if torch.cuda.is_available() else "cpu"
 
         DOCKER = kwargs.get("env") == "docker"

+ 4 - 4
backend/open_webui/retrieval/utils.py

@@ -81,7 +81,7 @@ def query_doc(
 
         return result
     except Exception as e:
-        print(e)
+        log.exception(f"Error querying doc {collection_name} with limit {k}: {e}")
         raise e
 
 
@@ -94,7 +94,7 @@ def get_doc(collection_name: str, user: UserModel = None):
 
         return result
     except Exception as e:
-        print(e)
+        log.exception(f"Error getting doc {collection_name}: {e}")
         raise e
 
 
@@ -530,7 +530,7 @@ def generate_openai_batch_embeddings(
         else:
             raise "Something went wrong :/"
     except Exception as e:
-        print(e)
+        log.exception(f"Error generating openai batch embeddings: {e}")
         return None
 
 
@@ -564,7 +564,7 @@ def generate_ollama_batch_embeddings(
         else:
             raise "Something went wrong :/"
     except Exception as e:
-        print(e)
+        log.exception(f"Error generating ollama batch embeddings: {e}")
         return None
 
 

+ 6 - 1
backend/open_webui/retrieval/vector/dbs/chroma.py

@@ -1,4 +1,5 @@
 import chromadb
+import logging
 from chromadb import Settings
 from chromadb.utils.batch_utils import create_batches
 
@@ -16,6 +17,10 @@ from open_webui.config import (
     CHROMA_CLIENT_AUTH_PROVIDER,
     CHROMA_CLIENT_AUTH_CREDENTIALS,
 )
+from open_webui.env import SRC_LOG_LEVELS
+
+log = logging.getLogger(__name__)
+log.setLevel(SRC_LOG_LEVELS["RAG"])
 
 
 class ChromaClient:
@@ -103,7 +108,7 @@ class ChromaClient:
                 )
             return None
         except Exception as e:
-            print(e)
+            log.exception(f"Error querying collection {collection} with limit {limit}: {e}")
             return None
 
     def get(self, collection_name: str) -> Optional[GetResult]:

+ 8 - 4
backend/open_webui/retrieval/vector/dbs/milvus.py

@@ -1,7 +1,7 @@
 from pymilvus import MilvusClient as Client
 from pymilvus import FieldSchema, DataType
 import json
-
+import logging
 from typing import Optional
 
 from open_webui.retrieval.vector.main import VectorItem, SearchResult, GetResult
@@ -10,6 +10,10 @@ from open_webui.config import (
     MILVUS_DB,
     MILVUS_TOKEN,
 )
+from open_webui.env import SRC_LOG_LEVELS
+
+log = logging.getLogger(__name__)
+log.setLevel(SRC_LOG_LEVELS["RAG"])
 
 
 class MilvusClient:
@@ -168,7 +172,7 @@ class MilvusClient:
         try:
             # Loop until there are no more items to fetch or the desired limit is reached
             while remaining > 0:
-                print("remaining", remaining)
+                log.info(f"remaining: {remaining}")
                 current_fetch = min(
                     max_limit, remaining
                 )  # Determine how many items to fetch in this iteration
@@ -195,10 +199,10 @@ class MilvusClient:
                 if results_count < current_fetch:
                     break
 
-            print(all_results)
+            log.debug(all_results)
             return self._result_to_get_result([all_results])
         except Exception as e:
-            print(e)
+            log.exception(f"Error querying collection {collection_name} with limit {limit}: {e}")
             return None
 
     def get(self, collection_name: str) -> Optional[GetResult]:

+ 21 - 15
backend/open_webui/retrieval/vector/dbs/pgvector.py

@@ -1,4 +1,5 @@
 from typing import Optional, List, Dict, Any
+import logging
 from sqlalchemy import (
     cast,
     column,
@@ -24,9 +25,14 @@ from sqlalchemy.exc import NoSuchTableError
 from open_webui.retrieval.vector.main import VectorItem, SearchResult, GetResult
 from open_webui.config import PGVECTOR_DB_URL, PGVECTOR_INITIALIZE_MAX_VECTOR_LENGTH
 
+from open_webui.env import SRC_LOG_LEVELS
+
 VECTOR_LENGTH = PGVECTOR_INITIALIZE_MAX_VECTOR_LENGTH
 Base = declarative_base()
 
+log = logging.getLogger(__name__)
+log.setLevel(SRC_LOG_LEVELS["RAG"])
+
 
 class DocumentChunk(Base):
     __tablename__ = "document_chunk"
@@ -82,10 +88,10 @@ class PgvectorClient:
                 )
             )
             self.session.commit()
-            print("Initialization complete.")
+            log.info("Initialization complete.")
         except Exception as e:
             self.session.rollback()
-            print(f"Error during initialization: {e}")
+            log.exception(f"Error during initialization: {e}")
             raise
 
     def check_vector_length(self) -> None:
@@ -150,12 +156,12 @@ class PgvectorClient:
                 new_items.append(new_chunk)
             self.session.bulk_save_objects(new_items)
             self.session.commit()
-            print(
+            log.info(
                 f"Inserted {len(new_items)} items into collection '{collection_name}'."
             )
         except Exception as e:
             self.session.rollback()
-            print(f"Error during insert: {e}")
+            log.exception(f"Error during insert: {e}")
             raise
 
     def upsert(self, collection_name: str, items: List[VectorItem]) -> None:
@@ -184,10 +190,10 @@ class PgvectorClient:
                     )
                     self.session.add(new_chunk)
             self.session.commit()
-            print(f"Upserted {len(items)} items into collection '{collection_name}'.")
+            log.info(f"Upserted {len(items)} items into collection '{collection_name}'.")
         except Exception as e:
             self.session.rollback()
-            print(f"Error during upsert: {e}")
+            log.exception(f"Error during upsert: {e}")
             raise
 
     def search(
@@ -278,7 +284,7 @@ class PgvectorClient:
                 ids=ids, distances=distances, documents=documents, metadatas=metadatas
             )
         except Exception as e:
-            print(f"Error during search: {e}")
+            log.exception(f"Error during search: {e}")
             return None
 
     def query(
@@ -310,7 +316,7 @@ class PgvectorClient:
                 metadatas=metadatas,
             )
         except Exception as e:
-            print(f"Error during query: {e}")
+            log.exception(f"Error during query: {e}")
             return None
 
     def get(
@@ -334,7 +340,7 @@ class PgvectorClient:
 
             return GetResult(ids=ids, documents=documents, metadatas=metadatas)
         except Exception as e:
-            print(f"Error during get: {e}")
+            log.exception(f"Error during get: {e}")
             return None
 
     def delete(
@@ -356,22 +362,22 @@ class PgvectorClient:
                     )
             deleted = query.delete(synchronize_session=False)
             self.session.commit()
-            print(f"Deleted {deleted} items from collection '{collection_name}'.")
+            log.info(f"Deleted {deleted} items from collection '{collection_name}'.")
         except Exception as e:
             self.session.rollback()
-            print(f"Error during delete: {e}")
+            log.exception(f"Error during delete: {e}")
             raise
 
     def reset(self) -> None:
         try:
             deleted = self.session.query(DocumentChunk).delete()
             self.session.commit()
-            print(
+            log.info(
                 f"Reset complete. Deleted {deleted} items from 'document_chunk' table."
             )
         except Exception as e:
             self.session.rollback()
-            print(f"Error during reset: {e}")
+            log.exception(f"Error during reset: {e}")
             raise
 
     def close(self) -> None:
@@ -387,9 +393,9 @@ class PgvectorClient:
             )
             return exists
         except Exception as e:
-            print(f"Error checking collection existence: {e}")
+            log.exception(f"Error checking collection existence: {e}")
             return False
 
     def delete_collection(self, collection_name: str) -> None:
         self.delete(collection_name)
-        print(f"Collection '{collection_name}' deleted.")
+        log.info(f"Collection '{collection_name}' deleted.")

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

@@ -1,4 +1,5 @@
 from typing import Optional
+import logging
 
 from qdrant_client import QdrantClient as Qclient
 from qdrant_client.http.models import PointStruct
@@ -6,9 +7,13 @@ from qdrant_client.models import models
 
 from open_webui.retrieval.vector.main import VectorItem, SearchResult, GetResult
 from open_webui.config import QDRANT_URI, QDRANT_API_KEY
+from open_webui.env import SRC_LOG_LEVELS
 
 NO_LIMIT = 999999999
 
+log = logging.getLogger(__name__)
+log.setLevel(SRC_LOG_LEVELS["RAG"])
+
 
 class QdrantClient:
     def __init__(self):
@@ -49,7 +54,7 @@ class QdrantClient:
             ),
         )
 
-        print(f"collection {collection_name_with_prefix} successfully created!")
+        log.info(f"collection {collection_name_with_prefix} successfully created!")
 
     def _create_collection_if_not_exists(self, collection_name, dimension):
         if not self.has_collection(collection_name=collection_name):
@@ -120,7 +125,7 @@ class QdrantClient:
             )
             return self._result_to_get_result(points.points)
         except Exception as e:
-            print(e)
+            log.exception(f"Error querying a collection '{collection_name}': {e}")
             return None
 
     def get(self, collection_name: str) -> Optional[GetResult]:

+ 50 - 13
backend/open_webui/routers/audio.py

@@ -71,7 +71,7 @@ from pydub.utils import mediainfo
 def is_mp4_audio(file_path):
     """Check if the given file is an MP4 audio file."""
     if not os.path.isfile(file_path):
-        print(f"File not found: {file_path}")
+        log.error(f"File not found: {file_path}")
         return False
 
     info = mediainfo(file_path)
@@ -88,7 +88,7 @@ def convert_mp4_to_wav(file_path, output_path):
     """Convert MP4 audio file to WAV format."""
     audio = AudioSegment.from_file(file_path, format="mp4")
     audio.export(output_path, format="wav")
-    print(f"Converted {file_path} to {output_path}")
+    log.info(f"Converted {file_path} to {output_path}")
 
 
 def set_faster_whisper_model(model: str, auto_update: bool = False):
@@ -266,7 +266,6 @@ async def speech(request: Request, user=Depends(get_verified_user)):
         payload["model"] = request.app.state.config.TTS_MODEL
 
         try:
-            # print(payload)
             timeout = aiohttp.ClientTimeout(total=AIOHTTP_CLIENT_TIMEOUT)
             async with aiohttp.ClientSession(
                 timeout=timeout, trust_env=True
@@ -468,7 +467,7 @@ async def speech(request: Request, user=Depends(get_verified_user)):
 
 
 def transcribe(request: Request, file_path):
-    print("transcribe", file_path)
+    log.info(f"transcribe: {file_path}")
     filename = os.path.basename(file_path)
     file_dir = os.path.dirname(file_path)
     id = filename.split(".")[0]
@@ -680,7 +679,22 @@ def transcription(
 def get_available_models(request: Request) -> list[dict]:
     available_models = []
     if request.app.state.config.TTS_ENGINE == "openai":
-        available_models = [{"id": "tts-1"}, {"id": "tts-1-hd"}]
+        # Use custom endpoint if not using the official OpenAI API URL
+        if not request.app.state.config.TTS_OPENAI_API_BASE_URL.startswith(
+            "https://api.openai.com"
+        ):
+            try:
+                response = requests.get(
+                    f"{request.app.state.config.TTS_OPENAI_API_BASE_URL}/audio/models"
+                )
+                response.raise_for_status()
+                data = response.json()
+                available_models = data.get("models", [])
+            except Exception as e:
+                log.error(f"Error fetching models from custom endpoint: {str(e)}")
+                available_models = [{"id": "tts-1"}, {"id": "tts-1-hd"}]
+        else:
+            available_models = [{"id": "tts-1"}, {"id": "tts-1-hd"}]
     elif request.app.state.config.TTS_ENGINE == "elevenlabs":
         try:
             response = requests.get(
@@ -711,14 +725,37 @@ def get_available_voices(request) -> dict:
     """Returns {voice_id: voice_name} dict"""
     available_voices = {}
     if request.app.state.config.TTS_ENGINE == "openai":
-        available_voices = {
-            "alloy": "alloy",
-            "echo": "echo",
-            "fable": "fable",
-            "onyx": "onyx",
-            "nova": "nova",
-            "shimmer": "shimmer",
-        }
+        # Use custom endpoint if not using the official OpenAI API URL
+        if not request.app.state.config.TTS_OPENAI_API_BASE_URL.startswith(
+            "https://api.openai.com"
+        ):
+            try:
+                response = requests.get(
+                    f"{request.app.state.config.TTS_OPENAI_API_BASE_URL}/audio/voices"
+                )
+                response.raise_for_status()
+                data = response.json()
+                voices_list = data.get("voices", [])
+                available_voices = {voice["id"]: voice["name"] for voice in voices_list}
+            except Exception as e:
+                log.error(f"Error fetching voices from custom endpoint: {str(e)}")
+                available_voices = {
+                    "alloy": "alloy",
+                    "echo": "echo",
+                    "fable": "fable",
+                    "onyx": "onyx",
+                    "nova": "nova",
+                    "shimmer": "shimmer",
+                }
+        else:
+            available_voices = {
+                "alloy": "alloy",
+                "echo": "echo",
+                "fable": "fable",
+                "onyx": "onyx",
+                "nova": "nova",
+                "shimmer": "shimmer",
+            }
     elif request.app.state.config.TTS_ENGINE == "elevenlabs":
         try:
             available_voices = get_elevenlabs_voices(

+ 1 - 14
backend/open_webui/routers/auths.py

@@ -252,14 +252,6 @@ async def ldap_auth(request: Request, response: Response, form_data: LdapForm):
             if not user:
                 try:
                     user_count = Users.get_num_users()
-                    if (
-                        request.app.state.USER_COUNT
-                        and user_count >= request.app.state.USER_COUNT
-                    ):
-                        raise HTTPException(
-                            status.HTTP_403_FORBIDDEN,
-                            detail=ERROR_MESSAGES.ACCESS_PROHIBITED,
-                        )
 
                     role = (
                         "admin"
@@ -439,11 +431,6 @@ async def signup(request: Request, response: Response, form_data: SignupForm):
             )
 
     user_count = Users.get_num_users()
-    if request.app.state.USER_COUNT and user_count >= request.app.state.USER_COUNT:
-        raise HTTPException(
-            status.HTTP_403_FORBIDDEN, detail=ERROR_MESSAGES.ACCESS_PROHIBITED
-        )
-
     if not validate_email_format(form_data.email.lower()):
         raise HTTPException(
             status.HTTP_400_BAD_REQUEST, detail=ERROR_MESSAGES.INVALID_EMAIL_FORMAT
@@ -613,7 +600,7 @@ async def get_admin_details(request: Request, user=Depends(get_current_user)):
         admin_email = request.app.state.config.ADMIN_EMAIL
         admin_name = None
 
-        print(admin_email, admin_name)
+        log.info(f"Admin details - Email: {admin_email}, Name: {admin_name}")
 
         if admin_email:
             admin = Users.get_user_by_email(admin_email)

+ 1 - 1
backend/open_webui/routers/files.py

@@ -273,7 +273,7 @@ async def get_html_file_content_by_id(id: str, user=Depends(get_verified_user)):
 
             # Check if the file already exists in the cache
             if file_path.is_file():
-                print(f"file_path: {file_path}")
+                log.info(f"file_path: {file_path}")
                 return FileResponse(file_path)
             else:
                 raise HTTPException(

+ 10 - 4
backend/open_webui/routers/functions.py

@@ -1,4 +1,5 @@
 import os
+import logging
 from pathlib import Path
 from typing import Optional
 
@@ -13,6 +14,11 @@ from open_webui.config import CACHE_DIR
 from open_webui.constants import ERROR_MESSAGES
 from fastapi import APIRouter, Depends, HTTPException, Request, status
 from open_webui.utils.auth import get_admin_user, get_verified_user
+from open_webui.env import SRC_LOG_LEVELS
+
+log = logging.getLogger(__name__)
+log.setLevel(SRC_LOG_LEVELS["MAIN"])
+
 
 router = APIRouter()
 
@@ -79,7 +85,7 @@ async def create_new_function(
                     detail=ERROR_MESSAGES.DEFAULT("Error creating function"),
                 )
         except Exception as e:
-            print(e)
+            log.exception(f"Failed to create a new function: {e}")
             raise HTTPException(
                 status_code=status.HTTP_400_BAD_REQUEST,
                 detail=ERROR_MESSAGES.DEFAULT(e),
@@ -183,7 +189,7 @@ async def update_function_by_id(
         FUNCTIONS[id] = function_module
 
         updated = {**form_data.model_dump(exclude={"id"}), "type": function_type}
-        print(updated)
+        log.debug(updated)
 
         function = Functions.update_function_by_id(id, updated)
 
@@ -299,7 +305,7 @@ async def update_function_valves_by_id(
                 Functions.update_function_valves_by_id(id, valves.model_dump())
                 return valves.model_dump()
             except Exception as e:
-                print(e)
+                log.exception(f"Error updating function values by id {id}: {e}")
                 raise HTTPException(
                     status_code=status.HTTP_400_BAD_REQUEST,
                     detail=ERROR_MESSAGES.DEFAULT(e),
@@ -388,7 +394,7 @@ async def update_function_user_valves_by_id(
                 )
                 return user_valves.model_dump()
             except Exception as e:
-                print(e)
+                log.exception(f"Error updating function user valves by id {id}: {e}")
                 raise HTTPException(
                     status_code=status.HTTP_400_BAD_REQUEST,
                     detail=ERROR_MESSAGES.DEFAULT(e),

+ 11 - 5
backend/open_webui/routers/groups.py

@@ -1,7 +1,7 @@
 import os
 from pathlib import Path
 from typing import Optional
-
+import logging
 
 from open_webui.models.users import Users
 from open_webui.models.groups import (
@@ -14,7 +14,13 @@ from open_webui.models.groups import (
 from open_webui.config import CACHE_DIR
 from open_webui.constants import ERROR_MESSAGES
 from fastapi import APIRouter, Depends, HTTPException, Request, status
+
 from open_webui.utils.auth import get_admin_user, get_verified_user
+from open_webui.env import SRC_LOG_LEVELS
+
+
+log = logging.getLogger(__name__)
+log.setLevel(SRC_LOG_LEVELS["MAIN"])
 
 router = APIRouter()
 
@@ -37,7 +43,7 @@ async def get_groups(user=Depends(get_verified_user)):
 
 
 @router.post("/create", response_model=Optional[GroupResponse])
-async def create_new_function(form_data: GroupForm, user=Depends(get_admin_user)):
+async def create_new_group(form_data: GroupForm, user=Depends(get_admin_user)):
     try:
         group = Groups.insert_new_group(user.id, form_data)
         if group:
@@ -48,7 +54,7 @@ async def create_new_function(form_data: GroupForm, user=Depends(get_admin_user)
                 detail=ERROR_MESSAGES.DEFAULT("Error creating group"),
             )
     except Exception as e:
-        print(e)
+        log.exception(f"Error creating a new group: {e}")
         raise HTTPException(
             status_code=status.HTTP_400_BAD_REQUEST,
             detail=ERROR_MESSAGES.DEFAULT(e),
@@ -94,7 +100,7 @@ async def update_group_by_id(
                 detail=ERROR_MESSAGES.DEFAULT("Error updating group"),
             )
     except Exception as e:
-        print(e)
+        log.exception(f"Error updating group {id}: {e}")
         raise HTTPException(
             status_code=status.HTTP_400_BAD_REQUEST,
             detail=ERROR_MESSAGES.DEFAULT(e),
@@ -118,7 +124,7 @@ async def delete_group_by_id(id: str, user=Depends(get_admin_user)):
                 detail=ERROR_MESSAGES.DEFAULT("Error deleting group"),
             )
     except Exception as e:
-        print(e)
+        log.exception(f"Error deleting group {id}: {e}")
         raise HTTPException(
             status_code=status.HTTP_400_BAD_REQUEST,
             detail=ERROR_MESSAGES.DEFAULT(e),

+ 1 - 1
backend/open_webui/routers/images.py

@@ -351,7 +351,7 @@ def get_models(request: Request, user=Depends(get_verified_user)):
             if model_node_id:
                 model_list_key = None
 
-                print(workflow[model_node_id]["class_type"])
+                log.info(workflow[model_node_id]["class_type"])
                 for key in info[workflow[model_node_id]["class_type"]]["input"][
                     "required"
                 ]:

+ 1 - 1
backend/open_webui/routers/knowledge.py

@@ -614,7 +614,7 @@ def add_files_to_knowledge_batch(
         )
 
     # Get files content
-    print(f"files/batch/add - {len(form_data)} files")
+    log.info(f"files/batch/add - {len(form_data)} files")
     files: List[FileModel] = []
     for form in form_data:
         file = Files.get_file_by_id(form.file_id)

+ 130 - 16
backend/open_webui/routers/ollama.py

@@ -14,6 +14,11 @@ from urllib.parse import urlparse
 import aiohttp
 from aiocache import cached
 import requests
+from open_webui.models.users import UserModel
+
+from open_webui.env import (
+    ENABLE_FORWARD_USER_INFO_HEADERS,
+)
 
 from fastapi import (
     Depends,
@@ -66,12 +71,26 @@ log.setLevel(SRC_LOG_LEVELS["OLLAMA"])
 ##########################################
 
 
-async def send_get_request(url, key=None):
+async def send_get_request(url, key=None, user: UserModel = None):
     timeout = aiohttp.ClientTimeout(total=AIOHTTP_CLIENT_TIMEOUT_OPENAI_MODEL_LIST)
     try:
         async with aiohttp.ClientSession(timeout=timeout, trust_env=True) as session:
             async with session.get(
-                url, headers={**({"Authorization": f"Bearer {key}"} if key else {})}
+                url,
+                headers={
+                    "Content-Type": "application/json",
+                    **({"Authorization": f"Bearer {key}"} if key else {}),
+                    **(
+                        {
+                            "X-OpenWebUI-User-Name": user.name,
+                            "X-OpenWebUI-User-Id": user.id,
+                            "X-OpenWebUI-User-Email": user.email,
+                            "X-OpenWebUI-User-Role": user.role,
+                        }
+                        if ENABLE_FORWARD_USER_INFO_HEADERS and user
+                        else {}
+                    ),
+                },
             ) as response:
                 return await response.json()
     except Exception as e:
@@ -96,6 +115,7 @@ async def send_post_request(
     stream: bool = True,
     key: Optional[str] = None,
     content_type: Optional[str] = None,
+    user: UserModel = None,
 ):
 
     r = None
@@ -110,6 +130,16 @@ async def send_post_request(
             headers={
                 "Content-Type": "application/json",
                 **({"Authorization": f"Bearer {key}"} if key else {}),
+                **(
+                    {
+                        "X-OpenWebUI-User-Name": user.name,
+                        "X-OpenWebUI-User-Id": user.id,
+                        "X-OpenWebUI-User-Email": user.email,
+                        "X-OpenWebUI-User-Role": user.role,
+                    }
+                    if ENABLE_FORWARD_USER_INFO_HEADERS and user
+                    else {}
+                ),
             },
         )
         r.raise_for_status()
@@ -191,7 +221,19 @@ async def verify_connection(
         try:
             async with session.get(
                 f"{url}/api/version",
-                headers={**({"Authorization": f"Bearer {key}"} if key else {})},
+                headers={
+                    **({"Authorization": f"Bearer {key}"} if key else {}),
+                    **(
+                        {
+                            "X-OpenWebUI-User-Name": user.name,
+                            "X-OpenWebUI-User-Id": user.id,
+                            "X-OpenWebUI-User-Email": user.email,
+                            "X-OpenWebUI-User-Role": user.role,
+                        }
+                        if ENABLE_FORWARD_USER_INFO_HEADERS and user
+                        else {}
+                    ),
+                },
             ) as r:
                 if r.status != 200:
                     detail = f"HTTP Error: {r.status}"
@@ -254,7 +296,7 @@ async def update_config(
 
 
 @cached(ttl=3)
-async def get_all_models(request: Request):
+async def get_all_models(request: Request, user: UserModel = None):
     log.info("get_all_models()")
     if request.app.state.config.ENABLE_OLLAMA_API:
         request_tasks = []
@@ -262,7 +304,7 @@ async def get_all_models(request: Request):
             if (str(idx) not in request.app.state.config.OLLAMA_API_CONFIGS) and (
                 url not in request.app.state.config.OLLAMA_API_CONFIGS  # Legacy support
             ):
-                request_tasks.append(send_get_request(f"{url}/api/tags"))
+                request_tasks.append(send_get_request(f"{url}/api/tags", user=user))
             else:
                 api_config = request.app.state.config.OLLAMA_API_CONFIGS.get(
                     str(idx),
@@ -275,7 +317,9 @@ async def get_all_models(request: Request):
                 key = api_config.get("key", None)
 
                 if enable:
-                    request_tasks.append(send_get_request(f"{url}/api/tags", key))
+                    request_tasks.append(
+                        send_get_request(f"{url}/api/tags", key, user=user)
+                    )
                 else:
                     request_tasks.append(asyncio.ensure_future(asyncio.sleep(0, None)))
 
@@ -360,7 +404,7 @@ async def get_ollama_tags(
     models = []
 
     if url_idx is None:
-        models = await get_all_models(request)
+        models = await get_all_models(request, user=user)
     else:
         url = request.app.state.config.OLLAMA_BASE_URLS[url_idx]
         key = get_api_key(url_idx, url, request.app.state.config.OLLAMA_API_CONFIGS)
@@ -370,7 +414,19 @@ async def get_ollama_tags(
             r = requests.request(
                 method="GET",
                 url=f"{url}/api/tags",
-                headers={**({"Authorization": f"Bearer {key}"} if key else {})},
+                headers={
+                    **({"Authorization": f"Bearer {key}"} if key else {}),
+                    **(
+                        {
+                            "X-OpenWebUI-User-Name": user.name,
+                            "X-OpenWebUI-User-Id": user.id,
+                            "X-OpenWebUI-User-Email": user.email,
+                            "X-OpenWebUI-User-Role": user.role,
+                        }
+                        if ENABLE_FORWARD_USER_INFO_HEADERS and user
+                        else {}
+                    ),
+                },
             )
             r.raise_for_status()
 
@@ -477,6 +533,7 @@ async def get_ollama_loaded_models(request: Request, user=Depends(get_verified_u
                         url, {}
                     ),  # Legacy support
                 ).get("key", None),
+                user=user,
             )
             for idx, url in enumerate(request.app.state.config.OLLAMA_BASE_URLS)
         ]
@@ -509,6 +566,7 @@ async def pull_model(
         url=f"{url}/api/pull",
         payload=json.dumps(payload),
         key=get_api_key(url_idx, url, request.app.state.config.OLLAMA_API_CONFIGS),
+        user=user,
     )
 
 
@@ -527,7 +585,7 @@ async def push_model(
     user=Depends(get_admin_user),
 ):
     if url_idx is None:
-        await get_all_models(request)
+        await get_all_models(request, user=user)
         models = request.app.state.OLLAMA_MODELS
 
         if form_data.name in models:
@@ -545,6 +603,7 @@ async def push_model(
         url=f"{url}/api/push",
         payload=form_data.model_dump_json(exclude_none=True).encode(),
         key=get_api_key(url_idx, url, request.app.state.config.OLLAMA_API_CONFIGS),
+        user=user,
     )
 
 
@@ -571,6 +630,7 @@ async def create_model(
         url=f"{url}/api/create",
         payload=form_data.model_dump_json(exclude_none=True).encode(),
         key=get_api_key(url_idx, url, request.app.state.config.OLLAMA_API_CONFIGS),
+        user=user,
     )
 
 
@@ -588,7 +648,7 @@ async def copy_model(
     user=Depends(get_admin_user),
 ):
     if url_idx is None:
-        await get_all_models(request)
+        await get_all_models(request, user=user)
         models = request.app.state.OLLAMA_MODELS
 
         if form_data.source in models:
@@ -609,6 +669,16 @@ async def copy_model(
             headers={
                 "Content-Type": "application/json",
                 **({"Authorization": f"Bearer {key}"} if key else {}),
+                **(
+                    {
+                        "X-OpenWebUI-User-Name": user.name,
+                        "X-OpenWebUI-User-Id": user.id,
+                        "X-OpenWebUI-User-Email": user.email,
+                        "X-OpenWebUI-User-Role": user.role,
+                    }
+                    if ENABLE_FORWARD_USER_INFO_HEADERS and user
+                    else {}
+                ),
             },
             data=form_data.model_dump_json(exclude_none=True).encode(),
         )
@@ -643,7 +713,7 @@ async def delete_model(
     user=Depends(get_admin_user),
 ):
     if url_idx is None:
-        await get_all_models(request)
+        await get_all_models(request, user=user)
         models = request.app.state.OLLAMA_MODELS
 
         if form_data.name in models:
@@ -665,6 +735,16 @@ async def delete_model(
             headers={
                 "Content-Type": "application/json",
                 **({"Authorization": f"Bearer {key}"} if key else {}),
+                **(
+                    {
+                        "X-OpenWebUI-User-Name": user.name,
+                        "X-OpenWebUI-User-Id": user.id,
+                        "X-OpenWebUI-User-Email": user.email,
+                        "X-OpenWebUI-User-Role": user.role,
+                    }
+                    if ENABLE_FORWARD_USER_INFO_HEADERS and user
+                    else {}
+                ),
             },
         )
         r.raise_for_status()
@@ -693,7 +773,7 @@ async def delete_model(
 async def show_model_info(
     request: Request, form_data: ModelNameForm, user=Depends(get_verified_user)
 ):
-    await get_all_models(request)
+    await get_all_models(request, user=user)
     models = request.app.state.OLLAMA_MODELS
 
     if form_data.name not in models:
@@ -714,6 +794,16 @@ async def show_model_info(
             headers={
                 "Content-Type": "application/json",
                 **({"Authorization": f"Bearer {key}"} if key else {}),
+                **(
+                    {
+                        "X-OpenWebUI-User-Name": user.name,
+                        "X-OpenWebUI-User-Id": user.id,
+                        "X-OpenWebUI-User-Email": user.email,
+                        "X-OpenWebUI-User-Role": user.role,
+                    }
+                    if ENABLE_FORWARD_USER_INFO_HEADERS and user
+                    else {}
+                ),
             },
             data=form_data.model_dump_json(exclude_none=True).encode(),
         )
@@ -757,7 +847,7 @@ async def embed(
     log.info(f"generate_ollama_batch_embeddings {form_data}")
 
     if url_idx is None:
-        await get_all_models(request)
+        await get_all_models(request, user=user)
         models = request.app.state.OLLAMA_MODELS
 
         model = form_data.model
@@ -783,6 +873,16 @@ async def embed(
             headers={
                 "Content-Type": "application/json",
                 **({"Authorization": f"Bearer {key}"} if key else {}),
+                **(
+                    {
+                        "X-OpenWebUI-User-Name": user.name,
+                        "X-OpenWebUI-User-Id": user.id,
+                        "X-OpenWebUI-User-Email": user.email,
+                        "X-OpenWebUI-User-Role": user.role,
+                    }
+                    if ENABLE_FORWARD_USER_INFO_HEADERS and user
+                    else {}
+                ),
             },
             data=form_data.model_dump_json(exclude_none=True).encode(),
         )
@@ -826,7 +926,7 @@ async def embeddings(
     log.info(f"generate_ollama_embeddings {form_data}")
 
     if url_idx is None:
-        await get_all_models(request)
+        await get_all_models(request, user=user)
         models = request.app.state.OLLAMA_MODELS
 
         model = form_data.model
@@ -852,6 +952,16 @@ async def embeddings(
             headers={
                 "Content-Type": "application/json",
                 **({"Authorization": f"Bearer {key}"} if key else {}),
+                **(
+                    {
+                        "X-OpenWebUI-User-Name": user.name,
+                        "X-OpenWebUI-User-Id": user.id,
+                        "X-OpenWebUI-User-Email": user.email,
+                        "X-OpenWebUI-User-Role": user.role,
+                    }
+                    if ENABLE_FORWARD_USER_INFO_HEADERS and user
+                    else {}
+                ),
             },
             data=form_data.model_dump_json(exclude_none=True).encode(),
         )
@@ -901,7 +1011,7 @@ async def generate_completion(
     user=Depends(get_verified_user),
 ):
     if url_idx is None:
-        await get_all_models(request)
+        await get_all_models(request, user=user)
         models = request.app.state.OLLAMA_MODELS
 
         model = form_data.model
@@ -931,6 +1041,7 @@ async def generate_completion(
         url=f"{url}/api/generate",
         payload=form_data.model_dump_json(exclude_none=True).encode(),
         key=get_api_key(url_idx, url, request.app.state.config.OLLAMA_API_CONFIGS),
+        user=user,
     )
 
 
@@ -1060,6 +1171,7 @@ async def generate_chat_completion(
         stream=form_data.stream,
         key=get_api_key(url_idx, url, request.app.state.config.OLLAMA_API_CONFIGS),
         content_type="application/x-ndjson",
+        user=user,
     )
 
 
@@ -1162,6 +1274,7 @@ async def generate_openai_completion(
         payload=json.dumps(payload),
         stream=payload.get("stream", False),
         key=get_api_key(url_idx, url, request.app.state.config.OLLAMA_API_CONFIGS),
+        user=user,
     )
 
 
@@ -1240,6 +1353,7 @@ async def generate_openai_chat_completion(
         payload=json.dumps(payload),
         stream=payload.get("stream", False),
         key=get_api_key(url_idx, url, request.app.state.config.OLLAMA_API_CONFIGS),
+        user=user,
     )
 
 
@@ -1253,7 +1367,7 @@ async def get_openai_models(
 
     models = []
     if url_idx is None:
-        model_list = await get_all_models(request)
+        model_list = await get_all_models(request, user=user)
         models = [
             {
                 "id": model["model"],

+ 44 - 11
backend/open_webui/routers/openai.py

@@ -26,6 +26,7 @@ from open_webui.env import (
     ENABLE_FORWARD_USER_INFO_HEADERS,
     BYPASS_MODEL_ACCESS_CONTROL,
 )
+from open_webui.models.users import UserModel
 
 from open_webui.constants import ERROR_MESSAGES
 from open_webui.env import ENV, SRC_LOG_LEVELS
@@ -51,12 +52,25 @@ log.setLevel(SRC_LOG_LEVELS["OPENAI"])
 ##########################################
 
 
-async def send_get_request(url, key=None):
+async def send_get_request(url, key=None, user: UserModel = None):
     timeout = aiohttp.ClientTimeout(total=AIOHTTP_CLIENT_TIMEOUT_OPENAI_MODEL_LIST)
     try:
         async with aiohttp.ClientSession(timeout=timeout, trust_env=True) as session:
             async with session.get(
-                url, headers={**({"Authorization": f"Bearer {key}"} if key else {})}
+                url,
+                headers={
+                    **({"Authorization": f"Bearer {key}"} if key else {}),
+                    **(
+                        {
+                            "X-OpenWebUI-User-Name": user.name,
+                            "X-OpenWebUI-User-Id": user.id,
+                            "X-OpenWebUI-User-Email": user.email,
+                            "X-OpenWebUI-User-Role": user.role,
+                        }
+                        if ENABLE_FORWARD_USER_INFO_HEADERS
+                        else {}
+                    ),
+                },
             ) as response:
                 return await response.json()
     except Exception as e:
@@ -84,9 +98,15 @@ def openai_o1_o3_handler(payload):
         payload["max_completion_tokens"] = payload["max_tokens"]
         del payload["max_tokens"]
 
-    # Fix: O1 does not support the "system" parameter, Modify "system" to "user"
+    # Fix: o1 and o3 do not support the "system" role directly.
+    # For older models like "o1-mini" or "o1-preview", use role "user".
+    # For newer o1/o3 models, replace "system" with "developer".
     if payload["messages"][0]["role"] == "system":
-        payload["messages"][0]["role"] = "user"
+        model_lower = payload["model"].lower()
+        if model_lower.startswith("o1-mini") or model_lower.startswith("o1-preview"):
+            payload["messages"][0]["role"] = "user"
+        else:
+            payload["messages"][0]["role"] = "developer"
 
     return payload
 
@@ -247,7 +267,7 @@ async def speech(request: Request, user=Depends(get_verified_user)):
         raise HTTPException(status_code=401, detail=ERROR_MESSAGES.OPENAI_NOT_FOUND)
 
 
-async def get_all_models_responses(request: Request) -> list:
+async def get_all_models_responses(request: Request, user: UserModel) -> list:
     if not request.app.state.config.ENABLE_OPENAI_API:
         return []
 
@@ -271,7 +291,9 @@ async def get_all_models_responses(request: Request) -> list:
         ):
             request_tasks.append(
                 send_get_request(
-                    f"{url}/models", request.app.state.config.OPENAI_API_KEYS[idx]
+                    f"{url}/models",
+                    request.app.state.config.OPENAI_API_KEYS[idx],
+                    user=user,
                 )
             )
         else:
@@ -291,6 +313,7 @@ async def get_all_models_responses(request: Request) -> list:
                         send_get_request(
                             f"{url}/models",
                             request.app.state.config.OPENAI_API_KEYS[idx],
+                            user=user,
                         )
                     )
                 else:
@@ -352,13 +375,13 @@ async def get_filtered_models(models, user):
 
 
 @cached(ttl=3)
-async def get_all_models(request: Request) -> dict[str, list]:
+async def get_all_models(request: Request, user: UserModel) -> dict[str, list]:
     log.info("get_all_models()")
 
     if not request.app.state.config.ENABLE_OPENAI_API:
         return {"data": []}
 
-    responses = await get_all_models_responses(request)
+    responses = await get_all_models_responses(request, user=user)
 
     def extract_data(response):
         if response and "data" in response:
@@ -418,7 +441,7 @@ async def get_models(
     }
 
     if url_idx is None:
-        models = await get_all_models(request)
+        models = await get_all_models(request, user=user)
     else:
         url = request.app.state.config.OPENAI_API_BASE_URLS[url_idx]
         key = request.app.state.config.OPENAI_API_KEYS[url_idx]
@@ -515,6 +538,16 @@ async def verify_connection(
                 headers={
                     "Authorization": f"Bearer {key}",
                     "Content-Type": "application/json",
+                    **(
+                        {
+                            "X-OpenWebUI-User-Name": user.name,
+                            "X-OpenWebUI-User-Id": user.id,
+                            "X-OpenWebUI-User-Email": user.email,
+                            "X-OpenWebUI-User-Role": user.role,
+                        }
+                        if ENABLE_FORWARD_USER_INFO_HEADERS
+                        else {}
+                    ),
                 },
             ) as r:
                 if r.status != 200:
@@ -587,7 +620,7 @@ async def generate_chat_completion(
                 detail="Model not found",
             )
 
-    await get_all_models(request)
+    await get_all_models(request, user=user)
     model = request.app.state.OPENAI_MODELS.get(model_id)
     if model:
         idx = model["urlIdx"]
@@ -777,7 +810,7 @@ async def proxy(path: str, request: Request, user=Depends(get_verified_user)):
         if r is not None:
             try:
                 res = await r.json()
-                print(res)
+                log.error(res)
                 if "error" in res:
                     detail = f"External: {res['error']['message'] if 'message' in res['error'] else res['error']}"
             except Exception:

+ 10 - 10
backend/open_webui/routers/pipelines.py

@@ -101,7 +101,7 @@ async def process_pipeline_inlet_filter(request, payload, user, models):
                 if "detail" in res:
                     raise Exception(response.status, res["detail"])
             except Exception as e:
-                print(f"Connection error: {e}")
+                log.exception(f"Connection error: {e}")
 
     return payload
 
@@ -153,7 +153,7 @@ async def process_pipeline_outlet_filter(request, payload, user, models):
                 except Exception:
                     pass
             except Exception as e:
-                print(f"Connection error: {e}")
+                log.exception(f"Connection error: {e}")
 
     return payload
 
@@ -196,7 +196,7 @@ async def upload_pipeline(
     file: UploadFile = File(...),
     user=Depends(get_admin_user),
 ):
-    print("upload_pipeline", urlIdx, file.filename)
+    log.info(f"upload_pipeline: urlIdx={urlIdx}, filename={file.filename}")
     # Check if the uploaded file is a python file
     if not (file.filename and file.filename.endswith(".py")):
         raise HTTPException(
@@ -231,7 +231,7 @@ async def upload_pipeline(
         return {**data}
     except Exception as e:
         # Handle connection error here
-        print(f"Connection error: {e}")
+        log.exception(f"Connection error: {e}")
 
         detail = None
         status_code = status.HTTP_404_NOT_FOUND
@@ -282,7 +282,7 @@ async def add_pipeline(
         return {**data}
     except Exception as e:
         # Handle connection error here
-        print(f"Connection error: {e}")
+        log.exception(f"Connection error: {e}")
 
         detail = None
         if r is not None:
@@ -327,7 +327,7 @@ async def delete_pipeline(
         return {**data}
     except Exception as e:
         # Handle connection error here
-        print(f"Connection error: {e}")
+        log.exception(f"Connection error: {e}")
 
         detail = None
         if r is not None:
@@ -361,7 +361,7 @@ async def get_pipelines(
         return {**data}
     except Exception as e:
         # Handle connection error here
-        print(f"Connection error: {e}")
+        log.exception(f"Connection error: {e}")
 
         detail = None
         if r is not None:
@@ -400,7 +400,7 @@ async def get_pipeline_valves(
         return {**data}
     except Exception as e:
         # Handle connection error here
-        print(f"Connection error: {e}")
+        log.exception(f"Connection error: {e}")
 
         detail = None
         if r is not None:
@@ -440,7 +440,7 @@ async def get_pipeline_valves_spec(
         return {**data}
     except Exception as e:
         # Handle connection error here
-        print(f"Connection error: {e}")
+        log.exception(f"Connection error: {e}")
 
         detail = None
         if r is not None:
@@ -482,7 +482,7 @@ async def update_pipeline_valves(
         return {**data}
     except Exception as e:
         # Handle connection error here
-        print(f"Connection error: {e}")
+        log.exception(f"Connection error: {e}")
 
         detail = None
 

+ 39 - 4
backend/open_webui/routers/retrieval.py

@@ -353,9 +353,14 @@ async def get_rag_config(request: Request, user=Depends(get_admin_user)):
         "pdf_extract_images": request.app.state.config.PDF_EXTRACT_IMAGES,
         "RAG_FULL_CONTEXT": request.app.state.config.RAG_FULL_CONTEXT,
         "enable_google_drive_integration": request.app.state.config.ENABLE_GOOGLE_DRIVE_INTEGRATION,
+        "enable_onedrive_integration": request.app.state.config.ENABLE_ONEDRIVE_INTEGRATION,
         "content_extraction": {
             "engine": request.app.state.config.CONTENT_EXTRACTION_ENGINE,
             "tika_server_url": request.app.state.config.TIKA_SERVER_URL,
+            "document_intelligence_config": {
+                "endpoint": request.app.state.config.DOCUMENT_INTELLIGENCE_ENDPOINT,
+                "key": request.app.state.config.DOCUMENT_INTELLIGENCE_KEY,
+            },
         },
         "chunk": {
             "text_splitter": request.app.state.config.TEXT_SPLITTER,
@@ -377,6 +382,7 @@ async def get_rag_config(request: Request, user=Depends(get_admin_user)):
             "search": {
                 "enabled": request.app.state.config.ENABLE_RAG_WEB_SEARCH,
                 "drive": request.app.state.config.ENABLE_GOOGLE_DRIVE_INTEGRATION,
+                "onedrive": request.app.state.config.ENABLE_ONEDRIVE_INTEGRATION,
                 "engine": request.app.state.config.RAG_WEB_SEARCH_ENGINE,
                 "searxng_query_url": request.app.state.config.SEARXNG_QUERY_URL,
                 "google_pse_api_key": request.app.state.config.GOOGLE_PSE_API_KEY,
@@ -399,6 +405,7 @@ async def get_rag_config(request: Request, user=Depends(get_admin_user)):
                 "bing_search_v7_subscription_key": request.app.state.config.BING_SEARCH_V7_SUBSCRIPTION_KEY,
                 "exa_api_key": request.app.state.config.EXA_API_KEY,
                 "result_count": request.app.state.config.RAG_WEB_SEARCH_RESULT_COUNT,
+                "trust_env": request.app.state.config.RAG_WEB_SEARCH_TRUST_ENV,
                 "concurrent_requests": request.app.state.config.RAG_WEB_SEARCH_CONCURRENT_REQUESTS,
                 "domain_filter_list": request.app.state.config.RAG_WEB_SEARCH_DOMAIN_FILTER_LIST,
             },
@@ -411,9 +418,15 @@ class FileConfig(BaseModel):
     max_count: Optional[int] = None
 
 
+class DocumentIntelligenceConfigForm(BaseModel):
+    endpoint: str
+    key: str
+
+
 class ContentExtractionConfig(BaseModel):
     engine: str = ""
     tika_server_url: Optional[str] = None
+    document_intelligence_config: Optional[DocumentIntelligenceConfigForm] = None
 
 
 class ChunkParamUpdateForm(BaseModel):
@@ -467,6 +480,7 @@ class ConfigUpdateForm(BaseModel):
     RAG_FULL_CONTEXT: Optional[bool] = None
     pdf_extract_images: Optional[bool] = None
     enable_google_drive_integration: Optional[bool] = None
+    enable_onedrive_integration: Optional[bool] = None
     file: Optional[FileConfig] = None
     content_extraction: Optional[ContentExtractionConfig] = None
     chunk: Optional[ChunkParamUpdateForm] = None
@@ -496,18 +510,33 @@ async def update_rag_config(
         else request.app.state.config.ENABLE_GOOGLE_DRIVE_INTEGRATION
     )
 
+    request.app.state.config.ENABLE_ONEDRIVE_INTEGRATION = (
+        form_data.enable_onedrive_integration
+        if form_data.enable_onedrive_integration is not None
+        else request.app.state.config.ENABLE_ONEDRIVE_INTEGRATION
+    )
+
     if form_data.file is not None:
         request.app.state.config.FILE_MAX_SIZE = form_data.file.max_size
         request.app.state.config.FILE_MAX_COUNT = form_data.file.max_count
 
     if form_data.content_extraction is not None:
-        log.info(f"Updating text settings: {form_data.content_extraction}")
+        log.info(
+            f"Updating content extraction: {request.app.state.config.CONTENT_EXTRACTION_ENGINE} to {form_data.content_extraction.engine}"
+        )
         request.app.state.config.CONTENT_EXTRACTION_ENGINE = (
             form_data.content_extraction.engine
         )
         request.app.state.config.TIKA_SERVER_URL = (
             form_data.content_extraction.tika_server_url
         )
+        if form_data.content_extraction.document_intelligence_config is not None:
+            request.app.state.config.DOCUMENT_INTELLIGENCE_ENDPOINT = (
+                form_data.content_extraction.document_intelligence_config.endpoint
+            )
+            request.app.state.config.DOCUMENT_INTELLIGENCE_KEY = (
+                form_data.content_extraction.document_intelligence_config.key
+            )
 
     if form_data.chunk is not None:
         request.app.state.config.TEXT_SPLITTER = form_data.chunk.text_splitter
@@ -604,6 +633,10 @@ async def update_rag_config(
         "content_extraction": {
             "engine": request.app.state.config.CONTENT_EXTRACTION_ENGINE,
             "tika_server_url": request.app.state.config.TIKA_SERVER_URL,
+            "document_intelligence_config": {
+                "endpoint": request.app.state.config.DOCUMENT_INTELLIGENCE_ENDPOINT,
+                "key": request.app.state.config.DOCUMENT_INTELLIGENCE_KEY,
+            },
         },
         "chunk": {
             "text_splitter": request.app.state.config.TEXT_SPLITTER,
@@ -937,6 +970,8 @@ def process_file(
                     engine=request.app.state.config.CONTENT_EXTRACTION_ENGINE,
                     TIKA_SERVER_URL=request.app.state.config.TIKA_SERVER_URL,
                     PDF_EXTRACT_IMAGES=request.app.state.config.PDF_EXTRACT_IMAGES,
+                    DOCUMENT_INTELLIGENCE_ENDPOINT=request.app.state.config.DOCUMENT_INTELLIGENCE_ENDPOINT,
+                    DOCUMENT_INTELLIGENCE_KEY=request.app.state.config.DOCUMENT_INTELLIGENCE_KEY,
                 )
                 docs = loader.load(
                     file.filename, file.meta.get("content_type"), file_path
@@ -1553,11 +1588,11 @@ def reset_upload_dir(user=Depends(get_admin_user)) -> bool:
                     elif os.path.isdir(file_path):
                         shutil.rmtree(file_path)  # Remove the directory
                 except Exception as e:
-                    print(f"Failed to delete {file_path}. Reason: {e}")
+                    log.exception(f"Failed to delete {file_path}. Reason: {e}")
         else:
-            print(f"The directory {folder} does not exist")
+            log.warning(f"The directory {folder} does not exist")
     except Exception as e:
-        print(f"Failed to process the directory {folder}. Reason: {e}")
+        log.exception(f"Failed to process the directory {folder}. Reason: {e}")
     return True
 
 

+ 46 - 0
backend/open_webui/routers/tasks.py

@@ -20,6 +20,10 @@ from open_webui.utils.auth import get_admin_user, get_verified_user
 from open_webui.constants import TASKS
 
 from open_webui.routers.pipelines import process_pipeline_inlet_filter
+from open_webui.utils.filter import (
+    get_sorted_filter_ids,
+    process_filter_functions,
+)
 from open_webui.utils.task import get_task_model_id
 
 from open_webui.config import (
@@ -221,6 +225,12 @@ async def generate_title(
         },
     }
 
+    # Process the payload through the pipeline
+    try:
+        payload = await process_pipeline_inlet_filter(request, payload, user, models)
+    except Exception as e:
+        raise e
+
     try:
         return await generate_chat_completion(request, form_data=payload, user=user)
     except Exception as e:
@@ -290,6 +300,12 @@ async def generate_chat_tags(
         },
     }
 
+    # Process the payload through the pipeline
+    try:
+        payload = await process_pipeline_inlet_filter(request, payload, user, models)
+    except Exception as e:
+        raise e
+
     try:
         return await generate_chat_completion(request, form_data=payload, user=user)
     except Exception as e:
@@ -356,6 +372,12 @@ async def generate_image_prompt(
         },
     }
 
+    # Process the payload through the pipeline
+    try:
+        payload = await process_pipeline_inlet_filter(request, payload, user, models)
+    except Exception as e:
+        raise e
+
     try:
         return await generate_chat_completion(request, form_data=payload, user=user)
     except Exception as e:
@@ -433,6 +455,12 @@ async def generate_queries(
         },
     }
 
+    # Process the payload through the pipeline
+    try:
+        payload = await process_pipeline_inlet_filter(request, payload, user, models)
+    except Exception as e:
+        raise e
+
     try:
         return await generate_chat_completion(request, form_data=payload, user=user)
     except Exception as e:
@@ -514,6 +542,12 @@ async def generate_autocompletion(
         },
     }
 
+    # Process the payload through the pipeline
+    try:
+        payload = await process_pipeline_inlet_filter(request, payload, user, models)
+    except Exception as e:
+        raise e
+
     try:
         return await generate_chat_completion(request, form_data=payload, user=user)
     except Exception as e:
@@ -584,6 +618,12 @@ async def generate_emoji(
         },
     }
 
+    # Process the payload through the pipeline
+    try:
+        payload = await process_pipeline_inlet_filter(request, payload, user, models)
+    except Exception as e:
+        raise e
+
     try:
         return await generate_chat_completion(request, form_data=payload, user=user)
     except Exception as e:
@@ -644,6 +684,12 @@ async def generate_moa_response(
         },
     }
 
+    # Process the payload through the pipeline
+    try:
+        payload = await process_pipeline_inlet_filter(request, payload, user, models)
+    except Exception as e:
+        raise e
+
     try:
         return await generate_chat_completion(request, form_data=payload, user=user)
     except Exception as e:

+ 9 - 4
backend/open_webui/routers/tools.py

@@ -1,3 +1,4 @@
+import logging
 from pathlib import Path
 from typing import Optional
 
@@ -15,6 +16,10 @@ from fastapi import APIRouter, Depends, HTTPException, Request, status
 from open_webui.utils.tools import get_tools_specs
 from open_webui.utils.auth import get_admin_user, get_verified_user
 from open_webui.utils.access_control import has_access, has_permission
+from open_webui.env import SRC_LOG_LEVELS
+
+log = logging.getLogger(__name__)
+log.setLevel(SRC_LOG_LEVELS["MAIN"])
 
 
 router = APIRouter()
@@ -111,7 +116,7 @@ async def create_new_tools(
                     detail=ERROR_MESSAGES.DEFAULT("Error creating tools"),
                 )
         except Exception as e:
-            print(e)
+            log.exception(f"Failed to load the tool by id {form_data.id}: {e}")
             raise HTTPException(
                 status_code=status.HTTP_400_BAD_REQUEST,
                 detail=ERROR_MESSAGES.DEFAULT(str(e)),
@@ -193,7 +198,7 @@ async def update_tools_by_id(
             "specs": specs,
         }
 
-        print(updated)
+        log.debug(updated)
         tools = Tools.update_tool_by_id(id, updated)
 
         if tools:
@@ -343,7 +348,7 @@ async def update_tools_valves_by_id(
         Tools.update_tool_valves_by_id(id, valves.model_dump())
         return valves.model_dump()
     except Exception as e:
-        print(e)
+        log.exception(f"Failed to update tool valves by id {id}: {e}")
         raise HTTPException(
             status_code=status.HTTP_400_BAD_REQUEST,
             detail=ERROR_MESSAGES.DEFAULT(str(e)),
@@ -421,7 +426,7 @@ async def update_tools_user_valves_by_id(
                 )
                 return user_valves.model_dump()
             except Exception as e:
-                print(e)
+                log.exception(f"Failed to update user valves by id {id}: {e}")
                 raise HTTPException(
                     status_code=status.HTTP_400_BAD_REQUEST,
                     detail=ERROR_MESSAGES.DEFAULT(str(e)),

+ 6 - 2
backend/open_webui/routers/utils.py

@@ -1,4 +1,5 @@
 import black
+import logging
 import markdown
 
 from open_webui.models.chats import ChatTitleMessagesForm
@@ -13,10 +14,13 @@ from open_webui.utils.misc import get_gravatar_url
 from open_webui.utils.pdf_generator import PDFGenerator
 from open_webui.utils.auth import get_admin_user, get_verified_user
 from open_webui.utils.code_interpreter import execute_code_jupyter
+from open_webui.env import SRC_LOG_LEVELS
 
 
-router = APIRouter()
+log = logging.getLogger(__name__)
+log.setLevel(SRC_LOG_LEVELS["MAIN"])
 
+router = APIRouter()
 
 @router.get("/gravatar")
 async def get_gravatar(email: str, user=Depends(get_verified_user)):
@@ -96,7 +100,7 @@ async def download_chat_as_pdf(
             headers={"Content-Disposition": "attachment;filename=chat.pdf"},
         )
     except Exception as e:
-        print(e)
+        log.exception(f"Error generating PDF: {e}")
         raise HTTPException(status_code=400, detail=str(e))
 
 

+ 18 - 3
backend/open_webui/storage/provider.py

@@ -1,10 +1,12 @@
 import os
 import shutil
 import json
+import logging
 from abc import ABC, abstractmethod
 from typing import BinaryIO, Tuple
 
 import boto3
+from botocore.config import Config
 from botocore.exceptions import ClientError
 from open_webui.config import (
     S3_ACCESS_KEY_ID,
@@ -13,6 +15,8 @@ from open_webui.config import (
     S3_KEY_PREFIX,
     S3_REGION_NAME,
     S3_SECRET_ACCESS_KEY,
+    S3_USE_ACCELERATE_ENDPOINT,
+    S3_ADDRESSING_STYLE,
     GCS_BUCKET_NAME,
     GOOGLE_APPLICATION_CREDENTIALS_JSON,
     AZURE_STORAGE_ENDPOINT,
@@ -27,6 +31,11 @@ from open_webui.constants import ERROR_MESSAGES
 from azure.identity import DefaultAzureCredential
 from azure.storage.blob import BlobServiceClient
 from azure.core.exceptions import ResourceNotFoundError
+from open_webui.env import SRC_LOG_LEVELS
+
+
+log = logging.getLogger(__name__)
+log.setLevel(SRC_LOG_LEVELS["MAIN"])
 
 
 class StorageProvider(ABC):
@@ -71,7 +80,7 @@ class LocalStorageProvider(StorageProvider):
         if os.path.isfile(file_path):
             os.remove(file_path)
         else:
-            print(f"File {file_path} not found in local storage.")
+            log.warning(f"File {file_path} not found in local storage.")
 
     @staticmethod
     def delete_all_files() -> None:
@@ -85,9 +94,9 @@ class LocalStorageProvider(StorageProvider):
                     elif os.path.isdir(file_path):
                         shutil.rmtree(file_path)  # Remove the directory
                 except Exception as e:
-                    print(f"Failed to delete {file_path}. Reason: {e}")
+                    log.exception(f"Failed to delete {file_path}. Reason: {e}")
         else:
-            print(f"Directory {UPLOAD_DIR} not found in local storage.")
+            log.warning(f"Directory {UPLOAD_DIR} not found in local storage.")
 
 
 class S3StorageProvider(StorageProvider):
@@ -98,6 +107,12 @@ class S3StorageProvider(StorageProvider):
             endpoint_url=S3_ENDPOINT_URL,
             aws_access_key_id=S3_ACCESS_KEY_ID,
             aws_secret_access_key=S3_SECRET_ACCESS_KEY,
+            config=Config(
+                s3={
+                    "use_accelerate_endpoint": S3_USE_ACCELERATE_ENDPOINT,
+                    "addressing_style": S3_ADDRESSING_STYLE,
+                },
+            ),
         )
         self.bucket_name = S3_BUCKET_NAME
         self.key_prefix = S3_KEY_PREFIX if S3_KEY_PREFIX else ""

+ 7 - 4
backend/open_webui/utils/auth.py

@@ -14,14 +14,17 @@ from typing import Optional, Union, List, Dict
 from open_webui.models.users import Users
 
 from open_webui.constants import ERROR_MESSAGES
-from open_webui.env import WEBUI_SECRET_KEY, TRUSTED_SIGNATURE_KEY, STATIC_DIR
+from open_webui.env import WEBUI_SECRET_KEY, TRUSTED_SIGNATURE_KEY, STATIC_DIR, SRC_LOG_LEVELS
 
 from fastapi import Depends, HTTPException, Request, Response, status
 from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer
 from passlib.context import CryptContext
 
+
 logging.getLogger("passlib").setLevel(logging.ERROR)
 
+log = logging.getLogger(__name__)
+log.setLevel(SRC_LOG_LEVELS["OAUTH"])
 
 SESSION_SECRET = WEBUI_SECRET_KEY
 ALGORITHM = "HS256"
@@ -50,7 +53,7 @@ def verify_signature(payload: str, signature: str) -> bool:
 def override_static(path: str, content: str):
     # Ensure path is safe
     if "/" in path or ".." in path:
-        print(f"Invalid path: {path}")
+        log.error(f"Invalid path: {path}")
         return
 
     file_path = os.path.join(STATIC_DIR, path)
@@ -82,11 +85,11 @@ def get_license_data(app, key):
 
                 return True
             else:
-                print(
+                log.error(
                     f"License: retrieval issue: {getattr(res, 'text', 'unknown error')}"
                 )
         except Exception as ex:
-            print(f"License: Uncaught Exception: {ex}")
+            log.exception(f"License: Uncaught Exception: {ex}")
     return False
 
 

+ 5 - 5
backend/open_webui/utils/chat.py

@@ -66,7 +66,7 @@ async def generate_direct_chat_completion(
     user: Any,
     models: dict,
 ):
-    print("generate_direct_chat_completion")
+    log.info("generate_direct_chat_completion")
 
     metadata = form_data.pop("metadata", {})
 
@@ -103,7 +103,7 @@ async def generate_direct_chat_completion(
             }
         )
 
-        print("res", res)
+        log.info(f"res: {res}")
 
         if res.get("status", False):
             # Define a generator to stream responses
@@ -285,7 +285,7 @@ chat_completion = generate_chat_completion
 
 async def chat_completed(request: Request, form_data: dict, user: Any):
     if not request.app.state.MODELS:
-        await get_all_models(request)
+        await get_all_models(request, user=user)
 
     if getattr(request.state, "direct", False) and hasattr(request.state, "model"):
         models = {
@@ -351,7 +351,7 @@ async def chat_action(request: Request, action_id: str, form_data: dict, user: A
         raise Exception(f"Action not found: {action_id}")
 
     if not request.app.state.MODELS:
-        await get_all_models(request)
+        await get_all_models(request, user=user)
 
     if getattr(request.state, "direct", False) and hasattr(request.state, "model"):
         models = {
@@ -432,7 +432,7 @@ async def chat_action(request: Request, action_id: str, form_data: dict, user: A
                             )
                         )
                 except Exception as e:
-                    print(e)
+                    log.exception(f"Failed to get user values: {e}")
 
                 params = {**params, "__user__": __user__}
 

+ 14 - 3
backend/open_webui/utils/filter.py

@@ -1,6 +1,12 @@
 import inspect
+import logging
+
 from open_webui.utils.plugin import load_function_module_by_id
 from open_webui.models.functions import Functions
+from open_webui.env import SRC_LOG_LEVELS
+
+log = logging.getLogger(__name__)
+log.setLevel(SRC_LOG_LEVELS["MAIN"])
 
 
 def get_sorted_filter_ids(model):
@@ -61,7 +67,12 @@ async def process_filter_functions(
         try:
             # Prepare parameters
             sig = inspect.signature(handler)
-            params = {"body": form_data} | {
+
+            params = {"body": form_data}
+            if filter_type == "stream":
+                params = {"event": form_data}
+
+            params = params | {
                 k: v
                 for k, v in {
                     **extra_params,
@@ -80,7 +91,7 @@ async def process_filter_functions(
                             )
                         )
                     except Exception as e:
-                        print(e)
+                        log.exception(f"Failed to get user values: {e}")
 
             # Execute handler
             if inspect.iscoroutinefunction(handler):
@@ -89,7 +100,7 @@ async def process_filter_functions(
                 form_data = handler(**params)
 
         except Exception as e:
-            print(f"Error in {filter_type} handler {filter_id}: {e}")
+            log.exception(f"Error in {filter_type} handler {filter_id}: {e}")
             raise e
 
     # Handle file cleanup for inlet

+ 196 - 121
backend/open_webui/utils/middleware.py

@@ -1048,6 +1048,21 @@ async def process_chat_response(
     ):
         return response
 
+    extra_params = {
+        "__event_emitter__": event_emitter,
+        "__event_call__": event_caller,
+        "__user__": {
+            "id": user.id,
+            "email": user.email,
+            "name": user.name,
+            "role": user.role,
+        },
+        "__metadata__": metadata,
+        "__request__": request,
+        "__model__": metadata.get("model"),
+    }
+    filter_ids = get_sorted_filter_ids(form_data.get("model"))
+
     # Streaming response
     if event_emitter and event_caller:
         task_id = str(uuid4())  # Create a unique task ID.
@@ -1127,12 +1142,12 @@ async def process_chat_response(
 
                         if reasoning_duration is not None:
                             if raw:
-                                content = f'{content}\n<{block["tag"]}>{block["content"]}</{block["tag"]}>\n'
+                                content = f'{content}\n<{block["start_tag"]}>{block["content"]}<{block["end_tag"]}>\n'
                             else:
                                 content = f'{content}\n<details type="reasoning" done="true" duration="{reasoning_duration}">\n<summary>Thought for {reasoning_duration} seconds</summary>\n{reasoning_display_content}\n</details>\n'
                         else:
                             if raw:
-                                content = f'{content}\n<{block["tag"]}>{block["content"]}</{block["tag"]}>\n'
+                                content = f'{content}\n<{block["start_tag"]}>{block["content"]}<{block["end_tag"]}>\n'
                             else:
                                 content = f'{content}\n<details type="reasoning" done="false">\n<summary>Thinking…</summary>\n{reasoning_display_content}\n</details>\n'
 
@@ -1228,9 +1243,9 @@ async def process_chat_response(
                     return attributes
 
                 if content_blocks[-1]["type"] == "text":
-                    for tag in tags:
+                    for start_tag, end_tag in tags:
                         # Match start tag e.g., <tag> or <tag attr="value">
-                        start_tag_pattern = rf"<{tag}(\s.*?)?>"
+                        start_tag_pattern = rf"<{re.escape(start_tag)}(\s.*?)?>"
                         match = re.search(start_tag_pattern, content)
                         if match:
                             attr_content = (
@@ -1263,7 +1278,8 @@ async def process_chat_response(
                             content_blocks.append(
                                 {
                                     "type": content_type,
-                                    "tag": tag,
+                                    "start_tag": start_tag,
+                                    "end_tag": end_tag,
                                     "attributes": attributes,
                                     "content": "",
                                     "started_at": time.time(),
@@ -1275,9 +1291,10 @@ async def process_chat_response(
 
                             break
                 elif content_blocks[-1]["type"] == content_type:
-                    tag = content_blocks[-1]["tag"]
+                    start_tag = content_blocks[-1]["start_tag"]
+                    end_tag = content_blocks[-1]["end_tag"]
                     # Match end tag e.g., </tag>
-                    end_tag_pattern = rf"</{tag}>"
+                    end_tag_pattern = rf"<{re.escape(end_tag)}>"
 
                     # Check if the content has the end tag
                     if re.search(end_tag_pattern, content):
@@ -1285,7 +1302,7 @@ async def process_chat_response(
 
                         block_content = content_blocks[-1]["content"]
                         # Strip start and end tags from the content
-                        start_tag_pattern = rf"<{tag}(.*?)>"
+                        start_tag_pattern = rf"<{re.escape(start_tag)}(.*?)>"
                         block_content = re.sub(
                             start_tag_pattern, "", block_content
                         ).strip()
@@ -1350,7 +1367,7 @@ async def process_chat_response(
 
                         # Clean processed content
                         content = re.sub(
-                            rf"<{tag}(.*?)>(.|\n)*?</{tag}>",
+                            rf"<{re.escape(start_tag)}(.*?)>(.|\n)*?<{re.escape(end_tag)}>",
                             "",
                             content,
                             flags=re.DOTALL,
@@ -1388,19 +1405,24 @@ async def process_chat_response(
 
             # We might want to disable this by default
             DETECT_REASONING = True
+            DETECT_SOLUTION = True
             DETECT_CODE_INTERPRETER = metadata.get("features", {}).get(
                 "code_interpreter", False
             )
 
             reasoning_tags = [
-                "think",
-                "thinking",
-                "reason",
-                "reasoning",
-                "thought",
-                "Thought",
+                ("think", "/think"),
+                ("thinking", "/thinking"),
+                ("reason", "/reason"),
+                ("reasoning", "/reasoning"),
+                ("thought", "/thought"),
+                ("Thought", "/Thought"),
+                ("|begin_of_thought|", "|end_of_thought|"),
             ]
-            code_interpreter_tags = ["code_interpreter"]
+
+            code_interpreter_tags = [("code_interpreter", "/code_interpreter")]
+
+            solution_tags = [("|begin_of_solution|", "|end_of_solution|")]
 
             try:
                 for event in events:
@@ -1444,119 +1466,154 @@ async def process_chat_response(
                         try:
                             data = json.loads(data)
 
-                            if "selected_model_id" in data:
-                                model_id = data["selected_model_id"]
-                                Chats.upsert_message_to_chat_by_id_and_message_id(
-                                    metadata["chat_id"],
-                                    metadata["message_id"],
-                                    {
-                                        "selectedModelId": model_id,
-                                    },
-                                )
-                            else:
-                                choices = data.get("choices", [])
-                                if not choices:
-                                    continue
-
-                                delta = choices[0].get("delta", {})
-                                delta_tool_calls = delta.get("tool_calls", None)
-
-                                if delta_tool_calls:
-                                    for delta_tool_call in delta_tool_calls:
-                                        tool_call_index = delta_tool_call.get("index")
-
-                                        if tool_call_index is not None:
-                                            if (
-                                                len(response_tool_calls)
-                                                <= tool_call_index
-                                            ):
-                                                response_tool_calls.append(
-                                                    delta_tool_call
-                                                )
-                                            else:
-                                                delta_name = delta_tool_call.get(
-                                                    "function", {}
-                                                ).get("name")
-                                                delta_arguments = delta_tool_call.get(
-                                                    "function", {}
-                                                ).get("arguments")
-
-                                                if delta_name:
-                                                    response_tool_calls[
-                                                        tool_call_index
-                                                    ]["function"]["name"] += delta_name
-
-                                                if delta_arguments:
-                                                    response_tool_calls[
-                                                        tool_call_index
-                                                    ]["function"][
-                                                        "arguments"
-                                                    ] += delta_arguments
-
-                                value = delta.get("content")
-
-                                if value:
-                                    content = f"{content}{value}"
-
-                                    if not content_blocks:
-                                        content_blocks.append(
-                                            {
-                                                "type": "text",
-                                                "content": "",
-                                            }
-                                        )
+                            data, _ = await process_filter_functions(
+                                request=request,
+                                filter_ids=filter_ids,
+                                filter_type="stream",
+                                form_data=data,
+                                extra_params=extra_params,
+                            )
 
-                                    content_blocks[-1]["content"] = (
-                                        content_blocks[-1]["content"] + value
+                            if data:
+                                if "selected_model_id" in data:
+                                    model_id = data["selected_model_id"]
+                                    Chats.upsert_message_to_chat_by_id_and_message_id(
+                                        metadata["chat_id"],
+                                        metadata["message_id"],
+                                        {
+                                            "selectedModelId": model_id,
+                                        },
                                     )
+                                else:
+                                    choices = data.get("choices", [])
+                                    if not choices:
+                                        usage = data.get("usage", {})
+                                        if usage:
+                                            await event_emitter(
+                                                {
+                                                    "type": "chat:completion",
+                                                    "data": {
+                                                        "usage": usage,
+                                                    },
+                                                }
+                                            )
+                                        continue
 
-                                    if DETECT_REASONING:
-                                        content, content_blocks, _ = (
-                                            tag_content_handler(
-                                                "reasoning",
-                                                reasoning_tags,
-                                                content,
-                                                content_blocks,
+                                    delta = choices[0].get("delta", {})
+                                    delta_tool_calls = delta.get("tool_calls", None)
+
+                                    if delta_tool_calls:
+                                        for delta_tool_call in delta_tool_calls:
+                                            tool_call_index = delta_tool_call.get(
+                                                "index"
                                             )
-                                        )
 
-                                    if DETECT_CODE_INTERPRETER:
-                                        content, content_blocks, end = (
-                                            tag_content_handler(
-                                                "code_interpreter",
-                                                code_interpreter_tags,
-                                                content,
-                                                content_blocks,
+                                            if tool_call_index is not None:
+                                                if (
+                                                    len(response_tool_calls)
+                                                    <= tool_call_index
+                                                ):
+                                                    response_tool_calls.append(
+                                                        delta_tool_call
+                                                    )
+                                                else:
+                                                    delta_name = delta_tool_call.get(
+                                                        "function", {}
+                                                    ).get("name")
+                                                    delta_arguments = (
+                                                        delta_tool_call.get(
+                                                            "function", {}
+                                                        ).get("arguments")
+                                                    )
+
+                                                    if delta_name:
+                                                        response_tool_calls[
+                                                            tool_call_index
+                                                        ]["function"][
+                                                            "name"
+                                                        ] += delta_name
+
+                                                    if delta_arguments:
+                                                        response_tool_calls[
+                                                            tool_call_index
+                                                        ]["function"][
+                                                            "arguments"
+                                                        ] += delta_arguments
+
+                                    value = delta.get("content")
+
+                                    if value:
+                                        content = f"{content}{value}"
+
+                                        if not content_blocks:
+                                            content_blocks.append(
+                                                {
+                                                    "type": "text",
+                                                    "content": "",
+                                                }
                                             )
+
+                                        content_blocks[-1]["content"] = (
+                                            content_blocks[-1]["content"] + value
                                         )
 
-                                        if end:
-                                            break
+                                        if DETECT_REASONING:
+                                            content, content_blocks, _ = (
+                                                tag_content_handler(
+                                                    "reasoning",
+                                                    reasoning_tags,
+                                                    content,
+                                                    content_blocks,
+                                                )
+                                            )
+
+                                        if DETECT_CODE_INTERPRETER:
+                                            content, content_blocks, end = (
+                                                tag_content_handler(
+                                                    "code_interpreter",
+                                                    code_interpreter_tags,
+                                                    content,
+                                                    content_blocks,
+                                                )
+                                            )
 
-                                    if ENABLE_REALTIME_CHAT_SAVE:
-                                        # Save message in the database
-                                        Chats.upsert_message_to_chat_by_id_and_message_id(
-                                            metadata["chat_id"],
-                                            metadata["message_id"],
-                                            {
+                                            if end:
+                                                break
+
+                                        if DETECT_SOLUTION:
+                                            content, content_blocks, _ = (
+                                                tag_content_handler(
+                                                    "solution",
+                                                    solution_tags,
+                                                    content,
+                                                    content_blocks,
+                                                )
+                                            )
+
+                                        if ENABLE_REALTIME_CHAT_SAVE:
+                                            # Save message in the database
+                                            Chats.upsert_message_to_chat_by_id_and_message_id(
+                                                metadata["chat_id"],
+                                                metadata["message_id"],
+                                                {
+                                                    "content": serialize_content_blocks(
+                                                        content_blocks
+                                                    ),
+                                                },
+                                            )
+                                        else:
+                                            data = {
                                                 "content": serialize_content_blocks(
                                                     content_blocks
                                                 ),
-                                            },
-                                        )
-                                    else:
-                                        data = {
-                                            "content": serialize_content_blocks(
-                                                content_blocks
-                                            ),
-                                        }
+                                            }
 
-                            await event_emitter(
-                                {
-                                    "type": "chat:completion",
-                                    "data": data,
-                                }
-                            )
+                                await event_emitter(
+                                    {
+                                        "type": "chat:completion",
+                                        "data": data,
+                                    }
+                                )
                         except Exception as e:
                             done = "data: [DONE]" in line
                             if done:
@@ -1855,7 +1912,8 @@ async def process_chat_response(
                             }
                         )
 
-                        print(content_blocks, serialize_content_blocks(content_blocks))
+                        log.info(f"content_blocks={content_blocks}")
+                        log.info(f"serialize_content_blocks={serialize_content_blocks(content_blocks)}")
 
                         try:
                             res = await generate_chat_completion(
@@ -1926,7 +1984,7 @@ async def process_chat_response(
 
                 await background_tasks_handler()
             except asyncio.CancelledError:
-                print("Task was cancelled!")
+                log.warning("Task was cancelled!")
                 await event_emitter({"type": "task-cancelled"})
 
                 if not ENABLE_REALTIME_CHAT_SAVE:
@@ -1947,17 +2005,34 @@ async def process_chat_response(
         return {"status": True, "task_id": task_id}
 
     else:
-
         # Fallback to the original response
         async def stream_wrapper(original_generator, events):
             def wrap_item(item):
                 return f"data: {item}\n\n"
 
             for event in events:
-                yield wrap_item(json.dumps(event))
+                event, _ = await process_filter_functions(
+                    request=request,
+                    filter_ids=filter_ids,
+                    filter_type="stream",
+                    form_data=event,
+                    extra_params=extra_params,
+                )
+
+                if event:
+                    yield wrap_item(json.dumps(event))
 
             async for data in original_generator:
-                yield data
+                data, _ = await process_filter_functions(
+                    request=request,
+                    filter_ids=filter_ids,
+                    filter_type="stream",
+                    form_data=data,
+                    extra_params=extra_params,
+                )
+
+                if data:
+                    yield data
 
         return StreamingResponse(
             stream_wrapper(response.body_iterator, events),

+ 5 - 1
backend/open_webui/utils/misc.py

@@ -2,13 +2,17 @@ import hashlib
 import re
 import time
 import uuid
+import logging
 from datetime import timedelta
 from pathlib import Path
 from typing import Callable, Optional
 
 
 import collections.abc
+from open_webui.env import SRC_LOG_LEVELS
 
+log = logging.getLogger(__name__)
+log.setLevel(SRC_LOG_LEVELS["MAIN"])
 
 def deep_update(d, u):
     for k, v in u.items():
@@ -412,7 +416,7 @@ def parse_ollama_modelfile(model_text):
                 elif param_type is bool:
                     value = value.lower() == "true"
             except Exception as e:
-                print(e)
+                log.exception(f"Failed to parse parameter {param}: {e}")
                 continue
 
             data["params"][param] = value

+ 6 - 5
backend/open_webui/utils/models.py

@@ -22,6 +22,7 @@ from open_webui.config import (
 )
 
 from open_webui.env import SRC_LOG_LEVELS, GLOBAL_LOG_LEVEL
+from open_webui.models.users import UserModel
 
 
 logging.basicConfig(stream=sys.stdout, level=GLOBAL_LOG_LEVEL)
@@ -29,17 +30,17 @@ log = logging.getLogger(__name__)
 log.setLevel(SRC_LOG_LEVELS["MAIN"])
 
 
-async def get_all_base_models(request: Request):
+async def get_all_base_models(request: Request, user: UserModel = None):
     function_models = []
     openai_models = []
     ollama_models = []
 
     if request.app.state.config.ENABLE_OPENAI_API:
-        openai_models = await openai.get_all_models(request)
+        openai_models = await openai.get_all_models(request, user=user)
         openai_models = openai_models["data"]
 
     if request.app.state.config.ENABLE_OLLAMA_API:
-        ollama_models = await ollama.get_all_models(request)
+        ollama_models = await ollama.get_all_models(request, user=user)
         ollama_models = [
             {
                 "id": model["model"],
@@ -58,8 +59,8 @@ async def get_all_base_models(request: Request):
     return models
 
 
-async def get_all_models(request):
-    models = await get_all_base_models(request)
+async def get_all_models(request, user: UserModel = None):
+    models = await get_all_base_models(request, user=user)
 
     # If there are no models, return an empty list
     if len(models) == 0:

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

@@ -146,7 +146,7 @@ class OAuthManager:
             nested_claims = oauth_claim.split(".")
             for nested_claim in nested_claims:
                 claim_data = claim_data.get(nested_claim, {})
-            user_oauth_groups = claim_data if isinstance(claim_data, list) else None
+            user_oauth_groups = claim_data if isinstance(claim_data, list) else []
 
         user_current_groups: list[GroupModel] = Groups.get_groups_by_member_id(user.id)
         all_available_groups: list[GroupModel] = Groups.get_groups()
@@ -315,15 +315,6 @@ class OAuthManager:
         if not user:
             user_count = Users.get_num_users()
 
-            if (
-                request.app.state.USER_COUNT
-                and user_count >= request.app.state.USER_COUNT
-            ):
-                raise HTTPException(
-                    403,
-                    detail=ERROR_MESSAGES.ACCESS_PROHIBITED,
-                )
-
             # If the user does not exist, check if signups are enabled
             if auth_manager_config.ENABLE_OAUTH_SIGNUP:
                 # Check if an existing user with the same email already exists

+ 7 - 1
backend/open_webui/utils/payload.py

@@ -124,7 +124,7 @@ def convert_messages_openai_to_ollama(messages: list[dict]) -> list[dict]:
         tool_call_id = message.get("tool_call_id", None)
 
         # Check if the content is a string (just a simple message)
-        if isinstance(content, str):
+        if isinstance(content, str) and not tool_calls:
             # If the content is a string, it's pure text
             new_message["content"] = content
 
@@ -230,6 +230,12 @@ def convert_payload_openai_to_ollama(openai_payload: dict) -> dict:
                 "system"
             ]  # To prevent Ollama warning of invalid option provided
 
+    # If there is the "stop" parameter in the openai_payload, remap it to the ollama_payload.options
+    if "stop" in openai_payload:
+        ollama_options = ollama_payload.get("options", {})
+        ollama_options["stop"] = openai_payload.get("stop")
+        ollama_payload["options"] = ollama_options
+
     if "metadata" in openai_payload:
         ollama_payload["metadata"] = openai_payload["metadata"]
 

+ 1 - 1
backend/open_webui/utils/plugin.py

@@ -45,7 +45,7 @@ def extract_frontmatter(content):
                     frontmatter[key.strip()] = value.strip()
 
     except Exception as e:
-        print(f"An error occurred: {e}")
+        log.exception(f"Failed to extract frontmatter: {e}")
         return {}
 
     return frontmatter

+ 2 - 2
backend/open_webui/utils/response.py

@@ -104,7 +104,7 @@ async def convert_streaming_response_ollama_to_openai(ollama_streaming_response)
         data = json.loads(data)
 
         model = data.get("model", "ollama")
-        message_content = data.get("message", {}).get("content", "")
+        message_content = data.get("message", {}).get("content", None)
         tool_calls = data.get("message", {}).get("tool_calls", None)
         openai_tool_calls = None
 
@@ -118,7 +118,7 @@ async def convert_streaming_response_ollama_to_openai(ollama_streaming_response)
             usage = convert_ollama_usage_to_openai(data)
 
         data = openai_chat_chunk_message_template(
-            model, message_content if not done else None, openai_tool_calls, usage
+            model, message_content, openai_tool_calls, usage
         )
 
         line = f"data: {json.dumps(data)}\n\n"

+ 1 - 0
backend/requirements.txt

@@ -71,6 +71,7 @@ validators==0.34.0
 psutil
 sentencepiece
 soundfile==0.13.1
+azure-ai-documentintelligence==1.0.0
 
 opencv-python-headless==4.11.0.86
 rapidocr-onnxruntime==1.3.24

+ 2 - 2
package-lock.json

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

+ 1 - 1
package.json

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

+ 1 - 0
pyproject.toml

@@ -78,6 +78,7 @@ dependencies = [
     "psutil",
     "sentencepiece",
     "soundfile==0.13.1",
+    "azure-ai-documentintelligence==1.0.0",
 
     "opencv-python-headless==4.11.0.86",
     "rapidocr-onnxruntime==1.3.24",

+ 7 - 0
src/lib/apis/retrieval/index.ts

@@ -32,9 +32,15 @@ type ChunkConfigForm = {
 	chunk_overlap: number;
 };
 
+type DocumentIntelligenceConfigForm = {
+	key: string;
+	endpoint: string;
+};
+
 type ContentExtractConfigForm = {
 	engine: string;
 	tika_server_url: string | null;
+	document_intelligence_config: DocumentIntelligenceConfigForm | null;
 };
 
 type YoutubeConfigForm = {
@@ -46,6 +52,7 @@ type YoutubeConfigForm = {
 type RAGConfigForm = {
 	pdf_extract_images?: boolean;
 	enable_google_drive_integration?: boolean;
+	enable_onedrive_integration?: boolean;
 	chunk?: ChunkConfigForm;
 	content_extraction?: ContentExtractConfigForm;
 	web_loader_ssl_verification?: boolean;

+ 7 - 6
src/lib/components/admin/Functions/FunctionEditor.svelte

@@ -1,8 +1,7 @@
 <script>
-	import { getContext, createEventDispatcher, onMount, tick } from 'svelte';
+	import { getContext, onMount, tick } from 'svelte';
 	import { goto } from '$app/navigation';
 
-	const dispatch = createEventDispatcher();
 	const i18n = getContext('i18n');
 
 	import CodeEditor from '$lib/components/common/CodeEditor.svelte';
@@ -15,6 +14,8 @@
 	let loading = false;
 	let showConfirm = false;
 
+	export let onSave = () => {};
+
 	export let edit = false;
 	export let clone = false;
 
@@ -256,7 +257,7 @@ class Pipe:
 
 	const saveHandler = async () => {
 		loading = true;
-		dispatch('save', {
+		onSave({
 			id,
 			name,
 			meta,
@@ -371,10 +372,10 @@ class Pipe:
 						value={content}
 						lang="python"
 						{boilerplate}
-						on:change={(e) => {
-							_content = e.detail.value;
+						onChange={(e) => {
+							_content = e;
 						}}
-						on:save={async () => {
+						onSave={async () => {
 							if (formElement) {
 								formElement.requestSubmit();
 							}

+ 49 - 1
src/lib/components/admin/Settings/Documents.svelte

@@ -49,6 +49,9 @@
 	let contentExtractionEngine = 'default';
 	let tikaServerUrl = '';
 	let showTikaServerUrl = false;
+	let documentIntelligenceEndpoint = '';
+	let documentIntelligenceKey = '';
+	let showDocumentIntelligenceConfig = false;
 
 	let textSplitter = '';
 	let chunkSize = 0;
@@ -58,6 +61,7 @@
 	let RAG_FULL_CONTEXT = false;
 
 	let enableGoogleDriveIntegration = false;
+	let enableOneDriveIntegration = false;
 
 	let OpenAIUrl = '';
 	let OpenAIKey = '';
@@ -176,9 +180,17 @@
 			toast.error($i18n.t('Tika Server URL required.'));
 			return;
 		}
+		if (
+			contentExtractionEngine === 'document_intelligence' &&
+			(documentIntelligenceEndpoint === '' || documentIntelligenceKey === '')
+		) {
+			toast.error($i18n.t('Document Intelligence endpoint and key required.'));
+			return;
+		}
 		const res = await updateRAGConfig(localStorage.token, {
 			pdf_extract_images: pdfExtractImages,
 			enable_google_drive_integration: enableGoogleDriveIntegration,
+			enable_onedrive_integration: enableOneDriveIntegration,
 			file: {
 				max_size: fileMaxSize === '' ? null : fileMaxSize,
 				max_count: fileMaxCount === '' ? null : fileMaxCount
@@ -191,7 +203,11 @@
 			},
 			content_extraction: {
 				engine: contentExtractionEngine,
-				tika_server_url: tikaServerUrl
+				tika_server_url: tikaServerUrl,
+				document_intelligence_config: {
+					key: documentIntelligenceKey,
+					endpoint: documentIntelligenceEndpoint
+				}
 			}
 		});
 
@@ -249,11 +265,15 @@
 			contentExtractionEngine = res.content_extraction.engine;
 			tikaServerUrl = res.content_extraction.tika_server_url;
 			showTikaServerUrl = contentExtractionEngine === 'tika';
+			documentIntelligenceEndpoint = res.content_extraction.document_intelligence_config.endpoint;
+			documentIntelligenceKey = res.content_extraction.document_intelligence_config.key;
+			showDocumentIntelligenceConfig = contentExtractionEngine === 'document_intelligence';
 
 			fileMaxSize = res?.file.max_size ?? '';
 			fileMaxCount = res?.file.max_count ?? '';
 
 			enableGoogleDriveIntegration = res.enable_google_drive_integration;
+			enableOneDriveIntegration = res.enable_onedrive_integration;
 		}
 	});
 </script>
@@ -585,10 +605,12 @@
 						bind:value={contentExtractionEngine}
 						on:change={(e) => {
 							showTikaServerUrl = e.target.value === 'tika';
+							showDocumentIntelligenceConfig = e.target.value === 'document_intelligence';
 						}}
 					>
 						<option value="">{$i18n.t('Default')} </option>
 						<option value="tika">{$i18n.t('Tika')}</option>
+						<option value="document_intelligence">{$i18n.t('Document Intelligence')}</option>
 					</select>
 				</div>
 			</div>
@@ -604,6 +626,21 @@
 					</div>
 				</div>
 			{/if}
+
+			{#if showDocumentIntelligenceConfig}
+				<div class="my-0.5 flex gap-2 pr-2">
+					<input
+						class="flex-1 w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-none"
+						placeholder={$i18n.t('Enter Document Intelligence Endpoint')}
+						bind:value={documentIntelligenceEndpoint}
+					/>
+
+					<SensitiveInput
+						placeholder={$i18n.t('Enter Document Intelligence Key')}
+						bind:value={documentIntelligenceKey}
+					/>
+				</div>
+			{/if}
 		</div>
 
 		<hr class=" border-gray-100 dark:border-gray-850" />
@@ -619,6 +656,17 @@
 			</div>
 		</div>
 
+		<div class="text-sm font-medium mb-1">{$i18n.t('OneDrive')}</div>
+
+		<div class="">
+			<div class="flex justify-between items-center text-xs">
+				<div class="text-xs font-medium">{$i18n.t('Enable OneDrive')}</div>
+				<div>
+					<Switch bind:state={enableOneDriveIntegration} />
+				</div>
+			</div>
+		</div>
+
 		<hr class=" border-gray-100 dark:border-gray-850" />
 
 		<div class=" ">

+ 13 - 0
src/lib/components/admin/Settings/WebSearch.svelte

@@ -130,6 +130,19 @@
 					</div>
 				</div>
 
+				<div class=" py-0.5 flex w-full justify-between">
+					<div class=" self-center text-xs font-medium">{$i18n.t('Trust Proxy Environment')}</div>
+					<div class="flex items-center relative">
+						<Tooltip
+							content={webConfig.search.trust_env
+								? 'Use proxy designated by http_proxy and https_proxy environment variables to fetch page contents'
+								: 'Use no proxy to fetch page contents.'}
+						>
+							<Switch bind:state={webConfig.search.trust_env} />
+						</Tooltip>
+					</div>
+				</div>
+
 				{#if webConfig.search.engine !== ''}
 					<div class="mt-1.5">
 						{#if webConfig.search.engine === 'searxng'}

+ 21 - 4
src/lib/components/chat/Chat.svelte

@@ -187,15 +187,20 @@
 		setToolIds();
 	}
 
+	$: if (atSelectedModel || selectedModels) {
+		setToolIds();
+	}
+
 	const setToolIds = async () => {
 		if (!$tools) {
 			tools.set(await getTools(localStorage.token));
 		}
 
-		if (selectedModels.length !== 1) {
+		if (selectedModels.length !== 1 && !atSelectedModel) {
 			return;
 		}
-		const model = $models.find((m) => m.id === selectedModels[0]);
+
+		const model = atSelectedModel ?? $models.find((m) => m.id === selectedModels[0]);
 		if (model) {
 			selectedToolIds = (model?.info?.meta?.toolIds ?? []).filter((id) =>
 				$tools.find((t) => t.id === id)
@@ -836,6 +841,7 @@
 				content: m.content,
 				info: m.info ? m.info : undefined,
 				timestamp: m.timestamp,
+				...(m.usage ? { usage: m.usage } : {}),
 				...(m.sources ? { sources: m.sources } : {})
 			})),
 			model_item: $models.find((m) => m.id === modelId),
@@ -1273,7 +1279,9 @@
 		const chatInputElement = document.getElementById('chat-input');
 
 		if (chatInputElement) {
+			await tick();
 			chatInputElement.style.height = '';
+			chatInputElement.style.height = Math.min(chatInputElement.scrollHeight, 320) + 'px';
 		}
 
 		const _files = JSON.parse(JSON.stringify(files));
@@ -1488,7 +1496,10 @@
 							params?.system ?? $settings?.system ?? '',
 							$user.name,
 							$settings?.userLocation
-								? await getAndUpdateUserLocation(localStorage.token)
+								? await getAndUpdateUserLocation(localStorage.token).catch((err) => {
+										console.error(err);
+										return undefined;
+									})
 								: undefined
 						)}${
 							(responseMessage?.userContext ?? null)
@@ -1573,7 +1584,12 @@
 				variables: {
 					...getPromptVariables(
 						$user.name,
-						$settings?.userLocation ? await getAndUpdateUserLocation(localStorage.token) : undefined
+						$settings?.userLocation
+							? await getAndUpdateUserLocation(localStorage.token).catch((err) => {
+									console.error(err);
+									return undefined;
+								})
+							: undefined
 					)
 				},
 				model_item: $models.find((m) => m.id === model.id),
@@ -1965,6 +1981,7 @@
 									bind:autoScroll
 									bind:prompt
 									{selectedModels}
+									{atSelectedModel}
 									{sendPrompt}
 									{showMessage}
 									{submitMessage}

+ 3 - 1
src/lib/components/chat/ChatPlaceholder.svelte

@@ -16,6 +16,7 @@
 
 	export let modelIds = [];
 	export let models = [];
+	export let atSelectedModel;
 
 	export let submitPrompt;
 
@@ -126,7 +127,8 @@
 		<div class=" w-full font-primary" in:fade={{ duration: 200, delay: 300 }}>
 			<Suggestions
 				className="grid grid-cols-2"
-				suggestionPrompts={models[selectedModelIdx]?.info?.meta?.suggestion_prompts ??
+				suggestionPrompts={atSelectedModel?.info?.meta?.suggestion_prompts ??
+					models[selectedModelIdx]?.info?.meta?.suggestion_prompts ??
 					$config?.default_prompt_suggestions ??
 					[]}
 				on:select={(e) => {

+ 36 - 9
src/lib/components/chat/MessageInput.svelte

@@ -2,6 +2,7 @@
 	import { toast } from 'svelte-sonner';
 	import { v4 as uuidv4 } from 'uuid';
 	import { createPicker, getAuthToken } from '$lib/utils/google-drive-picker';
+	import { pickAndDownloadFile } from '$lib/utils/onedrive-file-picker';
 
 	import { onMount, tick, getContext, createEventDispatcher, onDestroy } from 'svelte';
 	const dispatch = createEventDispatcher();
@@ -827,7 +828,11 @@
 															}
 
 															// Submit the prompt when Enter key is pressed
-															if (prompt !== '' && e.keyCode === 13 && !e.shiftKey) {
+															if (
+																(prompt !== '' || files.length > 0) &&
+																e.keyCode === 13 &&
+																!e.shiftKey
+															) {
 																dispatch('submit', prompt);
 															}
 														}
@@ -906,7 +911,11 @@
 													}
 
 													// Submit the prompt when Enter key is pressed
-													if (prompt !== '' && e.key === 'Enter' && !e.shiftKey) {
+													if (
+														(prompt !== '' || files.length > 0) &&
+														e.key === 'Enter' &&
+														!e.shiftKey
+													) {
 														dispatch('submit', prompt);
 													}
 												}
@@ -1108,6 +1117,21 @@
 													);
 												}
 											}}
+											uploadOneDriveHandler={async () => {
+												try {
+													const fileData = await pickAndDownloadFile();
+													if (fileData) {
+														const file = new File([fileData.blob], fileData.name, {
+															type: fileData.blob.type || 'application/octet-stream'
+														});
+														await uploadFileHandler(file);
+													} else {
+														console.log('No file was selected from OneDrive');
+													}
+												} catch (error) {
+													console.error('OneDrive Error:', error);
+												}
+											}}
 											onClose={async () => {
 												await tick();
 
@@ -1285,14 +1309,17 @@
 
 																	stream = null;
 
-																	if (!$TTSWorker) {
-																		await TTSWorker.set(
-																			new KokoroWorker({
-																				dtype: $settings.audio?.tts?.engineConfig?.dtype ?? 'fp32'
-																			})
-																		);
+																	if ($settings.audio?.tts?.engine === 'browser-kokoro') {
+																		// If the user has not initialized the TTS worker, initialize it
+																		if (!$TTSWorker) {
+																			await TTSWorker.set(
+																				new KokoroWorker({
+																					dtype: $settings.audio?.tts?.engineConfig?.dtype ?? 'fp32'
+																				})
+																			);
 
-																		await $TTSWorker.init();
+																			await $TTSWorker.init();
+																		}
 																	}
 
 																	showCallOverlay.set(true);

+ 7 - 1
src/lib/components/chat/MessageInput/Commands/Prompts.svelte

@@ -74,7 +74,13 @@
 		}
 
 		if (command.content.includes('{{USER_LOCATION}}')) {
-			const location = await getUserPosition();
+			let location;
+			try {
+				location = await getUserPosition();
+			} catch (error) {
+				toast.error($i18n.t('Location access not allowed'));
+				location = 'LOCATION_UNKNOWN';
+			}
 			text = text.replaceAll('{{USER_LOCATION}}', String(location));
 		}
 

+ 93 - 0
src/lib/components/chat/MessageInput/InputMenu.svelte

@@ -5,6 +5,7 @@
 
 	import { config, user, tools as _tools, mobile } from '$lib/stores';
 	import { createPicker } from '$lib/utils/google-drive-picker';
+
 	import { getTools } from '$lib/apis/tools';
 
 	import Dropdown from '$lib/components/common/Dropdown.svelte';
@@ -24,6 +25,7 @@
 	export let inputFilesHandler: Function;
 
 	export let uploadGoogleDriveHandler: Function;
+	export let uploadOneDriveHandler: Function;
 
 	export let selectedToolIds: string[] = [];
 
@@ -225,6 +227,97 @@
 					<div class="line-clamp-1">{$i18n.t('Google Drive')}</div>
 				</DropdownMenu.Item>
 			{/if}
+
+			{#if $config?.features?.enable_onedrive_integration}
+				<DropdownMenu.Item
+					class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-xl"
+					on:click={() => {
+						uploadOneDriveHandler();
+					}}
+				>
+					<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" class="w-5 h-5" fill="none">
+						<mask
+							id="mask0_87_7796"
+							style="mask-type:alpha"
+							maskUnits="userSpaceOnUse"
+							x="0"
+							y="6"
+							width="32"
+							height="20"
+						>
+							<path
+								d="M7.82979 26C3.50549 26 0 22.5675 0 18.3333C0 14.1921 3.35322 10.8179 7.54613 10.6716C9.27535 7.87166 12.4144 6 16 6C20.6308 6 24.5169 9.12183 25.5829 13.3335C29.1316 13.3603 32 16.1855 32 19.6667C32 23.0527 29 26 25.8723 25.9914L7.82979 26Z"
+								fill="#C4C4C4"
+							/>
+						</mask>
+						<g mask="url(#mask0_87_7796)">
+							<path
+								d="M7.83017 26.0001C5.37824 26.0001 3.18957 24.8966 1.75391 23.1691L18.0429 16.3335L30.7089 23.4647C29.5926 24.9211 27.9066 26.0001 26.0004 25.9915C23.1254 26.0001 12.0629 26.0001 7.83017 26.0001Z"
+								fill="url(#paint0_linear_87_7796)"
+							/>
+							<path
+								d="M25.5785 13.3149L18.043 16.3334L30.709 23.4647C31.5199 22.4065 32.0004 21.0916 32.0004 19.6669C32.0004 16.1857 29.1321 13.3605 25.5833 13.3337C25.5817 13.3274 25.5801 13.3212 25.5785 13.3149Z"
+								fill="url(#paint1_linear_87_7796)"
+							/>
+							<path
+								d="M7.06445 10.7028L18.0423 16.3333L25.5779 13.3148C24.5051 9.11261 20.6237 6 15.9997 6C12.4141 6 9.27508 7.87166 7.54586 10.6716C7.3841 10.6773 7.22358 10.6877 7.06445 10.7028Z"
+								fill="url(#paint2_linear_87_7796)"
+							/>
+							<path
+								d="M1.7535 23.1687L18.0425 16.3331L7.06471 10.7026C3.09947 11.0792 0 14.3517 0 18.3331C0 20.1665 0.657197 21.8495 1.7535 23.1687Z"
+								fill="url(#paint3_linear_87_7796)"
+							/>
+						</g>
+						<defs>
+							<linearGradient
+								id="paint0_linear_87_7796"
+								x1="4.42591"
+								y1="24.6668"
+								x2="27.2309"
+								y2="23.2764"
+								gradientUnits="userSpaceOnUse"
+							>
+								<stop stop-color="#2086B8" />
+								<stop offset="1" stop-color="#46D3F6" />
+							</linearGradient>
+							<linearGradient
+								id="paint1_linear_87_7796"
+								x1="23.8302"
+								y1="19.6668"
+								x2="30.2108"
+								y2="15.2082"
+								gradientUnits="userSpaceOnUse"
+							>
+								<stop stop-color="#1694DB" />
+								<stop offset="1" stop-color="#62C3FE" />
+							</linearGradient>
+							<linearGradient
+								id="paint2_linear_87_7796"
+								x1="8.51037"
+								y1="7.33333"
+								x2="23.3335"
+								y2="15.9348"
+								gradientUnits="userSpaceOnUse"
+							>
+								<stop stop-color="#0D3D78" />
+								<stop offset="1" stop-color="#063B83" />
+							</linearGradient>
+							<linearGradient
+								id="paint3_linear_87_7796"
+								x1="-0.340429"
+								y1="19.9998"
+								x2="14.5634"
+								y2="14.4649"
+								gradientUnits="userSpaceOnUse"
+							>
+								<stop stop-color="#16589B" />
+								<stop offset="1" stop-color="#1464B7" />
+							</linearGradient>
+						</defs>
+					</svg>
+					<div class="line-clamp-1">{$i18n.t('OneDrive')}</div>
+				</DropdownMenu.Item>
+			{/if}
 		</DropdownMenu.Content>
 	</div>
 </Dropdown>

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

@@ -32,6 +32,7 @@
 	export let prompt;
 	export let history = {};
 	export let selectedModels;
+	export let atSelectedModel;
 
 	let messages = [];
 
@@ -349,6 +350,7 @@
 	{#if Object.keys(history?.messages ?? {}).length == 0}
 		<ChatPlaceholder
 			modelIds={selectedModels}
+			{atSelectedModel}
 			submitPrompt={async (p) => {
 				let text = p;
 

+ 11 - 18
src/lib/components/chat/Messages/CodeBlock.svelte

@@ -1,18 +1,9 @@
 <script lang="ts">
-	import hljs from 'highlight.js';
-	import { loadPyodide } from 'pyodide';
 	import mermaid from 'mermaid';
 
 	import { v4 as uuidv4 } from 'uuid';
 
-	import {
-		getContext,
-		getAllContexts,
-		onMount,
-		tick,
-		createEventDispatcher,
-		onDestroy
-	} from 'svelte';
+	import { getContext, onMount, tick, onDestroy } from 'svelte';
 	import { copyToClipboard } from '$lib/utils';
 
 	import 'highlight.js/styles/github-dark.min.css';
@@ -25,10 +16,12 @@
 	import { toast } from 'svelte-sonner';
 
 	const i18n = getContext('i18n');
-	const dispatch = createEventDispatcher();
 
 	export let id = '';
 
+	export let onSave = (e) => {};
+	export let onCode = (e) => {};
+
 	export let save = false;
 	export let run = true;
 
@@ -71,7 +64,7 @@
 		saved = true;
 
 		code = _code;
-		dispatch('save', code);
+		onSave(code);
 
 		setTimeout(() => {
 			saved = false;
@@ -344,7 +337,7 @@
 		render();
 	}
 
-	$: dispatch('code', { lang, code });
+	$: onCode({ lang, code });
 
 	$: if (attributes) {
 		onAttributesUpdate();
@@ -380,7 +373,7 @@
 		console.log('codeblock', lang, code);
 
 		if (lang) {
-			dispatch('code', { lang, code });
+			onCode({ lang, code });
 		}
 		if (document.documentElement.classList.contains('dark')) {
 			mermaid.initialize({
@@ -468,11 +461,11 @@
 					value={code}
 					{id}
 					{lang}
-					on:save={() => {
+					onSave={() => {
 						saveCode();
 					}}
-					on:change={(e) => {
-						_code = e.detail.value;
+					onChange={(value) => {
+						_code = value;
 					}}
 				/>
 			</div>
@@ -514,7 +507,7 @@
 									<div class="flex flex-col gap-2">
 										{#each files as file}
 											{#if file.type.startsWith('image')}
-												<img src={file.data} alt="Output" />
+												<img src={file.data} alt="Output" class=" w-full max-w-[36rem]" />
 											{/if}
 										{/each}
 									</div>

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

@@ -88,14 +88,14 @@
 				code={token?.text ?? ''}
 				{attributes}
 				{save}
-				on:code={(e) => {
-					dispatch('code', e.detail);
+				onCode={(value) => {
+					dispatch('code', value);
 				}}
-				on:save={(e) => {
+				onSave={(e) => {
 					dispatch('update', {
 						raw: token.raw,
 						oldContent: token.text,
-						newContent: e.detail
+						newContent: value
 					});
 				}}
 			/>

+ 32 - 18
src/lib/components/chat/Messages/ResponseMessage.svelte

@@ -129,6 +129,7 @@
 	export let isLastMessage = true;
 	export let readOnly = false;
 
+	let buttonsContainerElement: HTMLDivElement;
 	let showDeleteConfirm = false;
 
 	let model = null;
@@ -518,6 +519,18 @@
 		// console.log('ResponseMessage mounted');
 
 		await tick();
+		if (buttonsContainerElement) {
+			console.log(buttonsContainerElement);
+			buttonsContainerElement.addEventListener('wheel', function (event) {
+				// console.log(event.deltaY);
+
+				event.preventDefault();
+				if (event.deltaY !== 0) {
+					// Adjust horizontal scroll position based on vertical scroll
+					buttonsContainerElement.scrollLeft += event.deltaY;
+				}
+			});
+		}
 	});
 </script>
 
@@ -802,10 +815,11 @@
 				</div>
 
 				{#if !edit}
-					{#if message.done || siblings.length > 1}
-						<div
-							class=" flex justify-start overflow-x-auto buttons text-gray-600 dark:text-gray-500 mt-0.5"
-						>
+					<div
+						bind:this={buttonsContainerElement}
+						class="flex justify-start overflow-x-auto buttons text-gray-600 dark:text-gray-500 mt-0.5"
+					>
+						{#if message.done || siblings.length > 1}
 							{#if siblings.length > 1}
 								<div class="flex self-center min-w-fit" dir="ltr">
 									<button
@@ -1313,20 +1327,20 @@
 									{/if}
 								{/if}
 							{/if}
-						</div>
-					{/if}
-
-					{#if message.done && showRateComment}
-						<RateComment
-							bind:message
-							bind:show={showRateComment}
-							on:save={async (e) => {
-								await feedbackHandler(null, {
-									...e.detail
-								});
-							}}
-						/>
-					{/if}
+						{/if}
+
+						{#if message.done && showRateComment}
+							<RateComment
+								bind:message
+								bind:show={showRateComment}
+								on:save={async (e) => {
+									await feedbackHandler(null, {
+										...e.detail
+									});
+								}}
+							/>
+						{/if}
+					</div>
 				{/if}
 			</div>
 		</div>

+ 2 - 1
src/lib/components/chat/Placeholder.svelte

@@ -213,7 +213,8 @@
 	<div class="mx-auto max-w-2xl font-primary" in:fade={{ duration: 200, delay: 200 }}>
 		<div class="mx-5">
 			<Suggestions
-				suggestionPrompts={models[selectedModelIdx]?.info?.meta?.suggestion_prompts ??
+				suggestionPrompts={atSelectedModel?.info?.meta?.suggestion_prompts ??
+					models[selectedModelIdx]?.info?.meta?.suggestion_prompts ??
 					$config?.default_prompt_suggestions ??
 					[]}
 				inputValue={prompt}

+ 40 - 2
src/lib/components/chat/ShortcutsModal.svelte

@@ -122,6 +122,30 @@
 							</div>
 						</div>
 					</div>
+
+					<div class="w-full flex justify-between items-center">
+						<div class=" text-sm">{$i18n.t('Generate prompt pair')}</div>
+
+						<div class="flex space-x-1 text-xs">
+							<div
+								class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
+							>
+								Ctrl/⌘
+							</div>
+
+							<div
+								class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
+							>
+								Shift
+							</div>
+
+							<div
+								class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
+							>
+								Enter
+							</div>
+						</div>
+					</div>
 				</div>
 
 				<div class="flex flex-col space-y-3 w-full self-start">
@@ -219,7 +243,7 @@
 				<div class="flex flex-col space-y-3 w-full self-start">
 					<div class="w-full flex justify-between items-center">
 						<div class=" text-sm">
-							{$i18n.t('Attach file')}
+							{$i18n.t('Attach file from knowledge')}
 						</div>
 
 						<div class="flex space-x-1 text-xs">
@@ -247,7 +271,7 @@
 
 					<div class="w-full flex justify-between items-center">
 						<div class=" text-sm">
-							{$i18n.t('Select model')}
+							{$i18n.t('Talk to model')}
 						</div>
 
 						<div class="flex space-x-1 text-xs">
@@ -258,6 +282,20 @@
 							</div>
 						</div>
 					</div>
+
+					<div class="w-full flex justify-between items-center">
+						<div class=" text-sm">
+							{$i18n.t('Accept autocomplete generation / Jump to prompt variable')}
+						</div>
+
+						<div class="flex space-x-1 text-xs">
+							<div
+								class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
+							>
+								TAB
+							</div>
+						</div>
+					</div>
 				</div>
 			</div>
 		</div>

+ 12 - 3
src/lib/components/common/CodeEditor.svelte

@@ -21,6 +21,10 @@
 
 	export let boilerplate = '';
 	export let value = '';
+
+	export let onSave = () => {};
+	export let onChange = () => {};
+
 	let _value = '';
 
 	$: if (value) {
@@ -43,6 +47,10 @@
 
 	let codeEditor;
 
+	export const focus = () => {
+		codeEditor.focus();
+	};
+
 	let isDarkMode = false;
 	let editorTheme = new Compartment();
 	let editorLanguage = new Compartment();
@@ -75,7 +83,7 @@
 				});
 
 				_value = formattedCode;
-				dispatch('change', { value: _value });
+				onChange(_value);
 				await tick();
 
 				toast.success($i18n.t('Code formatted successfully'));
@@ -94,7 +102,7 @@
 		EditorView.updateListener.of((e) => {
 			if (e.docChanged) {
 				_value = e.state.doc.toString();
-				dispatch('change', { value: _value });
+				onChange(_value);
 			}
 		}),
 		editorTheme.of([]),
@@ -170,7 +178,8 @@
 		const keydownHandler = async (e) => {
 			if ((e.ctrlKey || e.metaKey) && e.key === 's') {
 				e.preventDefault();
-				dispatch('save');
+
+				onSave();
 			}
 
 			// Format code when Ctrl + Shift + F is pressed

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

@@ -180,7 +180,6 @@
 		}
 
 		if (model) {
-			console.log(model);
 			name = model.name;
 			await tick();
 

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

@@ -1,5 +1,5 @@
 <script>
-	import { getContext, createEventDispatcher, onMount, tick } from 'svelte';
+	import { getContext, onMount, tick } from 'svelte';
 
 	const i18n = getContext('i18n');
 
@@ -12,8 +12,6 @@
 	import LockClosed from '$lib/components/icons/LockClosed.svelte';
 	import AccessControlModal from '../common/AccessControlModal.svelte';
 
-	const dispatch = createEventDispatcher();
-
 	let formElement = null;
 	let loading = false;
 
@@ -23,6 +21,8 @@
 	export let edit = false;
 	export let clone = false;
 
+	export let onSave = () => {};
+
 	export let id = '';
 	export let name = '';
 	export let meta = {
@@ -150,7 +150,7 @@ class Tools:
 
 	const saveHandler = async () => {
 		loading = true;
-		dispatch('save', {
+		onSave({
 			id,
 			name,
 			meta,
@@ -284,10 +284,10 @@ class Tools:
 						value={content}
 						{boilerplate}
 						lang="python"
-						on:change={(e) => {
-							_content = e.detail.value;
+						onChange={(e) => {
+							_content = e;
 						}}
-						on:save={() => {
+						onSave={() => {
 							if (formElement) {
 								formElement.requestSubmit();
 							}

+ 12 - 2
src/lib/i18n/locales/ar-BH/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "يتم استخدام نموذج المهمة عند تنفيذ مهام مثل إنشاء عناوين للدردشات واستعلامات بحث الويب",
 	"a user": "مستخدم",
 	"About": "عن",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "",
 	"Access Control": "",
 	"Accessible to all users": "",
@@ -93,7 +94,7 @@
 	"Artifacts": "",
 	"Ask a question": "",
 	"Assistant": "",
-	"Attach file": "أرفق ملف",
+	"Attach file from knowledge": "",
 	"Attention to detail": "انتبه للتفاصيل",
 	"Attribute for Mail": "",
 	"Attribute for Username": "",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "",
 	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "المستند",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "",
 	"Documents": "مستندات",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "لا يجري أي اتصالات خارجية، وتظل بياناتك آمنة على الخادم المستضاف محليًا.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "",
 	"Enable New Sign Ups": "تفعيل عمليات التسجيل الجديدة",
+	"Enable OneDrive": "",
 	"Enable Web Search": "تمكين بحث الويب",
 	"Enabled": "",
 	"Engine": "",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "أدخل الChunk Overlap",
 	"Enter Chunk Size": "أدخل Chunk الحجم",
 	"Enter description": "",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "أدخل عنوان URL ل Github Raw",
@@ -510,6 +516,7 @@
 	"General Settings": "الاعدادات العامة",
 	"Generate an image": "",
 	"Generate Image": "",
+	"Generate prompt pair": "",
 	"Generating search query": "إنشاء استعلام بحث",
 	"Get started": "",
 	"Get started with {{WEBUI_NAME}}": "",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "",
 	"Local Models": "",
+	"Location access not allowed": "",
 	"Lost": "",
 	"LTR": "من جهة اليسار إلى اليمين",
 	"Made by Open WebUI Community": "OpenWebUI تم إنشاؤه بواسطة مجتمع ",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "",
 	"Ollama Version": "Ollama الاصدار",
 	"On": "تشغيل",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "يُسمح فقط بالأحرف الأبجدية الرقمية والواصلات في سلسلة الأمر.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "",
 	"Select Knowledge": "",
-	"Select model": " أختار موديل",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "النموذج (النماذج) المحددة لا تدعم مدخلات الصور",
 	"Semantic distance to query": "",
@@ -957,6 +965,7 @@
 	"Tags Generation": "",
 	"Tags Generation Prompt": "",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "",
+	"Talk to model": "",
 	"Tap to interrupt": "",
 	"Tasks": "",
 	"Tavily API Key": "",
@@ -1041,6 +1050,7 @@
 	"Top P": "Top P",
 	"Transformers": "",
 	"Trouble accessing Ollama?": "هل تواجه مشكلة في الوصول",
+	"Trust Proxy Environment": "",
 	"TTS Model": "",
 	"TTS Settings": "TTS اعدادات",
 	"TTS Voice": "",

+ 12 - 2
src/lib/i18n/locales/bg-BG/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "Моделът на задачите се използва при изпълнение на задачи като генериране на заглавия за чатове и заявки за търсене в мрежата",
 	"a user": "потребител",
 	"About": "Относно",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "Достъп",
 	"Access Control": "Контрол на достъпа",
 	"Accessible to all users": "Достъпно за всички потребители",
@@ -93,7 +94,7 @@
 	"Artifacts": "Артефакти",
 	"Ask a question": "Задайте въпрос",
 	"Assistant": "Асистент",
-	"Attach file": "Прикачване на файл",
+	"Attach file from knowledge": "",
 	"Attention to detail": "Внимание към детайлите",
 	"Attribute for Mail": "Атрибут за поща",
 	"Attribute for Username": "Атрибут за потребителско име",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "Не инсталирайте функции от източници, на които не се доверявате напълно.",
 	"Do not install tools from sources you do not fully trust.": "Не инсталирайте инструменти от източници, на които не се доверявате напълно.",
 	"Document": "Документ",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "Документация",
 	"Documents": "Документи",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "няма външни връзки, и вашите данни остават сигурни на локално назначен сървър.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "Активиране на оценяване на съобщения",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "Активиране на Mirostat семплиране за контрол на перплексията. (По подразбиране: 0, 0 = Деактивирано, 1 = Mirostat, 2 = Mirostat 2.0)",
 	"Enable New Sign Ups": "Включване на нови регистрации",
+	"Enable OneDrive": "",
 	"Enable Web Search": "Разрешаване на търсене в уеб",
 	"Enabled": "Активирано",
 	"Engine": "Двигател",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "Въведете припокриване на чънкове",
 	"Enter Chunk Size": "Въведете размер на чънк",
 	"Enter description": "Въведете описание",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "Въведете домейни, разделени със запетаи (напр. example.com,site.org)",
 	"Enter Exa API Key": "Въведете API ключ за Exa",
 	"Enter Github Raw URL": "Въведете URL адрес на Github Raw",
@@ -510,6 +516,7 @@
 	"General Settings": "Основни Настройки",
 	"Generate an image": "Генериране на изображение",
 	"Generate Image": "Генериране на изображение",
+	"Generate prompt pair": "",
 	"Generating search query": "Генериране на заявка за търсене",
 	"Get started": "Започнете",
 	"Get started with {{WEBUI_NAME}}": "Започнете с {{WEBUI_NAME}}",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "Зареждане на Kokoro.js...",
 	"Local": "Локално",
 	"Local Models": "Локални модели",
+	"Location access not allowed": "",
 	"Lost": "Изгубено",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "Направено от OpenWebUI общността",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "Настройките на Ollama API са актуализирани",
 	"Ollama Version": "Ollama Версия",
 	"On": "Вкл.",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "Разрешени са само буквено-цифрови знаци и тирета",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "Само алфанумерични знаци и тире са разрешени в командния низ.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "Само колекции могат да бъдат редактирани, създайте нова база от знания, за да редактирате/добавяте документи.",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "Изберете инстанция на Ollama",
 	"Select Engine": "Изберете двигател",
 	"Select Knowledge": "Изберете знание",
-	"Select model": "Изберете модел",
 	"Select only one model to call": "Изберете само един модел за извикване",
 	"Selected model(s) do not support image inputs": "Избраният(те) модел(и) не поддържа въвеждане на изображения",
 	"Semantic distance to query": "Семантично разстояние до заявката",
@@ -957,6 +965,7 @@
 	"Tags Generation": "Генериране на тагове",
 	"Tags Generation Prompt": "Промпт за генериране на тагове",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "Безопашковото семплиране се използва за намаляване на влиянието на по-малко вероятните токени от изхода. По-висока стойност (напр. 2.0) ще намали влиянието повече, докато стойност 1.0 деактивира тази настройка. (по подразбиране: 1)",
+	"Talk to model": "",
 	"Tap to interrupt": "Докоснете за прекъсване",
 	"Tasks": "Задачи",
 	"Tavily API Key": "Tavily API Ключ",
@@ -1041,6 +1050,7 @@
 	"Top P": "Топ P",
 	"Transformers": "Трансформатори",
 	"Trouble accessing Ollama?": "Проблеми с достъпа до Ollama?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "TTS Модел",
 	"TTS Settings": "TTS Настройки",
 	"TTS Voice": "TTS Глас",

+ 12 - 2
src/lib/i18n/locales/bn-BD/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "চ্যাট এবং ওয়েব অনুসন্ধান প্রশ্নের জন্য শিরোনাম তৈরি করার মতো কাজগুলি সম্পাদন করার সময় একটি টাস্ক মডেল ব্যবহার করা হয়",
 	"a user": "একজন ব্যাবহারকারী",
 	"About": "সম্পর্কে",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "",
 	"Access Control": "",
 	"Accessible to all users": "",
@@ -93,7 +94,7 @@
 	"Artifacts": "",
 	"Ask a question": "",
 	"Assistant": "",
-	"Attach file": "ফাইল যুক্ত করুন",
+	"Attach file from knowledge": "",
 	"Attention to detail": "বিস্তারিত বিশেষতা",
 	"Attribute for Mail": "",
 	"Attribute for Username": "",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "",
 	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "ডকুমেন্ট",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "",
 	"Documents": "ডকুমেন্টসমূহ",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "কোন এক্সটার্নাল কানেকশন তৈরি করে না, এবং আপনার ডেটা আর লোকালি হোস্টেড সার্ভারেই নিরাপদে থাকে।",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "",
 	"Enable New Sign Ups": "নতুন সাইনআপ চালু করুন",
+	"Enable OneDrive": "",
 	"Enable Web Search": "ওয়েব অনুসন্ধান সক্ষম করুন",
 	"Enabled": "",
 	"Engine": "",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "চাঙ্ক ওভারল্যাপ লিখুন",
 	"Enter Chunk Size": "চাংক সাইজ লিখুন",
 	"Enter description": "",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "গিটহাব কাঁচা URL লিখুন",
@@ -510,6 +516,7 @@
 	"General Settings": "সাধারণ সেটিংসমূহ",
 	"Generate an image": "",
 	"Generate Image": "",
+	"Generate prompt pair": "",
 	"Generating search query": "অনুসন্ধান ক্যোয়ারী তৈরি করা হচ্ছে",
 	"Get started": "",
 	"Get started with {{WEBUI_NAME}}": "",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "",
 	"Local Models": "",
+	"Location access not allowed": "",
 	"Lost": "",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "OpenWebUI কমিউনিটিকর্তৃক নির্মিত",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "",
 	"Ollama Version": "Ollama ভার্সন",
 	"On": "চালু",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "কমান্ড স্ট্রিং-এ শুধুমাত্র ইংরেজি অক্ষর, সংখ্যা এবং হাইফেন ব্যবহার করা যাবে।",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "",
 	"Select Knowledge": "",
-	"Select model": "মডেল নির্বাচন করুন",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "নির্বাচিত মডেল(গুলি) চিত্র ইনপুট সমর্থন করে না",
 	"Semantic distance to query": "",
@@ -957,6 +965,7 @@
 	"Tags Generation": "",
 	"Tags Generation Prompt": "",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "",
+	"Talk to model": "",
 	"Tap to interrupt": "",
 	"Tasks": "",
 	"Tavily API Key": "",
@@ -1041,6 +1050,7 @@
 	"Top P": "Top P",
 	"Transformers": "",
 	"Trouble accessing Ollama?": "Ollama এক্সেস করতে সমস্যা হচ্ছে?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "",
 	"TTS Settings": "TTS সেটিংসমূহ",
 	"TTS Voice": "",

+ 62 - 52
src/lib/i18n/locales/ca-ES/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "Un model de tasca s'utilitza quan es realitzen tasques com ara generar títols per a xats i consultes de cerca per a la web",
 	"a user": "un usuari",
 	"About": "Sobre",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "Accés",
 	"Access Control": "Control d'accés",
 	"Accessible to all users": "Accessible a tots els usuaris",
@@ -20,7 +21,7 @@
 	"Account Activation Pending": "Activació del compte pendent",
 	"Accurate information": "Informació precisa",
 	"Actions": "Accions",
-	"Activate": "",
+	"Activate": "Activar",
 	"Activate this command by typing \"/{{COMMAND}}\" to chat input.": "Activa aquest comanda escrivint \"{{COMMAND}}\" en el xat",
 	"Active Users": "Usuaris actius",
 	"Add": "Afegir",
@@ -93,14 +94,14 @@
 	"Artifacts": "Artefactes",
 	"Ask a question": "Fer una pregunta",
 	"Assistant": "Assistent",
-	"Attach file": "Adjuntar arxiu",
+	"Attach file from knowledge": "",
 	"Attention to detail": "Atenció al detall",
 	"Attribute for Mail": "Atribut per al Correu",
 	"Attribute for Username": "Atribut per al Nom d'usuari",
 	"Audio": "Àudio",
 	"August": "Agost",
 	"Authenticate": "Autenticar",
-	"Authentication": "",
+	"Authentication": "Autenticació",
 	"Auto-Copy Response to Clipboard": "Copiar la resposta automàticament al porta-retalls",
 	"Auto-playback response": "Reproduir la resposta automàticament",
 	"Autocomplete Generation": "Generació automàtica",
@@ -124,11 +125,11 @@
 	"Beta": "Beta",
 	"Bing Search V7 Endpoint": "Punt de connexió a Bing Search V7",
 	"Bing Search V7 Subscription Key": "Clau de subscripció a Bing Search V7",
-	"Bocha Search API Key": "",
+	"Bocha Search API Key": "Clau API de Bocha Search",
 	"Brave Search API Key": "Clau API de Brave Search",
 	"By {{name}}": "Per {{name}}",
 	"Bypass SSL verification for Websites": "Desactivar la verificació SSL per a l'accés a Internet",
-	"Calendar": "",
+	"Calendar": "Calendari",
 	"Call": "Trucada",
 	"Call feature is not supported when using Web STT engine": "La funció de trucada no s'admet quan s'utilitza el motor Web STT",
 	"Camera": "Càmera",
@@ -180,13 +181,13 @@
 	"Clone of {{TITLE}}": "Clon de {{TITLE}}",
 	"Close": "Tancar",
 	"Code execution": "Execució de codi",
-	"Code Execution": "",
-	"Code Execution Engine": "",
-	"Code Execution Timeout": "",
+	"Code Execution": "Excució de Codi",
+	"Code Execution Engine": "Motor d'execució de codi",
+	"Code Execution Timeout": "Temps màxim d'execució de codi",
 	"Code formatted successfully": "Codi formatat correctament",
 	"Code Interpreter": "Intèrpret de codi",
-	"Code Interpreter Engine": "",
-	"Code Interpreter Prompt Template": "",
+	"Code Interpreter Engine": "Motor de l'intèrpret de codi",
+	"Code Interpreter Prompt Template": "Plantilla de la indicació de l'intèrpret de codi",
 	"Collection": "Col·lecció",
 	"Color": "Color",
 	"ComfyUI": "ComfyUI",
@@ -203,7 +204,7 @@
 	"Confirm Password": "Confirmar la contrasenya",
 	"Confirm your action": "Confirma la teva acció",
 	"Confirm your new password": "Confirma la teva nova contrasenya",
-	"Connect to your own OpenAI compatible API endpoints.": "",
+	"Connect to your own OpenAI compatible API endpoints.": "Connecta als teus propis punts de connexió de l'API compatible amb OpenAI",
 	"Connections": "Connexions",
 	"Constrains effort on reasoning for reasoning models. Only applicable to reasoning models from specific providers that support reasoning effort. (Default: medium)": "Restringeix l'esforç de raonament dels models de raonament. Només aplicable a models de raonament de proveïdors específics que donen suport a l'esforç de raonament. (Per defecte: mitjà)",
 	"Contact Admin for WebUI Access": "Posat en contacte amb l'administrador per accedir a WebUI",
@@ -215,7 +216,7 @@
 	"Continue with Email": "Continuar amb el correu",
 	"Continue with LDAP": "Continuar amb LDAP",
 	"Control how message text is split for TTS requests. 'Punctuation' splits into sentences, 'paragraphs' splits into paragraphs, and 'none' keeps the message as a single string.": "Controlar com es divideix el text del missatge per a les sol·licituds TTS. 'Puntuació' divideix en frases, 'paràgrafs' divideix en paràgrafs i 'cap' manté el missatge com una cadena única.",
-	"Control the repetition of token sequences in the generated text. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 1.1) will be more lenient. At 1, it is disabled. (Default: 1.1)": "",
+	"Control the repetition of token sequences in the generated text. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 1.1) will be more lenient. At 1, it is disabled. (Default: 1.1)": "Controlar la repetició de seqüències de tokens en el text generat. Un valor més alt (p. ex., 1,5) penalitzarà les repeticions amb més força, mentre que un valor més baix (p. ex., 1,1) serà més indulgent. A l'1, està desactivat. (Per defecte: 1.1)",
 	"Controls": "Controls",
 	"Controls the balance between coherence and diversity of the output. A lower value will result in more focused and coherent text. (Default: 5.0)": "Controlar l'equilibri entre la coherència i la diversitat de la sortida. Un valor més baix donarà lloc a un text més enfocat i coherent. (Per defecte: 5.0)",
 	"Copied": "Copiat",
@@ -227,7 +228,7 @@
 	"Copy Link": "Copiar l'enllaç",
 	"Copy to clipboard": "Copiar al porta-retalls",
 	"Copying to clipboard was successful!": "La còpia al porta-retalls s'ha realitzat correctament",
-	"CORS must be properly configured by the provider to allow requests from Open WebUI.": "",
+	"CORS must be properly configured by the provider to allow requests from Open WebUI.": "CORS ha de ser configurat correctament pel proveïdor per permetre les sol·licituds d'Open WebUI",
 	"Create": "Crear",
 	"Create a knowledge base": "Crear una base de coneixement",
 	"Create a model": "Crear un model",
@@ -271,7 +272,7 @@
 	"Delete folder?": "Eliminar la carpeta?",
 	"Delete function?": "Eliminar funció?",
 	"Delete Message": "Eleiminar el missatge",
-	"Delete message?": "",
+	"Delete message?": "Eliminar el missatge?",
 	"Delete prompt?": "Eliminar indicació?",
 	"delete this link": "Eliminar aquest enllaç",
 	"Delete tool?": "Eliminar eina?",
@@ -282,15 +283,15 @@
 	"Describe your knowledge base and objectives": "Descriu la teva base de coneixement i objectius",
 	"Description": "Descripció",
 	"Didn't fully follow instructions": "No s'han seguit les instruccions completament",
-	"Direct Connections": "",
-	"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "",
-	"Direct Connections settings updated": "",
+	"Direct Connections": "Connexions directes",
+	"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Les connexions directes permeten als usuaris connectar-se als seus propis endpoints d'API compatibles amb OpenAI.",
+	"Direct Connections settings updated": "Configuració de les connexions directes actualitzada",
 	"Disabled": "Deshabilitat",
 	"Discover a function": "Descobrir una funció",
 	"Discover a model": "Descobrir un model",
 	"Discover a prompt": "Descobrir una indicació",
 	"Discover a tool": "Descobrir una eina",
-	"Discover how to use Open WebUI and seek support from the community.": "",
+	"Discover how to use Open WebUI and seek support from the community.": "Descobreix com utilitzar Open WebUI i demana suport a la comunitat.",
 	"Discover wonders": "Descobrir meravelles",
 	"Discover, download, and explore custom functions": "Descobrir, descarregar i explorar funcions personalitzades",
 	"Discover, download, and explore custom prompts": "Descobrir, descarregar i explorar indicacions personalitzades",
@@ -305,6 +306,8 @@
 	"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 Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "Documentació",
 	"Documents": "Documents",
 	"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.",
@@ -315,14 +318,14 @@
 	"Don't like the style": "No t'agrada l'estil?",
 	"Done": "Fet",
 	"Download": "Descarregar",
-	"Download as SVG": "",
+	"Download as SVG": "Descarrega com a SVG",
 	"Download canceled": "Descàrrega cancel·lada",
 	"Download Database": "Descarregar la base de dades",
 	"Drag and drop a file to upload or select a file to view": "Arrossegar un arxiu per pujar o escull un arxiu a veure",
 	"Draw": "Dibuixar",
 	"Drop any files here to add to the conversation": "Deixa qualsevol arxiu aquí per afegir-lo a la conversa",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p. ex. '30s','10m'. Les unitats de temps vàlides són 's', 'm', 'h'.",
-	"e.g. 60": "",
+	"e.g. 60": "p. ex. 60",
 	"e.g. A filter to remove profanity from text": "p. ex. Un filtre per eliminar paraules malsonants del text",
 	"e.g. My Filter": "p. ex. El meu filtre",
 	"e.g. My Tools": "p. ex. Les meves eines",
@@ -346,7 +349,7 @@
 	"Embedding model set to \"{{embedding_model}}\"": "Model d'incrustació configurat a \"{{embedding_model}}\"",
 	"Enable API Key": "Activar la Clau API",
 	"Enable autocomplete generation for chat messages": "Activar la generació automàtica per als missatges del xat",
-	"Enable Code Interpreter": "",
+	"Enable Code Interpreter": "Activar l'intèrpret de codi",
 	"Enable Community Sharing": "Activar l'ús compartit amb la comunitat",
 	"Enable Google Drive": "Activar Google Drive",
 	"Enable Memory Locking (mlock) to prevent model data from being swapped out of RAM. This option locks the model's working set of pages into RAM, ensuring that they will not be swapped out to disk. This can help maintain performance by avoiding page faults and ensuring fast data access.": "Activar el bloqueig de memòria (mlock) per evitar que les dades del model s'intercanviïn fora de la memòria RAM. Aquesta opció bloqueja el conjunt de pàgines de treball del model a la memòria RAM, assegurant-se que no s'intercanviaran al disc. Això pot ajudar a mantenir el rendiment evitant errors de pàgina i garantint un accés ràpid a les dades.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "Permetre la qualificació de missatges",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "Activar el mostreig de Mirostat per controlar la perplexitat. (Per defecte: 0, 0 = Inhabilitat, 1 = Mirostat, 2 = Mirostat 2.0)",
 	"Enable New Sign Ups": "Permetre nous registres",
+	"Enable OneDrive": "",
 	"Enable Web Search": "Activar la cerca web",
 	"Enabled": "Habilitat",
 	"Engine": "Motor",
@@ -365,13 +369,15 @@
 	"Enter Application DN Password": "Introdueix la contrasenya del DN d'aplicació",
 	"Enter Bing Search V7 Endpoint": "Introdueix el punt de connexió de Bing Search V7",
 	"Enter Bing Search V7 Subscription Key": "Introdueix la clau de subscripció de Bing Search V7",
-	"Enter Bocha Search API Key": "",
+	"Enter Bocha Search API Key": "Introdueix la clau API de Bocha Search",
 	"Enter Brave Search API Key": "Introdueix la clau API de Brave Search",
 	"Enter certificate path": "Introdueix el camí del certificat",
 	"Enter CFG Scale (e.g. 7.0)": "Entra l'escala CFG (p.ex. 7.0)",
 	"Enter Chunk Overlap": "Introdueix la mida de solapament de blocs",
 	"Enter Chunk Size": "Introdueix la mida del bloc",
 	"Enter description": "Introdueix la descripció",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "Introdueix els dominis separats per comes (p. ex. example.com,site.org)",
 	"Enter Exa API Key": "Introdueix la clau API de d'EXA",
 	"Enter Github Raw URL": "Introdueix l'URL en brut de Github",
@@ -379,9 +385,9 @@
 	"Enter Google PSE Engine Id": "Introdueix l'identificador del motor PSE de Google",
 	"Enter Image Size (e.g. 512x512)": "Introdueix la mida de la imatge (p. ex. 512x512)",
 	"Enter Jina API Key": "Introdueix la clau API de Jina",
-	"Enter Jupyter Password": "",
-	"Enter Jupyter Token": "",
-	"Enter Jupyter URL": "",
+	"Enter Jupyter Password": "Introdueix la contrasenya de Jupyter",
+	"Enter Jupyter Token": "Introdueix el token de Jupyter",
+	"Enter Jupyter URL": "Introdueix la URL de Jupyter",
 	"Enter Kagi Search API Key": "Introdueix la clau API de Kagi Search",
 	"Enter language codes": "Introdueix els codis de llenguatge",
 	"Enter Model ID": "Introdueix l'identificador del model",
@@ -397,8 +403,8 @@
 	"Enter SearchApi Engine": "Introdueix el motor SearchApi",
 	"Enter Searxng Query URL": "Introdueix l'URL de consulta de Searxng",
 	"Enter Seed": "Introdueix la llavor",
-	"Enter SerpApi API Key": "",
-	"Enter SerpApi Engine": "",
+	"Enter SerpApi API Key": "Introdueix la clau API SerpApi",
+	"Enter SerpApi Engine": "Introdueix el motor API SerpApi",
 	"Enter Serper API Key": "Introdueix la clau API Serper",
 	"Enter Serply API Key": "Introdueix la clau API Serply",
 	"Enter Serpstack API Key": "Introdueix la clau API Serpstack",
@@ -410,7 +416,7 @@
 	"Enter Tavily API Key": "Introdueix la clau API de Tavily",
 	"Enter the public URL of your WebUI. This URL will be used to generate links in the notifications.": "Entra la URL pública de WebUI. Aquesta URL s'utilitzarà per generar els enllaços en les notificacions.",
 	"Enter Tika Server URL": "Introdueix l'URL del servidor Tika",
-	"Enter timeout in seconds": "",
+	"Enter timeout in seconds": "Entra el temps màxim en segons",
 	"Enter Top K": "Introdueix Top K",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "Introdueix l'URL (p. ex. http://127.0.0.1:7860/)",
 	"Enter URL (e.g. http://localhost:11434)": "Introdueix l'URL (p. ex. http://localhost:11434)",
@@ -458,7 +464,7 @@
 	"Failed to save models configuration": "No s'ha pogut desar la configuració dels models",
 	"Failed to update settings": "No s'han pogut actualitzar les preferències",
 	"Failed to upload file.": "No s'ha pogut pujar l'arxiu.",
-	"Features": "",
+	"Features": "Característiques",
 	"Features Permissions": "Permisos de les característiques",
 	"February": "Febrer",
 	"Feedback History": "Històric de comentaris",
@@ -488,7 +494,7 @@
 	"Form": "Formulari",
 	"Format your variables using brackets like this:": "Formata les teves variables utilitzant claudàtors així:",
 	"Frequency Penalty": "Penalització per freqüència",
-	"Full Context Mode": "",
+	"Full Context Mode": "Mode de context complert",
 	"Function": "Funció",
 	"Function Calling": "Crida a funcions",
 	"Function created successfully": "La funció s'ha creat correctament",
@@ -503,13 +509,14 @@
 	"Functions allow arbitrary code execution": "Les funcions permeten l'execució de codi arbitrari",
 	"Functions allow arbitrary code execution.": "Les funcions permeten l'execució de codi arbitrari.",
 	"Functions imported successfully": "Les funcions s'han importat correctament",
-	"Gemini": "",
-	"Gemini API Config": "",
-	"Gemini API Key is required.": "",
+	"Gemini": "Gemini",
+	"Gemini API Config": "Configuració de Gemini API",
+	"Gemini API Key is required.": "La clau API de Gemini és necessària",
 	"General": "General",
 	"General Settings": "Preferències generals",
 	"Generate an image": "Generar una imatge",
 	"Generate Image": "Generar imatge",
+	"Generate prompt pair": "",
 	"Generating search query": "Generant consulta",
 	"Get started": "Començar",
 	"Get started with {{WEBUI_NAME}}": "Començar amb {{WEBUI_NAME}}",
@@ -532,7 +539,7 @@
 	"Hex Color": "Color hexadecimal",
 	"Hex Color - Leave empty for default color": "Color hexadecimal - Deixar buit per a color per defecte",
 	"Hide": "Amaga",
-	"Home": "",
+	"Home": "Inici",
 	"Host": "Servidor",
 	"How can I help you today?": "Com et puc ajudar avui?",
 	"How would you rate this response?": "Com avaluaries aquesta resposta?",
@@ -576,8 +583,8 @@
 	"JSON Preview": "Vista prèvia del document JSON",
 	"July": "Juliol",
 	"June": "Juny",
-	"Jupyter Auth": "",
-	"Jupyter URL": "",
+	"Jupyter Auth": "Autenticació Jupyter",
+	"Jupyter URL": "URL de Jupyter",
 	"JWT Expiration": "Caducitat del JWT",
 	"JWT Token": "Token JWT",
 	"Kagi Search API Key": "Clau API de Kagi Search",
@@ -607,14 +614,15 @@
 	"Leave empty to include all models or select specific models": "Deixa-ho en blanc per incloure tots els models o selecciona models específics",
 	"Leave empty to use the default prompt, or enter a custom prompt": "Deixa-ho en blanc per utilitzar la indicació predeterminada o introdueix una indicació personalitzada",
 	"Leave model field empty to use the default model.": "Deixa el camp de model buit per utilitzar el model per defecte.",
-	"License": "",
+	"License": "Llicència",
 	"Light": "Clar",
 	"Listening...": "Escoltant...",
 	"Llama.cpp": "Llama.cpp",
 	"LLMs can make mistakes. Verify important information.": "Els models de llenguatge poden cometre errors. Verifica la informació important.",
-	"Loading Kokoro.js...": "",
+	"Loading Kokoro.js...": "Carregant Kokoro.js",
 	"Local": "Local",
 	"Local Models": "Models locals",
+	"Location access not allowed": "",
 	"Lost": "Perdut",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "Creat per la Comunitat OpenWebUI",
@@ -622,7 +630,7 @@
 	"Make sure to export a workflow.json file as API format from ComfyUI.": "Assegura't d'exportar un fitxer workflow.json com a format API des de ComfyUI.",
 	"Manage": "Gestionar",
 	"Manage Arena Models": "Gestionar els models de l'Arena",
-	"Manage Direct Connections": "",
+	"Manage Direct Connections": "Gestionar les connexions directes",
 	"Manage Models": "Gestionar els models",
 	"Manage Ollama": "Gestionar Ollama",
 	"Manage Ollama API Connections": "Gestionar les connexions a l'API d'Ollama",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "La configuració de l'API d'Ollama s'ha actualitzat",
 	"Ollama Version": "Versió d'Ollama",
 	"On": "Activat",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "Només es permeten caràcters alfanumèrics i guions",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "Només es permeten caràcters alfanumèrics i guions en la comanda.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "Només es poden editar col·leccions, crea una nova base de coneixement per editar/afegir documents.",
@@ -766,7 +775,7 @@
 	"Plain text (.txt)": "Text pla (.txt)",
 	"Playground": "Zona de jocs",
 	"Please carefully review the following warnings:": "Si us plau, revisa els següents avisos amb cura:",
-	"Please do not close the settings page while loading the model.": "",
+	"Please do not close the settings page while loading the model.": "No tanquis la pàgina de configuració mentre carregues el model.",
 	"Please enter a prompt": "Si us plau, entra una indicació",
 	"Please fill in all fields.": "Emplena tots els camps, si us plau.",
 	"Please select a model first.": "Si us plau, selecciona un model primer",
@@ -776,7 +785,7 @@
 	"Positive attitude": "Actitud positiva",
 	"Prefix ID": "Identificador del prefix",
 	"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "L'identificador de prefix s'utilitza per evitar conflictes amb altres connexions afegint un prefix als ID de model; deixa'l en blanc per desactivar-lo.",
-	"Presence Penalty": "",
+	"Presence Penalty": "Penalització de presència",
 	"Previous 30 days": "30 dies anteriors",
 	"Previous 7 days": "7 dies anteriors",
 	"Profile Image": "Imatge de perfil",
@@ -813,7 +822,7 @@
 	"Rename": "Canviar el nom",
 	"Reorder Models": "Reordenar els models",
 	"Repeat Last N": "Repeteix els darrers N",
-	"Repeat Penalty (Ollama)": "",
+	"Repeat Penalty (Ollama)": "Penalització per repetició (Ollama)",
 	"Reply in Thread": "Respondre al fil",
 	"Request Mode": "Mode de sol·licitud",
 	"Reranking Model": "Model de reavaluació",
@@ -876,11 +885,10 @@
 	"Select a pipeline": "Seleccionar una Pipeline",
 	"Select a pipeline url": "Seleccionar l'URL d'una Pipeline",
 	"Select a tool": "Seleccionar una eina",
-	"Select an auth method": "",
+	"Select an auth method": "Seleccionar un mètode d'autenticació",
 	"Select an Ollama instance": "Seleccionar una instància d'Ollama",
 	"Select Engine": "Seleccionar el motor",
 	"Select Knowledge": "Seleccionar coneixement",
-	"Select model": "Seleccionar un model",
 	"Select only one model to call": "Seleccionar només un model per trucar",
 	"Selected model(s) do not support image inputs": "El(s) model(s) seleccionats no admeten l'entrada d'imatges",
 	"Semantic distance to query": "Distància semàntica a la pregunta",
@@ -889,8 +897,8 @@
 	"Send message": "Enviar missatge",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "Envia `stream_options: { include_usage: true }` a la sol·licitud.\nEls proveïdors compatibles retornaran la informació d'ús del token a la resposta quan s'estableixi.",
 	"September": "Setembre",
-	"SerpApi API Key": "",
-	"SerpApi Engine": "",
+	"SerpApi API Key": "Clau API de SerpApi",
+	"SerpApi Engine": "Motor de SerpApi",
 	"Serper API Key": "Clau API de Serper",
 	"Serply API Key": "Clau API de Serply",
 	"Serpstack API Key": "Clau API de Serpstack",
@@ -910,8 +918,8 @@
 	"Set the number of worker threads used for computation. This option controls how many threads are used to process incoming requests concurrently. Increasing this value can improve performance under high concurrency workloads but may also consume more CPU resources.": "Establir el nombre de fils de treball utilitzats per al càlcul. Aquesta opció controla quants fils s'utilitzen per processar les sol·licituds entrants simultàniament. Augmentar aquest valor pot millorar el rendiment amb càrregues de treball de concurrència elevada, però també pot consumir més recursos de CPU.",
 	"Set Voice": "Establir la veu",
 	"Set whisper model": "Establir el model whisper",
-	"Sets a flat bias against tokens that have appeared at least once. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 0.9) will be more lenient. At 0, it is disabled. (Default: 0)": "",
-	"Sets a scaling bias against tokens to penalize repetitions, based on how many times they have appeared. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 0.9) will be more lenient. At 0, it is disabled. (Default: 1.1)": "",
+	"Sets a flat bias against tokens that have appeared at least once. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 0.9) will be more lenient. At 0, it is disabled. (Default: 0)": "Estableix un biaix pla contra tokens que han aparegut almenys una vegada. Un valor més alt (p. ex., 1,5) penalitzarà les repeticions amb més força, mentre que un valor més baix (p. ex., 0,9) serà més indulgent. A 0, està desactivat. (Per defecte: 0)",
+	"Sets a scaling bias against tokens to penalize repetitions, based on how many times they have appeared. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 0.9) will be more lenient. At 0, it is disabled. (Default: 1.1)": "Estableix un biaix d'escala contra tokens per penalitzar les repeticions, en funció de quantes vegades han aparegut. Un valor més alt (p. ex., 1,5) penalitzarà les repeticions amb més força, mentre que un valor més baix (p. ex., 0,9) serà més indulgent. A 0, està desactivat. (Per defecte: 1.1)",
 	"Sets how far back for the model to look back to prevent repetition. (Default: 64, 0 = disabled, -1 = num_ctx)": "Establir fins a quin punt el model mira enrere per evitar la repetició. (Per defecte: 64, 0 = desactivat, -1 = num_ctx)",
 	"Sets the random number seed to use for generation. Setting this to a specific number will make the model generate the same text for the same prompt. (Default: random)": "Establir la llavor del nombre aleatori que s'utilitzarà per a la generació. Establir-ho a un número específic farà que el model generi el mateix text per a la mateixa sol·licitud. (Per defecte: aleatori)",
 	"Sets the size of the context window used to generate the next token. (Default: 2048)": "Estableix la mida de la finestra de context utilitzada per generar el següent token. (Per defecte: 2048)",
@@ -957,8 +965,9 @@
 	"Tags Generation": "Generació d'etiquetes",
 	"Tags Generation Prompt": "Indicació per a la generació d'etiquetes",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "El mostreig sense cua s'utilitza per reduir l'impacte de tokens menys probables de la sortida. Un valor més alt (p. ex., 2,0) reduirà més l'impacte, mentre que un valor d'1,0 desactiva aquesta configuració. (per defecte: 1)",
+	"Talk to model": "",
 	"Tap to interrupt": "Prem per interrompre",
-	"Tasks": "",
+	"Tasks": "Tasques",
 	"Tavily API Key": "Clau API de Tavily",
 	"Tell us more:": "Dona'ns més informació:",
 	"Temperature": "Temperatura",
@@ -1005,7 +1014,7 @@
 	"Title (e.g. Tell me a fun fact)": "Títol (p. ex. Digues-me quelcom divertit)",
 	"Title Auto-Generation": "Generació automàtica de títol",
 	"Title cannot be an empty string.": "El títol no pot ser una cadena buida.",
-	"Title Generation": "",
+	"Title Generation": "Generació de títols",
 	"Title Generation Prompt": "Indicació de generació de títol",
 	"TLS": "TLS",
 	"To access the available model names for downloading,": "Per accedir als noms dels models disponibles per descarregar,",
@@ -1041,6 +1050,7 @@
 	"Top P": "Top P",
 	"Transformers": "Transformadors",
 	"Trouble accessing Ollama?": "Problemes en accedir a Ollama?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "Model TTS",
 	"TTS Settings": "Preferències de TTS",
 	"TTS Voice": "Veu TTS",
@@ -1062,7 +1072,7 @@
 	"Updated": "Actualitzat",
 	"Updated at": "Actualitzat el",
 	"Updated At": "Actualitzat el",
-	"Upgrade to a licensed plan for enhanced capabilities, including custom theming and branding, and dedicated support.": "",
+	"Upgrade to a licensed plan for enhanced capabilities, including custom theming and branding, and dedicated support.": "Actualitzar a un pla amb llicència per obtenir capacitats millorades, com ara la temàtica personalitzada i la marca, i assistència dedicada.",
 	"Upload": "Pujar",
 	"Upload a GGUF model": "Pujar un model GGUF",
 	"Upload directory": "Pujar directori",
@@ -1101,7 +1111,7 @@
 	"Warning:": "Avís:",
 	"Warning: Enabling this will allow users to upload arbitrary code on the server.": "Avís: Habilitar això permetrà als usuaris penjar codi arbitrari al servidor.",
 	"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: Jupyter execution enables arbitrary code execution, posing severe security risks—proceed with extreme caution.": "",
+	"Warning: Jupyter execution enables arbitrary code execution, posing severe security risks—proceed with extreme caution.": "Avís: l'execució de Jupyter permet l'execució de codi arbitrari, la qual cosa comporta greus riscos de seguretat; procediu amb extrema precaució.",
 	"Web": "Web",
 	"Web API": "Web API",
 	"Web Loader Settings": "Preferències del carregador web",

+ 12 - 2
src/lib/i18n/locales/ceb-PH/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "",
 	"a user": "usa ka user",
 	"About": "Mahitungod sa",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "",
 	"Access Control": "",
 	"Accessible to all users": "",
@@ -93,7 +94,7 @@
 	"Artifacts": "",
 	"Ask a question": "",
 	"Assistant": "",
-	"Attach file": "Ilakip ang usa ka file",
+	"Attach file from knowledge": "",
 	"Attention to detail": "Pagtagad sa mga detalye",
 	"Attribute for Mail": "",
 	"Attribute for Username": "",
@@ -305,6 +306,8 @@
 	"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 Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "",
 	"Documents": "Mga dokumento",
 	"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.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "",
 	"Enable New Sign Ups": "I-enable ang bag-ong mga rehistro",
+	"Enable OneDrive": "",
 	"Enable Web Search": "",
 	"Enabled": "",
 	"Engine": "",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "Pagsulod sa block overlap",
 	"Enter Chunk Size": "Isulod ang block size",
 	"Enter description": "",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "",
@@ -510,6 +516,7 @@
 	"General Settings": "kinatibuk-ang mga setting",
 	"Generate an image": "",
 	"Generate Image": "",
+	"Generate prompt pair": "",
 	"Generating search query": "",
 	"Get started": "",
 	"Get started with {{WEBUI_NAME}}": "",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "",
 	"Local Models": "",
+	"Location access not allowed": "",
 	"Lost": "",
 	"LTR": "",
 	"Made by Open WebUI Community": "Gihimo sa komunidad sa OpenWebUI",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "",
 	"Ollama Version": "Ollama nga bersyon",
 	"On": "Gipaandar",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "Ang alphanumeric nga mga karakter ug hyphen lang ang gitugotan sa command string.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "",
 	"Select Knowledge": "",
-	"Select model": "Pagpili og modelo",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "",
 	"Semantic distance to query": "",
@@ -957,6 +965,7 @@
 	"Tags Generation": "",
 	"Tags Generation Prompt": "",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "",
+	"Talk to model": "",
 	"Tap to interrupt": "",
 	"Tasks": "",
 	"Tavily API Key": "",
@@ -1041,6 +1050,7 @@
 	"Top P": "Ibabaw nga P",
 	"Transformers": "",
 	"Trouble accessing Ollama?": "Adunay mga problema sa pag-access sa Ollama?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "",
 	"TTS Settings": "Mga Setting sa TTS",
 	"TTS Voice": "",

+ 12 - 2
src/lib/i18n/locales/cs-CZ/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "Model úloh se používá při provádění úloh, jako je generování názvů pro chaty a vyhledávací dotazy na webu.",
 	"a user": "uživatel",
 	"About": "O programu",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "Přístup",
 	"Access Control": "",
 	"Accessible to all users": "Přístupné pro všecny uživatele",
@@ -93,7 +94,7 @@
 	"Artifacts": "Artefakty",
 	"Ask a question": "Zeptejte se na otázku",
 	"Assistant": "Ano, jak vám mohu pomoci?",
-	"Attach file": "Připojit soubor",
+	"Attach file from knowledge": "",
 	"Attention to detail": "Pozornost k detailům",
 	"Attribute for Mail": "",
 	"Attribute for Username": "",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "Neinstalujte funkce ze zdrojů, kterým plně nedůvěřujete.",
 	"Do not install tools from sources you do not fully trust.": "Neinstalujte nástroje ze zdrojů, kterým plně nedůvěřujete.",
 	"Document": "Dokument",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "Dokumentace",
 	"Documents": "Dokumenty",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "nevytváří žádná externí připojení a vaše data zůstávají bezpečně na vašem lokálním serveru.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "Povolit hodnocení zpráv",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "",
 	"Enable New Sign Ups": "Povolit nové registrace",
+	"Enable OneDrive": "",
 	"Enable Web Search": "Povolit webové vyhledávání",
 	"Enabled": "Povoleno",
 	"Engine": "Engine",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "Zadejte překryv části",
 	"Enter Chunk Size": "Zadejte velikost bloku",
 	"Enter description": "Zadejte popis",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "Zadejte URL adresu Github Raw",
@@ -510,6 +516,7 @@
 	"General Settings": "Obecná nastavení",
 	"Generate an image": "",
 	"Generate Image": "Vygenerovat obrázek",
+	"Generate prompt pair": "",
 	"Generating search query": "Generování vyhledávacího dotazu",
 	"Get started": "",
 	"Get started with {{WEBUI_NAME}}": "",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "",
 	"Local Models": "Lokální modely",
+	"Location access not allowed": "",
 	"Lost": "Ztracený",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "Vytvořeno komunitou OpenWebUI",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "",
 	"Ollama Version": "Verze Ollama",
 	"On": "Na",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "Příkazový řetězec smí obsahovat pouze alfanumerické znaky a pomlčky.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "Pouze kolekce mohou být upravovány, pro úpravu/přidání dokumentů vytvořte novou znalostní bázi.",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "Vyberte engine",
 	"Select Knowledge": "Vybrat znalosti",
-	"Select model": "Vyberte model",
 	"Select only one model to call": "Vyberte pouze jeden model, který chcete použít",
 	"Selected model(s) do not support image inputs": "Vybraný(é) model(y) nepodporují vstupy v podobě obrázků.",
 	"Semantic distance to query": "Semantická vzdálenost k dotazu",
@@ -957,6 +965,7 @@
 	"Tags Generation": "",
 	"Tags Generation Prompt": "Prompt pro generování značek",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "",
+	"Talk to model": "",
 	"Tap to interrupt": "Klepněte pro přerušení",
 	"Tasks": "",
 	"Tavily API Key": "Klíč API pro Tavily",
@@ -1041,6 +1050,7 @@
 	"Top P": "Top P",
 	"Transformers": "",
 	"Trouble accessing Ollama?": "Máte potíže s přístupem k Ollama?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "Model převodu textu na řeč (TTS)",
 	"TTS Settings": "Nastavení TTS (Text-to-Speech)",
 	"TTS Voice": "TTS hlas",

+ 12 - 2
src/lib/i18n/locales/da-DK/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "En 'task model' bliver brugt til at opgaver såsom at generere overskrifter til chats eller internetsøgninger",
 	"a user": "en bruger",
 	"About": "Information",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "",
 	"Access Control": "",
 	"Accessible to all users": "",
@@ -93,7 +94,7 @@
 	"Artifacts": "Artifakter",
 	"Ask a question": "Stil et spørgsmål",
 	"Assistant": "",
-	"Attach file": "Vedhæft fil",
+	"Attach file from knowledge": "",
 	"Attention to detail": "Detajleorientering",
 	"Attribute for Mail": "",
 	"Attribute for Username": "",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "Lad være med at installere funktioner fra kilder, som du ikke stoler på.",
 	"Do not install tools from sources you do not fully trust.": "Lad være med at installere værktøjer fra kilder, som du ikke stoler på.",
 	"Document": "Dokument",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "Dokumentation",
 	"Documents": "Dokumenter",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "laver ikke eksterne kald, og din data bliver sikkert på din egen lokalt hostede server.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "Aktiver rating af besked",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "",
 	"Enable New Sign Ups": "Aktiver nye signups",
+	"Enable OneDrive": "",
 	"Enable Web Search": "Aktiver websøgning",
 	"Enabled": "Aktiveret",
 	"Engine": "engine",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "Indtast overlapning af tekststykker",
 	"Enter Chunk Size": "Indtast størrelse af tekststykker",
 	"Enter description": "",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "Indtast Github Raw URL",
@@ -510,6 +516,7 @@
 	"General Settings": "Generelle indstillinger",
 	"Generate an image": "",
 	"Generate Image": "Generer billede",
+	"Generate prompt pair": "",
 	"Generating search query": "Genererer søgeforespørgsel",
 	"Get started": "",
 	"Get started with {{WEBUI_NAME}}": "",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "",
 	"Local Models": "Lokale modeller",
+	"Location access not allowed": "",
 	"Lost": "",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "Lavet af OpenWebUI Community",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "",
 	"Ollama Version": "Ollama-version",
 	"On": "Til",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "Kun alfanumeriske tegn og bindestreger er tilladt i kommandostrengen.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "Kun samlinger kan redigeres, opret en ny vidensbase for at redigere/tilføje dokumenter.",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "Vælg engine",
 	"Select Knowledge": "Vælg viden",
-	"Select model": "Vælg model",
 	"Select only one model to call": "Vælg kun én model at kalde",
 	"Selected model(s) do not support image inputs": "Valgte model(ler) understøtter ikke billedinput",
 	"Semantic distance to query": "",
@@ -957,6 +965,7 @@
 	"Tags Generation": "",
 	"Tags Generation Prompt": "",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "",
+	"Talk to model": "",
 	"Tap to interrupt": "Tryk for at afbryde",
 	"Tasks": "",
 	"Tavily API Key": "Tavily API-nøgle",
@@ -1041,6 +1050,7 @@
 	"Top P": "Top P",
 	"Transformers": "",
 	"Trouble accessing Ollama?": "Problemer med at få adgang til Ollama?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "TTS-model",
 	"TTS Settings": "TTS-indstillinger",
 	"TTS Voice": "TTS-stemme",

+ 12 - 2
src/lib/i18n/locales/de-DE/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "Aufgabenmodelle können Unterhaltungstitel oder Websuchanfragen generieren.",
 	"a user": "ein Benutzer",
 	"About": "Über",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "Zugang",
 	"Access Control": "Zugangskontrolle",
 	"Accessible to all users": "Für alle Benutzer zugänglich",
@@ -93,7 +94,7 @@
 	"Artifacts": "Artefakte",
 	"Ask a question": "Stellen Sie eine Frage",
 	"Assistant": "Assistent",
-	"Attach file": "Datei anhängen",
+	"Attach file from knowledge": "",
 	"Attention to detail": "Aufmerksamkeit für Details",
 	"Attribute for Mail": "Attribut für E-Mail",
 	"Attribute for Username": "Attribut für Benutzername",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "Installieren Sie keine Funktionen aus Quellen, denen Sie nicht vollständig vertrauen.",
 	"Do not install tools from sources you do not fully trust.": "Installieren Sie keine Werkzeuge aus Quellen, denen Sie nicht vollständig vertrauen.",
 	"Document": "Dokument",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "Dokumentation",
 	"Documents": "Dokumente",
 	"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.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "Nachrichtenbewertung aktivieren",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "Mirostat Sampling zur Steuerung der Perplexität aktivieren. (Standard: 0, 0 = Deaktiviert, 1 = Mirostat, 2 = Mirostat 2.0)",
 	"Enable New Sign Ups": "Registrierung erlauben",
+	"Enable OneDrive": "",
 	"Enable Web Search": "Websuche aktivieren",
 	"Enabled": "Aktiviert",
 	"Engine": "Engine",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "Geben Sie die Blocküberlappung ein",
 	"Enter Chunk Size": "Geben Sie die Blockgröße ein",
 	"Enter description": "Geben Sie eine Beschreibung ein",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "Geben Sie den Exa-API-Schlüssel ein",
 	"Enter Github Raw URL": "Geben Sie die Github Raw-URL ein",
@@ -510,6 +516,7 @@
 	"General Settings": "Allgemeine Einstellungen",
 	"Generate an image": "Bild erzeugen",
 	"Generate Image": "Bild erzeugen",
+	"Generate prompt pair": "",
 	"Generating search query": "Suchanfrage wird erstellt",
 	"Get started": "Loslegen",
 	"Get started with {{WEBUI_NAME}}": "Loslegen mit {{WEBUI_NAME}}",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "Lokal",
 	"Local Models": "Lokale Modelle",
+	"Location access not allowed": "",
 	"Lost": "Verloren",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "Von der OpenWebUI-Community",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "Ollama-API-Einstellungen aktualisiert",
 	"Ollama Version": "Ollama-Version",
 	"On": "Ein",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "Nur alphanumerische Zeichen und Bindestriche sind erlaubt",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "In der Befehlszeichenfolge sind nur alphanumerische Zeichen und Bindestriche erlaubt.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "Nur Sammlungen können bearbeitet werden. Erstellen Sie eine neue Wissensbasis, um Dokumente zu bearbeiten/hinzuzufügen.",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "Wählen Sie eine Ollama-Instanz",
 	"Select Engine": "Engine auswählen",
 	"Select Knowledge": "Wissensdatenbank auswählen",
-	"Select model": "Modell auswählen",
 	"Select only one model to call": "Wählen Sie nur ein Modell zum Anrufen aus",
 	"Selected model(s) do not support image inputs": "Ihre ausgewählten Modelle unterstützen keine Bildeingaben",
 	"Semantic distance to query": "Semantische Distanz zur Abfrage",
@@ -957,6 +965,7 @@
 	"Tags Generation": "Tag-Generierung",
 	"Tags Generation Prompt": "Prompt für Tag-Generierung",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "Tail-Free Sampling wird verwendet, um den Einfluss weniger wahrscheinlicher Tokens auf die Ausgabe zu reduzieren. Ein höherer Wert (z.B. 2.0) reduziert den Einfluss stärker, während ein Wert von 1.0 diese Einstellung deaktiviert. (Standard: 1)",
+	"Talk to model": "",
 	"Tap to interrupt": "Zum Unterbrechen tippen",
 	"Tasks": "",
 	"Tavily API Key": "Tavily-API-Schlüssel",
@@ -1041,6 +1050,7 @@
 	"Top P": "Top P",
 	"Transformers": "Transformers",
 	"Trouble accessing Ollama?": "Probleme beim Zugriff auf Ollama?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "TTS-Modell",
 	"TTS Settings": "TTS-Einstellungen",
 	"TTS Voice": "TTS-Stimme",

+ 12 - 2
src/lib/i18n/locales/dg-DG/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "",
 	"a user": "such user",
 	"About": "Much About",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "",
 	"Access Control": "",
 	"Accessible to all users": "",
@@ -93,7 +94,7 @@
 	"Artifacts": "",
 	"Ask a question": "",
 	"Assistant": "",
-	"Attach file": "Attach file",
+	"Attach file from knowledge": "",
 	"Attention to detail": "",
 	"Attribute for Mail": "",
 	"Attribute for Username": "",
@@ -305,6 +306,8 @@
 	"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 Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "",
 	"Documents": "Documents",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "does not connect external, data stays safe locally.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "",
 	"Enable New Sign Ups": "Enable New Bark Ups",
+	"Enable OneDrive": "",
 	"Enable Web Search": "",
 	"Enabled": "",
 	"Engine": "",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "Enter Overlap of Chunks",
 	"Enter Chunk Size": "Enter Size of Chunk",
 	"Enter description": "",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "",
@@ -510,6 +516,7 @@
 	"General Settings": "General Doge Settings",
 	"Generate an image": "",
 	"Generate Image": "",
+	"Generate prompt pair": "",
 	"Generating search query": "",
 	"Get started": "",
 	"Get started with {{WEBUI_NAME}}": "",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "",
 	"Local Models": "",
+	"Location access not allowed": "",
 	"Lost": "",
 	"LTR": "",
 	"Made by Open WebUI Community": "Made by Open WebUI Community",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "",
 	"Ollama Version": "Ollama Version",
 	"On": "On",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "Only wow characters and hyphens are allowed in the bork string.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "",
 	"Select Knowledge": "",
-	"Select model": "Select model much choice",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "",
 	"Semantic distance to query": "",
@@ -957,6 +965,7 @@
 	"Tags Generation": "",
 	"Tags Generation Prompt": "",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "",
+	"Talk to model": "",
 	"Tap to interrupt": "",
 	"Tasks": "",
 	"Tavily API Key": "",
@@ -1041,6 +1050,7 @@
 	"Top P": "Top P very top",
 	"Transformers": "",
 	"Trouble accessing Ollama?": "Trouble accessing Ollama? Much trouble?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "",
 	"TTS Settings": "TTS Settings much settings",
 	"TTS Voice": "",

+ 12 - 2
src/lib/i18n/locales/el-GR/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "Ένα μοντέλο εργασίας χρησιμοποιείται κατά την εκτέλεση εργασιών όπως η δημιουργία τίτλων για συνομιλίες και αναζητήσεις στο διαδίκτυο",
 	"a user": "ένας χρήστης",
 	"About": "Σχετικά",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "Πρόσβαση",
 	"Access Control": "Έλεγχος Πρόσβασης",
 	"Accessible to all users": "Προσβάσιμο σε όλους τους χρήστες",
@@ -93,7 +94,7 @@
 	"Artifacts": "Αρχεία",
 	"Ask a question": "Ρωτήστε μια ερώτηση",
 	"Assistant": "Βοηθός",
-	"Attach file": "Συνημμένο αρχείο",
+	"Attach file from knowledge": "",
 	"Attention to detail": "Προσοχή στη λεπτομέρεια",
 	"Attribute for Mail": "",
 	"Attribute for Username": "Ιδιότητα για Όνομα Χρήστη",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "Μην εγκαθιστάτε λειτουργίες από πηγές που δεν εμπιστεύεστε πλήρως.",
 	"Do not install tools from sources you do not fully trust.": "Μην εγκαθιστάτε εργαλεία από πηγές που δεν εμπιστεύεστε πλήρως.",
 	"Document": "Έγγραφο",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "Τεκμηρίωση",
 	"Documents": "Έγγραφα",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "δεν κάνει καμία εξωτερική σύνδεση, και τα δεδομένα σας παραμένουν ασφαλή στον τοπικά φιλοξενούμενο διακομιστή σας.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "Ενεργοποίηση Αξιολόγησης Μηνυμάτων",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "Ενεργοποίηση δειγματοληψίας Mirostat για έλεγχο της περιπλοκότητας. (Προεπιλογή: 0, 0 = Απενεργοποιημένο, 1 = Mirostat, 2 = Mirostat 2.0)",
 	"Enable New Sign Ups": "Ενεργοποίηση Νέων Εγγραφών",
+	"Enable OneDrive": "",
 	"Enable Web Search": "Ενεργοποίηση Αναζήτησης στο Διαδίκτυο",
 	"Enabled": "Ενεργοποιημένο",
 	"Engine": "Μηχανή",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "Εισάγετε την Επικάλυψη Τμημάτων",
 	"Enter Chunk Size": "Εισάγετε το Μέγεθος Τμημάτων",
 	"Enter description": "Εισάγετε την περιγραφή",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "Εισάγετε το Github Raw URL",
@@ -510,6 +516,7 @@
 	"General Settings": "Γενικές Ρυθμίσεις",
 	"Generate an image": "",
 	"Generate Image": "Δημιουργία Εικόνας",
+	"Generate prompt pair": "",
 	"Generating search query": "Γενιά αναζήτησης ερώτησης",
 	"Get started": "Ξεκινήστε",
 	"Get started with {{WEBUI_NAME}}": "Ξεκινήστε με {{WEBUI_NAME}}",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "Τοπικό",
 	"Local Models": "Τοπικά Μοντέλα",
+	"Location access not allowed": "",
 	"Lost": "Χαμένος",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "Δημιουργήθηκε από την Κοινότητα OpenWebUI",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "Οι ρυθμίσεις API Ollama ενημερώθηκαν",
 	"Ollama Version": "Έκδοση Ollama",
 	"On": "On",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "Επιτρέπονται μόνο αλφαριθμητικοί χαρακτήρες και παύλες",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "Επιτρέπονται μόνο αλφαριθμητικοί χαρακτήρες και παύλες στο string της εντολής.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "Μόνο συλλογές μπορούν να επεξεργαστούν, δημιουργήστε μια νέα βάση γνώσης για επεξεργασία/προσθήκη εγγράφων.",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "Επιλέξτε Μηχανή",
 	"Select Knowledge": "Επιλέξτε Γνώση",
-	"Select model": "Επιλέξτε μοντέλο",
 	"Select only one model to call": "Επιλέξτε μόνο ένα μοντέλο για κλήση",
 	"Selected model(s) do not support image inputs": "Τα επιλεγμένα μοντέλα δεν υποστηρίζουν είσοδο εικόνων",
 	"Semantic distance to query": "Σημαντική απόσταση προς την ερώτηση",
@@ -957,6 +965,7 @@
 	"Tags Generation": "",
 	"Tags Generation Prompt": "Προτροπή Γενιάς Ετικετών",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "Η δειγματοληψία Tail free χρησιμοποιείται για να μειώσει την επίδραση των λιγότερο πιθανών tokens από την έξοδο. Μια υψηλότερη τιμή (π.χ., 2.0) θα μειώσει την επίδραση περισσότερο, ενώ μια τιμή 1.0 απενεργοποιεί αυτή τη ρύθμιση. (προεπιλογή: 1)",
+	"Talk to model": "",
 	"Tap to interrupt": "Πατήστε για παύση",
 	"Tasks": "",
 	"Tavily API Key": "Κλειδί API Tavily",
@@ -1041,6 +1050,7 @@
 	"Top P": "Top P",
 	"Transformers": "Transformers",
 	"Trouble accessing Ollama?": "Προβλήματα πρόσβασης στο Ollama?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "Μοντέλο TTS",
 	"TTS Settings": "Ρυθμίσεις TTS",
 	"TTS Voice": "Φωνή TTS",

+ 12 - 2
src/lib/i18n/locales/en-GB/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "",
 	"a user": "",
 	"About": "",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "",
 	"Access Control": "",
 	"Accessible to all users": "",
@@ -93,7 +94,7 @@
 	"Artifacts": "",
 	"Ask a question": "",
 	"Assistant": "",
-	"Attach file": "",
+	"Attach file from knowledge": "",
 	"Attention to detail": "",
 	"Attribute for Mail": "",
 	"Attribute for Username": "",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "",
 	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "",
 	"Documents": "",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "",
 	"Enable New Sign Ups": "",
+	"Enable OneDrive": "",
 	"Enable Web Search": "",
 	"Enabled": "",
 	"Engine": "",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "",
 	"Enter Chunk Size": "",
 	"Enter description": "",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "",
@@ -510,6 +516,7 @@
 	"General Settings": "",
 	"Generate an image": "",
 	"Generate Image": "",
+	"Generate prompt pair": "",
 	"Generating search query": "",
 	"Get started": "",
 	"Get started with {{WEBUI_NAME}}": "",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "",
 	"Local Models": "",
+	"Location access not allowed": "",
 	"Lost": "",
 	"LTR": "",
 	"Made by Open WebUI Community": "",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "",
 	"Ollama Version": "",
 	"On": "",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "",
 	"Select Knowledge": "",
-	"Select model": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "",
 	"Semantic distance to query": "",
@@ -957,6 +965,7 @@
 	"Tags Generation": "",
 	"Tags Generation Prompt": "",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "",
+	"Talk to model": "",
 	"Tap to interrupt": "",
 	"Tasks": "",
 	"Tavily API Key": "",
@@ -1041,6 +1050,7 @@
 	"Top P": "",
 	"Transformers": "",
 	"Trouble accessing Ollama?": "",
+	"Trust Proxy Environment": "",
 	"TTS Model": "",
 	"TTS Settings": "",
 	"TTS Voice": "",

+ 12 - 2
src/lib/i18n/locales/en-US/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "",
 	"a user": "",
 	"About": "",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "",
 	"Access Control": "",
 	"Accessible to all users": "",
@@ -93,7 +94,7 @@
 	"Artifacts": "",
 	"Ask a question": "",
 	"Assistant": "",
-	"Attach file": "",
+	"Attach file from knowledge": "",
 	"Attention to detail": "",
 	"Attribute for Mail": "",
 	"Attribute for Username": "",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "",
 	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "",
 	"Documents": "",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "",
 	"Enable New Sign Ups": "",
+	"Enable OneDrive": "",
 	"Enable Web Search": "",
 	"Enabled": "",
 	"Engine": "",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "",
 	"Enter Chunk Size": "",
 	"Enter description": "",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "",
@@ -510,6 +516,7 @@
 	"General Settings": "",
 	"Generate an image": "",
 	"Generate Image": "",
+	"Generate prompt pair": "",
 	"Generating search query": "",
 	"Get started": "",
 	"Get started with {{WEBUI_NAME}}": "",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "",
 	"Local Models": "",
+	"Location access not allowed": "",
 	"Lost": "",
 	"LTR": "",
 	"Made by Open WebUI Community": "",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "",
 	"Ollama Version": "",
 	"On": "",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "",
 	"Select Knowledge": "",
-	"Select model": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "",
 	"Semantic distance to query": "",
@@ -957,6 +965,7 @@
 	"Tags Generation": "",
 	"Tags Generation Prompt": "",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "",
+	"Talk to model": "",
 	"Tap to interrupt": "",
 	"Tasks": "",
 	"Tavily API Key": "",
@@ -1041,6 +1050,7 @@
 	"Top P": "",
 	"Transformers": "",
 	"Trouble accessing Ollama?": "",
+	"Trust Proxy Environment": "",
 	"TTS Model": "",
 	"TTS Settings": "",
 	"TTS Voice": "",

+ 12 - 2
src/lib/i18n/locales/es-ES/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "Un modelo de tareas se utiliza cuando se realizan tareas como la generación de títulos para chats y consultas de búsqueda web",
 	"a user": "un usuario",
 	"About": "Sobre nosotros",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "Acceso",
 	"Access Control": "Control de Acceso",
 	"Accessible to all users": "Accesible para todos los usuarios",
@@ -93,7 +94,7 @@
 	"Artifacts": "Artefactos",
 	"Ask a question": "Haz una pregunta",
 	"Assistant": "Asistente",
-	"Attach file": "Adjuntar archivo",
+	"Attach file from knowledge": "",
 	"Attention to detail": "Detalle preciso",
 	"Attribute for Mail": "Atributo para correo",
 	"Attribute for Username": "Atributo para el nombre de usuario",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "No instale funciones desde fuentes que no confíe totalmente.",
 	"Do not install tools from sources you do not fully trust.": "No instale herramientas desde fuentes que no confíe totalmente.",
 	"Document": "Documento",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "Documentación",
 	"Documents": "Documentos",
 	"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.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "Habilitar la calificación de los mensajes",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "Habilitar muestreo Mirostat para controlar la perplejidad. (Predeterminado: 0, 0 = Deshabilitado, 1 = Mirostat, 2 = Mirostat 2.0)",
 	"Enable New Sign Ups": "Habilitar Nuevos Registros",
+	"Enable OneDrive": "",
 	"Enable Web Search": "Habilitar la búsqueda web",
 	"Enabled": "Activado",
 	"Engine": "Motor",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "Ingresar superposición de fragmentos",
 	"Enter Chunk Size": "Ingrese el tamaño del fragmento",
 	"Enter description": "Ingrese la descripción",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "Ingrese la clave API de Exa",
 	"Enter Github Raw URL": "Ingresa la URL sin procesar de Github",
@@ -510,6 +516,7 @@
 	"General Settings": "Opciones Generales",
 	"Generate an image": "Generar una imagen",
 	"Generate Image": "Generar imagen",
+	"Generate prompt pair": "",
 	"Generating search query": "Generación de consultas de búsqueda",
 	"Get started": "Empezar",
 	"Get started with {{WEBUI_NAME}}": "Empezar con {{WEBUI_NAME}}",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "Local",
 	"Local Models": "Modelos locales",
+	"Location access not allowed": "",
 	"Lost": "Perdido",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "Hecho por la comunidad de OpenWebUI",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "Configuración de Ollama API actualizada",
 	"Ollama Version": "Versión de Ollama",
 	"On": "Activado",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "Sólo se permiten caracteres alfanuméricos y guiones",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "Sólo se permiten caracteres alfanuméricos y guiones en la cadena de comando.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "Solo se pueden editar las colecciones, crear una nueva base de conocimientos para editar / añadir documentos",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "Seleccionar una instancia de Ollama",
 	"Select Engine": "Selecciona Motor",
 	"Select Knowledge": "Selecciona Conocimiento",
-	"Select model": "Selecciona un modelo",
 	"Select only one model to call": "Selecciona sólo un modelo para llamar",
 	"Selected model(s) do not support image inputs": "Los modelos seleccionados no admiten entradas de imagen",
 	"Semantic distance to query": "Distancia semántica a la consulta",
@@ -957,6 +965,7 @@
 	"Tags Generation": "Generación de etiquetas",
 	"Tags Generation Prompt": "Prompt de generación de etiquetas",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "El muestreo libre de cola se utiliza para reducir el impacto de los tokens menos probables en la salida. Un valor más alto (p.ej., 2.0) reducirá el impacto más, mientras que un valor de 1.0 deshabilitará esta configuración. (predeterminado: 1)",
+	"Talk to model": "",
 	"Tap to interrupt": "Toca para interrumpir",
 	"Tasks": "",
 	"Tavily API Key": "Clave API de Tavily",
@@ -1041,6 +1050,7 @@
 	"Top P": "Top P",
 	"Transformers": "Transformadores",
 	"Trouble accessing Ollama?": "¿Problemas para acceder a Ollama?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "Modelo TTS",
 	"TTS Settings": "Configuración de TTS",
 	"TTS Voice": "Voz del TTS",

+ 12 - 2
src/lib/i18n/locales/eu-ES/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "Ataza eredua erabiltzen da txatentzako izenburuak eta web bilaketa kontsultak sortzeko bezalako atazak egitean",
 	"a user": "erabiltzaile bat",
 	"About": "Honi buruz",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "Sarbidea",
 	"Access Control": "Sarbide Kontrola",
 	"Accessible to all users": "Erabiltzaile guztientzat eskuragarri",
@@ -93,7 +94,7 @@
 	"Artifacts": "Artefaktuak",
 	"Ask a question": "Egin galdera bat",
 	"Assistant": "Laguntzailea",
-	"Attach file": "Erantsi fitxategia",
+	"Attach file from knowledge": "",
 	"Attention to detail": "Xehetasunei arreta",
 	"Attribute for Mail": "",
 	"Attribute for Username": "Erabiltzaile-izenerako atributua",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "Ez instalatu guztiz fidagarriak ez diren iturrietatik datozen funtzioak.",
 	"Do not install tools from sources you do not fully trust.": "Ez instalatu guztiz fidagarriak ez diren iturrietatik datozen tresnak.",
 	"Document": "Dokumentua",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "Dokumentazioa",
 	"Documents": "Dokumentuak",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "ez du kanpo konexiorik egiten, eta zure datuak modu seguruan mantentzen dira zure zerbitzari lokalean.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "Gaitu Mezuen Balorazioa",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "Gaitu Mirostat laginketa nahasmena kontrolatzeko. (Lehenetsia: 0, 0 = Desgaituta, 1 = Mirostat, 2 = Mirostat 2.0)",
 	"Enable New Sign Ups": "Gaitu Izena Emate Berriak",
+	"Enable OneDrive": "",
 	"Enable Web Search": "Gaitu Web Bilaketa",
 	"Enabled": "Gaituta",
 	"Engine": "Motorea",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "Sartu Zatien Gainjartzea (chunk overlap)",
 	"Enter Chunk Size": "Sartu Zati Tamaina",
 	"Enter description": "Sartu deskribapena",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "Sartu Github Raw URLa",
@@ -510,6 +516,7 @@
 	"General Settings": "Ezarpen Orokorrak",
 	"Generate an image": "",
 	"Generate Image": "Sortu Irudia",
+	"Generate prompt pair": "",
 	"Generating search query": "Bilaketa kontsulta sortzen",
 	"Get started": "Hasi",
 	"Get started with {{WEBUI_NAME}}": "Hasi {{WEBUI_NAME}}-rekin",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "Lokala",
 	"Local Models": "Modelo lokalak",
+	"Location access not allowed": "",
 	"Lost": "Galduta",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "OpenWebUI Komunitateak egina",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "Ollama API ezarpenak eguneratu dira",
 	"Ollama Version": "Ollama bertsioa",
 	"On": "Piztuta",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "Karaktere alfanumerikoak eta marratxoak soilik onartzen dira",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "Karaktere alfanumerikoak eta marratxoak soilik onartzen dira komando katean.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "Bildumak soilik edita daitezke, sortu ezagutza-base berri bat dokumentuak editatzeko/gehitzeko.",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "Hautatu motorra",
 	"Select Knowledge": "Hautatu ezagutza",
-	"Select model": "Hautatu modeloa",
 	"Select only one model to call": "Hautatu modelo bakarra deitzeko",
 	"Selected model(s) do not support image inputs": "Hautatutako modelo(e)k ez dute irudi sarrerarik onartzen",
 	"Semantic distance to query": "Kontsultarako distantzia semantikoa",
@@ -957,6 +965,7 @@
 	"Tags Generation": "",
 	"Tags Generation Prompt": "Etiketa sortzeko prompta",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "Isats-libre laginketa erabiltzen da irteran probabilitate txikiagoko tokenen eragina murrizteko. Balio altuago batek (adib., 2.0) eragina gehiago murriztuko du, 1.0 balioak ezarpen hau desgaitzen duen bitartean. (lehenetsia: 1)",
+	"Talk to model": "",
 	"Tap to interrupt": "Ukitu eteteko",
 	"Tasks": "",
 	"Tavily API Key": "Tavily API gakoa",
@@ -1041,6 +1050,7 @@
 	"Top P": "Goiko P",
 	"Transformers": "Transformatzaileak",
 	"Trouble accessing Ollama?": "Arazoak Ollama atzitzeko?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "TTS modeloa",
 	"TTS Settings": "TTS ezarpenak",
 	"TTS Voice": "TTS ahotsa",

+ 12 - 2
src/lib/i18n/locales/fa-IR/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "یک مدل وظیفه هنگام انجام وظایف مانند تولید عناوین برای چت ها و نمایش های جستجوی وب استفاده می شود.",
 	"a user": "یک کاربر",
 	"About": "درباره",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "",
 	"Access Control": "",
 	"Accessible to all users": "",
@@ -93,7 +94,7 @@
 	"Artifacts": "",
 	"Ask a question": "سوالی بپرسید",
 	"Assistant": "دستیار",
-	"Attach file": "پیوست پرونده",
+	"Attach file from knowledge": "",
 	"Attention to detail": "دقیق",
 	"Attribute for Mail": "",
 	"Attribute for Username": "",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "",
 	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "سند",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "",
 	"Documents": "اسناد",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "هیچ اتصال خارجی ایجاد نمی کند و داده های شما به طور ایمن در سرور میزبان محلی شما باقی می ماند.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "",
 	"Enable New Sign Ups": "فعال کردن ثبت نام\u200cهای جدید",
+	"Enable OneDrive": "",
 	"Enable Web Search": "فعالسازی جستجوی وب",
 	"Enabled": "",
 	"Engine": "",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "مقدار Chunk Overlap را وارد کنید",
 	"Enter Chunk Size": "مقدار Chunk Size را وارد کنید",
 	"Enter description": "",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "ادرس Github Raw را وارد کنید",
@@ -510,6 +516,7 @@
 	"General Settings": "تنظیمات عمومی",
 	"Generate an image": "",
 	"Generate Image": "",
+	"Generate prompt pair": "",
 	"Generating search query": "در حال تولید پرسوجوی جستجو",
 	"Get started": "",
 	"Get started with {{WEBUI_NAME}}": "",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "",
 	"Local Models": "",
+	"Location access not allowed": "",
 	"Lost": "",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "ساخته شده توسط OpenWebUI Community",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "",
 	"Ollama Version": "نسخه اولاما",
 	"On": "روشن",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "فقط کاراکترهای الفبایی و خط فاصله در رشته فرمان مجاز هستند.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "انتخاب موتور",
 	"Select Knowledge": "انتخاب دانش",
-	"Select model": "انتخاب یک مدل",
 	"Select only one model to call": "تنها یک مدل را برای صدا زدن انتخاب کنید",
 	"Selected model(s) do not support image inputs": "مدل) های (انتخاب شده ورودیهای تصویر را پشتیبانی نمیکند",
 	"Semantic distance to query": "",
@@ -957,6 +965,7 @@
 	"Tags Generation": "",
 	"Tags Generation Prompt": "",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "",
+	"Talk to model": "",
 	"Tap to interrupt": "",
 	"Tasks": "",
 	"Tavily API Key": "",
@@ -1041,6 +1050,7 @@
 	"Top P": "Top P",
 	"Transformers": "",
 	"Trouble accessing Ollama?": "در دسترسی به اولاما مشکل دارید؟",
+	"Trust Proxy Environment": "",
 	"TTS Model": "",
 	"TTS Settings": "تنظیمات TTS",
 	"TTS Voice": "",

+ 79 - 69
src/lib/i18n/locales/fi-FI/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "Tehtävämallia käytetään tehtävien suorittamiseen, kuten otsikoiden luomiseen keskusteluille ja verkkohakukyselyille",
 	"a user": "käyttäjä",
 	"About": "Tietoja",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "Pääsy",
 	"Access Control": "Käyttöoikeuksien hallinta",
 	"Accessible to all users": "Käytettävissä kaikille käyttäjille",
@@ -20,7 +21,7 @@
 	"Account Activation Pending": "Tilin aktivointi odottaa",
 	"Accurate information": "Tarkkaa tietoa",
 	"Actions": "Toiminnot",
-	"Activate": "",
+	"Activate": "Aktivoi",
 	"Activate this command by typing \"/{{COMMAND}}\" to chat input.": "Aktivoi tämä komento kirjoittamalla \"/{{COMMAND}}\" chat-syötteeseen.",
 	"Active Users": "Aktiiviset käyttäjät",
 	"Add": "Lisää",
@@ -34,7 +35,7 @@
 	"Add custom prompt": "Lisää mukautettu kehote",
 	"Add Files": "Lisää tiedostoja",
 	"Add Group": "Lisää ryhmä",
-	"Add Memory": "Lisää muistia",
+	"Add Memory": "Lisää muistiin",
 	"Add Model": "Lisää malli",
 	"Add Reaction": "Lisää reaktio",
 	"Add Tag": "Lisää tagi",
@@ -93,14 +94,14 @@
 	"Artifacts": "Artefaktit",
 	"Ask a question": "Kysyä kysymys",
 	"Assistant": "Avustaja",
-	"Attach file": "Liitä tiedosto",
+	"Attach file from knowledge": "",
 	"Attention to detail": "Huomio yksityiskohtiin",
 	"Attribute for Mail": "",
 	"Attribute for Username": "Käyttäjänimi-määritämä",
 	"Audio": "Ääni",
 	"August": "elokuu",
 	"Authenticate": "Todentaa",
-	"Authentication": "",
+	"Authentication": "Todennus",
 	"Auto-Copy Response to Clipboard": "Kopioi vastaus automaattisesti leikepöydälle",
 	"Auto-playback response": "Soita vastaus automaattisesti",
 	"Autocomplete Generation": "Automaattisen täydennyksen luonti",
@@ -121,16 +122,16 @@
 	"Batch Size (num_batch)": "Erän koko (num_batch)",
 	"before": "ennen",
 	"Being lazy": "Oli laiska",
-	"Beta": "",
+	"Beta": "Beta",
 	"Bing Search V7 Endpoint": "Bing Search V7 -päätepisteen osoite",
 	"Bing Search V7 Subscription Key": "Bing Search V7 -tilauskäyttäjäavain",
-	"Bocha Search API Key": "",
+	"Bocha Search API Key": "Bocha Search API -avain",
 	"Brave Search API Key": "Brave Search API -avain",
 	"By {{name}}": "Tekijä {{name}}",
 	"Bypass SSL verification for Websites": "Ohita SSL-varmennus verkkosivustoille",
-	"Calendar": "",
-	"Call": "Soitto",
-	"Call feature is not supported when using Web STT engine": "Soittotoimintoa ei tueta käytettäessä web-puheentunnistusmoottoria",
+	"Calendar": "Kalenteri",
+	"Call": "Puhelu",
+	"Call feature is not supported when using Web STT engine": "Puhelutoimintoa ei tueta käytettäessä web-puheentunnistusmoottoria",
 	"Camera": "Kamera",
 	"Cancel": "Peruuta",
 	"Capabilities": "Ominaisuuksia",
@@ -180,9 +181,9 @@
 	"Clone of {{TITLE}}": "{{TITLE}} klooni",
 	"Close": "Sulje",
 	"Code execution": "Koodin suorittaminen",
-	"Code Execution": "",
-	"Code Execution Engine": "",
-	"Code Execution Timeout": "",
+	"Code Execution": "Koodin suorittaminen",
+	"Code Execution Engine": "Koodin suoritusmoottori",
+	"Code Execution Timeout": "Koodin suorittamisen aikakatkaisu",
 	"Code formatted successfully": "Koodin muotoilu onnistui",
 	"Code Interpreter": "Ohjelmatulkki",
 	"Code Interpreter Engine": "Ohjelmatulkin moottori",
@@ -190,7 +191,7 @@
 	"Collection": "Kokoelma",
 	"Color": "Väri",
 	"ComfyUI": "ComfyUI",
-	"ComfyUI API Key": "",
+	"ComfyUI API Key": "ComfyUI API -avain",
 	"ComfyUI Base URL": "ComfyUI-perus-URL",
 	"ComfyUI Base URL is required.": "ComfyUI-perus-URL vaaditaan.",
 	"ComfyUI Workflow": "ComfyUI-työnkulku",
@@ -203,7 +204,7 @@
 	"Confirm Password": "Vahvista salasana",
 	"Confirm your action": "Vahvista toimintasi",
 	"Confirm your new password": "Vahvista uusi salasanasi",
-	"Connect to your own OpenAI compatible API endpoints.": "",
+	"Connect to your own OpenAI compatible API endpoints.": "Yhdistä oma OpenAI yhteensopiva API päätepiste.",
 	"Connections": "Yhteydet",
 	"Constrains effort on reasoning for reasoning models. Only applicable to reasoning models from specific providers that support reasoning effort. (Default: medium)": "",
 	"Contact Admin for WebUI Access": "Ota yhteyttä ylläpitäjään WebUI-käyttöä varten",
@@ -227,7 +228,7 @@
 	"Copy Link": "Kopioi linkki",
 	"Copy to clipboard": "Kopioi leikepöydälle",
 	"Copying to clipboard was successful!": "Kopioiminen leikepöydälle onnistui!",
-	"CORS must be properly configured by the provider to allow requests from Open WebUI.": "",
+	"CORS must be properly configured by the provider to allow requests from Open WebUI.": "CORS täytyy olla konfiguroitu palveluntarjoajan toimesta pyyntöjen hyväksymiseksi Open WebUI:sta.",
 	"Create": "Luo",
 	"Create a knowledge base": "Luo tietokanta",
 	"Create a model": "Luo malli",
@@ -271,7 +272,7 @@
 	"Delete folder?": "Haluatko varmasti poistaa tämän kansion?",
 	"Delete function?": "Haluatko varmasti poistaa tämän toiminnon?",
 	"Delete Message": "Poista viesti",
-	"Delete message?": "",
+	"Delete message?": "Poista viesti?",
 	"Delete prompt?": "Haluatko varmasti poistaa tämän kehotteen?",
 	"delete this link": "poista tämä linkki",
 	"Delete tool?": "Haluatko varmasti poistaa tämän työkalun?",
@@ -290,7 +291,7 @@
 	"Discover a model": "Tutustu malliin",
 	"Discover a prompt": "Löydä kehote",
 	"Discover a tool": "Löydä työkalu",
-	"Discover how to use Open WebUI and seek support from the community.": "",
+	"Discover how to use Open WebUI and seek support from the community.": "Tutustu Open WebUI:n käyttöön ja pyydä tukea yhteisöltä.",
 	"Discover wonders": "Löydä ihmeellisiä asioita",
 	"Discover, download, and explore custom functions": "Etsi, lataa ja tutki mukautettuja toimintoja",
 	"Discover, download, and explore custom prompts": "Löydä ja lataa mukautettuja kehotteita",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "Älä asenna toimintoja lähteistä, joihin et luota täysin.",
 	"Do not install tools from sources you do not fully trust.": "Älä asenna työkaluja lähteistä, joihin et luota täysin.",
 	"Document": "Asiakirja",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "Dokumentaatio",
 	"Documents": "Asiakirjat",
 	"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.",
@@ -315,14 +318,14 @@
 	"Don't like the style": "En pidä tyylistä",
 	"Done": "Valmis",
 	"Download": "Lataa",
-	"Download as SVG": "",
+	"Download as SVG": "Lataa SVG:nä",
 	"Download canceled": "Lataus peruutettu",
 	"Download Database": "Lataa tietokanta",
 	"Drag and drop a file to upload or select a file to view": "Raahaa ja pudota tiedosto ladattavaksi tai valitse tiedosto katseltavaksi",
 	"Draw": "Piirros",
 	"Drop any files here to add to the conversation": "Pudota tiedostoja tähän lisätäksesi ne keskusteluun",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "esim. '30s', '10m'. Kelpoiset aikayksiköt ovat 's', 'm', 'h'.",
-	"e.g. 60": "",
+	"e.g. 60": "esim. 60",
 	"e.g. A filter to remove profanity from text": "esim. suodatin, joka poistaa kirosanoja tekstistä",
 	"e.g. My Filter": "esim. Oma suodatin",
 	"e.g. My Tools": "esim. Omat työkalut",
@@ -344,7 +347,7 @@
 	"Embedding Model": "Upotusmalli",
 	"Embedding Model Engine": "Upotusmallin moottori",
 	"Embedding model set to \"{{embedding_model}}\"": "\"{{embedding_model}}\" valittu upotusmalliksi",
-	"Enable API Key": "",
+	"Enable API Key": "Ota API -avain käyttöön",
 	"Enable autocomplete generation for chat messages": "Ota automaattinen täydennys käyttöön keskusteluviesteissä",
 	"Enable Code Interpreter": "Ota ohjelmatulkki käyttöön",
 	"Enable Community Sharing": "Ota yhteisön jakaminen käyttöön",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "Ota viestiarviointi käyttöön",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "Ota Mirostat-näytteenotto käyttöön hallinnan monimerkityksellisyydelle. (Oletus: 0, 0 = Ei käytössä, 1 = Mirostat, 2 = Mirostat 2.0)",
 	"Enable New Sign Ups": "Salli uudet rekisteröitymiset",
+	"Enable OneDrive": "",
 	"Enable Web Search": "Ota verkkohaku käyttöön",
 	"Enabled": "Käytössä",
 	"Engine": "Moottori",
@@ -365,40 +369,42 @@
 	"Enter Application DN Password": "Kirjoita sovelluksen DN-salasana",
 	"Enter Bing Search V7 Endpoint": "Kirjoita Bing Search V7 -päätepisteen osoite",
 	"Enter Bing Search V7 Subscription Key": "Kirjoita Bing Search V7 -tilauskäyttäjäavain",
-	"Enter Bocha Search API Key": "",
+	"Enter Bocha Search API Key": "Kirjoita Bocha Search API -avain",
 	"Enter Brave Search API Key": "Kirjoita Brave Search API -avain",
 	"Enter certificate path": "Kirjoita varmennepolku",
 	"Enter CFG Scale (e.g. 7.0)": "Kirjoita CFG-mitta (esim. 7.0)",
 	"Enter Chunk Overlap": "Syötä osien päällekkäisyys",
 	"Enter Chunk Size": "Syötä osien koko",
 	"Enter description": "Kirjoita kuvaus",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "Verkko-osoitteet erotetaan pilkulla (esim. esimerkki.com,sivu.org",
-	"Enter Exa API Key": "",
-	"Enter Github Raw URL": "Kirjoita Github Raw -URL-osoite",
+	"Enter Exa API Key": "Kirjoita Exa API -avain",
+	"Enter Github Raw URL": "Kirjoita Github Raw -verkko-osoite",
 	"Enter Google PSE API Key": "Kirjoita Google PSE API -avain",
 	"Enter Google PSE Engine Id": "Kirjoita Google PSE -moottorin tunnus",
 	"Enter Image Size (e.g. 512x512)": "Kirjoita kuvan koko (esim. 512x512)",
 	"Enter Jina API Key": "Kirjoita Jina API -avain",
-	"Enter Jupyter Password": "",
-	"Enter Jupyter Token": "",
-	"Enter Jupyter URL": "",
-	"Enter Kagi Search API Key": "",
+	"Enter Jupyter Password": "Kirjoita Jupyter salasana",
+	"Enter Jupyter Token": "Kirjoita Juypyter token",
+	"Enter Jupyter URL": "Kirjoita Jupyter verkko-osoite",
+	"Enter Kagi Search API Key": "Kirjoita Kagi Search API -avain",
 	"Enter language codes": "Kirjoita kielikoodit",
 	"Enter Model ID": "Kirjoita mallitunnus",
 	"Enter model tag (e.g. {{modelTag}})": "Kirjoita mallitagi (esim. {{modelTag}})",
 	"Enter Mojeek Search API Key": "Kirjoita Mojeek Search API -avain",
 	"Enter Number of Steps (e.g. 50)": "Kirjoita askelten määrä (esim. 50)",
-	"Enter proxy URL (e.g. https://user:password@host:port)": "Kirjoita välityspalvelimen URL-osoite (esim. https://käyttäjä:salasana@host:portti)",
+	"Enter proxy URL (e.g. https://user:password@host:port)": "Kirjoita välityspalvelimen verkko-osoite (esim. https://käyttäjä:salasana@host:portti)",
 	"Enter reasoning effort": "",
 	"Enter Sampler (e.g. Euler a)": "Kirjoita näytteistäjä (esim. Euler a)",
 	"Enter Scheduler (e.g. Karras)": "Kirjoita ajoitin (esim. Karras)",
 	"Enter Score": "Kirjoita pistemäärä",
 	"Enter SearchApi API Key": "Kirjoita SearchApi API -avain",
 	"Enter SearchApi Engine": "Kirjoita SearchApi-moottori",
-	"Enter Searxng Query URL": "Kirjoita Searxng-kyselyn URL-osoite",
+	"Enter Searxng Query URL": "Kirjoita Searxng-kyselyn verkko-osoite",
 	"Enter Seed": "Kirjoita siemenluku",
-	"Enter SerpApi API Key": "",
-	"Enter SerpApi Engine": "",
+	"Enter SerpApi API Key": "Kirjoita SerpApi API -avain",
+	"Enter SerpApi Engine": "Valitse SerpApi Moottori",
 	"Enter Serper API Key": "Kirjoita Serper API -avain",
 	"Enter Serply API Key": "Kirjoita Serply API -avain",
 	"Enter Serpstack API Key": "Kirjoita Serpstack API -avain",
@@ -410,28 +416,28 @@
 	"Enter Tavily API Key": "Kirjoita Tavily API -avain",
 	"Enter the public URL of your WebUI. This URL will be used to generate links in the notifications.": "Kirjoita julkinen WebUI verkko-osoitteesi. Verkko-osoitetta käytetään osoitteiden luontiin ilmoituksissa.",
 	"Enter Tika Server URL": "Kirjoita Tika Server URL",
-	"Enter timeout in seconds": "",
+	"Enter timeout in seconds": "Aseta aikakatkaisu sekunneissa",
 	"Enter Top K": "Kirjoita Top K",
-	"Enter URL (e.g. http://127.0.0.1:7860/)": "Kirjoita URL-osoite (esim. http://127.0.0.1:7860/)",
-	"Enter URL (e.g. http://localhost:11434)": "Kirjoita URL-osoite (esim. http://localhost:11434)",
+	"Enter URL (e.g. http://127.0.0.1:7860/)": "Kirjoita verkko-osoite (esim. http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "Kirjoita verkko-osoite (esim. http://localhost:11434)",
 	"Enter your current password": "Kirjoita nykyinen salasanasi",
 	"Enter Your Email": "Kirjoita sähköpostiosoitteesi",
 	"Enter Your Full Name": "Kirjoita koko nimesi",
 	"Enter your message": "Kirjoita viestisi",
-	"Enter your new password": "",
+	"Enter your new password": "Kirjoita uusi salasanasi",
 	"Enter Your Password": "Kirjoita salasanasi",
 	"Enter Your Role": "Kirjoita roolisi",
 	"Enter Your Username": "Kirjoita käyttäjätunnuksesi",
 	"Enter your webhook URL": "Kirjoita webhook osoitteesi",
 	"Error": "Virhe",
 	"ERROR": "VIRHE",
-	"Error accessing Google Drive: {{error}}": "",
-	"Error uploading file: {{error}}": "",
+	"Error accessing Google Drive: {{error}}": "Virhe yhdistäessä Google Drive: {{error}}",
+	"Error uploading file: {{error}}": "Virhe ladattaessa tiedostoa: {{error}}",
 	"Evaluations": "Arvioinnit",
-	"Exa API Key": "",
+	"Exa API Key": "Exa API -avain",
 	"Example: (&(objectClass=inetOrgPerson)(uid=%s))": "Esimerkki: (&(objectClass=inetOrgPerson)(uid=%s))",
 	"Example: ALL": "Esimerkki: KAIKKI",
-	"Example: mail": "",
+	"Example: mail": "Esimerkki: posti",
 	"Example: ou=users,dc=foo,dc=example": "Esimerkki: ou=käyttäjät,dc=foo,dc=example",
 	"Example: sAMAccountName or uid or userPrincipalName": "Esimerkki: sAMAccountName tai uid tai userPrincipalName",
 	"Exclude": "Jätä pois",
@@ -458,7 +464,7 @@
 	"Failed to save models configuration": "Mallien määrityksen tallentaminen epäonnistui",
 	"Failed to update settings": "Asetusten päivittäminen epäonnistui",
 	"Failed to upload file.": "Tiedoston lataaminen epäonnistui.",
-	"Features": "",
+	"Features": "Ominaisuudet",
 	"Features Permissions": "Ominaisuuksien käyttöoikeudet",
 	"February": "helmikuu",
 	"Feedback History": "Palautehistoria",
@@ -488,9 +494,9 @@
 	"Form": "Lomake",
 	"Format your variables using brackets like this:": "Muotoile muuttujasi hakasulkeilla tällä tavalla:",
 	"Frequency Penalty": "Taajuussakko",
-	"Full Context Mode": "",
+	"Full Context Mode": "Koko kontekstitila",
 	"Function": "Toiminto",
-	"Function Calling": "",
+	"Function Calling": "Toiminto kutsu",
 	"Function created successfully": "Toiminto luotu onnistuneesti",
 	"Function deleted successfully": "Toiminto poistettu onnistuneesti",
 	"Function Description": "Toiminnon kuvaus",
@@ -503,19 +509,20 @@
 	"Functions allow arbitrary code execution": "Toiminnot sallivat mielivaltaisen koodin suorittamisen",
 	"Functions allow arbitrary code execution.": "Toiminnot sallivat mielivaltaisen koodin suorittamisen.",
 	"Functions imported successfully": "Toiminnot tuotu onnistuneesti",
-	"Gemini": "",
-	"Gemini API Config": "",
-	"Gemini API Key is required.": "",
+	"Gemini": "Gemini",
+	"Gemini API Config": "Gemini API konfiguraatio",
+	"Gemini API Key is required.": "Gemini API -avain on vaaditaan.",
 	"General": "Yleinen",
 	"General Settings": "Yleiset asetukset",
 	"Generate an image": "Luo kuva",
 	"Generate Image": "Luo kuva",
+	"Generate prompt pair": "",
 	"Generating search query": "Luodaan hakukyselyä",
 	"Get started": "Aloita",
 	"Get started with {{WEBUI_NAME}}": "Aloita käyttämään {{WEBUI_NAME}}:iä",
 	"Global": "Yleinen",
 	"Good Response": "Hyvä vastaus",
-	"Google Drive": "",
+	"Google Drive": "Google Drive",
 	"Google PSE API Key": "Google PSE API -avain",
 	"Google PSE Engine Id": "Google PSE -moottorin tunnus",
 	"Group created successfully": "Ryhmä luotu onnistuneesti",
@@ -532,7 +539,7 @@
 	"Hex Color": "Heksadesimaaliväri",
 	"Hex Color - Leave empty for default color": "Heksadesimaaliväri - Jätä tyhjäksi, jos haluat oletusvärin",
 	"Hide": "Piilota",
-	"Home": "",
+	"Home": "Koti",
 	"Host": "Palvelin",
 	"How can I help you today?": "Miten voin auttaa sinua tänään?",
 	"How would you rate this response?": "Kuinka arvioisit tätä vastausta?",
@@ -576,11 +583,11 @@
 	"JSON Preview": "JSON-esikatselu",
 	"July": "heinäkuu",
 	"June": "kesäkuu",
-	"Jupyter Auth": "",
-	"Jupyter URL": "",
+	"Jupyter Auth": "Jupyter todennus",
+	"Jupyter URL": "Jupyter verkko-osoite",
 	"JWT Expiration": "JWT-vanheneminen",
 	"JWT Token": "JWT-token",
-	"Kagi Search API Key": "",
+	"Kagi Search API Key": "Kagi Search API -avain",
 	"Keep Alive": "Pysy aktiivisena",
 	"Key": "Avain",
 	"Keyboard shortcuts": "Pikanäppäimet",
@@ -597,7 +604,7 @@
 	"Language": "Kieli",
 	"Last Active": "Viimeksi aktiivinen",
 	"Last Modified": "Viimeksi muokattu",
-	"Last reply": "",
+	"Last reply": "Viimeksi vastattu",
 	"LDAP": "LDAP",
 	"LDAP server updated": "LDAP-palvelin päivitetty",
 	"Leaderboard": "Tulosluettelo",
@@ -606,15 +613,16 @@
 	"Leave empty to include all models from \"{{URL}}/models\" endpoint": "Jätä tyhjäksi, jos haluat sisällyttää kaikki mallit \"{{URL}}/models\" -päätepistestä",
 	"Leave empty to include all models or select specific models": "Jätä tyhjäksi, jos haluat sisällyttää kaikki mallit tai valitse tietyt mallit",
 	"Leave empty to use the default prompt, or enter a custom prompt": "Jätä tyhjäksi käyttääksesi oletuskehotetta tai kirjoita mukautettu kehote",
-	"Leave model field empty to use the default model.": "",
-	"License": "",
+	"Leave model field empty to use the default model.": "Jätä malli kenttä tyhjäksi käyttääksesi oletus mallia.",
+	"License": "Lisenssi",
 	"Light": "Vaalea",
 	"Listening...": "Kuuntelee...",
-	"Llama.cpp": "",
+	"Llama.cpp": "Llama.cpp",
 	"LLMs can make mistakes. Verify important information.": "Kielimallit voivat tehdä virheitä. Tarkista tärkeät tiedot.",
 	"Loading Kokoro.js...": "Ladataan Kokoro.js...",
 	"Local": "Paikallinen",
 	"Local Models": "Paikalliset mallit",
+	"Location access not allowed": "",
 	"Lost": "Mennyt",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "Tehnyt OpenWebUI-yhteisö",
@@ -642,7 +650,7 @@
 	"Memory updated successfully": "Muisti päivitetty onnistuneesti",
 	"Merge Responses": "Yhdistä vastaukset",
 	"Message rating should be enabled to use this feature": "Tämän toiminnon käyttämiseksi viestiarviointi on otettava käyttöön",
-	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Linkin luomisen jälkeen lähettämäsi viestit eivät ole jaettuja. Käyttäjät, joilla on URL-osoite, voivat tarkastella jaettua keskustelua.",
+	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Linkin luomisen jälkeen lähettämäsi viestit eivät ole jaettuja. Käyttäjät, joilla on verkko-osoite, voivat tarkastella jaettua keskustelua.",
 	"Min P": "Min P",
 	"Minimum Score": "Vähimmäispisteet",
 	"Mirostat": "Mirostat",
@@ -718,11 +726,12 @@
 	"Ollama API settings updated": "Ollama API -asetukset päivitetty",
 	"Ollama Version": "Ollama-versio",
 	"On": "Päällä",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "Vain kirjaimet, numerot ja väliviivat ovat sallittuja",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "Vain kirjaimet, numerot ja väliviivat ovat sallittuja komentosarjassa.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "Vain kokoelmia voi muokata, luo uusi tietokanta muokataksesi/lisätäksesi asiakirjoja.",
 	"Only select users and groups with permission can access": "Vain valitut käyttäjät ja ryhmät, joilla on käyttöoikeus, pääsevät käyttämään",
-	"Oops! Looks like the URL is invalid. Please double-check and try again.": "Hups! Näyttää siltä, että URL-osoite on virheellinen. Tarkista se ja yritä uudelleen.",
+	"Oops! Looks like the URL is invalid. Please double-check and try again.": "Hups! Näyttää siltä, että verkko-osoite on virheellinen. Tarkista se ja yritä uudelleen.",
 	"Oops! There are files still uploading. Please wait for the upload to complete.": "Hups! Tiedostoja on vielä ladattavana. Odota, että lataus on valmis.",
 	"Oops! There was an error in the previous response.": "Hups! Edellisessä vastauksessa oli virhe.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Hups! Käytät ei-tuettua menetelmää (vain frontend). Palvele WebUI:ta backendistä.",
@@ -788,7 +797,7 @@
 	"Prompt updated successfully": "Kehote päivitetty onnistuneesti",
 	"Prompts": "Kehotteet",
 	"Prompts Access": "Kehoitteiden käyttöoikeudet",
-	"Proxy URL": "Välityspalvelimen URL-osoite",
+	"Proxy URL": "Välityspalvelimen verkko-osoite",
 	"Pull \"{{searchValue}}\" from Ollama.com": "Lataa \"{{searchValue}}\" Ollama.comista",
 	"Pull a model from Ollama.com": "Lataa malli Ollama.comista",
 	"Query Generation Prompt": "Kyselytulosten luontikehote",
@@ -864,7 +873,7 @@
 	"Searched {{count}} sites": "Etsitty {{count}} sivulta",
 	"Searching \"{{searchQuery}}\"": "Haetaan \"{{searchQuery}}\"",
 	"Searching Knowledge for \"{{searchQuery}}\"": "Haetaan tietämystä \"{{searchQuery}}\"",
-	"Searxng Query URL": "Searxng-kyselyn URL-osoite",
+	"Searxng Query URL": "Searxng-kyselyn verkko-osoite",
 	"See readme.md for instructions": "Katso ohjeet readme.md-tiedostosta",
 	"See what's new": "Katso, mitä uutta",
 	"Seed": "Siemenluku",
@@ -874,13 +883,12 @@
 	"Select a group": "Valitse ryhmä",
 	"Select a model": "Valitse malli",
 	"Select a pipeline": "Valitse putki",
-	"Select a pipeline url": "Valitse putken URL-osoite",
+	"Select a pipeline url": "Valitse putken verkko-osoite",
 	"Select a tool": "Valitse työkalu",
 	"Select an auth method": "Valitse kirjautumistapa",
 	"Select an Ollama instance": "Valitse Ollama instanssi",
 	"Select Engine": "Valitse moottori",
 	"Select Knowledge": "Valitse tietämys",
-	"Select model": "Valitse malli",
 	"Select only one model to call": "Valitse vain yksi malli kutsuttavaksi",
 	"Selected model(s) do not support image inputs": "Valitut mallit eivät tue kuvasöytteitä",
 	"Semantic distance to query": "Semanttinen etäisyys kyselyyn",
@@ -889,8 +897,8 @@
 	"Send message": "Lähetä viesti",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "Lähettää `stream_options: { include_usage: true }` pyynnössä.\nTuetut tarjoajat palauttavat tokenkäyttötiedot vastauksessa, kun se on asetettu.",
 	"September": "syyskuu",
-	"SerpApi API Key": "",
-	"SerpApi Engine": "",
+	"SerpApi API Key": "SerpApi API -avain",
+	"SerpApi Engine": "SerpApi moottori",
 	"Serper API Key": "Serper API -avain",
 	"Serply API Key": "Serply API -avain",
 	"Serpstack API Key": "Serpstack API -avain",
@@ -906,7 +914,7 @@
 	"Set Scheduler": "Aseta ajoitin",
 	"Set Steps": "Aseta askeleet",
 	"Set Task Model": "Aseta tehtävämalli",
-	"Set the number of layers, which will be off-loaded to GPU. Increasing this value can significantly improve performance for models that are optimized for GPU acceleration but may also consume more power and GPU resources.": "",
+	"Set the number of layers, which will be off-loaded to GPU. Increasing this value can significantly improve performance for models that are optimized for GPU acceleration but may also consume more power and GPU resources.": "Aseta näytönohjaimelle ladattavien tasojen määrä. Tämän arvon kasvattaminen voi parantaa merkittävästi näytönohjaimelle optimoitujen mallien suorituskykyä, mutta se voi myös lisätä näytönohjaimen virrankulutusta ja resurssien käyttöä.",
 	"Set the number of worker threads used for computation. This option controls how many threads are used to process incoming requests concurrently. Increasing this value can improve performance under high concurrency workloads but may also consume more CPU resources.": "Aseta työntekijäsäikeiden määrä laskentaa varten. Tämä asetus kontrolloi, kuinka monta säiettä käytetään saapuvien pyyntöjen rinnakkaiseen käsittelyyn. Arvon kasvattaminen voi parantaa suorituskykyä suurissa samanaikaisissa työkuormissa, mutta voi myös kuluttaa enemmän keskussuorittimen resursseja.",
 	"Set Voice": "Aseta puheääni",
 	"Set whisper model": "Aseta whisper-malli",
@@ -957,8 +965,9 @@
 	"Tags Generation": "Tagien luonti",
 	"Tags Generation Prompt": "Tagien luontikehote",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "Tail-free-otanta käytetään vähentämään vähemmän todennäköisten tokenien vaikutusta tulokseen. Korkeampi arvo (esim. 2,0) vähentää vaikutusta enemmän, kun taas arvo 1,0 poistaa tämän asetuksen käytöstä. (oletus: 1)",
+	"Talk to model": "",
 	"Tap to interrupt": "Napauta keskeyttääksesi",
-	"Tasks": "",
+	"Tasks": "Tehtävät",
 	"Tavily API Key": "Tavily API -avain",
 	"Tell us more:": "Kerro lisää:",
 	"Temperature": "Lämpötila",
@@ -1005,14 +1014,14 @@
 	"Title (e.g. Tell me a fun fact)": "Otsikko (esim. Kerro hauska fakta)",
 	"Title Auto-Generation": "Otsikon automaattinen luonti",
 	"Title cannot be an empty string.": "Otsikko ei voi olla tyhjä merkkijono.",
-	"Title Generation": "",
+	"Title Generation": "Otsikon luonti",
 	"Title Generation Prompt": "Otsikon luontikehote",
 	"TLS": "TLS",
 	"To access the available model names for downloading,": "Päästäksesi käsiksi ladattavissa oleviin mallinimiin,",
 	"To access the GGUF models available for downloading,": "Päästäksesi käsiksi ladattavissa oleviin GGUF-malleihin,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Päästäksesi käyttämään WebUI:ta, ota yhteyttä ylläpitäjään. Ylläpitäjät voivat hallita käyttäjien tiloja Ylläpitopaneelista.",
 	"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "Liittääksesi tietokantasi tähän, lisää ne ensin \"Tietämys\"-työtilaan.",
-	"To learn more about available endpoints, visit our documentation.": "",
+	"To learn more about available endpoints, visit our documentation.": "Jos haluat lisätietoja käytettävissä olevista päätepisteistä, tutustu dokumentaatioomme.",
 	"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "Yksityisyydensuojasi vuoksi palautteestasi jaetaan vain arvostelut, mallitunnukset, tagit ja metadata - keskustelulokisi pysyvät yksityisinä eikä niitä sisällytetä.",
 	"To select actions here, add them to the \"Functions\" workspace first.": "Valitaksesi toimintoja tässä, lisää ne ensin \"Toiminnot\"-työtilaan.",
 	"To select filters here, add them to the \"Functions\" workspace first.": "Valitaksesi suodattimia tässä, lisää ne ensin \"Toiminnot\"-työtilaan.",
@@ -1041,12 +1050,13 @@
 	"Top P": "Top P",
 	"Transformers": "Muunnokset",
 	"Trouble accessing Ollama?": "Ongelmia Ollama-yhteydessä?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "Puhesynteesimalli",
 	"TTS Settings": "Puhesynteesiasetukset",
 	"TTS Voice": "Puhesynteesiääni",
 	"Type": "Tyyppi",
 	"Type Hugging Face Resolve (Download) URL": "Kirjoita Hugging Face -resolve-latausosoite",
-	"Uh-oh! There was an issue with the response.": "Voi ei! Vastauksessa oli ongelma.",
+	"Uh-oh! There was an issue with the response.": "Voi ei! Vastauksessa ilmeni ongelma.",
 	"UI": "Käyttöliittymä",
 	"Unarchive All": "Pura kaikkien arkistointi",
 	"Unarchive All Archived Chats": "Pura kaikkien arkistoitujen keskustelujen arkistointi",
@@ -1101,7 +1111,7 @@
 	"Warning:": "Varoitus:",
 	"Warning: Enabling this will allow users to upload arbitrary code on the server.": "Varoitus: Tämän käyttöönotto sallii käyttäjien ladata mielivaltaista koodia palvelimelle.",
 	"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: Jupyter execution enables arbitrary code execution, posing severe security risks—proceed with extreme caution.": "",
+	"Warning: Jupyter execution enables arbitrary code execution, posing severe security risks—proceed with extreme caution.": "Varoitus: Jupyter käyttö voi mahdollistaa mielivaltaiseen koodin suorittamiseen, mikä voi aiheuttaa tietoturvariskejä - käytä äärimmäisen varoen.",
 	"Web": "Web",
 	"Web API": "Web-API",
 	"Web Loader Settings": "Web Loader -asetukset",
@@ -1109,7 +1119,7 @@
 	"Web Search Engine": "Hakukoneet",
 	"Web Search in Chat": "Verkkohaku keskustelussa",
 	"Web Search Query Generation": "Verkkohakukyselyn luonti",
-	"Webhook URL": "Webhook-URL",
+	"Webhook URL": "Webhook verkko-osoite",
 	"WebUI Settings": "WebUI-asetukset",
 	"WebUI URL": "WebUI-osoite",
 	"WebUI will make requests to \"{{url}}/api/chat\"": "WebUI lähettää pyyntöjä osoitteeseen \"{{url}}/api/chat\"",

+ 12 - 2
src/lib/i18n/locales/fr-CA/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "Un modèle de tâche est utilisé lors de l’exécution de tâches telles que la génération de titres pour les conversations et les requêtes de recherche sur le web.",
 	"a user": "un utilisateur",
 	"About": "À propos",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "",
 	"Access Control": "",
 	"Accessible to all users": "",
@@ -93,7 +94,7 @@
 	"Artifacts": "",
 	"Ask a question": "",
 	"Assistant": "",
-	"Attach file": "Joindre un document",
+	"Attach file from knowledge": "",
 	"Attention to detail": "Attention aux détails",
 	"Attribute for Mail": "",
 	"Attribute for Username": "",
@@ -305,6 +306,8 @@
 	"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 Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "Documentation",
 	"Documents": "Documents",
 	"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.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "",
 	"Enable New Sign Ups": "Activer les nouvelles inscriptions",
+	"Enable OneDrive": "",
 	"Enable Web Search": "Activer la recherche sur le Web",
 	"Enabled": "",
 	"Engine": "Moteur",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "Entrez le chevauchement de chunk",
 	"Enter Chunk Size": "Entrez la taille de bloc",
 	"Enter description": "",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "Entrez l'URL brute de GitHub",
@@ -510,6 +516,7 @@
 	"General Settings": "Paramètres Généraux",
 	"Generate an image": "",
 	"Generate Image": "Générer une image",
+	"Generate prompt pair": "",
 	"Generating search query": "Génération d'une requête de recherche",
 	"Get started": "",
 	"Get started with {{WEBUI_NAME}}": "",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "",
 	"Local Models": "Modèles locaux",
+	"Location access not allowed": "",
 	"Lost": "",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "Réalisé par la communauté OpenWebUI",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "",
 	"Ollama Version": "Version Ollama améliorée",
 	"On": "Activé",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "Seuls les caractères alphanumériques et les tirets sont autorisés dans la chaîne de commande.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "",
 	"Select Knowledge": "",
-	"Select model": "Sélectionnez un modèle",
 	"Select only one model to call": "Sélectionnez seulement un modèle pour appeler",
 	"Selected model(s) do not support image inputs": "Les modèle(s) sélectionné(s) ne prennent pas en charge les entrées d'images",
 	"Semantic distance to query": "",
@@ -957,6 +965,7 @@
 	"Tags Generation": "",
 	"Tags Generation Prompt": "",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "",
+	"Talk to model": "",
 	"Tap to interrupt": "Appuyez pour interrompre",
 	"Tasks": "",
 	"Tavily API Key": "Clé API Tavily",
@@ -1041,6 +1050,7 @@
 	"Top P": "Top P",
 	"Transformers": "",
 	"Trouble accessing Ollama?": "Rencontrez-vous des difficultés pour accéder à Ollama ?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "Modèle de synthèse vocale",
 	"TTS Settings": "Paramètres de synthèse vocale",
 	"TTS Voice": "Voix TTS",

+ 12 - 2
src/lib/i18n/locales/fr-FR/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "Un modèle de tâche est utilisé lors de l’exécution de tâches telles que la génération de titres pour les conversations et les requêtes de recherche sur le web.",
 	"a user": "un utilisateur",
 	"About": "À propos",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "Accès",
 	"Access Control": "Contrôle d'accès",
 	"Accessible to all users": "Accessible à tous les utilisateurs",
@@ -93,7 +94,7 @@
 	"Artifacts": "Artéfacts",
 	"Ask a question": "Posez votre question",
 	"Assistant": "Assistant",
-	"Attach file": "Joindre un document",
+	"Attach file from knowledge": "",
 	"Attention to detail": "Attention aux détails",
 	"Attribute for Mail": "Attribut pour l'e-mail",
 	"Attribute for Username": "Attribut pour le nom d'utilisateur",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "N'installez pas de fonctions provenant de sources auxquelles vous ne faites pas entièrement confiance.",
 	"Do not install tools from sources you do not fully trust.": "N'installez pas d'outils provenant de sources auxquelles vous ne faites pas entièrement confiance.",
 	"Document": "Document",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "Documentation",
 	"Documents": "Documents",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "n'établit aucune connexion externe et garde vos données en sécurité sur votre serveur local.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "Activer l'évaluation des messages",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "Activer l'échantillonnage Mirostat pour contrôler la perplexité. (Par défaut : 0, 0 = Désactivé, 1 = Mirostat, 2 = Mirostat 2.0)",
 	"Enable New Sign Ups": "Activer les nouvelles inscriptions",
+	"Enable OneDrive": "",
 	"Enable Web Search": "Activer la recherche Web",
 	"Enabled": "Activé",
 	"Engine": "Moteur",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "Entrez le chevauchement des chunks",
 	"Enter Chunk Size": "Entrez la taille des chunks",
 	"Enter description": "Entrez la description",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "Entrez l'URL brute de GitHub",
@@ -510,6 +516,7 @@
 	"General Settings": "Paramètres généraux",
 	"Generate an image": "",
 	"Generate Image": "Générer une image",
+	"Generate prompt pair": "",
 	"Generating search query": "Génération d'une requête de recherche",
 	"Get started": "Commencer",
 	"Get started with {{WEBUI_NAME}}": "Commencez avec {{WEBUI_NAME}}",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "Local",
 	"Local Models": "Modèles locaux",
+	"Location access not allowed": "",
 	"Lost": "Perdu",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "Réalisé par la communauté OpenWebUI",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "Paramètres de l'API Ollama mis à jour",
 	"Ollama Version": "Version Ollama",
 	"On": "Activé",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "Seuls les caractères alphanumériques et les tirets sont autorisés",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "Seuls les caractères alphanumériques et les tirets sont autorisés dans la chaîne de commande.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "Seules les collections peuvent être modifiées, créez une nouvelle base de connaissance pour modifier/ajouter des documents.",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "Sélectionnez une instance Ollama",
 	"Select Engine": "Sélectionnez le moteur",
 	"Select Knowledge": "Sélectionnez une connaissance",
-	"Select model": "Sélectionner un modèle",
 	"Select only one model to call": "Sélectionnez seulement un modèle pour appeler",
 	"Selected model(s) do not support image inputs": "Les modèle(s) sélectionné(s) ne prennent pas en charge les entrées d'images",
 	"Semantic distance to query": "Distance sémantique à la requête",
@@ -957,6 +965,7 @@
 	"Tags Generation": "Génération de tags",
 	"Tags Generation Prompt": "Prompt de génération de tags",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "L'échantillonnage sans queue est utilisé pour réduire l'impact des tokens moins probables dans la sortie. Une valeur plus élevée (par exemple 2.0) réduira davantage l'impact, tandis qu'une valeur de 1.0 désactive ce paramètre. (par défaut : 1)",
+	"Talk to model": "",
 	"Tap to interrupt": "Appuyez pour interrompre",
 	"Tasks": "",
 	"Tavily API Key": "Clé API Tavily",
@@ -1041,6 +1050,7 @@
 	"Top P": "Top P",
 	"Transformers": "Transformers",
 	"Trouble accessing Ollama?": "Problèmes d'accès à Ollama ?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "Modèle de Text-to-Speech",
 	"TTS Settings": "Paramètres de Text-to-Speech",
 	"TTS Voice": "Voix de Text-to-Speech",

+ 12 - 2
src/lib/i18n/locales/he-IL/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "מודל משימה משמש בעת ביצוע משימות כגון יצירת כותרות עבור צ'אטים ושאילתות חיפוש באינטרנט",
 	"a user": "משתמש",
 	"About": "אודות",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "",
 	"Access Control": "",
 	"Accessible to all users": "",
@@ -93,7 +94,7 @@
 	"Artifacts": "",
 	"Ask a question": "",
 	"Assistant": "",
-	"Attach file": "צרף קובץ",
+	"Attach file from knowledge": "",
 	"Attention to detail": "תשומת לב לפרטים",
 	"Attribute for Mail": "",
 	"Attribute for Username": "",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "",
 	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "מסמך",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "",
 	"Documents": "מסמכים",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "לא מבצע חיבורים חיצוניים, והנתונים שלך נשמרים באופן מאובטח בשרת המקומי שלך.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "",
 	"Enable New Sign Ups": "אפשר הרשמות חדשות",
+	"Enable OneDrive": "",
 	"Enable Web Search": "הפיכת חיפוש באינטרנט לזמין",
 	"Enabled": "",
 	"Engine": "",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "הזן חפיפת נתונים",
 	"Enter Chunk Size": "הזן גודל נתונים",
 	"Enter description": "",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "הזן כתובת URL של Github Raw",
@@ -510,6 +516,7 @@
 	"General Settings": "הגדרות כלליות",
 	"Generate an image": "",
 	"Generate Image": "",
+	"Generate prompt pair": "",
 	"Generating search query": "יצירת שאילתת חיפוש",
 	"Get started": "",
 	"Get started with {{WEBUI_NAME}}": "",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "",
 	"Local Models": "",
+	"Location access not allowed": "",
 	"Lost": "",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "נוצר על ידי קהילת OpenWebUI",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "",
 	"Ollama Version": "גרסת Ollama",
 	"On": "פועל",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "רק תווים אלפאנומריים ומקפים מותרים במחרוזת הפקודה.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "",
 	"Select Knowledge": "",
-	"Select model": "בחר מודל",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "דגמים נבחרים אינם תומכים בקלט תמונה",
 	"Semantic distance to query": "",
@@ -957,6 +965,7 @@
 	"Tags Generation": "",
 	"Tags Generation Prompt": "",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "",
+	"Talk to model": "",
 	"Tap to interrupt": "",
 	"Tasks": "",
 	"Tavily API Key": "",
@@ -1041,6 +1050,7 @@
 	"Top P": "Top P",
 	"Transformers": "",
 	"Trouble accessing Ollama?": "קשה לגשת לOllama?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "",
 	"TTS Settings": "הגדרות TTS",
 	"TTS Voice": "",

+ 12 - 2
src/lib/i18n/locales/hi-IN/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "चैट और वेब खोज क्वेरी के लिए शीर्षक उत्पन्न करने जैसे कार्य करते समय कार्य मॉडल का उपयोग किया जाता है",
 	"a user": "एक उपयोगकर्ता",
 	"About": "हमारे बारे में",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "",
 	"Access Control": "",
 	"Accessible to all users": "",
@@ -93,7 +94,7 @@
 	"Artifacts": "",
 	"Ask a question": "",
 	"Assistant": "",
-	"Attach file": "फ़ाइल atta",
+	"Attach file from knowledge": "",
 	"Attention to detail": "विस्तार पर ध्यान",
 	"Attribute for Mail": "",
 	"Attribute for Username": "",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "",
 	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "दस्तावेज़",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "",
 	"Documents": "दस्तावेज़",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "कोई बाहरी कनेक्शन नहीं बनाता है, और आपका डेटा आपके स्थानीय रूप से होस्ट किए गए सर्वर पर सुरक्षित रूप से रहता है।",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "",
 	"Enable New Sign Ups": "नए साइन अप सक्रिय करें",
+	"Enable OneDrive": "",
 	"Enable Web Search": "वेब खोज सक्षम करें",
 	"Enabled": "",
 	"Engine": "",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "चंक ओवरलैप दर्ज करें",
 	"Enter Chunk Size": "खंड आकार दर्ज करें",
 	"Enter description": "",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "Github Raw URL दर्ज करें",
@@ -510,6 +516,7 @@
 	"General Settings": "सामान्य सेटिंग्स",
 	"Generate an image": "",
 	"Generate Image": "",
+	"Generate prompt pair": "",
 	"Generating search query": "खोज क्वेरी जनरेट करना",
 	"Get started": "",
 	"Get started with {{WEBUI_NAME}}": "",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "",
 	"Local Models": "",
+	"Location access not allowed": "",
 	"Lost": "",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "OpenWebUI समुदाय द्वारा निर्मित",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "",
 	"Ollama Version": "Ollama Version",
 	"On": "चालू",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "कमांड स्ट्रिंग में केवल अल्फ़ान्यूमेरिक वर्ण और हाइफ़न की अनुमति है।",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "",
 	"Select Knowledge": "",
-	"Select model": "मॉडल चुनें",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "चयनित मॉडल छवि इनपुट का समर्थन नहीं करते हैं",
 	"Semantic distance to query": "",
@@ -957,6 +965,7 @@
 	"Tags Generation": "",
 	"Tags Generation Prompt": "",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "",
+	"Talk to model": "",
 	"Tap to interrupt": "",
 	"Tasks": "",
 	"Tavily API Key": "",
@@ -1041,6 +1050,7 @@
 	"Top P": "शीर्ष  P",
 	"Transformers": "",
 	"Trouble accessing Ollama?": "Ollama तक पहुँचने में परेशानी हो रही है?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "",
 	"TTS Settings": "TTS सेटिंग्स",
 	"TTS Voice": "",

+ 12 - 2
src/lib/i18n/locales/hr-HR/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "Model zadatka koristi se pri izvođenju zadataka kao što su generiranje naslova za razgovore i upite za pretraživanje weba",
 	"a user": "korisnik",
 	"About": "O aplikaciji",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "",
 	"Access Control": "",
 	"Accessible to all users": "",
@@ -93,7 +94,7 @@
 	"Artifacts": "",
 	"Ask a question": "",
 	"Assistant": "",
-	"Attach file": "Priloži datoteku",
+	"Attach file from knowledge": "",
 	"Attention to detail": "Pažnja na detalje",
 	"Attribute for Mail": "",
 	"Attribute for Username": "",
@@ -305,6 +306,8 @@
 	"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 Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "Dokumentacija",
 	"Documents": "Dokumenti",
 	"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.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "",
 	"Enable New Sign Ups": "Omogući nove prijave",
+	"Enable OneDrive": "",
 	"Enable Web Search": "Omogući pretraživanje weba",
 	"Enabled": "",
 	"Engine": "",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "Unesite preklapanje dijelova",
 	"Enter Chunk Size": "Unesite veličinu dijela",
 	"Enter description": "",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "Unesite Github sirovi URL",
@@ -510,6 +516,7 @@
 	"General Settings": "Opće postavke",
 	"Generate an image": "",
 	"Generate Image": "Gneriraj sliku",
+	"Generate prompt pair": "",
 	"Generating search query": "Generiranje upita za pretraživanje",
 	"Get started": "",
 	"Get started with {{WEBUI_NAME}}": "",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "",
 	"Local Models": "Lokalni modeli",
+	"Location access not allowed": "",
 	"Lost": "",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "Izradio OpenWebUI Community",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "",
 	"Ollama Version": "Ollama verzija",
 	"On": "Uključeno",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "Samo alfanumerički znakovi i crtice su dopušteni u naredbenom nizu.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "",
 	"Select Knowledge": "",
-	"Select model": "Odaberite model",
 	"Select only one model to call": "Odaberite samo jedan model za poziv",
 	"Selected model(s) do not support image inputs": "Odabrani modeli ne podržavaju unose slika",
 	"Semantic distance to query": "",
@@ -957,6 +965,7 @@
 	"Tags Generation": "",
 	"Tags Generation Prompt": "",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "",
+	"Talk to model": "",
 	"Tap to interrupt": "",
 	"Tasks": "",
 	"Tavily API Key": "",
@@ -1041,6 +1050,7 @@
 	"Top P": "Top P",
 	"Transformers": "",
 	"Trouble accessing Ollama?": "Problemi s pristupom Ollama?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "TTS model",
 	"TTS Settings": "TTS postavke",
 	"TTS Voice": "TTS glas",

+ 12 - 2
src/lib/i18n/locales/hu-HU/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "A feladat modell olyan feladatokhoz használatos, mint a beszélgetések címeinek generálása és webes keresési lekérdezések",
 	"a user": "egy felhasználó",
 	"About": "Névjegy",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "",
 	"Access Control": "",
 	"Accessible to all users": "",
@@ -93,7 +94,7 @@
 	"Artifacts": "Műtermékek",
 	"Ask a question": "Kérdezz valamit",
 	"Assistant": "Asszisztens",
-	"Attach file": "Fájl csatolása",
+	"Attach file from knowledge": "",
 	"Attention to detail": "Részletekre való odafigyelés",
 	"Attribute for Mail": "",
 	"Attribute for Username": "",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "Ne telepíts funkciókat olyan forrásokból, amelyekben nem bízol teljesen.",
 	"Do not install tools from sources you do not fully trust.": "Ne telepíts eszközöket olyan forrásokból, amelyekben nem bízol teljesen.",
 	"Document": "Dokumentum",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "Dokumentáció",
 	"Documents": "Dokumentumok",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "nem létesít külső kapcsolatokat, és az adataid biztonságban maradnak a helyileg hosztolt szervereden.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "Üzenet értékelés engedélyezése",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "",
 	"Enable New Sign Ups": "Új regisztrációk engedélyezése",
+	"Enable OneDrive": "",
 	"Enable Web Search": "Webes keresés engedélyezése",
 	"Enabled": "Engedélyezve",
 	"Engine": "Motor",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "Add meg a darab átfedést",
 	"Enter Chunk Size": "Add meg a darab méretet",
 	"Enter description": "Add meg a leírást",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "Add meg a Github Raw URL-t",
@@ -510,6 +516,7 @@
 	"General Settings": "Általános beállítások",
 	"Generate an image": "",
 	"Generate Image": "Kép generálása",
+	"Generate prompt pair": "",
 	"Generating search query": "Keresési lekérdezés generálása",
 	"Get started": "",
 	"Get started with {{WEBUI_NAME}}": "",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "",
 	"Local Models": "Helyi modellek",
+	"Location access not allowed": "",
 	"Lost": "Elveszett",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "Az OpenWebUI közösség által készítve",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "",
 	"Ollama Version": "Ollama verzió",
 	"On": "Be",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "Csak alfanumerikus karakterek és kötőjelek engedélyezettek a parancssorban.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "Csak gyűjtemények szerkeszthetők, hozzon létre új tudásbázist dokumentumok szerkesztéséhez/hozzáadásához.",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "Motor kiválasztása",
 	"Select Knowledge": "Tudásbázis kiválasztása",
-	"Select model": "Modell kiválasztása",
 	"Select only one model to call": "Csak egy modellt válasszon ki hívásra",
 	"Selected model(s) do not support image inputs": "A kiválasztott modell(ek) nem támogatják a képbemenetet",
 	"Semantic distance to query": "Szemantikai távolság a lekérdezéshez",
@@ -957,6 +965,7 @@
 	"Tags Generation": "",
 	"Tags Generation Prompt": "Címke generálási prompt",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "",
+	"Talk to model": "",
 	"Tap to interrupt": "Koppintson a megszakításhoz",
 	"Tasks": "",
 	"Tavily API Key": "Tavily API kulcs",
@@ -1041,6 +1050,7 @@
 	"Top P": "Top P",
 	"Transformers": "",
 	"Trouble accessing Ollama?": "Problémája van az Ollama elérésével?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "TTS modell",
 	"TTS Settings": "TTS beállítások",
 	"TTS Voice": "TTS hang",

+ 12 - 2
src/lib/i18n/locales/id-ID/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "Model tugas digunakan saat melakukan tugas seperti membuat judul untuk obrolan dan kueri penelusuran web",
 	"a user": "seorang pengguna",
 	"About": "Tentang",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "",
 	"Access Control": "",
 	"Accessible to all users": "",
@@ -93,7 +94,7 @@
 	"Artifacts": "",
 	"Ask a question": "",
 	"Assistant": "",
-	"Attach file": "Lampirkan file",
+	"Attach file from knowledge": "",
 	"Attention to detail": "Perhatian terhadap detail",
 	"Attribute for Mail": "",
 	"Attribute for Username": "",
@@ -305,6 +306,8 @@
 	"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 Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "Dokumentasi",
 	"Documents": "Dokumen",
 	"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.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "",
 	"Enable New Sign Ups": "Aktifkan Pendaftaran Baru",
+	"Enable OneDrive": "",
 	"Enable Web Search": "Aktifkan Pencarian Web",
 	"Enabled": "",
 	"Engine": "",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "Masukkan Tumpang Tindih Chunk",
 	"Enter Chunk Size": "Masukkan Ukuran Potongan",
 	"Enter description": "",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "Masukkan URL Mentah Github",
@@ -510,6 +516,7 @@
 	"General Settings": "Pengaturan Umum",
 	"Generate an image": "",
 	"Generate Image": "Menghasilkan Gambar",
+	"Generate prompt pair": "",
 	"Generating search query": "Membuat kueri penelusuran",
 	"Get started": "",
 	"Get started with {{WEBUI_NAME}}": "",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "",
 	"Local Models": "Model Lokal",
+	"Location access not allowed": "",
 	"Lost": "",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "Dibuat oleh Komunitas OpenWebUI",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "",
 	"Ollama Version": "Versi Ollama",
 	"On": "Aktif",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "Hanya karakter alfanumerik dan tanda hubung yang diizinkan dalam string perintah.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "",
 	"Select Knowledge": "",
-	"Select model": "Pilih model",
 	"Select only one model to call": "Pilih hanya satu model untuk dipanggil",
 	"Selected model(s) do not support image inputs": "Model yang dipilih tidak mendukung input gambar",
 	"Semantic distance to query": "",
@@ -957,6 +965,7 @@
 	"Tags Generation": "",
 	"Tags Generation Prompt": "",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "",
+	"Talk to model": "",
 	"Tap to interrupt": "Ketuk untuk menyela",
 	"Tasks": "",
 	"Tavily API Key": "Kunci API Tavily",
@@ -1041,6 +1050,7 @@
 	"Top P": "P Atas",
 	"Transformers": "",
 	"Trouble accessing Ollama?": "Kesulitan mengakses Ollama?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "Model TTS",
 	"TTS Settings": "Pengaturan TTS",
 	"TTS Voice": "Suara TTS",

+ 12 - 2
src/lib/i18n/locales/ie-GA/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "Úsáidtear múnla tasc agus tascanna á ndéanamh agat mar theidil a ghiniúint do chomhráite agus ceisteanna cuardaigh gréasáin",
 	"a user": "úsáideoir",
 	"About": "Maidir",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "Rochtain",
 	"Access Control": "Rialaithe Rochtana",
 	"Accessible to all users": "Inrochtana do gach úsáideoir",
@@ -93,7 +94,7 @@
 	"Artifacts": "Déantáin",
 	"Ask a question": "Cuir ceist",
 	"Assistant": "Cúntóir",
-	"Attach file": "Ceangail comhad",
+	"Attach file from knowledge": "",
 	"Attention to detail": "Aird ar mhionsonraí",
 	"Attribute for Mail": "Tréith don Phost",
 	"Attribute for Username": "Tréith don Ainm Úsáideora",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "Ná suiteáil feidhmeanna ó fhoinsí nach bhfuil muinín iomlán agat.",
 	"Do not install tools from sources you do not fully trust.": "Ná suiteáil uirlisí ó fhoinsí nach bhfuil muinín iomlán agat.",
 	"Document": "Doiciméad",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "Doiciméadú",
 	"Documents": "Doiciméid",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "ní dhéanann sé aon naisc sheachtracha, agus fanann do chuid sonraí go slán ar do fhreastalaí a óstáiltear go háitiúil.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "Cumasaigh Rátáil Teachtai",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "Cumasaigh sampláil Mirostat chun seachrán a rialú. (Réamhshocrú: 0, 0 = Díchumasaithe, 1 = Mirostat, 2 = Mirostat 2.0)",
 	"Enable New Sign Ups": "Cumasaigh Clárúcháin Nua",
+	"Enable OneDrive": "",
 	"Enable Web Search": "Cumasaigh Cuardach Gréasáin",
 	"Enabled": "Cumasaithe",
 	"Engine": "Inneall",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "Cuir isteach Chunk Forluí",
 	"Enter Chunk Size": "Cuir isteach Méid an Chunc",
 	"Enter description": "Iontráil cur síos",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "Cuir isteach Eochair Exa API",
 	"Enter Github Raw URL": "Cuir isteach URL Github Raw",
@@ -510,6 +516,7 @@
 	"General Settings": "Socruithe Ginearálta",
 	"Generate an image": "Gin íomhá",
 	"Generate Image": "Ginigh Íomhá",
+	"Generate prompt pair": "",
 	"Generating search query": "Giniúint ceist cuardaigh",
 	"Get started": "Cuir tús leis",
 	"Get started with {{WEBUI_NAME}}": "Cuir tús le {{WEBUI_NAME}}",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "Áitiúil",
 	"Local Models": "Múnlaí Áitiúla",
+	"Location access not allowed": "",
 	"Lost": "Cailleadh",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "Déanta ag OpenWebUI Community",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "Nuashonraíodh socruithe Olama API",
 	"Ollama Version": "Leagan Ollama",
 	"On": "Ar",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "Ní cheadaítear ach carachtair alfa-uimhriúla agus fleiscíní",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "Ní cheadaítear ach carachtair alfauméireacha agus braithíní sa sreangán ordaithe.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "Ní féidir ach bailiúcháin a chur in eagar, bonn eolais nua a chruthú chun doiciméid a chur in eagar/a chur leis.",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "Roghnaigh sampla Olama",
 	"Select Engine": "Roghnaigh Inneall",
 	"Select Knowledge": "Roghnaigh Eolais",
-	"Select model": "Roghnaigh múnla",
 	"Select only one model to call": "Roghnaigh múnla amháin le glaoch",
 	"Selected model(s) do not support image inputs": "Ní tacaíonn an munla/nna roghnaithe le h-ionchuir íomhá",
 	"Semantic distance to query": "Fad shéimeantach le fiosrú",
@@ -957,6 +965,7 @@
 	"Tags Generation": "Giniúint Clibeanna",
 	"Tags Generation Prompt": "Clibeanna Giniúint Leid",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "Úsáidtear sampláil saor ó eireabaill chun tionchar na n-chomharthaí ón aschur nach bhfuil chomh dóchúil céanna a laghdú. Laghdóidh luach níos airde (m.sh., 2.0) an tionchar níos mó, agus díchumasaíonn luach 1.0 an socrú seo. (réamhshocraithe: 1)",
+	"Talk to model": "",
 	"Tap to interrupt": "Tapáil chun cur isteach",
 	"Tasks": "",
 	"Tavily API Key": "Eochair API Tavily",
@@ -1041,6 +1050,7 @@
 	"Top P": "Barr P",
 	"Transformers": "Claochladáin",
 	"Trouble accessing Ollama?": "Deacracht teacht ar Ollama?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "TTS Múnla",
 	"TTS Settings": "Socruithe TTS",
 	"TTS Voice": "Guth TTS",

+ 12 - 2
src/lib/i18n/locales/it-IT/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "Un modello di attività viene utilizzato durante l'esecuzione di attività come la generazione di titoli per chat e query di ricerca Web",
 	"a user": "un utente",
 	"About": "Informazioni",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "",
 	"Access Control": "",
 	"Accessible to all users": "",
@@ -93,7 +94,7 @@
 	"Artifacts": "",
 	"Ask a question": "",
 	"Assistant": "",
-	"Attach file": "Allega file",
+	"Attach file from knowledge": "",
 	"Attention to detail": "Attenzione ai dettagli",
 	"Attribute for Mail": "",
 	"Attribute for Username": "",
@@ -305,6 +306,8 @@
 	"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 Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "",
 	"Documents": "Documenti",
 	"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.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "",
 	"Enable New Sign Ups": "Abilita nuove iscrizioni",
+	"Enable OneDrive": "",
 	"Enable Web Search": "Abilita ricerca Web",
 	"Enabled": "",
 	"Engine": "",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "Inserisci la sovrapposizione chunk",
 	"Enter Chunk Size": "Inserisci la dimensione chunk",
 	"Enter description": "",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "Immettere l'URL grezzo di Github",
@@ -510,6 +516,7 @@
 	"General Settings": "Impostazioni generali",
 	"Generate an image": "",
 	"Generate Image": "",
+	"Generate prompt pair": "",
 	"Generating search query": "Generazione di query di ricerca",
 	"Get started": "",
 	"Get started with {{WEBUI_NAME}}": "",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "",
 	"Local Models": "",
+	"Location access not allowed": "",
 	"Lost": "",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "Realizzato dalla comunità OpenWebUI",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "",
 	"Ollama Version": "Versione Ollama",
 	"On": "Attivato",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "Nella stringa di comando sono consentiti solo caratteri alfanumerici e trattini.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "",
 	"Select Knowledge": "",
-	"Select model": "Seleziona modello",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "I modelli selezionati non supportano l'input di immagini",
 	"Semantic distance to query": "",
@@ -957,6 +965,7 @@
 	"Tags Generation": "",
 	"Tags Generation Prompt": "",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "",
+	"Talk to model": "",
 	"Tap to interrupt": "",
 	"Tasks": "",
 	"Tavily API Key": "",
@@ -1041,6 +1050,7 @@
 	"Top P": "Top P",
 	"Transformers": "",
 	"Trouble accessing Ollama?": "Problemi di accesso a Ollama?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "",
 	"TTS Settings": "Impostazioni TTS",
 	"TTS Voice": "",

+ 12 - 2
src/lib/i18n/locales/ja-JP/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "タスクモデルは、チャットやウェブ検索クエリのタイトルの生成などのタスクを実行するときに使用されます",
 	"a user": "ユーザー",
 	"About": "概要",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "",
 	"Access Control": "",
 	"Accessible to all users": "",
@@ -93,7 +94,7 @@
 	"Artifacts": "",
 	"Ask a question": "質問して下さい。",
 	"Assistant": "",
-	"Attach file": "ファイルを添付する",
+	"Attach file from knowledge": "",
 	"Attention to detail": "詳細に注意する",
 	"Attribute for Mail": "",
 	"Attribute for Username": "",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "信頼できないソースからFunctionをインストールしないでください。",
 	"Do not install tools from sources you do not fully trust.": "信頼出来ないソースからツールをインストールしないでください。",
 	"Document": "ドキュメント",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "ドキュメント",
 	"Documents": "ドキュメント",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "外部接続を行わず、データはローカルでホストされているサーバー上に安全に保持されます。",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "メッセージ評価を有効にする",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "",
 	"Enable New Sign Ups": "新規登録を有効にする",
+	"Enable OneDrive": "",
 	"Enable Web Search": "ウェブ検索を有効にする",
 	"Enabled": "有効",
 	"Engine": "エンジン",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "チャンクオーバーラップを入力してください",
 	"Enter Chunk Size": "チャンクサイズを入力してください",
 	"Enter description": "",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "Github Raw URLを入力",
@@ -510,6 +516,7 @@
 	"General Settings": "一般設定",
 	"Generate an image": "",
 	"Generate Image": "",
+	"Generate prompt pair": "",
 	"Generating search query": "検索クエリの生成",
 	"Get started": "",
 	"Get started with {{WEBUI_NAME}}": "",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "",
 	"Local Models": "ローカルモデル",
+	"Location access not allowed": "",
 	"Lost": "",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "OpenWebUI コミュニティによって作成",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "",
 	"Ollama Version": "Ollama バージョン",
 	"On": "オン",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "コマンド文字列には英数字とハイフンのみが許可されています。",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "エンジンの選択",
 	"Select Knowledge": "ナレッジベースの選択",
-	"Select model": "モデルを選択",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "一部のモデルは画像入力をサポートしていません",
 	"Semantic distance to query": "",
@@ -957,6 +965,7 @@
 	"Tags Generation": "",
 	"Tags Generation Prompt": "",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "",
+	"Talk to model": "",
 	"Tap to interrupt": "",
 	"Tasks": "",
 	"Tavily API Key": "",
@@ -1041,6 +1050,7 @@
 	"Top P": "トップ P",
 	"Transformers": "",
 	"Trouble accessing Ollama?": "Ollama へのアクセスに問題がありますか?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "TTSモデル",
 	"TTS Settings": "TTS 設定",
 	"TTS Voice": "TTSボイス",

文件差异内容过多而无法显示
+ 429 - 421
src/lib/i18n/locales/ka-GE/translation.json


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

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "작업 모델은 채팅 및 웹 검색 쿼리에 대한 제목 생성 등의 작업 수행 시 사용됩니다.",
 	"a user": "사용자",
 	"About": "정보",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "접근",
 	"Access Control": "접근 제어",
 	"Accessible to all users": "모든 사용자가 접근 가능",
@@ -93,7 +94,7 @@
 	"Artifacts": "아티팩트",
 	"Ask a question": "질문하기",
 	"Assistant": "어시스턴트",
-	"Attach file": "파일 첨부",
+	"Attach file from knowledge": "",
 	"Attention to detail": "세부 사항에 대한 주의",
 	"Attribute for Mail": "",
 	"Attribute for Username": "",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "불분명한 출처를 가진 함수를 설치하지마세요",
 	"Do not install tools from sources you do not fully trust.": "불분명한 출처를 가진 도구를 설치하지마세요",
 	"Document": "문서",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "문서 조사",
 	"Documents": "문서",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "외부와 어떠한 연결도 하지 않으며, 데이터는 로컬에서 호스팅되는 서버에 안전하게 유지됩니다.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "메시지 평가 활성화",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "",
 	"Enable New Sign Ups": "새 회원가입 활성화",
+	"Enable OneDrive": "",
 	"Enable Web Search": "웹 검색 활성화",
 	"Enabled": "활성화됨",
 	"Engine": "엔진",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "청크 오버랩 입력",
 	"Enter Chunk Size": "청크 크기 입력",
 	"Enter description": "설명 입력",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "Github Raw URL 입력",
@@ -510,6 +516,7 @@
 	"General Settings": "일반 설정",
 	"Generate an image": "",
 	"Generate Image": "이미지 생성",
+	"Generate prompt pair": "",
 	"Generating search query": "검색 쿼리 생성",
 	"Get started": "",
 	"Get started with {{WEBUI_NAME}}": "",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "",
 	"Local Models": "로컬 모델",
+	"Location access not allowed": "",
 	"Lost": "패배",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "OpenWebUI 커뮤니티에 의해 개발됨",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "",
 	"Ollama Version": "Ollama 버전",
 	"On": "켜기",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "영문자, 숫자 및 하이픈(-)만 허용됨",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "명령어 문자열에는 영문자, 숫자 및 하이픈(-)만 허용됩니다.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "가지고 있는 컬렉션만 수정 가능합니다, 새 지식 기반을 생성하여 문서를 수정 혹은 추가하십시오",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "엔진 선택",
 	"Select Knowledge": "지식 기반 선택",
-	"Select model": "모델 선택",
 	"Select only one model to call": "음성 기능을 위해서는 모델을 하나만 선택해야 합니다.",
 	"Selected model(s) do not support image inputs": "선택한 모델은 이미지 입력을 지원하지 않습니다.",
 	"Semantic distance to query": "쿼리까지 의미적 거리",
@@ -957,6 +965,7 @@
 	"Tags Generation": "태그 생성",
 	"Tags Generation Prompt": "태그 생성 프롬프트",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "",
+	"Talk to model": "",
 	"Tap to interrupt": "탭하여 중단",
 	"Tasks": "",
 	"Tavily API Key": "Tavily API 키",
@@ -1041,6 +1050,7 @@
 	"Top P": "Top P",
 	"Transformers": "",
 	"Trouble accessing Ollama?": "올라마(Ollama)에 접근하는 데 문제가 있나요?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "TTS 모델",
 	"TTS Settings": "TTS 설정",
 	"TTS Voice": "TTS 음성",

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

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "Užduočių modelis naudojamas pokalbių pavadinimų ir paieškos užklausų generavimui.",
 	"a user": "naudotojas",
 	"About": "Apie",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "",
 	"Access Control": "",
 	"Accessible to all users": "",
@@ -93,7 +94,7 @@
 	"Artifacts": "",
 	"Ask a question": "",
 	"Assistant": "",
-	"Attach file": "Pridėti failą",
+	"Attach file from knowledge": "",
 	"Attention to detail": "Dėmesys detalėms",
 	"Attribute for Mail": "",
 	"Attribute for Username": "",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "Neinstaliuokite funkcijų iš nepatikimų šaltinių",
 	"Do not install tools from sources you do not fully trust.": "Neinstaliuokite įrankių iš nepatikimų šaltinių",
 	"Document": "Dokumentas",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "Dokumentacija",
 	"Documents": "Dokumentai",
 	"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.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "",
 	"Enable New Sign Ups": "Aktyvuoti naujas registracijas",
+	"Enable OneDrive": "",
 	"Enable Web Search": "Leisti paiešką internete",
 	"Enabled": "Leisti",
 	"Engine": "Variklis",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "Įveskite blokų persidengimą",
 	"Enter Chunk Size": "Įveskite blokų dydį",
 	"Enter description": "",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "Įveskite GitHub Raw nuorodą",
@@ -510,6 +516,7 @@
 	"General Settings": "Bendri nustatymai",
 	"Generate an image": "",
 	"Generate Image": "Generuoti paveikslėlį",
+	"Generate prompt pair": "",
 	"Generating search query": "Generuoti paieškos užklausą",
 	"Get started": "",
 	"Get started with {{WEBUI_NAME}}": "",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "",
 	"Local Models": "Lokalūs modeliai",
+	"Location access not allowed": "",
 	"Lost": "",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "Sukurta OpenWebUI bendruomenės",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "",
 	"Ollama Version": "Ollama versija",
 	"On": "Aktyvuota",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "Leistinos tik raidės, skaičiai ir brūkšneliai.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "",
 	"Select Knowledge": "",
-	"Select model": "Pasirinkti modelį",
 	"Select only one model to call": "Pasirinkite vieną modelį",
 	"Selected model(s) do not support image inputs": "Pasirinkti modeliai nepalaiko vaizdinių užklausų",
 	"Semantic distance to query": "",
@@ -957,6 +965,7 @@
 	"Tags Generation": "",
 	"Tags Generation Prompt": "",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "",
+	"Talk to model": "",
 	"Tap to interrupt": "Paspauskite norėdami pertraukti",
 	"Tasks": "",
 	"Tavily API Key": "Tavily API raktas",
@@ -1041,6 +1050,7 @@
 	"Top P": "Top P",
 	"Transformers": "",
 	"Trouble accessing Ollama?": "Problemos prieinant prie Ollama?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "TTS modelis",
 	"TTS Settings": "TTS parametrai",
 	"TTS Voice": "TTS balsas",

+ 12 - 2
src/lib/i18n/locales/ms-MY/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "Model tugas digunakan semasa melaksanakan tugas seperti menjana tajuk untuk perbualan dan pertanyaan carian web.",
 	"a user": "seorang pengguna",
 	"About": "Mengenai",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "",
 	"Access Control": "",
 	"Accessible to all users": "",
@@ -93,7 +94,7 @@
 	"Artifacts": "",
 	"Ask a question": "",
 	"Assistant": "",
-	"Attach file": "Kepilkan Fail",
+	"Attach file from knowledge": "",
 	"Attention to detail": "Perincian",
 	"Attribute for Mail": "",
 	"Attribute for Username": "",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "Jangan pasang fungsi daripada sumber yang anda tidak percayai sepenuhnya.",
 	"Do not install tools from sources you do not fully trust.": "Jangan pasang alat daripada sumber yang anda tidak percaya sepenuhnya.",
 	"Document": "Dokumen",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "Dokumentasi",
 	"Documents": "Dokumen",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "tidak membuat sebarang sambungan luaran, dan data anda kekal selamat pada pelayan yang dihoskan ditempat anda",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "",
 	"Enable New Sign Ups": "Benarkan Pendaftaran Baharu",
+	"Enable OneDrive": "",
 	"Enable Web Search": "Benarkan Carian Web",
 	"Enabled": "Dibenarkan",
 	"Engine": "Enjin",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "Masukkan Tindihan 'Chunk'",
 	"Enter Chunk Size": "Masukkan Saiz 'Chunk'",
 	"Enter description": "",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "Masukkan URL 'Github Raw'",
@@ -510,6 +516,7 @@
 	"General Settings": "Tetapan Umum",
 	"Generate an image": "",
 	"Generate Image": "Jana Imej",
+	"Generate prompt pair": "",
 	"Generating search query": "Jana pertanyaan carian",
 	"Get started": "",
 	"Get started with {{WEBUI_NAME}}": "",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "",
 	"Local Models": "Model Tempatan",
+	"Location access not allowed": "",
 	"Lost": "",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "Dicipta oleh Komuniti OpenWebUI",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "",
 	"Ollama Version": "Versi Ollama",
 	"On": "Hidup",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "Hanya aksara alfanumerik dan sempang dibenarkan dalam rentetan arahan.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "",
 	"Select Knowledge": "",
-	"Select model": "Pilih model",
 	"Select only one model to call": "Pilih hanya satu model untuk dipanggil",
 	"Selected model(s) do not support image inputs": "Model dipilih tidak menyokong input imej",
 	"Semantic distance to query": "",
@@ -957,6 +965,7 @@
 	"Tags Generation": "",
 	"Tags Generation Prompt": "",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "",
+	"Talk to model": "",
 	"Tap to interrupt": "Sentuh untuk mengganggu",
 	"Tasks": "",
 	"Tavily API Key": "Kunci API Tavily",
@@ -1041,6 +1050,7 @@
 	"Top P": "'Top P'",
 	"Transformers": "",
 	"Trouble accessing Ollama?": "Masalah mengakses Ollama?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "Model TTS",
 	"TTS Settings": "Tetapan TTS",
 	"TTS Voice": "Suara TTS",

+ 12 - 2
src/lib/i18n/locales/nb-NO/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "En oppgavemodell brukes når du utfører oppgaver som å generere titler for samtaler eller utfører søkeforespørsler på nettet",
 	"a user": "en bruker",
 	"About": "Om",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "Tilgang",
 	"Access Control": "Tilgangskontroll",
 	"Accessible to all users": "Tilgjengelig for alle brukere",
@@ -93,7 +94,7 @@
 	"Artifacts": "Artifakter",
 	"Ask a question": "Still et spørsmål",
 	"Assistant": "Assistent",
-	"Attach file": "Legg ved fil",
+	"Attach file from knowledge": "",
 	"Attention to detail": "Fokus på detaljer",
 	"Attribute for Mail": "",
 	"Attribute for Username": "Attributt for brukernavn",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "Ikke installer funksjoner fra kilder du ikke stoler på.",
 	"Do not install tools from sources you do not fully trust.": "Ikke installer verktøy fra kilder du ikke stoler på.",
 	"Document": "Dokument",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "Dokumentasjon",
 	"Documents": "Dokumenter",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "ikke ingen tilkobling til eksterne tjenester. Dataene dine forblir sikkert på den lokale serveren.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "Aktivert vurdering av meldinger",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "Aktiver Mirostat-sampling for kontroll av perpleksitet. (Standard: 0, 0 = deaktivert, 1 = Mirostat, 2 = Mirostat 2.0)",
 	"Enable New Sign Ups": "Aktiver nye registreringer",
+	"Enable OneDrive": "",
 	"Enable Web Search": "Aktiver websøk",
 	"Enabled": "Aktivert",
 	"Engine": "Motor",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "Angi Chunk-overlapp",
 	"Enter Chunk Size": "Angi Chunk-størrelse",
 	"Enter description": "Angi beskrivelse",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "Angi Github Raw-URL",
@@ -510,6 +516,7 @@
 	"General Settings": "Generelle innstillinger",
 	"Generate an image": "",
 	"Generate Image": "Generer bilde",
+	"Generate prompt pair": "",
 	"Generating search query": "Genererer søkespørring",
 	"Get started": "Kom i gang",
 	"Get started with {{WEBUI_NAME}}": "Kom i gang med {{WEBUI_NAME}}",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "Lokal",
 	"Local Models": "Lokale modeller",
+	"Location access not allowed": "",
 	"Lost": "Tapt",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "Laget av OpenWebUI-fellesskapet",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "API-innstillinger for Ollama er oppdatert",
 	"Ollama Version": "Ollama-versjon",
 	"On": "Aktivert",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "Bare alfanumeriske tegn og bindestreker er tillatt",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "Bare alfanumeriske tegn og bindestreker er tillatt i kommandostrengen.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "Bare samlinger kan redigeres, eller lag en ny kunnskapsbase for å kunne redigere / legge til dokumenter.",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "Velg motor",
 	"Select Knowledge": "Velg kunnskap",
-	"Select model": "Velg modell",
 	"Select only one model to call": "Velg bare én modell som skal kalles",
 	"Selected model(s) do not support image inputs": "Valgte modell(er) støtter ikke bildeinndata",
 	"Semantic distance to query": "Semantisk distanse til spørring",
@@ -957,6 +965,7 @@
 	"Tags Generation": "",
 	"Tags Generation Prompt": "Ledetekst for genering av etikett",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "Tail free sampling brukes til å redusere innvirkningen av mindre sannsynlige tokens fra utdataene. En høyere verdi (f.eks. 2,0) vil redusere effekten mer, mens en verdi på 1,0 deaktiverer denne innstillingen. (standard: 1)",
+	"Talk to model": "",
 	"Tap to interrupt": "Trykk for å avbryte",
 	"Tasks": "",
 	"Tavily API Key": "API-nøkkel for Tavily",
@@ -1041,6 +1050,7 @@
 	"Top P": "Top P",
 	"Transformers": "Transformatorer",
 	"Trouble accessing Ollama?": "Problemer med å koble til Ollama?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "TTS-modell",
 	"TTS Settings": "TTS-innstillinger",
 	"TTS Voice": "TTS-stemme",

+ 12 - 2
src/lib/i18n/locales/nl-NL/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "Een taakmodel wordt gebruikt bij het uitvoeren van taken zoals het genereren van titels voor chats en zoekopdrachten op het internet",
 	"a user": "een gebruiker",
 	"About": "Over",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "Toegang",
 	"Access Control": "Toegangsbeheer",
 	"Accessible to all users": "Toegankelijk voor alle gebruikers",
@@ -93,7 +94,7 @@
 	"Artifacts": "Artefacten",
 	"Ask a question": "Stel een vraag",
 	"Assistant": "Assistent",
-	"Attach file": "Voeg een bestand toe",
+	"Attach file from knowledge": "",
 	"Attention to detail": "Attention to detail",
 	"Attribute for Mail": "",
 	"Attribute for Username": "Attribuut voor gebruikersnaam",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "Installeer geen functies vanuit bronnen die je niet volledig vertrouwt",
 	"Do not install tools from sources you do not fully trust.": "Installeer geen tools vanuit bronnen die je niet volledig vertrouwt.",
 	"Document": "Document",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "Documentatie",
 	"Documents": "Documenten",
 	"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.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "Schakel berichtbeoordeling in",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "Mirostat-sampling inschakelen voor het regelen van de perplexiteit. (Standaard: 0, 0 = uitgeschakeld, 1 = Mirostat, 2 = Mirostat 2.0)",
 	"Enable New Sign Ups": "Schakel nieuwe registraties in",
+	"Enable OneDrive": "",
 	"Enable Web Search": "Zoeken op het web inschakelen",
 	"Enabled": "Ingeschakeld",
 	"Engine": "Engine",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "Voeg Chunk Overlap toe",
 	"Enter Chunk Size": "Voeg Chunk Size toe",
 	"Enter description": "Voer beschrijving in",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "Voer de Github Raw-URL in",
@@ -510,6 +516,7 @@
 	"General Settings": "Algemene instellingen",
 	"Generate an image": "",
 	"Generate Image": "Genereer afbeelding",
+	"Generate prompt pair": "",
 	"Generating search query": "Zoekopdracht genereren",
 	"Get started": "Begin",
 	"Get started with {{WEBUI_NAME}}": "Begin met {{WEBUI_NAME}}",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "Lokaal",
 	"Local Models": "Lokale modellen",
+	"Location access not allowed": "",
 	"Lost": "Verloren",
 	"LTR": "LNR",
 	"Made by Open WebUI Community": "Gemaakt door OpenWebUI Community",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "Ollama API-instellingen bijgewerkt",
 	"Ollama Version": "Ollama Versie",
 	"On": "Aan",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "Alleen alfanumerieke tekens en koppeltekens zijn toegestaan",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "Alleen alfanumerieke karakters en streepjes zijn toegestaan in de commando string.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "Alleen verzamelinge kunnen gewijzigd worden, maak een nieuwe kennisbank aan om bestanden aan te passen/toe te voegen",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "Selecteer Engine",
 	"Select Knowledge": "Selecteer kennis",
-	"Select model": "Selecteer een model",
 	"Select only one model to call": "Selecteer maar één model om aan te roepen",
 	"Selected model(s) do not support image inputs": "Geselecteerde modellen ondersteunen geen beeldinvoer",
 	"Semantic distance to query": "Semantische afstand tot query",
@@ -957,6 +965,7 @@
 	"Tags Generation": "",
 	"Tags Generation Prompt": "Prompt voor taggeneratie",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "Tail free sampling wordt gebruikt om de impact van minder waarschijnlijke tokens uit de uitvoer te verminderen. Een hogere waarde (bv. 2,0) zal de impact meer verminderen, terwijl een waarde van 1,0 deze instelling uitschakelt. (standaard: 1)",
+	"Talk to model": "",
 	"Tap to interrupt": "Tik om te onderbreken",
 	"Tasks": "",
 	"Tavily API Key": "Tavily API-sleutel",
@@ -1041,6 +1050,7 @@
 	"Top P": "Top P",
 	"Transformers": "",
 	"Trouble accessing Ollama?": "Problemen met toegang tot Ollama?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "TTS Model",
 	"TTS Settings": "TTS instellingen",
 	"TTS Voice": "TTS Stem",

+ 12 - 2
src/lib/i18n/locales/pa-IN/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "ਚੈਟਾਂ ਅਤੇ ਵੈੱਬ ਖੋਜ ਪੁੱਛਗਿੱਛਾਂ ਵਾਸਤੇ ਸਿਰਲੇਖ ਤਿਆਰ ਕਰਨ ਵਰਗੇ ਕਾਰਜ ਾਂ ਨੂੰ ਕਰਦੇ ਸਮੇਂ ਇੱਕ ਕਾਰਜ ਮਾਡਲ ਦੀ ਵਰਤੋਂ ਕੀਤੀ ਜਾਂਦੀ ਹੈ",
 	"a user": "ਇੱਕ ਉਪਭੋਗਤਾ",
 	"About": "ਬਾਰੇ",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "",
 	"Access Control": "",
 	"Accessible to all users": "",
@@ -93,7 +94,7 @@
 	"Artifacts": "",
 	"Ask a question": "",
 	"Assistant": "",
-	"Attach file": "ਫਾਈਲ ਜੋੜੋ",
+	"Attach file from knowledge": "",
 	"Attention to detail": "ਵੇਰਵੇ 'ਤੇ ਧਿਆਨ",
 	"Attribute for Mail": "",
 	"Attribute for Username": "",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "",
 	"Do not install tools from sources you do not fully trust.": "",
 	"Document": "ਡਾਕੂਮੈਂਟ",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "",
 	"Documents": "ਡਾਕੂਮੈਂਟ",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "ਕੋਈ ਬਾਹਰੀ ਕਨੈਕਸ਼ਨ ਨਹੀਂ ਬਣਾਉਂਦਾ, ਅਤੇ ਤੁਹਾਡਾ ਡਾਟਾ ਤੁਹਾਡੇ ਸਥਾਨਕ ਸਰਵਰ 'ਤੇ ਸੁਰੱਖਿਅਤ ਰਹਿੰਦਾ ਹੈ।",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "",
 	"Enable New Sign Ups": "ਨਵੇਂ ਸਾਈਨ ਅਪ ਯੋਗ ਕਰੋ",
+	"Enable OneDrive": "",
 	"Enable Web Search": "ਵੈੱਬ ਖੋਜ ਨੂੰ ਸਮਰੱਥ ਕਰੋ",
 	"Enabled": "",
 	"Engine": "",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "ਚੰਕ ਓਵਰਲੈਪ ਦਰਜ ਕਰੋ",
 	"Enter Chunk Size": "ਚੰਕ ਆਕਾਰ ਦਰਜ ਕਰੋ",
 	"Enter description": "",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "Github ਕੱਚਾ URL ਦਾਖਲ ਕਰੋ",
@@ -510,6 +516,7 @@
 	"General Settings": "ਆਮ ਸੈਟਿੰਗਾਂ",
 	"Generate an image": "",
 	"Generate Image": "",
+	"Generate prompt pair": "",
 	"Generating search query": "ਖੋਜ ਪੁੱਛਗਿੱਛ ਤਿਆਰ ਕਰਨਾ",
 	"Get started": "",
 	"Get started with {{WEBUI_NAME}}": "",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "",
 	"Local Models": "",
+	"Location access not allowed": "",
 	"Lost": "",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "ਓਪਨਵੈਬਯੂਆਈ ਕਮਿਊਨਿਟੀ ਦੁਆਰਾ ਬਣਾਇਆ ਗਿਆ",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "",
 	"Ollama Version": "ਓਲਾਮਾ ਵਰਜਨ",
 	"On": "ਚਾਲੂ",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "ਕਮਾਂਡ ਸਤਰ ਵਿੱਚ ਸਿਰਫ਼ ਅਲਫ਼ਾਨਯੂਮੈਰਿਕ ਅੱਖਰ ਅਤੇ ਹਾਈਫਨ ਦੀ ਆਗਿਆ ਹੈ।",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "",
 	"Select Knowledge": "",
-	"Select model": "ਮਾਡਲ ਚੁਣੋ",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "ਚੁਣੇ ਗਏ ਮਾਡਲ(ਆਂ) ਚਿੱਤਰ ਇਨਪੁੱਟਾਂ ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦੇ",
 	"Semantic distance to query": "",
@@ -957,6 +965,7 @@
 	"Tags Generation": "",
 	"Tags Generation Prompt": "",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "",
+	"Talk to model": "",
 	"Tap to interrupt": "",
 	"Tasks": "",
 	"Tavily API Key": "",
@@ -1041,6 +1050,7 @@
 	"Top P": "ਸਿਖਰ P",
 	"Transformers": "",
 	"Trouble accessing Ollama?": "ਓਲਾਮਾ ਤੱਕ ਪਹੁੰਚਣ ਵਿੱਚ ਮੁਸ਼ਕਲ?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "",
 	"TTS Settings": "TTS ਸੈਟਿੰਗਾਂ",
 	"TTS Voice": "",

+ 132 - 122
src/lib/i18n/locales/pl-PL/translation.json

@@ -1,6 +1,6 @@
 {
 	"-1 for no limit, or a positive integer for a specific limit": "-1 oznacza brak limitu, lub dodatnia liczba całkowita dla konkretnego limitu",
-	"'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "s, m, h, d, w lub -1 dla braku wygaśnięcia.",
+	"'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' lub '-1' dla braku wygaśnięcia.",
 	"(e.g. `sh webui.sh --api --api-auth username_password`)": "(np. `sh webui.sh --api --api-auth username_password`)>",
 	"(e.g. `sh webui.sh --api`)": "(np. `sh webui.sh --api`)",
 	"(latest)": "(najnowszy)",
@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "Model zadań jest wykorzystywany podczas realizacji zadań, takich jak generowanie tytułów rozmów i zapytań wyszukiwania internetowego.",
 	"a user": "użytkownik",
 	"About": "O nas",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "Dostęp",
 	"Access Control": "Kontrola dostępu",
 	"Accessible to all users": "Dostępny dla wszystkich użytkowników",
@@ -21,28 +22,28 @@
 	"Accurate information": "Precyzyjna informacja",
 	"Actions": "Akcje",
 	"Activate": "Włącz",
-	"Activate this command by typing \"/{{COMMAND}}\" to chat input.": "Aktywuj ten rozkaz, wpisując \"/{{COMMAND}}\" do pola wprowadzania czatu.",
+	"Activate this command by typing \"/{{COMMAND}}\" to chat input.": "Aktywuj tę komendę, wpisując \"/{{COMMAND}}\" do pola wprowadzania czatu.",
 	"Active Users": "Aktywni użytkownicy",
 	"Add": "Dodaj",
 	"Add a model ID": "Dodaj identyfikator modelu",
 	"Add a short description about what this model does": "Dodaj krótki opis działania tego modelu",
 	"Add a tag": "Dodaj tag",
-	"Add Arena Model": "Dodaj model Arena",
-	"Add Connection": "Dodaj Połączenie",
+	"Add Arena Model": "Dodaj Model Arena",
+	"Add Connection": "Dodaj połączenie",
 	"Add Content": "Dodaj treść",
 	"Add content here": "Dodaj tutaj treść",
 	"Add custom prompt": "Dodaj niestandardowe polecenie",
 	"Add Files": "Dodaj pliki",
-	"Add Group": "Dodaj Grupę",
+	"Add Group": "Dodaj grupę",
 	"Add Memory": "Dodaj pamięć",
 	"Add Model": "Dodaj model",
 	"Add Reaction": "Dodaj reakcję",
-	"Add Tag": "Dodaj Tag",
+	"Add Tag": "Dodaj tag",
 	"Add Tags": "Dodaj tagi",
 	"Add text content": "Dodaj tekstową zawartość",
 	"Add User": "Dodaj użytkownika",
 	"Add User Group": "Dodaj grupę użytkowników",
-	"Adjusting these settings will apply changes universally to all users.": "Dostosowanie tych ustawień spowoduje wprowadzenie zmian powszechnie dla wszystkich użytkowników.",
+	"Adjusting these settings will apply changes universally to all users.": "Dostosowanie tych ustawień spowoduje wprowadzenie zmian dla wszystkich użytkowników.",
 	"admin": "administrator",
 	"Admin": "Administrator",
 	"Admin Panel": "Panel administracyjny",
@@ -52,7 +53,7 @@
 	"Advanced Params": "Zaawansowane ustawienia",
 	"All Documents": "Wszystkie dokumenty",
 	"All models deleted successfully": "Wszystkie modele zostały usunięte pomyślnie.",
-	"Allow Chat Controls": "Zezwól na kontrolki Chat",
+	"Allow Chat Controls": "Zezwól na dostęp do ustawień czatu",
 	"Allow Chat Delete": "Zezwól na usunięcie czatu",
 	"Allow Chat Deletion": "Zezwól na usuwanie czatu",
 	"Allow Chat Edit": "Zezwól na edycję czatu",
@@ -62,7 +63,7 @@
 	"Allow User Location": "Zezwól na lokalizację użytkownika",
 	"Allow Voice Interruption in Call": "Zezwól na przerwanie połączenia głosowego",
 	"Allowed Endpoints": "Dozwolone punkty końcowe",
-	"Already have an account?": "Czy już masz konto?",
+	"Already have an account?": "Czy masz już konto?",
 	"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "Alternatywa dla top_p, mająca na celu zapewnienie równowagi między jakością a różnorodnością. Parametr p reprezentuje minimalne prawdopodobieństwo, aby token był brany pod uwagę, względem prawdopodobieństwa najbardziej prawdopodobnego tokena. Na przykład, dla p=0,05 i najbardziej prawdopodobnym tokenem o prawdopodobieństwie 0,9, logity o wartości mniejszej niż 0,045 są wykluczane. (Domyślnie: 0,0)",
 	"Always": "Zawsze",
 	"Amazing": "Niesamowite",
@@ -77,8 +78,8 @@
 	"API Key created.": "Klucz API został utworzony.",
 	"API Key Endpoint Restrictions": "Ograniczenia punktu końcowego klucza API",
 	"API keys": "Klucze API",
-	"Application DN": "Aplikacja DN",
-	"Application DN Password": "Aplikacja hasło DN",
+	"Application DN": "Konto techniczne - Format DN",
+	"Application DN Password": "Hasło do konta technicznego",
 	"applies to all users with the \"user\" role": "dotyczy wszystkich użytkowników z rolą \"user\"",
 	"April": "Kwiecień",
 	"Archive": "Archiwum",
@@ -93,22 +94,22 @@
 	"Artifacts": "Artefakty",
 	"Ask a question": "Zadaj pytanie",
 	"Assistant": "Asystent",
-	"Attach file": "Dołącz plik",
+	"Attach file from knowledge": "",
 	"Attention to detail": "Dbałość o szczegóły",
 	"Attribute for Mail": "Atrybut dla poczty",
 	"Attribute for Username": "Atrybut dla nazwy użytkownika",
 	"Audio": "Dźwięk",
 	"August": "Sierpień",
-	"Authenticate": "Uwierzytelnianie",
+	"Authenticate": "Zaloguj się",
 	"Authentication": "Uwierzytelnianie",
 	"Auto-Copy Response to Clipboard": "Automatyczna kopiuj odpowiedz do schowka",
 	"Auto-playback response": "Automatyczna odpowiedź na powtórzenie",
 	"Autocomplete Generation": "Generowanie autouzupełniania",
-	"Autocomplete Generation Input Max Length": "Generowanie Autouzupełniania Wejścia Maksymalna Długość",
-	"Automatic1111": "Automatyczny1111",
-	"AUTOMATIC1111 Api Auth String": "Automatyczny ciąg uwierzytelniania API 1111",
-	"AUTOMATIC1111 Base URL": "Domyślny adres URL AUTOMATIC1111",
-	"AUTOMATIC1111 Base URL is required.": "Adres podstawowy AUTOMATIC1111 jest wymagany.",
+	"Autocomplete Generation Input Max Length": "Maksymalna długość wejścia dla generowania autouzupełniania",
+	"Automatic1111": "Automatic1111",
+	"AUTOMATIC1111 Api Auth String": "Automatic1111 - ciąg uwierzytelniania API",
+	"AUTOMATIC1111 Base URL": "Automatic1111 - Domyślny adres URL",
+	"AUTOMATIC1111 Base URL is required.": "Automatic1111 - Adres podstawowy jest wymagany.",
 	"Available list": "Dostępna lista",
 	"available!": "dostępny!",
 	"Awful": "Okropne",
@@ -131,7 +132,7 @@
 	"Calendar": "Kalendarz",
 	"Call": "Wywołanie",
 	"Call feature is not supported when using Web STT engine": "Funkcja wywołania nie jest obsługiwana podczas korzystania z silnika Web STT",
-	"Camera": "Aparat fotograficzny",
+	"Camera": "Kamera",
 	"Cancel": "Anuluj",
 	"Capabilities": "Możliwości",
 	"Capture": "Uchwycić",
@@ -142,15 +143,15 @@
 	"Character": "Znak",
 	"Character limit for autocomplete generation input": "Limit znaków dla wejścia generowanego automatycznie",
 	"Chart new frontiers": "Odkrywaj nowe horyzonty",
-	"Chat": "Rozmowa online",
+	"Chat": "Czat",
 	"Chat Background Image": "Obraz tła czatu",
 	"Chat Bubble UI": "Okno dialogowe czatu",
-	"Chat Controls": "Sterowanie czatem",
+	"Chat Controls": "Ustawienia czatu",
 	"Chat direction": "Kierunek rozmowy czatu",
 	"Chat Overview": "Przegląd czatu",
 	"Chat Permissions": "Uprawnienia do czatu",
 	"Chat Tags Auto-Generation": "Automatyczne generowanie tagów czatu",
-	"Chats": "Rozmowy",
+	"Chats": "Czaty",
 	"Check Again": "Sprawdź ponownie",
 	"Check for updates": "Sprawdź dostępność aktualizacji",
 	"Checking for updates...": "Sprawdzanie dostępności aktualizacji...",
@@ -162,7 +163,7 @@
 	"Citation": "Cytat",
 	"Clear memory": "Wyczyść pamięć",
 	"click here": "kliknij tutaj",
-	"Click here for filter guides.": "Kliknij tutaj, aby uzyskać przewodniki filtrów.",
+	"Click here for filter guides.": "Kliknij tutaj, aby uzyskać podpowiedź do filtrów.",
 	"Click here for help.": "Kliknij tutaj, aby uzyskać pomoc.",
 	"Click here to": "Kliknij tutaj, aby przejść do",
 	"Click here to download user import template file.": "Kliknij tutaj, aby pobrać szablon pliku importu użytkownika.",
@@ -173,10 +174,10 @@
 	"Click here to select a py file.": "Kliknij tutaj, aby wybrać plik py.",
 	"Click here to upload a workflow.json file.": "Kliknij tutaj, aby przesłać plik workflow.json.",
 	"click here.": "kliknij tutaj.",
-	"Click on the user role button to change a user's role.": "Kliknij przycisk roli użytkownika, aby zmienić rolę użytkownika.",
+	"Click on the user role button to change a user's role.": "Kliknij w nazwą roli użytkownika, aby zmienić rolę użytkownika.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Zezwolenie na zapis do schowka odmówione. Sprawdź ustawienia przeglądarki, aby przyznać wymagany dostęp.",
 	"Clone": "Sklonuj",
-	"Clone Chat": "Sklonuj Czat",
+	"Clone Chat": "Sklonuj czat",
 	"Clone of {{TITLE}}": "Klon {{TITLE}}",
 	"Close": "Zamknij",
 	"Code execution": "Wykonanie kodu",
@@ -185,7 +186,7 @@
 	"Code Execution Timeout": "",
 	"Code formatted successfully": "Kod został sformatowany pomyślnie.",
 	"Code Interpreter": "Interpreter kodu",
-	"Code Interpreter Engine": "Silnik Interpretatora Kodu",
+	"Code Interpreter Engine": "Silnik interpretatora kodu",
 	"Code Interpreter Prompt Template": "Szablon promtu interpretera kodu",
 	"Collection": "Zbiór",
 	"Color": "Kolor",
@@ -216,7 +217,7 @@
 	"Continue with LDAP": "Kontynuuj z LDAP",
 	"Control how message text is split for TTS requests. 'Punctuation' splits into sentences, 'paragraphs' splits into paragraphs, and 'none' keeps the message as a single string.": "Kontroluj sposób dzielenia tekstu wiadomości dla żądań TTS. 'Punctuation' dzieli na zdania, 'paragraphs' dzieli na akapity, a 'none' pozostawia wiadomość jako pojedynczy ciąg znaków.",
 	"Control the repetition of token sequences in the generated text. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 1.1) will be more lenient. At 1, it is disabled. (Default: 1.1)": "Kontroluj powtarzanie się sekwencji tokenów w wygenerowanym tekście. Wyższa wartość (np. 1,5) będzie silniej penalizować powtórzenia, podczas gdy niższa wartość (np. 1,1) będzie bardziej pobłażliwa. Na poziomie 1 jest wyłączona. (Domyślnie: 1,1)",
-	"Controls": "Sterowanie",
+	"Controls": "Ustawienia",
 	"Controls the balance between coherence and diversity of the output. A lower value will result in more focused and coherent text. (Default: 5.0)": "Kontroluje równowagę między spójnością a zróżnicowaniem wyników. Niższa wartość zaowocuje bardziej skoncentrowanym i spójnym tekstem. (Domyślnie: 5,0)",
 	"Copied": "Skopiowane",
 	"Copied shared chat URL to clipboard!": "Skopiowano udostępniony URL czatu do schowka!",
@@ -237,7 +238,7 @@
 	"Create Group": "Utwórz grupę",
 	"Create Knowledge": "Utwórz wiedzę",
 	"Create new key": "Utwórz nowy klucz",
-	"Create new secret key": "Utwórz nowy klucz tajny",
+	"Create new secret key": "Utwórz nowy secret key",
 	"Created at": "Stworzone o",
 	"Created At": "Utworzono o",
 	"Created by": "Stworzone przez",
@@ -252,14 +253,14 @@
 	"Default (Open AI)": "Domyślny (Open AI)",
 	"Default (SentenceTransformers)": "Domyślny (SentenceTransformers)",
 	"Default mode works with a wider range of models by calling tools once before execution. Native mode leverages the model’s built-in tool-calling capabilities, but requires the model to inherently support this feature.": "Tryb domyślny współpracuje z szerszym zakresem modeli, wywołując narzędzia raz przed wykonaniem. Tryb natywny wykorzystuje wbudowane możliwości wywoływania narzędzi przez model, ale wymaga, aby model wewnętrznie obsługiwał tę funkcję.",
-	"Default Model": "Model standardowy",
+	"Default Model": "Model domyślny",
 	"Default model updated": "Domyślny model został zaktualizowany",
 	"Default Models": "Domyślne modele",
 	"Default permissions": "Domyślne uprawnienia",
 	"Default permissions updated successfully": "Domyślne uprawnienia zaktualizowane pomyślnie",
 	"Default Prompt Suggestions": "Domyślne propozycje wpisów",
 	"Default to 389 or 636 if TLS is enabled": "Domyślnie użyj 389 lub 636, jeśli TLS jest włączony",
-	"Default to ALL": "Domyślnie wybierz wszystkie",
+	"Default to ALL": "Domyślne dla wszystkich",
 	"Default User Role": "Domyślna rola użytkownika",
 	"Delete": "Usuń",
 	"Delete a model": "Usuń model",
@@ -274,17 +275,17 @@
 	"Delete message?": "Usuń wiadomość?",
 	"Delete prompt?": "Czy chcesz usunąć podpowiedź?",
 	"delete this link": "usuń to połączenie",
-	"Delete tool?": "Usuń narzędzie?",
+	"Delete tool?": "Usunąć narzędzie?",
 	"Delete User": "Usuń użytkownika",
-	"Deleted {{deleteModelTag}}": "Usuwono {{deleteModelTag}}",
+	"Deleted {{deleteModelTag}}": "Usunieto {{deleteModelTag}}",
 	"Deleted {{name}}": "Usunięto użytkownika {{name}}",
 	"Deleted User": "Usunięty użytkownik",
 	"Describe your knowledge base and objectives": "Opisz swoją bazę wiedzy i cele",
 	"Description": "Opis",
 	"Didn't fully follow instructions": "Nie wykonał w pełni instrukcji",
-	"Direct Connections": "Połączenia Bezpośrednie",
+	"Direct Connections": "Połączenia bezpośrednie",
 	"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Połączenia bezpośrednie umożliwiają użytkownikom łączenie się z własnymi końcówkami API kompatybilnymi z OpenAI.",
-	"Direct Connections settings updated": "Ustawienia Połączeń Bezpośrednich zaktualizowane",
+	"Direct Connections settings updated": "Ustawienia połączeń bezpośrednich zaktualizowane",
 	"Disabled": "Wyłączony",
 	"Discover a function": "Odkryj funkcję",
 	"Discover a model": "Odkryj model",
@@ -297,7 +298,7 @@
 	"Discover, download, and explore custom tools": "Odkryj, pobierz i eksploruj niestandardowe narzędzia",
 	"Discover, download, and explore model presets": "Odkryj, pobierz i badaj ustawienia modeli",
 	"Dismissible": "Możliwe do odrzucenia",
-	"Display": "Wyświetlacz",
+	"Display": "Wyświetl",
 	"Display Emoji in Call": "Wyświetl emoji w połączeniu",
 	"Display the username instead of You in the Chat": "Wyświetl nazwę użytkownika zamiast 'You' w czacie.",
 	"Displays citations in the response": "Wyświetla cytowania w odpowiedzi",
@@ -305,6 +306,8 @@
 	"Do not install functions from sources you do not fully trust.": "Nie instaluj funkcji ze źródeł, którym nie ufasz w pełni.",
 	"Do not install tools from sources you do not fully trust.": "Nie instaluj narzędzi ze źródeł, którym nie ufasz w pełni.",
 	"Document": "Dokument",
+	"Document Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "Dokumentacja",
 	"Documents": "Dokumenty",
 	"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.",
@@ -324,8 +327,8 @@
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "np. '30s', '10m'. Poprawne jednostki czasu to: 's' (sekunda), 'm' (minuta), 'h' (godzina).",
 	"e.g. 60": "",
 	"e.g. A filter to remove profanity from text": "np. Filtr do usuwania wulgaryzmów z tekstu",
-	"e.g. My Filter": "np. Mój Filtr",
-	"e.g. My Tools": "np. Moje Narzędzia",
+	"e.g. My Filter": "np. Mój filtr",
+	"e.g. My Tools": "np. Moje narzędzia",
 	"e.g. my_filter": "np. moj_filtr",
 	"e.g. my_tools": "np. moje_narzędzia",
 	"e.g. Tools for performing various operations": "np. Narzędzia do wykonywania różnych operacji",
@@ -336,7 +339,7 @@
 	"Edit Default Permissions": "Edytuj domyślne uprawnienia",
 	"Edit Memory": "Edytuj pamięć",
 	"Edit User": "Edytuj profil użytkownika",
-	"Edit User Group": "Edytuj Grupa Użytkowników",
+	"Edit User Group": "Edytuj grupa użytkowników",
 	"ElevenLabs": "ElevenLabs",
 	"Email": "Email",
 	"Embark on adventures": "Wyruszaj na przygody",
@@ -346,7 +349,7 @@
 	"Embedding model set to \"{{embedding_model}}\"": "Model osadzania ustawiony na '{{embedding_model}}'",
 	"Enable API Key": "Włącz klucz API",
 	"Enable autocomplete generation for chat messages": "Włącz generowanie autouzupełniania dla wiadomości czatu",
-	"Enable Code Interpreter": "Włącz Interpreter Kodu",
+	"Enable Code Interpreter": "Włącz interpreter kodu",
 	"Enable Community Sharing": "Włączanie udostępniania społecznościowego",
 	"Enable Google Drive": "Włącz Google Drive",
 	"Enable Memory Locking (mlock) to prevent model data from being swapped out of RAM. This option locks the model's working set of pages into RAM, ensuring that they will not be swapped out to disk. This can help maintain performance by avoiding page faults and ensuring fast data access.": "Włącz blokowanie pamięci (mlock), aby zapobiec swappingowi danych modelu z RAM. Ta opcja blokuje zbiór stron roboczych modelu w RAM, co gwarantuje, że nie będą one wymieniane na dysk. Może to pomóc w utrzymaniu wydajności poprzez unikanie błędów strony i zapewnienie szybkiego dostępu do danych.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "Włącz ocenianie wiadomości",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "Włącz próbkowanie Mirostat w celu kontrolowania perplexity. (Domyślnie: 0, 0 = Wyłączone, 1 = Mirostat, 2 = Mirostat 2.0)",
 	"Enable New Sign Ups": "Włącz nowe rejestracje",
+	"Enable OneDrive": "",
 	"Enable Web Search": "Włączanie wyszukiwania internetowego",
 	"Enabled": "Włączone",
 	"Engine": "Silnik",
@@ -361,8 +365,8 @@
 	"Enter {{role}} message here": "Wprowadź komunikat dla {{role}} tutaj",
 	"Enter a detail about yourself for your LLMs to recall": "Podaj informacje o sobie, aby LLMs mogły je przypomnieć.",
 	"Enter api auth string (e.g. username:password)": "Wprowadź ciąg uwierzytelniania API (np. nazwa użytkownika:hasło)",
-	"Enter Application DN": "Wprowadź Aplikację DN",
-	"Enter Application DN Password": "Wprowadź hasło aplikacji DN",
+	"Enter Application DN": "Wprowadź nazwę konta technicznego - Format DN",
+	"Enter Application DN Password": "Wprowadź hasło do konta technicznego",
 	"Enter Bing Search V7 Endpoint": "Wprowadź endpoint wyszukiwania Bing V7",
 	"Enter Bing Search V7 Subscription Key": "Wprowadź klucz subskrypcji Bing Search V7",
 	"Enter Bocha Search API Key": "Wprowadź klucz API Bocha Search",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "Wprowadź nakładanie się bloków",
 	"Enter Chunk Size": "Wprowadź wielkość bloku",
 	"Enter description": "Wprowadź opis",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "Wprowadź domeny oddzielone przecinkami (np. example.com, site.org)",
 	"Enter Exa API Key": "Wprowadź klucz API Exa",
 	"Enter Github Raw URL": "Wprowadź surowy adres URL usługi GitHub",
@@ -390,13 +396,13 @@
 	"Enter Number of Steps (e.g. 50)": "Podaj liczbę kroków (np. 50)",
 	"Enter proxy URL (e.g. https://user:password@host:port)": "Podaj adres URL proxy (np. https://user:password@host:port)",
 	"Enter reasoning effort": "Podaj powód wysiłku",
-	"Enter Sampler (e.g. Euler a)": "Wprowadź Sampler (np. Euler a)",
-	"Enter Scheduler (e.g. Karras)": "Wprowadź Harmonogram (np. Karras)",
+	"Enter Sampler (e.g. Euler a)": "Wprowadź sampler (np. Euler a)",
+	"Enter Scheduler (e.g. Karras)": "Wprowadź harmonogram (np. Karras)",
 	"Enter Score": "Wprowadź wynik",
 	"Enter SearchApi API Key": "Wprowadź klucz API SearchApi",
 	"Enter SearchApi Engine": "Wprowadź zapytanie do silnika wyszukiwania SearchApi",
 	"Enter Searxng Query URL": "Wprowadź adres URL zapytania wyszukiwania Searxng",
-	"Enter Seed": "Wprowadź Nasiono",
+	"Enter Seed": "Wprowadź Seed",
 	"Enter SerpApi API Key": "Wprowadź klucz API SerpApi",
 	"Enter SerpApi Engine": "Wprowadź silnik SerpApi",
 	"Enter Serper API Key": "Wprowadź klucz API Serper",
@@ -431,7 +437,7 @@
 	"Exa API Key": "Klucz API Exa",
 	"Example: (&(objectClass=inetOrgPerson)(uid=%s))": "Przykład: (&(objectClass=inetOrgPerson)(uid=%s))",
 	"Example: ALL": "Przykład: ALL",
-	"Example: mail": "Przykład: poczta e-mail",
+	"Example: mail": "Przykład: mail",
 	"Example: ou=users,dc=foo,dc=example": "Przykład: ou=users,dc=foo,dc=example",
 	"Example: sAMAccountName or uid or userPrincipalName": "Przykład: sAMAccountName lub uid lub userPrincipalName",
 	"Exclude": "Wykluczyć",
@@ -449,8 +455,8 @@
 	"Export Presets": "Wyeksportuj ustawienia domyślne",
 	"Export Prompts": "Eksportuj prompty",
 	"Export to CSV": "Eksport do CSV",
-	"Export Tools": "Narzędzia Eksportu",
-	"External Models": "Modele zewnętrzne",
+	"Export Tools": "Eksportuj narzędzia",
+	"External Models": "Zewnętrzne modele",
 	"Failed to add file.": "Nie udało się dodać pliku.",
 	"Failed to create API Key.": "Nie udało się wygenerować klucza API.",
 	"Failed to fetch models": "Nie udało się pobrać modeli",
@@ -461,7 +467,7 @@
 	"Features": "Funkcje",
 	"Features Permissions": "Uprawnienia do funkcji",
 	"February": "Luty",
-	"Feedback History": "Historia powiadomień",
+	"Feedback History": "Historia ocen",
 	"Feedbacks": "Oceny",
 	"Feel free to add specific details": "Nie krępuj się dodawać szczegółów",
 	"File": "Plik",
@@ -510,6 +516,7 @@
 	"General Settings": "Ustawienia ogólne",
 	"Generate an image": "Wygeneruj obraz",
 	"Generate Image": "Wygeneruj obraz",
+	"Generate prompt pair": "",
 	"Generating search query": "Tworzenie zapytania wyszukiwania",
 	"Get started": "Rozpocznij",
 	"Get started with {{WEBUI_NAME}}": "Rozpocznij pracę z {{WEBUI_NAME}}",
@@ -521,10 +528,10 @@
 	"Group created successfully": "Grupa utworzona pomyślnie",
 	"Group deleted successfully": "Grupa została usunięta pomyślnie",
 	"Group Description": "Opis grupy",
-	"Group Name": "Nazwa Grupy",
+	"Group Name": "Nazwa grupy",
 	"Group updated successfully": "Grupa zaktualizowana pomyślnie",
 	"Groups": "Grupy",
-	"Haptic Feedback": "Sprzężenie zwrotne dotykowe",
+	"Haptic Feedback": "Haptyczne sprzężenie zwrotne",
 	"has no conversations.": "nie zawiera rozmów.",
 	"Hello, {{name}}": "Witaj, {{name}}",
 	"Help": "Pomoc",
@@ -533,8 +540,8 @@
 	"Hex Color - Leave empty for default color": "Kolor heksadecymalny - pozostaw puste dla domyślnego koloru",
 	"Hide": "Ukryj",
 	"Home": "Dom",
-	"Host": "Gospodarz",
-	"How can I help you today?": "Jak mogę Ci służyć dzisiaj?",
+	"Host": "Serwer",
+	"How can I help you today?": "Jak mogę Ci dzisiaj pomóc?",
 	"How would you rate this response?": "Jak oceniłbyś tę odpowiedź?",
 	"Hybrid Search": "Wyszukiwanie 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.": "Potwierdzam, że przeczytałem i rozumiem konsekwencje mojego działania. Jestem świadomy ryzyka związanego z wykonywaniem kodu o nieznanym pochodzeniu i zweryfikowałem wiarygodność źródła.",
@@ -543,7 +550,7 @@
 	"Image": "Obraz",
 	"Image Compression": "Kompresja obrazu",
 	"Image Generation": "Generowanie obrazów",
-	"Image Generation (Experimental)": "Generowanie obrazu (doświadczalne)",
+	"Image Generation (Experimental)": "Generowanie obrazu (eksperymentalne)",
 	"Image Generation Engine": "Silnik generowania obrazów",
 	"Image Max Compression Size": "Maksymalny rozmiar kompresji obrazu",
 	"Image Prompt Generation": "Generowanie podpowiedzi obrazu",
@@ -556,7 +563,7 @@
 	"Import Models": "Importowanie modeli",
 	"Import Presets": "Importuj ustawienia",
 	"Import Prompts": "Importuj prompty",
-	"Import Tools": "Import Narzędzi",
+	"Import Tools": "Import narzędzi",
 	"Include": "Włączyć",
 	"Include `--api-auth` flag when running stable-diffusion-webui": "Użyj flagi `--api-auth` podczas uruchamiania stable-diffusion-webui",
 	"Include `--api` flag when running stable-diffusion-webui": "Użyj flagi `--api` podczas uruchamiania stable-diffusion-webui.",
@@ -568,7 +575,7 @@
 	"Interface": "Interfejs",
 	"Invalid file format.": "Nieprawidłowy format pliku.",
 	"Invalid Tag": "Nieprawidłowy tag",
-	"is typing...": "Czy pisanie...",
+	"is typing...": "Pisanie...",
 	"January": "Styczeń",
 	"Jina API Key": "Klucz API Jiny",
 	"join our Discord for help.": "Dołącz do naszego Discorda, aby uzyskać pomoc.",
@@ -592,8 +599,8 @@
 	"Knowledge updated successfully": "Wiedza zaktualizowana pomyślnie",
 	"Kokoro.js (Browser)": "Kokoro.js (Przeglądarka)",
 	"Kokoro.js Dtype": "Kokoro.js Dtype",
-	"Label": "Etykieta",
-	"Landing Page Mode": "Tryb strony lądowania",
+	"Label": "Nazwa serwera",
+	"Landing Page Mode": "Tryb strony głownej",
 	"Language": "Język",
 	"Last Active": "Ostatnio aktywny",
 	"Last Modified": "Ostatnia modyfikacja",
@@ -615,21 +622,22 @@
 	"Loading Kokoro.js...": "Wczytywanie Kokoro.js...",
 	"Local": "Lokalny",
 	"Local Models": "Modele lokalne",
-	"Lost": "Zagubiony",
+	"Location access not allowed": "",
+	"Lost": "Przegrał",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "Opracowane przez społeczność Open WebUI",
 	"Make sure to enclose them with": "Upewnij się, że są one zawarte w",
 	"Make sure to export a workflow.json file as API format from ComfyUI.": "Upewnij się, że wyeksportowałeś plik workflow.json w formacie API z ComfyUI.",
 	"Manage": "Zarządzaj",
-	"Manage Arena Models": "Zarządzaj modelami Areny",
+	"Manage Arena Models": "Zarządzaj modelami areny",
 	"Manage Direct Connections": "Zarządzaj bezpośrednimi połączeniami",
 	"Manage Models": "Zarządzaj modelami",
 	"Manage Ollama": "Zarządzaj Ollamą",
 	"Manage Ollama API Connections": "Zarządzaj połączeniami z API Ollama",
 	"Manage OpenAI API Connections": "Zarządzaj połączeniami z API OpenAI",
-	"Manage Pipelines": "Zarządzanie potokami",
+	"Manage Pipelines": "Zarządzanie przepływem",
 	"March": "Marzec",
-	"Max Tokens (num_predict)": "Maksymalna liczba żetonów (num_predict)",
+	"Max Tokens (num_predict)": "Maksymalna liczba tokenów (num_predict)",
 	"Max Upload Count": "Maksymalna liczba przesyłanych plików",
 	"Max Upload Size": "Maksymalny rozmiar przesyłanego pliku",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maksymalnie 3 modele można pobierać jednocześnie. Proszę spróbować ponownie później.",
@@ -640,7 +648,7 @@
 	"Memory cleared successfully": "Pamięć oczyszczona pomyślnie",
 	"Memory deleted successfully": "Pamięć została usunięta pomyślnie",
 	"Memory updated successfully": "Pamięć zaktualizowana pomyślnie",
-	"Merge Responses": " scalaj odpowiedzi ",
+	"Merge Responses": "Scalaj odpowiedzi ",
 	"Message rating should be enabled to use this feature": "Ocena wiadomości powinna być włączona, aby korzystać z tej funkcji.",
 	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Wiadomości wysyłane po utworzeniu linku nie będą udostępniane. Użytkownicy z adresem URL będą mogli wyświetlić udostępnioną rozmowę.",
 	"Min P": "Min P",
@@ -660,7 +668,7 @@
 	"Model Filtering": "Filtracja modeli",
 	"Model ID": "Identyfikator modelu",
 	"Model IDs": "Identyfikatory modeli",
-	"Model Name": "Nazwa Modelu",
+	"Model Name": "Nazwa modelu",
 	"Model not selected": "Model nie został wybrany",
 	"Model Params": "Parametry modelu",
 	"Model Permissions": "Uprawnienia modelu",
@@ -692,7 +700,7 @@
 	"No model IDs": "Brak identyfikatorów modeli",
 	"No models found": "Nie znaleziono modeli",
 	"No models selected": "Brak wybranych modeli",
-	"No results found": "Brak wyników znalezionych",
+	"No results found": "Brak wyników",
 	"No search query generated": "Nie wygenerowano żadnego zapytania wyszukiwania",
 	"No source available": "Źródło nie jest dostępne.",
 	"No users were found.": "Nie znaleziono użytkowników.",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "Ustawienia API Ollama zostały zaktualizowane",
 	"Ollama Version": "Wersja Ollama",
 	"On": "Włączony",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "Dozwolone są tylko znaki alfanumeryczne i myślniki",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "W komendzie dozwolone są wyłącznie znaki alfanumeryczne i myślniki.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "Tylko kolekcje można edytować, utwórz nową bazę wiedzy, aby edytować/dodawać dokumenty.",
@@ -731,7 +740,7 @@
 	"Open new chat": "Otwórz nową rozmowę",
 	"Open WebUI uses faster-whisper internally.": "Open WebUI korzysta wewnętrznie z szybszego faster-whisper.",
 	"Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Otwarta WebUI wykorzystuje SpeechT5 i wbudowane zbiory danych mówcy CMU Arctic.",
-	"Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Otwarta wersja WebUI (v{{OPEN_WEBUI_VERSION}}) jest niższa niż wymagana wersja (v{{REQUIRED_VERSION}})",
+	"Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Wersja Open WebUI (v{{OPEN_WEBUI_VERSION}}) jest niższa niż wymagana wersja (v{{REQUIRED_VERSION}})",
 	"OpenAI": "OpenAI",
 	"OpenAI API": "Interfejs API OpenAI",
 	"OpenAI API Config": "Konfiguracja interfejsu API OpenAI",
@@ -749,20 +758,20 @@
 	"Paste Large Text as File": "Wklej duży tekst jako plik",
 	"PDF document (.pdf)": "Dokument PDF (.pdf)",
 	"PDF Extract Images (OCR)": "PDF Ekstrahuj obrazy (OCR)",
-	"pending": "w trakcie oczekiwania",
+	"pending": "oczekiwanie",
 	"Permission denied when accessing media devices": "Odmowa dostępu podczas uzyskiwania dostępu do urządzeń multimedialnych",
 	"Permission denied when accessing microphone": "Odmowa dostępu podczas uzyskiwania dostępu do mikrofonu",
 	"Permission denied when accessing microphone: {{error}}": "Odmowa dostępu do mikrofonu: {{error}}",
 	"Permissions": "Uprawnienia",
 	"Personalization": "Personalizacja",
-	"Pin": "Szpilka",
+	"Pin": "Przypnij",
 	"Pinned": "Przypięty",
 	"Pioneer insights": "Pionierskie spostrzeżenia",
-	"Pipeline deleted successfully": "Rurociąg usunięty pomyślnie",
-	"Pipeline downloaded successfully": "Rurociąg pobrany pomyślnie",
-	"Pipelines": "Rurociągi",
-	"Pipelines Not Detected": "Niewykryte potoki",
-	"Pipelines Valves": "Rurociągi i Zawory",
+	"Pipeline deleted successfully": "Przepływ usunięty pomyślnie",
+	"Pipeline downloaded successfully": "Przepływ pobrany pomyślnie",
+	"Pipelines": "Przepływy",
+	"Pipelines Not Detected": "Przepływ nie wykryty",
+	"Pipelines Valves": "Przepływy i Zawory",
 	"Plain text (.txt)": "Zwykły tekst (.txt)",
 	"Playground": "Plac zabaw",
 	"Please carefully review the following warnings:": "Proszę uważnie przejrzeć poniższe ostrzeżenia:",
@@ -778,24 +787,24 @@
 	"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "ID prefiksu jest używane do unikania konfliktów z innymi połączeniami poprzez dodanie prefiksu do ID modelu - pozostaw puste, aby wyłączyć",
 	"Presence Penalty": "Kara za obecność",
 	"Previous 30 days": "Ostatnie 30 dni",
-	"Previous 7 days": "Poprzednie 7 dni",
+	"Previous 7 days": "Ostatnie 7 dni",
 	"Profile Image": "Zdjęcie profilowe",
-	"Prompt": "Wprowadź odpowiedź: ",
+	"Prompt": "Wprowadź podpowiedź: ",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Prompt (np. podaj ciekawostkę o Imperium Rzymskim)",
-	"Prompt Content": "Treść prompty",
-	"Prompt created successfully": "Prompt został utworzony pomyślnie",
+	"Prompt Content": "Treść podpowiedzi",
+	"Prompt created successfully": "Podpowiedź została utworzona pomyślnie",
 	"Prompt suggestions": "Sugestie podpowiedzi",
-	"Prompt updated successfully": "Prompt został zaktualizowany pomyślnie.",
-	"Prompts": "Prompty",
-	"Prompts Access": "Prompty Dostęp",
-	"Proxy URL": "Adres URL pośredniczący",
+	"Prompt updated successfully": "Podpowiedź została zaktualizowana pomyślnie.",
+	"Prompts": "Podpowiedzi",
+	"Prompts Access": "Dostęp do podpowiedzi",
+	"Proxy URL": "Adres URL proxy",
 	"Pull \"{{searchValue}}\" from Ollama.com": "Pobierz \"{{searchValue}}\" z Ollama.com",
 	"Pull a model from Ollama.com": "Pobierz model z Ollama.com",
-	"Query Generation Prompt": "Prompt do generowania zapytań",
+	"Query Generation Prompt": "Podpowiedź do generowania zapytań",
 	"Query Params": "Parametry zapytania",
 	"RAG Template": "Szablon RAG",
 	"Rating": "Ocena",
-	"Re-rank models by topic similarity": "Przeankrować modele według podobieństwa tematycznego",
+	"Re-rank models by topic similarity": "Ponowny ranking modeli według podobieństwa tematycznego",
 	"Read": "Czytaj",
 	"Read Aloud": "Czytaj na głos",
 	"Reasoning Effort": "Wysiłek rozumowania",
@@ -805,9 +814,9 @@
 	"Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Odnosić się do siebie jako \"Użytkownik\" (np. \"Użytkownik uczy się hiszpańskiego\")",
 	"References from": "Odniesienia do",
 	"Refused when it shouldn't have": "Odmówił, gdy nie powinien",
-	"Regenerate": "Odtwórz",
-	"Release Notes": "Notatki wydania",
-	"Relevance": "Znaczenie",
+	"Regenerate": "Wygeneruj ponownie",
+	"Release Notes": "Notatki do wydania",
+	"Relevance": "Trafność",
 	"Remove": "Usuń",
 	"Remove Model": "Usuń model",
 	"Rename": "Zmień nazwę",
@@ -817,8 +826,8 @@
 	"Reply in Thread": "Odpowiedz w wątku",
 	"Request Mode": "Tryb żądania",
 	"Reranking Model": "Poprawa rankingu modelu",
-	"Reranking model disabled": "Model ponownego rankingu wyłączony",
-	"Reranking model set to \"{{reranking_model}}\"": "Model rerankingu ustawiony na \"{{reranking_model}}\".",
+	"Reranking model disabled": "Ponowny ranking modeli wyłączony",
+	"Reranking model set to \"{{reranking_model}}\"": "Ponowny ranking modeli ustawiony na \"{{reranking_model}}\".",
 	"Reset": "Resetuj",
 	"Reset All Models": "Resetuj wszystkie modele",
 	"Reset Upload Directory": "Resetuj katalog pobierania",
@@ -827,33 +836,33 @@
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Powiadomienia o odpowiedziach nie mogą zostać aktywowane, ponieważ uprawnienia strony zostały odrzucone. Proszę odwiedzić ustawienia przeglądarki, aby przyznać wymagany dostęp.",
 	"Response splitting": "Rozdzielanie odpowiedzi",
 	"Result": "Wynik",
-	"Retrieval Query Generation": "Generowanie Zapytań Pobierania",
-	"Rich Text Input for Chat": "Pole do wprowadzania tekstu formatowanego dla czatu",
+	"Retrieval Query Generation": "Generowanie zapytań pobierania",
+	"Rich Text Input for Chat": "Pole do wprowadzania tekstu sformatowanego dla czatu",
 	"RK": "RK",
 	"Role": "Rola",
 	"Rosé Pine": "Różana Sosna",
 	"Rosé Pine Dawn": "Różany Poranek Pine Dawn",
 	"RTL": "RTL",
-	"Run": "Uruchom",
-	"Running": "Bieganie",
+	"Run": "Uruchom",
+	"Running": "Uruchomiono",
 	"Save": "Zapisz",
 	"Save & Create": "Zapisz i stwórz",
 	"Save & Update": "Zapisz i odśwież",
 	"Save As Copy": "Zapisz jako kopia",
-	"Save Tag": "Zapisz Tag",
+	"Save Tag": "Zapisz tag",
 	"Saved": "Zapisano",
 	"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Zapisywanie dzienników czatu bezpośrednio w pamięci przeglądarki nie jest już obsługiwane. Prosimy o pobranie i usunięcie dzienników czatu, klikając przycisk poniżej. Nie przejmuj się, możesz łatwo ponownie zaimportować dzienniki czatu do backendu przez",
 	"Scroll to bottom when switching between branches": "Przewiń do dołu podczas przełączania gałęzi",
 	"Search": "Szukaj",
 	"Search a model": "Wyszukaj model",
-	"Search Base": "Baza wyszukiwania",
+	"Search Base": "Użytkownicy - Baza wyszukiwania",
 	"Search Chats": "Przeszukaj czaty",
 	"Search Collection": "Przeszukaj kolekcję",
 	"Search Filters": "Filtry wyszukiwania",
 	"search for tags": "wyszukiwanie tagów",
 	"Search Functions": "Funkcje wyszukiwania",
 	"Search Knowledge": "Wyszukaj wiedzę",
-	"Search Models": "Modele wyszukiwania",
+	"Search Models": "Wyszukiwanie modeli",
 	"Search options": "Opcje wyszukiwania",
 	"Search Prompts": "Prompty wyszukiwania",
 	"Search Result Count": "Liczba wyników wyszukiwania",
@@ -867,20 +876,19 @@
 	"Searxng Query URL": "Adres URL zapytania Searxng",
 	"See readme.md for instructions": "Sprawdź readme.md dla instrukcji",
 	"See what's new": "Sprawdź nowości",
-	"Seed": "Nasiono",
+	"Seed": "Seed",
 	"Select a base model": "Wybór modelu bazowego",
 	"Select a engine": "Wybierz silnik",
 	"Select a function": "Wybierz funkcję",
 	"Select a group": "Wybierz grupę",
 	"Select a model": "Wybierz model",
 	"Select a pipeline": "Wybierz potok",
-	"Select a pipeline url": "Wybierz adres URL potoku",
+	"Select a pipeline url": "Wybierz adres URL przepływu",
 	"Select a tool": "Wybierz narzędzie",
 	"Select an auth method": "Wybierz metodę uwierzytelniania",
 	"Select an Ollama instance": "Wybierz instancję Ollama",
 	"Select Engine": "Wybierz silnik",
-	"Select Knowledge": "Wybierz Wiedzę",
-	"Select model": "Wybierz model",
+	"Select Knowledge": "Wybierz wiedzę",
 	"Select only one model to call": "Wybierz tylko jeden model do wywołania",
 	"Selected model(s) do not support image inputs": "Wybrane modele nie obsługują danych wejściowych w formie obrazu",
 	"Semantic distance to query": "Odległość semantyczna od zapytania",
@@ -895,15 +903,15 @@
 	"Serply API Key": "Klucz API Serply",
 	"Serpstack API Key": "Klucz API Serpstack",
 	"Server connection verified": "Połączenie z serwerem zostało zweryfikowane",
-	"Set as default": "Ustaw jako domyślne",
+	"Set as default": "Ustaw jako domyślny",
 	"Set CFG Scale": "Ustaw skalę CFG",
 	"Set Default Model": "Ustaw model domyślny",
 	"Set embedding model": "Ustawianie modelu osadzania",
 	"Set embedding model (e.g. {{model}})": "Skonfiguruj model osadzania (np. {{model}})",
 	"Set Image Size": "Ustaw rozmiar obrazu",
 	"Set reranking model (e.g. {{model}})": "Skonfiguruj model ponownego rankingu (np. {{model}})",
-	"Set Sampler": "Próbnik Samplera",
-	"Set Scheduler": "Ustawiacz Harmonogramu",
+	"Set Sampler": "Próbnik samplera",
+	"Set Scheduler": "Ustawiacz harmonogramu",
 	"Set Steps": "Ustaw kroki",
 	"Set Task Model": "Konfiguracja modelu zadań",
 	"Set the number of layers, which will be off-loaded to GPU. Increasing this value can significantly improve performance for models that are optimized for GPU acceleration but may also consume more power and GPU resources.": "Ustaw liczbę warstw, które zostaną przeniesione na GPU. Zwiększenie tej wartości może znacząco poprawić wydajność dla modeli optymalizowanych pod kątem akceleracji GPU, ale także może zużywać więcej energii i zasobów GPU.",
@@ -923,7 +931,7 @@
 	"Share to Open WebUI Community": "Udostępnij w społeczności OpenWebUI",
 	"Show": "Wyświetl",
 	"Show \"What's New\" modal on login": "Wyświetl okno dialogowe \"What's New\" podczas logowania",
-	"Show Admin Details in Account Pending Overlay": "Wyświetl szczegóły administratora w okienku podręcznym konta",
+	"Show Admin Details in Account Pending Overlay": "Wyświetl szczegóły administratora w okienu informacyjnym o potrzebie zatwierdzenia przez administratora konta użytkownika",
 	"Show shortcuts": "Wyświetl skróty",
 	"Show your support!": "Wyraź swoje poparcie!",
 	"Showcased creativity": "Prezentacja kreatywności",
@@ -941,7 +949,7 @@
 	"Speech-to-Text Engine": "Silnik konwersji mowy na tekst",
 	"Stop": "Zatrzymaj się",
 	"Stop Sequence": "Zatrzymaj sekwencję",
-	"Stream Chat Response": "Odpowiedź na czacie strumieniowym",
+	"Stream Chat Response": "Odpowiedź czatu strumieniowego",
 	"STT Model": "Model STT",
 	"STT Settings": "Ustawienia STT",
 	"Subtitle (e.g. about the Roman Empire)": "Podtytuł (np. o Imperium Rzymskim)",
@@ -953,10 +961,11 @@
 	"Sync directory": "Sync directory",
 	"System": "System",
 	"System Instructions": "Instrukcje systemowe",
-	"System Prompt": "Prompt systemowy",
+	"System Prompt": "Podpowiedź systemowa",
 	"Tags Generation": "Generowanie tagów",
-	"Tags Generation Prompt": "Prompt generowania tagów",
+	"Tags Generation Prompt": "Podpowiedź do generowania tagów",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "Próbkowanie bez ogona jest używane do zmniejszenia wpływu mniej prawdopodobnych tokenów na wyjście. Wyższa wartość (np. 2,0) zmniejszy ten wpływ bardziej, podczas gdy wartość 1,0 wyłącza to ustawienie. (domyślnie: 1)",
+	"Talk to model": "",
 	"Tap to interrupt": "Kliknij, aby przerwać",
 	"Tasks": "Zadania",
 	"Tavily API Key": "Klucz API Tavily",
@@ -967,8 +976,8 @@
 	"Text Splitter": "Rozdzielacz tekstu",
 	"Text-to-Speech Engine": "Silnik konwersji tekstu na mowę",
 	"Tfs Z": "Tfs Z",
-	"Thanks for your feedback!": "Dziękuję za Twoją opinię!",
-	"The Application Account DN you bind with for search": "Konto aplikacji DN, z którym się wiążesz w celu przeszukiwania",
+	"Thanks for your feedback!": "Dziękuję za twoją opinię!",
+	"The Application Account DN you bind with for search": "Konto techniczne w formacie DN, z którym się wiążesz w celu przeszukiwania",
 	"The base to search for users": "Podstawa do wyszukiwania użytkowników",
 	"The batch size determines how many text requests are processed together at once. A higher batch size can increase the performance and speed of the model, but it also requires more memory.  (Default: 512)": "Rozmiar partii określa, ile żądań tekstu jest przetwarzanych razem w jednym czasie. Większy rozmiar partii może zwiększyć wydajność i szybkość modelu, ale wymaga również więcej pamięci. (Domyślnie: 512)",
 	"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "Twórcy tego wtyczki to entuzjaści, którzy działają jako wolontariusze ze społeczności. Jeśli uważasz, że ta wtyczka jest pomocna, rozważ wsparcie jej rozwoju.",
@@ -980,7 +989,7 @@
 	"The maximum number of files that can be used at once in chat. If the number of files exceeds this limit, the files will not be uploaded.": "Maksymalna liczba plików, które można użyć jednocześnie w czacie. Jeśli liczba plików przekroczy ten limit, pliki nie zostaną przesłane.",
 	"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 temperature of the model. Increasing the temperature will make the model answer more creatively. (Default: 0.8)": "Temperatura modelu. Zwiększenie temperatury sprawi, że model będzie odpowiadał w sposób bardziej kreatywny. (Domyślnie: 0.8)",
-	"Theme": "Temat",
+	"Theme": "Motyw",
 	"Thinking...": "Myślę...",
 	"This action cannot be undone. Do you wish to continue?": "Czy na pewno chcesz kontynuować? Ta akcja nie może zostać cofnięta.",
 	"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "To gwarantuje, że Twoje wartościowe rozmowy są bezpiecznie zapisywane w bazie danych backendowej. Dziękujemy!",
@@ -1021,13 +1030,13 @@
 	"Today": "Dzisiaj",
 	"Toggle settings": "Przełącz opcje",
 	"Toggle sidebar": "Przełącz pasek boczny",
-	"Token": "Żeton",
+	"Token": "Token",
 	"Tokens To Keep On Context Refresh (num_keep)": "Tokeny do zachowania podczas odświeżania kontekstu (num_keep)",
 	"Too verbose": "Zbyt rozwlekłe",
 	"Tool created successfully": "Narzędzie utworzone pomyślnie",
 	"Tool deleted successfully": "Narzędzie zostało usunięte pomyślnie",
 	"Tool Description": "Opis narzędzia",
-	"Tool ID": "Narzędzie ID",
+	"Tool ID": "ID narzędzia",
 	"Tool imported successfully": "Narzędzie zostało pomyślnie zaimportowane",
 	"Tool Name": "Nazwa narzędzia",
 	"Tool updated successfully": "Narzędzie zaktualizowane pomyślnie",
@@ -1041,34 +1050,35 @@
 	"Top P": "Najlepsze P",
 	"Transformers": "Transformery",
 	"Trouble accessing Ollama?": "Czy masz problemy z dostępem do Ollama?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "Model TTS",
-	"TTS Settings": "Ustawienia Syntezatora Mowy",
+	"TTS Settings": "Ustawienia syntezatora mowy",
 	"TTS Voice": "Głos TTS",
 	"Type": "Typ",
 	"Type Hugging Face Resolve (Download) URL": "Podaj adres URL do pobrania z Hugging Face",
 	"Uh-oh! There was an issue with the response.": "Ojej! Wystąpił problem z odpowiedzią.",
 	"UI": "Interfejs użytkownika",
 	"Unarchive All": "Odarchiwizuj wszystko",
-	"Unarchive All Archived Chats": "Odblokuj wszystkie ukryte rozmowy",
-	"Unarchive Chat": "Odblokuj czat",
+	"Unarchive All Archived Chats": "Odarchiwizuj wszystkie zarchiwizowane rozmowy",
+	"Unarchive Chat": "Odarchiwizuj czat",
 	"Unlock mysteries": "Rozwiązywanie zagadek",
-	"Unpin": "Odpiąć (pinę)",
+	"Unpin": "Odpiąć",
 	"Unravel secrets": "Odkryj tajemnice",
-	"Untagged": "Nieoznaczone",
+	"Untagged": "Nie otagowane",
 	"Update": "Aktualizacja",
 	"Update and Copy Link": "Aktualizuj i kopiuj link",
 	"Update for the latest features and improvements.": "Aktualizacja do najnowszych funkcji i ulepszeń.",
 	"Update password": "Zmiana hasła",
 	"Updated": "Aby zwiększyć wydajność aplikacji, należy rozważyć optymalizację kodu i użycie odpowiednich struktur danych. {optimization} [optimizations] mogą obejmować minimalizację liczby operacji we/wy, zwiększenie wydajności algorytmów oraz zmniejszenie zużycia pamięci. Ponadto, warto rozważyć użycie {caching} [pamięci podręcznej] do przechowywania często używanych danych, co może znacząco przyspieszyć działanie aplikacji. Wreszcie, monitorowanie wydajności aplikacji za pomocą narzędzi takich jak {profiling} [profilowanie] może pomóc zidentyfikować wolne miejsca i dalsze obszary do optymalizacji.",
 	"Updated at": "Aktualizacja dnia",
-	"Updated At": "Aktualizacja",
-	"Upgrade to a licensed plan for enhanced capabilities, including custom theming and branding, and dedicated support.": "Przejdź na licencjonowany plan, aby uzyskać rozszerzone możliwości, w tym niestandardowe motywy i personalizację oraz dedykowane wsparcie.",
+	"Updated At": "Czas aktualizacji",
+	"Upgrade to a licensed plan for enhanced capabilities, including custom theming and branding, and dedicated support.": "Przejdź na licencjonowany plan, aby uzyskać rozszerzone możliwości, w tym niestandardowe motywy, personalizację oraz dedykowane wsparcie.",
 	"Upload": "Prześlij",
 	"Upload a GGUF model": "Prześlij model GGUF",
 	"Upload directory": "Prześlij katalog",
 	"Upload files": "Prześlij pliki",
 	"Upload Files": "Prześlij pliki",
-	"Upload Pipeline": "Prześlij potok",
+	"Upload Pipeline": "Prześlij przepływ",
 	"Upload Progress": "Postęp przesyłania plików",
 	"URL": "Adres URL",
 	"URL Mode": "Tryb URL",
@@ -1106,9 +1116,9 @@
 	"Web API": "Interfejs API sieci web",
 	"Web Loader Settings": "Ustawienia ładowania strony",
 	"Web Search": "Wyszukiwarka internetowa",
-	"Web Search Engine": "Wyszukiwarka sieciowa",
-	"Web Search in Chat": "Wyszukiwanie w sieci Web w czacie",
-	"Web Search Query Generation": "Generowanie Zapytań Wyszukiwania Sieciowego",
+	"Web Search Engine": "Silnik wyszukiweania w sieci",
+	"Web Search in Chat": "Wyszukiwanie w sieci Web na czacie",
+	"Web Search Query Generation": "Generowanie zapytań Wyszukiwania Sieciowego",
 	"Webhook URL": "Adres URL webhooka",
 	"WebUI Settings": "Ustawienia interfejsu WebUI",
 	"WebUI URL": "Adres URL interfejsu internetowego",
@@ -1146,5 +1156,5 @@
 	"Your account status is currently pending activation.": "Twoje konto oczekuje obecnie na aktywację.",
 	"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.": "Cała Twoja wpłata trafi bezpośrednio do dewelopera wtyczki; Open WebUI nie pobiera żadnej prowizji. Należy jednak pamiętać, że wybrana platforma finansowania może mieć własne opłaty.",
 	"Youtube": "Youtube",
-	"Youtube Loader Settings": "Ustawienia ładowania z YouTube"
+	"Youtube Loader Settings": "Ustawienia pobierania z YouTube"
 }

+ 12 - 2
src/lib/i18n/locales/pt-BR/translation.json

@@ -13,6 +13,7 @@
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "Um modelo de tarefa é usado ao realizar tarefas como gerar títulos para chats e consultas de pesquisa na web",
 	"a user": "um usuário",
 	"About": "Sobre",
+	"Accept autocomplete generation / Jump to prompt variable": "",
 	"Access": "Acesso",
 	"Access Control": "Controle de Acesso",
 	"Accessible to all users": "Accessível para todos os usuários",
@@ -93,7 +94,7 @@
 	"Artifacts": "Artefatos",
 	"Ask a question": "Faça uma pergunta",
 	"Assistant": "Assistente",
-	"Attach file": "Anexar arquivo",
+	"Attach file from knowledge": "",
 	"Attention to detail": "Atenção aos detalhes",
 	"Attribute for Mail": "",
 	"Attribute for Username": "Atribuir para nome de usuário",
@@ -305,6 +306,8 @@
 	"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 Intelligence": "",
+	"Document Intelligence endpoint and key required.": "",
 	"Documentation": "Documentação",
 	"Documents": "Documentos",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "não faz nenhuma conexão externa, e seus dados permanecem seguros no seu servidor local.",
@@ -354,6 +357,7 @@
 	"Enable Message Rating": "Ativar Avaliação de Mensagens",
 	"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "Habilite a amostragem Mirostat para controlar a perplexidade. (Padrão: 0, 0 = Desativado, 1 = Mirostat, 2 = Mirostat 2.0)",
 	"Enable New Sign Ups": "Ativar Novos Cadastros",
+	"Enable OneDrive": "",
 	"Enable Web Search": "Ativar Pesquisa na Web",
 	"Enabled": "Ativado",
 	"Engine": "Motor",
@@ -372,6 +376,8 @@
 	"Enter Chunk Overlap": "Digite a Sobreposição de Chunk",
 	"Enter Chunk Size": "Digite o Tamanho do Chunk",
 	"Enter description": "Digite a descrição",
+	"Enter Document Intelligence Endpoint": "",
+	"Enter Document Intelligence Key": "",
 	"Enter domains separated by commas (e.g., example.com,site.org)": "",
 	"Enter Exa API Key": "",
 	"Enter Github Raw URL": "Digite a URL bruta do Github",
@@ -510,6 +516,7 @@
 	"General Settings": "Configurações Gerais",
 	"Generate an image": "",
 	"Generate Image": "Gerar Imagem",
+	"Generate prompt pair": "",
 	"Generating search query": "Gerando consulta de pesquisa",
 	"Get started": "Iniciar",
 	"Get started with {{WEBUI_NAME}}": "Iniciar com {{WEBUI_NAME}}",
@@ -615,6 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "",
 	"Local Models": "Modelos Locais",
+	"Location access not allowed": "",
 	"Lost": "Perdeu",
 	"LTR": "Esquerda para Direita",
 	"Made by Open WebUI Community": "Feito pela Comunidade OpenWebUI",
@@ -718,6 +726,7 @@
 	"Ollama API settings updated": "Configurações da API Ollama atualizadas",
 	"Ollama Version": "Versão Ollama",
 	"On": "Ligado",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "Somente caracteres alfanuméricos e hífens são permitidos",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "Apenas caracteres alfanuméricos e hífens são permitidos na string de comando.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "Somente coleções podem ser editadas. Crie uma nova base de conhecimento para editar/adicionar documentos.",
@@ -880,7 +889,6 @@
 	"Select an Ollama instance": "",
 	"Select Engine": "Selecionar Motor",
 	"Select Knowledge": "Selecionar Conhecimento",
-	"Select model": "Selecionar modelo",
 	"Select only one model to call": "Selecione apenas um modelo para chamar",
 	"Selected model(s) do not support image inputs": "Modelo(s) selecionado(s) não suportam entradas de imagem",
 	"Semantic distance to query": "Distância semântica para consulta",
@@ -957,6 +965,7 @@
 	"Tags Generation": "",
 	"Tags Generation Prompt": "Prompt para geração de Tags",
 	"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "A amostragem *tail free* é usada para reduzir o impacto de tokens menos prováveis na saída. Um valor mais alto (por exemplo, 2,0) reduzirá mais o impacto, enquanto um valor de 1,0 desativa essa configuração. (Padrão: 1)",
+	"Talk to model": "",
 	"Tap to interrupt": "Toque para interromper",
 	"Tasks": "",
 	"Tavily API Key": "Chave da API Tavily",
@@ -1041,6 +1050,7 @@
 	"Top P": "Top P",
 	"Transformers": "",
 	"Trouble accessing Ollama?": "Problemas para acessar o Ollama?",
+	"Trust Proxy Environment": "",
 	"TTS Model": "Modelo TTS",
 	"TTS Settings": "Configurações TTS",
 	"TTS Voice": "Voz TTS",

部分文件因为文件数量过多而无法显示