Explorar el Código

Merge pull request #2992 from open-webui/dev

0.3.2
Timothy Jaeryang Baek hace 11 meses
padre
commit
3933db2c91
Se han modificado 58 ficheros con 1183 adiciones y 621 borrados
  1. 14 0
      CHANGELOG.md
  2. 1 1
      README.md
  3. 18 1
      backend/apps/rag/main.py
  4. 68 0
      backend/apps/rag/search/serply.py
  5. 206 0
      backend/apps/rag/search/testdata/serply.json
  6. 9 2
      backend/config.py
  7. 2 2
      package-lock.json
  8. 2 2
      package.json
  9. 19 1
      src/lib/components/admin/Settings/WebSearch.svelte
  10. 98 80
      src/lib/components/chat/Chat.svelte
  11. 1 0
      src/lib/components/chat/MessageInput.svelte
  12. 1 1
      src/lib/components/chat/MessageInput/CallOverlay.svelte
  13. 89 81
      src/lib/components/chat/Messages/ResponseMessage.svelte
  14. 38 3
      src/lib/components/chat/Messages/ResponseMessage/WebSearchResults.svelte
  15. 164 160
      src/lib/components/chat/Settings/Advanced/AdvancedParams.svelte
  16. 29 32
      src/lib/components/chat/Settings/General.svelte
  17. 1 1
      src/lib/components/documents/Settings/WebParams.svelte
  18. 19 0
      src/lib/components/icons/MagnifyingGlass.svelte
  19. 2 2
      src/lib/components/workspace/Models/Knowledge.svelte
  20. 5 1
      src/lib/i18n/locales/ar-BH/translation.json
  21. 5 1
      src/lib/i18n/locales/bg-BG/translation.json
  22. 5 1
      src/lib/i18n/locales/bn-BD/translation.json
  23. 5 1
      src/lib/i18n/locales/ca-ES/translation.json
  24. 5 1
      src/lib/i18n/locales/ceb-PH/translation.json
  25. 5 1
      src/lib/i18n/locales/de-DE/translation.json
  26. 5 1
      src/lib/i18n/locales/dg-DG/translation.json
  27. 5 1
      src/lib/i18n/locales/en-GB/translation.json
  28. 5 1
      src/lib/i18n/locales/en-US/translation.json
  29. 5 1
      src/lib/i18n/locales/es-ES/translation.json
  30. 5 1
      src/lib/i18n/locales/fa-IR/translation.json
  31. 5 1
      src/lib/i18n/locales/fi-FI/translation.json
  32. 5 1
      src/lib/i18n/locales/fr-CA/translation.json
  33. 5 1
      src/lib/i18n/locales/fr-FR/translation.json
  34. 5 1
      src/lib/i18n/locales/he-IL/translation.json
  35. 5 1
      src/lib/i18n/locales/hi-IN/translation.json
  36. 5 1
      src/lib/i18n/locales/hr-HR/translation.json
  37. 5 1
      src/lib/i18n/locales/it-IT/translation.json
  38. 5 1
      src/lib/i18n/locales/ja-JP/translation.json
  39. 5 1
      src/lib/i18n/locales/ka-GE/translation.json
  40. 5 1
      src/lib/i18n/locales/ko-KR/translation.json
  41. 5 1
      src/lib/i18n/locales/lt-LT/translation.json
  42. 5 1
      src/lib/i18n/locales/nb-NO/translation.json
  43. 5 1
      src/lib/i18n/locales/nl-NL/translation.json
  44. 5 1
      src/lib/i18n/locales/pa-IN/translation.json
  45. 5 1
      src/lib/i18n/locales/pl-PL/translation.json
  46. 5 1
      src/lib/i18n/locales/pt-BR/translation.json
  47. 215 211
      src/lib/i18n/locales/pt-PT/translation.json
  48. 5 1
      src/lib/i18n/locales/ru-RU/translation.json
  49. 5 1
      src/lib/i18n/locales/sr-RS/translation.json
  50. 5 1
      src/lib/i18n/locales/sv-SE/translation.json
  51. 5 1
      src/lib/i18n/locales/tk-TW/translation.json
  52. 5 1
      src/lib/i18n/locales/tr-TR/translation.json
  53. 5 1
      src/lib/i18n/locales/uk-UA/translation.json
  54. 5 1
      src/lib/i18n/locales/vi-VN/translation.json
  55. 10 6
      src/lib/i18n/locales/zh-CN/translation.json
  56. 5 1
      src/lib/i18n/locales/zh-TW/translation.json
  57. 1 0
      src/routes/(app)/workspace/models/create/+page.svelte
  58. 1 0
      src/routes/(app)/workspace/models/edit/+page.svelte

+ 14 - 0
CHANGELOG.md

@@ -5,6 +5,20 @@ All notable changes to this project will be documented in this file.
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
 
+## [0.3.2] - 2024-06-10
+
+### Added
+
+- **🔍 Web Search Query Status**: The web search query will now persist in the results section to aid in easier debugging and tracking of search queries.
+- **🌐 New Web Search Provider**: We have added Serply as a new option for web search providers, giving you more choices for your search needs.
+- **🌏 Improved Translations**: We've enhanced translations for Chinese and Portuguese.
+
+### Fixed
+
+- **🎤 Audio File Upload Issue**: The bug that prevented audio files from being uploaded in chat input has been fixed, ensuring smooth communication.
+- **💬 Message Input Handling**: Improved the handling of message inputs by instantly clearing images and text after sending, along with immediate visual indications when a response message is loading, enhancing user feedback.
+- **⚙️ Parameter Registration and Validation**: Fixed the issue where parameters were not registering in certain cases and addressed the problem where users were unable to save due to invalid input errors.
+
 ## [0.3.1] - 2024-06-09
 ## [0.3.1] - 2024-06-09
 
 
 ### Fixed
 ### Fixed

+ 1 - 1
README.md

@@ -33,7 +33,7 @@ Open WebUI is an [extensible](https://github.com/open-webui/pipelines), feature-
 
 
 - 📚 **Local RAG Integration**: Dive into the future of chat interactions with groundbreaking Retrieval Augmented Generation (RAG) support. This feature seamlessly integrates document interactions into your chat experience. You can load documents directly into the chat or add files to your document library, effortlessly accessing them using the `#` command before a query.
 - 📚 **Local RAG Integration**: Dive into the future of chat interactions with groundbreaking Retrieval Augmented Generation (RAG) support. This feature seamlessly integrates document interactions into your chat experience. You can load documents directly into the chat or add files to your document library, effortlessly accessing them using the `#` command before a query.
 
 
-- 🔍 **Web Search for RAG**: Perform web searches using providers like `SearXNG`, `Google PSE`, `Brave Search`, `serpstack`, and `serper`, and inject the results directly into your chat experience.
+- 🔍 **Web Search for RAG**: Perform web searches using providers like `SearXNG`, `Google PSE`, `Brave Search`, `serpstack`, `serper`, and `Serply` and inject the results directly into your chat experience.
 
 
 - 🌐 **Web Browsing Capability**: Seamlessly integrate websites into your chat experience using the `#` command followed by a URL. This feature allows you to incorporate web content directly into your conversations, enhancing the richness and depth of your interactions.
 - 🌐 **Web Browsing Capability**: Seamlessly integrate websites into your chat experience using the `#` command followed by a URL. This feature allows you to incorporate web content directly into your conversations, enhancing the richness and depth of your interactions.
 
 

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

@@ -69,7 +69,7 @@ from apps.rag.search.main import SearchResult
 from apps.rag.search.searxng import search_searxng
 from apps.rag.search.searxng import search_searxng
 from apps.rag.search.serper import search_serper
 from apps.rag.search.serper import search_serper
 from apps.rag.search.serpstack import search_serpstack
 from apps.rag.search.serpstack import search_serpstack
-
+from apps.rag.search.serply import search_serply
 
 
 from utils.misc import (
 from utils.misc import (
     calculate_sha256,
     calculate_sha256,
@@ -115,6 +115,7 @@ from config import (
     SERPSTACK_API_KEY,
     SERPSTACK_API_KEY,
     SERPSTACK_HTTPS,
     SERPSTACK_HTTPS,
     SERPER_API_KEY,
     SERPER_API_KEY,
+    SERPLY_API_KEY,
     RAG_WEB_SEARCH_RESULT_COUNT,
     RAG_WEB_SEARCH_RESULT_COUNT,
     RAG_WEB_SEARCH_CONCURRENT_REQUESTS,
     RAG_WEB_SEARCH_CONCURRENT_REQUESTS,
     RAG_EMBEDDING_OPENAI_BATCH_SIZE,
     RAG_EMBEDDING_OPENAI_BATCH_SIZE,
@@ -167,6 +168,7 @@ app.state.config.BRAVE_SEARCH_API_KEY = BRAVE_SEARCH_API_KEY
 app.state.config.SERPSTACK_API_KEY = SERPSTACK_API_KEY
 app.state.config.SERPSTACK_API_KEY = SERPSTACK_API_KEY
 app.state.config.SERPSTACK_HTTPS = SERPSTACK_HTTPS
 app.state.config.SERPSTACK_HTTPS = SERPSTACK_HTTPS
 app.state.config.SERPER_API_KEY = SERPER_API_KEY
 app.state.config.SERPER_API_KEY = SERPER_API_KEY
+app.state.config.SERPLY_API_KEY = SERPLY_API_KEY
 app.state.config.RAG_WEB_SEARCH_RESULT_COUNT = RAG_WEB_SEARCH_RESULT_COUNT
 app.state.config.RAG_WEB_SEARCH_RESULT_COUNT = RAG_WEB_SEARCH_RESULT_COUNT
 app.state.config.RAG_WEB_SEARCH_CONCURRENT_REQUESTS = RAG_WEB_SEARCH_CONCURRENT_REQUESTS
 app.state.config.RAG_WEB_SEARCH_CONCURRENT_REQUESTS = RAG_WEB_SEARCH_CONCURRENT_REQUESTS
 
 
@@ -394,6 +396,7 @@ async def get_rag_config(user=Depends(get_admin_user)):
                 "serpstack_api_key": app.state.config.SERPSTACK_API_KEY,
                 "serpstack_api_key": app.state.config.SERPSTACK_API_KEY,
                 "serpstack_https": app.state.config.SERPSTACK_HTTPS,
                 "serpstack_https": app.state.config.SERPSTACK_HTTPS,
                 "serper_api_key": app.state.config.SERPER_API_KEY,
                 "serper_api_key": app.state.config.SERPER_API_KEY,
+                "serply_api_key": app.state.config.SERPLY_API_KEY,
                 "result_count": app.state.config.RAG_WEB_SEARCH_RESULT_COUNT,
                 "result_count": app.state.config.RAG_WEB_SEARCH_RESULT_COUNT,
                 "concurrent_requests": app.state.config.RAG_WEB_SEARCH_CONCURRENT_REQUESTS,
                 "concurrent_requests": app.state.config.RAG_WEB_SEARCH_CONCURRENT_REQUESTS,
             },
             },
@@ -421,6 +424,7 @@ class WebSearchConfig(BaseModel):
     serpstack_api_key: Optional[str] = None
     serpstack_api_key: Optional[str] = None
     serpstack_https: Optional[bool] = None
     serpstack_https: Optional[bool] = None
     serper_api_key: Optional[str] = None
     serper_api_key: Optional[str] = None
+    serply_api_key: Optional[str] = None
     result_count: Optional[int] = None
     result_count: Optional[int] = None
     concurrent_requests: Optional[int] = None
     concurrent_requests: Optional[int] = None
 
 
@@ -471,6 +475,7 @@ async def update_rag_config(form_data: ConfigUpdateForm, user=Depends(get_admin_
         app.state.config.SERPSTACK_API_KEY = form_data.web.search.serpstack_api_key
         app.state.config.SERPSTACK_API_KEY = form_data.web.search.serpstack_api_key
         app.state.config.SERPSTACK_HTTPS = form_data.web.search.serpstack_https
         app.state.config.SERPSTACK_HTTPS = form_data.web.search.serpstack_https
         app.state.config.SERPER_API_KEY = form_data.web.search.serper_api_key
         app.state.config.SERPER_API_KEY = form_data.web.search.serper_api_key
+        app.state.config.SERPLY_API_KEY = form_data.web.search.serply_api_key
         app.state.config.RAG_WEB_SEARCH_RESULT_COUNT = form_data.web.search.result_count
         app.state.config.RAG_WEB_SEARCH_RESULT_COUNT = form_data.web.search.result_count
         app.state.config.RAG_WEB_SEARCH_CONCURRENT_REQUESTS = (
         app.state.config.RAG_WEB_SEARCH_CONCURRENT_REQUESTS = (
             form_data.web.search.concurrent_requests
             form_data.web.search.concurrent_requests
@@ -499,6 +504,7 @@ async def update_rag_config(form_data: ConfigUpdateForm, user=Depends(get_admin_
                 "serpstack_api_key": app.state.config.SERPSTACK_API_KEY,
                 "serpstack_api_key": app.state.config.SERPSTACK_API_KEY,
                 "serpstack_https": app.state.config.SERPSTACK_HTTPS,
                 "serpstack_https": app.state.config.SERPSTACK_HTTPS,
                 "serper_api_key": app.state.config.SERPER_API_KEY,
                 "serper_api_key": app.state.config.SERPER_API_KEY,
+                "serply_api_key": app.state.config.SERPLY_API_KEY,
                 "result_count": app.state.config.RAG_WEB_SEARCH_RESULT_COUNT,
                 "result_count": app.state.config.RAG_WEB_SEARCH_RESULT_COUNT,
                 "concurrent_requests": app.state.config.RAG_WEB_SEARCH_CONCURRENT_REQUESTS,
                 "concurrent_requests": app.state.config.RAG_WEB_SEARCH_CONCURRENT_REQUESTS,
             },
             },
@@ -746,6 +752,7 @@ def search_web(engine: str, query: str) -> list[SearchResult]:
     - BRAVE_SEARCH_API_KEY
     - BRAVE_SEARCH_API_KEY
     - SERPSTACK_API_KEY
     - SERPSTACK_API_KEY
     - SERPER_API_KEY
     - SERPER_API_KEY
+    - SERPLY_API_KEY
 
 
     Args:
     Args:
         query (str): The query to search for
         query (str): The query to search for
@@ -804,6 +811,15 @@ def search_web(engine: str, query: str) -> list[SearchResult]:
             )
             )
         else:
         else:
             raise Exception("No SERPER_API_KEY found in environment variables")
             raise Exception("No SERPER_API_KEY found in environment variables")
+    elif engine == "serply":
+        if app.state.config.SERPLY_API_KEY:
+            return search_serply(
+                app.state.config.SERPLY_API_KEY,
+                query,
+                app.state.config.RAG_WEB_SEARCH_RESULT_COUNT,
+            )
+        else:
+            raise Exception("No SERPLY_API_KEY found in environment variables")
     else:
     else:
         raise Exception("No search engine API key found in environment variables")
         raise Exception("No search engine API key found in environment variables")
 
 
@@ -811,6 +827,7 @@ def search_web(engine: str, query: str) -> list[SearchResult]:
 @app.post("/web/search")
 @app.post("/web/search")
 def store_web_search(form_data: SearchForm, user=Depends(get_current_user)):
 def store_web_search(form_data: SearchForm, user=Depends(get_current_user)):
     try:
     try:
+        logging.info(f"trying to web search with {app.state.config.RAG_WEB_SEARCH_ENGINE, form_data.query}")
         web_results = search_web(
         web_results = search_web(
             app.state.config.RAG_WEB_SEARCH_ENGINE, form_data.query
             app.state.config.RAG_WEB_SEARCH_ENGINE, form_data.query
         )
         )

+ 68 - 0
backend/apps/rag/search/serply.py

@@ -0,0 +1,68 @@
+import json
+import logging
+
+import requests
+from urllib.parse import urlencode
+
+from apps.rag.search.main import SearchResult
+from config import SRC_LOG_LEVELS
+
+log = logging.getLogger(__name__)
+log.setLevel(SRC_LOG_LEVELS["RAG"])
+
+
+def search_serply(
+        api_key: str,
+        query: str,
+        count: int,
+        hl: str = "us",
+        limit: int = 10,
+        device_type: str = "desktop",
+        proxy_location: str = "US"
+    ) -> list[SearchResult]:
+    """Search using serper.dev's API and return the results as a list of SearchResult objects.
+
+    Args:
+        api_key (str): A serply.io API key
+        query (str): The query to search for
+        hl (str): Host Language code to display results in (reference https://developers.google.com/custom-search/docs/xml_results?hl=en#wsInterfaceLanguages)
+        limit (int): The maximum number of results to return [10-100, defaults to 10]
+    """
+    log.info("Searching with Serply")
+
+    url = "https://api.serply.io/v1/search/"
+
+    query_payload = {
+        "q": query,
+        "language": "en",
+        "num": limit,
+        "gl": proxy_location.upper(),
+        "hl": hl.lower()
+    }
+
+    url = f"{url}{urlencode(query_payload)}"
+    headers = {
+        "X-API-KEY": api_key,
+        "X-User-Agent": device_type,
+        "User-Agent": "open-webui",
+        "X-Proxy-Location": proxy_location
+    }
+
+    response = requests.request("GET", url, headers=headers)
+    response.raise_for_status()
+
+    json_response = response.json()
+    log.info(f"results from serply search: {json_response}")
+
+    results = sorted(
+        json_response.get("results", []), key=lambda x: x.get("realPosition", 0)
+    )
+
+    return [
+        SearchResult(
+            link=result["link"],
+            title=result.get("title"),
+            snippet=result.get("description"),
+        )
+        for result in results[:count]
+    ]

+ 206 - 0
backend/apps/rag/search/testdata/serply.json

@@ -0,0 +1,206 @@
+{
+	"ads": [],
+	"ads_count": 0,
+	"answers": [],
+	"results": [
+		{
+			"title": "Apple",
+			"link": "https://www.apple.com/",
+			"description": "Discover the innovative world of Apple and shop everything iPhone, iPad, Apple Watch, Mac, and Apple TV, plus explore accessories, entertainment, ...",
+			"additional_links": [
+				{
+					"text": "AppleApplehttps://www.apple.com",
+					"href": "https://www.apple.com/"
+				}
+			],
+			"cite": {},
+			"subdomains": [
+				{
+					"title": "Support",
+					"link": "https://support.apple.com/",
+					"description": "SupportContact - iPhone Support - Billing and Subscriptions - Apple Repair"
+				},
+				{
+					"title": "Store",
+					"link": "https://www.apple.com/store",
+					"description": "StoreShop iPhone - Shop iPad - App Store - Shop Mac - ..."
+				},
+				{
+					"title": "Mac",
+					"link": "https://www.apple.com/mac/",
+					"description": "MacMacBook Air - MacBook Pro - iMac - Compare Mac models - Mac mini"
+				},
+				{
+					"title": "iPad",
+					"link": "https://www.apple.com/ipad/",
+					"description": "iPadShop iPad - iPad Pro - iPad Air - Compare iPad models - ..."
+				},
+				{
+					"title": "Watch",
+					"link": "https://www.apple.com/watch/",
+					"description": "WatchShop Apple Watch - Series 9 - SE - Ultra 2 - Nike - Hermès - ..."
+				}
+			],
+			"realPosition": 1
+		},
+		{
+			"title": "Apple",
+			"link": "https://www.apple.com/",
+			"description": "Discover the innovative world of Apple and shop everything iPhone, iPad, Apple Watch, Mac, and Apple TV, plus explore accessories, entertainment, ...",
+			"additional_links": [
+				{
+					"text": "AppleApplehttps://www.apple.com",
+					"href": "https://www.apple.com/"
+				}
+			],
+			"cite": {},
+			"realPosition": 2
+		},
+		{
+			"title": "Apple Inc.",
+			"link": "https://en.wikipedia.org/wiki/Apple_Inc.",
+			"description": "Apple Inc. (formerly Apple Computer, Inc.) is an American multinational corporation and technology company headquartered in Cupertino, California, ...",
+			"additional_links": [
+				{
+					"text": "Apple Inc.Wikipediahttps://en.wikipedia.org › wiki › Apple_Inc",
+					"href": "https://en.wikipedia.org/wiki/Apple_Inc."
+				},
+				{
+					"text": "",
+					"href": "https://en.wikipedia.org/wiki/Apple_Inc."
+				},
+				{
+					"text": "History",
+					"href": "https://en.wikipedia.org/wiki/History_of_Apple_Inc."
+				},
+				{
+					"text": "List of Apple products",
+					"href": "https://en.wikipedia.org/wiki/List_of_Apple_products"
+				},
+				{
+					"text": "Litigation involving Apple Inc.",
+					"href": "https://en.wikipedia.org/wiki/Litigation_involving_Apple_Inc."
+				},
+				{
+					"text": "Apple Park",
+					"href": "https://en.wikipedia.org/wiki/Apple_Park"
+				}
+			],
+			"cite": {
+				"domain": "https://en.wikipedia.org › wiki › Apple_Inc",
+				"span": " › wiki › Apple_Inc"
+			},
+			"realPosition": 3
+		},
+		{
+			"title": "Apple Inc. (AAPL) Company Profile & Facts",
+			"link": "https://finance.yahoo.com/quote/AAPL/profile/",
+			"description": "Apple Inc. designs, manufactures, and markets smartphones, personal computers, tablets, wearables, and accessories worldwide. The company offers iPhone, a line ...",
+			"additional_links": [
+				{
+					"text": "Apple Inc. (AAPL) Company Profile & FactsYahoo Financehttps://finance.yahoo.com › quote › AAPL › profile",
+					"href": "https://finance.yahoo.com/quote/AAPL/profile/"
+				}
+			],
+			"cite": {
+				"domain": "https://finance.yahoo.com › quote › AAPL › profile",
+				"span": " › quote › AAPL › profile"
+			},
+			"realPosition": 4
+		},
+		{
+			"title": "Apple Inc - Company Profile and News",
+			"link": "https://www.bloomberg.com/profile/company/AAPL:US",
+			"description": "Apple Inc. Apple Inc. designs, manufactures, and markets smartphones, personal computers, tablets, wearables and accessories, and sells a variety of related ...",
+			"additional_links": [
+				{
+					"text": "Apple Inc - Company Profile and NewsBloomberghttps://www.bloomberg.com › company › AAPL:US",
+					"href": "https://www.bloomberg.com/profile/company/AAPL:US"
+				},
+				{
+					"text": "",
+					"href": "https://www.bloomberg.com/profile/company/AAPL:US"
+				}
+			],
+			"cite": {
+				"domain": "https://www.bloomberg.com › company › AAPL:US",
+				"span": " › company › AAPL:US"
+			},
+			"realPosition": 5
+		},
+		{
+			"title": "Apple Inc. | History, Products, Headquarters, & Facts",
+			"link": "https://www.britannica.com/money/Apple-Inc",
+			"description": "May 22, 2024 — Apple Inc. is an American multinational technology company that revolutionized the technology sector through its innovation of computer ...",
+			"additional_links": [
+				{
+					"text": "Apple Inc. | History, Products, Headquarters, & FactsBritannicahttps://www.britannica.com › money › Apple-Inc",
+					"href": "https://www.britannica.com/money/Apple-Inc"
+				},
+				{
+					"text": "",
+					"href": "https://www.britannica.com/money/Apple-Inc"
+				}
+			],
+			"cite": {
+				"domain": "https://www.britannica.com › money › Apple-Inc",
+				"span": " › money › Apple-Inc"
+			},
+			"realPosition": 6
+		}
+	],
+	"shopping_ads": [],
+	"places": [
+		{
+			"title": "Apple Inc."
+		},
+		{
+			"title": "Apple Inc"
+		},
+		{
+			"title": "Apple Inc"
+		}
+	],
+	"related_searches": {
+		"images": [],
+		"text": [
+			{
+				"title": "apple inc full form",
+				"link": "https://www.google.com/search?sca_esv=6b6df170a5c9891b&sca_upv=1&q=Apple+Inc+full+form&sa=X&ved=2ahUKEwjLxuSJwM-GAxUHODQIHYuJBhgQ1QJ6BAhPEAE"
+			},
+			{
+				"title": "apple company history",
+				"link": "https://www.google.com/search?sca_esv=6b6df170a5c9891b&sca_upv=1&q=Apple+company+history&sa=X&ved=2ahUKEwjLxuSJwM-GAxUHODQIHYuJBhgQ1QJ6BAhOEAE"
+			},
+			{
+				"title": "apple store",
+				"link": "https://www.google.com/search?sca_esv=6b6df170a5c9891b&sca_upv=1&q=Apple+Store&sa=X&ved=2ahUKEwjLxuSJwM-GAxUHODQIHYuJBhgQ1QJ6BAhQEAE"
+			},
+			{
+				"title": "apple id",
+				"link": "https://www.google.com/search?sca_esv=6b6df170a5c9891b&sca_upv=1&q=Apple+id&sa=X&ved=2ahUKEwjLxuSJwM-GAxUHODQIHYuJBhgQ1QJ6BAhSEAE"
+			},
+			{
+				"title": "apple inc industry",
+				"link": "https://www.google.com/search?sca_esv=6b6df170a5c9891b&sca_upv=1&q=Apple+Inc+industry&sa=X&ved=2ahUKEwjLxuSJwM-GAxUHODQIHYuJBhgQ1QJ6BAhREAE"
+			},
+			{
+				"title": "apple login",
+				"link": "https://www.google.com/search?sca_esv=6b6df170a5c9891b&sca_upv=1&q=Apple+login&sa=X&ved=2ahUKEwjLxuSJwM-GAxUHODQIHYuJBhgQ1QJ6BAhTEAE"
+			}
+		]
+	},
+	"image_results": [],
+	"carousel": [],
+	"total": 2450000000,
+	"knowledge_graph": "",
+	"related_questions": [
+		"What does the Apple Inc do?",
+		"Why did Apple change to Apple Inc?",
+		"Who owns Apple Inc.?",
+		"What is Apple Inc best known for?"
+	],
+	"carousel_count": 0,
+	"ts": 2.491065263748169,
+	"device_type": null
+}

+ 9 - 2
backend/config.py

@@ -308,8 +308,9 @@ frontend_favicon = FRONTEND_BUILD_DIR / "favicon.png"
 if frontend_favicon.exists():
 if frontend_favicon.exists():
     try:
     try:
         shutil.copyfile(frontend_favicon, STATIC_DIR / "favicon.png")
         shutil.copyfile(frontend_favicon, STATIC_DIR / "favicon.png")
-    except PermissionError:
-        logging.error(f"No write permission to {STATIC_DIR / 'favicon.png'}")
+    except Exception as e:
+        logging.error(f"An error occurred: {e}")
+
 else:
 else:
     logging.warning(f"Frontend favicon not found at {frontend_favicon}")
     logging.warning(f"Frontend favicon not found at {frontend_favicon}")
 
 
@@ -915,6 +916,12 @@ SERPER_API_KEY = PersistentConfig(
     os.getenv("SERPER_API_KEY", ""),
     os.getenv("SERPER_API_KEY", ""),
 )
 )
 
 
+SERPLY_API_KEY = PersistentConfig(
+    "SERPLY_API_KEY",
+    "rag.web.search.serply_api_key",
+    os.getenv("SERPLY_API_KEY", ""),
+)
+
 
 
 RAG_WEB_SEARCH_RESULT_COUNT = PersistentConfig(
 RAG_WEB_SEARCH_RESULT_COUNT = PersistentConfig(
     "RAG_WEB_SEARCH_RESULT_COUNT",
     "RAG_WEB_SEARCH_RESULT_COUNT",

+ 2 - 2
package-lock.json

@@ -1,12 +1,12 @@
 {
 {
 	"name": "open-webui",
 	"name": "open-webui",
-	"version": "0.3.1",
+	"version": "0.3.2",
 	"lockfileVersion": 3,
 	"lockfileVersion": 3,
 	"requires": true,
 	"requires": true,
 	"packages": {
 	"packages": {
 		"": {
 		"": {
 			"name": "open-webui",
 			"name": "open-webui",
-			"version": "0.3.1",
+			"version": "0.3.2",
 			"dependencies": {
 			"dependencies": {
 				"@pyscript/core": "^0.4.32",
 				"@pyscript/core": "^0.4.32",
 				"@sveltejs/adapter-node": "^1.3.1",
 				"@sveltejs/adapter-node": "^1.3.1",

+ 2 - 2
package.json

@@ -1,6 +1,6 @@
 {
 {
 	"name": "open-webui",
 	"name": "open-webui",
-	"version": "0.3.1",
+	"version": "0.3.2",
 	"private": true,
 	"private": true,
 	"scripts": {
 	"scripts": {
 		"dev": "npm run pyodide:fetch && vite dev --host",
 		"dev": "npm run pyodide:fetch && vite dev --host",
@@ -71,4 +71,4 @@
 		"tippy.js": "^6.3.7",
 		"tippy.js": "^6.3.7",
 		"uuid": "^9.0.1"
 		"uuid": "^9.0.1"
 	}
 	}
-}
+}

+ 19 - 1
src/lib/components/admin/Settings/WebSearch.svelte

@@ -11,7 +11,7 @@
 	export let saveHandler: Function;
 	export let saveHandler: Function;
 
 
 	let webConfig = null;
 	let webConfig = null;
-	let webSearchEngines = ['searxng', 'google_pse', 'brave', 'serpstack', 'serper'];
+	let webSearchEngines = ['searxng', 'google_pse', 'brave', 'serpstack', 'serper', 'serply'];
 
 
 	let youtubeLanguage = 'en';
 	let youtubeLanguage = 'en';
 	let youtubeTranslation = null;
 	let youtubeTranslation = null;
@@ -188,6 +188,24 @@
 									</div>
 									</div>
 								</div>
 								</div>
 							</div>
 							</div>
+						{:else if webConfig.search.engine === 'serply'}
+							<div>
+								<div class=" self-center text-xs font-medium mb-1">
+									{$i18n.t('Serply API Key')}
+								</div>
+
+								<div class="flex w-full">
+									<div class="flex-1">
+										<input
+											class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
+											type="text"
+											placeholder={$i18n.t('Enter Serply API Key')}
+											bind:value={webConfig.search.serply_api_key}
+											autocomplete="off"
+										/>
+									</div>
+								</div>
+							</div>
 						{/if}
 						{/if}
 					</div>
 					</div>
 				{/if}
 				{/if}

+ 98 - 80
src/lib/components/chat/Chat.svelte

@@ -327,6 +327,9 @@
 				chatTextAreaElement.style.height = '';
 				chatTextAreaElement.style.height = '';
 			}
 			}
 
 
+			const _files = JSON.parse(JSON.stringify(files));
+			files = [];
+
 			prompt = '';
 			prompt = '';
 
 
 			// Create user message
 			// Create user message
@@ -338,7 +341,7 @@
 				role: 'user',
 				role: 'user',
 				user: _user ?? undefined,
 				user: _user ?? undefined,
 				content: userPrompt,
 				content: userPrompt,
-				files: files.length > 0 ? files : undefined,
+				files: _files.length > 0 ? _files : undefined,
 				timestamp: Math.floor(Date.now() / 1000), // Unix epoch
 				timestamp: Math.floor(Date.now() / 1000), // Unix epoch
 				models: selectedModels.filter((m, mIdx) => selectedModels.indexOf(m) === mIdx)
 				models: selectedModels.filter((m, mIdx) => selectedModels.indexOf(m) === mIdx)
 			};
 			};
@@ -355,32 +358,6 @@
 			// Wait until history/message have been updated
 			// Wait until history/message have been updated
 			await tick();
 			await tick();
 
 
-			// Create new chat if only one message in messages
-			if (messages.length == 1) {
-				if ($settings.saveChatHistory ?? true) {
-					chat = await createNewChat(localStorage.token, {
-						id: $chatId,
-						title: $i18n.t('New Chat'),
-						models: selectedModels,
-						system: $settings.system ?? undefined,
-						options: {
-							...($settings.params ?? {})
-						},
-						messages: messages,
-						history: history,
-						tags: [],
-						timestamp: Date.now()
-					});
-					await chats.set(await getChatList(localStorage.token));
-					await chatId.set(chat.id);
-				} else {
-					await chatId.set('local');
-				}
-				await tick();
-			}
-
-			files = [];
-
 			// Send prompt
 			// Send prompt
 			_responses = await sendPrompt(userPrompt, userMessageId);
 			_responses = await sendPrompt(userPrompt, userMessageId);
 		}
 		}
@@ -390,15 +367,78 @@
 
 
 	const sendPrompt = async (prompt, parentId, modelId = null) => {
 	const sendPrompt = async (prompt, parentId, modelId = null) => {
 		let _responses = [];
 		let _responses = [];
+
+		// If modelId is provided, use it, else use selected model
+		let selectedModelIds = modelId
+			? [modelId]
+			: atSelectedModel !== undefined
+			? [atSelectedModel.id]
+			: selectedModels;
+
+		// Create response messages for each selected model
+		const responseMessageIds = {};
+		for (const modelId of selectedModelIds) {
+			const model = $models.filter((m) => m.id === modelId).at(0);
+
+			if (model) {
+				let responseMessageId = uuidv4();
+				let responseMessage = {
+					parentId: parentId,
+					id: responseMessageId,
+					childrenIds: [],
+					role: 'assistant',
+					content: '',
+					model: model.id,
+					modelName: model.name ?? model.id,
+					userContext: null,
+					timestamp: Math.floor(Date.now() / 1000) // Unix epoch
+				};
+
+				// Add message to history and Set currentId to messageId
+				history.messages[responseMessageId] = responseMessage;
+				history.currentId = responseMessageId;
+
+				// Append messageId to childrenIds of parent message
+				if (parentId !== null) {
+					history.messages[parentId].childrenIds = [
+						...history.messages[parentId].childrenIds,
+						responseMessageId
+					];
+				}
+
+				responseMessageIds[modelId] = responseMessageId;
+			}
+		}
+		await tick();
+
+		// Create new chat if only one message in messages
+		if (messages.length == 2) {
+			if ($settings.saveChatHistory ?? true) {
+				chat = await createNewChat(localStorage.token, {
+					id: $chatId,
+					title: $i18n.t('New Chat'),
+					models: selectedModels,
+					system: $settings.system ?? undefined,
+					options: {
+						...($settings.params ?? {})
+					},
+					messages: messages,
+					history: history,
+					tags: [],
+					timestamp: Date.now()
+				});
+				await chats.set(await getChatList(localStorage.token));
+				await chatId.set(chat.id);
+			} else {
+				await chatId.set('local');
+			}
+			await tick();
+		}
+
 		const _chatId = JSON.parse(JSON.stringify($chatId));
 		const _chatId = JSON.parse(JSON.stringify($chatId));
 
 
 		await Promise.all(
 		await Promise.all(
-			(modelId
-				? [modelId]
-				: atSelectedModel !== undefined
-				? [atSelectedModel.id]
-				: selectedModels
-			).map(async (modelId) => {
+			selectedModelIds.map(async (modelId) => {
 				console.log('modelId', modelId);
 				console.log('modelId', modelId);
 				const model = $models.filter((m) => m.id === modelId).at(0);
 				const model = $models.filter((m) => m.id === modelId).at(0);
 
 
@@ -416,33 +456,8 @@
 						);
 						);
 					}
 					}
 
 
-					// Create response message
-					let responseMessageId = uuidv4();
-					let responseMessage = {
-						parentId: parentId,
-						id: responseMessageId,
-						childrenIds: [],
-						role: 'assistant',
-						content: '',
-						model: model.id,
-						modelName: model.name ?? model.id,
-						userContext: null,
-						timestamp: Math.floor(Date.now() / 1000) // Unix epoch
-					};
-
-					// Add message to history and Set currentId to messageId
-					history.messages[responseMessageId] = responseMessage;
-					history.currentId = responseMessageId;
-
-					// Append messageId to childrenIds of parent message
-					if (parentId !== null) {
-						history.messages[parentId].childrenIds = [
-							...history.messages[parentId].childrenIds,
-							responseMessageId
-						];
-					}
-
-					await tick();
+					let responseMessageId = responseMessageIds[modelId];
+					let responseMessage = history.messages[responseMessageId];
 
 
 					let userContext = null;
 					let userContext = null;
 					if ($settings?.memory ?? false) {
 					if ($settings?.memory ?? false) {
@@ -451,7 +466,6 @@
 								toast.error(error);
 								toast.error(error);
 								return null;
 								return null;
 							});
 							});
-
 							if (res) {
 							if (res) {
 								if (res.documents[0].length > 0) {
 								if (res.documents[0].length > 0) {
 									userContext = res.documents.reduce((acc, doc, index) => {
 									userContext = res.documents.reduce((acc, doc, index) => {
@@ -477,7 +491,6 @@
 					}
 					}
 
 
 					let _response = null;
 					let _response = null;
-
 					if (model?.owned_by === 'openai') {
 					if (model?.owned_by === 'openai') {
 						_response = await sendPromptOpenAI(model, prompt, responseMessageId, _chatId);
 						_response = await sendPromptOpenAI(model, prompt, responseMessageId, _chatId);
 					} else if (model) {
 					} else if (model) {
@@ -502,11 +515,13 @@
 	const getWebSearchResults = async (model: string, parentId: string, responseId: string) => {
 	const getWebSearchResults = async (model: string, parentId: string, responseId: string) => {
 		const responseMessage = history.messages[responseId];
 		const responseMessage = history.messages[responseId];
 
 
-		responseMessage.status = {
-			done: false,
-			action: 'web_search',
-			description: $i18n.t('Generating search query')
-		};
+		responseMessage.statusHistory = [
+			{
+				done: false,
+				action: 'web_search',
+				description: $i18n.t('Generating search query')
+			}
+		];
 		messages = messages;
 		messages = messages;
 
 
 		const prompt = history.messages[parentId].content;
 		const prompt = history.messages[parentId].content;
@@ -519,19 +534,21 @@
 
 
 		if (!searchQuery) {
 		if (!searchQuery) {
 			toast.warning($i18n.t('No search query generated'));
 			toast.warning($i18n.t('No search query generated'));
-			responseMessage.status = {
-				...responseMessage.status,
+			responseMessage.statusHistory.push({
 				done: true,
 				done: true,
 				error: true,
 				error: true,
+				action: 'web_search',
 				description: 'No search query generated'
 				description: 'No search query generated'
-			};
+			});
+
 			messages = messages;
 			messages = messages;
 		}
 		}
 
 
-		responseMessage.status = {
-			...responseMessage.status,
-			description: $i18n.t("Searching the web for '{{searchQuery}}'", { searchQuery })
-		};
+		responseMessage.statusHistory.push({
+			done: false,
+			action: 'web_search',
+			description: $i18n.t(`Searching "{{searchQuery}}"`, { searchQuery })
+		});
 		messages = messages;
 		messages = messages;
 
 
 		const results = await runWebSearch(localStorage.token, searchQuery).catch((error) => {
 		const results = await runWebSearch(localStorage.token, searchQuery).catch((error) => {
@@ -542,12 +559,13 @@
 		});
 		});
 
 
 		if (results) {
 		if (results) {
-			responseMessage.status = {
-				...responseMessage.status,
+			responseMessage.statusHistory.push({
 				done: true,
 				done: true,
+				action: 'web_search',
 				description: $i18n.t('Searched {{count}} sites', { count: results.filenames.length }),
 				description: $i18n.t('Searched {{count}} sites', { count: results.filenames.length }),
+				query: searchQuery,
 				urls: results.filenames
 				urls: results.filenames
-			};
+			});
 
 
 			if (responseMessage?.files ?? undefined === undefined) {
 			if (responseMessage?.files ?? undefined === undefined) {
 				responseMessage.files = [];
 				responseMessage.files = [];
@@ -562,12 +580,12 @@
 
 
 			messages = messages;
 			messages = messages;
 		} else {
 		} else {
-			responseMessage.status = {
-				...responseMessage.status,
+			responseMessage.statusHistory.push({
 				done: true,
 				done: true,
 				error: true,
 				error: true,
+				action: 'web_search',
 				description: 'No search results found'
 				description: 'No search results found'
-			};
+			});
 			messages = messages;
 			messages = messages;
 		}
 		}
 	};
 	};

+ 1 - 0
src/lib/components/chat/MessageInput.svelte

@@ -29,6 +29,7 @@
 	import InputMenu from './MessageInput/InputMenu.svelte';
 	import InputMenu from './MessageInput/InputMenu.svelte';
 	import Headphone from '../icons/Headphone.svelte';
 	import Headphone from '../icons/Headphone.svelte';
 	import VoiceRecording from './MessageInput/VoiceRecording.svelte';
 	import VoiceRecording from './MessageInput/VoiceRecording.svelte';
+	import { transcribeAudio } from '$lib/apis/audio';
 
 
 	const i18n = getContext('i18n');
 	const i18n = getContext('i18n');
 
 

+ 1 - 1
src/lib/components/chat/MessageInput/CallOverlay.svelte

@@ -205,7 +205,7 @@
 
 
 				if (_responses.at(0)) {
 				if (_responses.at(0)) {
 					const content = _responses[0];
 					const content = _responses[0];
-					if (content) {
+					if ((content ?? '').trim() !== '') {
 						assistantSpeakingHandler(content);
 						assistantSpeakingHandler(content);
 					}
 					}
 				}
 				}

+ 89 - 81
src/lib/components/chat/Messages/ResponseMessage.svelte

@@ -211,93 +211,98 @@
 			speaking = null;
 			speaking = null;
 			speakingIdx = null;
 			speakingIdx = null;
 		} else {
 		} else {
-			speaking = true;
-
-			if ($config.audio.tts.engine === 'openai') {
-				loadingSpeech = true;
-
-				const sentences = extractSentences(message.content).reduce((mergedTexts, currentText) => {
-					const lastIndex = mergedTexts.length - 1;
-					if (lastIndex >= 0) {
-						const previousText = mergedTexts[lastIndex];
-						const wordCount = previousText.split(/\s+/).length;
-						if (wordCount < 2) {
-							mergedTexts[lastIndex] = previousText + ' ' + currentText;
+			if ((message?.content ?? '').trim() !== '') {
+				speaking = true;
+
+				if ($config.audio.tts.engine === 'openai') {
+					loadingSpeech = true;
+
+					const sentences = extractSentences(message.content).reduce((mergedTexts, currentText) => {
+						const lastIndex = mergedTexts.length - 1;
+						if (lastIndex >= 0) {
+							const previousText = mergedTexts[lastIndex];
+							const wordCount = previousText.split(/\s+/).length;
+							if (wordCount < 2) {
+								mergedTexts[lastIndex] = previousText + ' ' + currentText;
+							} else {
+								mergedTexts.push(currentText);
+							}
 						} else {
 						} else {
 							mergedTexts.push(currentText);
 							mergedTexts.push(currentText);
 						}
 						}
-					} else {
-						mergedTexts.push(currentText);
-					}
-					return mergedTexts;
-				}, []);
-
-				console.log(sentences);
-
-				sentencesAudio = sentences.reduce((a, e, i, arr) => {
-					a[i] = null;
-					return a;
-				}, {});
-
-				let lastPlayedAudioPromise = Promise.resolve(); // Initialize a promise that resolves immediately
-
-				for (const [idx, sentence] of sentences.entries()) {
-					const res = await synthesizeOpenAISpeech(
-						localStorage.token,
-						$settings?.audio?.tts?.voice ?? $config?.audio?.tts?.voice,
-						sentence
-					).catch((error) => {
-						toast.error(error);
-
-						speaking = null;
-						loadingSpeech = false;
-
-						return null;
-					});
-
-					if (res) {
-						const blob = await res.blob();
-						const blobUrl = URL.createObjectURL(blob);
-						const audio = new Audio(blobUrl);
-						sentencesAudio[idx] = audio;
-						loadingSpeech = false;
-						lastPlayedAudioPromise = lastPlayedAudioPromise.then(() => playAudio(idx));
-					}
-				}
-			} else {
-				let voices = [];
-				const getVoicesLoop = setInterval(async () => {
-					voices = await speechSynthesis.getVoices();
-					if (voices.length > 0) {
-						clearInterval(getVoicesLoop);
+						return mergedTexts;
+					}, []);
 
 
-						const voice =
-							voices
-								?.filter(
-									(v) => v.voiceURI === ($settings?.audio?.tts?.voice ?? $config?.audio?.tts?.voice)
-								)
-								?.at(0) ?? undefined;
+					console.log(sentences);
 
 
-						console.log(voice);
+					sentencesAudio = sentences.reduce((a, e, i, arr) => {
+						a[i] = null;
+						return a;
+					}, {});
 
 
-						const speak = new SpeechSynthesisUtterance(message.content);
+					let lastPlayedAudioPromise = Promise.resolve(); // Initialize a promise that resolves immediately
 
 
-						console.log(speak);
+					for (const [idx, sentence] of sentences.entries()) {
+						const res = await synthesizeOpenAISpeech(
+							localStorage.token,
+							$settings?.audio?.tts?.voice ?? $config?.audio?.tts?.voice,
+							sentence
+						).catch((error) => {
+							toast.error(error);
 
 
-						speak.onend = () => {
 							speaking = null;
 							speaking = null;
-							if ($settings.conversationMode) {
-								document.getElementById('voice-input-button')?.click();
+							loadingSpeech = false;
+
+							return null;
+						});
+
+						if (res) {
+							const blob = await res.blob();
+							const blobUrl = URL.createObjectURL(blob);
+							const audio = new Audio(blobUrl);
+							sentencesAudio[idx] = audio;
+							loadingSpeech = false;
+							lastPlayedAudioPromise = lastPlayedAudioPromise.then(() => playAudio(idx));
+						}
+					}
+				} else {
+					let voices = [];
+					const getVoicesLoop = setInterval(async () => {
+						voices = await speechSynthesis.getVoices();
+						if (voices.length > 0) {
+							clearInterval(getVoicesLoop);
+
+							const voice =
+								voices
+									?.filter(
+										(v) =>
+											v.voiceURI === ($settings?.audio?.tts?.voice ?? $config?.audio?.tts?.voice)
+									)
+									?.at(0) ?? undefined;
+
+							console.log(voice);
+
+							const speak = new SpeechSynthesisUtterance(message.content);
+
+							console.log(speak);
+
+							speak.onend = () => {
+								speaking = null;
+								if ($settings.conversationMode) {
+									document.getElementById('voice-input-button')?.click();
+								}
+							};
+
+							if (voice) {
+								speak.voice = voice;
 							}
 							}
-						};
 
 
-						if (voice) {
-							speak.voice = voice;
+							speechSynthesis.speak(speak);
 						}
 						}
-
-						speechSynthesis.speak(speak);
-					}
-				}, 100);
+					}, 100);
+				}
+			} else {
+				toast.error('No content to speak');
 			}
 			}
 		}
 		}
 	};
 	};
@@ -415,26 +420,29 @@
 				class="prose chat-{message.role} w-full max-w-full dark:prose-invert prose-headings:my-0 prose-headings:-mb-4 prose-p:m-0 prose-p:-mb-6 prose-pre:my-0 prose-table:my-0 prose-blockquote:my-0 prose-img:my-0 prose-ul:-my-4 prose-ol:-my-4 prose-li:-my-3 prose-ul:-mb-6 prose-ol:-mb-8 prose-ol:p-0 prose-li:-mb-4 whitespace-pre-line"
 				class="prose chat-{message.role} w-full max-w-full dark:prose-invert prose-headings:my-0 prose-headings:-mb-4 prose-p:m-0 prose-p:-mb-6 prose-pre:my-0 prose-table:my-0 prose-blockquote:my-0 prose-img:my-0 prose-ul:-my-4 prose-ol:-my-4 prose-li:-my-3 prose-ul:-mb-6 prose-ol:-mb-8 prose-ol:p-0 prose-li:-mb-4 whitespace-pre-line"
 			>
 			>
 				<div>
 				<div>
-					{#if message?.status}
+					{#if (message?.statusHistory ?? [...(message?.status ? [message?.status] : [])]).length > 0}
+						{@const status = (
+							message?.statusHistory ?? [...(message?.status ? [message?.status] : [])]
+						).at(-1)}
 						<div class="flex items-center gap-2 pt-1 pb-1">
 						<div class="flex items-center gap-2 pt-1 pb-1">
-							{#if message?.status?.done === false}
+							{#if status.done === false}
 								<div class="">
 								<div class="">
 									<Spinner className="size-4" />
 									<Spinner className="size-4" />
 								</div>
 								</div>
 							{/if}
 							{/if}
 
 
-							{#if message?.status?.action === 'web_search' && message?.status?.urls}
-								<WebSearchResults urls={message?.status?.urls}>
+							{#if status?.action === 'web_search' && status?.urls}
+								<WebSearchResults {status}>
 									<div class="flex flex-col justify-center -space-y-0.5">
 									<div class="flex flex-col justify-center -space-y-0.5">
 										<div class="text-base line-clamp-1 text-wrap">
 										<div class="text-base line-clamp-1 text-wrap">
-											{message.status.description}
+											{status?.description}
 										</div>
 										</div>
 									</div>
 									</div>
 								</WebSearchResults>
 								</WebSearchResults>
 							{:else}
 							{:else}
 								<div class="flex flex-col justify-center -space-y-0.5">
 								<div class="flex flex-col justify-center -space-y-0.5">
 									<div class=" text-gray-500 dark:text-gray-500 text-base line-clamp-1 text-wrap">
 									<div class=" text-gray-500 dark:text-gray-500 text-base line-clamp-1 text-wrap">
-										{message.status.description}
+										{status?.description}
 									</div>
 									</div>
 								</div>
 								</div>
 							{/if}
 							{/if}

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

@@ -1,10 +1,11 @@
 <script lang="ts">
 <script lang="ts">
 	import ChevronDown from '$lib/components/icons/ChevronDown.svelte';
 	import ChevronDown from '$lib/components/icons/ChevronDown.svelte';
 	import ChevronUp from '$lib/components/icons/ChevronUp.svelte';
 	import ChevronUp from '$lib/components/icons/ChevronUp.svelte';
+	import MagnifyingGlass from '$lib/components/icons/MagnifyingGlass.svelte';
 	import { Collapsible } from 'bits-ui';
 	import { Collapsible } from 'bits-ui';
 	import { slide } from 'svelte/transition';
 	import { slide } from 'svelte/transition';
 
 
-	export let urls = [];
+	export let status = { urls: [], query: '' };
 	let state = false;
 	let state = false;
 </script>
 </script>
 
 
@@ -27,11 +28,45 @@
 		class=" text-sm border border-gray-300/30 dark:border-gray-700/50 rounded-xl"
 		class=" text-sm border border-gray-300/30 dark:border-gray-700/50 rounded-xl"
 		transition={slide}
 		transition={slide}
 	>
 	>
-		{#each urls as url, urlIdx}
+		{#if status?.query}
+			<a
+				href="https://www.google.com/search?q={status.query}"
+				target="_blank"
+				class="flex w-full items-center p-3 px-4 border-b border-gray-300/30 dark:border-gray-700/50 group/item justify-between font-normal text-gray-800 dark:text-gray-300 no-underline"
+			>
+				<div class="flex gap-2 items-center">
+					<MagnifyingGlass />
+
+					<div class=" line-clamp-1">
+						{status.query}
+					</div>
+				</div>
+
+				<div
+					class=" ml-1 text-white dark:text-gray-900 group-hover/item:text-gray-600 dark:group-hover/item:text-white transition"
+				>
+					<!--  -->
+					<svg
+						xmlns="http://www.w3.org/2000/svg"
+						viewBox="0 0 16 16"
+						fill="currentColor"
+						class="size-4"
+					>
+						<path
+							fill-rule="evenodd"
+							d="M4.22 11.78a.75.75 0 0 1 0-1.06L9.44 5.5H5.75a.75.75 0 0 1 0-1.5h5.5a.75.75 0 0 1 .75.75v5.5a.75.75 0 0 1-1.5 0V6.56l-5.22 5.22a.75.75 0 0 1-1.06 0Z"
+							clip-rule="evenodd"
+						/>
+					</svg>
+				</div>
+			</a>
+		{/if}
+
+		{#each status.urls as url, urlIdx}
 			<a
 			<a
 				href={url}
 				href={url}
 				target="_blank"
 				target="_blank"
-				class="flex w-full items-center p-3 px-4 {urlIdx === urls.length - 1
+				class="flex w-full items-center p-3 px-4 {urlIdx === status.urls.length - 1
 					? ''
 					? ''
 					: 'border-b border-gray-300/30 dark:border-gray-700/50'} group/item justify-between font-normal text-gray-800 dark:text-gray-300"
 					: 'border-b border-gray-300/30 dark:border-gray-700/50'} group/item justify-between font-normal text-gray-800 dark:text-gray-300"
 			>
 			>

+ 164 - 160
src/lib/components/chat/Settings/Advanced/AdvancedParams.svelte

@@ -5,21 +5,23 @@
 
 
 	const i18n = getContext('i18n');
 	const i18n = getContext('i18n');
 
 
+	export let admin = false;
+
 	export let params = {
 	export let params = {
 		// Advanced
 		// Advanced
-		seed: 0,
+		seed: null,
 		stop: null,
 		stop: null,
-		temperature: '',
-		frequency_penalty: '',
-		repeat_last_n: '',
-		mirostat: '',
-		mirostat_eta: '',
-		mirostat_tau: '',
-		top_k: '',
-		top_p: '',
-		tfs_z: '',
-		num_ctx: '',
-		max_tokens: '',
+		temperature: null,
+		frequency_penalty: null,
+		repeat_last_n: null,
+		mirostat: null,
+		mirostat_eta: null,
+		mirostat_tau: null,
+		top_k: null,
+		top_p: null,
+		tfs_z: null,
+		num_ctx: null,
+		max_tokens: null,
 		use_mmap: null,
 		use_mmap: null,
 		use_mlock: null,
 		use_mlock: null,
 		num_thread: null,
 		num_thread: null,
@@ -112,10 +114,10 @@
 				class="p-1 px-3 text-xs flex rounded transition"
 				class="p-1 px-3 text-xs flex rounded transition"
 				type="button"
 				type="button"
 				on:click={() => {
 				on:click={() => {
-					params.temperature = (params?.temperature ?? '') === '' ? 0.8 : '';
+					params.temperature = (params?.temperature ?? null) === null ? 0.8 : null;
 				}}
 				}}
 			>
 			>
-				{#if (params?.temperature ?? '') === ''}
+				{#if (params?.temperature ?? null) === null}
 					<span class="ml-2 self-center"> {$i18n.t('Default')} </span>
 					<span class="ml-2 self-center"> {$i18n.t('Default')} </span>
 				{:else}
 				{:else}
 					<span class="ml-2 self-center"> {$i18n.t('Custom')} </span>
 					<span class="ml-2 self-center"> {$i18n.t('Custom')} </span>
@@ -123,7 +125,7 @@
 			</button>
 			</button>
 		</div>
 		</div>
 
 
-		{#if (params?.temperature ?? '') !== ''}
+		{#if (params?.temperature ?? null) !== null}
 			<div class="flex mt-0.5 space-x-2">
 			<div class="flex mt-0.5 space-x-2">
 				<div class=" flex-1">
 				<div class=" flex-1">
 					<input
 					<input
@@ -143,7 +145,7 @@
 						class=" bg-transparent text-center w-14"
 						class=" bg-transparent text-center w-14"
 						min="0"
 						min="0"
 						max="1"
 						max="1"
-						step="0.05"
+						step="any"
 					/>
 					/>
 				</div>
 				</div>
 			</div>
 			</div>
@@ -158,10 +160,10 @@
 				class="p-1 px-3 text-xs flex rounded transition"
 				class="p-1 px-3 text-xs flex rounded transition"
 				type="button"
 				type="button"
 				on:click={() => {
 				on:click={() => {
-					params.mirostat = (params?.mirostat ?? '') === '' ? 0 : '';
+					params.mirostat = (params?.mirostat ?? null) === null ? 0 : null;
 				}}
 				}}
 			>
 			>
-				{#if (params?.mirostat ?? '') === ''}
+				{#if (params?.mirostat ?? null) === null}
 					<span class="ml-2 self-center">{$i18n.t('Default')}</span>
 					<span class="ml-2 self-center">{$i18n.t('Default')}</span>
 				{:else}
 				{:else}
 					<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
 					<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
@@ -169,7 +171,7 @@
 			</button>
 			</button>
 		</div>
 		</div>
 
 
-		{#if (params?.mirostat ?? '') !== ''}
+		{#if (params?.mirostat ?? null) !== null}
 			<div class="flex mt-0.5 space-x-2">
 			<div class="flex mt-0.5 space-x-2">
 				<div class=" flex-1">
 				<div class=" flex-1">
 					<input
 					<input
@@ -204,10 +206,10 @@
 				class="p-1 px-3 text-xs flex rounded transition"
 				class="p-1 px-3 text-xs flex rounded transition"
 				type="button"
 				type="button"
 				on:click={() => {
 				on:click={() => {
-					params.mirostat_eta = (params?.mirostat_eta ?? '') === '' ? 0.1 : '';
+					params.mirostat_eta = (params?.mirostat_eta ?? null) === null ? 0.1 : null;
 				}}
 				}}
 			>
 			>
-				{#if (params?.mirostat_eta ?? '') === ''}
+				{#if (params?.mirostat_eta ?? null) === null}
 					<span class="ml-2 self-center">{$i18n.t('Default')}</span>
 					<span class="ml-2 self-center">{$i18n.t('Default')}</span>
 				{:else}
 				{:else}
 					<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
 					<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
@@ -215,7 +217,7 @@
 			</button>
 			</button>
 		</div>
 		</div>
 
 
-		{#if (params?.mirostat_eta ?? '') !== ''}
+		{#if (params?.mirostat_eta ?? null) !== null}
 			<div class="flex mt-0.5 space-x-2">
 			<div class="flex mt-0.5 space-x-2">
 				<div class=" flex-1">
 				<div class=" flex-1">
 					<input
 					<input
@@ -235,7 +237,7 @@
 						class=" bg-transparent text-center w-14"
 						class=" bg-transparent text-center w-14"
 						min="0"
 						min="0"
 						max="1"
 						max="1"
-						step="0.05"
+						step="any"
 					/>
 					/>
 				</div>
 				</div>
 			</div>
 			</div>
@@ -250,10 +252,10 @@
 				class="p-1 px-3 text-xs flex rounded transition"
 				class="p-1 px-3 text-xs flex rounded transition"
 				type="button"
 				type="button"
 				on:click={() => {
 				on:click={() => {
-					params.mirostat_tau = (params?.mirostat_tau ?? '') === '' ? 5.0 : '';
+					params.mirostat_tau = (params?.mirostat_tau ?? null) === null ? 5.0 : null;
 				}}
 				}}
 			>
 			>
-				{#if (params?.mirostat_tau ?? '') === ''}
+				{#if (params?.mirostat_tau ?? null) === null}
 					<span class="ml-2 self-center">{$i18n.t('Default')}</span>
 					<span class="ml-2 self-center">{$i18n.t('Default')}</span>
 				{:else}
 				{:else}
 					<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
 					<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
@@ -261,7 +263,7 @@
 			</button>
 			</button>
 		</div>
 		</div>
 
 
-		{#if (params?.mirostat_tau ?? '') !== ''}
+		{#if (params?.mirostat_tau ?? null) !== null}
 			<div class="flex mt-0.5 space-x-2">
 			<div class="flex mt-0.5 space-x-2">
 				<div class=" flex-1">
 				<div class=" flex-1">
 					<input
 					<input
@@ -281,7 +283,7 @@
 						class=" bg-transparent text-center w-14"
 						class=" bg-transparent text-center w-14"
 						min="0"
 						min="0"
 						max="10"
 						max="10"
-						step="0.5"
+						step="any"
 					/>
 					/>
 				</div>
 				</div>
 			</div>
 			</div>
@@ -296,10 +298,10 @@
 				class="p-1 px-3 text-xs flex rounded transition"
 				class="p-1 px-3 text-xs flex rounded transition"
 				type="button"
 				type="button"
 				on:click={() => {
 				on:click={() => {
-					params.top_k = (params?.top_k ?? '') === '' ? 40 : '';
+					params.top_k = (params?.top_k ?? null) === null ? 40 : null;
 				}}
 				}}
 			>
 			>
-				{#if (params?.top_k ?? '') === ''}
+				{#if (params?.top_k ?? null) === null}
 					<span class="ml-2 self-center">{$i18n.t('Default')}</span>
 					<span class="ml-2 self-center">{$i18n.t('Default')}</span>
 				{:else}
 				{:else}
 					<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
 					<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
@@ -307,7 +309,7 @@
 			</button>
 			</button>
 		</div>
 		</div>
 
 
-		{#if (params?.top_k ?? '') !== ''}
+		{#if (params?.top_k ?? null) !== null}
 			<div class="flex mt-0.5 space-x-2">
 			<div class="flex mt-0.5 space-x-2">
 				<div class=" flex-1">
 				<div class=" flex-1">
 					<input
 					<input
@@ -327,7 +329,7 @@
 						class=" bg-transparent text-center w-14"
 						class=" bg-transparent text-center w-14"
 						min="0"
 						min="0"
 						max="100"
 						max="100"
-						step="0.5"
+						step="any"
 					/>
 					/>
 				</div>
 				</div>
 			</div>
 			</div>
@@ -342,10 +344,10 @@
 				class="p-1 px-3 text-xs flex rounded transition"
 				class="p-1 px-3 text-xs flex rounded transition"
 				type="button"
 				type="button"
 				on:click={() => {
 				on:click={() => {
-					params.top_p = (params?.top_p ?? '') === '' ? 0.9 : '';
+					params.top_p = (params?.top_p ?? null) === null ? 0.9 : null;
 				}}
 				}}
 			>
 			>
-				{#if (params?.top_p ?? '') === ''}
+				{#if (params?.top_p ?? null) === null}
 					<span class="ml-2 self-center">{$i18n.t('Default')}</span>
 					<span class="ml-2 self-center">{$i18n.t('Default')}</span>
 				{:else}
 				{:else}
 					<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
 					<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
@@ -353,7 +355,7 @@
 			</button>
 			</button>
 		</div>
 		</div>
 
 
-		{#if (params?.top_p ?? '') !== ''}
+		{#if (params?.top_p ?? null) !== null}
 			<div class="flex mt-0.5 space-x-2">
 			<div class="flex mt-0.5 space-x-2">
 				<div class=" flex-1">
 				<div class=" flex-1">
 					<input
 					<input
@@ -373,7 +375,7 @@
 						class=" bg-transparent text-center w-14"
 						class=" bg-transparent text-center w-14"
 						min="0"
 						min="0"
 						max="1"
 						max="1"
-						step="0.05"
+						step="any"
 					/>
 					/>
 				</div>
 				</div>
 			</div>
 			</div>
@@ -388,10 +390,10 @@
 				class="p-1 px-3 text-xs flex rounded transition"
 				class="p-1 px-3 text-xs flex rounded transition"
 				type="button"
 				type="button"
 				on:click={() => {
 				on:click={() => {
-					params.frequency_penalty = (params?.frequency_penalty ?? '') === '' ? 1.1 : '';
+					params.frequency_penalty = (params?.frequency_penalty ?? null) === null ? 1.1 : null;
 				}}
 				}}
 			>
 			>
-				{#if (params?.frequency_penalty ?? '') === ''}
+				{#if (params?.frequency_penalty ?? null) === null}
 					<span class="ml-2 self-center">{$i18n.t('Default')}</span>
 					<span class="ml-2 self-center">{$i18n.t('Default')}</span>
 				{:else}
 				{:else}
 					<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
 					<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
@@ -399,7 +401,7 @@
 			</button>
 			</button>
 		</div>
 		</div>
 
 
-		{#if (params?.frequency_penalty ?? '') !== ''}
+		{#if (params?.frequency_penalty ?? null) !== null}
 			<div class="flex mt-0.5 space-x-2">
 			<div class="flex mt-0.5 space-x-2">
 				<div class=" flex-1">
 				<div class=" flex-1">
 					<input
 					<input
@@ -419,7 +421,7 @@
 						class=" bg-transparent text-center w-14"
 						class=" bg-transparent text-center w-14"
 						min="0"
 						min="0"
 						max="2"
 						max="2"
-						step="0.05"
+						step="any"
 					/>
 					/>
 				</div>
 				</div>
 			</div>
 			</div>
@@ -434,10 +436,10 @@
 				class="p-1 px-3 text-xs flex rounded transition"
 				class="p-1 px-3 text-xs flex rounded transition"
 				type="button"
 				type="button"
 				on:click={() => {
 				on:click={() => {
-					params.repeat_last_n = (params?.repeat_last_n ?? '') === '' ? 64 : '';
+					params.repeat_last_n = (params?.repeat_last_n ?? null) === null ? 64 : null;
 				}}
 				}}
 			>
 			>
-				{#if (params?.repeat_last_n ?? '') === ''}
+				{#if (params?.repeat_last_n ?? null) === null}
 					<span class="ml-2 self-center">{$i18n.t('Default')}</span>
 					<span class="ml-2 self-center">{$i18n.t('Default')}</span>
 				{:else}
 				{:else}
 					<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
 					<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
@@ -445,7 +447,7 @@
 			</button>
 			</button>
 		</div>
 		</div>
 
 
-		{#if (params?.repeat_last_n ?? '') !== ''}
+		{#if (params?.repeat_last_n ?? null) !== null}
 			<div class="flex mt-0.5 space-x-2">
 			<div class="flex mt-0.5 space-x-2">
 				<div class=" flex-1">
 				<div class=" flex-1">
 					<input
 					<input
@@ -480,10 +482,10 @@
 				class="p-1 px-3 text-xs flex rounded transition"
 				class="p-1 px-3 text-xs flex rounded transition"
 				type="button"
 				type="button"
 				on:click={() => {
 				on:click={() => {
-					params.tfs_z = (params?.tfs_z ?? '') === '' ? 1 : '';
+					params.tfs_z = (params?.tfs_z ?? null) === null ? 1 : null;
 				}}
 				}}
 			>
 			>
-				{#if (params?.tfs_z ?? '') === ''}
+				{#if (params?.tfs_z ?? null) === null}
 					<span class="ml-2 self-center">{$i18n.t('Default')}</span>
 					<span class="ml-2 self-center">{$i18n.t('Default')}</span>
 				{:else}
 				{:else}
 					<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
 					<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
@@ -491,7 +493,7 @@
 			</button>
 			</button>
 		</div>
 		</div>
 
 
-		{#if (params?.tfs_z ?? '') !== ''}
+		{#if (params?.tfs_z ?? null) !== null}
 			<div class="flex mt-0.5 space-x-2">
 			<div class="flex mt-0.5 space-x-2">
 				<div class=" flex-1">
 				<div class=" flex-1">
 					<input
 					<input
@@ -511,7 +513,7 @@
 						class=" bg-transparent text-center w-14"
 						class=" bg-transparent text-center w-14"
 						min="0"
 						min="0"
 						max="2"
 						max="2"
-						step="0.05"
+						step="any"
 					/>
 					/>
 				</div>
 				</div>
 			</div>
 			</div>
@@ -526,10 +528,10 @@
 				class="p-1 px-3 text-xs flex rounded transition"
 				class="p-1 px-3 text-xs flex rounded transition"
 				type="button"
 				type="button"
 				on:click={() => {
 				on:click={() => {
-					params.num_ctx = (params?.num_ctx ?? '') === '' ? 2048 : '';
+					params.num_ctx = (params?.num_ctx ?? null) === null ? 2048 : null;
 				}}
 				}}
 			>
 			>
-				{#if (params?.num_ctx ?? '') === ''}
+				{#if (params?.num_ctx ?? null) === null}
 					<span class="ml-2 self-center">{$i18n.t('Default')}</span>
 					<span class="ml-2 self-center">{$i18n.t('Default')}</span>
 				{:else}
 				{:else}
 					<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
 					<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
@@ -537,7 +539,7 @@
 			</button>
 			</button>
 		</div>
 		</div>
 
 
-		{#if (params?.num_ctx ?? '') !== ''}
+		{#if (params?.num_ctx ?? null) !== null}
 			<div class="flex mt-0.5 space-x-2">
 			<div class="flex mt-0.5 space-x-2">
 				<div class=" flex-1">
 				<div class=" flex-1">
 					<input
 					<input
@@ -571,10 +573,10 @@
 				class="p-1 px-3 text-xs flex rounded transition"
 				class="p-1 px-3 text-xs flex rounded transition"
 				type="button"
 				type="button"
 				on:click={() => {
 				on:click={() => {
-					params.max_tokens = (params?.max_tokens ?? '') === '' ? 128 : '';
+					params.max_tokens = (params?.max_tokens ?? null) === null ? 128 : null;
 				}}
 				}}
 			>
 			>
-				{#if (params?.max_tokens ?? '') === ''}
+				{#if (params?.max_tokens ?? null) === null}
 					<span class="ml-2 self-center">{$i18n.t('Default')}</span>
 					<span class="ml-2 self-center">{$i18n.t('Default')}</span>
 				{:else}
 				{:else}
 					<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
 					<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
@@ -582,7 +584,7 @@
 			</button>
 			</button>
 		</div>
 		</div>
 
 
-		{#if (params?.max_tokens ?? '') !== ''}
+		{#if (params?.max_tokens ?? null) !== null}
 			<div class="flex mt-0.5 space-x-2">
 			<div class="flex mt-0.5 space-x-2">
 				<div class=" flex-1">
 				<div class=" flex-1">
 					<input
 					<input
@@ -609,122 +611,124 @@
 		{/if}
 		{/if}
 	</div>
 	</div>
 
 
-	<div class=" py-0.5 w-full justify-between">
-		<div class="flex w-full justify-between">
-			<div class=" self-center text-xs font-medium">{$i18n.t('use_mmap (Ollama)')}</div>
-
-			<button
-				class="p-1 px-3 text-xs flex rounded transition"
-				type="button"
-				on:click={() => {
-					params.use_mmap = (params?.use_mmap ?? null) === null ? true : null;
-				}}
-			>
-				{#if (params?.use_mmap ?? null) === null}
-					<span class="ml-2 self-center">{$i18n.t('Default')}</span>
-				{:else}
-					<span class="ml-2 self-center">{$i18n.t('On')}</span>
-				{/if}
-			</button>
+	{#if admin}
+		<div class=" py-0.5 w-full justify-between">
+			<div class="flex w-full justify-between">
+				<div class=" self-center text-xs font-medium">{$i18n.t('use_mmap (Ollama)')}</div>
+
+				<button
+					class="p-1 px-3 text-xs flex rounded transition"
+					type="button"
+					on:click={() => {
+						params.use_mmap = (params?.use_mmap ?? null) === null ? true : null;
+					}}
+				>
+					{#if (params?.use_mmap ?? null) === null}
+						<span class="ml-2 self-center">{$i18n.t('Default')}</span>
+					{:else}
+						<span class="ml-2 self-center">{$i18n.t('On')}</span>
+					{/if}
+				</button>
+			</div>
 		</div>
 		</div>
-	</div>
 
 
-	<div class=" py-0.5 w-full justify-between">
-		<div class="flex w-full justify-between">
-			<div class=" self-center text-xs font-medium">{$i18n.t('use_mlock (Ollama)')}</div>
-
-			<button
-				class="p-1 px-3 text-xs flex rounded transition"
-				type="button"
-				on:click={() => {
-					params.use_mlock = (params?.use_mlock ?? null) === null ? true : null;
-				}}
-			>
-				{#if (params?.use_mlock ?? null) === null}
-					<span class="ml-2 self-center">{$i18n.t('Default')}</span>
-				{:else}
-					<span class="ml-2 self-center">{$i18n.t('On')}</span>
-				{/if}
-			</button>
+		<div class=" py-0.5 w-full justify-between">
+			<div class="flex w-full justify-between">
+				<div class=" self-center text-xs font-medium">{$i18n.t('use_mlock (Ollama)')}</div>
+
+				<button
+					class="p-1 px-3 text-xs flex rounded transition"
+					type="button"
+					on:click={() => {
+						params.use_mlock = (params?.use_mlock ?? null) === null ? true : null;
+					}}
+				>
+					{#if (params?.use_mlock ?? null) === null}
+						<span class="ml-2 self-center">{$i18n.t('Default')}</span>
+					{:else}
+						<span class="ml-2 self-center">{$i18n.t('On')}</span>
+					{/if}
+				</button>
+			</div>
 		</div>
 		</div>
-	</div>
 
 
-	<div class=" py-0.5 w-full justify-between">
-		<div class="flex w-full justify-between">
-			<div class=" self-center text-xs font-medium">{$i18n.t('num_thread (Ollama)')}</div>
+		<div class=" py-0.5 w-full justify-between">
+			<div class="flex w-full justify-between">
+				<div class=" self-center text-xs font-medium">{$i18n.t('num_thread (Ollama)')}</div>
+
+				<button
+					class="p-1 px-3 text-xs flex rounded transition"
+					type="button"
+					on:click={() => {
+						params.num_thread = (params?.num_thread ?? null) === null ? 2 : null;
+					}}
+				>
+					{#if (params?.num_thread ?? null) === null}
+						<span class="ml-2 self-center">{$i18n.t('Default')}</span>
+					{:else}
+						<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
+					{/if}
+				</button>
+			</div>
 
 
-			<button
-				class="p-1 px-3 text-xs flex rounded transition"
-				type="button"
-				on:click={() => {
-					params.num_thread = (params?.num_thread ?? null) === null ? 2 : null;
-				}}
-			>
-				{#if (params?.num_thread ?? null) === null}
-					<span class="ml-2 self-center">{$i18n.t('Default')}</span>
-				{:else}
-					<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
-				{/if}
-			</button>
+			{#if (params?.num_thread ?? null) !== null}
+				<div class="flex mt-0.5 space-x-2">
+					<div class=" flex-1">
+						<input
+							id="steps-range"
+							type="range"
+							min="1"
+							max="256"
+							step="1"
+							bind:value={params.num_thread}
+							class="w-full h-2 rounded-lg appearance-none cursor-pointer dark:bg-gray-700"
+						/>
+					</div>
+					<div class="">
+						<input
+							bind:value={params.num_thread}
+							type="number"
+							class=" bg-transparent text-center w-14"
+							min="1"
+							max="256"
+							step="1"
+						/>
+					</div>
+				</div>
+			{/if}
 		</div>
 		</div>
 
 
-		{#if (params?.num_thread ?? null) !== null}
-			<div class="flex mt-0.5 space-x-2">
-				<div class=" flex-1">
-					<input
-						id="steps-range"
-						type="range"
-						min="1"
-						max="256"
-						step="1"
-						bind:value={params.num_thread}
-						class="w-full h-2 rounded-lg appearance-none cursor-pointer dark:bg-gray-700"
-					/>
-				</div>
-				<div class="">
-					<input
-						bind:value={params.num_thread}
-						type="number"
-						class=" bg-transparent text-center w-14"
-						min="1"
-						max="256"
-						step="1"
-					/>
-				</div>
+		<!-- <div class=" py-0.5 w-full justify-between">
+			<div class="flex w-full justify-between">
+				<div class=" self-center text-xs font-medium">{$i18n.t('Template')}</div>
+
+				<button
+					class="p-1 px-3 text-xs flex rounded transition"
+					type="button"
+					on:click={() => {
+						params.template = (params?.template ?? null) === null ? '' : null;
+					}}
+				>
+					{#if (params?.template ?? null) === null}
+						<span class="ml-2 self-center">{$i18n.t('Default')}</span>
+					{:else}
+						<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
+					{/if}
+				</button>
 			</div>
 			</div>
-		{/if}
-	</div>
-
-	<div class=" py-0.5 w-full justify-between">
-		<div class="flex w-full justify-between">
-			<div class=" self-center text-xs font-medium">{$i18n.t('Template')}</div>
 
 
-			<button
-				class="p-1 px-3 text-xs flex rounded transition"
-				type="button"
-				on:click={() => {
-					params.template = (params?.template ?? null) === null ? '' : null;
-				}}
-			>
-				{#if (params?.template ?? null) === null}
-					<span class="ml-2 self-center">{$i18n.t('Default')}</span>
-				{:else}
-					<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
-				{/if}
-			</button>
-		</div>
-
-		{#if (params?.template ?? null) !== null}
-			<div class="flex mt-0.5 space-x-2">
-				<div class=" flex-1">
-					<textarea
-						class="px-3 py-1.5 text-sm w-full bg-transparent border dark:border-gray-600 outline-none rounded-lg -mb-1"
-						placeholder="Write your model template content here"
-						rows="4"
-						bind:value={params.template}
-					/>
+			{#if (params?.template ?? null) !== null}
+				<div class="flex mt-0.5 space-x-2">
+					<div class=" flex-1">
+						<textarea
+							class="px-3 py-1.5 text-sm w-full bg-transparent border dark:border-gray-600 outline-none rounded-lg -mb-1"
+							placeholder="Write your model template content here"
+							rows="4"
+							bind:value={params.template}
+						/>
+					</div>
 				</div>
 				</div>
-			</div>
-		{/if}
-	</div>
+			{/if}
+		</div> -->
+	{/if}
 </div>
 </div>

+ 29 - 32
src/lib/components/chat/Settings/General.svelte

@@ -4,7 +4,7 @@
 	import { getLanguages } from '$lib/i18n';
 	import { getLanguages } from '$lib/i18n';
 	const dispatch = createEventDispatcher();
 	const dispatch = createEventDispatcher();
 
 
-	import { models, settings, theme } from '$lib/stores';
+	import { models, settings, theme, user } from '$lib/stores';
 
 
 	const i18n = getContext('i18n');
 	const i18n = getContext('i18n');
 
 
@@ -43,19 +43,19 @@
 
 
 	let params = {
 	let params = {
 		// Advanced
 		// Advanced
-		seed: 0,
-		temperature: '',
-		frequency_penalty: '',
-		repeat_last_n: '',
-		mirostat: '',
-		mirostat_eta: '',
-		mirostat_tau: '',
-		top_k: '',
-		top_p: '',
+		seed: null,
+		temperature: null,
+		frequency_penalty: null,
+		repeat_last_n: null,
+		mirostat: null,
+		mirostat_eta: null,
+		mirostat_tau: null,
+		top_k: null,
+		top_p: null,
 		stop: null,
 		stop: null,
-		tfs_z: '',
-		num_ctx: '',
-		max_tokens: ''
+		tfs_z: null,
+		num_ctx: null,
+		max_tokens: null
 	};
 	};
 
 
 	const toggleRequestFormat = async () => {
 	const toggleRequestFormat = async () => {
@@ -79,12 +79,6 @@
 		requestFormat = $settings.requestFormat ?? '';
 		requestFormat = $settings.requestFormat ?? '';
 		keepAlive = $settings.keepAlive ?? null;
 		keepAlive = $settings.keepAlive ?? null;
 
 
-		params.seed = $settings.seed ?? 0;
-		params.temperature = $settings.temperature ?? '';
-		params.frequency_penalty = $settings.frequency_penalty ?? '';
-		params.top_k = $settings.top_k ?? '';
-		params.top_p = $settings.top_p ?? '';
-		params.num_ctx = $settings.num_ctx ?? '';
 		params = { ...params, ...$settings.params };
 		params = { ...params, ...$settings.params };
 		params.stop = $settings?.params?.stop ? ($settings?.params?.stop ?? []).join(',') : null;
 		params.stop = $settings?.params?.stop ? ($settings?.params?.stop ?? []).join(',') : null;
 	});
 	});
@@ -227,7 +221,7 @@
 			</div>
 			</div>
 
 
 			{#if showAdvanced}
 			{#if showAdvanced}
-				<AdvancedParams bind:params />
+				<AdvancedParams admin={$user?.role === 'admin'} bind:params />
 				<hr class=" dark:border-gray-850" />
 				<hr class=" dark:border-gray-850" />
 
 
 				<div class=" py-1 w-full justify-between">
 				<div class=" py-1 w-full justify-between">
@@ -300,20 +294,23 @@
 				saveSettings({
 				saveSettings({
 					system: system !== '' ? system : undefined,
 					system: system !== '' ? system : undefined,
 					params: {
 					params: {
-						seed: (params.seed !== 0 ? params.seed : undefined) ?? undefined,
+						seed: (params.seed !== null ? params.seed : undefined) ?? undefined,
 						stop: params.stop ? params.stop.split(',').filter((e) => e) : undefined,
 						stop: params.stop ? params.stop.split(',').filter((e) => e) : undefined,
-						temperature: params.temperature !== '' ? params.temperature : undefined,
+						temperature: params.temperature !== null ? params.temperature : undefined,
 						frequency_penalty:
 						frequency_penalty:
-							params.frequency_penalty !== '' ? params.frequency_penalty : undefined,
-						repeat_last_n: params.repeat_last_n !== '' ? params.repeat_last_n : undefined,
-						mirostat: params.mirostat !== '' ? params.mirostat : undefined,
-						mirostat_eta: params.mirostat_eta !== '' ? params.mirostat_eta : undefined,
-						mirostat_tau: params.mirostat_tau !== '' ? params.mirostat_tau : undefined,
-						top_k: params.top_k !== '' ? params.top_k : undefined,
-						top_p: params.top_p !== '' ? params.top_p : undefined,
-						tfs_z: params.tfs_z !== '' ? params.tfs_z : undefined,
-						num_ctx: params.num_ctx !== '' ? params.num_ctx : undefined,
-						max_tokens: params.max_tokens !== '' ? params.max_tokens : undefined
+							params.frequency_penalty !== null ? params.frequency_penalty : undefined,
+						repeat_last_n: params.repeat_last_n !== null ? params.repeat_last_n : undefined,
+						mirostat: params.mirostat !== null ? params.mirostat : undefined,
+						mirostat_eta: params.mirostat_eta !== null ? params.mirostat_eta : undefined,
+						mirostat_tau: params.mirostat_tau !== null ? params.mirostat_tau : undefined,
+						top_k: params.top_k !== null ? params.top_k : undefined,
+						top_p: params.top_p !== null ? params.top_p : undefined,
+						tfs_z: params.tfs_z !== null ? params.tfs_z : undefined,
+						num_ctx: params.num_ctx !== null ? params.num_ctx : undefined,
+						max_tokens: params.max_tokens !== null ? params.max_tokens : undefined,
+						use_mmap: params.use_mmap !== null ? params.use_mmap : undefined,
+						use_mlock: params.use_mlock !== null ? params.use_mlock : undefined,
+						num_thread: params.num_thread !== null ? params.num_thread : undefined
 					},
 					},
 					keepAlive: keepAlive ? (isNaN(keepAlive) ? keepAlive : parseInt(keepAlive)) : undefined
 					keepAlive: keepAlive ? (isNaN(keepAlive) ? keepAlive : parseInt(keepAlive)) : undefined
 				});
 				});

+ 1 - 1
src/lib/components/documents/Settings/WebParams.svelte

@@ -11,7 +11,7 @@
 	export let saveHandler: Function;
 	export let saveHandler: Function;
 
 
 	let webConfig = null;
 	let webConfig = null;
-	let webSearchEngines = ['searxng', 'google_pse', 'brave', 'serpstack', 'serper'];
+	let webSearchEngines = ['searxng', 'google_pse', 'brave', 'serpstack', 'serper', 'serply'];
 
 
 	let youtubeLanguage = 'en';
 	let youtubeLanguage = 'en';
 	let youtubeTranslation = null;
 	let youtubeTranslation = null;

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

@@ -0,0 +1,19 @@
+<script lang="ts">
+	export let className = 'size-4';
+	export let strokeWidth = '2';
+</script>
+
+<svg
+	xmlns="http://www.w3.org/2000/svg"
+	fill="none"
+	viewBox="0 0 24 24"
+	stroke-width={strokeWidth}
+	stroke="currentColor"
+	class={className}
+>
+	<path
+		stroke-linecap="round"
+		stroke-linejoin="round"
+		d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z"
+	/>
+</svg>

+ 2 - 2
src/lib/components/workspace/Models/Knowledge.svelte

@@ -13,7 +13,7 @@
 	</div>
 	</div>
 
 
 	<div class=" text-xs dark:text-gray-500">
 	<div class=" text-xs dark:text-gray-500">
-		To add documents here, upload them to the "Documents" workspace first.
+		{$i18n.t('To add documents here, upload them to the "Documents" workspace first.')}
 	</div>
 	</div>
 
 
 	<div class="flex flex-col">
 	<div class="flex flex-col">
@@ -97,7 +97,7 @@
 			<Selector bind:knowledge>
 			<Selector bind:knowledge>
 				<button
 				<button
 					class=" px-3.5 py-1.5 font-medium hover:bg-black/5 dark:hover:bg-white/5 outline outline-1 outline-gray-300 dark:outline-gray-800 rounded-3xl"
 					class=" px-3.5 py-1.5 font-medium hover:bg-black/5 dark:hover:bg-white/5 outline outline-1 outline-gray-300 dark:outline-gray-800 rounded-3xl"
-					type="button">Select Documents</button
+					type="button">{$i18n.t('Select Documents')}</button
 				>
 				>
 			</Selector>
 			</Selector>
 		</div>
 		</div>

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

@@ -201,6 +201,7 @@
 	"Enter Score": "أدخل النتيجة",
 	"Enter Score": "أدخل النتيجة",
 	"Enter Searxng Query URL": "أدخل عنوان URL لاستعلام Searxng",
 	"Enter Searxng Query URL": "أدخل عنوان URL لاستعلام Searxng",
 	"Enter Serper API Key": "أدخل مفتاح واجهة برمجة تطبيقات Serper",
 	"Enter Serper API Key": "أدخل مفتاح واجهة برمجة تطبيقات Serper",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "أدخل مفتاح واجهة برمجة تطبيقات Serpstack",
 	"Enter Serpstack API Key": "أدخل مفتاح واجهة برمجة تطبيقات Serpstack",
 	"Enter stop sequence": "أدخل تسلسل التوقف",
 	"Enter stop sequence": "أدخل تسلسل التوقف",
 	"Enter Top K": "أدخل Top K",
 	"Enter Top K": "أدخل Top K",
@@ -425,7 +426,7 @@
 	"Searched {{count}} sites_few": "تم البحث في {{count}} sites_few",
 	"Searched {{count}} sites_few": "تم البحث في {{count}} sites_few",
 	"Searched {{count}} sites_many": "تم البحث في {{count}} sites_many",
 	"Searched {{count}} sites_many": "تم البحث في {{count}} sites_many",
 	"Searched {{count}} sites_other": "تم البحث في {{count}} sites_other",
 	"Searched {{count}} sites_other": "تم البحث في {{count}} sites_other",
-	"Searching the web for '{{searchQuery}}'": "البحث في الويب عن \"{{searchQuery}}\"",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "عنوان URL لاستعلام Searxng",
 	"Searxng Query URL": "عنوان URL لاستعلام Searxng",
 	"See readme.md for instructions": "readme.md للحصول على التعليمات",
 	"See readme.md for instructions": "readme.md للحصول على التعليمات",
 	"See what's new": "ما الجديد",
 	"See what's new": "ما الجديد",
@@ -437,6 +438,7 @@
 	"Select a pipeline": "حدد مسارا",
 	"Select a pipeline": "حدد مسارا",
 	"Select a pipeline url": "حدد عنوان URL لخط الأنابيب",
 	"Select a pipeline url": "حدد عنوان URL لخط الأنابيب",
 	"Select an Ollama instance": "أختار سيرفر ",
 	"Select an Ollama instance": "أختار سيرفر ",
+	"Select Documents": "",
 	"Select model": " أختار موديل",
 	"Select model": " أختار موديل",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "النموذج (النماذج) المحددة لا تدعم مدخلات الصور",
 	"Selected model(s) do not support image inputs": "النموذج (النماذج) المحددة لا تدعم مدخلات الصور",
@@ -445,6 +447,7 @@
 	"Send message": "يُرجى إدخال طلبك هنا.",
 	"Send message": "يُرجى إدخال طلبك هنا.",
 	"September": "سبتمبر",
 	"September": "سبتمبر",
 	"Serper API Key": "مفتاح واجهة برمجة تطبيقات سيربر",
 	"Serper API Key": "مفتاح واجهة برمجة تطبيقات سيربر",
+	"Serply API Key": "",
 	"Serpstack API Key": "مفتاح واجهة برمجة تطبيقات Serpstack",
 	"Serpstack API Key": "مفتاح واجهة برمجة تطبيقات Serpstack",
 	"Server connection verified": "تم التحقق من اتصال الخادم",
 	"Server connection verified": "تم التحقق من اتصال الخادم",
 	"Set as default": "الافتراضي",
 	"Set as default": "الافتراضي",
@@ -509,6 +512,7 @@
 	"To access the available model names for downloading,": "للوصول إلى أسماء الموديلات المتاحة للتنزيل،",
 	"To access the available model names for downloading,": "للوصول إلى أسماء الموديلات المتاحة للتنزيل،",
 	"To access the GGUF models available for downloading,": "للوصول إلى الموديلات GGUF المتاحة للتنزيل،",
 	"To access the GGUF models available for downloading,": "للوصول إلى الموديلات GGUF المتاحة للتنزيل،",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "الى كتابة المحادثه",
 	"to chat input.": "الى كتابة المحادثه",
 	"Today": "اليوم",
 	"Today": "اليوم",
 	"Toggle settings": "فتح وأغلاق الاعدادات",
 	"Toggle settings": "فتح وأغلاق الاعدادات",

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

@@ -201,6 +201,7 @@
 	"Enter Score": "Въведете оценка",
 	"Enter Score": "Въведете оценка",
 	"Enter Searxng Query URL": "Въведете URL адреса на заявката на Searxng",
 	"Enter Searxng Query URL": "Въведете URL адреса на заявката на Searxng",
 	"Enter Serper API Key": "Въведете Serper API ключ",
 	"Enter Serper API Key": "Въведете Serper API ключ",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Въведете Serpstack API ключ",
 	"Enter Serpstack API Key": "Въведете Serpstack API ключ",
 	"Enter stop sequence": "Въведете стоп последователност",
 	"Enter stop sequence": "Въведете стоп последователност",
 	"Enter Top K": "Въведете Top K",
 	"Enter Top K": "Въведете Top K",
@@ -421,7 +422,7 @@
 	"Search Result Count": "Брой резултати от търсенето",
 	"Search Result Count": "Брой резултати от търсенето",
 	"Searched {{count}} sites_one": "Търси се в {{count}} sites_one",
 	"Searched {{count}} sites_one": "Търси се в {{count}} sites_one",
 	"Searched {{count}} sites_other": "Търси се в {{count}} sites_other",
 	"Searched {{count}} sites_other": "Търси се в {{count}} sites_other",
-	"Searching the web for '{{searchQuery}}'": "Търсене в уеб за '{{searchQuery}}'",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "URL адрес на заявка на Searxng",
 	"Searxng Query URL": "URL адрес на заявка на Searxng",
 	"See readme.md for instructions": "Виж readme.md за инструкции",
 	"See readme.md for instructions": "Виж readme.md за инструкции",
 	"See what's new": "Виж какво е новото",
 	"See what's new": "Виж какво е новото",
@@ -433,6 +434,7 @@
 	"Select a pipeline": "Изберете тръбопровод",
 	"Select a pipeline": "Изберете тръбопровод",
 	"Select a pipeline url": "Избор на URL адрес на канал",
 	"Select a pipeline url": "Избор на URL адрес на канал",
 	"Select an Ollama instance": "Изберете Ollama инстанция",
 	"Select an Ollama instance": "Изберете Ollama инстанция",
+	"Select Documents": "",
 	"Select model": "Изберете модел",
 	"Select model": "Изберете модел",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "Избраният(те) модел(и) не поддържа въвеждане на изображения",
 	"Selected model(s) do not support image inputs": "Избраният(те) модел(и) не поддържа въвеждане на изображения",
@@ -441,6 +443,7 @@
 	"Send message": "Изпращане на съобщение",
 	"Send message": "Изпращане на съобщение",
 	"September": "Септември",
 	"September": "Септември",
 	"Serper API Key": "Serper API ключ",
 	"Serper API Key": "Serper API ключ",
+	"Serply API Key": "",
 	"Serpstack API Key": "Serpstack API ключ",
 	"Serpstack API Key": "Serpstack API ключ",
 	"Server connection verified": "Server connection verified",
 	"Server connection verified": "Server connection verified",
 	"Set as default": "Задай по подразбиране",
 	"Set as default": "Задай по подразбиране",
@@ -505,6 +508,7 @@
 	"To access the available model names for downloading,": "За да получите достъп до наличните имена на модели за изтегляне,",
 	"To access the available model names for downloading,": "За да получите достъп до наличните имена на модели за изтегляне,",
 	"To access the GGUF models available for downloading,": "За да получите достъп до GGUF моделите, налични за изтегляне,",
 	"To access the GGUF models available for downloading,": "За да получите достъп до GGUF моделите, налични за изтегляне,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "към чат входа.",
 	"to chat input.": "към чат входа.",
 	"Today": "днес",
 	"Today": "днес",
 	"Toggle settings": "Toggle settings",
 	"Toggle settings": "Toggle settings",

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

@@ -201,6 +201,7 @@
 	"Enter Score": "স্কোর দিন",
 	"Enter Score": "স্কোর দিন",
 	"Enter Searxng Query URL": "Searxng ক্যোয়ারী URL লিখুন",
 	"Enter Searxng Query URL": "Searxng ক্যোয়ারী URL লিখুন",
 	"Enter Serper API Key": "Serper API কী লিখুন",
 	"Enter Serper API Key": "Serper API কী লিখুন",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Serpstack API কী লিখুন",
 	"Enter Serpstack API Key": "Serpstack API কী লিখুন",
 	"Enter stop sequence": "স্টপ সিকোয়েন্স লিখুন",
 	"Enter stop sequence": "স্টপ সিকোয়েন্স লিখুন",
 	"Enter Top K": "Top K লিখুন",
 	"Enter Top K": "Top K লিখুন",
@@ -421,7 +422,7 @@
 	"Search Result Count": "অনুসন্ধানের ফলাফল গণনা",
 	"Search Result Count": "অনুসন্ধানের ফলাফল গণনা",
 	"Searched {{count}} sites_one": "{{কাউন্ট}} অনুসন্ধান করা হয়েছে sites_one",
 	"Searched {{count}} sites_one": "{{কাউন্ট}} অনুসন্ধান করা হয়েছে sites_one",
 	"Searched {{count}} sites_other": "{{কাউন্ট}} অনুসন্ধান করা হয়েছে sites_other",
 	"Searched {{count}} sites_other": "{{কাউন্ট}} অনুসন্ধান করা হয়েছে sites_other",
-	"Searching the web for '{{searchQuery}}'": "'{{searchQuery}}' এর জন্য ওয়েবে অনুসন্ধান করা হচ্ছে",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "Searxng ক্যোয়ারী URL",
 	"Searxng Query URL": "Searxng ক্যোয়ারী URL",
 	"See readme.md for instructions": "নির্দেশিকার জন্য readme.md দেখুন",
 	"See readme.md for instructions": "নির্দেশিকার জন্য readme.md দেখুন",
 	"See what's new": "নতুন কী আছে দেখুন",
 	"See what's new": "নতুন কী আছে দেখুন",
@@ -433,6 +434,7 @@
 	"Select a pipeline": "একটি পাইপলাইন নির্বাচন করুন",
 	"Select a pipeline": "একটি পাইপলাইন নির্বাচন করুন",
 	"Select a pipeline url": "একটি পাইপলাইন URL নির্বাচন করুন",
 	"Select a pipeline url": "একটি পাইপলাইন URL নির্বাচন করুন",
 	"Select an Ollama instance": "একটি Ollama ইন্সট্যান্স নির্বাচন করুন",
 	"Select an Ollama instance": "একটি Ollama ইন্সট্যান্স নির্বাচন করুন",
+	"Select Documents": "",
 	"Select model": "মডেল নির্বাচন করুন",
 	"Select model": "মডেল নির্বাচন করুন",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "নির্বাচিত মডেল(গুলি) চিত্র ইনপুট সমর্থন করে না",
 	"Selected model(s) do not support image inputs": "নির্বাচিত মডেল(গুলি) চিত্র ইনপুট সমর্থন করে না",
@@ -441,6 +443,7 @@
 	"Send message": "মেসেজ পাঠান",
 	"Send message": "মেসেজ পাঠান",
 	"September": "সেপ্টেম্বর",
 	"September": "সেপ্টেম্বর",
 	"Serper API Key": "Serper API Key",
 	"Serper API Key": "Serper API Key",
+	"Serply API Key": "",
 	"Serpstack API Key": "Serpstack API Key",
 	"Serpstack API Key": "Serpstack API Key",
 	"Server connection verified": "সার্ভার কানেকশন যাচাই করা হয়েছে",
 	"Server connection verified": "সার্ভার কানেকশন যাচাই করা হয়েছে",
 	"Set as default": "ডিফল্ট হিসেবে নির্ধারণ করুন",
 	"Set as default": "ডিফল্ট হিসেবে নির্ধারণ করুন",
@@ -505,6 +508,7 @@
 	"To access the available model names for downloading,": "ডাউনলোডের জন্য এভেইলএবল মডেলের নামগুলো এক্সেস করতে,",
 	"To access the available model names for downloading,": "ডাউনলোডের জন্য এভেইলএবল মডেলের নামগুলো এক্সেস করতে,",
 	"To access the GGUF models available for downloading,": "ডাউলোডের জন্য এভেইলএবল GGUF মডেলগুলো এক্সেস করতে,",
 	"To access the GGUF models available for downloading,": "ডাউলোডের জন্য এভেইলএবল GGUF মডেলগুলো এক্সেস করতে,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "চ্যাট ইনপুটে",
 	"to chat input.": "চ্যাট ইনপুটে",
 	"Today": "আজ",
 	"Today": "আজ",
 	"Toggle settings": "সেটিংস টোগল",
 	"Toggle settings": "সেটিংস টোগল",

+ 5 - 1
src/lib/i18n/locales/ca-ES/translation.json

@@ -201,6 +201,7 @@
 	"Enter Score": "Introdueix el Puntuació",
 	"Enter Score": "Introdueix el Puntuació",
 	"Enter Searxng Query URL": "Introduïu l'URL de consulta de Searxng",
 	"Enter Searxng Query URL": "Introduïu l'URL de consulta de Searxng",
 	"Enter Serper API Key": "Introduïu la clau de l'API Serper",
 	"Enter Serper API Key": "Introduïu la clau de l'API Serper",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Introduïu la clau de l'API Serpstack",
 	"Enter Serpstack API Key": "Introduïu la clau de l'API Serpstack",
 	"Enter stop sequence": "Introdueix la seqüència de parada",
 	"Enter stop sequence": "Introdueix la seqüència de parada",
 	"Enter Top K": "Introdueix Top K",
 	"Enter Top K": "Introdueix Top K",
@@ -422,7 +423,7 @@
 	"Searched {{count}} sites_one": "Cercat {{count}} sites_one",
 	"Searched {{count}} sites_one": "Cercat {{count}} sites_one",
 	"Searched {{count}} sites_many": "Cercat {{recompte}} sites_many",
 	"Searched {{count}} sites_many": "Cercat {{recompte}} sites_many",
 	"Searched {{count}} sites_other": "Cercat {{recompte}} sites_other",
 	"Searched {{count}} sites_other": "Cercat {{recompte}} sites_other",
-	"Searching the web for '{{searchQuery}}'": "Cerca a la web de '{{searchQuery}}'",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "Searxng URL de consulta",
 	"Searxng Query URL": "Searxng URL de consulta",
 	"See readme.md for instructions": "Consulta el readme.md per a instruccions",
 	"See readme.md for instructions": "Consulta el readme.md per a instruccions",
 	"See what's new": "Veure novetats",
 	"See what's new": "Veure novetats",
@@ -434,6 +435,7 @@
 	"Select a pipeline": "Seleccioneu una canonada",
 	"Select a pipeline": "Seleccioneu una canonada",
 	"Select a pipeline url": "Seleccionar un URL de canonada",
 	"Select a pipeline url": "Seleccionar un URL de canonada",
 	"Select an Ollama instance": "Selecciona una instància d'Ollama",
 	"Select an Ollama instance": "Selecciona una instància d'Ollama",
+	"Select Documents": "",
 	"Select model": "Selecciona un model",
 	"Select model": "Selecciona un model",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "Els models seleccionats no admeten l'entrada d'imatges",
 	"Selected model(s) do not support image inputs": "Els models seleccionats no admeten l'entrada d'imatges",
@@ -442,6 +444,7 @@
 	"Send message": "Envia missatge",
 	"Send message": "Envia missatge",
 	"September": "Setembre",
 	"September": "Setembre",
 	"Serper API Key": "Clau API Serper",
 	"Serper API Key": "Clau API Serper",
+	"Serply API Key": "",
 	"Serpstack API Key": "Serpstack API Key",
 	"Serpstack API Key": "Serpstack API Key",
 	"Server connection verified": "Connexió al servidor verificada",
 	"Server connection verified": "Connexió al servidor verificada",
 	"Set as default": "Estableix com a predeterminat",
 	"Set as default": "Estableix com a predeterminat",
@@ -506,6 +509,7 @@
 	"To access the available model names for downloading,": "Per accedir als noms dels models disponibles per descarregar,",
 	"To access the available model names for downloading,": "Per accedir als noms dels models disponibles per descarregar,",
 	"To access the GGUF models available for downloading,": "Per accedir als models GGUF disponibles per descarregar,",
 	"To access the GGUF models available for downloading,": "Per accedir als models GGUF disponibles per descarregar,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "a l'entrada del xat.",
 	"to chat input.": "a l'entrada del xat.",
 	"Today": "Avui",
 	"Today": "Avui",
 	"Toggle settings": "Commuta configuracions",
 	"Toggle settings": "Commuta configuracions",

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

@@ -201,6 +201,7 @@
 	"Enter Score": "",
 	"Enter Score": "",
 	"Enter Searxng Query URL": "",
 	"Enter Searxng Query URL": "",
 	"Enter Serper API Key": "",
 	"Enter Serper API Key": "",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "",
 	"Enter Serpstack API Key": "",
 	"Enter stop sequence": "Pagsulod sa katapusan nga han-ay",
 	"Enter stop sequence": "Pagsulod sa katapusan nga han-ay",
 	"Enter Top K": "Pagsulod sa Top K",
 	"Enter Top K": "Pagsulod sa Top K",
@@ -421,7 +422,7 @@
 	"Search Result Count": "",
 	"Search Result Count": "",
 	"Searched {{count}} sites_one": "",
 	"Searched {{count}} sites_one": "",
 	"Searched {{count}} sites_other": "",
 	"Searched {{count}} sites_other": "",
-	"Searching the web for '{{searchQuery}}'": "",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "",
 	"Searxng Query URL": "",
 	"See readme.md for instructions": "Tan-awa ang readme.md alang sa mga panudlo",
 	"See readme.md for instructions": "Tan-awa ang readme.md alang sa mga panudlo",
 	"See what's new": "Tan-awa unsay bag-o",
 	"See what's new": "Tan-awa unsay bag-o",
@@ -433,6 +434,7 @@
 	"Select a pipeline": "",
 	"Select a pipeline": "",
 	"Select a pipeline url": "",
 	"Select a pipeline url": "",
 	"Select an Ollama instance": "Pagpili usa ka pananglitan sa Ollama",
 	"Select an Ollama instance": "Pagpili usa ka pananglitan sa Ollama",
+	"Select Documents": "",
 	"Select model": "Pagpili og modelo",
 	"Select model": "Pagpili og modelo",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "",
 	"Selected model(s) do not support image inputs": "",
@@ -441,6 +443,7 @@
 	"Send message": "Magpadala ug mensahe",
 	"Send message": "Magpadala ug mensahe",
 	"September": "",
 	"September": "",
 	"Serper API Key": "",
 	"Serper API Key": "",
+	"Serply API Key": "",
 	"Serpstack API Key": "",
 	"Serpstack API Key": "",
 	"Server connection verified": "Gipamatud-an nga koneksyon sa server",
 	"Server connection verified": "Gipamatud-an nga koneksyon sa server",
 	"Set as default": "Define pinaagi sa default",
 	"Set as default": "Define pinaagi sa default",
@@ -505,6 +508,7 @@
 	"To access the available model names for downloading,": "Aron ma-access ang mga ngalan sa modelo nga ma-download,",
 	"To access the available model names for downloading,": "Aron ma-access ang mga ngalan sa modelo nga ma-download,",
 	"To access the GGUF models available for downloading,": "Aron ma-access ang mga modelo sa GGUF nga magamit alang sa pag-download,",
 	"To access the GGUF models available for downloading,": "Aron ma-access ang mga modelo sa GGUF nga magamit alang sa pag-download,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "sa entrada sa iring.",
 	"to chat input.": "sa entrada sa iring.",
 	"Today": "",
 	"Today": "",
 	"Toggle settings": "I-toggle ang mga setting",
 	"Toggle settings": "I-toggle ang mga setting",

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

@@ -201,6 +201,7 @@
 	"Enter Score": "Score eingeben",
 	"Enter Score": "Score eingeben",
 	"Enter Searxng Query URL": "Geben Sie die Searxng-Abfrage-URL ein",
 	"Enter Searxng Query URL": "Geben Sie die Searxng-Abfrage-URL ein",
 	"Enter Serper API Key": "Serper-API-Schlüssel eingeben",
 	"Enter Serper API Key": "Serper-API-Schlüssel eingeben",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Geben Sie den Serpstack-API-Schlüssel ein",
 	"Enter Serpstack API Key": "Geben Sie den Serpstack-API-Schlüssel ein",
 	"Enter stop sequence": "Stop-Sequenz eingeben",
 	"Enter stop sequence": "Stop-Sequenz eingeben",
 	"Enter Top K": "Gib Top K ein",
 	"Enter Top K": "Gib Top K ein",
@@ -421,7 +422,7 @@
 	"Search Result Count": "Anzahl der Suchergebnisse",
 	"Search Result Count": "Anzahl der Suchergebnisse",
 	"Searched {{count}} sites_one": "Gesucht {{count}} sites_one",
 	"Searched {{count}} sites_one": "Gesucht {{count}} sites_one",
 	"Searched {{count}} sites_other": "Gesucht {{count}} sites_other",
 	"Searched {{count}} sites_other": "Gesucht {{count}} sites_other",
-	"Searching the web for '{{searchQuery}}'": "Suche im Web nach '{{searchQuery}}'",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "Searxng-Abfrage-URL",
 	"Searxng Query URL": "Searxng-Abfrage-URL",
 	"See readme.md for instructions": "Anleitung in readme.md anzeigen",
 	"See readme.md for instructions": "Anleitung in readme.md anzeigen",
 	"See what's new": "Was gibt's Neues",
 	"See what's new": "Was gibt's Neues",
@@ -433,6 +434,7 @@
 	"Select a pipeline": "Wählen Sie eine Pipeline aus",
 	"Select a pipeline": "Wählen Sie eine Pipeline aus",
 	"Select a pipeline url": "Auswählen einer Pipeline-URL",
 	"Select a pipeline url": "Auswählen einer Pipeline-URL",
 	"Select an Ollama instance": "Eine Ollama Instanz auswählen",
 	"Select an Ollama instance": "Eine Ollama Instanz auswählen",
+	"Select Documents": "",
 	"Select model": "Modell auswählen",
 	"Select model": "Modell auswählen",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "Ausgewählte Modelle unterstützen keine Bildeingaben",
 	"Selected model(s) do not support image inputs": "Ausgewählte Modelle unterstützen keine Bildeingaben",
@@ -441,6 +443,7 @@
 	"Send message": "Nachricht senden",
 	"Send message": "Nachricht senden",
 	"September": "September",
 	"September": "September",
 	"Serper API Key": "Serper-API-Schlüssel",
 	"Serper API Key": "Serper-API-Schlüssel",
+	"Serply API Key": "",
 	"Serpstack API Key": "Serpstack-API-Schlüssel",
 	"Serpstack API Key": "Serpstack-API-Schlüssel",
 	"Server connection verified": "Serververbindung überprüft",
 	"Server connection verified": "Serververbindung überprüft",
 	"Set as default": "Als Standard festlegen",
 	"Set as default": "Als Standard festlegen",
@@ -505,6 +508,7 @@
 	"To access the available model names for downloading,": "Um auf die verfügbaren Modellnamen zum Herunterladen zuzugreifen,",
 	"To access the available model names for downloading,": "Um auf die verfügbaren Modellnamen zum Herunterladen zuzugreifen,",
 	"To access the GGUF models available for downloading,": "Um auf die verfügbaren GGUF Modelle zum Herunterladen zuzugreifen",
 	"To access the GGUF models available for downloading,": "Um auf die verfügbaren GGUF Modelle zum Herunterladen zuzugreifen",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "to chat input.",
 	"to chat input.": "to chat input.",
 	"Today": "Heute",
 	"Today": "Heute",
 	"Toggle settings": "Einstellungen umschalten",
 	"Toggle settings": "Einstellungen umschalten",

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

@@ -201,6 +201,7 @@
 	"Enter Score": "",
 	"Enter Score": "",
 	"Enter Searxng Query URL": "",
 	"Enter Searxng Query URL": "",
 	"Enter Serper API Key": "",
 	"Enter Serper API Key": "",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "",
 	"Enter Serpstack API Key": "",
 	"Enter stop sequence": "Enter stop bark",
 	"Enter stop sequence": "Enter stop bark",
 	"Enter Top K": "Enter Top Wow",
 	"Enter Top K": "Enter Top Wow",
@@ -421,7 +422,7 @@
 	"Search Result Count": "",
 	"Search Result Count": "",
 	"Searched {{count}} sites_one": "",
 	"Searched {{count}} sites_one": "",
 	"Searched {{count}} sites_other": "",
 	"Searched {{count}} sites_other": "",
-	"Searching the web for '{{searchQuery}}'": "",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "",
 	"Searxng Query URL": "",
 	"See readme.md for instructions": "See readme.md for instructions wow",
 	"See readme.md for instructions": "See readme.md for instructions wow",
 	"See what's new": "See what's new so amaze",
 	"See what's new": "See what's new so amaze",
@@ -433,6 +434,7 @@
 	"Select a pipeline": "",
 	"Select a pipeline": "",
 	"Select a pipeline url": "",
 	"Select a pipeline url": "",
 	"Select an Ollama instance": "Select an Ollama instance very choose",
 	"Select an Ollama instance": "Select an Ollama instance very choose",
+	"Select Documents": "",
 	"Select model": "Select model much choice",
 	"Select model": "Select model much choice",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "",
 	"Selected model(s) do not support image inputs": "",
@@ -441,6 +443,7 @@
 	"Send message": "Send message very send",
 	"Send message": "Send message very send",
 	"September": "",
 	"September": "",
 	"Serper API Key": "",
 	"Serper API Key": "",
+	"Serply API Key": "",
 	"Serpstack API Key": "",
 	"Serpstack API Key": "",
 	"Server connection verified": "Server connection verified much secure",
 	"Server connection verified": "Server connection verified much secure",
 	"Set as default": "Set as default very default",
 	"Set as default": "Set as default very default",
@@ -505,6 +508,7 @@
 	"To access the available model names for downloading,": "To access the available model names for downloading, much access",
 	"To access the available model names for downloading,": "To access the available model names for downloading, much access",
 	"To access the GGUF models available for downloading,": "To access the GGUF models available for downloading, much access",
 	"To access the GGUF models available for downloading,": "To access the GGUF models available for downloading, much access",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "to chat input. Very chat.",
 	"to chat input.": "to chat input. Very chat.",
 	"Today": "",
 	"Today": "",
 	"Toggle settings": "Toggle settings much toggle",
 	"Toggle settings": "Toggle settings much toggle",

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

@@ -201,6 +201,7 @@
 	"Enter Score": "",
 	"Enter Score": "",
 	"Enter Searxng Query URL": "",
 	"Enter Searxng Query URL": "",
 	"Enter Serper API Key": "",
 	"Enter Serper API Key": "",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "",
 	"Enter Serpstack API Key": "",
 	"Enter stop sequence": "",
 	"Enter stop sequence": "",
 	"Enter Top K": "",
 	"Enter Top K": "",
@@ -421,7 +422,7 @@
 	"Search Result Count": "",
 	"Search Result Count": "",
 	"Searched {{count}} sites_one": "",
 	"Searched {{count}} sites_one": "",
 	"Searched {{count}} sites_other": "",
 	"Searched {{count}} sites_other": "",
-	"Searching the web for '{{searchQuery}}'": "",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "",
 	"Searxng Query URL": "",
 	"See readme.md for instructions": "",
 	"See readme.md for instructions": "",
 	"See what's new": "",
 	"See what's new": "",
@@ -433,6 +434,7 @@
 	"Select a pipeline": "",
 	"Select a pipeline": "",
 	"Select a pipeline url": "",
 	"Select a pipeline url": "",
 	"Select an Ollama instance": "",
 	"Select an Ollama instance": "",
+	"Select Documents": "",
 	"Select model": "",
 	"Select model": "",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "",
 	"Selected model(s) do not support image inputs": "",
@@ -441,6 +443,7 @@
 	"Send message": "",
 	"Send message": "",
 	"September": "",
 	"September": "",
 	"Serper API Key": "",
 	"Serper API Key": "",
+	"Serply API Key": "",
 	"Serpstack API Key": "",
 	"Serpstack API Key": "",
 	"Server connection verified": "",
 	"Server connection verified": "",
 	"Set as default": "",
 	"Set as default": "",
@@ -505,6 +508,7 @@
 	"To access the available model names for downloading,": "",
 	"To access the available model names for downloading,": "",
 	"To access the GGUF models available for downloading,": "",
 	"To access the GGUF models available for downloading,": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "",
 	"to chat input.": "",
 	"Today": "",
 	"Today": "",
 	"Toggle settings": "",
 	"Toggle settings": "",

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

@@ -201,6 +201,7 @@
 	"Enter Score": "",
 	"Enter Score": "",
 	"Enter Searxng Query URL": "",
 	"Enter Searxng Query URL": "",
 	"Enter Serper API Key": "",
 	"Enter Serper API Key": "",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "",
 	"Enter Serpstack API Key": "",
 	"Enter stop sequence": "",
 	"Enter stop sequence": "",
 	"Enter Top K": "",
 	"Enter Top K": "",
@@ -421,7 +422,7 @@
 	"Search Result Count": "",
 	"Search Result Count": "",
 	"Searched {{count}} sites_one": "",
 	"Searched {{count}} sites_one": "",
 	"Searched {{count}} sites_other": "",
 	"Searched {{count}} sites_other": "",
-	"Searching the web for '{{searchQuery}}'": "",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "",
 	"Searxng Query URL": "",
 	"See readme.md for instructions": "",
 	"See readme.md for instructions": "",
 	"See what's new": "",
 	"See what's new": "",
@@ -433,6 +434,7 @@
 	"Select a pipeline": "",
 	"Select a pipeline": "",
 	"Select a pipeline url": "",
 	"Select a pipeline url": "",
 	"Select an Ollama instance": "",
 	"Select an Ollama instance": "",
+	"Select Documents": "",
 	"Select model": "",
 	"Select model": "",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "",
 	"Selected model(s) do not support image inputs": "",
@@ -441,6 +443,7 @@
 	"Send message": "",
 	"Send message": "",
 	"September": "",
 	"September": "",
 	"Serper API Key": "",
 	"Serper API Key": "",
+	"Serply API Key": "",
 	"Serpstack API Key": "",
 	"Serpstack API Key": "",
 	"Server connection verified": "",
 	"Server connection verified": "",
 	"Set as default": "",
 	"Set as default": "",
@@ -505,6 +508,7 @@
 	"To access the available model names for downloading,": "",
 	"To access the available model names for downloading,": "",
 	"To access the GGUF models available for downloading,": "",
 	"To access the GGUF models available for downloading,": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "",
 	"to chat input.": "",
 	"Today": "",
 	"Today": "",
 	"Toggle settings": "",
 	"Toggle settings": "",

+ 5 - 1
src/lib/i18n/locales/es-ES/translation.json

@@ -201,6 +201,7 @@
 	"Enter Score": "Ingrese la puntuación",
 	"Enter Score": "Ingrese la puntuación",
 	"Enter Searxng Query URL": "Introduzca la URL de consulta de Searxng",
 	"Enter Searxng Query URL": "Introduzca la URL de consulta de Searxng",
 	"Enter Serper API Key": "Ingrese la clave API de Serper",
 	"Enter Serper API Key": "Ingrese la clave API de Serper",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Ingrese la clave API de Serpstack",
 	"Enter Serpstack API Key": "Ingrese la clave API de Serpstack",
 	"Enter stop sequence": "Ingrese la secuencia de parada",
 	"Enter stop sequence": "Ingrese la secuencia de parada",
 	"Enter Top K": "Ingrese el Top K",
 	"Enter Top K": "Ingrese el Top K",
@@ -422,7 +423,7 @@
 	"Searched {{count}} sites_one": "Buscado {{count}} sites_one",
 	"Searched {{count}} sites_one": "Buscado {{count}} sites_one",
 	"Searched {{count}} sites_many": "Buscado {{count}} sites_many",
 	"Searched {{count}} sites_many": "Buscado {{count}} sites_many",
 	"Searched {{count}} sites_other": "Buscó {{count}} sites_other",
 	"Searched {{count}} sites_other": "Buscó {{count}} sites_other",
-	"Searching the web for '{{searchQuery}}'": "Buscando en la web '{{searchQuery}}'",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "Searxng URL de consulta",
 	"Searxng Query URL": "Searxng URL de consulta",
 	"See readme.md for instructions": "Vea el readme.md para instrucciones",
 	"See readme.md for instructions": "Vea el readme.md para instrucciones",
 	"See what's new": "Ver las novedades",
 	"See what's new": "Ver las novedades",
@@ -434,6 +435,7 @@
 	"Select a pipeline": "Selección de una canalización",
 	"Select a pipeline": "Selección de una canalización",
 	"Select a pipeline url": "Selección de una dirección URL de canalización",
 	"Select a pipeline url": "Selección de una dirección URL de canalización",
 	"Select an Ollama instance": "Seleccione una instancia de Ollama",
 	"Select an Ollama instance": "Seleccione una instancia de Ollama",
+	"Select Documents": "",
 	"Select model": "Selecciona un modelo",
 	"Select model": "Selecciona un modelo",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "Los modelos seleccionados no admiten entradas de imagen",
 	"Selected model(s) do not support image inputs": "Los modelos seleccionados no admiten entradas de imagen",
@@ -442,6 +444,7 @@
 	"Send message": "Enviar Mensaje",
 	"Send message": "Enviar Mensaje",
 	"September": "Septiembre",
 	"September": "Septiembre",
 	"Serper API Key": "Clave API de Serper",
 	"Serper API Key": "Clave API de Serper",
+	"Serply API Key": "",
 	"Serpstack API Key": "Clave API de Serpstack",
 	"Serpstack API Key": "Clave API de Serpstack",
 	"Server connection verified": "Conexión del servidor verificada",
 	"Server connection verified": "Conexión del servidor verificada",
 	"Set as default": "Establecer por defecto",
 	"Set as default": "Establecer por defecto",
@@ -506,6 +509,7 @@
 	"To access the available model names for downloading,": "Para acceder a los nombres de modelos disponibles para descargar,",
 	"To access the available model names for downloading,": "Para acceder a los nombres de modelos disponibles para descargar,",
 	"To access the GGUF models available for downloading,": "Para acceder a los modelos GGUF disponibles para descargar,",
 	"To access the GGUF models available for downloading,": "Para acceder a los modelos GGUF disponibles para descargar,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "a la entrada del chat.",
 	"to chat input.": "a la entrada del chat.",
 	"Today": "Hoy",
 	"Today": "Hoy",
 	"Toggle settings": "Alternar configuración",
 	"Toggle settings": "Alternar configuración",

+ 5 - 1
src/lib/i18n/locales/fa-IR/translation.json

@@ -201,6 +201,7 @@
 	"Enter Score": "امتیاز را وارد کنید",
 	"Enter Score": "امتیاز را وارد کنید",
 	"Enter Searxng Query URL": "نشانی وب پرسوجوی Searxng را وارد کنید",
 	"Enter Searxng Query URL": "نشانی وب پرسوجوی Searxng را وارد کنید",
 	"Enter Serper API Key": "کلید API Serper را وارد کنید",
 	"Enter Serper API Key": "کلید API Serper را وارد کنید",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "کلید API Serpstack را وارد کنید",
 	"Enter Serpstack API Key": "کلید API Serpstack را وارد کنید",
 	"Enter stop sequence": "توالی توقف را وارد کنید",
 	"Enter stop sequence": "توالی توقف را وارد کنید",
 	"Enter Top K": "مقدار Top K را وارد کنید",
 	"Enter Top K": "مقدار Top K را وارد کنید",
@@ -421,7 +422,7 @@
 	"Search Result Count": "تعداد نتایج جستجو",
 	"Search Result Count": "تعداد نتایج جستجو",
 	"Searched {{count}} sites_one": "جستجو {{count}} sites_one",
 	"Searched {{count}} sites_one": "جستجو {{count}} sites_one",
 	"Searched {{count}} sites_other": "جستجو {{count}} sites_other",
 	"Searched {{count}} sites_other": "جستجو {{count}} sites_other",
-	"Searching the web for '{{searchQuery}}'": "جستجو در وب برای '{searchQuery}}'",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "نشانی وب جستجوی Searxng",
 	"Searxng Query URL": "نشانی وب جستجوی Searxng",
 	"See readme.md for instructions": "برای مشاهده دستورالعمل\u200cها به readme.md مراجعه کنید",
 	"See readme.md for instructions": "برای مشاهده دستورالعمل\u200cها به readme.md مراجعه کنید",
 	"See what's new": "ببینید موارد جدید چه بوده",
 	"See what's new": "ببینید موارد جدید چه بوده",
@@ -433,6 +434,7 @@
 	"Select a pipeline": "انتخاب یک خط لوله",
 	"Select a pipeline": "انتخاب یک خط لوله",
 	"Select a pipeline url": "یک ادرس خط لوله را انتخاب کنید",
 	"Select a pipeline url": "یک ادرس خط لوله را انتخاب کنید",
 	"Select an Ollama instance": "انتخاب یک نمونه از اولاما",
 	"Select an Ollama instance": "انتخاب یک نمونه از اولاما",
+	"Select Documents": "",
 	"Select model": "انتخاب یک مدل",
 	"Select model": "انتخاب یک مدل",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "مدل) های (انتخاب شده ورودیهای تصویر را پشتیبانی نمیکند",
 	"Selected model(s) do not support image inputs": "مدل) های (انتخاب شده ورودیهای تصویر را پشتیبانی نمیکند",
@@ -441,6 +443,7 @@
 	"Send message": "ارسال پیام",
 	"Send message": "ارسال پیام",
 	"September": "سپتامبر",
 	"September": "سپتامبر",
 	"Serper API Key": "کلید API Serper",
 	"Serper API Key": "کلید API Serper",
+	"Serply API Key": "",
 	"Serpstack API Key": "کلید API Serpstack",
 	"Serpstack API Key": "کلید API Serpstack",
 	"Server connection verified": "اتصال سرور تأیید شد",
 	"Server connection verified": "اتصال سرور تأیید شد",
 	"Set as default": "تنظیم به عنوان پیشفرض",
 	"Set as default": "تنظیم به عنوان پیشفرض",
@@ -505,6 +508,7 @@
 	"To access the available model names for downloading,": "برای دسترسی به نام مدل های موجود برای دانلود،",
 	"To access the available model names for downloading,": "برای دسترسی به نام مدل های موجود برای دانلود،",
 	"To access the GGUF models available for downloading,": "برای دسترسی به مدل\u200cهای GGUF موجود برای دانلود،",
 	"To access the GGUF models available for downloading,": "برای دسترسی به مدل\u200cهای GGUF موجود برای دانلود،",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "در ورودی گپ.",
 	"to chat input.": "در ورودی گپ.",
 	"Today": "امروز",
 	"Today": "امروز",
 	"Toggle settings": "نمایش/عدم نمایش تنظیمات",
 	"Toggle settings": "نمایش/عدم نمایش تنظیمات",

+ 5 - 1
src/lib/i18n/locales/fi-FI/translation.json

@@ -201,6 +201,7 @@
 	"Enter Score": "Syötä pisteet",
 	"Enter Score": "Syötä pisteet",
 	"Enter Searxng Query URL": "Kirjoita Searxng-kyselyn URL-osoite",
 	"Enter Searxng Query URL": "Kirjoita Searxng-kyselyn URL-osoite",
 	"Enter Serper API Key": "Anna Serper API -avain",
 	"Enter Serper API Key": "Anna Serper API -avain",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Anna Serpstack API -avain",
 	"Enter Serpstack API Key": "Anna Serpstack API -avain",
 	"Enter stop sequence": "Syötä lopetussekvenssi",
 	"Enter stop sequence": "Syötä lopetussekvenssi",
 	"Enter Top K": "Syötä Top K",
 	"Enter Top K": "Syötä Top K",
@@ -421,7 +422,7 @@
 	"Search Result Count": "Hakutulosten määrä",
 	"Search Result Count": "Hakutulosten määrä",
 	"Searched {{count}} sites_one": "Haettu {{count}} sites_one",
 	"Searched {{count}} sites_one": "Haettu {{count}} sites_one",
 	"Searched {{count}} sites_other": "Haku {{count}} sites_other",
 	"Searched {{count}} sites_other": "Haku {{count}} sites_other",
-	"Searching the web for '{{searchQuery}}'": "Haku verkosta hakusanalla {{searchQuery}}",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "Searxng-kyselyn URL-osoite",
 	"Searxng Query URL": "Searxng-kyselyn URL-osoite",
 	"See readme.md for instructions": "Katso lisää ohjeita readme.md:stä",
 	"See readme.md for instructions": "Katso lisää ohjeita readme.md:stä",
 	"See what's new": "Katso, mitä uutta",
 	"See what's new": "Katso, mitä uutta",
@@ -433,6 +434,7 @@
 	"Select a pipeline": "Valitse putki",
 	"Select a pipeline": "Valitse putki",
 	"Select a pipeline url": "Valitse putken URL-osoite",
 	"Select a pipeline url": "Valitse putken URL-osoite",
 	"Select an Ollama instance": "Valitse Ollama-instanssi",
 	"Select an Ollama instance": "Valitse Ollama-instanssi",
+	"Select Documents": "",
 	"Select model": "Valitse malli",
 	"Select model": "Valitse malli",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "Valitut mallit eivät tue kuvasyötteitä",
 	"Selected model(s) do not support image inputs": "Valitut mallit eivät tue kuvasyötteitä",
@@ -441,6 +443,7 @@
 	"Send message": "Lähetä viesti",
 	"Send message": "Lähetä viesti",
 	"September": "syyskuu",
 	"September": "syyskuu",
 	"Serper API Key": "Serper API -avain",
 	"Serper API Key": "Serper API -avain",
+	"Serply API Key": "",
 	"Serpstack API Key": "Serpstack API -avain",
 	"Serpstack API Key": "Serpstack API -avain",
 	"Server connection verified": "Palvelinyhteys varmennettu",
 	"Server connection verified": "Palvelinyhteys varmennettu",
 	"Set as default": "Aseta oletukseksi",
 	"Set as default": "Aseta oletukseksi",
@@ -505,6 +508,7 @@
 	"To access the available model names for downloading,": "Päästäksesi käsiksi ladattavissa oleviin mallinimiin,",
 	"To access the available model names for downloading,": "Päästäksesi käsiksi ladattavissa oleviin mallinimiin,",
 	"To access the GGUF models available for downloading,": "Päästäksesi käsiksi ladattavissa oleviin GGUF-malleihin,",
 	"To access the GGUF models available for downloading,": "Päästäksesi käsiksi ladattavissa oleviin GGUF-malleihin,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "keskustelusyötteeseen.",
 	"to chat input.": "keskustelusyötteeseen.",
 	"Today": "Tänään",
 	"Today": "Tänään",
 	"Toggle settings": "Kytke asetukset",
 	"Toggle settings": "Kytke asetukset",

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

@@ -201,6 +201,7 @@
 	"Enter Score": "Entrez le score",
 	"Enter Score": "Entrez le score",
 	"Enter Searxng Query URL": "Entrez l’URL de requête Searxng",
 	"Enter Searxng Query URL": "Entrez l’URL de requête Searxng",
 	"Enter Serper API Key": "Entrez la clé API Serper",
 	"Enter Serper API Key": "Entrez la clé API Serper",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Entrez dans la clé API Serpstack",
 	"Enter Serpstack API Key": "Entrez dans la clé API Serpstack",
 	"Enter stop sequence": "Entrez la séquence de fin",
 	"Enter stop sequence": "Entrez la séquence de fin",
 	"Enter Top K": "Entrez Top K",
 	"Enter Top K": "Entrez Top K",
@@ -422,7 +423,7 @@
 	"Searched {{count}} sites_one": "Recherche dans {{count}} sites_one",
 	"Searched {{count}} sites_one": "Recherche dans {{count}} sites_one",
 	"Searched {{count}} sites_many": "Recherche dans {{count}} sites_many",
 	"Searched {{count}} sites_many": "Recherche dans {{count}} sites_many",
 	"Searched {{count}} sites_other": "Recherche dans {{count}} sites_other",
 	"Searched {{count}} sites_other": "Recherche dans {{count}} sites_other",
-	"Searching the web for '{{searchQuery}}'": "Recherche sur le Web pour '{{searchQuery}}'",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "URL de la requête Searxng",
 	"Searxng Query URL": "URL de la requête Searxng",
 	"See readme.md for instructions": "Voir readme.md pour les instructions",
 	"See readme.md for instructions": "Voir readme.md pour les instructions",
 	"See what's new": "Voir les nouveautés",
 	"See what's new": "Voir les nouveautés",
@@ -434,6 +435,7 @@
 	"Select a pipeline": "Sélectionner un pipeline",
 	"Select a pipeline": "Sélectionner un pipeline",
 	"Select a pipeline url": "Sélectionnez une URL de pipeline",
 	"Select a pipeline url": "Sélectionnez une URL de pipeline",
 	"Select an Ollama instance": "Sélectionner une instance Ollama",
 	"Select an Ollama instance": "Sélectionner une instance Ollama",
+	"Select Documents": "",
 	"Select model": "Sélectionnez un modèle",
 	"Select model": "Sélectionnez un modèle",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "Les modèles sélectionnés ne prennent pas en charge les entrées d’image",
 	"Selected model(s) do not support image inputs": "Les modèles sélectionnés ne prennent pas en charge les entrées d’image",
@@ -442,6 +444,7 @@
 	"Send message": "Envoyer un message",
 	"Send message": "Envoyer un message",
 	"September": "Septembre",
 	"September": "Septembre",
 	"Serper API Key": "Clé API Serper",
 	"Serper API Key": "Clé API Serper",
+	"Serply API Key": "",
 	"Serpstack API Key": "Clé API Serpstack",
 	"Serpstack API Key": "Clé API Serpstack",
 	"Server connection verified": "Connexion au serveur vérifiée",
 	"Server connection verified": "Connexion au serveur vérifiée",
 	"Set as default": "Définir par défaut",
 	"Set as default": "Définir par défaut",
@@ -506,6 +509,7 @@
 	"To access the available model names for downloading,": "Pour accéder aux noms de modèles disponibles pour le téléchargement,",
 	"To access the available model names for downloading,": "Pour accéder aux noms de modèles disponibles pour le téléchargement,",
 	"To access the GGUF models available for downloading,": "Pour accéder aux modèles GGUF disponibles pour le téléchargement,",
 	"To access the GGUF models available for downloading,": "Pour accéder aux modèles GGUF disponibles pour le téléchargement,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "à l'entrée du chat.",
 	"to chat input.": "à l'entrée du chat.",
 	"Today": "Aujourd'hui",
 	"Today": "Aujourd'hui",
 	"Toggle settings": "Basculer les paramètres",
 	"Toggle settings": "Basculer les paramètres",

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

@@ -201,6 +201,7 @@
 	"Enter Score": "Entrez le Score",
 	"Enter Score": "Entrez le Score",
 	"Enter Searxng Query URL": "Entrez l’URL de la requête Searxng",
 	"Enter Searxng Query URL": "Entrez l’URL de la requête Searxng",
 	"Enter Serper API Key": "Entrez la clé API Serper",
 	"Enter Serper API Key": "Entrez la clé API Serper",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Entrez la clé API Serpstack",
 	"Enter Serpstack API Key": "Entrez la clé API Serpstack",
 	"Enter stop sequence": "Entrez la séquence de fin",
 	"Enter stop sequence": "Entrez la séquence de fin",
 	"Enter Top K": "Entrez Top K",
 	"Enter Top K": "Entrez Top K",
@@ -422,7 +423,7 @@
 	"Searched {{count}} sites_one": "Recherché {{count}} sites_one",
 	"Searched {{count}} sites_one": "Recherché {{count}} sites_one",
 	"Searched {{count}} sites_many": "Recherché {{count}} sites_many",
 	"Searched {{count}} sites_many": "Recherché {{count}} sites_many",
 	"Searched {{count}} sites_other": "Recherché {{count}} sites_other",
 	"Searched {{count}} sites_other": "Recherché {{count}} sites_other",
-	"Searching the web for '{{searchQuery}}'": "Recherche sur le web pour '{{searchQuery}}'",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "URL de requête Searxng",
 	"Searxng Query URL": "URL de requête Searxng",
 	"See readme.md for instructions": "Voir readme.md pour les instructions",
 	"See readme.md for instructions": "Voir readme.md pour les instructions",
 	"See what's new": "Voir les nouveautés",
 	"See what's new": "Voir les nouveautés",
@@ -434,6 +435,7 @@
 	"Select a pipeline": "Sélectionner un pipeline",
 	"Select a pipeline": "Sélectionner un pipeline",
 	"Select a pipeline url": "Sélectionnez une URL de pipeline",
 	"Select a pipeline url": "Sélectionnez une URL de pipeline",
 	"Select an Ollama instance": "Sélectionner une instance Ollama",
 	"Select an Ollama instance": "Sélectionner une instance Ollama",
+	"Select Documents": "",
 	"Select model": "Sélectionner un modèle",
 	"Select model": "Sélectionner un modèle",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "Modèle(s) séléctionés ne supportent pas les entrées images",
 	"Selected model(s) do not support image inputs": "Modèle(s) séléctionés ne supportent pas les entrées images",
@@ -442,6 +444,7 @@
 	"Send message": "Envoyer un message",
 	"Send message": "Envoyer un message",
 	"September": "Septembre",
 	"September": "Septembre",
 	"Serper API Key": "Clé API Serper",
 	"Serper API Key": "Clé API Serper",
+	"Serply API Key": "",
 	"Serpstack API Key": "Clé API Serpstack",
 	"Serpstack API Key": "Clé API Serpstack",
 	"Server connection verified": "Connexion au serveur vérifiée",
 	"Server connection verified": "Connexion au serveur vérifiée",
 	"Set as default": "Définir par défaut",
 	"Set as default": "Définir par défaut",
@@ -506,6 +509,7 @@
 	"To access the available model names for downloading,": "Pour accéder aux noms de modèles disponibles pour le téléchargement,",
 	"To access the available model names for downloading,": "Pour accéder aux noms de modèles disponibles pour le téléchargement,",
 	"To access the GGUF models available for downloading,": "Pour accéder aux modèles GGUF disponibles pour le téléchargement,",
 	"To access the GGUF models available for downloading,": "Pour accéder aux modèles GGUF disponibles pour le téléchargement,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "à l'entrée du chat.",
 	"to chat input.": "à l'entrée du chat.",
 	"Today": "Aujourd'hui",
 	"Today": "Aujourd'hui",
 	"Toggle settings": "Basculer les paramètres",
 	"Toggle settings": "Basculer les paramètres",

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

@@ -201,6 +201,7 @@
 	"Enter Score": "הזן ציון",
 	"Enter Score": "הזן ציון",
 	"Enter Searxng Query URL": "הזן כתובת URL של שאילתת Searxng",
 	"Enter Searxng Query URL": "הזן כתובת URL של שאילתת Searxng",
 	"Enter Serper API Key": "הזן מפתח API של Serper",
 	"Enter Serper API Key": "הזן מפתח API של Serper",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "הזן מפתח API של Serpstack",
 	"Enter Serpstack API Key": "הזן מפתח API של Serpstack",
 	"Enter stop sequence": "הזן רצף עצירה",
 	"Enter stop sequence": "הזן רצף עצירה",
 	"Enter Top K": "הזן Top K",
 	"Enter Top K": "הזן Top K",
@@ -422,7 +423,7 @@
 	"Searched {{count}} sites_one": "חיפש {{count}} sites_one",
 	"Searched {{count}} sites_one": "חיפש {{count}} sites_one",
 	"Searched {{count}} sites_two": "חיפש {{count}} sites_two",
 	"Searched {{count}} sites_two": "חיפש {{count}} sites_two",
 	"Searched {{count}} sites_other": "חיפש {{count}} sites_other",
 	"Searched {{count}} sites_other": "חיפש {{count}} sites_other",
-	"Searching the web for '{{searchQuery}}'": "חיפוש באינטרנט אחר '{{searchQuery}}'",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "כתובת URL של שאילתת Searxng",
 	"Searxng Query URL": "כתובת URL של שאילתת Searxng",
 	"See readme.md for instructions": "ראה את readme.md להוראות",
 	"See readme.md for instructions": "ראה את readme.md להוראות",
 	"See what's new": "ראה מה חדש",
 	"See what's new": "ראה מה חדש",
@@ -434,6 +435,7 @@
 	"Select a pipeline": "בחר קו צינור",
 	"Select a pipeline": "בחר קו צינור",
 	"Select a pipeline url": "בחר כתובת URL של קו צינור",
 	"Select a pipeline url": "בחר כתובת URL של קו צינור",
 	"Select an Ollama instance": "בחר מופע של Ollama",
 	"Select an Ollama instance": "בחר מופע של Ollama",
+	"Select Documents": "",
 	"Select model": "בחר מודל",
 	"Select model": "בחר מודל",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "דגמים נבחרים אינם תומכים בקלט תמונה",
 	"Selected model(s) do not support image inputs": "דגמים נבחרים אינם תומכים בקלט תמונה",
@@ -442,6 +444,7 @@
 	"Send message": "שלח הודעה",
 	"Send message": "שלח הודעה",
 	"September": "ספטמבר",
 	"September": "ספטמבר",
 	"Serper API Key": "מפתח Serper API",
 	"Serper API Key": "מפתח Serper API",
+	"Serply API Key": "",
 	"Serpstack API Key": "מפתח API של Serpstack",
 	"Serpstack API Key": "מפתח API של Serpstack",
 	"Server connection verified": "החיבור לשרת אומת",
 	"Server connection verified": "החיבור לשרת אומת",
 	"Set as default": "הגדר כברירת מחדל",
 	"Set as default": "הגדר כברירת מחדל",
@@ -506,6 +509,7 @@
 	"To access the available model names for downloading,": "כדי לגשת לשמות הדגמים הזמינים להורדה,",
 	"To access the available model names for downloading,": "כדי לגשת לשמות הדגמים הזמינים להורדה,",
 	"To access the GGUF models available for downloading,": "כדי לגשת לדגמי GGUF הזמינים להורדה,",
 	"To access the GGUF models available for downloading,": "כדי לגשת לדגמי GGUF הזמינים להורדה,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "לקלטת שיחה.",
 	"to chat input.": "לקלטת שיחה.",
 	"Today": "היום",
 	"Today": "היום",
 	"Toggle settings": "החלפת מצב של הגדרות",
 	"Toggle settings": "החלפת מצב של הגדרות",

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

@@ -201,6 +201,7 @@
 	"Enter Score": "स्कोर दर्ज करें",
 	"Enter Score": "स्कोर दर्ज करें",
 	"Enter Searxng Query URL": "Searxng क्वेरी URL दर्ज करें",
 	"Enter Searxng Query URL": "Searxng क्वेरी URL दर्ज करें",
 	"Enter Serper API Key": "Serper API कुंजी दर्ज करें",
 	"Enter Serper API Key": "Serper API कुंजी दर्ज करें",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "सर्पस्टैक एपीआई कुंजी दर्ज करें",
 	"Enter Serpstack API Key": "सर्पस्टैक एपीआई कुंजी दर्ज करें",
 	"Enter stop sequence": "स्टॉप अनुक्रम दर्ज करें",
 	"Enter stop sequence": "स्टॉप अनुक्रम दर्ज करें",
 	"Enter Top K": "शीर्ष K दर्ज करें",
 	"Enter Top K": "शीर्ष K दर्ज करें",
@@ -421,7 +422,7 @@
 	"Search Result Count": "खोज परिणामों की संख्या",
 	"Search Result Count": "खोज परिणामों की संख्या",
 	"Searched {{count}} sites_one": "{{count}} sites_one खोजा गया",
 	"Searched {{count}} sites_one": "{{count}} sites_one खोजा गया",
 	"Searched {{count}} sites_other": "{{count}} sites_other खोजा गया",
 	"Searched {{count}} sites_other": "{{count}} sites_other खोजा गया",
-	"Searching the web for '{{searchQuery}}'": "वेब पर '{{searchQuery}}' खोजना",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "Searxng क्वेरी URL",
 	"Searxng Query URL": "Searxng क्वेरी URL",
 	"See readme.md for instructions": "निर्देशों के लिए readme.md देखें",
 	"See readme.md for instructions": "निर्देशों के लिए readme.md देखें",
 	"See what's new": "देखें, क्या नया है",
 	"See what's new": "देखें, क्या नया है",
@@ -433,6 +434,7 @@
 	"Select a pipeline": "एक पाइपलाइन का चयन करें",
 	"Select a pipeline": "एक पाइपलाइन का चयन करें",
 	"Select a pipeline url": "एक पाइपलाइन url चुनें",
 	"Select a pipeline url": "एक पाइपलाइन url चुनें",
 	"Select an Ollama instance": "एक Ollama Instance चुनें",
 	"Select an Ollama instance": "एक Ollama Instance चुनें",
+	"Select Documents": "",
 	"Select model": "मॉडल चुनें",
 	"Select model": "मॉडल चुनें",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "चयनित मॉडल छवि इनपुट का समर्थन नहीं करते हैं",
 	"Selected model(s) do not support image inputs": "चयनित मॉडल छवि इनपुट का समर्थन नहीं करते हैं",
@@ -441,6 +443,7 @@
 	"Send message": "मेसेज भेजें",
 	"Send message": "मेसेज भेजें",
 	"September": "सितंबर",
 	"September": "सितंबर",
 	"Serper API Key": "Serper API कुंजी",
 	"Serper API Key": "Serper API कुंजी",
+	"Serply API Key": "",
 	"Serpstack API Key": "सर्पस्टैक एपीआई कुंजी",
 	"Serpstack API Key": "सर्पस्टैक एपीआई कुंजी",
 	"Server connection verified": "सर्वर कनेक्शन सत्यापित",
 	"Server connection verified": "सर्वर कनेक्शन सत्यापित",
 	"Set as default": "डिफाल्ट के रूप में सेट",
 	"Set as default": "डिफाल्ट के रूप में सेट",
@@ -505,6 +508,7 @@
 	"To access the available model names for downloading,": "डाउनलोड करने के लिए उपलब्ध मॉडल नामों तक पहुंचने के लिए,",
 	"To access the available model names for downloading,": "डाउनलोड करने के लिए उपलब्ध मॉडल नामों तक पहुंचने के लिए,",
 	"To access the GGUF models available for downloading,": "डाउनलोडिंग के लिए उपलब्ध GGUF मॉडल तक पहुँचने के लिए,",
 	"To access the GGUF models available for downloading,": "डाउनलोडिंग के लिए उपलब्ध GGUF मॉडल तक पहुँचने के लिए,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "इनपुट चैट करने के लिए.",
 	"to chat input.": "इनपुट चैट करने के लिए.",
 	"Today": "आज",
 	"Today": "आज",
 	"Toggle settings": "सेटिंग्स टॉगल करें",
 	"Toggle settings": "सेटिंग्स टॉगल करें",

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

@@ -201,6 +201,7 @@
 	"Enter Score": "Unesite ocjenu",
 	"Enter Score": "Unesite ocjenu",
 	"Enter Searxng Query URL": "Unos URL-a upita Searxng",
 	"Enter Searxng Query URL": "Unos URL-a upita Searxng",
 	"Enter Serper API Key": "Unesite API ključ serpera",
 	"Enter Serper API Key": "Unesite API ključ serpera",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Unesite API ključ Serpstack",
 	"Enter Serpstack API Key": "Unesite API ključ Serpstack",
 	"Enter stop sequence": "Unesite sekvencu zaustavljanja",
 	"Enter stop sequence": "Unesite sekvencu zaustavljanja",
 	"Enter Top K": "Unesite Top K",
 	"Enter Top K": "Unesite Top K",
@@ -422,7 +423,7 @@
 	"Searched {{count}} sites_one": "Pretraženo {{count}} sites_one",
 	"Searched {{count}} sites_one": "Pretraženo {{count}} sites_one",
 	"Searched {{count}} sites_few": "Pretraženo {{count}} sites_few",
 	"Searched {{count}} sites_few": "Pretraženo {{count}} sites_few",
 	"Searched {{count}} sites_other": "Pretraženo {{count}} sites_other",
 	"Searched {{count}} sites_other": "Pretraženo {{count}} sites_other",
-	"Searching the web for '{{searchQuery}}'": "Traženje '{{searchQuery}}' na webu",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "URL upita Searxng",
 	"Searxng Query URL": "URL upita Searxng",
 	"See readme.md for instructions": "Pogledajte readme.md za upute",
 	"See readme.md for instructions": "Pogledajte readme.md za upute",
 	"See what's new": "Pogledajte što je novo",
 	"See what's new": "Pogledajte što je novo",
@@ -434,6 +435,7 @@
 	"Select a pipeline": "Odabir kanala",
 	"Select a pipeline": "Odabir kanala",
 	"Select a pipeline url": "Odabir URL-a kanala",
 	"Select a pipeline url": "Odabir URL-a kanala",
 	"Select an Ollama instance": "Odaberite Ollama instancu",
 	"Select an Ollama instance": "Odaberite Ollama instancu",
+	"Select Documents": "",
 	"Select model": "Odaberite model",
 	"Select model": "Odaberite model",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "Odabrani modeli ne podržavaju unose slika",
 	"Selected model(s) do not support image inputs": "Odabrani modeli ne podržavaju unose slika",
@@ -442,6 +444,7 @@
 	"Send message": "Pošalji poruku",
 	"Send message": "Pošalji poruku",
 	"September": "Rujan",
 	"September": "Rujan",
 	"Serper API Key": "Serper API ključ",
 	"Serper API Key": "Serper API ključ",
+	"Serply API Key": "",
 	"Serpstack API Key": "Tipka API za serpstack",
 	"Serpstack API Key": "Tipka API za serpstack",
 	"Server connection verified": "Veza s poslužiteljem potvrđena",
 	"Server connection verified": "Veza s poslužiteljem potvrđena",
 	"Set as default": "Postavi kao zadano",
 	"Set as default": "Postavi kao zadano",
@@ -506,6 +509,7 @@
 	"To access the available model names for downloading,": "Za pristup dostupnim nazivima modela za preuzimanje,",
 	"To access the available model names for downloading,": "Za pristup dostupnim nazivima modela za preuzimanje,",
 	"To access the GGUF models available for downloading,": "Za pristup GGUF modelima dostupnim za preuzimanje,",
 	"To access the GGUF models available for downloading,": "Za pristup GGUF modelima dostupnim za preuzimanje,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "u unos razgovora.",
 	"to chat input.": "u unos razgovora.",
 	"Today": "Danas",
 	"Today": "Danas",
 	"Toggle settings": "Prebaci postavke",
 	"Toggle settings": "Prebaci postavke",

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

@@ -201,6 +201,7 @@
 	"Enter Score": "Inserisci il punteggio",
 	"Enter Score": "Inserisci il punteggio",
 	"Enter Searxng Query URL": "Immettere l'URL della query Searxng",
 	"Enter Searxng Query URL": "Immettere l'URL della query Searxng",
 	"Enter Serper API Key": "Inserisci la chiave API Serper",
 	"Enter Serper API Key": "Inserisci la chiave API Serper",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Inserisci la chiave API Serpstack",
 	"Enter Serpstack API Key": "Inserisci la chiave API Serpstack",
 	"Enter stop sequence": "Inserisci la sequenza di arresto",
 	"Enter stop sequence": "Inserisci la sequenza di arresto",
 	"Enter Top K": "Inserisci Top K",
 	"Enter Top K": "Inserisci Top K",
@@ -422,7 +423,7 @@
 	"Searched {{count}} sites_one": "Ricercato {{count}} sites_one",
 	"Searched {{count}} sites_one": "Ricercato {{count}} sites_one",
 	"Searched {{count}} sites_many": "Ricercato {{count}} sites_many",
 	"Searched {{count}} sites_many": "Ricercato {{count}} sites_many",
 	"Searched {{count}} sites_other": "Ricercato {{count}} sites_other",
 	"Searched {{count}} sites_other": "Ricercato {{count}} sites_other",
-	"Searching the web for '{{searchQuery}}'": "Ricerca sul web di '{{searchQuery}}'",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "Searxng Query URL",
 	"Searxng Query URL": "Searxng Query URL",
 	"See readme.md for instructions": "Vedi readme.md per le istruzioni",
 	"See readme.md for instructions": "Vedi readme.md per le istruzioni",
 	"See what's new": "Guarda le novità",
 	"See what's new": "Guarda le novità",
@@ -434,6 +435,7 @@
 	"Select a pipeline": "Selezionare una tubazione",
 	"Select a pipeline": "Selezionare una tubazione",
 	"Select a pipeline url": "Selezionare l'URL di una pipeline",
 	"Select a pipeline url": "Selezionare l'URL di una pipeline",
 	"Select an Ollama instance": "Seleziona un'istanza Ollama",
 	"Select an Ollama instance": "Seleziona un'istanza Ollama",
+	"Select Documents": "",
 	"Select model": "Seleziona modello",
 	"Select model": "Seleziona modello",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "I modelli selezionati non supportano l'input di immagini",
 	"Selected model(s) do not support image inputs": "I modelli selezionati non supportano l'input di immagini",
@@ -442,6 +444,7 @@
 	"Send message": "Invia messaggio",
 	"Send message": "Invia messaggio",
 	"September": "Settembre",
 	"September": "Settembre",
 	"Serper API Key": "Chiave API Serper",
 	"Serper API Key": "Chiave API Serper",
+	"Serply API Key": "",
 	"Serpstack API Key": "Chiave API Serpstack",
 	"Serpstack API Key": "Chiave API Serpstack",
 	"Server connection verified": "Connessione al server verificata",
 	"Server connection verified": "Connessione al server verificata",
 	"Set as default": "Imposta come predefinito",
 	"Set as default": "Imposta come predefinito",
@@ -506,6 +509,7 @@
 	"To access the available model names for downloading,": "Per accedere ai nomi dei modelli disponibili per il download,",
 	"To access the available model names for downloading,": "Per accedere ai nomi dei modelli disponibili per il download,",
 	"To access the GGUF models available for downloading,": "Per accedere ai modelli GGUF disponibili per il download,",
 	"To access the GGUF models available for downloading,": "Per accedere ai modelli GGUF disponibili per il download,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "all'input della chat.",
 	"to chat input.": "all'input della chat.",
 	"Today": "Oggi",
 	"Today": "Oggi",
 	"Toggle settings": "Attiva/disattiva impostazioni",
 	"Toggle settings": "Attiva/disattiva impostazioni",

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

@@ -201,6 +201,7 @@
 	"Enter Score": "スコアを入力してください",
 	"Enter Score": "スコアを入力してください",
 	"Enter Searxng Query URL": "SearxngクエリURLを入力",
 	"Enter Searxng Query URL": "SearxngクエリURLを入力",
 	"Enter Serper API Key": "Serper APIキーの入力",
 	"Enter Serper API Key": "Serper APIキーの入力",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Serpstack APIキーの入力",
 	"Enter Serpstack API Key": "Serpstack APIキーの入力",
 	"Enter stop sequence": "ストップシーケンスを入力してください",
 	"Enter stop sequence": "ストップシーケンスを入力してください",
 	"Enter Top K": "トップ K を入力してください",
 	"Enter Top K": "トップ K を入力してください",
@@ -420,7 +421,7 @@
 	"Search Query Generation Prompt Length Threshold": "",
 	"Search Query Generation Prompt Length Threshold": "",
 	"Search Result Count": "検索結果数",
 	"Search Result Count": "検索結果数",
 	"Searched {{count}} sites_other": "{{count}} sites_other検索",
 	"Searched {{count}} sites_other": "{{count}} sites_other検索",
-	"Searching the web for '{{searchQuery}}'": "ウェブで '{{searchQuery}}' を検索する",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "Searxng クエリ URL",
 	"Searxng Query URL": "Searxng クエリ URL",
 	"See readme.md for instructions": "手順については readme.md を参照してください",
 	"See readme.md for instructions": "手順については readme.md を参照してください",
 	"See what's new": "新機能を見る",
 	"See what's new": "新機能を見る",
@@ -432,6 +433,7 @@
 	"Select a pipeline": "パイプラインの選択",
 	"Select a pipeline": "パイプラインの選択",
 	"Select a pipeline url": "パイプラインの URL を選択する",
 	"Select a pipeline url": "パイプラインの URL を選択する",
 	"Select an Ollama instance": "Ollama インスタンスを選択",
 	"Select an Ollama instance": "Ollama インスタンスを選択",
+	"Select Documents": "",
 	"Select model": "モデルを選択",
 	"Select model": "モデルを選択",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "一部のモデルは画像入力をサポートしていません",
 	"Selected model(s) do not support image inputs": "一部のモデルは画像入力をサポートしていません",
@@ -440,6 +442,7 @@
 	"Send message": "メッセージを送信",
 	"Send message": "メッセージを送信",
 	"September": "9月",
 	"September": "9月",
 	"Serper API Key": "Serper APIキー",
 	"Serper API Key": "Serper APIキー",
+	"Serply API Key": "",
 	"Serpstack API Key": "Serpstack APIキー",
 	"Serpstack API Key": "Serpstack APIキー",
 	"Server connection verified": "サーバー接続が確認されました",
 	"Server connection verified": "サーバー接続が確認されました",
 	"Set as default": "デフォルトに設定",
 	"Set as default": "デフォルトに設定",
@@ -504,6 +507,7 @@
 	"To access the available model names for downloading,": "ダウンロード可能なモデル名にアクセスするには、",
 	"To access the available model names for downloading,": "ダウンロード可能なモデル名にアクセスするには、",
 	"To access the GGUF models available for downloading,": "ダウンロード可能な GGUF モデルにアクセスするには、",
 	"To access the GGUF models available for downloading,": "ダウンロード可能な GGUF モデルにアクセスするには、",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "チャット入力へ。",
 	"to chat input.": "チャット入力へ。",
 	"Today": "今日",
 	"Today": "今日",
 	"Toggle settings": "設定を切り替え",
 	"Toggle settings": "設定を切り替え",

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

@@ -201,6 +201,7 @@
 	"Enter Score": "შეიყვანეთ ქულა",
 	"Enter Score": "შეიყვანეთ ქულა",
 	"Enter Searxng Query URL": "შეიყვანეთ Searxng Query URL",
 	"Enter Searxng Query URL": "შეიყვანეთ Searxng Query URL",
 	"Enter Serper API Key": "შეიყვანეთ Serper API Key",
 	"Enter Serper API Key": "შეიყვანეთ Serper API Key",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "შეიყვანეთ Serpstack API Key",
 	"Enter Serpstack API Key": "შეიყვანეთ Serpstack API Key",
 	"Enter stop sequence": "შეიყვანეთ ტოპ თანმიმდევრობა",
 	"Enter stop sequence": "შეიყვანეთ ტოპ თანმიმდევრობა",
 	"Enter Top K": "შეიყვანეთ Top K",
 	"Enter Top K": "შეიყვანეთ Top K",
@@ -421,7 +422,7 @@
 	"Search Result Count": "ძიების შედეგების რაოდენობა",
 	"Search Result Count": "ძიების შედეგების რაოდენობა",
 	"Searched {{count}} sites_one": "Searched {{count}} sites_one",
 	"Searched {{count}} sites_one": "Searched {{count}} sites_one",
 	"Searched {{count}} sites_other": "Searched {{count}} sites_other",
 	"Searched {{count}} sites_other": "Searched {{count}} sites_other",
-	"Searching the web for '{{searchQuery}}'": "ეძებს ვებ '{searchQuery}}'",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "Searxng Query URL",
 	"Searxng Query URL": "Searxng Query URL",
 	"See readme.md for instructions": "იხილეთ readme.md ინსტრუქციებისთვის",
 	"See readme.md for instructions": "იხილეთ readme.md ინსტრუქციებისთვის",
 	"See what's new": "სიახლეების ნახვა",
 	"See what's new": "სიახლეების ნახვა",
@@ -433,6 +434,7 @@
 	"Select a pipeline": "აირჩიეთ მილსადენი",
 	"Select a pipeline": "აირჩიეთ მილსადენი",
 	"Select a pipeline url": "აირჩიეთ მილსადენის url",
 	"Select a pipeline url": "აირჩიეთ მილსადენის url",
 	"Select an Ollama instance": "Ollama ინსტანსის არჩევა",
 	"Select an Ollama instance": "Ollama ინსტანსის არჩევა",
+	"Select Documents": "",
 	"Select model": "მოდელის არჩევა",
 	"Select model": "მოდელის არჩევა",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "შერჩეული მოდელი (ებ) ი არ უჭერს მხარს გამოსახულების შეყვანას",
 	"Selected model(s) do not support image inputs": "შერჩეული მოდელი (ებ) ი არ უჭერს მხარს გამოსახულების შეყვანას",
@@ -441,6 +443,7 @@
 	"Send message": "შეტყობინების გაგზავნა",
 	"Send message": "შეტყობინების გაგზავნა",
 	"September": "სექტემბერი",
 	"September": "სექტემბერი",
 	"Serper API Key": "Serper API Key",
 	"Serper API Key": "Serper API Key",
+	"Serply API Key": "",
 	"Serpstack API Key": "Serpstack API Key",
 	"Serpstack API Key": "Serpstack API Key",
 	"Server connection verified": "სერვერთან კავშირი დადასტურებულია",
 	"Server connection verified": "სერვერთან კავშირი დადასტურებულია",
 	"Set as default": "დეფოლტად დაყენება",
 	"Set as default": "დეფოლტად დაყენება",
@@ -505,6 +508,7 @@
 	"To access the available model names for downloading,": "ჩამოტვირთვისთვის ხელმისაწვდომი მოდელების სახელებზე წვდომისთვის",
 	"To access the available model names for downloading,": "ჩამოტვირთვისთვის ხელმისაწვდომი მოდელების სახელებზე წვდომისთვის",
 	"To access the GGUF models available for downloading,": "ჩასატვირთად ხელმისაწვდომი GGUF მოდელებზე წვდომისთვის",
 	"To access the GGUF models available for downloading,": "ჩასატვირთად ხელმისაწვდომი GGUF მოდელებზე წვდომისთვის",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "ჩატში",
 	"to chat input.": "ჩატში",
 	"Today": "დღეს",
 	"Today": "დღეს",
 	"Toggle settings": "პარამეტრების გადართვა",
 	"Toggle settings": "პარამეტრების გადართვა",

+ 5 - 1
src/lib/i18n/locales/ko-KR/translation.json

@@ -201,6 +201,7 @@
 	"Enter Score": "점수 입력",
 	"Enter Score": "점수 입력",
 	"Enter Searxng Query URL": "Searxng 쿼리 URL 입력",
 	"Enter Searxng Query URL": "Searxng 쿼리 URL 입력",
 	"Enter Serper API Key": "Serper API Key 입력",
 	"Enter Serper API Key": "Serper API Key 입력",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Serpstack API Key 입력",
 	"Enter Serpstack API Key": "Serpstack API Key 입력",
 	"Enter stop sequence": "중지 시퀀스 입력",
 	"Enter stop sequence": "중지 시퀀스 입력",
 	"Enter Top K": "Top K 입력",
 	"Enter Top K": "Top K 입력",
@@ -420,7 +421,7 @@
 	"Search Query Generation Prompt Length Threshold": "",
 	"Search Query Generation Prompt Length Threshold": "",
 	"Search Result Count": "검색 결과 개수",
 	"Search Result Count": "검색 결과 개수",
 	"Searched {{count}} sites_other": "{{count}} sites_other 검색됨",
 	"Searched {{count}} sites_other": "{{count}} sites_other 검색됨",
-	"Searching the web for '{{searchQuery}}'": "웹에서 '{{searchQuery}}' 검색",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "Searxng 쿼리 URL",
 	"Searxng Query URL": "Searxng 쿼리 URL",
 	"See readme.md for instructions": "설명은 readme.md를 참조하세요.",
 	"See readme.md for instructions": "설명은 readme.md를 참조하세요.",
 	"See what's new": "새로운 기능 보기",
 	"See what's new": "새로운 기능 보기",
@@ -432,6 +433,7 @@
 	"Select a pipeline": "파이프라인 선택",
 	"Select a pipeline": "파이프라인 선택",
 	"Select a pipeline url": "파이프라인 URL 선택",
 	"Select a pipeline url": "파이프라인 URL 선택",
 	"Select an Ollama instance": "Ollama 인스턴스 선택",
 	"Select an Ollama instance": "Ollama 인스턴스 선택",
+	"Select Documents": "",
 	"Select model": "모델 선택",
 	"Select model": "모델 선택",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "선택한 모델은 이미지 입력을 지원하지 않습니다.",
 	"Selected model(s) do not support image inputs": "선택한 모델은 이미지 입력을 지원하지 않습니다.",
@@ -440,6 +442,7 @@
 	"Send message": "메시지 보내기",
 	"Send message": "메시지 보내기",
 	"September": "9월",
 	"September": "9월",
 	"Serper API Key": "Serper API 키",
 	"Serper API Key": "Serper API 키",
+	"Serply API Key": "",
 	"Serpstack API Key": "Serpstack API 키",
 	"Serpstack API Key": "Serpstack API 키",
 	"Server connection verified": "서버 연결 확인됨",
 	"Server connection verified": "서버 연결 확인됨",
 	"Set as default": "기본값으로 설정",
 	"Set as default": "기본값으로 설정",
@@ -504,6 +507,7 @@
 	"To access the available model names for downloading,": "다운로드 가능한 모델명을 확인하려면,",
 	"To access the available model names for downloading,": "다운로드 가능한 모델명을 확인하려면,",
 	"To access the GGUF models available for downloading,": "다운로드 가능한 GGUF 모델을 확인하려면,",
 	"To access the GGUF models available for downloading,": "다운로드 가능한 GGUF 모델을 확인하려면,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "채팅 입력으로.",
 	"to chat input.": "채팅 입력으로.",
 	"Today": "오늘",
 	"Today": "오늘",
 	"Toggle settings": "설정 전환",
 	"Toggle settings": "설정 전환",

+ 5 - 1
src/lib/i18n/locales/lt-LT/translation.json

@@ -201,6 +201,7 @@
 	"Enter Score": "Įveskite rezultatą",
 	"Enter Score": "Įveskite rezultatą",
 	"Enter Searxng Query URL": "",
 	"Enter Searxng Query URL": "",
 	"Enter Serper API Key": "",
 	"Enter Serper API Key": "",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "",
 	"Enter Serpstack API Key": "",
 	"Enter stop sequence": "Įveskite pabaigos sekvenciją",
 	"Enter stop sequence": "Įveskite pabaigos sekvenciją",
 	"Enter Top K": "Įveskite Top K",
 	"Enter Top K": "Įveskite Top K",
@@ -423,7 +424,7 @@
 	"Searched {{count}} sites_few": "",
 	"Searched {{count}} sites_few": "",
 	"Searched {{count}} sites_many": "",
 	"Searched {{count}} sites_many": "",
 	"Searched {{count}} sites_other": "",
 	"Searched {{count}} sites_other": "",
-	"Searching the web for '{{searchQuery}}'": "",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "",
 	"Searxng Query URL": "",
 	"See readme.md for instructions": "Žiūrėti readme.md papildomoms instrukcijoms",
 	"See readme.md for instructions": "Žiūrėti readme.md papildomoms instrukcijoms",
 	"See what's new": "Žiūrėti naujoves",
 	"See what's new": "Žiūrėti naujoves",
@@ -435,6 +436,7 @@
 	"Select a pipeline": "",
 	"Select a pipeline": "",
 	"Select a pipeline url": "",
 	"Select a pipeline url": "",
 	"Select an Ollama instance": "Pasirinkti Ollama instanciją",
 	"Select an Ollama instance": "Pasirinkti Ollama instanciją",
+	"Select Documents": "",
 	"Select model": "Pasirinkti modelį",
 	"Select model": "Pasirinkti modelį",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "",
 	"Selected model(s) do not support image inputs": "",
@@ -443,6 +445,7 @@
 	"Send message": "Siųsti žinutę",
 	"Send message": "Siųsti žinutę",
 	"September": "rugsėjis",
 	"September": "rugsėjis",
 	"Serper API Key": "",
 	"Serper API Key": "",
+	"Serply API Key": "",
 	"Serpstack API Key": "",
 	"Serpstack API Key": "",
 	"Server connection verified": "Serverio sujungimas patvirtintas",
 	"Server connection verified": "Serverio sujungimas patvirtintas",
 	"Set as default": "Nustatyti numatytąjį",
 	"Set as default": "Nustatyti numatytąjį",
@@ -507,6 +510,7 @@
 	"To access the available model names for downloading,": "Tam, kad prieiti prie galimų parsisiųsti modelių",
 	"To access the available model names for downloading,": "Tam, kad prieiti prie galimų parsisiųsti modelių",
 	"To access the GGUF models available for downloading,": "Tam, kad prieiti prie galimų parsisiųsti GGUF,",
 	"To access the GGUF models available for downloading,": "Tam, kad prieiti prie galimų parsisiųsti GGUF,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "į pokalbio įvestį",
 	"to chat input.": "į pokalbio įvestį",
 	"Today": "Šiandien",
 	"Today": "Šiandien",
 	"Toggle settings": "Atverti/užverti parametrus",
 	"Toggle settings": "Atverti/užverti parametrus",

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

@@ -201,6 +201,7 @@
 	"Enter Score": "Skriv inn poengsum",
 	"Enter Score": "Skriv inn poengsum",
 	"Enter Searxng Query URL": "Skriv inn Searxng forespørsels-URL",
 	"Enter Searxng Query URL": "Skriv inn Searxng forespørsels-URL",
 	"Enter Serper API Key": "Skriv inn Serper API-nøkkel",
 	"Enter Serper API Key": "Skriv inn Serper API-nøkkel",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Skriv inn Serpstack API-nøkkel",
 	"Enter Serpstack API Key": "Skriv inn Serpstack API-nøkkel",
 	"Enter stop sequence": "Skriv inn stoppsekvens",
 	"Enter stop sequence": "Skriv inn stoppsekvens",
 	"Enter Top K": "Skriv inn Top K",
 	"Enter Top K": "Skriv inn Top K",
@@ -421,7 +422,7 @@
 	"Search Result Count": "Antall søkeresultater",
 	"Search Result Count": "Antall søkeresultater",
 	"Searched {{count}} sites_one": "Søkte på {{count}} side",
 	"Searched {{count}} sites_one": "Søkte på {{count}} side",
 	"Searched {{count}} sites_other": "Søkte på {{count}} sider",
 	"Searched {{count}} sites_other": "Søkte på {{count}} sider",
-	"Searching the web for '{{searchQuery}}'": "Søker på nettet etter '{{searchQuery}}'",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "Searxng forespørsels-URL",
 	"Searxng Query URL": "Searxng forespørsels-URL",
 	"See readme.md for instructions": "Se readme.md for instruksjoner",
 	"See readme.md for instructions": "Se readme.md for instruksjoner",
 	"See what's new": "Se hva som er nytt",
 	"See what's new": "Se hva som er nytt",
@@ -433,6 +434,7 @@
 	"Select a pipeline": "Velg en pipeline",
 	"Select a pipeline": "Velg en pipeline",
 	"Select a pipeline url": "Velg en pipeline-URL",
 	"Select a pipeline url": "Velg en pipeline-URL",
 	"Select an Ollama instance": "Velg en Ollama-instans",
 	"Select an Ollama instance": "Velg en Ollama-instans",
+	"Select Documents": "",
 	"Select model": "Velg modell",
 	"Select model": "Velg modell",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "Valgte modell(er) støtter ikke bildeforslag",
 	"Selected model(s) do not support image inputs": "Valgte modell(er) støtter ikke bildeforslag",
@@ -441,6 +443,7 @@
 	"Send message": "Send melding",
 	"Send message": "Send melding",
 	"September": "September",
 	"September": "September",
 	"Serper API Key": "Serper API-nøkkel",
 	"Serper API Key": "Serper API-nøkkel",
+	"Serply API Key": "",
 	"Serpstack API Key": "Serpstack API-nøkkel",
 	"Serpstack API Key": "Serpstack API-nøkkel",
 	"Server connection verified": "Servertilkobling bekreftet",
 	"Server connection verified": "Servertilkobling bekreftet",
 	"Set as default": "Sett som standard",
 	"Set as default": "Sett som standard",
@@ -505,6 +508,7 @@
 	"To access the available model names for downloading,": "For å få tilgang til tilgjengelige modelnavn for nedlasting,",
 	"To access the available model names for downloading,": "For å få tilgang til tilgjengelige modelnavn for nedlasting,",
 	"To access the GGUF models available for downloading,": "For å få tilgang til GGUF-modellene som er tilgjengelige for nedlasting,",
 	"To access the GGUF models available for downloading,": "For å få tilgang til GGUF-modellene som er tilgjengelige for nedlasting,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "til chatinput.",
 	"to chat input.": "til chatinput.",
 	"Today": "I dag",
 	"Today": "I dag",
 	"Toggle settings": "Veksle innstillinger",
 	"Toggle settings": "Veksle innstillinger",

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

@@ -201,6 +201,7 @@
 	"Enter Score": "Voeg score toe",
 	"Enter Score": "Voeg score toe",
 	"Enter Searxng Query URL": "Voer de URL van de Searxng-query in",
 	"Enter Searxng Query URL": "Voer de URL van de Searxng-query in",
 	"Enter Serper API Key": "Voer de Serper API-sleutel in",
 	"Enter Serper API Key": "Voer de Serper API-sleutel in",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Voer de Serpstack API-sleutel in",
 	"Enter Serpstack API Key": "Voer de Serpstack API-sleutel in",
 	"Enter stop sequence": "Zet stop sequentie",
 	"Enter stop sequence": "Zet stop sequentie",
 	"Enter Top K": "Voeg Top K toe",
 	"Enter Top K": "Voeg Top K toe",
@@ -421,7 +422,7 @@
 	"Search Result Count": "Aantal zoekresultaten",
 	"Search Result Count": "Aantal zoekresultaten",
 	"Searched {{count}} sites_one": "Gezocht op {{count}} sites_one",
 	"Searched {{count}} sites_one": "Gezocht op {{count}} sites_one",
 	"Searched {{count}} sites_other": "Gezocht op {{count}} sites_other",
 	"Searched {{count}} sites_other": "Gezocht op {{count}} sites_other",
-	"Searching the web for '{{searchQuery}}'": "Zoeken op internet naar '{{searchQuery}}'",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "Searxng Query URL",
 	"Searxng Query URL": "Searxng Query URL",
 	"See readme.md for instructions": "Zie readme.md voor instructies",
 	"See readme.md for instructions": "Zie readme.md voor instructies",
 	"See what's new": "Zie wat er nieuw is",
 	"See what's new": "Zie wat er nieuw is",
@@ -433,6 +434,7 @@
 	"Select a pipeline": "Selecteer een pijplijn",
 	"Select a pipeline": "Selecteer een pijplijn",
 	"Select a pipeline url": "Selecteer een pijplijn-URL",
 	"Select a pipeline url": "Selecteer een pijplijn-URL",
 	"Select an Ollama instance": "Selecteer een Ollama instantie",
 	"Select an Ollama instance": "Selecteer een Ollama instantie",
+	"Select Documents": "",
 	"Select model": "Selecteer een model",
 	"Select model": "Selecteer een model",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "Geselecteerde modellen ondersteunen geen beeldinvoer",
 	"Selected model(s) do not support image inputs": "Geselecteerde modellen ondersteunen geen beeldinvoer",
@@ -441,6 +443,7 @@
 	"Send message": "Stuur bericht",
 	"Send message": "Stuur bericht",
 	"September": "September",
 	"September": "September",
 	"Serper API Key": "Serper API-sleutel",
 	"Serper API Key": "Serper API-sleutel",
+	"Serply API Key": "",
 	"Serpstack API Key": "Serpstack API-sleutel",
 	"Serpstack API Key": "Serpstack API-sleutel",
 	"Server connection verified": "Server verbinding geverifieerd",
 	"Server connection verified": "Server verbinding geverifieerd",
 	"Set as default": "Stel in als standaard",
 	"Set as default": "Stel in als standaard",
@@ -505,6 +508,7 @@
 	"To access the available model names for downloading,": "Om de beschikbare modelnamen voor downloaden te openen,",
 	"To access the available model names for downloading,": "Om de beschikbare modelnamen voor downloaden te openen,",
 	"To access the GGUF models available for downloading,": "Om toegang te krijgen tot de GGUF modellen die beschikbaar zijn voor downloaden,",
 	"To access the GGUF models available for downloading,": "Om toegang te krijgen tot de GGUF modellen die beschikbaar zijn voor downloaden,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "naar chat input.",
 	"to chat input.": "naar chat input.",
 	"Today": "Vandaag",
 	"Today": "Vandaag",
 	"Toggle settings": "Wissel instellingen",
 	"Toggle settings": "Wissel instellingen",

+ 5 - 1
src/lib/i18n/locales/pa-IN/translation.json

@@ -201,6 +201,7 @@
 	"Enter Score": "ਸਕੋਰ ਦਰਜ ਕਰੋ",
 	"Enter Score": "ਸਕੋਰ ਦਰਜ ਕਰੋ",
 	"Enter Searxng Query URL": "Searxng Query URL ਦਾਖਲ ਕਰੋ",
 	"Enter Searxng Query URL": "Searxng Query URL ਦਾਖਲ ਕਰੋ",
 	"Enter Serper API Key": "Serper API ਕੁੰਜੀ ਦਾਖਲ ਕਰੋ",
 	"Enter Serper API Key": "Serper API ਕੁੰਜੀ ਦਾਖਲ ਕਰੋ",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Serpstack API ਕੁੰਜੀ ਦਾਖਲ ਕਰੋ",
 	"Enter Serpstack API Key": "Serpstack API ਕੁੰਜੀ ਦਾਖਲ ਕਰੋ",
 	"Enter stop sequence": "ਰੋਕਣ ਦਾ ਕ੍ਰਮ ਦਰਜ ਕਰੋ",
 	"Enter stop sequence": "ਰੋਕਣ ਦਾ ਕ੍ਰਮ ਦਰਜ ਕਰੋ",
 	"Enter Top K": "ਸਿਖਰ K ਦਰਜ ਕਰੋ",
 	"Enter Top K": "ਸਿਖਰ K ਦਰਜ ਕਰੋ",
@@ -421,7 +422,7 @@
 	"Search Result Count": "ਖੋਜ ਨਤੀਜੇ ਦੀ ਗਿਣਤੀ",
 	"Search Result Count": "ਖੋਜ ਨਤੀਜੇ ਦੀ ਗਿਣਤੀ",
 	"Searched {{count}} sites_one": "ਖੋਜਿਆ {{count}} sites_one",
 	"Searched {{count}} sites_one": "ਖੋਜਿਆ {{count}} sites_one",
 	"Searched {{count}} sites_other": "ਖੋਜਿਆ {{count}} sites_other",
 	"Searched {{count}} sites_other": "ਖੋਜਿਆ {{count}} sites_other",
-	"Searching the web for '{{searchQuery}}'": "'{{searchQuery}}' ਲਈ ਵੈੱਬ 'ਤੇ ਖੋਜ ਕਰਨਾ",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "Searxng Query URL",
 	"Searxng Query URL": "Searxng Query URL",
 	"See readme.md for instructions": "ਹਦਾਇਤਾਂ ਲਈ readme.md ਵੇਖੋ",
 	"See readme.md for instructions": "ਹਦਾਇਤਾਂ ਲਈ readme.md ਵੇਖੋ",
 	"See what's new": "ਨਵਾਂ ਕੀ ਹੈ ਵੇਖੋ",
 	"See what's new": "ਨਵਾਂ ਕੀ ਹੈ ਵੇਖੋ",
@@ -433,6 +434,7 @@
 	"Select a pipeline": "ਪਾਈਪਲਾਈਨ ਚੁਣੋ",
 	"Select a pipeline": "ਪਾਈਪਲਾਈਨ ਚੁਣੋ",
 	"Select a pipeline url": "ਪਾਈਪਲਾਈਨ URL ਚੁਣੋ",
 	"Select a pipeline url": "ਪਾਈਪਲਾਈਨ URL ਚੁਣੋ",
 	"Select an Ollama instance": "ਇੱਕ ਓਲਾਮਾ ਇੰਸਟੈਂਸ ਚੁਣੋ",
 	"Select an Ollama instance": "ਇੱਕ ਓਲਾਮਾ ਇੰਸਟੈਂਸ ਚੁਣੋ",
+	"Select Documents": "",
 	"Select model": "ਮਾਡਲ ਚੁਣੋ",
 	"Select model": "ਮਾਡਲ ਚੁਣੋ",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "ਚੁਣੇ ਗਏ ਮਾਡਲ(ਆਂ) ਚਿੱਤਰ ਇਨਪੁੱਟਾਂ ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦੇ",
 	"Selected model(s) do not support image inputs": "ਚੁਣੇ ਗਏ ਮਾਡਲ(ਆਂ) ਚਿੱਤਰ ਇਨਪੁੱਟਾਂ ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦੇ",
@@ -441,6 +443,7 @@
 	"Send message": "ਸੁਨੇਹਾ ਭੇਜੋ",
 	"Send message": "ਸੁਨੇਹਾ ਭੇਜੋ",
 	"September": "ਸਤੰਬਰ",
 	"September": "ਸਤੰਬਰ",
 	"Serper API Key": "Serper API ਕੁੰਜੀ",
 	"Serper API Key": "Serper API ਕੁੰਜੀ",
+	"Serply API Key": "",
 	"Serpstack API Key": "Serpstack API ਕੁੰਜੀ",
 	"Serpstack API Key": "Serpstack API ਕੁੰਜੀ",
 	"Server connection verified": "ਸਰਵਰ ਕਨੈਕਸ਼ਨ ਦੀ ਪੁਸ਼ਟੀ ਕੀਤੀ ਗਈ",
 	"Server connection verified": "ਸਰਵਰ ਕਨੈਕਸ਼ਨ ਦੀ ਪੁਸ਼ਟੀ ਕੀਤੀ ਗਈ",
 	"Set as default": "ਮੂਲ ਵਜੋਂ ਸੈੱਟ ਕਰੋ",
 	"Set as default": "ਮੂਲ ਵਜੋਂ ਸੈੱਟ ਕਰੋ",
@@ -505,6 +508,7 @@
 	"To access the available model names for downloading,": "ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਉਪਲਬਧ ਮਾਡਲ ਨਾਮਾਂ ਤੱਕ ਪਹੁੰਚਣ ਲਈ,",
 	"To access the available model names for downloading,": "ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਉਪਲਬਧ ਮਾਡਲ ਨਾਮਾਂ ਤੱਕ ਪਹੁੰਚਣ ਲਈ,",
 	"To access the GGUF models available for downloading,": "ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਉਪਲਬਧ GGUF ਮਾਡਲਾਂ ਤੱਕ ਪਹੁੰਚਣ ਲਈ,",
 	"To access the GGUF models available for downloading,": "ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਉਪਲਬਧ GGUF ਮਾਡਲਾਂ ਤੱਕ ਪਹੁੰਚਣ ਲਈ,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "ਗੱਲਬਾਤ ਇਨਪੁਟ ਲਈ।",
 	"to chat input.": "ਗੱਲਬਾਤ ਇਨਪੁਟ ਲਈ।",
 	"Today": "ਅੱਜ",
 	"Today": "ਅੱਜ",
 	"Toggle settings": "ਸੈਟਿੰਗਾਂ ਟੌਗਲ ਕਰੋ",
 	"Toggle settings": "ਸੈਟਿੰਗਾਂ ਟੌਗਲ ਕਰੋ",

+ 5 - 1
src/lib/i18n/locales/pl-PL/translation.json

@@ -201,6 +201,7 @@
 	"Enter Score": "Wprowadź wynik",
 	"Enter Score": "Wprowadź wynik",
 	"Enter Searxng Query URL": "Wprowadź adres URL zapytania Searxng",
 	"Enter Searxng Query URL": "Wprowadź adres URL zapytania Searxng",
 	"Enter Serper API Key": "Wprowadź klucz API Serper",
 	"Enter Serper API Key": "Wprowadź klucz API Serper",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Wprowadź klucz API Serpstack",
 	"Enter Serpstack API Key": "Wprowadź klucz API Serpstack",
 	"Enter stop sequence": "Wprowadź sekwencję zatrzymania",
 	"Enter stop sequence": "Wprowadź sekwencję zatrzymania",
 	"Enter Top K": "Wprowadź Top K",
 	"Enter Top K": "Wprowadź Top K",
@@ -423,7 +424,7 @@
 	"Searched {{count}} sites_few": "Wyszukiwano {{count}} sites_few",
 	"Searched {{count}} sites_few": "Wyszukiwano {{count}} sites_few",
 	"Searched {{count}} sites_many": "Wyszukiwano {{count}} sites_many",
 	"Searched {{count}} sites_many": "Wyszukiwano {{count}} sites_many",
 	"Searched {{count}} sites_other": "Wyszukiwano {{count}} sites_other",
 	"Searched {{count}} sites_other": "Wyszukiwano {{count}} sites_other",
-	"Searching the web for '{{searchQuery}}'": "Wyszukiwanie w Internecie \"{{searchQuery}}\"",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "Adres URL zapytania Searxng",
 	"Searxng Query URL": "Adres URL zapytania Searxng",
 	"See readme.md for instructions": "Zajrzyj do readme.md po instrukcje",
 	"See readme.md for instructions": "Zajrzyj do readme.md po instrukcje",
 	"See what's new": "Zobacz co nowego",
 	"See what's new": "Zobacz co nowego",
@@ -435,6 +436,7 @@
 	"Select a pipeline": "Wybieranie potoku",
 	"Select a pipeline": "Wybieranie potoku",
 	"Select a pipeline url": "Wybieranie adresu URL potoku",
 	"Select a pipeline url": "Wybieranie adresu URL potoku",
 	"Select an Ollama instance": "Wybierz instancję Ollama",
 	"Select an Ollama instance": "Wybierz instancję Ollama",
+	"Select Documents": "",
 	"Select model": "Wybierz model",
 	"Select model": "Wybierz model",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "Wybrane modele nie obsługują danych wejściowych obrazu",
 	"Selected model(s) do not support image inputs": "Wybrane modele nie obsługują danych wejściowych obrazu",
@@ -443,6 +445,7 @@
 	"Send message": "Wyślij wiadomość",
 	"Send message": "Wyślij wiadomość",
 	"September": "Wrzesień",
 	"September": "Wrzesień",
 	"Serper API Key": "Klucz API Serper",
 	"Serper API Key": "Klucz API Serper",
+	"Serply API Key": "",
 	"Serpstack API Key": "Klucz API Serpstack",
 	"Serpstack API Key": "Klucz API Serpstack",
 	"Server connection verified": "Połączenie z serwerem zweryfikowane",
 	"Server connection verified": "Połączenie z serwerem zweryfikowane",
 	"Set as default": "Ustaw jako domyślne",
 	"Set as default": "Ustaw jako domyślne",
@@ -507,6 +510,7 @@
 	"To access the available model names for downloading,": "Aby uzyskać dostęp do dostępnych nazw modeli do pobrania,",
 	"To access the available model names for downloading,": "Aby uzyskać dostęp do dostępnych nazw modeli do pobrania,",
 	"To access the GGUF models available for downloading,": "Aby uzyskać dostęp do dostępnych modeli GGUF do pobrania,",
 	"To access the GGUF models available for downloading,": "Aby uzyskać dostęp do dostępnych modeli GGUF do pobrania,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "do pola wprowadzania czatu.",
 	"to chat input.": "do pola wprowadzania czatu.",
 	"Today": "Dzisiaj",
 	"Today": "Dzisiaj",
 	"Toggle settings": "Przełącz ustawienia",
 	"Toggle settings": "Przełącz ustawienia",

+ 5 - 1
src/lib/i18n/locales/pt-BR/translation.json

@@ -201,6 +201,7 @@
 	"Enter Score": "Digite a Pontuação",
 	"Enter Score": "Digite a Pontuação",
 	"Enter Searxng Query URL": "Insira a URL de consulta do Searxng",
 	"Enter Searxng Query URL": "Insira a URL de consulta do Searxng",
 	"Enter Serper API Key": "Digite a chave da API do Serper",
 	"Enter Serper API Key": "Digite a chave da API do Serper",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Digite a chave da API Serpstack",
 	"Enter Serpstack API Key": "Digite a chave da API Serpstack",
 	"Enter stop sequence": "Digite a sequência de parada",
 	"Enter stop sequence": "Digite a sequência de parada",
 	"Enter Top K": "Digite o Top K",
 	"Enter Top K": "Digite o Top K",
@@ -422,7 +423,7 @@
 	"Searched {{count}} sites_one": "Pesquisado {{count}} sites_one",
 	"Searched {{count}} sites_one": "Pesquisado {{count}} sites_one",
 	"Searched {{count}} sites_many": "Pesquisado {{count}} sites_many",
 	"Searched {{count}} sites_many": "Pesquisado {{count}} sites_many",
 	"Searched {{count}} sites_other": "Pesquisado {{count}} sites_other",
 	"Searched {{count}} sites_other": "Pesquisado {{count}} sites_other",
-	"Searching the web for '{{searchQuery}}'": "Pesquisando na Web por '{{searchQuery}}'",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "URL de consulta Searxng",
 	"Searxng Query URL": "URL de consulta Searxng",
 	"See readme.md for instructions": "Consulte readme.md para obter instruções",
 	"See readme.md for instructions": "Consulte readme.md para obter instruções",
 	"See what's new": "Veja o que há de novo",
 	"See what's new": "Veja o que há de novo",
@@ -434,6 +435,7 @@
 	"Select a pipeline": "Selecione um pipeline",
 	"Select a pipeline": "Selecione um pipeline",
 	"Select a pipeline url": "Selecione uma URL de pipeline",
 	"Select a pipeline url": "Selecione uma URL de pipeline",
 	"Select an Ollama instance": "Selecione uma instância Ollama",
 	"Select an Ollama instance": "Selecione uma instância Ollama",
+	"Select Documents": "",
 	"Select model": "Selecione um modelo",
 	"Select model": "Selecione um modelo",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "O(s) modelo(s) selecionado(s) não suporta(m) entrada(s) de imagem",
 	"Selected model(s) do not support image inputs": "O(s) modelo(s) selecionado(s) não suporta(m) entrada(s) de imagem",
@@ -442,6 +444,7 @@
 	"Send message": "Enviar mensagem",
 	"Send message": "Enviar mensagem",
 	"September": "Setembro",
 	"September": "Setembro",
 	"Serper API Key": "Chave de API Serper",
 	"Serper API Key": "Chave de API Serper",
+	"Serply API Key": "",
 	"Serpstack API Key": "Chave de API Serpstack",
 	"Serpstack API Key": "Chave de API Serpstack",
 	"Server connection verified": "Conexão com o servidor verificada",
 	"Server connection verified": "Conexão com o servidor verificada",
 	"Set as default": "Definir como padrão",
 	"Set as default": "Definir como padrão",
@@ -506,6 +509,7 @@
 	"To access the available model names for downloading,": "Para acessar os nomes de modelo disponíveis para download,",
 	"To access the available model names for downloading,": "Para acessar os nomes de modelo disponíveis para download,",
 	"To access the GGUF models available for downloading,": "Para acessar os modelos GGUF disponíveis para download,",
 	"To access the GGUF models available for downloading,": "Para acessar os modelos GGUF disponíveis para download,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "para a entrada de bate-papo.",
 	"to chat input.": "para a entrada de bate-papo.",
 	"Today": "Hoje",
 	"Today": "Hoje",
 	"Toggle settings": "Alternar configurações",
 	"Toggle settings": "Alternar configurações",

+ 215 - 211
src/lib/i18n/locales/pt-PT/translation.json

@@ -5,16 +5,16 @@
 	"(latest)": "(mais recente)",
 	"(latest)": "(mais recente)",
 	"{{ models }}": "{{ modelos }}",
 	"{{ models }}": "{{ modelos }}",
 	"{{ owner }}: You cannot delete a base model": "{{ owner }}: Não é possível excluir um modelo base",
 	"{{ owner }}: You cannot delete a base model": "{{ owner }}: Não é possível excluir um modelo base",
-	"{{modelName}} is thinking...": "{{modelName}} está pensando...",
+	"{{modelName}} is thinking...": "{{modelName}} está a pensar...",
 	"{{user}}'s Chats": "{{user}}'s Chats",
 	"{{user}}'s Chats": "{{user}}'s Chats",
 	"{{webUIName}} Backend Required": "{{webUIName}} Backend Necessário",
 	"{{webUIName}} Backend Required": "{{webUIName}} Backend Necessário",
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "Um modelo de tarefa é usado ao executar tarefas como gerar títulos para bate-papos e consultas de pesquisa na Web",
 	"A task model is used when performing tasks such as generating titles for chats and web search queries": "Um modelo de tarefa é usado ao executar tarefas como gerar títulos para bate-papos e consultas de pesquisa na Web",
-	"a user": "um usuário",
-	"About": "Sobre",
+	"a user": "um utilizador",
+	"About": "Acerca de",
 	"Account": "Conta",
 	"Account": "Conta",
-	"Account Activation Pending": "",
+	"Account Activation Pending": "Ativação da Conta Pendente",
 	"Accurate information": "Informações precisas",
 	"Accurate information": "Informações precisas",
-	"Active Users": "",
+	"Active Users": "Utilizadores Ativos",
 	"Add": "Adicionar",
 	"Add": "Adicionar",
 	"Add a model id": "Adicionar um ID de modelo",
 	"Add a model id": "Adicionar um ID de modelo",
 	"Add a short description about what this model does": "Adicione uma breve descrição sobre o que este modelo faz",
 	"Add a short description about what this model does": "Adicione uma breve descrição sobre o que este modelo faz",
@@ -22,30 +22,30 @@
 	"Add a tag": "Adicionar uma tag",
 	"Add a tag": "Adicionar uma tag",
 	"Add custom prompt": "Adicionar um prompt curto",
 	"Add custom prompt": "Adicionar um prompt curto",
 	"Add Docs": "Adicionar Documentos",
 	"Add Docs": "Adicionar Documentos",
-	"Add Files": "Adicionar Arquivos",
+	"Add Files": "Adicionar Ficheiros",
 	"Add Memory": "Adicionar memória",
 	"Add Memory": "Adicionar memória",
 	"Add message": "Adicionar mensagem",
 	"Add message": "Adicionar mensagem",
 	"Add Model": "Adicionar modelo",
 	"Add Model": "Adicionar modelo",
 	"Add Tags": "adicionar tags",
 	"Add Tags": "adicionar tags",
-	"Add User": "Adicionar Usuário",
-	"Adjusting these settings will apply changes universally to all users.": "Ajustar essas configurações aplicará alterações universalmente a todos os usuários.",
+	"Add User": "Adicionar Utilizador",
+	"Adjusting these settings will apply changes universally to all users.": "Ajustar essas configurações aplicará alterações universalmente a todos os utilizadores.",
 	"admin": "administrador",
 	"admin": "administrador",
-	"Admin": "",
+	"Admin": "Admin",
 	"Admin Panel": "Painel do Administrador",
 	"Admin Panel": "Painel do Administrador",
 	"Admin Settings": "Configurações do Administrador",
 	"Admin Settings": "Configurações do Administrador",
 	"Advanced Parameters": "Parâmetros Avançados",
 	"Advanced Parameters": "Parâmetros Avançados",
 	"Advanced Params": "Params Avançados",
 	"Advanced Params": "Params Avançados",
 	"all": "todos",
 	"all": "todos",
 	"All Documents": "Todos os Documentos",
 	"All Documents": "Todos os Documentos",
-	"All Users": "Todos os Usuários",
+	"All Users": "Todos os utilizadores",
 	"Allow": "Permitir",
 	"Allow": "Permitir",
-	"Allow Chat Deletion": "Permitir Exclusão de Bate-papo",
-	"Allow non-local voices": "",
+	"Allow Chat Deletion": "Permitir Exclusão de Conversa",
+	"Allow non-local voices": "Permitir vozes não locais",
 	"alphanumeric characters and hyphens": "caracteres alfanuméricos e hífens",
 	"alphanumeric characters and hyphens": "caracteres alfanuméricos e hífens",
 	"Already have an account?": "Já tem uma conta?",
 	"Already have an account?": "Já tem uma conta?",
 	"an assistant": "um assistente",
 	"an assistant": "um assistente",
 	"and": "e",
 	"and": "e",
-	"and create a new shared link.": "e criar um novo link compartilhado.",
+	"and create a new shared link.": "e criar um novo link partilhado.",
 	"API Base URL": "URL Base da API",
 	"API Base URL": "URL Base da API",
 	"API Key": "Chave da API",
 	"API Key": "Chave da API",
 	"API Key created.": "Chave da API criada.",
 	"API Key created.": "Chave da API criada.",
@@ -53,69 +53,69 @@
 	"April": "Abril",
 	"April": "Abril",
 	"Archive": "Arquivo",
 	"Archive": "Arquivo",
 	"Archive All Chats": "Arquivar todos os chats",
 	"Archive All Chats": "Arquivar todos os chats",
-	"Archived Chats": "Bate-papos arquivados",
-	"are allowed - Activate this command by typing": "são permitidos - Ative este comando digitando",
-	"Are you sure?": "Tem certeza?",
-	"Attach file": "Anexar arquivo",
+	"Archived Chats": "Conversas arquivadas",
+	"are allowed - Activate this command by typing": "são permitidos - Ative este comando escrevendo",
+	"Are you sure?": "Tem a certeza?",
+	"Attach file": "Anexar ficheiro",
 	"Attention to detail": "Detalhado",
 	"Attention to detail": "Detalhado",
 	"Audio": "Áudio",
 	"Audio": "Áudio",
 	"August": "Agosto",
 	"August": "Agosto",
 	"Auto-playback response": "Reprodução automática da resposta",
 	"Auto-playback response": "Reprodução automática da resposta",
 	"AUTOMATIC1111 Base URL": "URL Base do AUTOMATIC1111",
 	"AUTOMATIC1111 Base URL": "URL Base do AUTOMATIC1111",
-	"AUTOMATIC1111 Base URL is required.": "A URL Base do AUTOMATIC1111 é obrigatória.",
+	"AUTOMATIC1111 Base URL is required.": "O URL Base do AUTOMATIC1111 é obrigatório.",
 	"available!": "disponível!",
 	"available!": "disponível!",
 	"Back": "Voltar",
 	"Back": "Voltar",
-	"Bad Response": "Resposta ruim",
+	"Bad Response": "Resposta má",
 	"Banners": "Estandartes",
 	"Banners": "Estandartes",
 	"Base Model (From)": "Modelo Base (De)",
 	"Base Model (From)": "Modelo Base (De)",
 	"before": "antes",
 	"before": "antes",
 	"Being lazy": "Ser preguiçoso",
 	"Being lazy": "Ser preguiçoso",
-	"Brave Search API Key": "Chave da API de Pesquisa Admirável",
+	"Brave Search API Key": "Chave da API de Pesquisa Brave",
 	"Bypass SSL verification for Websites": "Ignorar verificação SSL para sites",
 	"Bypass SSL verification for Websites": "Ignorar verificação SSL para sites",
-	"Call": "",
-	"Call feature is not supported when using Web STT engine": "",
-	"Camera": "",
+	"Call": "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",
 	"Cancel": "Cancelar",
 	"Cancel": "Cancelar",
 	"Capabilities": "Capacidades",
 	"Capabilities": "Capacidades",
 	"Change Password": "Alterar Senha",
 	"Change Password": "Alterar Senha",
-	"Chat": "Bate-papo",
-	"Chat Bubble UI": "UI de Bala de Bate-papo",
-	"Chat direction": "Direção do Bate-papo",
-	"Chat History": "Histórico de Bate-papo",
-	"Chat History is off for this browser.": "O histórico de bate-papo está desativado para este navegador.",
-	"Chats": "Bate-papos",
+	"Chat": "Conversa",
+	"Chat Bubble UI": "Bolha UI da Conversa",
+	"Chat direction": "Direção da Conversa",
+	"Chat History": "Histórico da Conversa",
+	"Chat History is off for this browser.": "O histórico da conversa está desativado para este navegador.",
+	"Chats": "Conversas",
 	"Check Again": "Verifique novamente",
 	"Check Again": "Verifique novamente",
 	"Check for updates": "Verificar atualizações",
 	"Check for updates": "Verificar atualizações",
 	"Checking for updates...": "Verificando atualizações...",
 	"Checking for updates...": "Verificando atualizações...",
-	"Choose a model before saving...": "Escolha um modelo antes de salvar...",
+	"Choose a model before saving...": "Escolha um modelo antes de guardar...",
 	"Chunk Overlap": "Sobreposição de Fragmento",
 	"Chunk Overlap": "Sobreposição de Fragmento",
 	"Chunk Params": "Parâmetros de Fragmento",
 	"Chunk Params": "Parâmetros de Fragmento",
 	"Chunk Size": "Tamanho do Fragmento",
 	"Chunk Size": "Tamanho do Fragmento",
 	"Citation": "Citação",
 	"Citation": "Citação",
-	"Clear memory": "",
+	"Clear memory": "Limpar memória",
 	"Click here for help.": "Clique aqui para obter ajuda.",
 	"Click here for help.": "Clique aqui para obter ajuda.",
 	"Click here to": "Clique aqui para",
 	"Click here to": "Clique aqui para",
 	"Click here to select": "Clique aqui para selecionar",
 	"Click here to select": "Clique aqui para selecionar",
-	"Click here to select a csv file.": "Clique aqui para selecionar um arquivo csv.",
-	"Click here to select a py file.": "",
+	"Click here to select a csv file.": "Clique aqui para selecionar um ficheiro csv.",
+	"Click here to select a py file.": "Clique aqui para selecionar um ficheiro py",
 	"Click here to select documents.": "Clique aqui para selecionar documentos.",
 	"Click here to select documents.": "Clique aqui para selecionar documentos.",
 	"click here.": "clique aqui.",
 	"click here.": "clique aqui.",
-	"Click on the user role button to change a user's role.": "Clique no botão de função do usuário para alterar a função de um usuário.",
-	"Clone": "Clone",
+	"Click on the user role button to change a user's role.": "Clique no botão de função do utilizador para alterar a função de um utilizador.",
+	"Clone": "Clonar",
 	"Close": "Fechar",
 	"Close": "Fechar",
 	"Collection": "Coleção",
 	"Collection": "Coleção",
 	"ComfyUI": "ComfyUI",
 	"ComfyUI": "ComfyUI",
 	"ComfyUI Base URL": "URL Base do ComfyUI",
 	"ComfyUI Base URL": "URL Base do ComfyUI",
-	"ComfyUI Base URL is required.": "A URL Base do ComfyUI é obrigatória.",
+	"ComfyUI Base URL is required.": "O URL Base do ComfyUI é obrigatório.",
 	"Command": "Comando",
 	"Command": "Comando",
 	"Concurrent Requests": "Solicitações simultâneas",
 	"Concurrent Requests": "Solicitações simultâneas",
 	"Confirm Password": "Confirmar Senha",
 	"Confirm Password": "Confirmar Senha",
 	"Connections": "Conexões",
 	"Connections": "Conexões",
-	"Contact Admin for WebUI Access": "",
+	"Contact Admin for WebUI Access": "Contatar Admin para acesso ao WebUI",
 	"Content": "Conteúdo",
 	"Content": "Conteúdo",
 	"Context Length": "Comprimento do Contexto",
 	"Context Length": "Comprimento do Contexto",
 	"Continue Response": "Continuar resposta",
 	"Continue Response": "Continuar resposta",
-	"Copied shared chat URL to clipboard!": "URL de bate-papo compartilhado copiada com sucesso!",
+	"Copied shared chat URL to clipboard!": "URL de Conversa partilhado copiada com sucesso!",
 	"Copy": "Copiar",
 	"Copy": "Copiar",
 	"Copy last code block": "Copiar último bloco de código",
 	"Copy last code block": "Copiar último bloco de código",
 	"Copy last response": "Copiar última resposta",
 	"Copy last response": "Copiar última resposta",
@@ -132,8 +132,8 @@
 	"Custom": "Personalizado",
 	"Custom": "Personalizado",
 	"Customize models for a specific purpose": "Personalizar modelos para uma finalidade específica",
 	"Customize models for a specific purpose": "Personalizar modelos para uma finalidade específica",
 	"Dark": "Escuro",
 	"Dark": "Escuro",
-	"Dashboard": "",
-	"Database": "Banco de dados",
+	"Dashboard": "Painel",
+	"Database": "Base de dados",
 	"December": "Dezembro",
 	"December": "Dezembro",
 	"Default": "Padrão",
 	"Default": "Padrão",
 	"Default (Automatic1111)": "Padrão (Automatic1111)",
 	"Default (Automatic1111)": "Padrão (Automatic1111)",
@@ -141,118 +141,119 @@
 	"Default Model": "Modelo padrão",
 	"Default Model": "Modelo padrão",
 	"Default model updated": "Modelo padrão atualizado",
 	"Default model updated": "Modelo padrão atualizado",
 	"Default Prompt Suggestions": "Sugestões de Prompt Padrão",
 	"Default Prompt Suggestions": "Sugestões de Prompt Padrão",
-	"Default User Role": "Função de Usuário Padrão",
-	"delete": "excluir",
-	"Delete": "Excluir",
-	"Delete a model": "Excluir um modelo",
-	"Delete All Chats": "Excluir todos os chats",
-	"Delete chat": "Excluir bate-papo",
-	"Delete Chat": "Excluir Bate-papo",
-	"delete this link": "excluir este link",
-	"Delete User": "Excluir Usuário",
-	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} excluído",
-	"Deleted {{name}}": "Suprimido {{name}}",
+	"Default User Role": "Função de Utilizador Padrão",
+	"delete": "apagar",
+	"Delete": "Apagar",
+	"Delete a model": "Apagar um modelo",
+	"Delete All Chats": "Apagar todas as conversas",
+	"Delete chat": "Apagar conversa",
+	"Delete Chat": "Apagar Conversa",
+	"delete this link": "apagar este link",
+	"Delete User": "Apagar Utilizador",
+	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} apagado",
+	"Deleted {{name}}": "Apagado {{name}}",
 	"Description": "Descrição",
 	"Description": "Descrição",
 	"Didn't fully follow instructions": "Não seguiu instruções com precisão",
 	"Didn't fully follow instructions": "Não seguiu instruções com precisão",
 	"Discover a model": "Descubra um modelo",
 	"Discover a model": "Descubra um modelo",
 	"Discover a prompt": "Descobrir um prompt",
 	"Discover a prompt": "Descobrir um prompt",
-	"Discover, download, and explore custom prompts": "Descubra, baixe e explore prompts personalizados",
-	"Discover, download, and explore model presets": "Descubra, baixe e explore predefinições de modelo",
-	"Dismissible": "",
-	"Display the username instead of You in the Chat": "Exibir o nome de usuário em vez de Você no Bate-papo",
+	"Discover, download, and explore custom prompts": "Descubra, descarregue e explore prompts personalizados",
+	"Discover, download, and explore model presets": "Descubra, descarregue e explore predefinições de modelo",
+	"Dismissible": "Dispensável",
+	"Display the username instead of You in the Chat": "Exibir o nome de utilizador em vez de Você na Conversa",
 	"Document": "Documento",
 	"Document": "Documento",
 	"Document Settings": "Configurações de Documento",
 	"Document Settings": "Configurações de Documento",
-	"Documentation": "",
+	"Documentation": "Documentação",
 	"Documents": "Documentos",
 	"Documents": "Documentos",
-	"does not make any external connections, and your data stays securely on your locally hosted server.": "não faz conexões externas e seus dados permanecem seguros em seu servidor hospedado localmente.",
+	"does not make any external connections, and your data stays securely on your locally hosted server.": "não faz conexões externas e os seus dados permanecem seguros no seu servidor alojado localmente.",
 	"Don't Allow": "Não Permitir",
 	"Don't Allow": "Não Permitir",
 	"Don't have an account?": "Não tem uma conta?",
 	"Don't have an account?": "Não tem uma conta?",
 	"Don't like the style": "Não gosta do estilo",
 	"Don't like the style": "Não gosta do estilo",
-	"Download": "Baixar",
+	"Download": "Descarregar",
 	"Download canceled": "Download cancelado",
 	"Download canceled": "Download cancelado",
-	"Download Database": "Baixar Banco de Dados",
-	"Drop any files here to add to the conversation": "Solte os arquivos aqui para adicionar à conversa",
+	"Download Database": "Descarregar Base de Dados",
+	"Drop any files here to add to the conversation": "Largue os ficheiros aqui para adicionar à conversa",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "por exemplo, '30s', '10m'. Unidades de tempo válidas são 's', 'm', 'h'.",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "por exemplo, '30s', '10m'. Unidades de tempo válidas são 's', 'm', 'h'.",
 	"Edit": "Editar",
 	"Edit": "Editar",
 	"Edit Doc": "Editar Documento",
 	"Edit Doc": "Editar Documento",
-	"Edit User": "Editar Usuário",
+	"Edit User": "Editar Utilizador",
 	"Email": "E-mail",
 	"Email": "E-mail",
-	"Embedding Batch Size": "",
+	"Embedding Batch Size": "Tamanho do Lote do Embedding",
 	"Embedding Model": "Modelo de Embedding",
 	"Embedding Model": "Modelo de Embedding",
 	"Embedding Model Engine": "Motor de Modelo de Embedding",
 	"Embedding Model Engine": "Motor de Modelo de Embedding",
 	"Embedding model set to \"{{embedding_model}}\"": "Modelo de Embedding definido como \"{{embedding_model}}\"",
 	"Embedding model set to \"{{embedding_model}}\"": "Modelo de Embedding definido como \"{{embedding_model}}\"",
-	"Enable Chat History": "Ativar Histórico de Bate-papo",
-	"Enable Community Sharing": "Habilite o compartilhamento da comunidade",
+	"Enable Chat History": "Ativar Histórico de Conversas",
+	"Enable Community Sharing": "Active a Partilha da Comunidade",
 	"Enable New Sign Ups": "Ativar Novas Inscrições",
 	"Enable New Sign Ups": "Ativar Novas Inscrições",
 	"Enable Web Search": "Ativar pesquisa na Web",
 	"Enable Web Search": "Ativar pesquisa na Web",
-	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Garanta que seu arquivo CSV inclua 4 colunas nesta ordem: Nome, E-mail, Senha, Função.",
-	"Enter {{role}} message here": "Digite a mensagem de {{role}} aqui",
-	"Enter a detail about yourself for your LLMs to recall": "Digite um detalhe sobre você para que seus LLMs possam lembrá-lo",
-	"Enter Brave Search API Key": "Insira a chave da API do Brave Search",
-	"Enter Chunk Overlap": "Digite a Sobreposição de Fragmento",
-	"Enter Chunk Size": "Digite o Tamanho do Fragmento",
-	"Enter Github Raw URL": "Insira o URL bruto do Github",
-	"Enter Google PSE API Key": "Insira a chave da API PSE do Google",
-	"Enter Google PSE Engine Id": "Insira o ID do mecanismo PSE do Google",
-	"Enter Image Size (e.g. 512x512)": "Digite o Tamanho da Imagem (por exemplo, 512x512)",
-	"Enter language codes": "Digite os códigos de idioma",
-	"Enter model tag (e.g. {{modelTag}})": "Digite a tag do modelo (por exemplo, {{modelTag}})",
-	"Enter Number of Steps (e.g. 50)": "Digite o Número de Etapas (por exemplo, 50)",
-	"Enter Score": "Digite a Pontuação",
-	"Enter Searxng Query URL": "Insira o URL da Consulta Searxng",
-	"Enter Serper API Key": "Insira a chave da API Serper",
-	"Enter Serpstack API Key": "Insira a chave da API Serpstack",
-	"Enter stop sequence": "Digite a sequência de parada",
-	"Enter Top K": "Digite o Top K",
-	"Enter URL (e.g. http://127.0.0.1:7860/)": "Digite a URL (por exemplo, http://127.0.0.1:7860/)",
-	"Enter URL (e.g. http://localhost:11434)": "Digite a URL (por exemplo, http://localhost:11434)",
-	"Enter Your Email": "Digite seu E-mail",
-	"Enter Your Full Name": "Digite seu Nome Completo",
-	"Enter Your Password": "Digite sua Senha",
-	"Enter Your Role": "Digite sua Função",
+	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Confirme que o seu ficheiro CSV inclui 4 colunas nesta ordem: Nome, E-mail, Senha, Função.",
+	"Enter {{role}} message here": "Escreva a mensagem de {{role}} aqui",
+	"Enter a detail about yourself for your LLMs to recall": "Escreva um detalhe sobre você para que os seus LLMs possam lembrar-se",
+	"Enter Brave Search API Key": "Escreva a chave da API do Brave Search",
+	"Enter Chunk Overlap": "Escreva a Sobreposição de Fragmento",
+	"Enter Chunk Size": "Escreva o Tamanho do Fragmento",
+	"Enter Github Raw URL": "Escreva o URL cru do Github",
+	"Enter Google PSE API Key": "Escreva a chave da API PSE do Google",
+	"Enter Google PSE Engine Id": "Escreva o ID do mecanismo PSE do Google",
+	"Enter Image Size (e.g. 512x512)": "Escreva o Tamanho da Imagem (por exemplo, 512x512)",
+	"Enter language codes": "Escreva os códigos de idioma",
+	"Enter model tag (e.g. {{modelTag}})": "Escreva a tag do modelo (por exemplo, {{modelTag}})",
+	"Enter Number of Steps (e.g. 50)": "Escreva o Número de Etapas (por exemplo, 50)",
+	"Enter Score": "Escreva a Pontuação",
+	"Enter Searxng Query URL": "Escreva o URL da Pesquisa Searxng",
+	"Enter Serper API Key": "Escreva a chave da API Serper",
+	"Enter Serply API Key": "",
+	"Enter Serpstack API Key": "Escreva a chave da API Serpstack",
+	"Enter stop sequence": "Escreva a sequência de paragem",
+	"Enter Top K": "Escreva o Top K",
+	"Enter URL (e.g. http://127.0.0.1:7860/)": "Escreva o URL (por exemplo, http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "Escreva o URL (por exemplo, http://localhost:11434)",
+	"Enter Your Email": "Escreva o seu E-mail",
+	"Enter Your Full Name": "Escreva o seu Nome Completo",
+	"Enter Your Password": "Escreva a sua Senha",
+	"Enter Your Role": "Escreva a sua Função",
 	"Error": "Erro",
 	"Error": "Erro",
 	"Experimental": "Experimental",
 	"Experimental": "Experimental",
-	"Export": "Exportação",
-	"Export All Chats (All Users)": "Exportar Todos os Bate-papos (Todos os Usuários)",
-	"Export chat (.json)": "",
-	"Export Chats": "Exportar Bate-papos",
+	"Export": "Exportar",
+	"Export All Chats (All Users)": "Exportar Todas as Conversas (Todos os Utilizadores)",
+	"Export chat (.json)": "Exportar Conversa (.json)",
+	"Export Chats": "Exportar Conversas",
 	"Export Documents Mapping": "Exportar Mapeamento de Documentos",
 	"Export Documents Mapping": "Exportar Mapeamento de Documentos",
 	"Export Models": "Modelos de Exportação",
 	"Export Models": "Modelos de Exportação",
 	"Export Prompts": "Exportar Prompts",
 	"Export Prompts": "Exportar Prompts",
-	"External Models": "",
+	"External Models": "Modelos Externos",
 	"Failed to create API Key.": "Falha ao criar a Chave da API.",
 	"Failed to create API Key.": "Falha ao criar a Chave da API.",
 	"Failed to read clipboard contents": "Falha ao ler o conteúdo da área de transferência",
 	"Failed to read clipboard contents": "Falha ao ler o conteúdo da área de transferência",
-	"Failed to update settings": "",
+	"Failed to update settings": "Falha ao atualizar as definições",
 	"February": "Fevereiro",
 	"February": "Fevereiro",
 	"Feel free to add specific details": "Sinta-se à vontade para adicionar detalhes específicos",
 	"Feel free to add specific details": "Sinta-se à vontade para adicionar detalhes específicos",
-	"File Mode": "Modo de Arquivo",
-	"File not found.": "Arquivo não encontrado.",
-	"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Impostação de impressão digital detectada: Não é possível usar iniciais como avatar. Padronizando para imagem de perfil padrão.",
+	"File Mode": "Modo de Ficheiro",
+	"File not found.": "Ficheiro não encontrado.",
+	"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Detectada falsificação da impressão digital: Não é possível usar iniciais como avatar. A usar a imagem de perfil padrão.",
 	"Fluidly stream large external response chunks": "Transmita com fluidez grandes blocos de resposta externa",
 	"Fluidly stream large external response chunks": "Transmita com fluidez grandes blocos de resposta externa",
-	"Focus chat input": "Focar entrada de bate-papo",
+	"Focus chat input": "Focar na conversa",
 	"Followed instructions perfectly": "Seguiu instruções perfeitamente",
 	"Followed instructions perfectly": "Seguiu instruções perfeitamente",
-	"Format your variables using square brackets like this:": "Formate suas variáveis usando colchetes como este:",
+	"Format your variables using square brackets like this:": "Formate as suas variáveis usando parenteses rectos como este:",
 	"Frequency Penalty": "Penalidade de Frequência",
 	"Frequency Penalty": "Penalidade de Frequência",
 	"General": "Geral",
 	"General": "Geral",
 	"General Settings": "Configurações Gerais",
 	"General Settings": "Configurações Gerais",
-	"Generate Image": "",
-	"Generating search query": "Gerar consulta de pesquisa",
+	"Generate Image": "Gerar imagem",
+	"Generating search query": "A gerar a consulta da pesquisa",
 	"Generation Info": "Informações de Geração",
 	"Generation Info": "Informações de Geração",
 	"Good Response": "Boa Resposta",
 	"Good Response": "Boa Resposta",
 	"Google PSE API Key": "Chave da API PSE do Google",
 	"Google PSE API Key": "Chave da API PSE do Google",
 	"Google PSE Engine Id": "ID do mecanismo PSE do Google",
 	"Google PSE Engine Id": "ID do mecanismo PSE do Google",
 	"h:mm a": "h:mm a",
 	"h:mm a": "h:mm a",
-	"has no conversations.": "não possui bate-papos.",
+	"has no conversations.": "não possui conversas.",
 	"Hello, {{name}}": "Olá, {{name}}",
 	"Hello, {{name}}": "Olá, {{name}}",
-	"Help": "Help",
+	"Help": "Ajuda",
 	"Hide": "Ocultar",
 	"Hide": "Ocultar",
 	"How can I help you today?": "Como posso ajudá-lo hoje?",
 	"How can I help you today?": "Como posso ajudá-lo hoje?",
 	"Hybrid Search": "Pesquisa Híbrida",
 	"Hybrid Search": "Pesquisa Híbrida",
 	"Image Generation (Experimental)": "Geração de Imagens (Experimental)",
 	"Image Generation (Experimental)": "Geração de Imagens (Experimental)",
 	"Image Generation Engine": "Mecanismo de Geração de Imagens",
 	"Image Generation Engine": "Mecanismo de Geração de Imagens",
-	"Image Settings": "Configurações de Imagem",
+	"Image Settings": "Configurações da Imagem",
 	"Images": "Imagens",
 	"Images": "Imagens",
-	"Import Chats": "Importar Bate-papos",
+	"Import Chats": "Importar Conversas",
 	"Import Documents Mapping": "Importar Mapeamento de Documentos",
 	"Import Documents Mapping": "Importar Mapeamento de Documentos",
 	"Import Models": "Importar Modelos",
 	"Import Models": "Importar Modelos",
 	"Import Prompts": "Importar Prompts",
 	"Import Prompts": "Importar Prompts",
@@ -260,7 +261,7 @@
 	"Info": "Informação",
 	"Info": "Informação",
 	"Input commands": "Comandos de entrada",
 	"Input commands": "Comandos de entrada",
 	"Install from Github URL": "Instalar a partir do URL do Github",
 	"Install from Github URL": "Instalar a partir do URL do Github",
-	"Instant Auto-Send After Voice Transcription": "",
+	"Instant Auto-Send After Voice Transcription": "Enviar automaticamente depois da transcrição da voz",
 	"Interface": "Interface",
 	"Interface": "Interface",
 	"Invalid Tag": "Etiqueta Inválida",
 	"Invalid Tag": "Etiqueta Inválida",
 	"January": "Janeiro",
 	"January": "Janeiro",
@@ -273,55 +274,55 @@
 	"JWT Token": "Token JWT",
 	"JWT Token": "Token JWT",
 	"Keep Alive": "Manter Vivo",
 	"Keep Alive": "Manter Vivo",
 	"Keyboard shortcuts": "Atalhos de teclado",
 	"Keyboard shortcuts": "Atalhos de teclado",
-	"Knowledge": "",
+	"Knowledge": "Conhecimento",
 	"Language": "Idioma",
 	"Language": "Idioma",
 	"Last Active": "Último Ativo",
 	"Last Active": "Último Ativo",
 	"Light": "Claro",
 	"Light": "Claro",
-	"Listening...": "",
+	"Listening...": "A escutar...",
 	"LLMs can make mistakes. Verify important information.": "LLMs podem cometer erros. Verifique informações importantes.",
 	"LLMs can make mistakes. Verify important information.": "LLMs podem cometer erros. Verifique informações importantes.",
-	"Local Models": "",
+	"Local Models": "Modelos Locais",
 	"LTR": "LTR",
 	"LTR": "LTR",
 	"Made by OpenWebUI Community": "Feito pela Comunidade OpenWebUI",
 	"Made by OpenWebUI Community": "Feito pela Comunidade OpenWebUI",
 	"Make sure to enclose them with": "Certifique-se de colocá-los entre",
 	"Make sure to enclose them with": "Certifique-se de colocá-los entre",
-	"Manage": "",
-	"Manage Models": "Gerenciar Modelos",
-	"Manage Ollama Models": "Gerenciar Modelos Ollama",
-	"Manage Pipelines": "Gerenciar pipelines",
+	"Manage": "Gerir",
+	"Manage Models": "Gerir Modelos",
+	"Manage Ollama Models": "Gerir Modelos Ollama",
+	"Manage Pipelines": "Gerir pipelines",
 	"March": "Março",
 	"March": "Março",
-	"Max Tokens (num_predict)": "Max Tokens (num_predict)",
-	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Máximo de 3 modelos podem ser baixados simultaneamente. Tente novamente mais tarde.",
+	"Max Tokens (num_predict)": "Máx Tokens (num_predict)",
+	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "O máximo de 3 modelos podem ser descarregados simultaneamente. Tente novamente mais tarde.",
 	"May": "Maio",
 	"May": "Maio",
 	"Memories accessible by LLMs will be shown here.": "Memórias acessíveis por LLMs serão mostradas aqui.",
 	"Memories accessible by LLMs will be shown here.": "Memórias acessíveis por LLMs serão mostradas aqui.",
 	"Memory": "Memória",
 	"Memory": "Memória",
-	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Mensagens que você enviar após criar seu link não serão compartilhadas. Os usuários com o URL poderão visualizar o bate-papo compartilhado.",
+	"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Mensagens que você enviar após criar o seu link não serão partilhadas. Os utilizadores com o URL poderão visualizar a conversa partilhada.",
 	"Minimum Score": "Mínimo de Pontuação",
 	"Minimum Score": "Mínimo de Pontuação",
 	"Mirostat": "Mirostat",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Tau": "Mirostat Tau",
 	"Mirostat Tau": "Mirostat Tau",
 	"MMMM DD, YYYY": "DD/MM/YYYY",
 	"MMMM DD, YYYY": "DD/MM/YYYY",
 	"MMMM DD, YYYY HH:mm": "DD/MM/YYYY HH:mm",
 	"MMMM DD, YYYY HH:mm": "DD/MM/YYYY HH:mm",
-	"Model '{{modelName}}' has been successfully downloaded.": "O modelo '{{modelName}}' foi baixado com sucesso.",
-	"Model '{{modelTag}}' is already in queue for downloading.": "O modelo '{{modelTag}}' já está na fila para download.",
-	"Model {{modelId}} not found": "Modelo {{modelId}} não encontrado",
+	"Model '{{modelName}}' has been successfully downloaded.": "O modelo '{{modelName}}' foi descarregado com sucesso.",
+	"Model '{{modelTag}}' is already in queue for downloading.": "O modelo '{{modelTag}}' já está na fila para descarregar.",
+	"Model {{modelId}} not found": "Modelo {{modelId}} não foi encontrado",
 	"Model {{modelName}} is not vision capable": "O modelo {{modelName}} não é capaz de visão",
 	"Model {{modelName}} is not vision capable": "O modelo {{modelName}} não é capaz de visão",
 	"Model {{name}} is now {{status}}": "Modelo {{name}} agora é {{status}}",
 	"Model {{name}} is now {{status}}": "Modelo {{name}} agora é {{status}}",
-	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Caminho do sistema de arquivos do modelo detectado. É necessário o nome curto do modelo para atualização, não é possível continuar.",
+	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Dtectado caminho do sistema de ficheiros do modelo. É necessário o nome curto do modelo para atualização, não é possível continuar.",
 	"Model ID": "ID do modelo",
 	"Model ID": "ID do modelo",
 	"Model not selected": "Modelo não selecionado",
 	"Model not selected": "Modelo não selecionado",
 	"Model Params": "Params Modelo",
 	"Model Params": "Params Modelo",
-	"Model Whitelisting": "Lista de Permissões de Modelo",
+	"Model Whitelisting": "Lista de Permissões do Modelo",
 	"Model(s) Whitelisted": "Modelo(s) na Lista de Permissões",
 	"Model(s) Whitelisted": "Modelo(s) na Lista de Permissões",
-	"Modelfile Content": "Conteúdo do Arquivo de Modelo",
+	"Modelfile Content": "Conteúdo do Ficheiro do Modelo",
 	"Models": "Modelos",
 	"Models": "Modelos",
 	"More": "Mais",
 	"More": "Mais",
 	"Name": "Nome",
 	"Name": "Nome",
-	"Name Tag": "Tag de Nome",
+	"Name Tag": "Etiqueta de Nome",
 	"Name your model": "Atribua um nome ao seu modelo",
 	"Name your model": "Atribua um nome ao seu modelo",
-	"New Chat": "Novo Bate-papo",
+	"New Chat": "Nova Conversa",
 	"New Password": "Nova Senha",
 	"New Password": "Nova Senha",
-	"No documents found": "",
-	"No results found": "Nenhum resultado encontrado",
-	"No search query generated": "Nenhuma consulta de pesquisa gerada",
+	"No documents found": "Não foram encontrados documentos",
+	"No results found": "Não foram encontrados resultados",
+	"No search query generated": "Não foi gerada nenhuma consulta de pesquisa",
 	"No source available": "Nenhuma fonte disponível",
 	"No source available": "Nenhuma fonte disponível",
 	"None": "Nenhum",
 	"None": "Nenhum",
 	"Not factually correct": "Não é correto em termos factuais",
 	"Not factually correct": "Não é correto em termos factuais",
@@ -336,18 +337,18 @@
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
 	"Ollama API": "Ollama API",
 	"Ollama API": "Ollama API",
 	"Ollama API disabled": "API do Ollama desativada",
 	"Ollama API disabled": "API do Ollama desativada",
-	"Ollama API is disabled": "",
+	"Ollama API is disabled": "A API do Ollama está desactivada",
 	"Ollama Version": "Versão do Ollama",
 	"Ollama Version": "Versão do Ollama",
 	"On": "Ligado",
 	"On": "Ligado",
-	"Only": "Somente",
-	"Only alphanumeric characters and hyphens are allowed in the command string.": "Somente caracteres alfanuméricos e hífens são permitidos na string de comando.",
-	"Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Opa! Aguente firme! Seus arquivos ainda estão no forno de processamento. Estamos cozinhando-os com perfeição. Por favor, seja paciente e avisaremos quando estiverem prontos.",
-	"Oops! Looks like the URL is invalid. Please double-check and try again.": "Opa! Parece que a URL é inválida. Verifique novamente e tente outra vez.",
-	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Opa! Você está usando um método não suportado (somente frontend). Por favor, sirva o WebUI a partir do backend.",
+	"Only": "Apenas",
+	"Only alphanumeric characters and hyphens are allowed in the command string.": "Apenas caracteres alfanuméricos e hífens são permitidos na string de comando.",
+	"Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Epá! Segura-te! Os teus ficheiros ainda estão no forno de processamento. Estamos a cozinhá-los com perfeição. Por favor, seja paciente e avisaremos quando estiverem prontos.",
+	"Oops! Looks like the URL is invalid. Please double-check and try again.": "Epá! Parece que o URL é inválido. Verifique novamente e tente outra vez.",
+	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Epá! Você está a usar um método não suportado (somente frontend). Por favor, sirva o WebUI a partir do backend.",
 	"Open": "Abrir",
 	"Open": "Abrir",
-	"Open AI": "OpenAI",
-	"Open AI (Dall-E)": "OpenAI (Dall-E)",
-	"Open new chat": "Abrir novo bate-papo",
+	"Open AI": "Open AI",
+	"Open AI (Dall-E)": "Open AI (Dall-E)",
+	"Open new chat": "Abrir nova conversa",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",
 	"OpenAI API": "API OpenAI",
 	"OpenAI API": "API OpenAI",
 	"OpenAI API Config": "Configuração da API OpenAI",
 	"OpenAI API Config": "Configuração da API OpenAI",
@@ -359,31 +360,31 @@
 	"PDF document (.pdf)": "Documento PDF (.pdf)",
 	"PDF document (.pdf)": "Documento PDF (.pdf)",
 	"PDF Extract Images (OCR)": "Extrair Imagens de PDF (OCR)",
 	"PDF Extract Images (OCR)": "Extrair Imagens de PDF (OCR)",
 	"pending": "pendente",
 	"pending": "pendente",
-	"Permission denied when accessing media devices": "",
-	"Permission denied when accessing microphone": "",
-	"Permission denied when accessing microphone: {{error}}": "Permissão negada ao acessar o microfone: {{error}}",
+	"Permission denied when accessing media devices": "A permissão foi negada ao aceder aos dispositivos de media",
+	"Permission denied when accessing microphone": "A permissão foi negada ao aceder ao microfone",
+	"Permission denied when accessing microphone: {{error}}": "A permissão foi negada ao aceder o microfone: {{error}}",
 	"Personalization": "Personalização",
 	"Personalization": "Personalização",
 	"Pipelines": "Condutas",
 	"Pipelines": "Condutas",
 	"Pipelines Valves": "Válvulas de Condutas",
 	"Pipelines Valves": "Válvulas de Condutas",
 	"Plain text (.txt)": "Texto sem formatação (.txt)",
 	"Plain text (.txt)": "Texto sem formatação (.txt)",
-	"Playground": "Parque infantil",
+	"Playground": "Recreio",
 	"Positive attitude": "Atitude Positiva",
 	"Positive attitude": "Atitude Positiva",
 	"Previous 30 days": "Últimos 30 dias",
 	"Previous 30 days": "Últimos 30 dias",
 	"Previous 7 days": "Últimos 7 dias",
 	"Previous 7 days": "Últimos 7 dias",
 	"Profile Image": "Imagem de Perfil",
 	"Profile Image": "Imagem de Perfil",
 	"Prompt": "Prompt",
 	"Prompt": "Prompt",
-	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Prompt (ex.: Dê-me um fatídico sobre o Império Romano)",
+	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Prompt (ex.: Dê-me um facto divertido sobre o Império Romano)",
 	"Prompt Content": "Conteúdo do Prompt",
 	"Prompt Content": "Conteúdo do Prompt",
 	"Prompt suggestions": "Sugestões de Prompt",
 	"Prompt suggestions": "Sugestões de Prompt",
 	"Prompts": "Prompts",
 	"Prompts": "Prompts",
-	"Pull \"{{searchValue}}\" from Ollama.com": "Extrair \"{{searchValue}}\" do Ollama.com",
-	"Pull a model from Ollama.com": "Extrair um modelo do Ollama.com",
+	"Pull \"{{searchValue}}\" from Ollama.com": "Puxar \"{{searchValue}}\" do Ollama.com",
+	"Pull a model from Ollama.com": "Puxar um modelo do Ollama.com",
 	"Query Params": "Parâmetros de Consulta",
 	"Query Params": "Parâmetros de Consulta",
 	"RAG Template": "Modelo RAG",
 	"RAG Template": "Modelo RAG",
 	"Read Aloud": "Ler em Voz Alta",
 	"Read Aloud": "Ler em Voz Alta",
 	"Record voice": "Gravar voz",
 	"Record voice": "Gravar voz",
-	"Redirecting you to OpenWebUI Community": "Redirecionando você para a Comunidade OpenWebUI",
-	"Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "",
+	"Redirecting you to OpenWebUI Community": "Redirecionando-o para a Comunidade OpenWebUI",
+	"Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Refera-se a si próprio como \"User\" (por exemplo, \"User está a aprender Espanhol\")",
 	"Refused when it shouldn't have": "Recusado quando não deveria",
 	"Refused when it shouldn't have": "Recusado quando não deveria",
 	"Regenerate": "Regenerar",
 	"Regenerate": "Regenerar",
 	"Release Notes": "Notas de Lançamento",
 	"Release Notes": "Notas de Lançamento",
@@ -391,57 +392,59 @@
 	"Remove Model": "Remover Modelo",
 	"Remove Model": "Remover Modelo",
 	"Rename": "Renomear",
 	"Rename": "Renomear",
 	"Repeat Last N": "Repetir Últimos N",
 	"Repeat Last N": "Repetir Últimos N",
-	"Request Mode": "Modo de Solicitação",
+	"Request Mode": "Modo de Pedido",
 	"Reranking Model": "Modelo de Reranking",
 	"Reranking Model": "Modelo de Reranking",
 	"Reranking model disabled": "Modelo de Reranking desativado",
 	"Reranking model disabled": "Modelo de Reranking desativado",
 	"Reranking model set to \"{{reranking_model}}\"": "Modelo de Reranking definido como \"{{reranking_model}}\"",
 	"Reranking model set to \"{{reranking_model}}\"": "Modelo de Reranking definido como \"{{reranking_model}}\"",
-	"Reset Upload Directory": "",
+	"Reset Upload Directory": "Limpar Pasta de Carregamento",
 	"Reset Vector Storage": "Redefinir Armazenamento de Vetor",
 	"Reset Vector Storage": "Redefinir Armazenamento de Vetor",
 	"Response AutoCopy to Clipboard": "Cópia Automática da Resposta para a Área de Transferência",
 	"Response AutoCopy to Clipboard": "Cópia Automática da Resposta para a Área de Transferência",
 	"Role": "Função",
 	"Role": "Função",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
 	"RTL": "RTL",
 	"RTL": "RTL",
-	"Running": "",
-	"Save": "Salvar",
-	"Save & Create": "Salvar e Criar",
-	"Save & Update": "Salvar e Atualizar",
-	"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Salvar logs de bate-papo diretamente no armazenamento do seu navegador não é mais suportado. Reserve um momento para baixar e excluir seus logs de bate-papo clicando no botão abaixo. Não se preocupe, você pode facilmente reimportar seus logs de bate-papo para o backend através de",
+	"Running": "A correr",
+	"Save": "Guardar",
+	"Save & Create": "Guardar e Criar",
+	"Save & Update": "Guardar e Atualizar",
+	"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Guardar o registo das conversas diretamente no armazenamento do seu navegador já não é suportado. Reserve um momento para descarregar e eliminar os seus registos de conversas clicando no botão abaixo. Não se preocupe, você pode facilmente reimportar os seus registos de conversas para o backend através de",
 	"Scan": "Digitalizar",
 	"Scan": "Digitalizar",
 	"Scan complete!": "Digitalização concluída!",
 	"Scan complete!": "Digitalização concluída!",
 	"Scan for documents from {{path}}": "Digitalizar documentos de {{path}}",
 	"Scan for documents from {{path}}": "Digitalizar documentos de {{path}}",
 	"Search": "Pesquisar",
 	"Search": "Pesquisar",
 	"Search a model": "Pesquisar um modelo",
 	"Search a model": "Pesquisar um modelo",
-	"Search Chats": "Pesquisar Chats",
+	"Search Chats": "Pesquisar Conversas",
 	"Search Documents": "Pesquisar Documentos",
 	"Search Documents": "Pesquisar Documentos",
 	"Search Models": "Modelos de pesquisa",
 	"Search Models": "Modelos de pesquisa",
 	"Search Prompts": "Pesquisar Prompts",
 	"Search Prompts": "Pesquisar Prompts",
-	"Search Query Generation Prompt": "",
-	"Search Query Generation Prompt Length Threshold": "",
+	"Search Query Generation Prompt": "Prompt de geração de consulta de pesquisa",
+	"Search Query Generation Prompt Length Threshold": "Limite de comprimento do prompt de geração de consulta de pesquisa",
 	"Search Result Count": "Contagem de resultados da pesquisa",
 	"Search Result Count": "Contagem de resultados da pesquisa",
 	"Searched {{count}} sites_one": "Pesquisado {{count}} sites_one",
 	"Searched {{count}} sites_one": "Pesquisado {{count}} sites_one",
 	"Searched {{count}} sites_many": "Pesquisado {{count}} sites_many",
 	"Searched {{count}} sites_many": "Pesquisado {{count}} sites_many",
 	"Searched {{count}} sites_other": "Pesquisado {{count}} sites_other",
 	"Searched {{count}} sites_other": "Pesquisado {{count}} sites_other",
-	"Searching the web for '{{searchQuery}}'": "Pesquisando na Web por '{{searchQuery}}'",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "URL de consulta Searxng",
 	"Searxng Query URL": "URL de consulta Searxng",
 	"See readme.md for instructions": "Consulte readme.md para obter instruções",
 	"See readme.md for instructions": "Consulte readme.md para obter instruções",
 	"See what's new": "Veja o que há de novo",
 	"See what's new": "Veja o que há de novo",
 	"Seed": "Semente",
 	"Seed": "Semente",
 	"Select a base model": "Selecione um modelo base",
 	"Select a base model": "Selecione um modelo base",
-	"Select a engine": "",
+	"Select a engine": "Selecione um motor",
 	"Select a mode": "Selecione um modo",
 	"Select a mode": "Selecione um modo",
 	"Select a model": "Selecione um modelo",
 	"Select a model": "Selecione um modelo",
 	"Select a pipeline": "Selecione um pipeline",
 	"Select a pipeline": "Selecione um pipeline",
 	"Select a pipeline url": "Selecione um URL de pipeline",
 	"Select a pipeline url": "Selecione um URL de pipeline",
 	"Select an Ollama instance": "Selecione uma instância Ollama",
 	"Select an Ollama instance": "Selecione uma instância Ollama",
-	"Select model": "Selecione um modelo",
-	"Select only one model to call": "",
+	"Select Documents": "",
+	"Select model": "Selecione o modelo",
+	"Select only one model to call": "Selecione apenas um modelo para a chamada",
 	"Selected model(s) do not support image inputs": "O(s) modelo(s) selecionado(s) não suporta(m) entradas de imagem",
 	"Selected model(s) do not support image inputs": "O(s) modelo(s) selecionado(s) não suporta(m) entradas de imagem",
 	"Send": "Enviar",
 	"Send": "Enviar",
 	"Send a Message": "Enviar uma Mensagem",
 	"Send a Message": "Enviar uma Mensagem",
 	"Send message": "Enviar mensagem",
 	"Send message": "Enviar mensagem",
 	"September": "Setembro",
 	"September": "Setembro",
 	"Serper API Key": "Chave API Serper",
 	"Serper API Key": "Chave API Serper",
+	"Serply API Key": "",
 	"Serpstack API Key": "Chave da API Serpstack",
 	"Serpstack API Key": "Chave da API Serpstack",
 	"Server connection verified": "Conexão com o servidor verificada",
 	"Server connection verified": "Conexão com o servidor verificada",
 	"Set as default": "Definir como padrão",
 	"Set as default": "Definir como padrão",
@@ -453,26 +456,26 @@
 	"Set Task Model": "Definir modelo de tarefa",
 	"Set Task Model": "Definir modelo de tarefa",
 	"Set Voice": "Definir Voz",
 	"Set Voice": "Definir Voz",
 	"Settings": "Configurações",
 	"Settings": "Configurações",
-	"Settings saved successfully!": "Configurações salvas com sucesso!",
-	"Settings updated successfully": "",
-	"Share": "Compartilhar",
-	"Share Chat": "Compartilhar Bate-papo",
-	"Share to OpenWebUI Community": "Compartilhar com a Comunidade OpenWebUI",
+	"Settings saved successfully!": "Configurações guardadas com sucesso!",
+	"Settings updated successfully": "Configurações atualizadas com sucesso",
+	"Share": "Partilhar",
+	"Share Chat": "Partilhar Conversa",
+	"Share to OpenWebUI Community": "Partilhar com a Comunidade OpenWebUI",
 	"short-summary": "resumo-curto",
 	"short-summary": "resumo-curto",
 	"Show": "Mostrar",
 	"Show": "Mostrar",
-	"Show Admin Details in Account Pending Overlay": "",
-	"Show shortcuts": "Mostrar",
+	"Show Admin Details in Account Pending Overlay": "Mostrar Detalhes do Administrador na sobreposição de Conta Pendente",
+	"Show shortcuts": "Mostrar atalhos",
 	"Showcased creativity": "Criatividade Exibida",
 	"Showcased creativity": "Criatividade Exibida",
 	"sidebar": "barra lateral",
 	"sidebar": "barra lateral",
 	"Sign in": "Entrar",
 	"Sign in": "Entrar",
 	"Sign Out": "Sair",
 	"Sign Out": "Sair",
 	"Sign up": "Inscrever-se",
 	"Sign up": "Inscrever-se",
-	"Signing in": "Entrando",
+	"Signing in": "A entrar",
 	"Source": "Fonte",
 	"Source": "Fonte",
 	"Speech recognition error: {{error}}": "Erro de reconhecimento de fala: {{error}}",
 	"Speech recognition error: {{error}}": "Erro de reconhecimento de fala: {{error}}",
-	"Speech-to-Text Engine": "Mecanismo de Fala para Texto",
-	"Stop Sequence": "Sequência de Parada",
-	"STT Model": "",
+	"Speech-to-Text Engine": "Motor de Fala para Texto",
+	"Stop Sequence": "Sequência de Paragem",
+	"STT Model": "Modelo STT",
 	"STT Settings": "Configurações STT",
 	"STT Settings": "Configurações STT",
 	"Submit": "Enviar",
 	"Submit": "Enviar",
 	"Subtitle (e.g. about the Roman Empire)": "Subtítulo (ex.: sobre o Império Romano)",
 	"Subtitle (e.g. about the Roman Empire)": "Subtítulo (ex.: sobre o Império Romano)",
@@ -481,69 +484,70 @@
 	"Suggested": "Sugerido",
 	"Suggested": "Sugerido",
 	"System": "Sistema",
 	"System": "Sistema",
 	"System Prompt": "Prompt do Sistema",
 	"System Prompt": "Prompt do Sistema",
-	"Tags": "Tags",
-	"Tell us more:": "Dê-nos mais:",
+	"Tags": "Etiquetas",
+	"Tell us more:": "Diga-nos mais:",
 	"Temperature": "Temperatura",
 	"Temperature": "Temperatura",
 	"Template": "Modelo",
 	"Template": "Modelo",
-	"Text Completion": "Complemento de Texto",
-	"Text-to-Speech Engine": "Mecanismo de Texto para Fala",
+	"Text Completion": "Conclusão de Texto",
+	"Text-to-Speech Engine": "Motor de Texto para Fala",
 	"Tfs Z": "Tfs Z",
 	"Tfs Z": "Tfs Z",
-	"Thanks for your feedback!": "Obrigado pelo feedback!",
-	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "O score deve ser um valor entre 0.0 (0%) e 1.0 (100%).",
+	"Thanks for your feedback!": "Obrigado pelo seu feedback!",
+	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "A pontuação deve ser um valor entre 0.0 (0%) e 1.0 (100%).",
 	"Theme": "Tema",
 	"Theme": "Tema",
-	"Thinking...": "",
-	"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Isso garante que suas conversas valiosas sejam salvas com segurança em seu banco de dados de backend. Obrigado!",
-	"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
+	"Thinking...": "A pensar...",
+	"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Isto garante que suas conversas valiosas sejam guardadas com segurança na sua base de dados de backend. Obrigado!",
+	"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Isto é um recurso experimental, pode não funcionar conforme o esperado e está sujeito a alterações a qualquer momento.",
 	"This setting does not sync across browsers or devices.": "Esta configuração não sincroniza entre navegadores ou dispositivos.",
 	"This setting does not sync across browsers or devices.": "Esta configuração não sincroniza entre navegadores ou dispositivos.",
-	"Thorough explanation": "Explicação Completa",
-	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Dica: Atualize vários slots de variáveis consecutivamente pressionando a tecla Tab na entrada de bate-papo após cada substituição.",
+	"Thorough explanation": "Explicação Minuciosa",
+	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Dica: Atualize vários slots de variáveis consecutivamente pressionando a tecla Tab na entrada da conversa após cada substituição.",
 	"Title": "Título",
 	"Title": "Título",
-	"Title (e.g. Tell me a fun fact)": "Título (ex.: Dê-me um fatídico fatídico)",
+	"Title (e.g. Tell me a fun fact)": "Título (ex.: Diz-me um facto divertido)",
 	"Title Auto-Generation": "Geração Automática de Título",
 	"Title Auto-Generation": "Geração Automática de Título",
 	"Title cannot be an empty string.": "Título não pode ser uma string vazia.",
 	"Title cannot be an empty string.": "Título não pode ser uma string vazia.",
 	"Title Generation Prompt": "Prompt de Geração de Título",
 	"Title Generation Prompt": "Prompt de Geração de Título",
 	"to": "para",
 	"to": "para",
-	"To access the available model names for downloading,": "Para acessar os nomes de modelo disponíveis para download,",
-	"To access the GGUF models available for downloading,": "Para acessar os modelos GGUF disponíveis para download,",
-	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
-	"to chat input.": "para a entrada de bate-papo.",
+	"To access the available model names for downloading,": "Para aceder aos nomes de modelo disponíveis para descarregar,",
+	"To access the GGUF models available for downloading,": "Para aceder aos modelos GGUF disponíveis para descarregar,",
+	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Para aceder ao WebUI, entre em contato com o administrador. Os administradores podem gerir o status dos utilizadores no Painel de Administração.",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
+	"to chat input.": "para a entrada da conversa.",
 	"Today": "Hoje",
 	"Today": "Hoje",
 	"Toggle settings": "Alternar configurações",
 	"Toggle settings": "Alternar configurações",
 	"Toggle sidebar": "Alternar barra lateral",
 	"Toggle sidebar": "Alternar barra lateral",
 	"Top K": "Top K",
 	"Top K": "Top K",
 	"Top P": "Top P",
 	"Top P": "Top P",
-	"Trouble accessing Ollama?": "Problemas para acessar o Ollama?",
-	"TTS Model": "",
+	"Trouble accessing Ollama?": "Problemas a aceder ao Ollama?",
+	"TTS Model": "Modelo TTS",
 	"TTS Settings": "Configurações TTS",
 	"TTS Settings": "Configurações TTS",
-	"TTS Voice": "",
+	"TTS Voice": "Voz TTS",
 	"Type": "Tipo",
 	"Type": "Tipo",
-	"Type Hugging Face Resolve (Download) URL": "Digite a URL do Hugging Face Resolve (Download)",
-	"Uh-oh! There was an issue connecting to {{provider}}.": "Opa! Houve um problema ao conectar-se a {{provider}}.",
-	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Tipo de arquivo desconhecido '{{file_type}}', mas aceitando e tratando como texto simples",
+	"Type Hugging Face Resolve (Download) URL": "Escreva o URL do Hugging Face Resolve (Descarregar)",
+	"Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh! Houve um problema ao conectar a {{provider}}.",
+	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Tipo de ficheiro desconhecido '{{file_type}}', mas aceitando e tratando como texto simples",
 	"Update and Copy Link": "Atualizar e Copiar Link",
 	"Update and Copy Link": "Atualizar e Copiar Link",
 	"Update password": "Atualizar senha",
 	"Update password": "Atualizar senha",
 	"Upload a GGUF model": "Carregar um modelo GGUF",
 	"Upload a GGUF model": "Carregar um modelo GGUF",
 	"Upload Files": "Carregar ficheiros",
 	"Upload Files": "Carregar ficheiros",
-	"Upload Pipeline": "",
+	"Upload Pipeline": "Carregar Pipeline",
 	"Upload Progress": "Progresso do Carregamento",
 	"Upload Progress": "Progresso do Carregamento",
 	"URL Mode": "Modo de URL",
 	"URL Mode": "Modo de URL",
-	"Use '#' in the prompt input to load and select your documents.": "Use '#' na entrada do prompt para carregar e selecionar seus documentos.",
+	"Use '#' in the prompt input to load and select your documents.": "Use '#' na entrada do prompt para carregar e selecionar os seus documentos.",
 	"Use Gravatar": "Usar Gravatar",
 	"Use Gravatar": "Usar Gravatar",
 	"Use Initials": "Usar Iniciais",
 	"Use Initials": "Usar Iniciais",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",
 	"use_mmap (Ollama)": "use_mmap (Ollama)",
 	"use_mmap (Ollama)": "use_mmap (Ollama)",
-	"user": "usuário",
-	"User Permissions": "Permissões do Usuário",
-	"Users": "Usuários",
+	"user": "utilizador",
+	"User Permissions": "Permissões do Utilizador",
+	"Users": "Utilizadores",
 	"Utilize": "Utilizar",
 	"Utilize": "Utilizar",
 	"Valid time units:": "Unidades de tempo válidas:",
 	"Valid time units:": "Unidades de tempo válidas:",
 	"variable": "variável",
 	"variable": "variável",
 	"variable to have them replaced with clipboard content.": "variável para que sejam substituídos pelo conteúdo da área de transferência.",
 	"variable to have them replaced with clipboard content.": "variável para que sejam substituídos pelo conteúdo da área de transferência.",
 	"Version": "Versão",
 	"Version": "Versão",
-	"Warning": "Advertência",
-	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Aviso: Se você atualizar ou alterar seu modelo de vetorização, você precisará reimportar todos os documentos.",
+	"Warning": "Aviso",
+	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Aviso: Se você atualizar ou alterar o seu modelo de vetorização, você tem de reimportar todos os documentos.",
 	"Web": "Web",
 	"Web": "Web",
-	"Web API": "",
+	"Web API": "Web API",
 	"Web Loader Settings": "Configurações do Carregador da Web",
 	"Web Loader Settings": "Configurações do Carregador da Web",
 	"Web Params": "Parâmetros da Web",
 	"Web Params": "Parâmetros da Web",
 	"Web Search": "Pesquisa na Web",
 	"Web Search": "Pesquisa na Web",
@@ -551,23 +555,23 @@
 	"Webhook URL": "URL do Webhook",
 	"Webhook URL": "URL do Webhook",
 	"WebUI Add-ons": "Complementos WebUI",
 	"WebUI Add-ons": "Complementos WebUI",
 	"WebUI Settings": "Configurações WebUI",
 	"WebUI Settings": "Configurações WebUI",
-	"WebUI will make requests to": "WebUI fará solicitações para",
+	"WebUI will make requests to": "WebUI fará pedidos a",
 	"What’s New in": "O que há de novo em",
 	"What’s New in": "O que há de novo em",
-	"When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Quando o histórico está desativado, novos bate-papos neste navegador não aparecerão em seu histórico em nenhum dos seus dispositivos.",
-	"Whisper (Local)": "",
-	"Widescreen Mode": "",
+	"When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Quando o histórico está desativado, novas conversas neste navegador não aparecerão em seu histórico em nenhum dos seus dispositivos.",
+	"Whisper (Local)": "Whisper (Local)",
+	"Widescreen Mode": "Modo Widescreen",
 	"Workspace": "Espaço de Trabalho",
 	"Workspace": "Espaço de Trabalho",
-	"Write a prompt suggestion (e.g. Who are you?)": "Escreva uma sugestão de prompt (por exemplo, Quem é você?)",
+	"Write a prompt suggestion (e.g. Who are you?)": "Escreva uma sugestão de prompt (por exemplo, Quem és tu?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Escreva um resumo em 50 palavras que resuma [tópico ou palavra-chave].",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Escreva um resumo em 50 palavras que resuma [tópico ou palavra-chave].",
 	"Yesterday": "Ontem",
 	"Yesterday": "Ontem",
 	"You": "Você",
 	"You": "Você",
-	"You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "",
+	"You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "Você pode personalizar as suas interações com LLMs adicionando memórias através do botão ‘Gerir’ abaixo, tornando-as mais úteis e personalizadas para você.",
 	"You cannot clone a base model": "Não é possível clonar um modelo base",
 	"You cannot clone a base model": "Não é possível clonar um modelo base",
-	"You have no archived conversations.": "Você não tem bate-papos arquivados.",
-	"You have shared this chat": "Você compartilhou este bate-papo",
+	"You have no archived conversations.": "Você não tem conversas arquivadas.",
+	"You have shared this chat": "Você partilhou esta conversa",
 	"You're a helpful assistant.": "Você é um assistente útil.",
 	"You're a helpful assistant.": "Você é um assistente útil.",
-	"You're now logged in.": "Você está conectado agora.",
-	"Your account status is currently pending activation.": "",
+	"You're now logged in.": "Você agora está conectado.",
+	"Your account status is currently pending activation.": "O status da sua conta está atualmente com a ativação pendente.",
 	"Youtube": "Youtube",
 	"Youtube": "Youtube",
 	"Youtube Loader Settings": "Configurações do Carregador do Youtube"
 	"Youtube Loader Settings": "Configurações do Carregador do Youtube"
 }
 }

+ 5 - 1
src/lib/i18n/locales/ru-RU/translation.json

@@ -201,6 +201,7 @@
 	"Enter Score": "Введите оценку",
 	"Enter Score": "Введите оценку",
 	"Enter Searxng Query URL": "Введите URL-адрес запроса Searxng",
 	"Enter Searxng Query URL": "Введите URL-адрес запроса Searxng",
 	"Enter Serper API Key": "Введите ключ API Serper",
 	"Enter Serper API Key": "Введите ключ API Serper",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Введите ключ API Serpstack",
 	"Enter Serpstack API Key": "Введите ключ API Serpstack",
 	"Enter stop sequence": "Введите последовательность остановки",
 	"Enter stop sequence": "Введите последовательность остановки",
 	"Enter Top K": "Введите Top K",
 	"Enter Top K": "Введите Top K",
@@ -423,7 +424,7 @@
 	"Searched {{count}} sites_few": "Поиск {{count}} sites_few",
 	"Searched {{count}} sites_few": "Поиск {{count}} sites_few",
 	"Searched {{count}} sites_many": "Поиск {{count}} sites_many",
 	"Searched {{count}} sites_many": "Поиск {{count}} sites_many",
 	"Searched {{count}} sites_other": "Поиск {{count}} sites_other",
 	"Searched {{count}} sites_other": "Поиск {{count}} sites_other",
-	"Searching the web for '{{searchQuery}}'": "Поиск в Интернете по запросу '{{searchQuery}}'",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "URL-адрес запроса Searxng",
 	"Searxng Query URL": "URL-адрес запроса Searxng",
 	"See readme.md for instructions": "Смотрите readme.md для инструкций",
 	"See readme.md for instructions": "Смотрите readme.md для инструкций",
 	"See what's new": "Посмотреть, что нового",
 	"See what's new": "Посмотреть, что нового",
@@ -435,6 +436,7 @@
 	"Select a pipeline": "Выбор конвейера",
 	"Select a pipeline": "Выбор конвейера",
 	"Select a pipeline url": "Выберите URL-адрес конвейера",
 	"Select a pipeline url": "Выберите URL-адрес конвейера",
 	"Select an Ollama instance": "Выберите экземпляр Ollama",
 	"Select an Ollama instance": "Выберите экземпляр Ollama",
+	"Select Documents": "",
 	"Select model": "Выберите модель",
 	"Select model": "Выберите модель",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "Выбранные модели не поддерживают ввод изображений",
 	"Selected model(s) do not support image inputs": "Выбранные модели не поддерживают ввод изображений",
@@ -443,6 +445,7 @@
 	"Send message": "Отправить сообщение",
 	"Send message": "Отправить сообщение",
 	"September": "Сентябрь",
 	"September": "Сентябрь",
 	"Serper API Key": "Ключ API Serper",
 	"Serper API Key": "Ключ API Serper",
+	"Serply API Key": "",
 	"Serpstack API Key": "Ключ API Serpstack",
 	"Serpstack API Key": "Ключ API Serpstack",
 	"Server connection verified": "Соединение с сервером проверено",
 	"Server connection verified": "Соединение с сервером проверено",
 	"Set as default": "Установить по умолчанию",
 	"Set as default": "Установить по умолчанию",
@@ -507,6 +510,7 @@
 	"To access the available model names for downloading,": "Чтобы получить доступ к доступным для загрузки именам моделей,",
 	"To access the available model names for downloading,": "Чтобы получить доступ к доступным для загрузки именам моделей,",
 	"To access the GGUF models available for downloading,": "Чтобы получить доступ к моделям GGUF, доступным для загрузки,",
 	"To access the GGUF models available for downloading,": "Чтобы получить доступ к моделям GGUF, доступным для загрузки,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "в чате.",
 	"to chat input.": "в чате.",
 	"Today": "Сегодня",
 	"Today": "Сегодня",
 	"Toggle settings": "Переключить настройки",
 	"Toggle settings": "Переключить настройки",

+ 5 - 1
src/lib/i18n/locales/sr-RS/translation.json

@@ -201,6 +201,7 @@
 	"Enter Score": "Унесите резултат",
 	"Enter Score": "Унесите резултат",
 	"Enter Searxng Query URL": "Унесите УРЛ адресу Сеарxнг упита",
 	"Enter Searxng Query URL": "Унесите УРЛ адресу Сеарxнг упита",
 	"Enter Serper API Key": "Унесите Серпер АПИ кључ",
 	"Enter Serper API Key": "Унесите Серпер АПИ кључ",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Унесите Серпстацк АПИ кључ",
 	"Enter Serpstack API Key": "Унесите Серпстацк АПИ кључ",
 	"Enter stop sequence": "Унесите секвенцу заустављања",
 	"Enter stop sequence": "Унесите секвенцу заустављања",
 	"Enter Top K": "Унесите Топ К",
 	"Enter Top K": "Унесите Топ К",
@@ -422,7 +423,7 @@
 	"Searched {{count}} sites_one": "Претражио {{цоунт}} ситес_оне",
 	"Searched {{count}} sites_one": "Претражио {{цоунт}} ситес_оне",
 	"Searched {{count}} sites_few": "Претражио {{цоунт}} ситес_феw",
 	"Searched {{count}} sites_few": "Претражио {{цоунт}} ситес_феw",
 	"Searched {{count}} sites_other": "Претражио {{цоунт}} ситес_отхер",
 	"Searched {{count}} sites_other": "Претражио {{цоунт}} ситес_отхер",
-	"Searching the web for '{{searchQuery}}'": "Претраживање Веба у потрази за \"{{сеарцхQуерy}}\"",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "УРЛ адреса Сеарxнг упита",
 	"Searxng Query URL": "УРЛ адреса Сеарxнг упита",
 	"See readme.md for instructions": "Погледај readme.md за упутства",
 	"See readme.md for instructions": "Погледај readme.md за упутства",
 	"See what's new": "Погледај шта је ново",
 	"See what's new": "Погледај шта је ново",
@@ -434,6 +435,7 @@
 	"Select a pipeline": "Избор цевовода",
 	"Select a pipeline": "Избор цевовода",
 	"Select a pipeline url": "Избор урл адресе цевовода",
 	"Select a pipeline url": "Избор урл адресе цевовода",
 	"Select an Ollama instance": "Изабери Ollama инстанцу",
 	"Select an Ollama instance": "Изабери Ollama инстанцу",
+	"Select Documents": "",
 	"Select model": "Изабери модел",
 	"Select model": "Изабери модел",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "Изабрани модели не подржавају уносе слика",
 	"Selected model(s) do not support image inputs": "Изабрани модели не подржавају уносе слика",
@@ -442,6 +444,7 @@
 	"Send message": "Пошаљи поруку",
 	"Send message": "Пошаљи поруку",
 	"September": "Септембар",
 	"September": "Септембар",
 	"Serper API Key": "Серпер АПИ кључ",
 	"Serper API Key": "Серпер АПИ кључ",
+	"Serply API Key": "",
 	"Serpstack API Key": "Серпстацк АПИ кључ",
 	"Serpstack API Key": "Серпстацк АПИ кључ",
 	"Server connection verified": "Веза са сервером потврђена",
 	"Server connection verified": "Веза са сервером потврђена",
 	"Set as default": "Подеси као подразумевано",
 	"Set as default": "Подеси као подразумевано",
@@ -506,6 +509,7 @@
 	"To access the available model names for downloading,": "Да бисте приступили доступним именима модела за преузимање,",
 	"To access the available model names for downloading,": "Да бисте приступили доступним именима модела за преузимање,",
 	"To access the GGUF models available for downloading,": "Да бисте приступили GGUF моделима доступним за преузимање,",
 	"To access the GGUF models available for downloading,": "Да бисте приступили GGUF моделима доступним за преузимање,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "у унос ћаскања.",
 	"to chat input.": "у унос ћаскања.",
 	"Today": "Данас",
 	"Today": "Данас",
 	"Toggle settings": "Пребаци подешавања",
 	"Toggle settings": "Пребаци подешавања",

+ 5 - 1
src/lib/i18n/locales/sv-SE/translation.json

@@ -201,6 +201,7 @@
 	"Enter Score": "Ange poäng",
 	"Enter Score": "Ange poäng",
 	"Enter Searxng Query URL": "Ange Searxng Query URL",
 	"Enter Searxng Query URL": "Ange Searxng Query URL",
 	"Enter Serper API Key": "Ange Serper API-nyckel",
 	"Enter Serper API Key": "Ange Serper API-nyckel",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Ange Serpstack API-nyckel",
 	"Enter Serpstack API Key": "Ange Serpstack API-nyckel",
 	"Enter stop sequence": "Ange stoppsekvens",
 	"Enter stop sequence": "Ange stoppsekvens",
 	"Enter Top K": "Ange Top K",
 	"Enter Top K": "Ange Top K",
@@ -421,7 +422,7 @@
 	"Search Result Count": "Antal sökresultat",
 	"Search Result Count": "Antal sökresultat",
 	"Searched {{count}} sites_one": "Sökte på {{count}} sites_one",
 	"Searched {{count}} sites_one": "Sökte på {{count}} sites_one",
 	"Searched {{count}} sites_other": "Sökte på {{count}} sites_other",
 	"Searched {{count}} sites_other": "Sökte på {{count}} sites_other",
-	"Searching the web for '{{searchQuery}}'": "Söka på webben efter '{{searchQuery}}'",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "Searxng Query URL",
 	"Searxng Query URL": "Searxng Query URL",
 	"See readme.md for instructions": "Se readme.md för instruktioner",
 	"See readme.md for instructions": "Se readme.md för instruktioner",
 	"See what's new": "Se vad som är nytt",
 	"See what's new": "Se vad som är nytt",
@@ -433,6 +434,7 @@
 	"Select a pipeline": "Välj en pipeline",
 	"Select a pipeline": "Välj en pipeline",
 	"Select a pipeline url": "Välj en pipeline-URL",
 	"Select a pipeline url": "Välj en pipeline-URL",
 	"Select an Ollama instance": "Välj en Ollama-instans",
 	"Select an Ollama instance": "Välj en Ollama-instans",
+	"Select Documents": "",
 	"Select model": "Välj en modell",
 	"Select model": "Välj en modell",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "Valda modeller stöder inte bildinmatningar",
 	"Selected model(s) do not support image inputs": "Valda modeller stöder inte bildinmatningar",
@@ -441,6 +443,7 @@
 	"Send message": "Skicka meddelande",
 	"Send message": "Skicka meddelande",
 	"September": "september",
 	"September": "september",
 	"Serper API Key": "Serper API-nyckel",
 	"Serper API Key": "Serper API-nyckel",
+	"Serply API Key": "",
 	"Serpstack API Key": "Serpstack API-nyckel",
 	"Serpstack API Key": "Serpstack API-nyckel",
 	"Server connection verified": "Serveranslutning verifierad",
 	"Server connection verified": "Serveranslutning verifierad",
 	"Set as default": "Ange som standard",
 	"Set as default": "Ange som standard",
@@ -505,6 +508,7 @@
 	"To access the available model names for downloading,": "För att komma åt de tillgängliga modellnamnen för nedladdning,",
 	"To access the available model names for downloading,": "För att komma åt de tillgängliga modellnamnen för nedladdning,",
 	"To access the GGUF models available for downloading,": "För att komma åt de GGUF-modeller som finns tillgängliga för nedladdning,",
 	"To access the GGUF models available for downloading,": "För att komma åt de GGUF-modeller som finns tillgängliga för nedladdning,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "till chattinmatning.",
 	"to chat input.": "till chattinmatning.",
 	"Today": "Idag",
 	"Today": "Idag",
 	"Toggle settings": "Växla inställningar",
 	"Toggle settings": "Växla inställningar",

+ 5 - 1
src/lib/i18n/locales/tk-TW/translation.json

@@ -201,6 +201,7 @@
 	"Enter Score": "",
 	"Enter Score": "",
 	"Enter Searxng Query URL": "",
 	"Enter Searxng Query URL": "",
 	"Enter Serper API Key": "",
 	"Enter Serper API Key": "",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "",
 	"Enter Serpstack API Key": "",
 	"Enter stop sequence": "",
 	"Enter stop sequence": "",
 	"Enter Top K": "",
 	"Enter Top K": "",
@@ -421,7 +422,7 @@
 	"Search Result Count": "",
 	"Search Result Count": "",
 	"Searched {{count}} sites_one": "",
 	"Searched {{count}} sites_one": "",
 	"Searched {{count}} sites_other": "",
 	"Searched {{count}} sites_other": "",
-	"Searching the web for '{{searchQuery}}'": "",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "",
 	"Searxng Query URL": "",
 	"See readme.md for instructions": "",
 	"See readme.md for instructions": "",
 	"See what's new": "",
 	"See what's new": "",
@@ -433,6 +434,7 @@
 	"Select a pipeline": "",
 	"Select a pipeline": "",
 	"Select a pipeline url": "",
 	"Select a pipeline url": "",
 	"Select an Ollama instance": "",
 	"Select an Ollama instance": "",
+	"Select Documents": "",
 	"Select model": "",
 	"Select model": "",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "",
 	"Selected model(s) do not support image inputs": "",
@@ -441,6 +443,7 @@
 	"Send message": "",
 	"Send message": "",
 	"September": "",
 	"September": "",
 	"Serper API Key": "",
 	"Serper API Key": "",
+	"Serply API Key": "",
 	"Serpstack API Key": "",
 	"Serpstack API Key": "",
 	"Server connection verified": "",
 	"Server connection verified": "",
 	"Set as default": "",
 	"Set as default": "",
@@ -505,6 +508,7 @@
 	"To access the available model names for downloading,": "",
 	"To access the available model names for downloading,": "",
 	"To access the GGUF models available for downloading,": "",
 	"To access the GGUF models available for downloading,": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "",
 	"to chat input.": "",
 	"Today": "",
 	"Today": "",
 	"Toggle settings": "",
 	"Toggle settings": "",

+ 5 - 1
src/lib/i18n/locales/tr-TR/translation.json

@@ -201,6 +201,7 @@
 	"Enter Score": "Skoru Girin",
 	"Enter Score": "Skoru Girin",
 	"Enter Searxng Query URL": "Searxng Sorgu URL'sini girin",
 	"Enter Searxng Query URL": "Searxng Sorgu URL'sini girin",
 	"Enter Serper API Key": "Serper API Anahtarını Girin",
 	"Enter Serper API Key": "Serper API Anahtarını Girin",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Serpstack API Anahtarını Girin",
 	"Enter Serpstack API Key": "Serpstack API Anahtarını Girin",
 	"Enter stop sequence": "Durdurma dizisini girin",
 	"Enter stop sequence": "Durdurma dizisini girin",
 	"Enter Top K": "Top K'yı girin",
 	"Enter Top K": "Top K'yı girin",
@@ -421,7 +422,7 @@
 	"Search Result Count": "Arama Sonucu Sayısı",
 	"Search Result Count": "Arama Sonucu Sayısı",
 	"Searched {{count}} sites_one": "Arandı {{count}} sites_one",
 	"Searched {{count}} sites_one": "Arandı {{count}} sites_one",
 	"Searched {{count}} sites_other": "Arandı {{count}} sites_other",
 	"Searched {{count}} sites_other": "Arandı {{count}} sites_other",
-	"Searching the web for '{{searchQuery}}'": "Web'de '{{searchQuery}}' aranıyor",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "Searxng Sorgu URL'si",
 	"Searxng Query URL": "Searxng Sorgu URL'si",
 	"See readme.md for instructions": "Yönergeler için readme.md dosyasına bakın",
 	"See readme.md for instructions": "Yönergeler için readme.md dosyasına bakın",
 	"See what's new": "Yeniliklere göz atın",
 	"See what's new": "Yeniliklere göz atın",
@@ -433,6 +434,7 @@
 	"Select a pipeline": "Bir pipeline seç",
 	"Select a pipeline": "Bir pipeline seç",
 	"Select a pipeline url": "Bir pipeline URL'si seç",
 	"Select a pipeline url": "Bir pipeline URL'si seç",
 	"Select an Ollama instance": "Bir Ollama örneği seçin",
 	"Select an Ollama instance": "Bir Ollama örneği seçin",
+	"Select Documents": "",
 	"Select model": "Model seç",
 	"Select model": "Model seç",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "Seçilen model(ler) görüntü girişlerini desteklemiyor",
 	"Selected model(s) do not support image inputs": "Seçilen model(ler) görüntü girişlerini desteklemiyor",
@@ -441,6 +443,7 @@
 	"Send message": "Mesaj gönder",
 	"Send message": "Mesaj gönder",
 	"September": "Eylül",
 	"September": "Eylül",
 	"Serper API Key": "Serper API Anahtarı",
 	"Serper API Key": "Serper API Anahtarı",
+	"Serply API Key": "",
 	"Serpstack API Key": "Serpstack API Anahtarı",
 	"Serpstack API Key": "Serpstack API Anahtarı",
 	"Server connection verified": "Sunucu bağlantısı doğrulandı",
 	"Server connection verified": "Sunucu bağlantısı doğrulandı",
 	"Set as default": "Varsayılan olarak ayarla",
 	"Set as default": "Varsayılan olarak ayarla",
@@ -505,6 +508,7 @@
 	"To access the available model names for downloading,": "İndirilebilir mevcut model adlarına erişmek için,",
 	"To access the available model names for downloading,": "İndirilebilir mevcut model adlarına erişmek için,",
 	"To access the GGUF models available for downloading,": "İndirilebilir mevcut GGUF modellerine erişmek için,",
 	"To access the GGUF models available for downloading,": "İndirilebilir mevcut GGUF modellerine erişmek için,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "sohbet girişine.",
 	"to chat input.": "sohbet girişine.",
 	"Today": "Bugün",
 	"Today": "Bugün",
 	"Toggle settings": "Ayarları Aç/Kapat",
 	"Toggle settings": "Ayarları Aç/Kapat",

+ 5 - 1
src/lib/i18n/locales/uk-UA/translation.json

@@ -201,6 +201,7 @@
 	"Enter Score": "Введіть бал",
 	"Enter Score": "Введіть бал",
 	"Enter Searxng Query URL": "Введіть URL-адресу запиту Searxng",
 	"Enter Searxng Query URL": "Введіть URL-адресу запиту Searxng",
 	"Enter Serper API Key": "Введіть ключ API Serper",
 	"Enter Serper API Key": "Введіть ключ API Serper",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Введіть ключ API Serpstack",
 	"Enter Serpstack API Key": "Введіть ключ API Serpstack",
 	"Enter stop sequence": "Введіть символ зупинки",
 	"Enter stop sequence": "Введіть символ зупинки",
 	"Enter Top K": "Введіть Top K",
 	"Enter Top K": "Введіть Top K",
@@ -423,7 +424,7 @@
 	"Searched {{count}} sites_few": "Переглянуто {{count}} сайти",
 	"Searched {{count}} sites_few": "Переглянуто {{count}} сайти",
 	"Searched {{count}} sites_many": "Переглянуто {{count}} сайтів",
 	"Searched {{count}} sites_many": "Переглянуто {{count}} сайтів",
 	"Searched {{count}} sites_other": "Переглянуто {{count}} сайтів",
 	"Searched {{count}} sites_other": "Переглянуто {{count}} сайтів",
-	"Searching the web for '{{searchQuery}}'": "Пошук в Інтернеті за запитом '{{searchQuery}}'",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "URL-адреса запиту Searxng",
 	"Searxng Query URL": "URL-адреса запиту Searxng",
 	"See readme.md for instructions": "Див. readme.md для інструкцій",
 	"See readme.md for instructions": "Див. readme.md для інструкцій",
 	"See what's new": "Подивіться, що нового",
 	"See what's new": "Подивіться, що нового",
@@ -435,6 +436,7 @@
 	"Select a pipeline": "Виберіть pipeline",
 	"Select a pipeline": "Виберіть pipeline",
 	"Select a pipeline url": "Виберіть адресу pipeline",
 	"Select a pipeline url": "Виберіть адресу pipeline",
 	"Select an Ollama instance": "Виберіть екземпляр Ollama",
 	"Select an Ollama instance": "Виберіть екземпляр Ollama",
+	"Select Documents": "",
 	"Select model": "Вибрати модель",
 	"Select model": "Вибрати модель",
 	"Select only one model to call": "Виберіть лише одну модель для виклику",
 	"Select only one model to call": "Виберіть лише одну модель для виклику",
 	"Selected model(s) do not support image inputs": "Вибрані модель(і) не підтримують вхідні зображення",
 	"Selected model(s) do not support image inputs": "Вибрані модель(і) не підтримують вхідні зображення",
@@ -443,6 +445,7 @@
 	"Send message": "Надіслати повідомлення",
 	"Send message": "Надіслати повідомлення",
 	"September": "Вересень",
 	"September": "Вересень",
 	"Serper API Key": "Ключ API Serper",
 	"Serper API Key": "Ключ API Serper",
+	"Serply API Key": "",
 	"Serpstack API Key": "Ключ API Serpstack",
 	"Serpstack API Key": "Ключ API Serpstack",
 	"Server connection verified": "З'єднання з сервером підтверджено",
 	"Server connection verified": "З'єднання з сервером підтверджено",
 	"Set as default": "Встановити за замовчуванням",
 	"Set as default": "Встановити за замовчуванням",
@@ -507,6 +510,7 @@
 	"To access the available model names for downloading,": "Щоб отримати доступ до назв доступних для завантаження моделей,",
 	"To access the available model names for downloading,": "Щоб отримати доступ до назв доступних для завантаження моделей,",
 	"To access the GGUF models available for downloading,": "Щоб отримати доступ до моделей GGUF, які можна завантажити,,",
 	"To access the GGUF models available for downloading,": "Щоб отримати доступ до моделей GGUF, які можна завантажити,,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Щоб отримати доступ до веб-інтерфейсу, зверніться до адміністратора. Адміністратори можуть керувати статусами користувачів з Панелі адміністратора.",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Щоб отримати доступ до веб-інтерфейсу, зверніться до адміністратора. Адміністратори можуть керувати статусами користувачів з Панелі адміністратора.",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "в чаті.",
 	"to chat input.": "в чаті.",
 	"Today": "Сьогодні",
 	"Today": "Сьогодні",
 	"Toggle settings": "Переключити налаштування",
 	"Toggle settings": "Переключити налаштування",

+ 5 - 1
src/lib/i18n/locales/vi-VN/translation.json

@@ -201,6 +201,7 @@
 	"Enter Score": "Nhập Score",
 	"Enter Score": "Nhập Score",
 	"Enter Searxng Query URL": "Nhập Query URL cho Searxng",
 	"Enter Searxng Query URL": "Nhập Query URL cho Searxng",
 	"Enter Serper API Key": "Nhập Serper API Key",
 	"Enter Serper API Key": "Nhập Serper API Key",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "Nhập Serpstack API Key",
 	"Enter Serpstack API Key": "Nhập Serpstack API Key",
 	"Enter stop sequence": "Nhập stop sequence",
 	"Enter stop sequence": "Nhập stop sequence",
 	"Enter Top K": "Nhập Top K",
 	"Enter Top K": "Nhập Top K",
@@ -420,7 +421,7 @@
 	"Search Query Generation Prompt Length Threshold": "",
 	"Search Query Generation Prompt Length Threshold": "",
 	"Search Result Count": "Số kết quả tìm kiếm",
 	"Search Result Count": "Số kết quả tìm kiếm",
 	"Searched {{count}} sites_other": "Đã tìm {{count}} sites_other",
 	"Searched {{count}} sites_other": "Đã tìm {{count}} sites_other",
-	"Searching the web for '{{searchQuery}}'": "Tìm kiếm web cho '{{searchQuery}}'",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "URL truy vấn Searxng",
 	"Searxng Query URL": "URL truy vấn Searxng",
 	"See readme.md for instructions": "Xem readme.md để biết hướng dẫn",
 	"See readme.md for instructions": "Xem readme.md để biết hướng dẫn",
 	"See what's new": "Xem những cập nhật mới",
 	"See what's new": "Xem những cập nhật mới",
@@ -432,6 +433,7 @@
 	"Select a pipeline": "Chọn một quy trình",
 	"Select a pipeline": "Chọn một quy trình",
 	"Select a pipeline url": "Chọn url quy trình",
 	"Select a pipeline url": "Chọn url quy trình",
 	"Select an Ollama instance": "Chọn một thực thể Ollama",
 	"Select an Ollama instance": "Chọn một thực thể Ollama",
+	"Select Documents": "",
 	"Select model": "Chọn model",
 	"Select model": "Chọn model",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "Model được lựa chọn không hỗ trợ đầu vào là hình ảnh",
 	"Selected model(s) do not support image inputs": "Model được lựa chọn không hỗ trợ đầu vào là hình ảnh",
@@ -440,6 +442,7 @@
 	"Send message": "Gửi yêu cầu",
 	"Send message": "Gửi yêu cầu",
 	"September": "Tháng 9",
 	"September": "Tháng 9",
 	"Serper API Key": "Khóa API Serper",
 	"Serper API Key": "Khóa API Serper",
+	"Serply API Key": "",
 	"Serpstack API Key": "Khóa API Serpstack",
 	"Serpstack API Key": "Khóa API Serpstack",
 	"Server connection verified": "Kết nối máy chủ đã được xác minh",
 	"Server connection verified": "Kết nối máy chủ đã được xác minh",
 	"Set as default": "Đặt làm mặc định",
 	"Set as default": "Đặt làm mặc định",
@@ -504,6 +507,7 @@
 	"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,",
 	"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,",
 	"To access the GGUF models available for downloading,": "Để truy cập các mô hình GGUF có sẵn để tải xuống,",
 	"To access the GGUF models available for downloading,": "Để truy cập các mô hình GGUF có sẵn để tải xuống,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "đến đầu vào trò chuyện.",
 	"to chat input.": "đến đầu vào trò chuyện.",
 	"Today": "Hôm nay",
 	"Today": "Hôm nay",
 	"Toggle settings": "Bật/tắt cài đặt",
 	"Toggle settings": "Bật/tắt cài đặt",

+ 10 - 6
src/lib/i18n/locales/zh-CN/translation.json

@@ -74,7 +74,7 @@
 	"Bypass SSL verification for Websites": "绕过网站的 SSL 验证",
 	"Bypass SSL verification for Websites": "绕过网站的 SSL 验证",
 	"Call": "呼叫",
 	"Call": "呼叫",
 	"Call feature is not supported when using Web STT engine": "使用 Web 语音转文字引擎时不支持呼叫功能。",
 	"Call feature is not supported when using Web STT engine": "使用 Web 语音转文字引擎时不支持呼叫功能。",
-	"Camera": "",
+	"Camera": "摄像头",
 	"Cancel": "取消",
 	"Cancel": "取消",
 	"Capabilities": "能力",
 	"Capabilities": "能力",
 	"Change Password": "更改密码",
 	"Change Password": "更改密码",
@@ -201,6 +201,7 @@
 	"Enter Score": "输入评分",
 	"Enter Score": "输入评分",
 	"Enter Searxng Query URL": "输入 Searxng 查询地址",
 	"Enter Searxng Query URL": "输入 Searxng 查询地址",
 	"Enter Serper API Key": "输入 Serper API 密钥",
 	"Enter Serper API Key": "输入 Serper API 密钥",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "输入 Serpstack API 密钥",
 	"Enter Serpstack API Key": "输入 Serpstack API 密钥",
 	"Enter stop sequence": "输入停止序列 (Stop Sequence)",
 	"Enter stop sequence": "输入停止序列 (Stop Sequence)",
 	"Enter Top K": "输入 Top K",
 	"Enter Top K": "输入 Top K",
@@ -273,7 +274,7 @@
 	"JWT Token": "JWT 令牌",
 	"JWT Token": "JWT 令牌",
 	"Keep Alive": "保持活动",
 	"Keep Alive": "保持活动",
 	"Keyboard shortcuts": "键盘快捷键",
 	"Keyboard shortcuts": "键盘快捷键",
-	"Knowledge": "",
+	"Knowledge": "知识库",
 	"Language": "语言",
 	"Language": "语言",
 	"Last Active": "最后在线时间",
 	"Last Active": "最后在线时间",
 	"Light": "浅色",
 	"Light": "浅色",
@@ -319,7 +320,7 @@
 	"Name your model": "为您的模型命名",
 	"Name your model": "为您的模型命名",
 	"New Chat": "新对话",
 	"New Chat": "新对话",
 	"New Password": "新密码",
 	"New Password": "新密码",
-	"No documents found": "",
+	"No documents found": "未找到文档",
 	"No results found": "未找到结果",
 	"No results found": "未找到结果",
 	"No search query generated": "未生成搜索查询",
 	"No search query generated": "未生成搜索查询",
 	"No source available": "没有可用来源",
 	"No source available": "没有可用来源",
@@ -416,11 +417,11 @@
 	"Search Documents": "搜索文档",
 	"Search Documents": "搜索文档",
 	"Search Models": "搜索模型",
 	"Search Models": "搜索模型",
 	"Search Prompts": "搜索提示词",
 	"Search Prompts": "搜索提示词",
-	"Search Query Generation Prompt": "",
-	"Search Query Generation Prompt Length Threshold": "",
+	"Search Query Generation Prompt": "搜索查询生成提示",
+	"Search Query Generation Prompt Length Threshold": "搜索查询生成提示长度阈值",
 	"Search Result Count": "搜索结果数量",
 	"Search Result Count": "搜索结果数量",
 	"Searched {{count}} sites_other": "检索到 {{count}} 个网站",
 	"Searched {{count}} sites_other": "检索到 {{count}} 个网站",
-	"Searching the web for '{{searchQuery}}'": "在网络中搜索 '{{searchQuery}}' ",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "Searxng 查询 URL",
 	"Searxng Query URL": "Searxng 查询 URL",
 	"See readme.md for instructions": "查看 readme.md 以获取说明",
 	"See readme.md for instructions": "查看 readme.md 以获取说明",
 	"See what's new": "查阅最新更新内容",
 	"See what's new": "查阅最新更新内容",
@@ -432,6 +433,7 @@
 	"Select a pipeline": "选择一个管道",
 	"Select a pipeline": "选择一个管道",
 	"Select a pipeline url": "选择一个管道 URL",
 	"Select a pipeline url": "选择一个管道 URL",
 	"Select an Ollama instance": "选择一个 Ollama 实例",
 	"Select an Ollama instance": "选择一个 Ollama 实例",
+	"Select Documents": "选择文档",
 	"Select model": "选择模型",
 	"Select model": "选择模型",
 	"Select only one model to call": "请仅选择一个模型来呼叫",
 	"Select only one model to call": "请仅选择一个模型来呼叫",
 	"Selected model(s) do not support image inputs": "已选择的模型不支持发送图像",
 	"Selected model(s) do not support image inputs": "已选择的模型不支持发送图像",
@@ -440,6 +442,7 @@
 	"Send message": "发送消息",
 	"Send message": "发送消息",
 	"September": "九月",
 	"September": "九月",
 	"Serper API Key": "Serper API 密钥",
 	"Serper API Key": "Serper API 密钥",
+	"Serply API Key": "",
 	"Serpstack API Key": "Serpstack API 密钥",
 	"Serpstack API Key": "Serpstack API 密钥",
 	"Server connection verified": "已验证服务器连接",
 	"Server connection verified": "已验证服务器连接",
 	"Set as default": "设为默认",
 	"Set as default": "设为默认",
@@ -504,6 +507,7 @@
 	"To access the available model names for downloading,": "要访问可下载的模型名称,",
 	"To access the available model names for downloading,": "要访问可下载的模型名称,",
 	"To access the GGUF models available for downloading,": "要访问可下载的 GGUF 模型,",
 	"To access the GGUF models available for downloading,": "要访问可下载的 GGUF 模型,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "请联系管理员以访问。管理员可以在后台管理面板中管理用户状态。",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "请联系管理员以访问。管理员可以在后台管理面板中管理用户状态。",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "要在此处添加文档,请先将它们上传到工作空间中的“文档”内。",
 	"to chat input.": "到对话输入。",
 	"to chat input.": "到对话输入。",
 	"Today": "今天",
 	"Today": "今天",
 	"Toggle settings": "切换设置",
 	"Toggle settings": "切换设置",

+ 5 - 1
src/lib/i18n/locales/zh-TW/translation.json

@@ -201,6 +201,7 @@
 	"Enter Score": "輸入分數",
 	"Enter Score": "輸入分數",
 	"Enter Searxng Query URL": "輸入 Searxng 查詢 URL",
 	"Enter Searxng Query URL": "輸入 Searxng 查詢 URL",
 	"Enter Serper API Key": "輸入 Serper API Key",
 	"Enter Serper API Key": "輸入 Serper API Key",
+	"Enter Serply API Key": "",
 	"Enter Serpstack API Key": "輸入 Serpstack API Key",
 	"Enter Serpstack API Key": "輸入 Serpstack API Key",
 	"Enter stop sequence": "輸入停止序列",
 	"Enter stop sequence": "輸入停止序列",
 	"Enter Top K": "輸入 Top K",
 	"Enter Top K": "輸入 Top K",
@@ -420,7 +421,7 @@
 	"Search Query Generation Prompt Length Threshold": "",
 	"Search Query Generation Prompt Length Threshold": "",
 	"Search Result Count": "搜尋結果數量",
 	"Search Result Count": "搜尋結果數量",
 	"Searched {{count}} sites_other": "掃描 {{count}} 個網站_其他",
 	"Searched {{count}} sites_other": "掃描 {{count}} 個網站_其他",
-	"Searching the web for '{{searchQuery}}'": "搜尋網站 '{{searchQuery}}'",
+	"Searching \"{{searchQuery}}\"": "",
 	"Searxng Query URL": "Searxng 查詢 URL",
 	"Searxng Query URL": "Searxng 查詢 URL",
 	"See readme.md for instructions": "查看 readme.md 獲取指南",
 	"See readme.md for instructions": "查看 readme.md 獲取指南",
 	"See what's new": "查看最新內容",
 	"See what's new": "查看最新內容",
@@ -432,6 +433,7 @@
 	"Select a pipeline": "選擇管道",
 	"Select a pipeline": "選擇管道",
 	"Select a pipeline url": "選擇管道 URL",
 	"Select a pipeline url": "選擇管道 URL",
 	"Select an Ollama instance": "選擇 Ollama 實例",
 	"Select an Ollama instance": "選擇 Ollama 實例",
+	"Select Documents": "",
 	"Select model": "選擇模型",
 	"Select model": "選擇模型",
 	"Select only one model to call": "",
 	"Select only one model to call": "",
 	"Selected model(s) do not support image inputs": "已選擇模型不支持圖像輸入",
 	"Selected model(s) do not support image inputs": "已選擇模型不支持圖像輸入",
@@ -440,6 +442,7 @@
 	"Send message": "傳送訊息",
 	"Send message": "傳送訊息",
 	"September": "九月",
 	"September": "九月",
 	"Serper API Key": "Serper API Key",
 	"Serper API Key": "Serper API Key",
+	"Serply API Key": "",
 	"Serpstack API Key": "Serpstack API Key",
 	"Serpstack API Key": "Serpstack API Key",
 	"Server connection verified": "已驗證伺服器連線",
 	"Server connection verified": "已驗證伺服器連線",
 	"Set as default": "設為預設",
 	"Set as default": "設為預設",
@@ -504,6 +507,7 @@
 	"To access the available model names for downloading,": "若想查看可供下載的模型名稱,",
 	"To access the available model names for downloading,": "若想查看可供下載的模型名稱,",
 	"To access the GGUF models available for downloading,": "若想查看可供下載的 GGUF 模型名稱,",
 	"To access the GGUF models available for downloading,": "若想查看可供下載的 GGUF 模型名稱,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
+	"To add documents here, upload them to the \"Documents\" workspace first.": "",
 	"to chat input.": "到聊天輸入框來啟動此命令。",
 	"to chat input.": "到聊天輸入框來啟動此命令。",
 	"Today": "今天",
 	"Today": "今天",
 	"Toggle settings": "切換設定",
 	"Toggle settings": "切換設定",

+ 1 - 0
src/routes/(app)/workspace/models/create/+page.svelte

@@ -445,6 +445,7 @@
 				{#if showAdvanced}
 				{#if showAdvanced}
 					<div class="my-2">
 					<div class="my-2">
 						<AdvancedParams
 						<AdvancedParams
+							admin={true}
 							bind:params
 							bind:params
 							on:change={(e) => {
 							on:change={(e) => {
 								info.params = { ...info.params, ...params };
 								info.params = { ...info.params, ...params };

+ 1 - 0
src/routes/(app)/workspace/models/edit/+page.svelte

@@ -408,6 +408,7 @@
 					{#if showAdvanced}
 					{#if showAdvanced}
 						<div class="my-2">
 						<div class="my-2">
 							<AdvancedParams
 							<AdvancedParams
+								admin={true}
 								bind:params
 								bind:params
 								on:change={(e) => {
 								on:change={(e) => {
 									info.params = { ...info.params, ...params };
 									info.params = { ...info.params, ...params };