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

Merge pull request #9945 from open-webui/dev

0.5.12
Timothy Jaeryang Baek 2 сар өмнө
parent
commit
2017856791
77 өөрчлөгдсөн 869 нэмэгдсэн , 141 устгасан
  1. 13 0
      CHANGELOG.md
  2. 18 0
      backend/open_webui/config.py
  3. 6 0
      backend/open_webui/main.py
  4. 48 0
      backend/open_webui/retrieval/web/serpapi.py
  5. 27 1
      backend/open_webui/routers/retrieval.py
  6. 11 0
      backend/open_webui/routers/tasks.py
  7. 15 9
      backend/open_webui/utils/chat.py
  8. 42 16
      backend/open_webui/utils/middleware.py
  9. 5 4
      backend/open_webui/utils/misc.py
  10. 0 3
      backend/requirements.txt
  11. 2 2
      package-lock.json
  12. 1 1
      package.json
  13. 0 3
      pyproject.toml
  14. 26 13
      src/lib/components/admin/Settings/Interface.svelte
  15. 29 0
      src/lib/components/admin/Settings/WebSearch.svelte
  16. 3 0
      src/lib/components/chat/Messages/ContentRenderer.svelte
  17. 3 0
      src/lib/components/chat/Messages/Markdown.svelte
  18. 45 1
      src/lib/components/chat/Messages/Markdown/MarkdownTokens.svelte
  19. 3 0
      src/lib/components/chat/Messages/ResponseMessage.svelte
  20. 1 0
      src/lib/components/chat/Settings/Connections/Connection.svelte
  21. 12 8
      src/lib/components/chat/Suggestions.svelte
  22. 67 47
      src/lib/components/common/RichTextInput.svelte
  23. 23 0
      src/lib/components/icons/Home.svelte
  24. 29 2
      src/lib/components/layout/Sidebar.svelte
  25. 2 2
      src/lib/components/playground/Completions.svelte
  26. 2 1
      src/lib/components/playground/Notes.svelte
  27. 7 0
      src/lib/i18n/locales/ar-BH/translation.json
  28. 7 0
      src/lib/i18n/locales/bg-BG/translation.json
  29. 7 0
      src/lib/i18n/locales/bn-BD/translation.json
  30. 7 0
      src/lib/i18n/locales/ca-ES/translation.json
  31. 7 0
      src/lib/i18n/locales/ceb-PH/translation.json
  32. 7 0
      src/lib/i18n/locales/cs-CZ/translation.json
  33. 7 0
      src/lib/i18n/locales/da-DK/translation.json
  34. 7 0
      src/lib/i18n/locales/de-DE/translation.json
  35. 7 0
      src/lib/i18n/locales/dg-DG/translation.json
  36. 7 0
      src/lib/i18n/locales/el-GR/translation.json
  37. 7 0
      src/lib/i18n/locales/en-GB/translation.json
  38. 7 0
      src/lib/i18n/locales/en-US/translation.json
  39. 7 0
      src/lib/i18n/locales/es-ES/translation.json
  40. 7 0
      src/lib/i18n/locales/eu-ES/translation.json
  41. 7 0
      src/lib/i18n/locales/fa-IR/translation.json
  42. 7 0
      src/lib/i18n/locales/fi-FI/translation.json
  43. 7 0
      src/lib/i18n/locales/fr-CA/translation.json
  44. 7 0
      src/lib/i18n/locales/fr-FR/translation.json
  45. 7 0
      src/lib/i18n/locales/he-IL/translation.json
  46. 7 0
      src/lib/i18n/locales/hi-IN/translation.json
  47. 7 0
      src/lib/i18n/locales/hr-HR/translation.json
  48. 7 0
      src/lib/i18n/locales/hu-HU/translation.json
  49. 7 0
      src/lib/i18n/locales/id-ID/translation.json
  50. 7 0
      src/lib/i18n/locales/ie-GA/translation.json
  51. 7 0
      src/lib/i18n/locales/it-IT/translation.json
  52. 7 0
      src/lib/i18n/locales/ja-JP/translation.json
  53. 7 0
      src/lib/i18n/locales/ka-GE/translation.json
  54. 7 0
      src/lib/i18n/locales/ko-KR/translation.json
  55. 7 0
      src/lib/i18n/locales/lt-LT/translation.json
  56. 7 0
      src/lib/i18n/locales/ms-MY/translation.json
  57. 7 0
      src/lib/i18n/locales/nb-NO/translation.json
  58. 7 0
      src/lib/i18n/locales/nl-NL/translation.json
  59. 7 0
      src/lib/i18n/locales/pa-IN/translation.json
  60. 7 0
      src/lib/i18n/locales/pl-PL/translation.json
  61. 7 0
      src/lib/i18n/locales/pt-BR/translation.json
  62. 7 0
      src/lib/i18n/locales/pt-PT/translation.json
  63. 7 0
      src/lib/i18n/locales/ro-RO/translation.json
  64. 7 0
      src/lib/i18n/locales/ru-RU/translation.json
  65. 7 0
      src/lib/i18n/locales/sk-SK/translation.json
  66. 7 0
      src/lib/i18n/locales/sr-RS/translation.json
  67. 7 0
      src/lib/i18n/locales/sv-SE/translation.json
  68. 7 0
      src/lib/i18n/locales/th-TH/translation.json
  69. 7 0
      src/lib/i18n/locales/tk-TW/translation.json
  70. 7 0
      src/lib/i18n/locales/tr-TR/translation.json
  71. 35 28
      src/lib/i18n/locales/uk-UA/translation.json
  72. 7 0
      src/lib/i18n/locales/ur-PK/translation.json
  73. 7 0
      src/lib/i18n/locales/vi-VN/translation.json
  74. 7 0
      src/lib/i18n/locales/zh-CN/translation.json
  75. 7 0
      src/lib/i18n/locales/zh-TW/translation.json
  76. 65 0
      src/routes/(app)/home/+layout.svelte
  77. 0 0
      src/routes/(app)/home/+page.svelte

+ 13 - 0
CHANGELOG.md

@@ -5,6 +5,19 @@ All notable changes to this project will be documented in this file.
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
+## [0.5.12] - 2025-02-13
+
+### Added
+
+- **🛠️ Multiple Tool Calls Support for Native Function Mode**: Functions now can call multiple tools within a single response, unlocking better automation and workflow flexibility when using native function calling.
+
+### Fixed
+
+- **📝 Playground Text Completion Restored**: Addressed an issue where text completion in the Playground was not functioning.
+- **🔗 Direct Connections Now Work for Regular Users**: Fixed a bug where users with the 'user' role couldn't establish direct API connections, enabling seamless model usage for all user tiers.
+- **⚡ Landing Page Input No Longer Lags with Long Text**: Improved input responsiveness on the landing page, ensuring fast and smooth typing experiences even when entering long messages.
+- **🔧 Parameter in Functions Fixed**: Fixed an issue where the reserved parameters wasn’t recognized within functions, restoring full functionality for advanced task-based automation.
+
 ## [0.5.11] - 2025-02-13
 
 ### Added

+ 18 - 0
backend/open_webui/config.py

@@ -1190,6 +1190,12 @@ ENABLE_TAGS_GENERATION = PersistentConfig(
     os.environ.get("ENABLE_TAGS_GENERATION", "True").lower() == "true",
 )
 
+ENABLE_TITLE_GENERATION = PersistentConfig(
+    "ENABLE_TITLE_GENERATION",
+    "task.title.enable",
+    os.environ.get("ENABLE_TITLE_GENERATION", "True").lower() == "true",
+)
+
 
 ENABLE_SEARCH_QUERY_GENERATION = PersistentConfig(
     "ENABLE_SEARCH_QUERY_GENERATION",
@@ -1803,6 +1809,18 @@ SEARCHAPI_ENGINE = PersistentConfig(
     os.getenv("SEARCHAPI_ENGINE", ""),
 )
 
+SERPAPI_API_KEY = PersistentConfig(
+    "SERPAPI_API_KEY",
+    "rag.web.search.serpapi_api_key",
+    os.getenv("SERPAPI_API_KEY", ""),
+)
+
+SERPAPI_ENGINE = PersistentConfig(
+    "SERPAPI_ENGINE",
+    "rag.web.search.serpapi_engine",
+    os.getenv("SERPAPI_ENGINE", ""),
+)
+
 BING_SEARCH_V7_ENDPOINT = PersistentConfig(
     "BING_SEARCH_V7_ENDPOINT",
     "rag.web.search.bing_search_v7_endpoint",

+ 6 - 0
backend/open_webui/main.py

@@ -179,6 +179,8 @@ from open_webui.config import (
     JINA_API_KEY,
     SEARCHAPI_API_KEY,
     SEARCHAPI_ENGINE,
+    SERPAPI_API_KEY,
+    SERPAPI_ENGINE,
     SEARXNG_QUERY_URL,
     SERPER_API_KEY,
     SERPLY_API_KEY,
@@ -264,6 +266,7 @@ from open_webui.config import (
     TASK_MODEL,
     TASK_MODEL_EXTERNAL,
     ENABLE_TAGS_GENERATION,
+    ENABLE_TITLE_GENERATION,
     ENABLE_SEARCH_QUERY_GENERATION,
     ENABLE_RETRIEVAL_QUERY_GENERATION,
     ENABLE_AUTOCOMPLETE_GENERATION,
@@ -546,6 +549,8 @@ app.state.config.SERPLY_API_KEY = SERPLY_API_KEY
 app.state.config.TAVILY_API_KEY = TAVILY_API_KEY
 app.state.config.SEARCHAPI_API_KEY = SEARCHAPI_API_KEY
 app.state.config.SEARCHAPI_ENGINE = SEARCHAPI_ENGINE
+app.state.config.SERPAPI_API_KEY = SERPAPI_API_KEY
+app.state.config.SERPAPI_ENGINE = SERPAPI_ENGINE
 app.state.config.JINA_API_KEY = JINA_API_KEY
 app.state.config.BING_SEARCH_V7_ENDPOINT = BING_SEARCH_V7_ENDPOINT
 app.state.config.BING_SEARCH_V7_SUBSCRIPTION_KEY = BING_SEARCH_V7_SUBSCRIPTION_KEY
@@ -689,6 +694,7 @@ app.state.config.ENABLE_SEARCH_QUERY_GENERATION = ENABLE_SEARCH_QUERY_GENERATION
 app.state.config.ENABLE_RETRIEVAL_QUERY_GENERATION = ENABLE_RETRIEVAL_QUERY_GENERATION
 app.state.config.ENABLE_AUTOCOMPLETE_GENERATION = ENABLE_AUTOCOMPLETE_GENERATION
 app.state.config.ENABLE_TAGS_GENERATION = ENABLE_TAGS_GENERATION
+app.state.config.ENABLE_TITLE_GENERATION = ENABLE_TITLE_GENERATION
 
 
 app.state.config.TITLE_GENERATION_PROMPT_TEMPLATE = TITLE_GENERATION_PROMPT_TEMPLATE

+ 48 - 0
backend/open_webui/retrieval/web/serpapi.py

@@ -0,0 +1,48 @@
+import logging
+from typing import Optional
+from urllib.parse import urlencode
+
+import requests
+from open_webui.retrieval.web.main import SearchResult, get_filtered_results
+from open_webui.env import SRC_LOG_LEVELS
+
+log = logging.getLogger(__name__)
+log.setLevel(SRC_LOG_LEVELS["RAG"])
+
+
+def search_serpapi(
+    api_key: str,
+    engine: str,
+    query: str,
+    count: int,
+    filter_list: Optional[list[str]] = None,
+) -> list[SearchResult]:
+    """Search using serpapi.com's API and return the results as a list of SearchResult objects.
+
+    Args:
+      api_key (str): A serpapi.com API key
+      query (str): The query to search for
+    """
+    url = "https://serpapi.com/search"
+
+    engine = engine or "google"
+
+    payload = {"engine": engine, "q": query, "api_key": api_key}
+
+    url = f"{url}?{urlencode(payload)}"
+    response = requests.request("GET", url)
+
+    json_response = response.json()
+    log.info(f"results from serpapi search: {json_response}")
+
+    results = sorted(
+        json_response.get("organic_results", []), key=lambda x: x.get("position", 0)
+    )
+    if filter_list:
+        results = get_filtered_results(results, filter_list)
+    return [
+        SearchResult(
+            link=result["link"], title=result["title"], snippet=result["snippet"]
+        )
+        for result in results[:count]
+    ]

+ 27 - 1
backend/open_webui/routers/retrieval.py

@@ -50,6 +50,7 @@ from open_webui.retrieval.web.duckduckgo import search_duckduckgo
 from open_webui.retrieval.web.google_pse import search_google_pse
 from open_webui.retrieval.web.jina_search import search_jina
 from open_webui.retrieval.web.searchapi import search_searchapi
+from open_webui.retrieval.web.serpapi import search_serpapi
 from open_webui.retrieval.web.searxng import search_searxng
 from open_webui.retrieval.web.serper import search_serper
 from open_webui.retrieval.web.serply import search_serply
@@ -388,6 +389,8 @@ async def get_rag_config(request: Request, user=Depends(get_admin_user)):
                 "tavily_api_key": request.app.state.config.TAVILY_API_KEY,
                 "searchapi_api_key": request.app.state.config.SEARCHAPI_API_KEY,
                 "searchapi_engine": request.app.state.config.SEARCHAPI_ENGINE,
+                "serpapi_api_key": request.app.state.config.SERPAPI_API_KEY,
+                "serpapi_engine": request.app.state.config.SERPAPI_ENGINE,
                 "jina_api_key": request.app.state.config.JINA_API_KEY,
                 "bing_search_v7_endpoint": request.app.state.config.BING_SEARCH_V7_ENDPOINT,
                 "bing_search_v7_subscription_key": request.app.state.config.BING_SEARCH_V7_SUBSCRIPTION_KEY,
@@ -439,6 +442,8 @@ class WebSearchConfig(BaseModel):
     tavily_api_key: Optional[str] = None
     searchapi_api_key: Optional[str] = None
     searchapi_engine: Optional[str] = None
+    serpapi_api_key: Optional[str] = None
+    serpapi_engine: Optional[str] = None
     jina_api_key: Optional[str] = None
     bing_search_v7_endpoint: Optional[str] = None
     bing_search_v7_subscription_key: Optional[str] = None
@@ -545,6 +550,9 @@ async def update_rag_config(
             form_data.web.search.searchapi_engine
         )
 
+        request.app.state.config.SERPAPI_API_KEY = form_data.web.search.serpapi_api_key
+        request.app.state.config.SERPAPI_ENGINE = form_data.web.search.serpapi_engine
+
         request.app.state.config.JINA_API_KEY = form_data.web.search.jina_api_key
         request.app.state.config.BING_SEARCH_V7_ENDPOINT = (
             form_data.web.search.bing_search_v7_endpoint
@@ -604,6 +612,8 @@ async def update_rag_config(
                 "serply_api_key": request.app.state.config.SERPLY_API_KEY,
                 "serachapi_api_key": request.app.state.config.SEARCHAPI_API_KEY,
                 "searchapi_engine": request.app.state.config.SEARCHAPI_ENGINE,
+                "serpapi_api_key": request.app.state.config.SERPAPI_API_KEY,
+                "serpapi_engine": request.app.state.config.SERPAPI_ENGINE,
                 "tavily_api_key": request.app.state.config.TAVILY_API_KEY,
                 "jina_api_key": request.app.state.config.JINA_API_KEY,
                 "bing_search_v7_endpoint": request.app.state.config.BING_SEARCH_V7_ENDPOINT,
@@ -760,7 +770,11 @@ def save_docs_to_vector_db(
     # for meta-data so convert them to string.
     for metadata in metadatas:
         for key, value in metadata.items():
-            if isinstance(value, datetime):
+            if (
+                isinstance(value, datetime)
+                or isinstance(value, list)
+                or isinstance(value, dict)
+            ):
                 metadata[key] = str(value)
 
     try:
@@ -1127,6 +1141,7 @@ def search_web(request: Request, engine: str, query: str) -> list[SearchResult]:
     - TAVILY_API_KEY
     - EXA_API_KEY
     - SEARCHAPI_API_KEY + SEARCHAPI_ENGINE (by default `google`)
+    - SERPAPI_API_KEY + SERPAPI_ENGINE (by default `google`)
     Args:
         query (str): The query to search for
     """
@@ -1255,6 +1270,17 @@ def search_web(request: Request, engine: str, query: str) -> list[SearchResult]:
             )
         else:
             raise Exception("No SEARCHAPI_API_KEY found in environment variables")
+    elif engine == "serpapi":
+        if request.app.state.config.SERPAPI_API_KEY:
+            return search_serpapi(
+                request.app.state.config.SERPAPI_API_KEY,
+                request.app.state.config.SERPAPI_ENGINE,
+                query,
+                request.app.state.config.RAG_WEB_SEARCH_RESULT_COUNT,
+                request.app.state.config.RAG_WEB_SEARCH_DOMAIN_FILTER_LIST,
+            )
+        else:
+            raise Exception("No SERPAPI_API_KEY found in environment variables")
     elif engine == "jina":
         return search_jina(
             request.app.state.config.JINA_API_KEY,

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

@@ -58,6 +58,7 @@ async def get_task_config(request: Request, user=Depends(get_verified_user)):
         "AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH": request.app.state.config.AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH,
         "TAGS_GENERATION_PROMPT_TEMPLATE": request.app.state.config.TAGS_GENERATION_PROMPT_TEMPLATE,
         "ENABLE_TAGS_GENERATION": request.app.state.config.ENABLE_TAGS_GENERATION,
+        "ENABLE_TITLE_GENERATION": request.app.state.config.ENABLE_TITLE_GENERATION,
         "ENABLE_SEARCH_QUERY_GENERATION": request.app.state.config.ENABLE_SEARCH_QUERY_GENERATION,
         "ENABLE_RETRIEVAL_QUERY_GENERATION": request.app.state.config.ENABLE_RETRIEVAL_QUERY_GENERATION,
         "QUERY_GENERATION_PROMPT_TEMPLATE": request.app.state.config.QUERY_GENERATION_PROMPT_TEMPLATE,
@@ -68,6 +69,7 @@ async def get_task_config(request: Request, user=Depends(get_verified_user)):
 class TaskConfigForm(BaseModel):
     TASK_MODEL: Optional[str]
     TASK_MODEL_EXTERNAL: Optional[str]
+    ENABLE_TITLE_GENERATION: bool
     TITLE_GENERATION_PROMPT_TEMPLATE: str
     IMAGE_PROMPT_GENERATION_PROMPT_TEMPLATE: str
     ENABLE_AUTOCOMPLETE_GENERATION: bool
@@ -86,6 +88,7 @@ async def update_task_config(
 ):
     request.app.state.config.TASK_MODEL = form_data.TASK_MODEL
     request.app.state.config.TASK_MODEL_EXTERNAL = form_data.TASK_MODEL_EXTERNAL
+    request.app.state.config.ENABLE_TITLE_GENERATION = form_data.ENABLE_TITLE_GENERATION
     request.app.state.config.TITLE_GENERATION_PROMPT_TEMPLATE = (
         form_data.TITLE_GENERATION_PROMPT_TEMPLATE
     )
@@ -122,6 +125,7 @@ async def update_task_config(
     return {
         "TASK_MODEL": request.app.state.config.TASK_MODEL,
         "TASK_MODEL_EXTERNAL": request.app.state.config.TASK_MODEL_EXTERNAL,
+        "ENABLE_TITLE_GENERATION": request.app.state.config.ENABLE_TITLE_GENERATION,
         "TITLE_GENERATION_PROMPT_TEMPLATE": request.app.state.config.TITLE_GENERATION_PROMPT_TEMPLATE,
         "IMAGE_PROMPT_GENERATION_PROMPT_TEMPLATE": request.app.state.config.IMAGE_PROMPT_GENERATION_PROMPT_TEMPLATE,
         "ENABLE_AUTOCOMPLETE_GENERATION": request.app.state.config.ENABLE_AUTOCOMPLETE_GENERATION,
@@ -139,6 +143,13 @@ async def update_task_config(
 async def generate_title(
     request: Request, form_data: dict, user=Depends(get_verified_user)
 ):
+
+    if not request.app.state.config.ENABLE_TITLE_GENERATION:
+        return JSONResponse(
+            status_code=status.HTTP_200_OK,
+            content={"detail": "Title generation is disabled"},
+        )
+
     if getattr(request.state, "direct", False) and hasattr(request.state, "model"):
         models = {
             request.state.model["id"]: request.state.model,

+ 15 - 9
backend/open_webui/utils/chat.py

@@ -161,11 +161,18 @@ async def generate_chat_completion(
     user: Any,
     bypass_filter: bool = False,
 ):
+    log.debug(f"generate_chat_completion: {form_data}")
     if BYPASS_MODEL_ACCESS_CONTROL:
         bypass_filter = True
 
     if hasattr(request.state, "metadata"):
-        form_data["metadata"] = request.state.metadata
+        if "metadata" not in form_data:
+            form_data["metadata"] = request.state.metadata
+        else:
+            form_data["metadata"] = {
+                **form_data["metadata"],
+                **request.state.metadata,
+            }
 
     if getattr(request.state, "direct", False) and hasattr(request.state, "model"):
         models = {
@@ -187,19 +194,18 @@ async def generate_chat_completion(
 
     model = models[model_id]
 
-    # Check if user has access to the model
-    if not bypass_filter and user.role == "user":
-        try:
-            check_model_access(user, model)
-        except Exception as e:
-            raise e
-
     if getattr(request.state, "direct", False):
         return await generate_direct_chat_completion(
             request, form_data, user=user, models=models
         )
-
     else:
+        # Check if user has access to the model
+        if not bypass_filter and user.role == "user":
+            try:
+                check_model_access(user, model)
+            except Exception as e:
+                raise e
+
         if model["owned_by"] == "arena":
             model_ids = model.get("info", {}).get("meta", {}).get("model_ids")
             filter_mode = model.get("info", {}).get("meta", {}).get("filter_mode")

+ 42 - 16
backend/open_webui/utils/middleware.py

@@ -1151,6 +1151,46 @@ async def process_chat_response(
 
                 return content.strip()
 
+            def convert_content_blocks_to_messages(content_blocks):
+                messages = []
+
+                temp_blocks = []
+                for idx, block in enumerate(content_blocks):
+                    if block["type"] == "tool_calls":
+                        messages.append(
+                            {
+                                "role": "assistant",
+                                "content": serialize_content_blocks(temp_blocks),
+                                "tool_calls": block.get("content"),
+                            }
+                        )
+
+                        results = block.get("results", [])
+
+                        for result in results:
+                            messages.append(
+                                {
+                                    "role": "tool",
+                                    "tool_call_id": result["tool_call_id"],
+                                    "content": result["content"],
+                                }
+                            )
+                        temp_blocks = []
+                    else:
+                        temp_blocks.append(block)
+
+                if temp_blocks:
+                    content = serialize_content_blocks(temp_blocks)
+                    if content:
+                        messages.append(
+                            {
+                                "role": "assistant",
+                                "content": content,
+                            }
+                        )
+
+                return messages
+
             def tag_content_handler(content_type, tags, content, content_blocks):
                 end_flag = False
 
@@ -1542,7 +1582,6 @@ async def process_chat_response(
 
                     results = []
                     for tool_call in response_tool_calls:
-                        print("\n\n" + str(tool_call) + "\n\n")
                         tool_call_id = tool_call.get("id", "")
                         tool_name = tool_call.get("function", {}).get("name", "")
 
@@ -1608,23 +1647,10 @@ async def process_chat_response(
                             {
                                 "model": model_id,
                                 "stream": True,
+                                "tools": form_data["tools"],
                                 "messages": [
                                     *form_data["messages"],
-                                    {
-                                        "role": "assistant",
-                                        "content": serialize_content_blocks(
-                                            content_blocks, raw=True
-                                        ),
-                                        "tool_calls": response_tool_calls,
-                                    },
-                                    *[
-                                        {
-                                            "role": "tool",
-                                            "tool_call_id": result["tool_call_id"],
-                                            "content": result["content"],
-                                        }
-                                        for result in results
-                                    ],
+                                    *convert_content_blocks_to_messages(content_blocks),
                                 ],
                             },
                             user,

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

@@ -225,10 +225,11 @@ def openai_chat_completion_message_template(
     template = openai_chat_message_template(model)
     template["object"] = "chat.completion"
     if message is not None:
-        template["choices"][0]["message"] = {"content": message, "role": "assistant"}
-
-    if tool_calls:
-        template["choices"][0]["tool_calls"] = tool_calls
+        template["choices"][0]["message"] = {
+            "content": message,
+            "role": "assistant",
+            **({"tool_calls": tool_calls} if tool_calls else {}),
+        }
 
     template["choices"][0]["finish_reason"] = "stop"
 

+ 0 - 3
backend/requirements.txt

@@ -3,9 +3,6 @@ uvicorn[standard]==0.30.6
 pydantic==2.9.2
 python-multipart==0.0.18
 
-Flask==3.1.0
-Flask-Cors==5.0.0
-
 python-socketio==5.11.3
 python-jose==3.3.0
 passlib[bcrypt]==1.7.4

+ 2 - 2
package-lock.json

@@ -1,12 +1,12 @@
 {
 	"name": "open-webui",
-	"version": "0.5.11",
+	"version": "0.5.12",
 	"lockfileVersion": 3,
 	"requires": true,
 	"packages": {
 		"": {
 			"name": "open-webui",
-			"version": "0.5.11",
+			"version": "0.5.12",
 			"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.11",
+	"version": "0.5.12",
 	"private": true,
 	"scripts": {
 		"dev": "npm run pyodide:fetch && vite dev --host",

+ 0 - 3
pyproject.toml

@@ -11,9 +11,6 @@ dependencies = [
     "pydantic==2.9.2",
     "python-multipart==0.0.18",
 
-    "Flask==3.1.0",
-    "Flask-Cors==5.0.0",
-
     "python-socketio==5.11.3",
     "python-jose==3.3.0",
     "passlib[bcrypt]==1.7.4",

+ 26 - 13
src/lib/components/admin/Settings/Interface.svelte

@@ -23,6 +23,7 @@
 	let taskConfig = {
 		TASK_MODEL: '',
 		TASK_MODEL_EXTERNAL: '',
+		ENABLE_TITLE_GENERATION: true,
 		TITLE_GENERATION_PROMPT_TEMPLATE: '',
 		IMAGE_PROMPT_GENERATION_PROMPT_TEMPLATE: '',
 		ENABLE_AUTOCOMPLETE_GENERATION: true,
@@ -126,22 +127,34 @@
 					</div>
 				</div>
 
-				<div class="mt-3">
-					<div class=" mb-2.5 text-xs font-medium">{$i18n.t('Title Generation Prompt')}</div>
+				<hr class=" border-gray-50 dark:border-gray-850 my-3" />
 
-					<Tooltip
-						content={$i18n.t('Leave empty to use the default prompt, or enter a custom prompt')}
-						placement="top-start"
-					>
-						<Textarea
-							bind:value={taskConfig.TITLE_GENERATION_PROMPT_TEMPLATE}
-							placeholder={$i18n.t(
-								'Leave empty to use the default prompt, or enter a custom prompt'
-							)}
-						/>
-					</Tooltip>
+				<div class="my-3 flex w-full items-center justify-between">
+					<div class=" self-center text-xs font-medium">
+						{$i18n.t('Title Generation')}
+					</div>
+
+					<Switch bind:state={taskConfig.ENABLE_TITLE_GENERATION} />
 				</div>
 
+				{#if taskConfig.ENABLE_TITLE_GENERATION}
+					<div class="mt-3">
+						<div class=" mb-2.5 text-xs font-medium">{$i18n.t('Title Generation Prompt')}</div>
+
+						<Tooltip
+							content={$i18n.t('Leave empty to use the default prompt, or enter a custom prompt')}
+							placement="top-start"
+						>
+							<Textarea
+								bind:value={taskConfig.TITLE_GENERATION_PROMPT_TEMPLATE}
+								placeholder={$i18n.t(
+									'Leave empty to use the default prompt, or enter a custom prompt'
+								)}
+							/>
+						</Tooltip>
+					</div>
+				{/if}
+
 				<div class="mt-3">
 					<div class=" mb-2.5 text-xs font-medium">{$i18n.t('Image Prompt Generation Prompt')}</div>
 

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

@@ -23,6 +23,7 @@
 		'serper',
 		'serply',
 		'searchapi',
+		'serpapi',
 		'duckduckgo',
 		'tavily',
 		'jina',
@@ -268,6 +269,34 @@
 									</div>
 								</div>
 							</div>
+						{:else if webConfig.search.engine === 'serpapi'}
+							<div>
+								<div class=" self-center text-xs font-medium mb-1">
+									{$i18n.t('SerpApi API Key')}
+								</div>
+
+								<SensitiveInput
+									placeholder={$i18n.t('Enter SerpApi API Key')}
+									bind:value={webConfig.search.serpapi_api_key}
+								/>
+							</div>
+							<div class="mt-1.5">
+								<div class=" self-center text-xs font-medium mb-1">
+									{$i18n.t('SerpApi Engine')}
+								</div>
+
+								<div class="flex w-full">
+									<div class="flex-1">
+										<input
+											class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-none"
+											type="text"
+											placeholder={$i18n.t('Enter SerpApi Engine')}
+											bind:value={webConfig.search.serpapi_engine}
+											autocomplete="off"
+										/>
+									</div>
+								</div>
+							</div>
 						{:else if webConfig.search.engine === 'tavily'}
 							<div>
 								<div class=" self-center text-xs font-medium mb-1">

+ 3 - 0
src/lib/components/chat/Messages/ContentRenderer.svelte

@@ -18,6 +18,8 @@
 	export let floatingButtons = true;
 
 	export let onSourceClick = () => {};
+	export let onTaskClick = () => {};
+
 	export let onAddMessages = () => {};
 
 	let contentContainerElement;
@@ -141,6 +143,7 @@
 			return acc.filter((item, index) => acc.indexOf(item) === index);
 		}, [])}
 		{onSourceClick}
+		{onTaskClick}
 		on:update={(e) => {
 			dispatch('update', e.detail);
 		}}

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

@@ -17,7 +17,9 @@
 	export let save = false;
 
 	export let sourceIds = [];
+
 	export let onSourceClick = () => {};
+	export let onTaskClick = () => {};
 
 	let tokens = [];
 
@@ -42,6 +44,7 @@
 		{tokens}
 		{id}
 		{save}
+		{onTaskClick}
 		{onSourceClick}
 		on:update={(e) => {
 			dispatch('update', e.detail);

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

@@ -26,6 +26,8 @@
 	export let attributes = {};
 
 	export let save = false;
+
+	export let onTaskClick: Function = () => {};
 	export let onSourceClick: Function = () => {};
 
 	const headerComponent = (depth: number) => {
@@ -168,17 +170,37 @@
 		</div>
 	{:else if token.type === 'blockquote'}
 		<blockquote>
-			<svelte:self id={`${id}-${tokenIdx}`} tokens={token.tokens} />
+			<svelte:self id={`${id}-${tokenIdx}`} tokens={token.tokens} {onTaskClick} {onSourceClick} />
 		</blockquote>
 	{:else if token.type === 'list'}
 		{#if token.ordered}
 			<ol start={token.start || 1}>
 				{#each token.items as item, itemIdx}
 					<li>
+						{#if item?.task}
+							<input
+								class=" translate-y-[1px] -translate-x-1"
+								type="checkbox"
+								checked={item.checked}
+								on:change={(e) => {
+									onTaskClick({
+										id: id,
+										token: token,
+										tokenIdx: tokenIdx,
+										item: item,
+										itemIdx: itemIdx,
+										checked: e.target.checked
+									});
+								}}
+							/>
+						{/if}
+
 						<svelte:self
 							id={`${id}-${tokenIdx}-${itemIdx}`}
 							tokens={item.tokens}
 							top={token.loose}
+							{onTaskClick}
+							{onSourceClick}
 						/>
 					</li>
 				{/each}
@@ -187,10 +209,30 @@
 			<ul>
 				{#each token.items as item, itemIdx}
 					<li>
+						{#if item?.task}
+							<input
+								class=" translate-y-[1px] -translate-x-1"
+								type="checkbox"
+								checked={item.checked}
+								on:change={(e) => {
+									onTaskClick({
+										id: id,
+										token: token,
+										tokenIdx: tokenIdx,
+										item: item,
+										itemIdx: itemIdx,
+										checked: e.target.checked
+									});
+								}}
+							/>
+						{/if}
+
 						<svelte:self
 							id={`${id}-${tokenIdx}-${itemIdx}`}
 							tokens={item.tokens}
 							top={token.loose}
+							{onTaskClick}
+							{onSourceClick}
 						/>
 					</li>
 				{/each}
@@ -203,6 +245,8 @@
 					id={`${id}-${tokenIdx}-d`}
 					tokens={marked.lexer(token.text)}
 					attributes={token?.attributes}
+					{onTaskClick}
+					{onSourceClick}
 				/>
 			</div>
 		</Collapsible>

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

@@ -716,6 +716,9 @@
 										floatingButtons={message?.done}
 										save={!readOnly}
 										{model}
+										onTaskClick={async (e) => {
+											console.log(e);
+										}}
 										onSourceClick={async (e) => {
 											console.log(e);
 											let sourceButton = document.getElementById(`source-${e}`);

+ 1 - 0
src/lib/components/chat/Settings/Connections/Connection.svelte

@@ -21,6 +21,7 @@
 
 <AddConnectionModal
 	edit
+	direct
 	bind:show={showConfigModal}
 	connection={{
 		url,

+ 12 - 8
src/lib/components/chat/Suggestions.svelte

@@ -42,14 +42,18 @@
 	}
 
 	const getFilteredPrompts = (inputValue) => {
-		const newFilteredPrompts = inputValue.trim()
-			? fuse.search(inputValue.trim()).map((result) => result.item)
-			: sortedPrompts;
-
-		// Compare with the oldFilteredPrompts
-		// If there's a difference, update array + version
-		if (!arraysEqual(filteredPrompts, newFilteredPrompts)) {
-			filteredPrompts = newFilteredPrompts;
+		if (inputValue.length > 500) {
+			filteredPrompts = [];
+		} else {
+			const newFilteredPrompts = inputValue.trim()
+				? fuse.search(inputValue.trim()).map((result) => result.item)
+				: sortedPrompts;
+
+			// Compare with the oldFilteredPrompts
+			// If there's a difference, update array + version
+			if (!arraysEqual(filteredPrompts, newFilteredPrompts)) {
+				filteredPrompts = newFilteredPrompts;
+			}
 		}
 	};
 

+ 67 - 47
src/lib/components/common/RichTextInput.svelte

@@ -35,6 +35,8 @@
 	export let value = '';
 	export let id = '';
 
+	export let raw = false;
+
 	export let preserveBreaks = false;
 	export let generateAutoCompletion: Function = async () => null;
 	export let autocomplete = false;
@@ -137,25 +139,29 @@
 			});
 		}
 
-		async function tryParse(value, attempts = 3, interval = 100) {
-			try {
-				// Try parsing the value
-				return marked.parse(value.replaceAll(`\n<br/>`, `<br/>`), {
-					breaks: false
-				});
-			} catch (error) {
-				// If no attempts remain, fallback to plain text
-				if (attempts <= 1) {
-					return value;
+		let content = value;
+
+		if (!raw) {
+			async function tryParse(value, attempts = 3, interval = 100) {
+				try {
+					// Try parsing the value
+					return marked.parse(value.replaceAll(`\n<br/>`, `<br/>`), {
+						breaks: false
+					});
+				} catch (error) {
+					// If no attempts remain, fallback to plain text
+					if (attempts <= 1) {
+						return value;
+					}
+					// Wait for the interval, then retry
+					await new Promise((resolve) => setTimeout(resolve, interval));
+					return tryParse(value, attempts - 1, interval); // Recursive call
 				}
-				// Wait for the interval, then retry
-				await new Promise((resolve) => setTimeout(resolve, interval));
-				return tryParse(value, attempts - 1, interval); // Recursive call
 			}
-		}
 
-		// Usage example
-		let content = await tryParse(value);
+			// Usage example
+			content = await tryParse(value);
+		}
 
 		editor = new Editor({
 			element: element,
@@ -191,28 +197,33 @@
 			onTransaction: () => {
 				// force re-render so `editor.isActive` works as expected
 				editor = editor;
-				let newValue = turndownService
-					.turndown(
-						editor
-							.getHTML()
-							.replace(/<p><\/p>/g, '<br/>')
-							.replace(/ {2,}/g, (m) => m.replace(/ /g, '\u00a0'))
-					)
-					.replace(/\u00a0/g, ' ');
 
-				if (!preserveBreaks) {
-					newValue = newValue.replace(/<br\/>/g, '');
-				}
+				if (!raw) {
+					let newValue = turndownService
+						.turndown(
+							editor
+								.getHTML()
+								.replace(/<p><\/p>/g, '<br/>')
+								.replace(/ {2,}/g, (m) => m.replace(/ /g, '\u00a0'))
+						)
+						.replace(/\u00a0/g, ' ');
+
+					if (!preserveBreaks) {
+						newValue = newValue.replace(/<br\/>/g, '');
+					}
 
-				if (value !== newValue) {
-					value = newValue;
+					if (value !== newValue) {
+						value = newValue;
 
-					// check if the node is paragraph as well
-					if (editor.isActive('paragraph')) {
-						if (value === '') {
-							editor.commands.clearContent();
+						// check if the node is paragraph as well
+						if (editor.isActive('paragraph')) {
+							if (value === '') {
+								editor.commands.clearContent();
+							}
 						}
 					}
+				} else {
+					value = editor.getHTML();
 				}
 			},
 			editorProps: {
@@ -340,21 +351,30 @@
 	// Update the editor content if the external `value` changes
 	$: if (
 		editor &&
-		value !==
-			turndownService
-				.turndown(
-					(preserveBreaks
-						? editor.getHTML().replace(/<p><\/p>/g, '<br/>')
-						: editor.getHTML()
-					).replace(/ {2,}/g, (m) => m.replace(/ /g, '\u00a0'))
-				)
-				.replace(/\u00a0/g, ' ')
+		(raw
+			? value !== editor.getHTML()
+			: value !==
+				turndownService
+					.turndown(
+						(preserveBreaks
+							? editor.getHTML().replace(/<p><\/p>/g, '<br/>')
+							: editor.getHTML()
+						).replace(/ {2,}/g, (m) => m.replace(/ /g, '\u00a0'))
+					)
+					.replace(/\u00a0/g, ' '))
 	) {
-		editor.commands.setContent(
-			marked.parse(value.replaceAll(`\n<br/>`, `<br/>`), {
-				breaks: false
-			})
-		); // Update editor content
+		if (raw) {
+			editor.commands.setContent(value);
+		} else {
+			preserveBreaks
+				? editor.commands.setContent(value)
+				: editor.commands.setContent(
+						marked.parse(value.replaceAll(`\n<br/>`, `<br/>`), {
+							breaks: false
+						})
+					); // Update editor content
+		}
+
 		selectTemplate();
 	}
 </script>

+ 23 - 0
src/lib/components/icons/Home.svelte

@@ -0,0 +1,23 @@
+<script lang="ts">
+	export let className = 'size-4';
+	export let strokeWidth = '1.5';
+</script>
+
+<svg
+	stroke-width={strokeWidth}
+	stroke="currentColor"
+	class={className}
+	aria-hidden="true"
+	xmlns="http://www.w3.org/2000/svg"
+	fill="none"
+	width="24"
+	height="24"
+	viewBox="0 0 22 22"
+>
+	<path
+		stroke="currentColor"
+		stroke-linecap="round"
+		stroke-linejoin="round"
+		d="m4 12 8-8 8 8M6 10.5V19a1 1 0 0 0 1 1h3v-3a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v3h3a1 1 0 0 0 1-1v-8.5"
+	/>
+</svg>

+ 29 - 2
src/lib/components/layout/Sidebar.svelte

@@ -57,6 +57,7 @@
 	import ChannelModal from './Sidebar/ChannelModal.svelte';
 	import ChannelItem from './Sidebar/ChannelItem.svelte';
 	import PencilSquare from '../icons/PencilSquare.svelte';
+	import Home from '../icons/Home.svelte';
 
 	const BREAKPOINT = 768;
 
@@ -536,10 +537,36 @@
 			</a>
 		</div>
 
+		<!-- {#if $user?.role === 'admin'}
+			<div class="px-1.5 flex justify-center text-gray-800 dark:text-gray-200">
+				<a
+					class="flex-grow flex items-center space-x-3 rounded-lg px-2 py-[7px] hover:bg-gray-100 dark:hover:bg-gray-900 transition"
+					href="/home"
+					on:click={() => {
+						selectedChatId = null;
+						chatId.set('');
+
+						if ($mobile) {
+							showSidebar.set(false);
+						}
+					}}
+					draggable="false"
+				>
+					<div class="self-center">
+						<Home strokeWidth="2" className="size-[1.1rem]" />
+					</div>
+
+					<div class="flex self-center translate-y-[0.5px]">
+						<div class=" self-center font-medium text-sm font-primary">{$i18n.t('Home')}</div>
+					</div>
+				</a>
+			</div>
+		{/if} -->
+
 		{#if $user?.role === 'admin' || $user?.permissions?.workspace?.models || $user?.permissions?.workspace?.knowledge || $user?.permissions?.workspace?.prompts || $user?.permissions?.workspace?.tools}
 			<div class="px-1.5 flex justify-center text-gray-800 dark:text-gray-200">
 				<a
-					class="flex-grow flex space-x-3 rounded-lg px-2 py-[7px] hover:bg-gray-100 dark:hover:bg-gray-900 transition"
+					class="flex-grow flex items-center space-x-3 rounded-lg px-2 py-[7px] hover:bg-gray-100 dark:hover:bg-gray-900 transition"
 					href="/workspace"
 					on:click={() => {
 						selectedChatId = null;
@@ -568,7 +595,7 @@
 						</svg>
 					</div>
 
-					<div class="flex self-center">
+					<div class="flex self-center translate-y-[0.5px]">
 						<div class=" self-center font-medium text-sm font-primary">{$i18n.t('Workspace')}</div>
 					</div>
 				</a>

+ 2 - 2
src/lib/components/playground/Completions.svelte

@@ -6,7 +6,7 @@
 
 	import { WEBUI_BASE_URL } from '$lib/constants';
 	import { WEBUI_NAME, config, user, models, settings, showSidebar } from '$lib/stores';
-	import { generateOpenAIChatCompletion } from '$lib/apis/openai';
+	import { chatCompletion } from '$lib/apis/openai';
 
 	import { splitStream } from '$lib/utils';
 	import Selector from '$lib/components/chat/ModelSelector/Selector.svelte';
@@ -40,7 +40,7 @@
 	const textCompletionHandler = async () => {
 		const model = $models.find((model) => model.id === selectedModelId);
 
-		const [res, controller] = await generateOpenAIChatCompletion(
+		const [res, controller] = await chatCompletion(
 			localStorage.token,
 			{
 				model: model.id,

+ 2 - 1
src/lib/components/playground/Notes.svelte

@@ -42,9 +42,10 @@
 
 		<div class=" flex-1 w-full h-full">
 			<RichTextInput
-				className=" input-prose-sm"
+				className="input-prose-sm"
 				bind:value={content}
 				placeholder={$i18n.t('Write something...')}
+				preserveBreaks={true}
 			/>
 		</div>
 	</div>

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "مفتاح واجهة برمجة تطبيقات البحث الشجاع",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "تجاوز التحقق من SSL للموقع",
+	"Calendar": "",
 	"Call": "",
 	"Call feature is not supported when using Web STT engine": "",
 	"Camera": "",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "",
 	"Enter Searxng Query URL": "أدخل عنوان URL لاستعلام Searxng",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "أدخل مفتاح واجهة برمجة تطبيقات Serper",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "أدخل مفتاح واجهة برمجة تطبيقات Serpstack",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "أخفاء",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "كيف استطيع مساعدتك اليوم؟",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "يُرجى إدخال طلبك هنا.",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "سبتمبر",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "مفتاح واجهة برمجة تطبيقات سيربر",
 	"Serply API Key": "",
 	"Serpstack API Key": "مفتاح واجهة برمجة تطبيقات Serpstack",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "(e.g. Tell me a fun fact) العناون",
 	"Title Auto-Generation": "توليد تلقائي للعنوان",
 	"Title cannot be an empty string.": "العنوان مطلوب",
+	"Title Generation": "",
 	"Title Generation Prompt": "موجه إنشاء العنوان",
 	"TLS": "",
 	"To access the available model names for downloading,": "للوصول إلى أسماء الموديلات المتاحة للتنزيل،",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Смел ключ за API за търсене",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "Изключване на SSL проверката за сайтове",
+	"Calendar": "",
 	"Call": "",
 	"Call feature is not supported when using Web STT engine": "",
 	"Camera": "",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "",
 	"Enter Searxng Query URL": "Въведете URL адреса на заявката на Searxng",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Въведете Serper API ключ",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Въведете Serpstack API ключ",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "Скрий",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "Как мога да ви помогна днес?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "Изпращане на съобщение",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "Септември",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Serper API ключ",
 	"Serply API Key": "",
 	"Serpstack API Key": "Serpstack API ключ",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Заглавие (напр. Моля, кажете ми нещо забавно)",
 	"Title Auto-Generation": "Автоматично Генериране на Заглавие",
 	"Title cannot be an empty string.": "Заглавието не може да бъде празно.",
+	"Title Generation": "",
 	"Title Generation Prompt": "Промпт за Генериране на Заглавие",
 	"TLS": "",
 	"To access the available model names for downloading,": "За да получите достъп до наличните имена на модели за изтегляне,",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "সাহসী অনুসন্ধান API কী",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "ওয়েবসাইটের জন্য SSL যাচাই বাতিল করুন",
+	"Calendar": "",
 	"Call": "",
 	"Call feature is not supported when using Web STT engine": "",
 	"Camera": "",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "",
 	"Enter Searxng Query URL": "Searxng ক্যোয়ারী URL লিখুন",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Serper API কী লিখুন",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Serpstack API কী লিখুন",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "লুকান",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "আপনাকে আজ কিভাবে সাহায্য করতে পারি?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "মেসেজ পাঠান",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "সেপ্টেম্বর",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Serper API Key",
 	"Serply API Key": "",
 	"Serpstack API Key": "Serpstack API Key",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "শিরোনাম (একটি উপস্থিতি বিবরণ জানান)",
 	"Title Auto-Generation": "স্বয়ংক্রিয় শিরোনামগঠন",
 	"Title cannot be an empty string.": "শিরোনাম অবশ্যই একটি পাশাপাশি শব্দ হতে হবে।",
+	"Title Generation": "",
 	"Title Generation Prompt": "শিরোনামগঠন প্রম্পট",
 	"TLS": "",
 	"To access the available model names for downloading,": "ডাউনলোডের জন্য এভেইলএবল মডেলের নামগুলো এক্সেস করতে,",

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

@@ -126,6 +126,7 @@
 	"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": "",
 	"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",
@@ -386,6 +387,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 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",
@@ -513,6 +516,7 @@
 	"Hex Color": "Color hexadecimal",
 	"Hex Color - Leave empty for default color": "Color hexadecimal - Deixar buit per a color per defecte",
 	"Hide": "Amaga",
+	"Home": "",
 	"Host": "Servidor",
 	"How can I help you today?": "Com et puc ajudar avui?",
 	"How would you rate this response?": "Com avaluaries aquesta resposta?",
@@ -866,6 +870,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": "",
 	"Serper API Key": "Clau API de Serper",
 	"Serply API Key": "Clau API de Serply",
 	"Serpstack API Key": "Clau API de Serpstack",
@@ -978,6 +984,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 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,",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "",
+	"Calendar": "",
 	"Call": "",
 	"Call feature is not supported when using Web STT engine": "",
 	"Camera": "",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "",
 	"Enter Searxng Query URL": "",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "Tagoa",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "Unsaon nako pagtabang kanimo karon?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "Magpadala ug mensahe",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "",
 	"Serply API Key": "",
 	"Serpstack API Key": "",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "Awtomatikong paghimo sa titulo",
 	"Title cannot be an empty string.": "",
+	"Title Generation": "",
 	"Title Generation Prompt": "Madasig nga henerasyon sa titulo",
 	"TLS": "",
 	"To access the available model names for downloading,": "Aron ma-access ang mga ngalan sa modelo nga ma-download,",

+ 7 - 0
src/lib/i18n/locales/cs-CZ/translation.json

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Klíč API pro Brave Search",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "Obcházení ověření SSL pro webové stránky",
+	"Calendar": "",
 	"Call": "Volání",
 	"Call feature is not supported when using Web STT engine": "Funkce pro volání není podporována při použití Web STT engine.",
 	"Camera": "Kamera",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "Zadejte vyhledávací stroj SearchApi",
 	"Enter Searxng Query URL": "Zadejte URL dotazu Searxng",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Zadejte Serper API klíč",
 	"Enter Serply API Key": "Zadejte API klíč pro Serply",
 	"Enter Serpstack API Key": "Zadejte klíč API pro Serpstack",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "Schovej",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "Jak vám mohu dnes pomoci?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "Odeslat zprávu",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "Odešle `stream_options: { include_usage: true }` v žádosti. Podporovaní poskytovatelé vrátí informace o využití tokenů v odpovědi, když je tato možnost nastavena.",
 	"September": "Září",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Klíč API pro Serper",
 	"Serply API Key": "Serply API klíč",
 	"Serpstack API Key": "Klíč API pro Serpstack",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Název (např. Řekni mi zajímavost)",
 	"Title Auto-Generation": "Automatické generování názvu",
 	"Title cannot be an empty string.": "Název nemůže být prázdným řetězcem.",
+	"Title Generation": "",
 	"Title Generation Prompt": "Generování názvu promptu",
 	"TLS": "",
 	"To access the available model names for downloading,": "Pro získání dostupných názvů modelů ke stažení,",

+ 7 - 0
src/lib/i18n/locales/da-DK/translation.json

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Brave Search API nøgle",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "Forbigå SSL verifikation på websider",
+	"Calendar": "",
 	"Call": "Opkald",
 	"Call feature is not supported when using Web STT engine": "Opkaldsfunktion er ikke understøttet for Web STT engine",
 	"Camera": "Kamera",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "Indtast SearchApi-engine",
 	"Enter Searxng Query URL": "Indtast Searxng-forespørgsels-URL",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Indtast Serper API-nøgle",
 	"Enter Serply API Key": "Indtast Serply API-nøgle",
 	"Enter Serpstack API Key": "Indtast Serpstack API-nøgle",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "Skjul",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "Hvordan kan jeg hjælpe dig i dag?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "Send besked",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "Sender `stream_options: { include_usage: true }` i forespørgslen.\nUnderstøttede udbydere vil returnere tokenforbrugsinformation i svaret, når det er indstillet.",
 	"September": "September",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Serper API-nøgle",
 	"Serply API Key": "Serply API-nøgle",
 	"Serpstack API Key": "Serpstack API-nøgle",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Titel (f.eks. Fortæl mig en sjov kendsgerning)",
 	"Title Auto-Generation": "Automatisk titelgenerering",
 	"Title cannot be an empty string.": "Titel kan ikke være en tom streng.",
+	"Title Generation": "",
 	"Title Generation Prompt": "Prompt til titelgenerering",
 	"TLS": "",
 	"To access the available model names for downloading,": "For at få adgang til de tilgængelige modelnavne til download,",

+ 7 - 0
src/lib/i18n/locales/de-DE/translation.json

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Brave Search API-Schlüssel",
 	"By {{name}}": "Von {{name}}",
 	"Bypass SSL verification for Websites": "SSL-Überprüfung für Webseiten umgehen",
+	"Calendar": "",
 	"Call": "Anrufen",
 	"Call feature is not supported when using Web STT engine": "Die Anruffunktion wird nicht unterstützt, wenn die Web-STT-Engine verwendet wird.",
 	"Camera": "Kamera",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "Geben Sie die SearchApi-Engine ein",
 	"Enter Searxng Query URL": "Geben Sie die Searxng-Abfrage-URL ein",
 	"Enter Seed": "Geben Sie den Seed ein",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Geben Sie den Serper-API-Schlüssel ein",
 	"Enter Serply API Key": "Geben Sie den",
 	"Enter Serpstack API Key": "Geben Sie den Serpstack-API-Schlüssel ein",
@@ -513,6 +516,7 @@
 	"Hex Color": "Hex-Farbe",
 	"Hex Color - Leave empty for default color": "Hex-Farbe - Leer lassen für Standardfarbe",
 	"Hide": "Verbergen",
+	"Home": "",
 	"Host": "Host",
 	"How can I help you today?": "Wie kann ich Ihnen heute helfen?",
 	"How would you rate this response?": "Wie würden Sie diese Antwort bewerten?",
@@ -866,6 +870,8 @@
 	"Send message": "Nachricht senden",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "Sendet `stream_options: { include_usage: true }` in der Anfrage.\nUnterstützte Anbieter geben Token-Nutzungsinformationen in der Antwort zurück, wenn dies festgelegt ist.",
 	"September": "September",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Serper-API-Schlüssel",
 	"Serply API Key": "Serply-API-Schlüssel",
 	"Serpstack API Key": "Serpstack-API-Schlüssel",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Titel (z. B. Erzähl mir einen lustigen Fakt)",
 	"Title Auto-Generation": "Unterhaltungstitel automatisch generieren",
 	"Title cannot be an empty string.": "Titel darf nicht leer sein.",
+	"Title Generation": "",
 	"Title Generation Prompt": "Prompt für Titelgenerierung",
 	"TLS": "TLS",
 	"To access the available model names for downloading,": "Um auf die verfügbaren Modellnamen zuzugreifen,",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "",
+	"Calendar": "",
 	"Call": "",
 	"Call feature is not supported when using Web STT engine": "",
 	"Camera": "",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "",
 	"Enter Searxng Query URL": "",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "Hide",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "How can I halp u today?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "Send message very send",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "",
 	"Serply API Key": "",
 	"Serpstack API Key": "",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "Title Auto-Generation much auto-gen",
 	"Title cannot be an empty string.": "",
+	"Title Generation": "",
 	"Title Generation Prompt": "Title Generation Prompt very prompt",
 	"TLS": "",
 	"To access the available model names for downloading,": "To access the available model names for downloading, much access",

+ 7 - 0
src/lib/i18n/locales/el-GR/translation.json

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Κλειδί API Brave Search",
 	"By {{name}}": "Από {{name}}",
 	"Bypass SSL verification for Websites": "Παράκαμψη επαλήθευσης SSL για Ιστότοπους",
+	"Calendar": "",
 	"Call": "Κλήση",
 	"Call feature is not supported when using Web STT engine": "Η λειτουργία κλήσης δεν υποστηρίζεται όταν χρησιμοποιείται η μηχανή Web STT",
 	"Camera": "Κάμερα",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "Εισάγετε τη Μηχανή SearchApi",
 	"Enter Searxng Query URL": "Εισάγετε το URL Ερώτησης Searxng",
 	"Enter Seed": "Εισάγετε το Seed",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Εισάγετε το Κλειδί API Serper",
 	"Enter Serply API Key": "Εισάγετε το Κλειδί API Serply",
 	"Enter Serpstack API Key": "Εισάγετε το Κλειδί API Serpstack",
@@ -513,6 +516,7 @@
 	"Hex Color": "Χρώμα Hex",
 	"Hex Color - Leave empty for default color": "Χρώμα Hex - Αφήστε κενό για προεπιλεγμένο χρώμα",
 	"Hide": "Απόκρυψη",
+	"Home": "",
 	"Host": "Διακομιστής",
 	"How can I help you today?": "Πώς μπορώ να σας βοηθήσω σήμερα;",
 	"How would you rate this response?": "Πώς θα βαθμολογούσατε αυτή την απάντηση;",
@@ -866,6 +870,8 @@
 	"Send message": "Αποστολή μηνύματος",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "Στέλνει `stream_options: { include_usage: true }` στο αίτημα.\nΟι υποστηριζόμενοι πάροχοι θα επιστρέψουν πληροφορίες χρήσης token στην απάντηση όταν ρυθμιστεί.",
 	"September": "Σεπτέμβριος",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Κλειδί API Serper",
 	"Serply API Key": "Κλειδί API Serply",
 	"Serpstack API Key": "Κλειδί API Serpstack",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Τίτλος (π.χ. Πες μου ένα διασκεδαστικό γεγονός)",
 	"Title Auto-Generation": "Αυτόματη Γενιά Τίτλων",
 	"Title cannot be an empty string.": "Ο τίτλος δεν μπορεί να είναι κενή συμβολοσειρά.",
+	"Title Generation": "",
 	"Title Generation Prompt": "Προτροπή Δημιουργίας Τίτλου",
 	"TLS": "TLS",
 	"To access the available model names for downloading,": "Για να αποκτήσετε πρόσβαση στα διαθέσιμα ονόματα μοντέλων για λήψη,",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "",
+	"Calendar": "",
 	"Call": "",
 	"Call feature is not supported when using Web STT engine": "",
 	"Camera": "",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "",
 	"Enter Searxng Query URL": "",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "",
 	"Serply API Key": "",
 	"Serpstack API Key": "",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "",
 	"Title cannot be an empty string.": "",
+	"Title Generation": "",
 	"Title Generation Prompt": "",
 	"TLS": "",
 	"To access the available model names for downloading,": "",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "",
+	"Calendar": "",
 	"Call": "",
 	"Call feature is not supported when using Web STT engine": "",
 	"Camera": "",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "",
 	"Enter Searxng Query URL": "",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "",
 	"Serply API Key": "",
 	"Serpstack API Key": "",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "",
 	"Title cannot be an empty string.": "",
+	"Title Generation": "",
 	"Title Generation Prompt": "",
 	"TLS": "",
 	"To access the available model names for downloading,": "",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Clave de API de Brave Search",
 	"By {{name}}": "Por {{name}}",
 	"Bypass SSL verification for Websites": "Desactivar la verificación SSL para sitios web",
+	"Calendar": "",
 	"Call": "Llamada",
 	"Call feature is not supported when using Web STT engine": "La funcionalidad de llamada no puede usarse junto con el motor de STT Web",
 	"Camera": "Cámara",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "Ingrese el motor de SearchApi",
 	"Enter Searxng Query URL": "Introduzca la URL de consulta de Searxng",
 	"Enter Seed": "Ingrese la semilla",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Ingrese la clave API de Serper",
 	"Enter Serply API Key": "Ingrese la clave API de Serply",
 	"Enter Serpstack API Key": "Ingrese la clave API de Serpstack",
@@ -513,6 +516,7 @@
 	"Hex Color": "Color Hex",
 	"Hex Color - Leave empty for default color": "Color Hex - Deja vacío para el color predeterminado",
 	"Hide": "Esconder",
+	"Home": "",
 	"Host": "Host",
 	"How can I help you today?": "¿Cómo puedo ayudarte hoy?",
 	"How would you rate this response?": "¿Cómo calificarías esta respuesta?",
@@ -866,6 +870,8 @@
 	"Send message": "Enviar Mensaje",
 	"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 }` en la solicitud.\nLos proveedores admitidos devolverán información de uso del token en la respuesta cuando se establezca.",
 	"September": "Septiembre",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Clave API de Serper",
 	"Serply API Key": "Clave API de Serply",
 	"Serpstack API Key": "Clave API de Serpstack",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Título (por ejemplo, cuéntame una curiosidad)",
 	"Title Auto-Generation": "Generación automática de títulos",
 	"Title cannot be an empty string.": "El título no puede ser una cadena vacía.",
+	"Title Generation": "",
 	"Title Generation Prompt": "Prompt de generación de título",
 	"TLS": "TLS",
 	"To access the available model names for downloading,": "Para acceder a los nombres de modelos disponibles para descargar,",

+ 7 - 0
src/lib/i18n/locales/eu-ES/translation.json

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Brave Bilaketa API Gakoa",
 	"By {{name}}": "{{name}}-k",
 	"Bypass SSL verification for Websites": "Saihestu SSL egiaztapena Webguneentzat",
+	"Calendar": "",
 	"Call": "Deia",
 	"Call feature is not supported when using Web STT engine": "Dei funtzioa ez da onartzen Web STT motorra erabiltzean",
 	"Camera": "Kamera",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "Sartu SearchApi Motorea",
 	"Enter Searxng Query URL": "Sartu Searxng Kontsulta URLa",
 	"Enter Seed": "Sartu Hazia",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Sartu Serper API Gakoa",
 	"Enter Serply API Key": "Sartu Serply API Gakoa",
 	"Enter Serpstack API Key": "Sartu Serpstack API Gakoa",
@@ -513,6 +516,7 @@
 	"Hex Color": "Hex Kolorea",
 	"Hex Color - Leave empty for default color": "Hex Kolorea - Utzi hutsik kolore lehenetsia erabiltzeko",
 	"Hide": "Ezkutatu",
+	"Home": "",
 	"Host": "Ostalaria",
 	"How can I help you today?": "Zertan lagun zaitzaket gaur?",
 	"How would you rate this response?": "Nola baloratuko zenuke erantzun hau?",
@@ -866,6 +870,8 @@
 	"Send message": "Bidali mezua",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "Bidaltzen du `stream_options: { include_usage: true }` eskaeran.\nOnartutako hornitzaileek token erabileraren informazioa itzuliko dute erantzunean ezarrita dagoenean.",
 	"September": "Iraila",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Serper API gakoa",
 	"Serply API Key": "Serply API gakoa",
 	"Serpstack API Key": "Serpstack API gakoa",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Izenburua (adib. Kontatu datu dibertigarri bat)",
 	"Title Auto-Generation": "Izenburuen sorrera automatikoa",
 	"Title cannot be an empty string.": "Izenburua ezin da kate hutsa izan.",
+	"Title Generation": "",
 	"Title Generation Prompt": "Izenburua sortzeko prompta",
 	"TLS": "TLS",
 	"To access the available model names for downloading,": "Deskargatzeko eskuragarri dauden modelo izenak atzitzeko,",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "کلید API جستجوی شجاع",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "عبور از تأیید SSL برای وب سایت ها",
+	"Calendar": "",
 	"Call": "",
 	"Call feature is not supported when using Web STT engine": "",
 	"Camera": "دوربین",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "",
 	"Enter Searxng Query URL": "نشانی وب پرسوجوی Searxng را وارد کنید",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "کلید API Serper را وارد کنید",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "کلید API Serpstack را وارد کنید",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "پنهان\u200cسازی",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "امروز چطور می توانم کمک تان کنم؟",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "ارسال پیام",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "سپتامبر",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "کلید API Serper",
 	"Serply API Key": "",
 	"Serpstack API Key": "کلید API Serpstack",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "عنوان (برای مثال: به من بگوید چیزی که دوست دارید)",
 	"Title Auto-Generation": "تولید خودکار عنوان",
 	"Title cannot be an empty string.": "عنوان نمی تواند یک رشته خالی باشد.",
+	"Title Generation": "",
 	"Title Generation Prompt": "پرامپت تولید عنوان",
 	"TLS": "",
 	"To access the available model names for downloading,": "برای دسترسی به نام مدل های موجود برای دانلود،",

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

@@ -126,6 +126,7 @@
 	"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",
 	"Camera": "Kamera",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "Kirjoita SearchApi-moottori",
 	"Enter Searxng Query URL": "Kirjoita Searxng-kyselyn URL-osoite",
 	"Enter Seed": "Kirjoita siemenluku",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Kirjoita Serper API -avain",
 	"Enter Serply API Key": "Kirjoita Serply API -avain",
 	"Enter Serpstack API Key": "Kirjoita Serpstack API -avain",
@@ -513,6 +516,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": "",
 	"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?",
@@ -866,6 +870,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": "",
 	"Serper API Key": "Serper API -avain",
 	"Serply API Key": "Serply API -avain",
 	"Serpstack API Key": "Serpstack API -avain",
@@ -978,6 +984,7 @@
 	"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 Prompt": "Otsikon luontikehote",
 	"TLS": "TLS",
 	"To access the available model names for downloading,": "Päästäksesi käsiksi ladattavissa oleviin mallinimiin,",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Clé API Brave Search",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "Bypasser la vérification SSL pour les sites web",
+	"Calendar": "",
 	"Call": "Appeler",
 	"Call feature is not supported when using Web STT engine": "La fonction d'appel n'est pas prise en charge lors de l'utilisation du moteur Web STT",
 	"Camera": "Appareil photo",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "",
 	"Enter Searxng Query URL": "Entrez l'URL de la requête Searxng",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Entrez la clé API Serper",
 	"Enter Serply API Key": "Entrez la clé API Serply",
 	"Enter Serpstack API Key": "Entrez la clé API Serpstack",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "Cacher",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "Comment puis-je vous être utile aujourd'hui ?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "Envoyer un message",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "Septembre",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Clé API Serper",
 	"Serply API Key": "Clé API Serply",
 	"Serpstack API Key": "Clé API Serpstack",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Titre (par ex. raconte-moi un fait amusant)",
 	"Title Auto-Generation": "Génération automatique de titres",
 	"Title cannot be an empty string.": "Le titre ne peut pas être une chaîne de caractères vide.",
+	"Title Generation": "",
 	"Title Generation Prompt": "Prompt de génération de titre",
 	"TLS": "",
 	"To access the available model names for downloading,": "Pour accéder aux noms des modèles disponibles en téléchargement,",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Clé API Brave Search",
 	"By {{name}}": "Par {{name}}",
 	"Bypass SSL verification for Websites": "Bypasser la vérification SSL pour les sites web",
+	"Calendar": "",
 	"Call": "Appeler",
 	"Call feature is not supported when using Web STT engine": "La fonction d'appel n'est pas prise en charge lors de l'utilisation du moteur Web STT",
 	"Camera": "Appareil photo",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "Entrez le moteur de recherche SearchApi",
 	"Enter Searxng Query URL": "Entrez l'URL de la requête Searxng",
 	"Enter Seed": "Entrez Seed",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Entrez la clé API Serper",
 	"Enter Serply API Key": "Entrez la clé API Serply",
 	"Enter Serpstack API Key": "Entrez la clé API Serpstack",
@@ -513,6 +516,7 @@
 	"Hex Color": "Couleur Hex",
 	"Hex Color - Leave empty for default color": "Couleur Hex - Laissez vide pour la couleur par défaut",
 	"Hide": "Cacher",
+	"Home": "",
 	"Host": "Hôte",
 	"How can I help you today?": "Comment puis-je vous aider aujourd'hui ?",
 	"How would you rate this response?": "Comment évalueriez-vous cette réponse ?",
@@ -866,6 +870,8 @@
 	"Send message": "Envoyer un message",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "Envoie `stream_options: { include_usage: true }` dans la requête.\nLes fournisseurs pris en charge renverront des informations sur l'utilisation des tokens dans la réponse lorsque cette option est activée.",
 	"September": "Septembre",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Clé API Serper",
 	"Serply API Key": "Clé API Serply",
 	"Serpstack API Key": "Clé API Serpstack",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Titre (par ex. raconte-moi un fait amusant)",
 	"Title Auto-Generation": "Génération automatique des titres",
 	"Title cannot be an empty string.": "Le titre ne peut pas être une chaîne de caractères vide.",
+	"Title Generation": "",
 	"Title Generation Prompt": "Prompt de génération de titre",
 	"TLS": "TLS",
 	"To access the available model names for downloading,": "Pour accéder aux noms des modèles disponibles,",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "מפתח API של חיפוש אמיץ",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "עקוף אימות SSL עבור אתרים",
+	"Calendar": "",
 	"Call": "",
 	"Call feature is not supported when using Web STT engine": "",
 	"Camera": "",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "",
 	"Enter Searxng Query URL": "הזן כתובת URL של שאילתת Searxng",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "הזן מפתח API של Serper",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "הזן מפתח API של Serpstack",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "הסתר",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "כיצד אוכל לעזור לך היום?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "שלח הודעה",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "ספטמבר",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "מפתח Serper API",
 	"Serply API Key": "",
 	"Serpstack API Key": "מפתח API של Serpstack",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "שם (לדוגמה: תרגום)",
 	"Title Auto-Generation": "יצירת שם אוטומטית",
 	"Title cannot be an empty string.": "שם לא יכול להיות מחרוזת ריקה.",
+	"Title Generation": "",
 	"Title Generation Prompt": "שאלה ליצירת שם",
 	"TLS": "",
 	"To access the available model names for downloading,": "כדי לגשת לשמות הדגמים הזמינים להורדה,",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Brave सर्च एपीआई कुंजी",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "वेबसाइटों के लिए SSL सुनिश्चिती को छोड़ें",
+	"Calendar": "",
 	"Call": "",
 	"Call feature is not supported when using Web STT engine": "",
 	"Camera": "",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "",
 	"Enter Searxng Query URL": "Searxng क्वेरी URL दर्ज करें",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Serper API कुंजी दर्ज करें",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "सर्पस्टैक एपीआई कुंजी दर्ज करें",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "छुपाएं",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "आज मैं आपकी कैसे मदद कर सकता हूँ?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "मेसेज भेजें",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "सितंबर",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Serper API कुंजी",
 	"Serply API Key": "",
 	"Serpstack API Key": "सर्पस्टैक एपीआई कुंजी",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "शीर्षक (उदा. मुझे एक मज़ेदार तथ्य बताएं)",
 	"Title Auto-Generation": "शीर्षक ऑटो-जेनरेशन",
 	"Title cannot be an empty string.": "शीर्षक नहीं खाली पाठ हो सकता है.",
+	"Title Generation": "",
 	"Title Generation Prompt": "शीर्षक जनरेशन प्रॉम्प्ट",
 	"TLS": "",
 	"To access the available model names for downloading,": "डाउनलोड करने के लिए उपलब्ध मॉडल नामों तक पहुंचने के लिए,",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Brave tražilica - API ključ",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "Zaobiđi SSL provjeru za web stranice",
+	"Calendar": "",
 	"Call": "Poziv",
 	"Call feature is not supported when using Web STT engine": "Značajka poziva nije podržana kada se koristi Web STT mehanizam",
 	"Camera": "Kamera",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "",
 	"Enter Searxng Query URL": "Unesite URL upita Searxng",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Unesite Serper API ključ",
 	"Enter Serply API Key": "Unesite Serply API ključ",
 	"Enter Serpstack API Key": "Unesite Serpstack API ključ",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "Sakrij",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "Kako vam mogu pomoći danas?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "Pošalji poruku",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "Rujan",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Serper API ključ",
 	"Serply API Key": "Serply API ključ",
 	"Serpstack API Key": "Serpstack API API ključ",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Naslov (npr. Reci mi zanimljivost)",
 	"Title Auto-Generation": "Automatsko generiranje naslova",
 	"Title cannot be an empty string.": "Naslov ne može biti prazni niz.",
+	"Title Generation": "",
 	"Title Generation Prompt": "Prompt za generiranje naslova",
 	"TLS": "",
 	"To access the available model names for downloading,": "Za pristup dostupnim nazivima modela za preuzimanje,",

+ 7 - 0
src/lib/i18n/locales/hu-HU/translation.json

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Brave Search API kulcs",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "SSL ellenőrzés kihagyása weboldalakhoz",
+	"Calendar": "",
 	"Call": "Hívás",
 	"Call feature is not supported when using Web STT engine": "A hívás funkció nem támogatott Web STT motor használatakor",
 	"Camera": "Kamera",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "Add meg a SearchApi motort",
 	"Enter Searxng Query URL": "Add meg a Searxng lekérdezési URL-t",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Add meg a Serper API kulcsot",
 	"Enter Serply API Key": "Add meg a Serply API kulcsot",
 	"Enter Serpstack API Key": "Add meg a Serpstack API kulcsot",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "Elrejtés",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "Hogyan segíthetek ma?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "Üzenet küldése",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "A kérésben elküldi a `stream_options: { include_usage: true }` opciót.\nA támogatott szolgáltatók token használati információt küldenek vissza a válaszban, ha be van állítva.",
 	"September": "Szeptember",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Serper API kulcs",
 	"Serply API Key": "Serply API kulcs",
 	"Serpstack API Key": "Serpstack API kulcs",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Cím (pl. Mondj egy érdekes tényt)",
 	"Title Auto-Generation": "Cím automatikus generálása",
 	"Title cannot be an empty string.": "A cím nem lehet üres karakterlánc.",
+	"Title Generation": "",
 	"Title Generation Prompt": "Cím generálási prompt",
 	"TLS": "",
 	"To access the available model names for downloading,": "A letölthető modellek nevének eléréséhez,",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Kunci API Pencarian Berani",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "Lewati verifikasi SSL untuk Situs Web",
+	"Calendar": "",
 	"Call": "Panggilan",
 	"Call feature is not supported when using Web STT engine": "Fitur panggilan tidak didukung saat menggunakan mesin Web STT",
 	"Camera": "Kamera",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "",
 	"Enter Searxng Query URL": "Masukkan URL Kueri Searxng",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Masukkan Kunci API Serper",
 	"Enter Serply API Key": "Masukkan Kunci API Serply",
 	"Enter Serpstack API Key": "Masukkan Kunci API Serpstack",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "Sembunyikan",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "Ada yang bisa saya bantu hari ini?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "Kirim pesan",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "September",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Kunci API Serper",
 	"Serply API Key": "Kunci API Serply",
 	"Serpstack API Key": "Kunci API Serpstack",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Judul (misalnya, Ceritakan sebuah fakta menarik)",
 	"Title Auto-Generation": "Pembuatan Judul Secara Otomatis",
 	"Title cannot be an empty string.": "Judul tidak boleh berupa string kosong.",
+	"Title Generation": "",
 	"Title Generation Prompt": "Perintah Pembuatan Judul",
 	"TLS": "",
 	"To access the available model names for downloading,": "Untuk mengakses nama model yang tersedia untuk diunduh,",

+ 7 - 0
src/lib/i18n/locales/ie-GA/translation.json

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Eochair API Cuardaigh Brave",
 	"By {{name}}": "Le {{name}}",
 	"Bypass SSL verification for Websites": "Seachbhachtar fíorú SSL do Láithreáin",
+	"Calendar": "",
 	"Call": "Glaoigh",
 	"Call feature is not supported when using Web STT engine": "Ní thacaítear le gné glaonna agus inneall Web STT á úsáid",
 	"Camera": "Ceamara",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "Cuir isteach Inneall SearchAPI",
 	"Enter Searxng Query URL": "Cuir isteach URL Ceist Searxng",
 	"Enter Seed": "Cuir isteach Síl",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Cuir isteach Eochair API Serper",
 	"Enter Serply API Key": "Cuir isteach Eochair API Serply",
 	"Enter Serpstack API Key": "Cuir isteach Eochair API Serpstack",
@@ -513,6 +516,7 @@
 	"Hex Color": "Dath Heics",
 	"Hex Color - Leave empty for default color": "Dath Heics - Fág folamh don dath réamhshocraithe",
 	"Hide": "Folaigh",
+	"Home": "",
 	"Host": "Óstach",
 	"How can I help you today?": "Conas is féidir liom cabhrú leat inniu?",
 	"How would you rate this response?": "Cad é mar a mheasfá an freagra seo?",
@@ -866,6 +870,8 @@
 	"Send message": "Seol teachtaireacht",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "Seolann `stream_options: { include_usage: true }` san iarratas.\nTabharfaidh soláthraithe a fhaigheann tacaíocht faisnéis úsáide chomharthaí ar ais sa fhreagra nuair a bheidh sé socraithe.",
 	"September": "Meán Fómhair",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Serper API Eochair",
 	"Serply API Key": "Eochair API Serply",
 	"Serpstack API Key": "Eochair API Serpstack",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Teideal (m.sh. inis dom fíric spraíúil)",
 	"Title Auto-Generation": "Teideal Auto-Generation",
 	"Title cannot be an empty string.": "Ní féidir leis an teideal a bheith ina teaghrán folamh.",
+	"Title Generation": "",
 	"Title Generation Prompt": "Leid Giniúint Teideal",
 	"TLS": "TLS",
 	"To access the available model names for downloading,": "Chun teacht ar na hainmneacha múnla atá ar fáil le híoslódáil,",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Chiave API di ricerca Brave",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "Aggira la verifica SSL per i siti web",
+	"Calendar": "",
 	"Call": "",
 	"Call feature is not supported when using Web STT engine": "",
 	"Camera": "",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "",
 	"Enter Searxng Query URL": "Immettere l'URL della query Searxng",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Inserisci la chiave API Serper",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Inserisci la chiave API Serpstack",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "Nascondi",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "Come posso aiutarti oggi?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "Invia messaggio",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "Settembre",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Chiave API Serper",
 	"Serply API Key": "",
 	"Serpstack API Key": "Chiave API Serpstack",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Titolo (ad esempio Dimmi un fatto divertente)",
 	"Title Auto-Generation": "Generazione automatica del titolo",
 	"Title cannot be an empty string.": "Il titolo non può essere una stringa vuota.",
+	"Title Generation": "",
 	"Title Generation Prompt": "Prompt di generazione del titolo",
 	"TLS": "",
 	"To access the available model names for downloading,": "Per accedere ai nomi dei modelli disponibili per il download,",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Brave Search APIキー",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "SSL 検証をバイパスする",
+	"Calendar": "",
 	"Call": "コール",
 	"Call feature is not supported when using Web STT engine": "",
 	"Camera": "カメラ",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "SearchApi Engineを入力してください。",
 	"Enter Searxng Query URL": "SearxngクエリURLを入力",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Serper APIキーの入力",
 	"Enter Serply API Key": "Serply API Keyを入力してください。",
 	"Enter Serpstack API Key": "Serpstack APIキーの入力",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "非表示",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "今日はどのようにお手伝いしましょうか?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "メッセージを送信",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "9月",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Serper APIキー",
 	"Serply API Key": "",
 	"Serpstack API Key": "Serpstack APIキー",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "タイトル (例: 楽しい事を教えて)",
 	"Title Auto-Generation": "タイトル自動生成",
 	"Title cannot be an empty string.": "タイトルは空文字列にできません。",
+	"Title Generation": "",
 	"Title Generation Prompt": "タイトル生成プロンプト",
 	"TLS": "",
 	"To access the available model names for downloading,": "ダウンロード可能なモデル名にアクセスするには、",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Brave Search API გასაღები",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "SSL-ის ვერიფიკაციის გააუქმება ვებსაიტებზე",
+	"Calendar": "",
 	"Call": "",
 	"Call feature is not supported when using Web STT engine": "",
 	"Camera": "",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "",
 	"Enter Searxng Query URL": "შეიყვანეთ Searxng Query URL",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "შეიყვანეთ Serper API Key",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "შეიყვანეთ Serpstack API Key",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "დამალვა",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "როგორ შემიძლია დაგეხმარო დღეს?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "შეტყობინების გაგზავნა",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "სექტემბერი",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Serper API Key",
 	"Serply API Key": "",
 	"Serpstack API Key": "Serpstack API Key",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "სათაური (მაგ. გაიხსნე რაღაც ხარისხი)",
 	"Title Auto-Generation": "სათაურის ავტო-გენერაცია",
 	"Title cannot be an empty string.": "სათაური ცარიელი ველი ვერ უნდა იყოს.",
+	"Title Generation": "",
 	"Title Generation Prompt": "სათაურის გენერაციის მოთხოვნა ",
 	"TLS": "",
 	"To access the available model names for downloading,": "ჩამოტვირთვისთვის ხელმისაწვდომი მოდელების სახელებზე წვდომისთვის",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Brave Search API 키",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "웹 사이트에 대한 SSL 검증 무시: ",
+	"Calendar": "",
 	"Call": "음성 기능",
 	"Call feature is not supported when using Web STT engine": "웹 STT 엔진 사용 시, 음성 기능은 지원되지 않습니다.",
 	"Camera": "카메라",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "SearchApi 엔진 입력",
 	"Enter Searxng Query URL": "Searxng 쿼리 URL 입력",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Serper API 키 입력",
 	"Enter Serply API Key": "Serply API 키 입력",
 	"Enter Serpstack API Key": "Serpstack API 키 입력",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "숨기기",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "오늘 어떻게 도와드릴까요?",
 	"How would you rate this response?": "이 응답을 어떻게 평가하시겠어요?",
@@ -866,6 +870,8 @@
 	"Send message": "메시지 보내기",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "'stream_options: { include_usage: true }' 요청 보내기 \n지원되는 제공자가 토큰 사용 정보를 응답할 예정입니다",
 	"September": "9월",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Serper API 키",
 	"Serply API Key": "Serply API 키",
 	"Serpstack API Key": "Serpstack API 키",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "제목 (예: 재미있는 사실을 알려주세요)",
 	"Title Auto-Generation": "제목 자동 생성",
 	"Title cannot be an empty string.": "제목은 빈 문자열일 수 없습니다.",
+	"Title Generation": "",
 	"Title Generation Prompt": "제목 생성 프롬프트",
 	"TLS": "",
 	"To access the available model names for downloading,": "다운로드 가능한 모델명을 확인하려면,",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Brave Search API raktas",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "Išvengti SSL patikros puslapiams",
+	"Calendar": "",
 	"Call": "Skambinti",
 	"Call feature is not supported when using Web STT engine": "Skambučio funkcionalumas neleidžiamas naudojant Web STT variklį",
 	"Camera": "Kamera",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "",
 	"Enter Searxng Query URL": "Įveskite Searxng Query nuorodą",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Įveskite Serper API raktą",
 	"Enter Serply API Key": "Įveskite Serply API raktą",
 	"Enter Serpstack API Key": "Įveskite Serpstack API raktą",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "Paslėpti",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "Kuo galėčiau Jums padėti ?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "Siųsti žinutę",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "rugsėjis",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Serper API raktas",
 	"Serply API Key": "Serply API raktas",
 	"Serpstack API Key": "Serpstach API raktas",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Pavadinimas",
 	"Title Auto-Generation": "Automatinis pavadinimų generavimas",
 	"Title cannot be an empty string.": "Pavadinimas negali būti tuščias",
+	"Title Generation": "",
 	"Title Generation Prompt": "Pavadinimo generavimo užklausa",
 	"TLS": "",
 	"To access the available model names for downloading,": "Tam, kad prieiti prie galimų parsisiųsti modelių",

+ 7 - 0
src/lib/i18n/locales/ms-MY/translation.json

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Kunci API Carian Brave",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "Pintas pengesahan SSL untuk Laman Web",
+	"Calendar": "",
 	"Call": "Hubungi",
 	"Call feature is not supported when using Web STT engine": "Ciri panggilan tidak disokong apabila menggunakan enjin Web STT",
 	"Camera": "Kamera",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "",
 	"Enter Searxng Query URL": "Masukkan URL 'Searxng Query'",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Masukkan Kunci API Serper",
 	"Enter Serply API Key": "Masukkan Kunci API Serply",
 	"Enter Serpstack API Key": "Masukkan Kunci API Serpstack",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "Sembunyi",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "Bagaimana saya boleh membantu anda hari ini?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "Hantar pesanan",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "September",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Kunci API Serper",
 	"Serply API Key": "Kunci API Serply",
 	"Serpstack API Key": "Kunci API Serpstack",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Tajuk (cth Beritahu saya fakta yang menyeronokkan)",
 	"Title Auto-Generation": "Penjanaan Auto Tajuk",
 	"Title cannot be an empty string.": "Tajuk tidak boleh menjadi rentetan kosong",
+	"Title Generation": "",
 	"Title Generation Prompt": "Gesaan Penjanaan Tajuk",
 	"TLS": "",
 	"To access the available model names for downloading,": "Untuk mengakses nama model yang tersedia untuk dimuat turun,",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "API-nøkkel for Brave Search",
 	"By {{name}}": "Etter {{name}}",
 	"Bypass SSL verification for Websites": "Omgå SSL-verifisering for nettsteder",
+	"Calendar": "",
 	"Call": "Ring",
 	"Call feature is not supported when using Web STT engine": "Ringefunksjonen støttes ikke når du bruker Web STT-motoren",
 	"Camera": "Kamera",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "Angi motor for SearchApi",
 	"Enter Searxng Query URL": "Angi spørrings-URL for Searxng",
 	"Enter Seed": "Angi Seed",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Angi API-nøkkel for Serper",
 	"Enter Serply API Key": "Angi API-nøkkel for Serply",
 	"Enter Serpstack API Key": "Angi API-nøkkel for Serpstack",
@@ -513,6 +516,7 @@
 	"Hex Color": "Hex-farge",
 	"Hex Color - Leave empty for default color": "Hex-farge – la stå tom for standard farge",
 	"Hide": "Skjul",
+	"Home": "",
 	"Host": "Host",
 	"How can I help you today?": "Hva kan jeg hjelpe deg med i dag?",
 	"How would you rate this response?": "Hvordan vurderer du dette svaret?",
@@ -866,6 +870,8 @@
 	"Send message": "Send melding",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "Sender `stream_options: { include_usage: true }` i forespørselen.\nStøttede leverandører returnerer informasjon i svaret om bruk av token når denne parameteren er angitt.",
 	"September": "september",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "API-nøkkel for Serper",
 	"Serply API Key": "API-nøkkel for Serply",
 	"Serpstack API Key": "API-nøkkel for Serpstack",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Tittel (f.eks. Fortell meg noe morsomt)",
 	"Title Auto-Generation": "Automatisk tittelgenerering",
 	"Title cannot be an empty string.": "Tittel kan ikke være en tom streng.",
+	"Title Generation": "",
 	"Title Generation Prompt": "Ledetekst for tittelgenerering",
 	"TLS": "TLS",
 	"To access the available model names for downloading,": "Hvis du vil ha tilgang til modellnavn tilgjengelige for nedlasting,",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Brave Search API-sleutel",
 	"By {{name}}": "Op {{name}}",
 	"Bypass SSL verification for Websites": "SSL-verificatie omzeilen voor websites",
+	"Calendar": "",
 	"Call": "Oproep",
 	"Call feature is not supported when using Web STT engine": "Belfunctie wordt niet ondersteund bij gebruik van de Web STT engine",
 	"Camera": "Camera",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "Voer SearchApi-Engine in",
 	"Enter Searxng Query URL": "Voer de URL van de Searxng-query in",
 	"Enter Seed": "Voer Seed in",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Voer de Serper API-sleutel in",
 	"Enter Serply API Key": "Voer Serply API-sleutel in",
 	"Enter Serpstack API Key": "Voer de Serpstack API-sleutel in",
@@ -513,6 +516,7 @@
 	"Hex Color": "Hex-kleur",
 	"Hex Color - Leave empty for default color": "Hex-kleur - laat leeg voor standaardkleur",
 	"Hide": "Verberg",
+	"Home": "",
 	"Host": "Host",
 	"How can I help you today?": "Hoe kan ik je vandaag helpen?",
 	"How would you rate this response?": "Hoe zou je dit antwoord beoordelen?",
@@ -866,6 +870,8 @@
 	"Send message": "Stuur bericht",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "Stuurt `stream_options: { include_usage: true }` in het verzoek. \nOndersteunde providers zullen informatie over tokengebruik in het antwoord terugsturen als dit aan staat.",
 	"September": "September",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Serper API-sleutel",
 	"Serply API Key": "Serply API-sleutel",
 	"Serpstack API Key": "Serpstack API-sleutel",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Titel (bv. Vertel me een leuke gebeurtenis)",
 	"Title Auto-Generation": "Titel Auto-Generatie",
 	"Title cannot be an empty string.": "Titel kan niet leeg zijn.",
+	"Title Generation": "",
 	"Title Generation Prompt": "Titel Generatie Prompt",
 	"TLS": "TLS",
 	"To access the available model names for downloading,": "Om de beschikbare modelnamen voor downloaden te openen,",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "ਬਹਾਦਰ ਖੋਜ API ਕੁੰਜੀ",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "ਵੈਬਸਾਈਟਾਂ ਲਈ SSL ਪ੍ਰਮਾਣਿਕਤਾ ਨੂੰ ਬਾਈਪਾਸ ਕਰੋ",
+	"Calendar": "",
 	"Call": "",
 	"Call feature is not supported when using Web STT engine": "",
 	"Camera": "",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "",
 	"Enter Searxng Query URL": "Searxng Query URL ਦਾਖਲ ਕਰੋ",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Serper API ਕੁੰਜੀ ਦਾਖਲ ਕਰੋ",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Serpstack API ਕੁੰਜੀ ਦਾਖਲ ਕਰੋ",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "ਲੁਕਾਓ",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "ਮੈਂ ਅੱਜ ਤੁਹਾਡੀ ਕਿਵੇਂ ਮਦਦ ਕਰ ਸਕਦਾ ਹਾਂ?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "ਸੁਨੇਹਾ ਭੇਜੋ",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "ਸਤੰਬਰ",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Serper API ਕੁੰਜੀ",
 	"Serply API Key": "",
 	"Serpstack API Key": "Serpstack API ਕੁੰਜੀ",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "ਸਿਰਲੇਖ (ਉਦਾਹਰਣ ਲਈ ਮੈਨੂੰ ਇੱਕ ਮਜ਼ੇਦਾਰ ਤੱਥ ਦੱਸੋ)",
 	"Title Auto-Generation": "ਸਿਰਲੇਖ ਆਟੋ-ਜਨਰੇਸ਼ਨ",
 	"Title cannot be an empty string.": "ਸਿਰਲੇਖ ਖਾਲੀ ਸਤਰ ਨਹੀਂ ਹੋ ਸਕਦਾ।",
+	"Title Generation": "",
 	"Title Generation Prompt": "ਸਿਰਲੇਖ ਜਨਰੇਸ਼ਨ ਪ੍ਰੰਪਟ",
 	"TLS": "",
 	"To access the available model names for downloading,": "ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਉਪਲਬਧ ਮਾਡਲ ਨਾਮਾਂ ਤੱਕ ਪਹੁੰਚਣ ਲਈ,",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Klucz API wyszukiwania Brave",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "Pomiń weryfikację SSL dla stron webowych",
+	"Calendar": "",
 	"Call": "",
 	"Call feature is not supported when using Web STT engine": "",
 	"Camera": "",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "",
 	"Enter Searxng Query URL": "Wprowadź adres URL zapytania Searxng",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Wprowadź klucz API Serper",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Wprowadź klucz API Serpstack",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "Ukryj",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "Jak mogę Ci dzisiaj pomóc?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "Wyślij wiadomość",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "Wrzesień",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Klucz API Serper",
 	"Serply API Key": "",
 	"Serpstack API Key": "Klucz API Serpstack",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Tytuł (np. Powiedz mi jakiś zabawny fakt)",
 	"Title Auto-Generation": "Automatyczne generowanie tytułu",
 	"Title cannot be an empty string.": "Tytuł nie może być pusty",
+	"Title Generation": "",
 	"Title Generation Prompt": "Prompt generowania tytułu",
 	"TLS": "",
 	"To access the available model names for downloading,": "Aby uzyskać dostęp do dostępnych nazw modeli do pobrania,",

+ 7 - 0
src/lib/i18n/locales/pt-BR/translation.json

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Chave API do Brave Search",
 	"By {{name}}": "Por {{name}}",
 	"Bypass SSL verification for Websites": "Ignorar verificação SSL para Sites",
+	"Calendar": "",
 	"Call": "Chamada",
 	"Call feature is not supported when using Web STT engine": "O recurso de chamada não é suportado ao usar o mecanismo Web STT",
 	"Camera": "Câmera",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "Digite o Motor do SearchApi",
 	"Enter Searxng Query URL": "Digite a URL de Consulta do Searxng",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Digite a Chave API do Serper",
 	"Enter Serply API Key": "Digite a Chave API do Serply",
 	"Enter Serpstack API Key": "Digite a Chave API do Serpstack",
@@ -513,6 +516,7 @@
 	"Hex Color": "Cor hexadecimal",
 	"Hex Color - Leave empty for default color": "Cor Hexadecimal - Deixe em branco para a cor padrão",
 	"Hide": "Ocultar",
+	"Home": "",
 	"Host": "Servidor",
 	"How can I help you today?": "Como posso ajudar você hoje?",
 	"How would you rate this response?": "Como você avalia essa resposta?",
@@ -866,6 +870,8 @@
 	"Send message": "Enviar mensagem",
 	"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 }` na solicitação. Provedores compatíveis retornarão informações sobre o uso de tokens na resposta quando configurado.",
 	"September": "Setembro",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Chave da API Serper",
 	"Serply API Key": "Chave da API Serply",
 	"Serpstack API Key": "Chave da API Serpstack",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Título (por exemplo, Conte-me um fato divertido)",
 	"Title Auto-Generation": "Geração Automática de Título",
 	"Title cannot be an empty string.": "O Título não pode ser uma string vazia.",
+	"Title Generation": "",
 	"Title Generation Prompt": "Prompt de Geração de Título",
 	"TLS": "",
 	"To access the available model names for downloading,": "Para acessar os nomes de modelos disponíveis para download,",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Chave da API de Pesquisa Brave",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "Ignorar verificação SSL para sites",
+	"Calendar": "",
 	"Call": "Chamar",
 	"Call feature is not supported when using Web STT engine": "A funcionalide de Chamar não é suportada quando usa um motor Web STT",
 	"Camera": "Camera",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "",
 	"Enter Searxng Query URL": "Escreva o URL da Pesquisa Searxng",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Escreva a chave da API Serper",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Escreva a chave da API Serpstack",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "Ocultar",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "Como posso ajudá-lo hoje?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "Enviar mensagem",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "Setembro",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Chave API Serper",
 	"Serply API Key": "",
 	"Serpstack API Key": "Chave da API Serpstack",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Título (ex.: Diz-me um facto divertido)",
 	"Title Auto-Generation": "Geração Automática de Título",
 	"Title cannot be an empty string.": "Título não pode ser uma string vazia.",
+	"Title Generation": "",
 	"Title Generation Prompt": "Prompt de Geração de Título",
 	"TLS": "",
 	"To access the available model names for downloading,": "Para aceder aos nomes de modelo disponíveis para descarregar,",

+ 7 - 0
src/lib/i18n/locales/ro-RO/translation.json

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Cheie API Brave Search",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "Ocolește verificarea SSL pentru site-uri web",
+	"Calendar": "",
 	"Call": "Apel",
 	"Call feature is not supported when using Web STT engine": "Funcția de apel nu este suportată când se utilizează motorul Web STT",
 	"Camera": "Cameră",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "Introduceți motorul SearchApi",
 	"Enter Searxng Query URL": "Introduceți URL-ul Interogării Searxng",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Introduceți Cheia API Serper",
 	"Enter Serply API Key": "Introduceți Cheia API Serply",
 	"Enter Serpstack API Key": "Introduceți Cheia API Serpstack",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "Ascunde",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "Cum te pot ajuta astăzi?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "Trimite mesajul",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "Trimite `stream_options: { include_usage: true }` în cerere. Furnizorii care suportă această opțiune vor returna informații despre utilizarea token-urilor în răspuns când este setată.",
 	"September": "Septembrie",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Cheie API Serper",
 	"Serply API Key": "Cheie API Serply",
 	"Serpstack API Key": "Cheie API Serpstack",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Titlu (de ex. Spune-mi un fapt amuzant)",
 	"Title Auto-Generation": "Generare Automată a Titlului",
 	"Title cannot be an empty string.": "Titlul nu poate fi un șir gol.",
+	"Title Generation": "",
 	"Title Generation Prompt": "Prompt de Generare a Titlului",
 	"TLS": "",
 	"To access the available model names for downloading,": "Pentru a accesa numele modelelor disponibile pentru descărcare,",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Ключ API поиска Brave",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "Обход проверки SSL для веб-сайтов",
+	"Calendar": "",
 	"Call": "Вызов",
 	"Call feature is not supported when using Web STT engine": "Функция вызова не поддерживается при использовании Web STT (распознавание речи) движка",
 	"Camera": "Камера",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "Введите SearchApi движок",
 	"Enter Searxng Query URL": "Введите URL-адрес запроса Searxng",
 	"Enter Seed": "Введите Seed",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Введите ключ API Serper",
 	"Enter Serply API Key": "Введите ключ API Serply",
 	"Enter Serpstack API Key": "Введите ключ API Serpstack",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "Скрыть",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "Чем я могу помочь вам сегодня?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "Отправить сообщение",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "Отправляет в запросе \"stream_options: { include_usage: true }\".\nПоддерживаемые провайдеры будут возвращать информацию об использовании токена в ответе, когда это будет установлено.",
 	"September": "Сентябрь",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Ключ API Serper",
 	"Serply API Key": "Ключ API Serply",
 	"Serpstack API Key": "Ключ API Serpstack",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Заголовок (например, Расскажи мне интересный факт)",
 	"Title Auto-Generation": "Автогенерация заголовка",
 	"Title cannot be an empty string.": "Заголовок не может быть пустой строкой.",
+	"Title Generation": "",
 	"Title Generation Prompt": "Промпт для генерации заголовка",
 	"TLS": "",
 	"To access the available model names for downloading,": "Чтобы получить доступ к доступным для загрузки именам моделей,",

+ 7 - 0
src/lib/i18n/locales/sk-SK/translation.json

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "API kľúč pre Brave Search",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "Obísť overenie SSL pre webové stránky",
+	"Calendar": "",
 	"Call": "Volanie",
 	"Call feature is not supported when using Web STT engine": "Funkcia volania nie je podporovaná pri použití Web STT engine.",
 	"Camera": "Kamera",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "Zadajte vyhľadávací engine SearchApi",
 	"Enter Searxng Query URL": "Zadajte URL dopytu Searxng",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Zadajte Serper API kľúč",
 	"Enter Serply API Key": "Zadajte API kľúč pre Serply",
 	"Enter Serpstack API Key": "Zadajte kľúč API pre Serpstack",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "Skryť",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "Ako vám môžem dnes pomôcť?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "Odoslať správu",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "Odošle `stream_options: { include_usage: true }` v žiadosti. Podporovaní poskytovatelia vrátia informácie o využití tokenov v odpovedi, keď je táto možnosť nastavená.",
 	"September": "September",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Kľúč API pre Serper",
 	"Serply API Key": "Serply API kľúč",
 	"Serpstack API Key": "Kľúč API pre Serpstack",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Názov (napr. Povedz mi zaujímavosť)",
 	"Title Auto-Generation": "Automatické generovanie názvu",
 	"Title cannot be an empty string.": "Názov nemôže byť prázdny reťazec.",
+	"Title Generation": "",
 	"Title Generation Prompt": "Generovanie názvu promptu",
 	"TLS": "",
 	"To access the available model names for downloading,": "Pre získanie dostupných názvov modelov na stiahnutie,",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Апи кључ за храбру претрагу",
 	"By {{name}}": "Од {{name}}",
 	"Bypass SSL verification for Websites": "Заобиђи SSL потврђивање за веб странице",
+	"Calendar": "",
 	"Call": "Позив",
 	"Call feature is not supported when using Web STT engine": "",
 	"Camera": "Камера",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "",
 	"Enter Searxng Query URL": "Унесите УРЛ адресу Сеарxнг упита",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Унесите Серпер АПИ кључ",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Унесите Серпстацк АПИ кључ",
@@ -513,6 +516,7 @@
 	"Hex Color": "Хекс боја",
 	"Hex Color - Leave empty for default color": "Хекс боја (празно за подразумевано)",
 	"Hide": "Сакриј",
+	"Home": "",
 	"Host": "Домаћин",
 	"How can I help you today?": "Како могу да вам помогнем данас?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "Пошаљи поруку",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "Септембар",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Серпер АПИ кључ",
 	"Serply API Key": "",
 	"Serpstack API Key": "Серпстацк АПИ кључ",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Наслов (нпр. „реци ми занимљивост“)",
 	"Title Auto-Generation": "Самостално стварање наслова",
 	"Title cannot be an empty string.": "Наслов не може бити празан низ.",
+	"Title Generation": "",
 	"Title Generation Prompt": "Упит за стварање наслова",
 	"TLS": "ТЛС",
 	"To access the available model names for downloading,": "Да бисте приступили доступним именима модела за преузимање,",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "API-nyckel för Brave Search",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "Kringgå SSL-verifiering för webbplatser",
+	"Calendar": "",
 	"Call": "Samtal",
 	"Call feature is not supported when using Web STT engine": "Samtalsfunktionen är inte kompatibel med Web Tal-till-text motor",
 	"Camera": "Kamera",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "",
 	"Enter Searxng Query URL": "Ange Searxng Query URL",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Ange Serper API-nyckel",
 	"Enter Serply API Key": "Ange Serply API-nyckel",
 	"Enter Serpstack API Key": "Ange Serpstack API-nyckel",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "Dölj",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "Hur kan jag hjälpa dig idag?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "Skicka meddelande",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "september",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Serper API-nyckel",
 	"Serply API Key": "Serply API-nyckel",
 	"Serpstack API Key": "Serpstack API-nyckel",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Titel (t.ex. Berätta en kuriosa)",
 	"Title Auto-Generation": "Automatisk generering av titel",
 	"Title cannot be an empty string.": "Titeln får inte vara en tom sträng.",
+	"Title Generation": "",
 	"Title Generation Prompt": "Instruktion för titelgenerering",
 	"TLS": "",
 	"To access the available model names for downloading,": "För att komma åt de tillgängliga modellnamnen för nedladdning,",

+ 7 - 0
src/lib/i18n/locales/th-TH/translation.json

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "คีย์ API ของ Brave Search",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "ข้ามการตรวจสอบ SSL สำหรับเว็บไซต์",
+	"Calendar": "",
 	"Call": "โทร",
 	"Call feature is not supported when using Web STT engine": "ไม่รองรับฟีเจอร์การโทรเมื่อใช้เครื่องยนต์ Web STT",
 	"Camera": "กล้อง",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "",
 	"Enter Searxng Query URL": "ใส URL การค้นหาของ Searxng",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "ใส่คีย์ API ของ Serper",
 	"Enter Serply API Key": "ใส่คีย์ API ของ Serply",
 	"Enter Serpstack API Key": "ใส่คีย์ API ของ Serpstack",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "ซ่อน",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "วันนี้ฉันจะช่วยอะไรคุณได้บ้าง?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "ส่งข้อความ",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "กันยายน",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "คีย์ API ของ Serper",
 	"Serply API Key": "คีย์ API ของ Serply",
 	"Serpstack API Key": "คีย์ API ของ Serpstack",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "ชื่อเรื่อง (เช่น บอกข้อเท็จจริงที่น่าสนุก)",
 	"Title Auto-Generation": "การสร้างชื่ออัตโนมัติ",
 	"Title cannot be an empty string.": "ชื่อเรื่องไม่สามารถเป็นสตริงว่างได้",
+	"Title Generation": "",
 	"Title Generation Prompt": "พรอมต์การสร้างชื่อเรื่อง",
 	"TLS": "",
 	"To access the available model names for downloading,": "ในการเข้าถึงชื่อโมเดลที่มีให้ดาวน์โหลด",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "",
+	"Calendar": "",
 	"Call": "",
 	"Call feature is not supported when using Web STT engine": "",
 	"Camera": "",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "",
 	"Enter Searxng Query URL": "",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "",
 	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "",
 	"Serply API Key": "",
 	"Serpstack API Key": "",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "",
 	"Title cannot be an empty string.": "",
+	"Title Generation": "",
 	"Title Generation Prompt": "",
 	"TLS": "",
 	"To access the available model names for downloading,": "",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Brave Search API Anahtarı",
 	"By {{name}}": "{{name}} Tarafından",
 	"Bypass SSL verification for Websites": "Web Siteleri için SSL doğrulamasını atlayın",
+	"Calendar": "",
 	"Call": "Arama",
 	"Call feature is not supported when using Web STT engine": "Web STT motoru kullanılırken arama özelliği desteklenmiyor",
 	"Camera": "Kamera",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "Arama-API Motorunu Girin",
 	"Enter Searxng Query URL": "Searxng Sorgu URL'sini girin",
 	"Enter Seed": " Tohum(seed) Girin",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Serper API Anahtarını Girin",
 	"Enter Serply API Key": "Serply API Anahtarını Girin",
 	"Enter Serpstack API Key": "Serpstack API Anahtarını Girin",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "Gizle",
+	"Home": "",
 	"Host": "Ana bilgisayar",
 	"How can I help you today?": "Bugün size nasıl yardımcı olabilirim?",
 	"How would you rate this response?": "Bu yanıtı nasıl değerlendirirsiniz?",
@@ -866,6 +870,8 @@
 	"Send message": "Mesaj gönder",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "İsteğe `stream_options: { include_usage: true }` gönderir.\nDesteklenen sağlayıcılar, ayarlandığında yanıtta token kullanım bilgilerini döndürecektir.",
 	"September": "Eylül",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Serper API Anahtarı",
 	"Serply API Key": "Serply API Anahtarı",
 	"Serpstack API Key": "Serpstack API Anahtarı",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Başlık (e.g. Bana ilginç bir bilgi ver)",
 	"Title Auto-Generation": "Otomatik Başlık Oluşturma",
 	"Title cannot be an empty string.": "Başlık boş bir dize olamaz.",
+	"Title Generation": "",
 	"Title Generation Prompt": "Başlık Oluşturma Promptu",
 	"TLS": "TLS",
 	"To access the available model names for downloading,": "İndirilebilir mevcut model adlarına erişmek için,",

+ 35 - 28
src/lib/i18n/locales/uk-UA/translation.json

@@ -122,10 +122,11 @@
 	"Beta": "Beta",
 	"Bing Search V7 Endpoint": "Точка доступу Bing Search V7",
 	"Bing Search V7 Subscription Key": "Ключ підписки Bing Search V7",
-	"Bocha Search API Key": "",
+	"Bocha Search API Key": "Ключ API пошуку Bocha",
 	"Brave Search API Key": "Ключ API пошуку Brave",
 	"By {{name}}": "Від {{name}}",
 	"Bypass SSL verification for Websites": "Обхід SSL-перевірки для веб-сайтів",
+	"Calendar": "",
 	"Call": "Виклик",
 	"Call feature is not supported when using Web STT engine": "Функція виклику не підтримується при використанні Web STT (розпізнавання мовлення) рушія",
 	"Camera": "Камера",
@@ -164,7 +165,7 @@
 	"Click here to": "Натисніть тут, щоб",
 	"Click here to download user import template file.": "Натисніть тут, щоб завантажити файл шаблону імпорту користувача.",
 	"Click here to learn more about faster-whisper and see the available models.": "Натисніть тут, щоб дізнатися більше про faster-whisper та переглянути доступні моделі.",
-	"Click here to see available models.": "",
+	"Click here to see available models.": "Натисніть тут, щоб переглянути доступні моделі.",
 	"Click here to select": "Натисніть тут, щоб обрати",
 	"Click here to select a csv file.": "Натисніть тут, щоб обрати csv-файл.",
 	"Click here to select a py file.": "Натисніть тут, щоб обрати py-файл.",
@@ -179,8 +180,8 @@
 	"Code execution": "Виконання коду",
 	"Code formatted successfully": "Код успішно відформатовано",
 	"Code Interpreter": "Інтерпретатор коду",
-	"Code Interpreter Engine": "",
-	"Code Interpreter Prompt Template": "",
+	"Code Interpreter Engine": "Двигун інтерпретатора коду",
+	"Code Interpreter Prompt Template": "Шаблон запиту інтерпретатора коду",
 	"Collection": "Колекція",
 	"Color": "Колір",
 	"ComfyUI": "ComfyUI",
@@ -197,7 +198,7 @@
 	"Confirm Password": "Підтвердіть пароль",
 	"Confirm your action": "Підтвердіть свою дію",
 	"Confirm your new password": "Підтвердіть свій новий пароль",
-	"Connect to your own OpenAI compatible API endpoints.": "",
+	"Connect to your own OpenAI compatible API endpoints.": "Підключіться до своїх власних API-ендпоінтів, сумісних з OpenAI.",
 	"Connections": "З'єднання",
 	"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": "Зверніться до адміна для отримання доступу до WebUI",
@@ -220,7 +221,7 @@
 	"Copy Link": "Копіювати посилання",
 	"Copy to clipboard": "Копіювати в буфер обміну",
 	"Copying to clipboard was successful!": "Копіювання в буфер обміну виконано успішно!",
-	"CORS must be properly configured by the provider to allow requests from Open WebUI.": "",
+	"CORS must be properly configured by the provider to allow requests from Open WebUI.": "CORS має бути правильно налаштований постачальником, щоб дозволити запити з Open WebUI.",
 	"Create": "Створити",
 	"Create a knowledge base": "Створити базу знань",
 	"Create a model": "Створити модель",
@@ -274,9 +275,9 @@
 	"Describe your knowledge base and objectives": "Опишіть вашу базу знань та цілі",
 	"Description": "Опис",
 	"Didn't fully follow instructions": "Не повністю дотримувалися інструкцій",
-	"Direct Connections": "",
-	"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "",
-	"Direct Connections settings updated": "",
+	"Direct Connections": "Прямі з'єднання",
+	"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Прямі з'єднання дозволяють користувачам підключатися до своїх власних API-кінцевих точок, сумісних з OpenAI.",
+	"Direct Connections settings updated": "Налаштування прямих з'єднань оновлено",
 	"Disabled": "Вимкнено",
 	"Discover a function": "Знайдіть функцію",
 	"Discover a model": "Знайдіть модель",
@@ -299,7 +300,7 @@
 	"Documentation": "Документація",
 	"Documents": "Документи",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "не встановлює жодних зовнішніх з'єднань, і ваші дані залишаються в безпеці на вашому локальному сервері.",
-	"Domain Filter List": "",
+	"Domain Filter List": "Список фільтрів доменів",
 	"Don't have an account?": "Немає облікового запису?",
 	"don't install random functions from sources you don't trust.": "не встановлюйте випадкові функції з джерел, яким ви не довіряєте.",
 	"don't install random tools from sources you don't trust.": "не встановлюйте випадкові інструменти з джерел, яким ви не довіряєте.",
@@ -335,7 +336,7 @@
 	"Embedding model set to \"{{embedding_model}}\"": "Встановлена модель вбудовування \"{{embedding_model}}\"",
 	"Enable API Key": "Увімкнути ключ API",
 	"Enable autocomplete generation for chat messages": "Увімкнути генерацію автозаповнення для повідомлень чату",
-	"Enable Code Interpreter": "",
+	"Enable Code Interpreter": "Увімкнути інтерпретатор коду",
 	"Enable Community Sharing": "Увімкнути спільний доступ",
 	"Enable Google Drive": "Увімкнути 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.": "Увімкнути блокування пам'яті (mlock), щоб запобігти виведенню даних моделі з оперативної пам'яті. Цей параметр блокує робочий набір сторінок моделі в оперативній пам'яті, гарантуючи, що вони не будуть виведені на диск. Це може допомогти підтримувати продуктивність, уникати помилок сторінок та забезпечувати швидкий доступ до даних.",
@@ -354,23 +355,23 @@
 	"Enter Application DN Password": "Введіть пароль DN застосунку",
 	"Enter Bing Search V7 Endpoint": "Введіть точку доступу Bing Search V7",
 	"Enter Bing Search V7 Subscription Key": "Введіть ключ підписки Bing Search V7",
-	"Enter Bocha Search API Key": "",
+	"Enter Bocha Search API Key": "Введіть ключ API Bocha Search",
 	"Enter Brave Search API Key": "Введіть ключ API для пошуку Brave",
 	"Enter certificate path": "Введіть шлях до сертифіката",
 	"Enter CFG Scale (e.g. 7.0)": "Введіть масштаб CFG (напр., 7.0)",
 	"Enter Chunk Overlap": "Введіть перекриття фрагменту",
 	"Enter Chunk Size": "Введіть розмір фрагменту",
 	"Enter description": "Введіть опис",
-	"Enter domains separated by commas (e.g., example.com,site.org)": "",
+	"Enter domains separated by commas (e.g., example.com,site.org)": "Введіть домени, розділені комами (наприклад, example.com, site.org)",
 	"Enter Exa API Key": "Введіть ключ API Exa",
 	"Enter Github Raw URL": "Введіть Raw URL-адресу Github",
 	"Enter Google PSE API Key": "Введіть ключ API Google PSE",
 	"Enter Google PSE Engine Id": "Введіть Google PSE Engine Id",
 	"Enter Image Size (e.g. 512x512)": "Введіть розмір зображення (напр., 512x512)",
 	"Enter Jina API Key": "Введіть ключ API Jina",
-	"Enter Jupyter Password": "",
-	"Enter Jupyter Token": "",
-	"Enter Jupyter URL": "",
+	"Enter Jupyter Password": "Введіть пароль Jupyter",
+	"Enter Jupyter Token": "Введіть токен Jupyter",
+	"Enter Jupyter URL": "Введіть URL Jupyter",
 	"Enter Kagi Search API Key": "Введіть ключ API Kagi Search",
 	"Enter language codes": "Введіть мовні коди",
 	"Enter Model ID": "Введіть ID моделі",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "Введіть SearchApi рушія",
 	"Enter Searxng Query URL": "Введіть URL-адресу запиту Searxng",
 	"Enter Seed": "Введіть насіння",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Введіть ключ API Serper",
 	"Enter Serply API Key": "Введіть ключ API Serply",
 	"Enter Serpstack API Key": "Введіть ключ API Serpstack",
@@ -513,6 +516,7 @@
 	"Hex Color": "Шістнадцятковий колір",
 	"Hex Color - Leave empty for default color": "Шістнадцятковий колір — залиште порожнім для кольору за замовчуванням",
 	"Hide": "Приховати",
+	"Home": "",
 	"Host": "Хост",
 	"How can I help you today?": "Чим я можу допомогти вам сьогодні?",
 	"How would you rate this response?": "Як би ви оцінили цю відповідь?",
@@ -556,8 +560,8 @@
 	"JSON Preview": "Перегляд JSON",
 	"July": "Липень",
 	"June": "Червень",
-	"Jupyter Auth": "",
-	"Jupyter URL": "",
+	"Jupyter Auth": "Аутентифікація Jupyter",
+	"Jupyter URL": "Jupyter URL",
 	"JWT Expiration": "Термін дії JWT",
 	"JWT Token": "Токен JWT",
 	"Kagi Search API Key": "Kagi Search API ключ",
@@ -570,8 +574,8 @@
 	"Knowledge deleted successfully.": "Знання успішно видалено.",
 	"Knowledge reset successfully.": "Знання успішно скинуто.",
 	"Knowledge updated successfully": "Знання успішно оновлено",
-	"Kokoro.js (Browser)": "",
-	"Kokoro.js Dtype": "",
+	"Kokoro.js (Browser)": "Kokoro.js (Браузер)",
+	"Kokoro.js Dtype": "Kokoro.js Dtype",
 	"Label": "Мітка",
 	"Landing Page Mode": "Режим головної сторінки",
 	"Language": "Мова",
@@ -586,12 +590,12 @@
 	"Leave empty to include all models from \"{{URL}}/models\" endpoint": "Залиште порожнім, щоб включити всі моделі з кінцевої точки \"{{URL}}/models\"",
 	"Leave empty to include all models or select specific models": "Залиште порожнім, щоб включити всі моделі, або виберіть конкретні моделі.",
 	"Leave empty to use the default prompt, or enter a custom prompt": "Залиште порожнім для використання стандартного запиту, або введіть власний запит",
-	"Leave model field empty to use the default model.": "",
+	"Leave model field empty to use the default model.": "Залиште поле моделі порожнім, щоб використовувати модель за замовчуванням.",
 	"Light": "Світла",
 	"Listening...": "Слухаю...",
 	"Llama.cpp": "Llama.cpp",
 	"LLMs can make mistakes. Verify important information.": "LLMs можуть помилятися. Перевірте важливу інформацію.",
-	"Loading Kokoro.js...": "",
+	"Loading Kokoro.js...": "Завантаження Kokoro.js...",
 	"Local": "Локальний",
 	"Local Models": "Локальні моделі",
 	"Lost": "Втрачене",
@@ -601,7 +605,7 @@
 	"Make sure to export a workflow.json file as API format from ComfyUI.": "Обов'язково експортуйте файл workflow.json у форматі API з ComfyUI.",
 	"Manage": "Керувати",
 	"Manage Arena Models": "Керувати моделями Arena",
-	"Manage Direct Connections": "",
+	"Manage Direct Connections": "Керування прямими з'єднаннями",
 	"Manage Models": "Керувати моделями",
 	"Manage Ollama": "Керувати Ollama",
 	"Manage Ollama API Connections": "Керувати з'єднаннями Ollama API",
@@ -745,7 +749,7 @@
 	"Plain text (.txt)": "Простий текст (.txt)",
 	"Playground": "Майданчик",
 	"Please carefully review the following warnings:": "Будь ласка, уважно ознайомтеся з наступними попередженнями:",
-	"Please do not close the settings page while loading the model.": "",
+	"Please do not close the settings page while loading the model.": "Будь ласка, не закривайте сторінку налаштувань під час завантаження моделі.",
 	"Please enter a prompt": "Будь ласка, введіть підказку",
 	"Please fill in all fields.": "Будь ласка, заповніть всі поля.",
 	"Please select a model first.": "Будь ласка, спочатку виберіть модель.",
@@ -841,7 +845,7 @@
 	"Searched {{count}} sites": "Шукалося {{count}} сайтів",
 	"Searching \"{{searchQuery}}\"": "Шукаю \"{{searchQuery}}\"",
 	"Searching Knowledge for \"{{searchQuery}}\"": "Пошук знань для \"{{searchQuery}}\"",
-	"Searxng Query URL": "URL-адреса запиту Searxng",
+	"Searxng Query URL": "Searxng Query URL",
 	"See readme.md for instructions": "Див. readme.md для інструкцій",
 	"See what's new": "Подивіться, що нового",
 	"Seed": "Сід",
@@ -853,7 +857,7 @@
 	"Select a pipeline": "Оберіть конвеєр",
 	"Select a pipeline url": "Оберіть адресу конвеєра",
 	"Select a tool": "Оберіть інструмент",
-	"Select an auth method": "",
+	"Select an auth method": "Оберіть метод аутентифікації.",
 	"Select an Ollama instance": "Виберіть екземпляр Ollama",
 	"Select Engine": "Виберіть двигун",
 	"Select Knowledge": "Вибрати знання",
@@ -866,6 +870,8 @@
 	"Send message": "Надіслати повідомлення",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "Відправляє `stream_options: { include_usage: true }` у запиті.\nПідтримувані постачальники повернуть інформацію про використання токену у відповіді, якщо вона встановлена.",
 	"September": "Вересень",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Ключ API Serper",
 	"Serply API Key": "Ключ API Serply",
 	"Serpstack API Key": "Ключ API Serpstack",
@@ -969,7 +975,7 @@
 	"This will reset the knowledge base and sync all files. Do you wish to continue?": "Це скине базу знань і синхронізує всі файли. Ви бажаєте продовжити?",
 	"Thorough explanation": "Детальне пояснення",
 	"Thought for {{DURATION}}": "Думка для {{DURATION}}",
-	"Thought for {{DURATION}} seconds": "",
+	"Thought for {{DURATION}} seconds": "Думав протягом {{DURATION}} секунд.",
 	"Tika": "Tika",
 	"Tika Server URL required.": "Потрібна URL-адреса сервера Tika.",
 	"Tiktoken": "Tiktoken",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Заголовок (напр., Розкажіть мені цікавий факт)",
 	"Title Auto-Generation": "Автогенерація заголовків",
 	"Title cannot be an empty string.": "Заголовок не може бути порожнім рядком.",
+	"Title Generation": "",
 	"Title Generation Prompt": "Промт для генерування заголовків",
 	"TLS": "TLS",
 	"To access the available model names for downloading,": "Щоб отримати доступ до назв доступних для завантаження моделей,",
@@ -1079,7 +1086,7 @@
 	"Web Search Engine": "Веб-пошукова система",
 	"Web Search in Chat": "Пошук в інтернеті в чаті",
 	"Web Search Query Generation": "Генерація запиту для пошуку в мережі",
-	"Webhook URL": "URL веб-запиту",
+	"Webhook URL": "Webhook URL",
 	"WebUI Settings": "Налаштування WebUI",
 	"WebUI URL": "WebUI URL",
 	"WebUI will make requests to \"{{url}}/api/chat\"": "WebUI надсилатиме запити до \"{{url}}/api/chat\"",

+ 7 - 0
src/lib/i18n/locales/ur-PK/translation.json

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "بریو سرچ API کلید",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "ویب سائٹس کے لیے SSL تصدیق کو نظر انداز کریں",
+	"Calendar": "",
 	"Call": "کال کریں",
 	"Call feature is not supported when using Web STT engine": "کال کی خصوصیت ویب STT انجن استعمال کرتے وقت معاونت یافتہ نہیں ہے",
 	"Camera": "کیمرہ",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "تلاش انجن درج کریں",
 	"Enter Searxng Query URL": "سیرنگ استفسار یو آر ایل درج کریں",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "سرپر API کلید داخل کریں",
 	"Enter Serply API Key": "سیرپلی API کلید درج کریں",
 	"Enter Serpstack API Key": "سرپ اسٹیک API کلید درج کریں",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "چھپائیں",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "میں آج آپ کی کس طرح مدد کر سکتا ہوں؟",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "پیغام بھیجیں",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "درخواست میں `stream_options: { include_usage: true }` بھیجتا ہے\nمعاون فراہم کنندگان، جب سیٹ کیا جاتا ہے تو، جواب میں ٹوکن کے استعمال کی معلومات واپس کر دیں گے",
 	"September": "ستمبر",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "سرپر API کلید",
 	"Serply API Key": "سرپلی API کی کلید",
 	"Serpstack API Key": "سرپ اسٹیک اے پی آئی کلید",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "عنوان (مثال کے طور پر، مجھے ایک دلچسپ حقیقت بتائیں)",
 	"Title Auto-Generation": "خودکار عنوان تخلیق",
 	"Title cannot be an empty string.": "عنوان خالی اسٹرنگ نہیں ہو سکتا",
+	"Title Generation": "",
 	"Title Generation Prompt": "سرخی بنانے کی ہدایت",
 	"TLS": "",
 	"To access the available model names for downloading,": "ڈاؤن لوڈ کرنے کے لئے دستیاب ماڈل کے ناموں تک رسائی حاصل کرنے کے لئے،",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Khóa API tìm kiếm dũng cảm",
 	"By {{name}}": "",
 	"Bypass SSL verification for Websites": "Bỏ qua xác thực SSL cho các trang web",
+	"Calendar": "",
 	"Call": "Gọi",
 	"Call feature is not supported when using Web STT engine": "Tính năng gọi điện không được hỗ trợ khi sử dụng công cụ Web STT",
 	"Camera": "",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "",
 	"Enter Searxng Query URL": "Nhập Query URL cho Searxng",
 	"Enter Seed": "",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "Nhập Serper API Key",
 	"Enter Serply API Key": "Nhập Serply API Key",
 	"Enter Serpstack API Key": "Nhập Serpstack API Key",
@@ -513,6 +516,7 @@
 	"Hex Color": "",
 	"Hex Color - Leave empty for default color": "",
 	"Hide": "Ẩn",
+	"Home": "",
 	"Host": "",
 	"How can I help you today?": "Tôi có thể giúp gì cho bạn hôm nay?",
 	"How would you rate this response?": "",
@@ -866,6 +870,8 @@
 	"Send message": "Gửi yêu cầu",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "",
 	"September": "Tháng 9",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Khóa API Serper",
 	"Serply API Key": "",
 	"Serpstack API Key": "Khóa API Serpstack",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "Tiêu đề (ví dụ: Hãy kể cho tôi một sự thật thú vị về...)",
 	"Title Auto-Generation": "Tự động Tạo Tiêu đề",
 	"Title cannot be an empty string.": "Tiêu đề không được phép bỏ trống",
+	"Title Generation": "",
 	"Title Generation Prompt": "Prompt tạo tiêu đề",
 	"TLS": "",
 	"To access the available model names for downloading,": "Để truy cập các tên mô hình có sẵn để tải xuống,",

+ 7 - 0
src/lib/i18n/locales/zh-CN/translation.json

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Brave Search API 密钥",
 	"By {{name}}": "由 {{name}} 提供",
 	"Bypass SSL verification for Websites": "绕过网站的 SSL 验证",
+	"Calendar": "",
 	"Call": "呼叫",
 	"Call feature is not supported when using Web STT engine": "使用 Web 语音转文字引擎时不支持呼叫功能。",
 	"Camera": "摄像头",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "输入 SearchApi 引擎",
 	"Enter Searxng Query URL": "输入 Searxng 查询地址",
 	"Enter Seed": "输入 Seed",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "输入 Serper API 密钥",
 	"Enter Serply API Key": "输入 Serply API 密钥",
 	"Enter Serpstack API Key": "输入 Serpstack API 密钥",
@@ -513,6 +516,7 @@
 	"Hex Color": "十六进制颜色代码",
 	"Hex Color - Leave empty for default color": "十六进制颜色代码 - 留空使用默认颜色",
 	"Hide": "隐藏",
+	"Home": "",
 	"Host": "主机",
 	"How can I help you today?": "有什么我能帮您的吗?",
 	"How would you rate this response?": "您如何评价这个回应?",
@@ -866,6 +870,8 @@
 	"Send message": "发送消息",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "在请求中发送 `stream_options: { include_usage: true }`。设置后,支持的供应商会在响应中返回 Token 使用信息。",
 	"September": "九月",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Serper API 密钥",
 	"Serply API Key": "Serply API 密钥",
 	"Serpstack API Key": "Serpstack API 密钥",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "标题(例如 给我讲一个有趣的事实)",
 	"Title Auto-Generation": "自动生成标题",
 	"Title cannot be an empty string.": "标题不能为空。",
+	"Title Generation": "",
 	"Title Generation Prompt": "用于自动生成标题的提示词",
 	"TLS": "TLS",
 	"To access the available model names for downloading,": "要访问可下载的模型名称,",

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

@@ -126,6 +126,7 @@
 	"Brave Search API Key": "Brave 搜尋 API 金鑰",
 	"By {{name}}": "由 {{name}} 製作",
 	"Bypass SSL verification for Websites": "略過網站的 SSL 驗證",
+	"Calendar": "",
 	"Call": "通話",
 	"Call feature is not supported when using Web STT engine": "使用網頁語音辨識 (Web STT) 引擎時不支援通話功能",
 	"Camera": "相機",
@@ -386,6 +387,8 @@
 	"Enter SearchApi Engine": "輸入 SearchApi 引擎",
 	"Enter Searxng Query URL": "輸入 SearXNG 查詢 URL",
 	"Enter Seed": "輸入種子值",
+	"Enter SerpApi API Key": "",
+	"Enter SerpApi Engine": "",
 	"Enter Serper API Key": "輸入 Serper API 金鑰",
 	"Enter Serply API Key": "輸入 Serply API 金鑰",
 	"Enter Serpstack API Key": "輸入 Serpstack API 金鑰",
@@ -513,6 +516,7 @@
 	"Hex Color": "Hex 顔色",
 	"Hex Color - Leave empty for default color": "Hex 顔色 —— 留空以使用預設顔色",
 	"Hide": "隱藏",
+	"Home": "",
 	"Host": "主機",
 	"How can I help you today?": "今天我能為您做些什麼?",
 	"How would you rate this response?": "您如何評價此回應?",
@@ -866,6 +870,8 @@
 	"Send message": "傳送訊息",
 	"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "在請求中傳送 `stream_options: { include_usage: true }`。\n設定後,支援的提供者將在回應中回傳權杖使用資訊。",
 	"September": "9 月",
+	"SerpApi API Key": "",
+	"SerpApi Engine": "",
 	"Serper API Key": "Serper API 金鑰",
 	"Serply API Key": "Serply API 金鑰",
 	"Serpstack API Key": "Serpstack API 金鑰",
@@ -978,6 +984,7 @@
 	"Title (e.g. Tell me a fun fact)": "標題(例如:告訴我一個有趣的事實)",
 	"Title Auto-Generation": "自動產生標題",
 	"Title cannot be an empty string.": "標題不能是空字串。",
+	"Title Generation": "",
 	"Title Generation Prompt": "自動產生標題的提示詞",
 	"TLS": "TLS",
 	"To access the available model names for downloading,": "若要存取可供下載的模型名稱,",

+ 65 - 0
src/routes/(app)/home/+layout.svelte

@@ -0,0 +1,65 @@
+<script lang="ts">
+	import { onMount, getContext } from 'svelte';
+	import { WEBUI_NAME, showSidebar, functions } from '$lib/stores';
+	import MenuLines from '$lib/components/icons/MenuLines.svelte';
+	import { page } from '$app/stores';
+
+	const i18n = getContext('i18n');
+
+	onMount(async () => {});
+</script>
+
+<svelte:head>
+	<title>
+		{$i18n.t('Home')} | {$WEBUI_NAME}
+	</title>
+</svelte:head>
+
+<div
+	class=" flex flex-col w-full h-screen max-h-[100dvh] transition-width duration-200 ease-in-out {$showSidebar
+		? 'md:max-w-[calc(100%-260px)]'
+		: ''} max-w-full"
+>
+	<nav class="   px-2.5 pt-1 backdrop-blur-xl w-full drag-region">
+		<div class=" flex items-center">
+			<div class="{$showSidebar ? 'md:hidden' : ''} flex flex-none items-center self-end">
+				<button
+					id="sidebar-toggle-button"
+					class="cursor-pointer p-1.5 flex rounded-xl hover:bg-gray-100 dark:hover:bg-gray-850 transition"
+					on:click={() => {
+						showSidebar.set(!$showSidebar);
+					}}
+					aria-label="Toggle Sidebar"
+				>
+					<div class=" m-auto self-center">
+						<MenuLines />
+					</div>
+				</button>
+			</div>
+
+			<div class=" flex w-full">
+				<div
+					class="flex gap-1 scrollbar-none overflow-x-auto w-fit text-center text-sm font-medium rounded-full bg-transparent pt-1"
+				>
+					<a
+						class="min-w-fit rounded-full p-1.5 {$page.url.pathname.includes('/home/notes')
+							? ''
+							: 'text-gray-300 dark:text-gray-600 hover:text-gray-700 dark:hover:text-white'} transition"
+						href="/playground/notes">{$i18n.t('Notes')}</a
+					>
+
+					<a
+						class="min-w-fit rounded-full p-1.5 {$page.url.pathname.includes('/playground/calendar')
+							? ''
+							: 'text-gray-300 dark:text-gray-600 hover:text-gray-700 dark:hover:text-white'} transition"
+						href="/playground/completions">{$i18n.t('Calendar')}</a
+					>
+				</div>
+			</div>
+		</div>
+	</nav>
+
+	<div class=" flex-1 max-h-full overflow-y-auto">
+		<slot />
+	</div>
+</div>

+ 0 - 0
src/routes/(app)/home/+page.svelte