瀏覽代碼

Merge pull request #1965 from open-webui/dev

0.1.124
Timothy Jaeryang Baek 11 月之前
父節點
當前提交
b8d7fdf16e
共有 100 個文件被更改,包括 4859 次插入1528 次删除
  1. 10 9
      .github/dependabot.yml
  2. 1 0
      .github/pull_request_template.md
  3. 10 1
      .github/workflows/integration-test.yml
  4. 22 0
      CHANGELOG.md
  5. 1 1
      README.md
  6. 12 0
      backend/apps/audio/main.py
  7. 4 0
      backend/apps/litellm/main.py
  8. 85 8
      backend/apps/ollama/main.py
  9. 76 12
      backend/apps/rag/main.py
  10. 27 22
      backend/apps/rag/utils.py
  11. 16 1
      backend/apps/web/routers/auths.py
  12. 74 64
      backend/apps/web/routers/chats.py
  13. 38 19
      backend/config.py
  14. 3 0
      backend/constants.py
  15. 57 4
      backend/main.py
  16. 2 4
      backend/requirements.txt
  17. 1 1
      backend/start.sh
  18. 1 1
      backend/start_windows.bat
  19. 4 3
      backend/utils/misc.py
  20. 0 1
      kubernetes/helm/.helmignore
  21. 0 21
      kubernetes/helm/Chart.yaml
  22. 4 0
      kubernetes/helm/README.md
  23. 0 51
      kubernetes/helm/templates/_helpers.tpl
  24. 0 23
      kubernetes/helm/templates/ollama-service.yaml
  25. 0 98
      kubernetes/helm/templates/ollama-statefulset.yaml
  26. 0 62
      kubernetes/helm/templates/webui-deployment.yaml
  27. 0 33
      kubernetes/helm/templates/webui-ingress.yaml
  28. 0 27
      kubernetes/helm/templates/webui-pvc.yaml
  29. 0 29
      kubernetes/helm/templates/webui-service.yaml
  30. 0 27
      kubernetes/helm/values-minikube.yaml
  31. 0 75
      kubernetes/helm/values.yaml
  32. 2 2
      package-lock.json
  33. 1 1
      package.json
  34. 9 0
      src/app.css
  35. 6 0
      src/app.html
  36. 5 2
      src/lib/apis/audio/index.ts
  37. 19 6
      src/lib/apis/chats/index.ts
  38. 6 2
      src/lib/apis/ollama/index.ts
  39. 7 4
      src/lib/apis/openai/index.ts
  40. 9 2
      src/lib/apis/rag/index.ts
  41. 11 0
      src/lib/apis/streaming/index.ts
  42. 2 4
      src/lib/components/ChangelogModal.svelte
  43. 1 1
      src/lib/components/admin/AddUserModal.svelte
  44. 1 1
      src/lib/components/chat/MessageInput/Documents.svelte
  45. 5 3
      src/lib/components/chat/MessageInput/Suggestions.svelte
  46. 77 0
      src/lib/components/chat/Messages/CitationsModal.svelte
  47. 1 1
      src/lib/components/chat/Messages/RateComment.svelte
  48. 200 156
      src/lib/components/chat/Messages/ResponseMessage.svelte
  49. 1 1
      src/lib/components/chat/Messages/Skeleton.svelte
  50. 1 1
      src/lib/components/chat/ModelSelector.svelte
  51. 4 4
      src/lib/components/chat/ModelSelector/Selector.svelte
  52. 2 2
      src/lib/components/chat/Settings/Account.svelte
  53. 37 2
      src/lib/components/chat/Settings/Audio.svelte
  54. 1 1
      src/lib/components/chat/Settings/Connections.svelte
  55. 2 2
      src/lib/components/chat/Settings/Models.svelte
  56. 10 6
      src/lib/components/chat/ShareChatModal.svelte
  57. 52 0
      src/lib/components/chat/ShortcutsModal.svelte
  58. 21 3
      src/lib/components/chat/Tags.svelte
  59. 26 1
      src/lib/components/common/ImagePreview.svelte
  60. 1 1
      src/lib/components/common/Tags/TagInput.svelte
  61. 126 0
      src/lib/components/documents/Settings/ChunkParams.svelte
  62. 209 393
      src/lib/components/documents/Settings/General.svelte
  63. 119 0
      src/lib/components/documents/Settings/QueryParams.svelte
  64. 102 0
      src/lib/components/documents/Settings/WebParams.svelte
  65. 102 8
      src/lib/components/documents/SettingsModal.svelte
  66. 55 23
      src/lib/components/layout/Sidebar.svelte
  67. 3 1
      src/lib/components/layout/Sidebar/ArchivedChatsModal.svelte
  68. 10 4
      src/lib/components/layout/Sidebar/ChatMenu.svelte
  69. 495 0
      src/lib/i18n/locales/ar-BH/translation.json
  70. 57 5
      src/lib/i18n/locales/bg-BG/translation.json
  71. 57 5
      src/lib/i18n/locales/bn-BD/translation.json
  72. 57 5
      src/lib/i18n/locales/ca-ES/translation.json
  73. 82 30
      src/lib/i18n/locales/de-DE/translation.json
  74. 57 5
      src/lib/i18n/locales/dg-DG/translation.json
  75. 57 5
      src/lib/i18n/locales/en-GB/translation.json
  76. 57 5
      src/lib/i18n/locales/en-US/translation.json
  77. 57 5
      src/lib/i18n/locales/es-ES/translation.json
  78. 57 5
      src/lib/i18n/locales/fa-IR/translation.json
  79. 495 0
      src/lib/i18n/locales/fi-FI/translation.json
  80. 57 5
      src/lib/i18n/locales/fr-CA/translation.json
  81. 57 5
      src/lib/i18n/locales/fr-FR/translation.json
  82. 495 0
      src/lib/i18n/locales/hi-IN/translation.json
  83. 57 5
      src/lib/i18n/locales/it-IT/translation.json
  84. 57 5
      src/lib/i18n/locales/ja-JP/translation.json
  85. 57 5
      src/lib/i18n/locales/ka-GE/translation.json
  86. 57 5
      src/lib/i18n/locales/ko-KR/translation.json
  87. 17 5
      src/lib/i18n/locales/languages.json
  88. 57 5
      src/lib/i18n/locales/nl-NL/translation.json
  89. 57 5
      src/lib/i18n/locales/pl-PL/translation.json
  90. 57 5
      src/lib/i18n/locales/pt-BR/translation.json
  91. 57 5
      src/lib/i18n/locales/pt-PT/translation.json
  92. 57 5
      src/lib/i18n/locales/ru-RU/translation.json
  93. 57 5
      src/lib/i18n/locales/sv-SE/translation.json
  94. 134 82
      src/lib/i18n/locales/tr-TR/translation.json
  95. 57 5
      src/lib/i18n/locales/uk-UA/translation.json
  96. 57 5
      src/lib/i18n/locales/vi-VN/translation.json
  97. 91 39
      src/lib/i18n/locales/zh-CN/translation.json
  98. 62 10
      src/lib/i18n/locales/zh-TW/translation.json
  99. 1 0
      src/lib/stores/index.ts
  100. 39 17
      src/lib/utils/index.ts

+ 10 - 9
.github/dependabot.yml

@@ -1,11 +1,12 @@
 version: 2
 updates:
-- package-ecosystem: pip
-  directory: "/backend"
-  schedule:
-    interval: daily
-    time: "13:00"
-  groups:
-    python-packages:
-      patterns:
-        - "*"
+  - package-ecosystem: pip
+    directory: '/backend'
+    schedule:
+      interval: daily
+      time: '13:00'
+  - package-ecosystem: 'github-actions'
+    directory: '/'
+    schedule:
+      # Check for updates to GitHub Actions every week
+      interval: 'weekly'

+ 1 - 0
.github/pull_request_template.md

@@ -1,5 +1,6 @@
 ## Pull Request Checklist
 
+- [ ] **Target branch:** Pull requests should target the `dev` branch.
 - [ ] **Description:** Briefly describe the changes in this pull request.
 - [ ] **Changelog:** Ensure a changelog entry following the format of [Keep a Changelog](https://keepachangelog.com/) is added at the bottom of the PR description.
 - [ ] **Documentation:** Have you updated relevant documentation [Open WebUI Docs](https://github.com/open-webui/docs), or other documentation sources?

+ 10 - 1
.github/workflows/integration-test.yml

@@ -20,7 +20,16 @@ jobs:
 
       - name: Build and run Compose Stack
         run: |
-          docker compose up --detach --build
+          docker compose --file docker-compose.yaml --file docker-compose.api.yaml up --detach --build
+          
+      - name: Wait for Ollama to be up
+        timeout-minutes: 5
+        run: |
+          until curl --output /dev/null --silent --fail http://localhost:11434; do
+            printf '.'
+            sleep 1
+          done
+          echo "Service is up!"
 
       - name: Preload Ollama model
         run: |

+ 22 - 0
CHANGELOG.md

@@ -5,6 +5,28 @@ All notable changes to this project will be documented in this file.
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
+## [0.1.124] - 2024-05-08
+
+### Added
+
+- **🖼️ Improved Chat Sidebar**: Now conveniently displays time ranges and organizes chats by today, yesterday, and more.
+- **📜 Citations in RAG Feature**: Easily track the context fed to the LLM with added citations in the RAG feature.
+- **🔒 Auth Disable Option**: Introducing the ability to disable authentication. Set 'WEBUI_AUTH' to False to disable authentication. Note: Only applicable for fresh installations without existing users.
+- **📹 Enhanced YouTube RAG Pipeline**: Now supports non-English videos for an enriched experience.
+- **🔊 Specify OpenAI TTS Models**: Customize your TTS experience by specifying OpenAI TTS models.
+- **🔧 Additional Environment Variables**: Discover more environment variables in our comprehensive documentation at Open WebUI Documentation (https://docs.openwebui.com).
+- **🌐 Language Support**: Arabic, Finnish, and Hindi added; Improved support for German, Vietnamese, and Chinese.
+
+### Fixed
+
+- **🛠️ Model Selector Styling**: Addressed styling issues for improved user experience.
+- **⚠️ Warning Messages**: Resolved backend warning messages.
+
+### Changed
+
+- **📝 Title Generation**: Limited output to 50 tokens.
+- **📦 Helm Charts**: Removed Helm charts, now available in a separate repository (https://github.com/open-webui/helm-charts).
+
 ## [0.1.123] - 2024-05-02
 
 ### Added

+ 1 - 1
README.md

@@ -152,7 +152,7 @@ We offer various installation alternatives, including non-Docker methods, Docker
 
 ### Troubleshooting
 
-Encountering connection issues? Our [Open WebUI Documentation](https://docs.openwebui.com/getting-started/troubleshooting/) has got you covered. For further assistance and to join our vibrant community, visit the [Open WebUI Discord](https://discord.gg/5rJgQTnV4s).
+Encountering connection issues? Our [Open WebUI Documentation](https://docs.openwebui.com/troubleshooting/) has got you covered. For further assistance and to join our vibrant community, visit the [Open WebUI Discord](https://discord.gg/5rJgQTnV4s).
 
 ### Keeping Your Docker Installation Up-to-Date
 

+ 12 - 0
backend/apps/audio/main.py

@@ -43,6 +43,8 @@ from config import (
     DEVICE_TYPE,
     AUDIO_OPENAI_API_BASE_URL,
     AUDIO_OPENAI_API_KEY,
+    AUDIO_OPENAI_API_MODEL,
+    AUDIO_OPENAI_API_VOICE,
 )
 
 log = logging.getLogger(__name__)
@@ -60,6 +62,8 @@ app.add_middleware(
 
 app.state.OPENAI_API_BASE_URL = AUDIO_OPENAI_API_BASE_URL
 app.state.OPENAI_API_KEY = AUDIO_OPENAI_API_KEY
+app.state.OPENAI_API_MODEL = AUDIO_OPENAI_API_MODEL
+app.state.OPENAI_API_VOICE = AUDIO_OPENAI_API_VOICE
 
 # setting device type for whisper model
 whisper_device_type = DEVICE_TYPE if DEVICE_TYPE and DEVICE_TYPE == "cuda" else "cpu"
@@ -72,6 +76,8 @@ SPEECH_CACHE_DIR.mkdir(parents=True, exist_ok=True)
 class OpenAIConfigUpdateForm(BaseModel):
     url: str
     key: str
+    model: str
+    speaker: str
 
 
 @app.get("/config")
@@ -79,6 +85,8 @@ async def get_openai_config(user=Depends(get_admin_user)):
     return {
         "OPENAI_API_BASE_URL": app.state.OPENAI_API_BASE_URL,
         "OPENAI_API_KEY": app.state.OPENAI_API_KEY,
+        "OPENAI_API_MODEL": app.state.OPENAI_API_MODEL,
+        "OPENAI_API_VOICE": app.state.OPENAI_API_VOICE,
     }
 
 
@@ -91,11 +99,15 @@ async def update_openai_config(
 
     app.state.OPENAI_API_BASE_URL = form_data.url
     app.state.OPENAI_API_KEY = form_data.key
+    app.state.OPENAI_API_MODEL = form_data.model
+    app.state.OPENAI_API_VOICE = form_data.speaker
 
     return {
         "status": True,
         "OPENAI_API_BASE_URL": app.state.OPENAI_API_BASE_URL,
         "OPENAI_API_KEY": app.state.OPENAI_API_KEY,
+        "OPENAI_API_MODEL": app.state.OPENAI_API_MODEL,
+        "OPENAI_API_VOICE": app.state.OPENAI_API_VOICE,
     }
 
 

+ 4 - 0
backend/apps/litellm/main.py

@@ -36,6 +36,10 @@ from config import (
     LITELLM_PROXY_HOST,
 )
 
+import warnings
+
+warnings.simplefilter("ignore")
+
 from litellm.utils import get_llm_provider
 
 import asyncio

+ 85 - 8
backend/apps/ollama/main.py

@@ -25,13 +25,19 @@ import uuid
 import aiohttp
 import asyncio
 import logging
+import time
 from urllib.parse import urlparse
 from typing import Optional, List, Union
 
 
 from apps.web.models.users import Users
 from constants import ERROR_MESSAGES
-from utils.utils import decode_token, get_current_user, get_admin_user
+from utils.utils import (
+    decode_token,
+    get_current_user,
+    get_verified_user,
+    get_admin_user,
+)
 
 
 from config import (
@@ -164,7 +170,7 @@ async def get_all_models():
 @app.get("/api/tags")
 @app.get("/api/tags/{url_idx}")
 async def get_ollama_tags(
-    url_idx: Optional[int] = None, user=Depends(get_current_user)
+    url_idx: Optional[int] = None, user=Depends(get_verified_user)
 ):
     if url_idx == None:
         models = await get_all_models()
@@ -563,7 +569,7 @@ async def delete_model(
 
 
 @app.post("/api/show")
-async def show_model_info(form_data: ModelNameForm, user=Depends(get_current_user)):
+async def show_model_info(form_data: ModelNameForm, user=Depends(get_verified_user)):
     if form_data.name not in app.state.MODELS:
         raise HTTPException(
             status_code=400,
@@ -612,7 +618,7 @@ class GenerateEmbeddingsForm(BaseModel):
 async def generate_embeddings(
     form_data: GenerateEmbeddingsForm,
     url_idx: Optional[int] = None,
-    user=Depends(get_current_user),
+    user=Depends(get_verified_user),
 ):
     if url_idx == None:
         model = form_data.model
@@ -730,7 +736,7 @@ class GenerateCompletionForm(BaseModel):
 async def generate_completion(
     form_data: GenerateCompletionForm,
     url_idx: Optional[int] = None,
-    user=Depends(get_current_user),
+    user=Depends(get_verified_user),
 ):
 
     if url_idx == None:
@@ -833,7 +839,7 @@ class GenerateChatCompletionForm(BaseModel):
 async def generate_chat_completion(
     form_data: GenerateChatCompletionForm,
     url_idx: Optional[int] = None,
-    user=Depends(get_current_user),
+    user=Depends(get_verified_user),
 ):
 
     if url_idx == None:
@@ -942,7 +948,7 @@ class OpenAIChatCompletionForm(BaseModel):
 async def generate_openai_chat_completion(
     form_data: OpenAIChatCompletionForm,
     url_idx: Optional[int] = None,
-    user=Depends(get_current_user),
+    user=Depends(get_verified_user),
 ):
 
     if url_idx == None:
@@ -1026,6 +1032,75 @@ async def generate_openai_chat_completion(
         )
 
 
+@app.get("/v1/models")
+@app.get("/v1/models/{url_idx}")
+async def get_openai_models(
+    url_idx: Optional[int] = None,
+    user=Depends(get_verified_user),
+):
+    if url_idx == None:
+        models = await get_all_models()
+
+        if app.state.ENABLE_MODEL_FILTER:
+            if user.role == "user":
+                models["models"] = list(
+                    filter(
+                        lambda model: model["name"] in app.state.MODEL_FILTER_LIST,
+                        models["models"],
+                    )
+                )
+
+        return {
+            "data": [
+                {
+                    "id": model["model"],
+                    "object": "model",
+                    "created": int(time.time()),
+                    "owned_by": "openai",
+                }
+                for model in models["models"]
+            ],
+            "object": "list",
+        }
+
+    else:
+        url = app.state.OLLAMA_BASE_URLS[url_idx]
+        try:
+            r = requests.request(method="GET", url=f"{url}/api/tags")
+            r.raise_for_status()
+
+            models = r.json()
+
+            return {
+                "data": [
+                    {
+                        "id": model["model"],
+                        "object": "model",
+                        "created": int(time.time()),
+                        "owned_by": "openai",
+                    }
+                    for model in models["models"]
+                ],
+                "object": "list",
+            }
+
+        except Exception as e:
+            log.exception(e)
+            error_detail = "Open WebUI: Server Connection Error"
+            if r is not None:
+                try:
+                    res = r.json()
+                    if "error" in res:
+                        error_detail = f"Ollama: {res['error']}"
+                except:
+                    error_detail = f"Ollama: {e}"
+
+            raise HTTPException(
+                status_code=r.status_code if r else 500,
+                detail=error_detail,
+            )
+
+
 class UrlForm(BaseModel):
     url: str
 
@@ -1241,7 +1316,9 @@ def upload_model(file: UploadFile = File(...), url_idx: Optional[int] = None):
 
 
 @app.api_route("/{path:path}", methods=["GET", "POST", "PUT", "DELETE"])
-async def deprecated_proxy(path: str, request: Request, user=Depends(get_current_user)):
+async def deprecated_proxy(
+    path: str, request: Request, user=Depends(get_verified_user)
+):
     url = app.state.OLLAMA_BASE_URLS[0]
     target_url = f"{url}/{path}"
 

+ 76 - 12
backend/apps/rag/main.py

@@ -79,6 +79,7 @@ from config import (
     RAG_EMBEDDING_MODEL_AUTO_UPDATE,
     RAG_EMBEDDING_MODEL_TRUST_REMOTE_CODE,
     ENABLE_RAG_HYBRID_SEARCH,
+    ENABLE_RAG_WEB_LOADER_SSL_VERIFICATION,
     RAG_RERANKING_MODEL,
     PDF_EXTRACT_IMAGES,
     RAG_RERANKING_MODEL_AUTO_UPDATE,
@@ -90,7 +91,8 @@ from config import (
     CHUNK_SIZE,
     CHUNK_OVERLAP,
     RAG_TEMPLATE,
-    ENABLE_LOCAL_WEB_FETCH,
+    ENABLE_RAG_LOCAL_WEB_FETCH,
+    YOUTUBE_LOADER_LANGUAGE,
 )
 
 from constants import ERROR_MESSAGES
@@ -104,6 +106,9 @@ app.state.TOP_K = RAG_TOP_K
 app.state.RELEVANCE_THRESHOLD = RAG_RELEVANCE_THRESHOLD
 
 app.state.ENABLE_RAG_HYBRID_SEARCH = ENABLE_RAG_HYBRID_SEARCH
+app.state.ENABLE_RAG_WEB_LOADER_SSL_VERIFICATION = (
+    ENABLE_RAG_WEB_LOADER_SSL_VERIFICATION
+)
 
 app.state.CHUNK_SIZE = CHUNK_SIZE
 app.state.CHUNK_OVERLAP = CHUNK_OVERLAP
@@ -113,12 +118,17 @@ app.state.RAG_EMBEDDING_MODEL = RAG_EMBEDDING_MODEL
 app.state.RAG_RERANKING_MODEL = RAG_RERANKING_MODEL
 app.state.RAG_TEMPLATE = RAG_TEMPLATE
 
+
 app.state.OPENAI_API_BASE_URL = RAG_OPENAI_API_BASE_URL
 app.state.OPENAI_API_KEY = RAG_OPENAI_API_KEY
 
 app.state.PDF_EXTRACT_IMAGES = PDF_EXTRACT_IMAGES
 
 
+app.state.YOUTUBE_LOADER_LANGUAGE = YOUTUBE_LOADER_LANGUAGE
+app.state.YOUTUBE_LOADER_TRANSLATION = None
+
+
 def update_embedding_model(
     embedding_model: str,
     update_model: bool = False,
@@ -308,6 +318,11 @@ async def get_rag_config(user=Depends(get_admin_user)):
             "chunk_size": app.state.CHUNK_SIZE,
             "chunk_overlap": app.state.CHUNK_OVERLAP,
         },
+        "web_loader_ssl_verification": app.state.ENABLE_RAG_WEB_LOADER_SSL_VERIFICATION,
+        "youtube": {
+            "language": app.state.YOUTUBE_LOADER_LANGUAGE,
+            "translation": app.state.YOUTUBE_LOADER_TRANSLATION,
+        },
     }
 
 
@@ -316,16 +331,53 @@ class ChunkParamUpdateForm(BaseModel):
     chunk_overlap: int
 
 
+class YoutubeLoaderConfig(BaseModel):
+    language: List[str]
+    translation: Optional[str] = None
+
+
 class ConfigUpdateForm(BaseModel):
-    pdf_extract_images: bool
-    chunk: ChunkParamUpdateForm
+    pdf_extract_images: Optional[bool] = None
+    chunk: Optional[ChunkParamUpdateForm] = None
+    web_loader_ssl_verification: Optional[bool] = None
+    youtube: Optional[YoutubeLoaderConfig] = None
 
 
 @app.post("/config/update")
 async def update_rag_config(form_data: ConfigUpdateForm, user=Depends(get_admin_user)):
-    app.state.PDF_EXTRACT_IMAGES = form_data.pdf_extract_images
-    app.state.CHUNK_SIZE = form_data.chunk.chunk_size
-    app.state.CHUNK_OVERLAP = form_data.chunk.chunk_overlap
+    app.state.PDF_EXTRACT_IMAGES = (
+        form_data.pdf_extract_images
+        if form_data.pdf_extract_images != None
+        else app.state.PDF_EXTRACT_IMAGES
+    )
+
+    app.state.CHUNK_SIZE = (
+        form_data.chunk.chunk_size if form_data.chunk != None else app.state.CHUNK_SIZE
+    )
+
+    app.state.CHUNK_OVERLAP = (
+        form_data.chunk.chunk_overlap
+        if form_data.chunk != None
+        else app.state.CHUNK_OVERLAP
+    )
+
+    app.state.ENABLE_RAG_WEB_LOADER_SSL_VERIFICATION = (
+        form_data.web_loader_ssl_verification
+        if form_data.web_loader_ssl_verification != None
+        else app.state.ENABLE_RAG_WEB_LOADER_SSL_VERIFICATION
+    )
+
+    app.state.YOUTUBE_LOADER_LANGUAGE = (
+        form_data.youtube.language
+        if form_data.youtube != None
+        else app.state.YOUTUBE_LOADER_LANGUAGE
+    )
+
+    app.state.YOUTUBE_LOADER_TRANSLATION = (
+        form_data.youtube.translation
+        if form_data.youtube != None
+        else app.state.YOUTUBE_LOADER_TRANSLATION
+    )
 
     return {
         "status": True,
@@ -334,6 +386,11 @@ async def update_rag_config(form_data: ConfigUpdateForm, user=Depends(get_admin_
             "chunk_size": app.state.CHUNK_SIZE,
             "chunk_overlap": app.state.CHUNK_OVERLAP,
         },
+        "web_loader_ssl_verification": app.state.ENABLE_RAG_WEB_LOADER_SSL_VERIFICATION,
+        "youtube": {
+            "language": app.state.YOUTUBE_LOADER_LANGUAGE,
+            "translation": app.state.YOUTUBE_LOADER_TRANSLATION,
+        },
     }
 
 
@@ -460,7 +517,12 @@ def query_collection_handler(
 @app.post("/youtube")
 def store_youtube_video(form_data: UrlForm, user=Depends(get_current_user)):
     try:
-        loader = YoutubeLoader.from_youtube_url(form_data.url, add_video_info=False)
+        loader = YoutubeLoader.from_youtube_url(
+            form_data.url,
+            add_video_info=True,
+            language=app.state.YOUTUBE_LOADER_LANGUAGE,
+            translation=app.state.YOUTUBE_LOADER_TRANSLATION,
+        )
         data = loader.load()
 
         collection_name = form_data.collection_name
@@ -485,7 +547,9 @@ def store_youtube_video(form_data: UrlForm, user=Depends(get_current_user)):
 def store_web(form_data: UrlForm, user=Depends(get_current_user)):
     # "https://www.gutenberg.org/files/1727/1727-h/1727-h.htm"
     try:
-        loader = get_web_loader(form_data.url)
+        loader = get_web_loader(
+            form_data.url, verify_ssl=app.state.ENABLE_RAG_WEB_LOADER_SSL_VERIFICATION
+        )
         data = loader.load()
 
         collection_name = form_data.collection_name
@@ -506,11 +570,11 @@ def store_web(form_data: UrlForm, user=Depends(get_current_user)):
         )
 
 
-def get_web_loader(url: str):
+def get_web_loader(url: str, verify_ssl: bool = True):
     # Check if the URL is valid
     if isinstance(validators.url(url), validators.ValidationError):
         raise ValueError(ERROR_MESSAGES.INVALID_URL)
-    if not ENABLE_LOCAL_WEB_FETCH:
+    if not ENABLE_RAG_LOCAL_WEB_FETCH:
         # Local web fetch is disabled, filter out any URLs that resolve to private IP addresses
         parsed_url = urllib.parse.urlparse(url)
         # Get IPv4 and IPv6 addresses
@@ -523,7 +587,7 @@ def get_web_loader(url: str):
         for ip in ipv6_addresses:
             if validators.ipv6(ip, private=True):
                 raise ValueError(ERROR_MESSAGES.INVALID_URL)
-    return WebBaseLoader(url)
+    return WebBaseLoader(url, verify_ssl=verify_ssl)
 
 
 def resolve_hostname(hostname):
@@ -594,7 +658,7 @@ def store_docs_in_vector_db(docs, collection_name, overwrite: bool = False) -> b
 
         for batch in create_batches(
             api=CHROMA_CLIENT,
-            ids=[str(uuid.uuid1()) for _ in texts],
+            ids=[str(uuid.uuid4()) for _ in texts],
             metadatas=metadatas,
             embeddings=embeddings,
             documents=texts,

+ 27 - 22
backend/apps/rag/utils.py

@@ -271,14 +271,14 @@ def rag_messages(
     for doc in docs:
         context = None
 
-        collection = doc.get("collection_name")
-        if collection:
-            collection = [collection]
-        else:
-            collection = doc.get("collection_names", [])
+        collection_names = (
+            doc["collection_names"]
+            if doc["type"] == "collection"
+            else [doc["collection_name"]]
+        )
 
-        collection = set(collection).difference(extracted_collections)
-        if not collection:
+        collection_names = set(collection_names).difference(extracted_collections)
+        if not collection_names:
             log.debug(f"skipping {doc} as it has already been extracted")
             continue
 
@@ -288,11 +288,7 @@ def rag_messages(
             else:
                 if hybrid_search:
                     context = query_collection_with_hybrid_search(
-                        collection_names=(
-                            doc["collection_names"]
-                            if doc["type"] == "collection"
-                            else [doc["collection_name"]]
-                        ),
+                        collection_names=collection_names,
                         query=query,
                         embedding_function=embedding_function,
                         k=k,
@@ -301,11 +297,7 @@ def rag_messages(
                     )
                 else:
                     context = query_collection(
-                        collection_names=(
-                            doc["collection_names"]
-                            if doc["type"] == "collection"
-                            else [doc["collection_name"]]
-                        ),
+                        collection_names=collection_names,
                         query=query,
                         embedding_function=embedding_function,
                         k=k,
@@ -315,18 +307,31 @@ def rag_messages(
             context = None
 
         if context:
-            relevant_contexts.append(context)
+            relevant_contexts.append({**context, "source": doc})
 
-        extracted_collections.extend(collection)
+        extracted_collections.extend(collection_names)
 
     context_string = ""
+
+    citations = []
     for context in relevant_contexts:
         try:
             if "documents" in context:
-                items = [item for item in context["documents"][0] if item is not None]
-                context_string += "\n\n".join(items)
+                context_string += "\n\n".join(
+                    [text for text in context["documents"][0] if text is not None]
+                )
+
+                if "metadatas" in context:
+                    citations.append(
+                        {
+                            "source": context["source"],
+                            "document": context["documents"][0],
+                            "metadata": context["metadatas"][0],
+                        }
+                    )
         except Exception as e:
             log.exception(e)
+
     context_string = context_string.strip()
 
     ra_content = rag_template(
@@ -355,7 +360,7 @@ def rag_messages(
 
     messages[last_user_message_idx] = new_user_message
 
-    return messages
+    return messages, citations
 
 
 def get_model_path(model: str, update_model: bool = False):

+ 16 - 1
backend/apps/web/routers/auths.py

@@ -33,7 +33,7 @@ from utils.utils import (
 from utils.misc import parse_duration, validate_email_format
 from utils.webhook import post_webhook
 from constants import ERROR_MESSAGES, WEBHOOK_MESSAGES
-from config import WEBUI_AUTH_TRUSTED_EMAIL_HEADER
+from config import WEBUI_AUTH, WEBUI_AUTH_TRUSTED_EMAIL_HEADER
 
 router = APIRouter()
 
@@ -118,6 +118,21 @@ async def signin(request: Request, form_data: SigninForm):
                 ),
             )
         user = Auths.authenticate_user_by_trusted_header(trusted_email)
+
+    if WEBUI_AUTH == False:
+
+        if Users.get_num_users() != 0:
+            raise HTTPException(400, detail=ERROR_MESSAGES.EXISTING_USERS)
+
+        admin_email = "admin@localhost"
+        admin_password = "admin"
+
+        if not Users.get_user_by_email(admin_email.lower()):
+            await signup(
+                request,
+                SignupForm(email=admin_email, password=admin_password, name="User"),
+            )
+        user = Auths.authenticate_user(admin_email.lower(), admin_password)
     else:
         user = Auths.authenticate_user(form_data.email.lower(), form_data.password)
 

+ 74 - 64
backend/apps/web/routers/chats.py

@@ -93,6 +93,31 @@ async def get_archived_session_user_chat_list(
     return Chats.get_archived_chat_list_by_user_id(user.id, skip, limit)
 
 
+############################
+# GetSharedChatById
+############################
+
+
+@router.get("/share/{share_id}", response_model=Optional[ChatResponse])
+async def get_shared_chat_by_id(share_id: str, user=Depends(get_current_user)):
+    if user.role == "pending":
+        raise HTTPException(
+            status_code=status.HTTP_401_UNAUTHORIZED, detail=ERROR_MESSAGES.NOT_FOUND
+        )
+
+    if user.role == "user":
+        chat = Chats.get_chat_by_share_id(share_id)
+    elif user.role == "admin":
+        chat = Chats.get_chat_by_id(share_id)
+
+    if chat:
+        return ChatResponse(**{**chat.model_dump(), "chat": json.loads(chat.chat)})
+    else:
+        raise HTTPException(
+            status_code=status.HTTP_401_UNAUTHORIZED, detail=ERROR_MESSAGES.NOT_FOUND
+        )
+
+
 ############################
 # GetChats
 ############################
@@ -141,6 +166,55 @@ async def create_new_chat(form_data: ChatForm, user=Depends(get_current_user)):
         )
 
 
+############################
+# GetChatsByTags
+############################
+
+
+class TagNameForm(BaseModel):
+    name: str
+    skip: Optional[int] = 0
+    limit: Optional[int] = 50
+
+
+@router.post("/tags", response_model=List[ChatTitleIdResponse])
+async def get_user_chat_list_by_tag_name(
+    form_data: TagNameForm, user=Depends(get_current_user)
+):
+
+    print(form_data)
+    chat_ids = [
+        chat_id_tag.chat_id
+        for chat_id_tag in Tags.get_chat_ids_by_tag_name_and_user_id(
+            form_data.name, user.id
+        )
+    ]
+
+    chats = Chats.get_chat_list_by_chat_ids(chat_ids, form_data.skip, form_data.limit)
+
+    if len(chats) == 0:
+        Tags.delete_tag_by_tag_name_and_user_id(form_data.name, user.id)
+
+    return chats
+
+
+############################
+# GetAllTags
+############################
+
+
+@router.get("/tags/all", response_model=List[TagModel])
+async def get_all_tags(user=Depends(get_current_user)):
+    try:
+        tags = Tags.get_tags_by_user_id(user.id)
+        return tags
+    except Exception as e:
+        log.exception(e)
+        raise HTTPException(
+            status_code=status.HTTP_400_BAD_REQUEST, detail=ERROR_MESSAGES.DEFAULT()
+        )
+
+
 ############################
 # GetChatById
 ############################
@@ -274,70 +348,6 @@ async def delete_shared_chat_by_id(id: str, user=Depends(get_current_user)):
         )
 
 
-############################
-# GetSharedChatById
-############################
-
-
-@router.get("/share/{share_id}", response_model=Optional[ChatResponse])
-async def get_shared_chat_by_id(share_id: str, user=Depends(get_current_user)):
-    if user.role == "pending":
-        raise HTTPException(
-            status_code=status.HTTP_401_UNAUTHORIZED, detail=ERROR_MESSAGES.NOT_FOUND
-        )
-
-    if user.role == "user":
-        chat = Chats.get_chat_by_share_id(share_id)
-    elif user.role == "admin":
-        chat = Chats.get_chat_by_id(share_id)
-
-    if chat:
-        return ChatResponse(**{**chat.model_dump(), "chat": json.loads(chat.chat)})
-    else:
-        raise HTTPException(
-            status_code=status.HTTP_401_UNAUTHORIZED, detail=ERROR_MESSAGES.NOT_FOUND
-        )
-
-
-############################
-# GetAllTags
-############################
-
-
-@router.get("/tags/all", response_model=List[TagModel])
-async def get_all_tags(user=Depends(get_current_user)):
-    try:
-        tags = Tags.get_tags_by_user_id(user.id)
-        return tags
-    except Exception as e:
-        log.exception(e)
-        raise HTTPException(
-            status_code=status.HTTP_400_BAD_REQUEST, detail=ERROR_MESSAGES.DEFAULT()
-        )
-
-
-############################
-# GetChatsByTags
-############################
-
-
-@router.get("/tags/tag/{tag_name}", response_model=List[ChatTitleIdResponse])
-async def get_user_chat_list_by_tag_name(
-    tag_name: str, user=Depends(get_current_user), skip: int = 0, limit: int = 50
-):
-    chat_ids = [
-        chat_id_tag.chat_id
-        for chat_id_tag in Tags.get_chat_ids_by_tag_name_and_user_id(tag_name, user.id)
-    ]
-
-    chats = Chats.get_chat_list_by_chat_ids(chat_ids, skip, limit)
-
-    if len(chats) == 0:
-        Tags.delete_tag_by_tag_name_and_user_id(tag_name, user.id)
-
-    return chats
-
-
 ############################
 # GetChatTagsById
 ############################

+ 38 - 19
backend/config.py

@@ -18,6 +18,18 @@ from secrets import token_bytes
 from constants import ERROR_MESSAGES
 
 
+####################################
+# Load .env file
+####################################
+
+try:
+    from dotenv import load_dotenv, find_dotenv
+
+    load_dotenv(find_dotenv("../.env"))
+except ImportError:
+    print("dotenv not installed, skipping...")
+
+
 ####################################
 # LOGGING
 ####################################
@@ -59,23 +71,16 @@ for source in log_sources:
 
 log.setLevel(SRC_LOG_LEVELS["CONFIG"])
 
-####################################
-# Load .env file
-####################################
-
-try:
-    from dotenv import load_dotenv, find_dotenv
-
-    load_dotenv(find_dotenv("../.env"))
-except ImportError:
-    log.warning("dotenv not installed, skipping...")
 
 WEBUI_NAME = os.environ.get("WEBUI_NAME", "Open WebUI")
 if WEBUI_NAME != "Open WebUI":
     WEBUI_NAME += " (Open WebUI)"
 
+WEBUI_URL = os.environ.get("WEBUI_URL", "http://localhost:3000")
+
 WEBUI_FAVICON_URL = "https://openwebui.com/favicon.png"
 
+
 ####################################
 # ENV (dev,test,prod)
 ####################################
@@ -408,7 +413,7 @@ WEBUI_VERSION = os.environ.get("WEBUI_VERSION", "v1.0.0-alpha.100")
 # WEBUI_AUTH (Required for security)
 ####################################
 
-WEBUI_AUTH = True
+WEBUI_AUTH = os.environ.get("WEBUI_AUTH", "True").lower() == "true"
 WEBUI_AUTH_TRUSTED_EMAIL_HEADER = os.environ.get(
     "WEBUI_AUTH_TRUSTED_EMAIL_HEADER", None
 )
@@ -454,6 +459,11 @@ ENABLE_RAG_HYBRID_SEARCH = (
     os.environ.get("ENABLE_RAG_HYBRID_SEARCH", "").lower() == "true"
 )
 
+
+ENABLE_RAG_WEB_LOADER_SSL_VERIFICATION = (
+    os.environ.get("ENABLE_RAG_WEB_LOADER_SSL_VERIFICATION", "True").lower() == "true"
+)
+
 RAG_EMBEDDING_ENGINE = os.environ.get("RAG_EMBEDDING_ENGINE", "")
 
 PDF_EXTRACT_IMAGES = os.environ.get("PDF_EXTRACT_IMAGES", "False").lower() == "true"
@@ -483,13 +493,6 @@ RAG_RERANKING_MODEL_TRUST_REMOTE_CODE = (
     os.environ.get("RAG_RERANKING_MODEL_TRUST_REMOTE_CODE", "").lower() == "true"
 )
 
-# device type embedding models - "cpu" (default), "cuda" (nvidia gpu required) or "mps" (apple silicon) - choosing this right can lead to better performance
-USE_CUDA = os.environ.get("USE_CUDA_DOCKER", "false")
-
-if USE_CUDA.lower() == "true":
-    DEVICE_TYPE = "cuda"
-else:
-    DEVICE_TYPE = "cpu"
 
 if CHROMA_HTTP_HOST != "":
     CHROMA_CLIENT = chromadb.HttpClient(
@@ -509,6 +512,16 @@ else:
         database=CHROMA_DATABASE,
     )
 
+
+# device type embedding models - "cpu" (default), "cuda" (nvidia gpu required) or "mps" (apple silicon) - choosing this right can lead to better performance
+USE_CUDA = os.environ.get("USE_CUDA_DOCKER", "false")
+
+if USE_CUDA.lower() == "true":
+    DEVICE_TYPE = "cuda"
+else:
+    DEVICE_TYPE = "cpu"
+
+
 CHUNK_SIZE = int(os.environ.get("CHUNK_SIZE", "1500"))
 CHUNK_OVERLAP = int(os.environ.get("CHUNK_OVERLAP", "100"))
 
@@ -531,7 +544,11 @@ RAG_TEMPLATE = os.environ.get("RAG_TEMPLATE", DEFAULT_RAG_TEMPLATE)
 RAG_OPENAI_API_BASE_URL = os.getenv("RAG_OPENAI_API_BASE_URL", OPENAI_API_BASE_URL)
 RAG_OPENAI_API_KEY = os.getenv("RAG_OPENAI_API_KEY", OPENAI_API_KEY)
 
-ENABLE_LOCAL_WEB_FETCH = os.getenv("ENABLE_LOCAL_WEB_FETCH", "False").lower() == "true"
+ENABLE_RAG_LOCAL_WEB_FETCH = (
+    os.getenv("ENABLE_RAG_LOCAL_WEB_FETCH", "False").lower() == "true"
+)
+
+YOUTUBE_LOADER_LANGUAGE = os.getenv("YOUTUBE_LOADER_LANGUAGE", "en").split(",")
 
 ####################################
 # Transcribe
@@ -574,6 +591,8 @@ IMAGE_GENERATION_MODEL = os.getenv("IMAGE_GENERATION_MODEL", "")
 
 AUDIO_OPENAI_API_BASE_URL = os.getenv("AUDIO_OPENAI_API_BASE_URL", OPENAI_API_BASE_URL)
 AUDIO_OPENAI_API_KEY = os.getenv("AUDIO_OPENAI_API_KEY", OPENAI_API_KEY)
+AUDIO_OPENAI_API_MODEL = os.getenv("AUDIO_OPENAI_API_MODEL", "tts-1")
+AUDIO_OPENAI_API_VOICE = os.getenv("AUDIO_OPENAI_API_VOICE", "alloy")
 
 ####################################
 # LiteLLM

+ 3 - 0
backend/constants.py

@@ -42,6 +42,9 @@ class ERROR_MESSAGES(str, Enum):
         "The password provided is incorrect. Please check for typos and try again."
     )
     INVALID_TRUSTED_HEADER = "Your provider has not provided a trusted header. Please contact your administrator for assistance."
+
+    EXISTING_USERS = "You can't turn off authentication because there are existing users. If you want to disable WEBUI_AUTH, make sure your web interface doesn't have any existing users and is a fresh installation."
+
     UNAUTHORIZED = "401 Unauthorized"
     ACCESS_PROHIBITED = "You do not have permission to access this resource. Please contact your administrator for assistance."
     ACTION_PROHIBITED = (

+ 57 - 4
backend/main.py

@@ -15,7 +15,7 @@ from fastapi.middleware.wsgi import WSGIMiddleware
 from fastapi.middleware.cors import CORSMiddleware
 from starlette.exceptions import HTTPException as StarletteHTTPException
 from starlette.middleware.base import BaseHTTPMiddleware
-
+from starlette.responses import StreamingResponse, Response
 
 from apps.ollama.main import app as ollama_app
 from apps.openai.main import app as openai_app
@@ -25,6 +25,8 @@ from apps.litellm.main import (
     start_litellm_background,
     shutdown_litellm_background,
 )
+
+
 from apps.audio.main import app as audio_app
 from apps.images.main import app as images_app
 from apps.rag.main import app as rag_app
@@ -41,6 +43,8 @@ from apps.rag.utils import rag_messages
 from config import (
     CONFIG_DATA,
     WEBUI_NAME,
+    WEBUI_URL,
+    WEBUI_AUTH,
     ENV,
     VERSION,
     CHANGELOG,
@@ -74,7 +78,7 @@ class SPAStaticFiles(StaticFiles):
 
 
 print(
-    f"""
+    rf"""
   ___                    __        __   _     _   _ ___ 
  / _ \ _ __   ___ _ __   \ \      / /__| |__ | | | |_ _|
 | | | | '_ \ / _ \ '_ \   \ \ /\ / / _ \ '_ \| | | || | 
@@ -100,6 +104,8 @@ origins = ["*"]
 
 class RAGMiddleware(BaseHTTPMiddleware):
     async def dispatch(self, request: Request, call_next):
+        return_citations = False
+
         if request.method == "POST" and (
             "/api/chat" in request.url.path or "/chat/completions" in request.url.path
         ):
@@ -112,11 +118,15 @@ class RAGMiddleware(BaseHTTPMiddleware):
             # Parse string to JSON
             data = json.loads(body_str) if body_str else {}
 
+            return_citations = data.get("citations", False)
+            if "citations" in data:
+                del data["citations"]
+
             # Example: Add a new key-value pair or modify existing ones
             # data["modified"] = True  # Example modification
             if "docs" in data:
                 data = {**data}
-                data["messages"] = rag_messages(
+                data["messages"], citations = rag_messages(
                     docs=data["docs"],
                     messages=data["messages"],
                     template=rag_app.state.RAG_TEMPLATE,
@@ -128,7 +138,9 @@ class RAGMiddleware(BaseHTTPMiddleware):
                 )
                 del data["docs"]
 
-                log.debug(f"data['messages']: {data['messages']}")
+                log.debug(
+                    f"data['messages']: {data['messages']}, citations: {citations}"
+                )
 
             modified_body_bytes = json.dumps(data).encode("utf-8")
 
@@ -146,11 +158,36 @@ class RAGMiddleware(BaseHTTPMiddleware):
             ]
 
         response = await call_next(request)
+
+        if return_citations:
+            # Inject the citations into the response
+            if isinstance(response, StreamingResponse):
+                # If it's a streaming response, inject it as SSE event or NDJSON line
+                content_type = response.headers.get("Content-Type")
+                if "text/event-stream" in content_type:
+                    return StreamingResponse(
+                        self.openai_stream_wrapper(response.body_iterator, citations),
+                    )
+                if "application/x-ndjson" in content_type:
+                    return StreamingResponse(
+                        self.ollama_stream_wrapper(response.body_iterator, citations),
+                    )
+
         return response
 
     async def _receive(self, body: bytes):
         return {"type": "http.request", "body": body, "more_body": False}
 
+    async def openai_stream_wrapper(self, original_generator, citations):
+        yield f"data: {json.dumps({'citations': citations})}\n\n"
+        async for data in original_generator:
+            yield data
+
+    async def ollama_stream_wrapper(self, original_generator, citations):
+        yield f"{json.dumps({'citations': citations})}\n"
+        async for data in original_generator:
+            yield data
+
 
 app.add_middleware(RAGMiddleware)
 
@@ -204,6 +241,7 @@ async def get_app_config():
         "status": True,
         "name": WEBUI_NAME,
         "version": VERSION,
+        "auth": WEBUI_AUTH,
         "default_locale": default_locale,
         "images": images_app.state.ENABLED,
         "default_models": webui_app.state.DEFAULT_MODELS,
@@ -315,6 +353,21 @@ async def get_manifest_json():
     }
 
 
+@app.get("/opensearch.xml")
+async def get_opensearch_xml():
+    xml_content = rf"""
+    <OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/">
+    <ShortName>{WEBUI_NAME}</ShortName>
+    <Description>Search {WEBUI_NAME}</Description>
+    <InputEncoding>UTF-8</InputEncoding>
+    <Image width="16" height="16" type="image/x-icon">{WEBUI_URL}/favicon.png</Image>
+    <Url type="text/html" method="get" template="{WEBUI_URL}/?q={"{searchTerms}"}"/>
+    <moz:SearchForm>{WEBUI_URL}</moz:SearchForm>
+    </OpenSearchDescription>
+    """
+    return Response(content=xml_content, media_type="application/xml")
+
+
 app.mount("/static", StaticFiles(directory=STATIC_DIR), name="static")
 app.mount("/cache", StaticFiles(directory=CACHE_DIR), name="cache")
 

+ 2 - 4
backend/requirements.txt

@@ -9,7 +9,6 @@ Flask-Cors==4.0.0
 python-socketio==5.11.2
 python-jose==3.3.0
 passlib[bcrypt]==1.7.4
-uuid==1.30
 
 requests==2.31.0
 aiohttp==3.9.5
@@ -19,7 +18,6 @@ psycopg2-binary==2.9.9
 PyMySQL==1.1.0
 bcrypt==4.1.2
 
-litellm==1.35.28
 litellm[proxy]==1.35.28
 
 boto3==1.34.95
@@ -54,9 +52,9 @@ rank-bm25==0.2.2
 
 faster-whisper==1.0.1
 
-PyJWT==2.8.0
 PyJWT[crypto]==2.8.0
 
 black==24.4.2
 langfuse==2.27.3
-youtube-transcript-api
+youtube-transcript-api==0.6.2
+pytube

+ 1 - 1
backend/start.sh

@@ -8,7 +8,7 @@ KEY_FILE=.webui_secret_key
 PORT="${PORT:-8080}"
 HOST="${HOST:-0.0.0.0}"
 if test "$WEBUI_SECRET_KEY $WEBUI_JWT_SECRET_KEY" = " "; then
-  echo "No WEBUI_SECRET_KEY provided"
+  echo "Loading WEBUI_SECRET_KEY from file, not provided as an environment variable."
 
   if ! [ -e "$KEY_FILE" ]; then
     echo "Generating WEBUI_SECRET_KEY"

+ 1 - 1
backend/start_windows.bat

@@ -13,7 +13,7 @@ SET "WEBUI_JWT_SECRET_KEY=%WEBUI_JWT_SECRET_KEY%"
 
 :: Check if WEBUI_SECRET_KEY and WEBUI_JWT_SECRET_KEY are not set
 IF "%WEBUI_SECRET_KEY%%WEBUI_JWT_SECRET_KEY%" == " " (
-    echo No WEBUI_SECRET_KEY provided
+    echo Loading WEBUI_SECRET_KEY from file, not provided as an environment variable.
 
     IF NOT EXIST "%KEY_FILE%" (
         echo Generating WEBUI_SECRET_KEY

+ 4 - 3
backend/utils/misc.py

@@ -38,9 +38,10 @@ def calculate_sha256_string(string):
 
 
 def validate_email_format(email: str) -> bool:
-    if not re.match(r"[^@]+@[^@]+\.[^@]+", email):
-        return False
-    return True
+    if email.endswith("@localhost"):
+        return True
+
+    return bool(re.match(r"[^@]+@[^@]+\.[^@]+", email))
 
 
 def sanitize_filename(file_name):

+ 0 - 1
kubernetes/helm/.helmignore

@@ -1 +0,0 @@
-values-minikube.yaml

+ 0 - 21
kubernetes/helm/Chart.yaml

@@ -1,21 +0,0 @@
-apiVersion: v2
-name: open-webui
-version: 1.0.0
-appVersion: "latest"
-
-home: https://www.openwebui.com/
-icon: https://raw.githubusercontent.com/open-webui/open-webui/main/static/favicon.png
-
-description: "Open WebUI: A User-Friendly Web Interface for Chat Interactions 👋"
-keywords:
-- llm
-- chat
-- web-ui
-
-sources:
-- https://github.com/open-webui/open-webui/tree/main/kubernetes/helm
-- https://hub.docker.com/r/ollama/ollama
-- https://github.com/open-webui/open-webui/pkgs/container/open-webui
-
-annotations:
-  licenses: MIT

+ 4 - 0
kubernetes/helm/README.md

@@ -0,0 +1,4 @@
+# Helm Charts
+Open WebUI Helm Charts are now hosted in a separate repo, which can be found here: https://github.com/open-webui/helm-charts 
+
+The charts are released at https://helm.openwebui.com. 

+ 0 - 51
kubernetes/helm/templates/_helpers.tpl

@@ -1,51 +0,0 @@
-{{- define "open-webui.name" -}}
-{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
-{{- end -}}
-
-{{- define "ollama.name" -}}
-ollama
-{{- end -}}
-
-{{- define "ollama.url" -}}
-{{- if .Values.ollama.externalHost }}
-{{- printf .Values.ollama.externalHost }}
-{{- else }}
-{{- printf "http://%s.%s.svc.cluster.local:%d" (include "ollama.name" .) (.Release.Namespace) (.Values.ollama.service.port | int) }}
-{{- end }}
-{{- end }}
-
-{{- define "chart.name" -}}
-{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
-{{- end }}
-
-{{- define "base.labels" -}}
-helm.sh/chart: {{ include "chart.name" . }}
-{{- if .Chart.AppVersion }}
-app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
-{{- end }}
-app.kubernetes.io/managed-by: {{ .Release.Service }}
-{{- end }}
-
-{{- define "base.selectorLabels" -}}
-app.kubernetes.io/instance: {{ .Release.Name }}
-{{- end -}}
-
-{{- define "open-webui.selectorLabels" -}}
-{{ include "base.selectorLabels" . }}
-app.kubernetes.io/component: {{ .Chart.Name }}
-{{- end }}
-
-{{- define "open-webui.labels" -}}
-{{ include "base.labels" . }}
-{{ include "open-webui.selectorLabels" . }}
-{{- end }}
-
-{{- define "ollama.selectorLabels" -}}
-{{ include "base.selectorLabels" . }}
-app.kubernetes.io/component: {{ include "ollama.name" . }}
-{{- end }}
-
-{{- define "ollama.labels" -}}
-{{ include "base.labels" . }}
-{{ include "ollama.selectorLabels" . }}
-{{- end }}

+ 0 - 23
kubernetes/helm/templates/ollama-service.yaml

@@ -1,23 +0,0 @@
-{{- if not .Values.ollama.externalHost }}
-apiVersion: v1
-kind: Service
-metadata:
-  name: {{ include "ollama.name" . }}
-  labels:
-    {{- include "ollama.labels" . | nindent 4 }}
-  {{- with .Values.ollama.service.annotations }}
-  annotations:
-    {{- toYaml . | nindent 4 }}
-  {{- end }}
-spec:
-  selector:
-    {{- include "ollama.selectorLabels" . | nindent 4 }}
-{{- with .Values.ollama.service }}
-  type: {{ .type }}
-  ports:
-  - protocol: TCP
-    name: http
-    port: {{ .port }}
-    targetPort: http
-{{- end }}
-{{- end }}

+ 0 - 98
kubernetes/helm/templates/ollama-statefulset.yaml

@@ -1,98 +0,0 @@
-{{- if not .Values.ollama.externalHost }}
-apiVersion: apps/v1
-kind: StatefulSet
-metadata:
-  name: {{ include "ollama.name" . }}
-  labels:
-    {{- include "ollama.labels" . | nindent 4 }}
-  {{- with .Values.ollama.annotations }}
-  annotations:
-    {{- toYaml . | nindent 4 }}
-  {{- end }}
-spec:
-  serviceName: {{ include "ollama.name" . }}
-  replicas: {{ .Values.ollama.replicaCount }}
-  selector:
-    matchLabels:
-      {{- include "ollama.selectorLabels" . | nindent 6 }}
-  template:
-    metadata:
-      labels:
-        {{- include "ollama.labels" . | nindent 8 }}
-      {{- with .Values.ollama.podAnnotations }}
-      annotations:
-        {{- toYaml . | nindent 8 }}
-      {{- end }}
-    spec:
-      enableServiceLinks: false
-      automountServiceAccountToken: false
-      {{- with .Values.ollama.runtimeClassName }}
-      runtimeClassName: {{ . }}
-      {{- end }}
-      containers:
-      - name: {{ include "ollama.name" . }}
-        {{- with .Values.ollama.image }}
-        image: {{ .repository }}:{{ .tag }}
-        imagePullPolicy: {{ .pullPolicy }}
-        {{- end }}
-        tty: true
-        ports:
-        - name: http
-          containerPort: {{ .Values.ollama.service.containerPort }}
-        env:
-        {{- if .Values.ollama.gpu.enabled }}
-          - name: PATH
-            value: /usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
-          - name: LD_LIBRARY_PATH
-            value: /usr/local/nvidia/lib:/usr/local/nvidia/lib64
-          - name: NVIDIA_DRIVER_CAPABILITIES
-            value: compute,utility
-        {{- end }}
-        {{- with .Values.ollama.resources }}
-        resources: {{- toYaml . | nindent 10 }}
-        {{- end }}
-        volumeMounts:
-        - name: data
-          mountPath: /root/.ollama
-      {{- with .Values.ollama.nodeSelector }}
-      nodeSelector:
-        {{- toYaml . | nindent 8 }}
-      {{- end }}
-      {{- with .Values.ollama.tolerations }}
-      tolerations:
-        {{- toYaml . | nindent 8 }}
-      {{- end }}
-      volumes:
-      {{- if and .Values.ollama.persistence.enabled .Values.ollama.persistence.existingClaim }}
-      - name: data
-        persistentVolumeClaim:
-          claimName: {{ .Values.ollama.persistence.existingClaim }}
-      {{- else if not .Values.ollama.persistence.enabled }}
-      - name: data
-        emptyDir: {}
-      {{- else if and .Values.ollama.persistence.enabled (not .Values.ollama.persistence.existingClaim) }}
-        []
-  volumeClaimTemplates:
-  - metadata:
-      name: data
-      labels:
-        {{- include "ollama.selectorLabels" . | nindent 8 }}
-      {{- with .Values.ollama.persistence.annotations }}
-      annotations:
-        {{- toYaml . | nindent 8 }}
-      {{- end }}
-    spec:
-      accessModes:
-        {{- range .Values.ollama.persistence.accessModes }}
-        - {{ . | quote }}
-        {{- end }}
-      resources:
-        requests:
-          storage: {{ .Values.ollama.persistence.size | quote }}
-      storageClassName: {{ .Values.ollama.persistence.storageClass }}
-      {{- with .Values.ollama.persistence.selector }}
-      selector:
-        {{- toYaml . | nindent 8 }}
-      {{- end }}
-      {{- end }}
-{{- end }}

+ 0 - 62
kubernetes/helm/templates/webui-deployment.yaml

@@ -1,62 +0,0 @@
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: {{ include "open-webui.name" . }}
-  labels:
-    {{- include "open-webui.labels" . | nindent 4 }}
-  {{- with .Values.webui.annotations }}
-  annotations:
-    {{- toYaml . | nindent 4 }}
-  {{- end }}
-spec:
-  replicas: {{ .Values.webui.replicaCount }}
-  selector:
-    matchLabels:
-      {{- include "open-webui.selectorLabels" . | nindent 6 }}
-  template:
-    metadata:
-      labels:
-        {{- include "open-webui.labels" . | nindent 8 }}
-      {{- with .Values.webui.podAnnotations }}
-      annotations:
-        {{- toYaml . | nindent 8 }}
-      {{- end }}
-    spec:
-      enableServiceLinks: false
-      automountServiceAccountToken: false
-      containers:
-      - name: {{ .Chart.Name }}
-        {{- with .Values.webui.image }}
-        image: {{ .repository }}:{{ .tag | default $.Chart.AppVersion }}
-        imagePullPolicy: {{ .pullPolicy }}
-        {{- end }}
-        ports:
-        - name: http
-          containerPort: {{ .Values.webui.service.containerPort }}
-        {{- with .Values.webui.resources }}
-        resources: {{- toYaml . | nindent 10 }}
-        {{- end }}
-        volumeMounts:
-        - name: data
-          mountPath: /app/backend/data
-        env:
-        - name: OLLAMA_BASE_URL
-          value: {{ include "ollama.url" . | quote }}
-        tty: true
-      {{- with .Values.webui.nodeSelector }}
-      nodeSelector:
-        {{- toYaml . | nindent 8 }}
-      {{- end }}
-      volumes:
-      {{- if and .Values.webui.persistence.enabled .Values.webui.persistence.existingClaim }}
-      - name: data
-        persistentVolumeClaim:
-          claimName: {{ .Values.webui.persistence.existingClaim }}
-      {{- else if not .Values.webui.persistence.enabled }}
-      - name: data
-        emptyDir: {}
-      {{- else if and .Values.webui.persistence.enabled (not .Values.webui.persistence.existingClaim) }}
-      - name: data
-        persistentVolumeClaim:
-          claimName: {{ include "open-webui.name" . }}
-      {{- end }}

+ 0 - 33
kubernetes/helm/templates/webui-ingress.yaml

@@ -1,33 +0,0 @@
-{{- if .Values.webui.ingress.enabled }}
-apiVersion: networking.k8s.io/v1
-kind: Ingress
-metadata:
-  name: {{ include "open-webui.name" . }}
-  labels:
-    {{- include "open-webui.labels" . | nindent 4 }}
-  {{- with .Values.webui.ingress.annotations }}
-  annotations:
-    {{- toYaml . | nindent 4 }}
-  {{- end }}
-spec:
-  {{- with .Values.webui.ingress.class }}
-  ingressClassName: {{ . }}
-  {{- end }}
-  {{- if .Values.webui.ingress.tls }}
-  tls:
-    - hosts:
-      - {{ .Values.webui.ingress.host | quote }}
-      secretName: {{ default (printf "%s-tls" .Release.Name) .Values.webui.ingress.existingSecret }}
-  {{- end }}
-  rules:
-  - host: {{ .Values.webui.ingress.host }}
-    http:
-      paths:
-      - path: /
-        pathType: Prefix
-        backend:
-          service:
-            name: {{ include "open-webui.name" . }}
-            port:
-              name: http
-{{- end }}

+ 0 - 27
kubernetes/helm/templates/webui-pvc.yaml

@@ -1,27 +0,0 @@
-{{- if and .Values.webui.persistence.enabled (not .Values.webui.persistence.existingClaim) }}
-apiVersion: v1
-kind: PersistentVolumeClaim
-metadata:
-  name: {{ include "open-webui.name" . }}
-  labels:
-    {{- include "open-webui.selectorLabels" . | nindent 4 }}
-  {{- with .Values.webui.persistence.annotations }}
-  annotations:
-    {{- toYaml . | nindent 8 }}
-  {{- end }}
-spec:
-  accessModes:
-    {{- range .Values.webui.persistence.accessModes }}
-    - {{ . | quote }}
-    {{- end }}
-  resources:
-    requests:
-      storage: {{ .Values.webui.persistence.size }}
-  {{- if .Values.webui.persistence.storageClass }}
-  storageClassName: {{ .Values.webui.persistence.storageClass }}
-  {{- end }}
-  {{- with .Values.webui.persistence.selector }}
-  selector:
-    {{- toYaml . | nindent 4 }}
-  {{- end }}
-{{- end }}

+ 0 - 29
kubernetes/helm/templates/webui-service.yaml

@@ -1,29 +0,0 @@
-apiVersion: v1
-kind: Service
-metadata:
-  name: {{ include "open-webui.name" . }}
-  labels:
-    {{- include "open-webui.labels" . | nindent 4 }}
-    {{- with .Values.webui.service.labels }}
-    {{- toYaml . | nindent 4 }}
-    {{- end }}
-  {{- with .Values.webui.service.annotations }}
-  annotations:
-    {{- toYaml . | nindent 4 }}
-  {{- end }}
-spec:
-  selector:
-    {{- include "open-webui.selectorLabels" . | nindent 4 }}
-  type: {{ .Values.webui.service.type | default "ClusterIP" }}
-  ports:
-  - protocol: TCP
-    name: http
-    port: {{ .Values.webui.service.port }}
-    targetPort: http
-    {{- if .Values.webui.service.nodePort }}
-    nodePort: {{ .Values.webui.service.nodePort | int }}
-    {{- end }}
-  {{- if .Values.webui.service.loadBalancerClass }}
-  loadBalancerClass: {{ .Values.webui.service.loadBalancerClass | quote }}
-  {{- end }}
-

+ 0 - 27
kubernetes/helm/values-minikube.yaml

@@ -1,27 +0,0 @@
-ollama:
-  resources:
-    requests:
-      cpu: "2000m"
-      memory: "2Gi"
-    limits:
-      cpu: "4000m"
-      memory: "4Gi"
-      nvidia.com/gpu: "0"
-  service:
-    type: ClusterIP
-  gpu:
-    enabled: false
-
-webui:
-  resources:
-    requests:
-      cpu: "500m"
-      memory: "500Mi"
-    limits:
-      cpu: "1000m"
-      memory: "1Gi"
-  ingress:
-    enabled: true
-    host: open-webui.minikube.local
-  service:
-    type: NodePort

+ 0 - 75
kubernetes/helm/values.yaml

@@ -1,75 +0,0 @@
-nameOverride: ""
-
-ollama:
-  externalHost: ""
-  annotations: {}
-  podAnnotations: {}
-  replicaCount: 1
-  image:
-    repository: ollama/ollama
-    tag: latest
-    pullPolicy: Always
-  resources: {}
-  persistence:
-    enabled: true
-    size: 30Gi
-    existingClaim: ""
-    accessModes:
-    - ReadWriteOnce
-    storageClass: ""
-    selector: {}
-    annotations: {}
-  nodeSelector: {}
-  # -- If using a special runtime container such as nvidia, set it here.
-  runtimeClassName: ""
-  tolerations:
-  - key: nvidia.com/gpu
-    operator: Exists
-    effect: NoSchedule
-  service:
-    type: ClusterIP
-    annotations: {}
-    port: 80
-    containerPort: 11434
-  gpu:
-    # -- Enable additional ENV values to help Ollama discover GPU usage
-    enabled: false
-
-webui:
-  annotations: {}
-  podAnnotations: {}
-  replicaCount: 1
-  image:
-    repository: ghcr.io/open-webui/open-webui
-    tag: ""
-    pullPolicy: Always
-  resources: {}
-  ingress:
-    enabled: false
-    class: ""
-    # -- Use appropriate annotations for your Ingress controller, e.g., for NGINX:
-    # nginx.ingress.kubernetes.io/rewrite-target: /
-    annotations: {}
-    host: ""
-    tls: false
-    existingSecret: ""
-  persistence:
-    enabled: true
-    size: 2Gi
-    existingClaim: ""
-    # -- If using multiple replicas, you must update accessModes to ReadWriteMany
-    accessModes:
-    - ReadWriteOnce
-    storageClass: ""
-    selector: {}
-    annotations: {}
-  nodeSelector: {}
-  tolerations: []
-  service:
-    type: ClusterIP
-    annotations: {}
-    port: 80
-    containerPort: 8080
-    nodePort: ""
-    labels: {}
-    loadBalancerClass: "" 

+ 2 - 2
package-lock.json

@@ -1,12 +1,12 @@
 {
 	"name": "open-webui",
-	"version": "0.1.123",
+	"version": "0.1.124",
 	"lockfileVersion": 3,
 	"requires": true,
 	"packages": {
 		"": {
 			"name": "open-webui",
-			"version": "0.1.123",
+			"version": "0.1.124",
 			"dependencies": {
 				"@sveltejs/adapter-node": "^1.3.1",
 				"async": "^3.2.5",

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
 	"name": "open-webui",
-	"version": "0.1.123",
+	"version": "0.1.124",
 	"private": true,
 	"scripts": {
 		"dev": "vite dev --host",

+ 9 - 0
src/app.css

@@ -82,3 +82,12 @@ select {
 .katex-mathml {
 	display: none;
 }
+
+.scrollbar-none:active::-webkit-scrollbar-thumb,
+.scrollbar-none:focus::-webkit-scrollbar-thumb,
+.scrollbar-none:hover::-webkit-scrollbar-thumb {
+	visibility: visible;
+}
+.scrollbar-none::-webkit-scrollbar-thumb {
+	visibility: hidden;
+}

+ 6 - 0
src/app.html

@@ -6,6 +6,12 @@
 		<link rel="manifest" href="%sveltekit.assets%/manifest.json" crossorigin="use-credentials" />
 		<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
 		<meta name="robots" content="noindex,nofollow" />
+		<link
+			rel="search"
+			type="application/opensearchdescription+xml"
+			title="Open WebUI"
+			href="/opensearch.xml"
+		/>
 		<script>
 			// On page load or when changing themes, best to add inline in `head` to avoid FOUC
 			(() => {

+ 5 - 2
src/lib/apis/audio/index.ts

@@ -30,6 +30,8 @@ export const getAudioConfig = async (token: string) => {
 type OpenAIConfigForm = {
 	url: string;
 	key: string;
+	model: string;
+	speaker: string;
 };
 
 export const updateAudioConfig = async (token: string, payload: OpenAIConfigForm) => {
@@ -95,7 +97,8 @@ export const transcribeAudio = async (token: string, file: File) => {
 export const synthesizeOpenAISpeech = async (
 	token: string = '',
 	speaker: string = 'alloy',
-	text: string = ''
+	text: string = '',
+	model: string = 'tts-1'
 ) => {
 	let error = null;
 
@@ -106,7 +109,7 @@ export const synthesizeOpenAISpeech = async (
 			'Content-Type': 'application/json'
 		},
 		body: JSON.stringify({
-			model: 'tts-1',
+			model: model,
 			input: text,
 			voice: speaker
 		})

+ 19 - 6
src/lib/apis/chats/index.ts

@@ -1,4 +1,5 @@
 import { WEBUI_API_BASE_URL } from '$lib/constants';
+import { getTimeRange } from '$lib/utils';
 
 export const createNewChat = async (token: string, chat: object) => {
 	let error = null;
@@ -59,7 +60,10 @@ export const getChatList = async (token: string = '') => {
 		throw error;
 	}
 
-	return res;
+	return res.map((chat) => ({
+		...chat,
+		time_range: getTimeRange(chat.updated_at)
+	}));
 };
 
 export const getChatListByUserId = async (token: string = '', userId: string) => {
@@ -90,7 +94,10 @@ export const getChatListByUserId = async (token: string = '', userId: string) =>
 		throw error;
 	}
 
-	return res;
+	return res.map((chat) => ({
+		...chat,
+		time_range: getTimeRange(chat.updated_at)
+	}));
 };
 
 export const getArchivedChatList = async (token: string = '') => {
@@ -220,13 +227,16 @@ export const getAllChatTags = async (token: string) => {
 export const getChatListByTagName = async (token: string = '', tagName: string) => {
 	let error = null;
 
-	const res = await fetch(`${WEBUI_API_BASE_URL}/chats/tags/tag/${tagName}`, {
-		method: 'GET',
+	const res = await fetch(`${WEBUI_API_BASE_URL}/chats/tags`, {
+		method: 'POST',
 		headers: {
 			Accept: 'application/json',
 			'Content-Type': 'application/json',
 			...(token && { authorization: `Bearer ${token}` })
-		}
+		},
+		body: JSON.stringify({
+			name: tagName
+		})
 	})
 		.then(async (res) => {
 			if (!res.ok) throw await res.json();
@@ -245,7 +255,10 @@ export const getChatListByTagName = async (token: string = '', tagName: string)
 		throw error;
 	}
 
-	return res;
+	return res.map((chat) => ({
+		...chat,
+		time_range: getTimeRange(chat.updated_at)
+	}));
 };
 
 export const getChatById = async (token: string, id: string) => {

+ 6 - 2
src/lib/apis/ollama/index.ts

@@ -159,7 +159,11 @@ export const generateTitle = async (
 		body: JSON.stringify({
 			model: model,
 			prompt: template,
-			stream: false
+			stream: false,
+			options: {
+				// Restrict the number of tokens generated to 50
+				num_predict: 50
+			}
 		})
 	})
 		.then(async (res) => {
@@ -178,7 +182,7 @@ export const generateTitle = async (
 		throw error;
 	}
 
-	return res?.response ?? 'New Chat';
+	return res?.response.replace(/["']/g, '') ?? 'New Chat';
 };
 
 export const generatePrompt = async (token: string = '', model: string, conversation: string) => {

+ 7 - 4
src/lib/apis/openai/index.ts

@@ -239,7 +239,8 @@ export const generateOpenAIChatCompletion = async (
 export const synthesizeOpenAISpeech = async (
 	token: string = '',
 	speaker: string = 'alloy',
-	text: string = ''
+	text: string = '',
+	model: string = 'tts-1'
 ) => {
 	let error = null;
 
@@ -250,7 +251,7 @@ export const synthesizeOpenAISpeech = async (
 			'Content-Type': 'application/json'
 		},
 		body: JSON.stringify({
-			model: 'tts-1',
+			model: model,
 			input: text,
 			voice: speaker
 		})
@@ -295,7 +296,9 @@ export const generateTitle = async (
 					content: template
 				}
 			],
-			stream: false
+			stream: false,
+			// Restricting the max tokens to 50 to avoid long titles
+			max_tokens: 50
 		})
 	})
 		.then(async (res) => {
@@ -314,5 +317,5 @@ export const generateTitle = async (
 		throw error;
 	}
 
-	return res?.choices[0]?.message?.content ?? 'New Chat';
+	return res?.choices[0]?.message?.content.replace(/["']/g, '') ?? 'New Chat';
 };

+ 9 - 2
src/lib/apis/rag/index.ts

@@ -32,9 +32,16 @@ type ChunkConfigForm = {
 	chunk_overlap: number;
 };
 
+type YoutubeConfigForm = {
+	language: string[];
+	translation?: string | null;
+};
+
 type RAGConfigForm = {
-	pdf_extract_images: boolean;
-	chunk: ChunkConfigForm;
+	pdf_extract_images?: boolean;
+	chunk?: ChunkConfigForm;
+	web_loader_ssl_verification?: boolean;
+	youtube?: YoutubeConfigForm;
 };
 
 export const updateRAGConfig = async (token: string, payload: RAGConfigForm) => {

+ 11 - 0
src/lib/apis/streaming/index.ts

@@ -4,6 +4,8 @@ import type { ParsedEvent } from 'eventsource-parser';
 type TextStreamUpdate = {
 	done: boolean;
 	value: string;
+	// eslint-disable-next-line @typescript-eslint/no-explicit-any
+	citations?: any;
 };
 
 // createOpenAITextStream takes a responseBody with a SSE response,
@@ -45,6 +47,11 @@ async function* openAIStreamToIterator(
 			const parsedData = JSON.parse(data);
 			console.log(parsedData);
 
+			if (parsedData.citations) {
+				yield { done: false, value: '', citations: parsedData.citations };
+				continue;
+			}
+
 			yield { done: false, value: parsedData.choices?.[0]?.delta?.content ?? '' };
 		} catch (e) {
 			console.error('Error extracting delta from SSE event:', e);
@@ -62,6 +69,10 @@ async function* streamLargeDeltasAsRandomChunks(
 			yield textStreamUpdate;
 			return;
 		}
+		if (textStreamUpdate.citations) {
+			yield textStreamUpdate;
+			continue;
+		}
 		let content = textStreamUpdate.value;
 		if (content.length < 5) {
 			yield { done: false, value: content };

+ 2 - 4
src/lib/components/ChangelogModal.svelte

@@ -22,7 +22,7 @@
 </script>
 
 <Modal bind:show>
-	<div class="px-5 py-4 dark:text-gray-300 text-gray-700">
+	<div class="px-5 pt-4 dark:text-gray-300 text-gray-700">
 		<div class="flex justify-between items-start">
 			<div class="text-xl font-bold">
 				{$i18n.t('What’s New in')}
@@ -57,10 +57,8 @@
 		</div>
 	</div>
 
-	<hr class=" dark:border-gray-800" />
-
 	<div class=" w-full p-4 px-5 text-gray-700 dark:text-gray-100">
-		<div class=" overflow-y-scroll max-h-80">
+		<div class=" overflow-y-scroll max-h-80 scrollbar-none">
 			<div class="mb-3">
 				{#if changelog}
 					{#each Object.keys(changelog) as version}

+ 1 - 1
src/lib/components/admin/AddUserModal.svelte

@@ -107,7 +107,7 @@
 
 				reader.readAsText(file);
 			} else {
-				toast.error(`File not found.`);
+				toast.error($i18n.t('File not found.'));
 			}
 		}
 	};

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

@@ -24,7 +24,7 @@
 					{
 						name: 'All Documents',
 						type: 'collection',
-						title: 'All Documents',
+						title: $i18n.t('All Documents'),
 						collection_names: $documents.map((doc) => doc.collection_name)
 					}
 			  ]

+ 5 - 3
src/lib/components/chat/MessageInput/Suggestions.svelte

@@ -1,6 +1,8 @@
 <script lang="ts">
 	import Bolt from '$lib/components/icons/Bolt.svelte';
-	import { onMount } from 'svelte';
+	import { onMount, getContext } from 'svelte';
+
+	const i18n = getContext('i18n');
 
 	export let submitPrompt: Function;
 	export let suggestionPrompts = [];
@@ -33,7 +35,7 @@
 {#if prompts.length > 0}
 	<div class="mb-2 flex gap-1 text-sm font-medium items-center text-gray-400 dark:text-gray-600">
 		<Bolt />
-		Suggested
+		{$i18n.t('Suggested')}
 	</div>
 {/if}
 
@@ -71,7 +73,7 @@
 						<div
 							class="text-xs text-gray-400 group-hover:text-gray-500 dark:text-gray-600 dark:group-hover:text-gray-500 transition self-center"
 						>
-							Prompt
+							{$i18n.t('Prompt')}
 						</div>
 
 						<div

+ 77 - 0
src/lib/components/chat/Messages/CitationsModal.svelte

@@ -0,0 +1,77 @@
+<script lang="ts">
+	import { getContext, onMount, tick } from 'svelte';
+
+	import Modal from '$lib/components/common/Modal.svelte';
+	const i18n = getContext('i18n');
+
+	export let show = false;
+	export let citation;
+
+	let mergedDocuments = [];
+
+	$: if (citation) {
+		mergedDocuments = citation.document?.map((c, i) => {
+			return {
+				source: citation.source,
+				document: c,
+				metadata: citation.metadata?.[i]
+			};
+		});
+	}
+</script>
+
+<Modal size="lg" bind:show>
+	<div>
+		<div class=" flex justify-between dark:text-gray-300 px-5 pt-4 pb-2">
+			<div class=" text-lg font-medium self-center capitalize">
+				{$i18n.t('Citation')}
+			</div>
+			<button
+				class="self-center"
+				on:click={() => {
+					show = false;
+				}}
+			>
+				<svg
+					xmlns="http://www.w3.org/2000/svg"
+					viewBox="0 0 20 20"
+					fill="currentColor"
+					class="w-5 h-5"
+				>
+					<path
+						d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"
+					/>
+				</svg>
+			</button>
+		</div>
+
+		<div class="flex flex-col md:flex-row w-full px-6 pb-5 md:space-x-4">
+			<div
+				class="flex flex-col w-full dark:text-gray-200 overflow-y-scroll max-h-[22rem] scrollbar-none"
+			>
+				{#each mergedDocuments as document, documentIdx}
+					<div class="flex flex-col w-full">
+						<div class="text-sm font-medium dark:text-gray-300">
+							{$i18n.t('Source')}
+						</div>
+						<div class="text-sm dark:text-gray-400">
+							{document.source?.name ?? $i18n.t('No source available')}
+						</div>
+					</div>
+					<div class="flex flex-col w-full">
+						<div class=" text-sm font-medium dark:text-gray-300">
+							{$i18n.t('Content')}
+						</div>
+						<pre class="text-sm dark:text-gray-400 whitespace-pre-line">
+							{document.document}
+						</pre>
+					</div>
+
+					{#if documentIdx !== mergedDocuments.length - 1}
+						<hr class=" dark:border-gray-850 my-3" />
+					{/if}
+				{/each}
+			</div>
+		</div>
+	</div>
+</Modal>

+ 1 - 1
src/lib/components/chat/Messages/RateComment.svelte

@@ -123,7 +123,7 @@
 				submitHandler();
 			}}
 		>
-			Submit
+			{$i18n.t('Submit')}
 		</button>
 	</div>
 </div>

+ 200 - 156
src/lib/components/chat/Messages/ResponseMessage.svelte

@@ -23,15 +23,16 @@
 		revertSanitizedResponseContent,
 		sanitizeResponseContent
 	} from '$lib/utils';
+	import { WEBUI_BASE_URL } from '$lib/constants';
 
 	import Name from './Name.svelte';
 	import ProfileImage from './ProfileImage.svelte';
 	import Skeleton from './Skeleton.svelte';
 	import CodeBlock from './CodeBlock.svelte';
 	import Image from '$lib/components/common/Image.svelte';
-	import { WEBUI_BASE_URL } from '$lib/constants';
 	import Tooltip from '$lib/components/common/Tooltip.svelte';
 	import RateComment from './RateComment.svelte';
+	import CitationsModal from '$lib/components/chat/Messages/CitationsModal.svelte';
 
 	export let modelfiles = [];
 	export let message;
@@ -65,6 +66,9 @@
 
 	let showRateComment = false;
 
+	let showCitationModal = false;
+	let selectedCitation = null;
+
 	$: tokens = marked.lexer(sanitizeResponseContent(message.content));
 
 	const renderer = new marked.Renderer();
@@ -223,7 +227,8 @@
 					const res = await synthesizeOpenAISpeech(
 						localStorage.token,
 						$settings?.audio?.speaker,
-						sentence
+						sentence,
+						$settings?.audio?.model
 					).catch((error) => {
 						toast.error(error);
 
@@ -324,6 +329,8 @@
 	});
 </script>
 
+<CitationsModal bind:show={showCitationModal} citation={selectedCitation} />
+
 {#key message.id}
 	<div class=" flex w-full message-{message.id}" id="message-{message.id}">
 		<ProfileImage
@@ -346,154 +353,191 @@
 				{/if}
 			</Name>
 
-			{#if message.content === ''}
-				<Skeleton />
-			{:else}
-				{#if message.files}
-					<div class="my-2.5 w-full flex overflow-x-auto gap-2 flex-wrap">
-						{#each message.files as file}
-							<div>
-								{#if file.type === 'image'}
-									<Image src={file.url} />
-								{/if}
-							</div>
-						{/each}
-					</div>
-				{/if}
+			{#if message.files}
+				<div class="my-2.5 w-full flex overflow-x-auto gap-2 flex-wrap">
+					{#each message.files as file}
+						<div>
+							{#if file.type === 'image'}
+								<Image src={file.url} />
+							{/if}
+						</div>
+					{/each}
+				</div>
+			{/if}
 
-				<div
-					class="prose chat-{message.role} w-full max-w-full dark:prose-invert prose-headings:my-0 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>
-						{#if edit === true}
-							<div class=" w-full">
-								<textarea
-									id="message-edit-{message.id}"
-									bind:this={editTextAreaElement}
-									class=" bg-transparent outline-none w-full resize-none"
-									bind:value={editedContent}
-									on:input={(e) => {
-										e.target.style.height = '';
-										e.target.style.height = `${e.target.scrollHeight}px`;
+			<div
+				class="prose chat-{message.role} w-full max-w-full dark:prose-invert prose-headings:my-0 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>
+					{#if edit === true}
+						<div class=" w-full">
+							<textarea
+								id="message-edit-{message.id}"
+								bind:this={editTextAreaElement}
+								class=" bg-transparent outline-none w-full resize-none"
+								bind:value={editedContent}
+								on:input={(e) => {
+									e.target.style.height = '';
+									e.target.style.height = `${e.target.scrollHeight}px`;
+								}}
+							/>
+
+							<div class=" mt-2 mb-1 flex justify-center space-x-2 text-sm font-medium">
+								<button
+									class="px-4 py-2 bg-emerald-700 hover:bg-emerald-800 text-gray-100 transition rounded-lg"
+									on:click={() => {
+										editMessageConfirmHandler();
 									}}
-								/>
-
-								<div class=" mt-2 mb-1 flex justify-center space-x-2 text-sm font-medium">
-									<button
-										class="px-4 py-2 bg-emerald-700 hover:bg-emerald-800 text-gray-100 transition rounded-lg"
-										on:click={() => {
-											editMessageConfirmHandler();
-										}}
-									>
-										{$i18n.t('Save')}
-									</button>
-
-									<button
-										class=" px-4 py-2 hover:bg-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-100 transition outline outline-1 outline-gray-200 dark:outline-gray-600 rounded-lg"
-										on:click={() => {
-											cancelEditMessage();
-										}}
-									>
-										{$i18n.t('Cancel')}
-									</button>
-								</div>
+								>
+									{$i18n.t('Save')}
+								</button>
+
+								<button
+									class=" px-4 py-2 hover:bg-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-100 transition outline outline-1 outline-gray-200 dark:outline-gray-600 rounded-lg"
+									on:click={() => {
+										cancelEditMessage();
+									}}
+								>
+									{$i18n.t('Cancel')}
+								</button>
 							</div>
-						{:else}
-							<div class="w-full">
-								{#if message?.error === true}
-									<div
-										class="flex mt-2 mb-4 space-x-2 border px-4 py-3 border-red-800 bg-red-800/30 font-medium rounded-lg"
+						</div>
+					{:else}
+						<div class="w-full">
+							{#if message?.error === true}
+								<div
+									class="flex mt-2 mb-4 space-x-2 border px-4 py-3 border-red-800 bg-red-800/30 font-medium rounded-lg"
+								>
+									<svg
+										xmlns="http://www.w3.org/2000/svg"
+										fill="none"
+										viewBox="0 0 24 24"
+										stroke-width="1.5"
+										stroke="currentColor"
+										class="w-5 h-5 self-center"
 									>
-										<svg
-											xmlns="http://www.w3.org/2000/svg"
-											fill="none"
-											viewBox="0 0 24 24"
-											stroke-width="1.5"
-											stroke="currentColor"
-											class="w-5 h-5 self-center"
-										>
-											<path
-												stroke-linecap="round"
-												stroke-linejoin="round"
-												d="M12 9v3.75m9-.75a9 9 0 11-18 0 9 9 0 0118 0zm-9 3.75h.008v.008H12v-.008z"
-											/>
-										</svg>
-
-										<div class=" self-center">
-											{message.content}
-										</div>
+										<path
+											stroke-linecap="round"
+											stroke-linejoin="round"
+											d="M12 9v3.75m9-.75a9 9 0 11-18 0 9 9 0 0118 0zm-9 3.75h.008v.008H12v-.008z"
+										/>
+									</svg>
+
+									<div class=" self-center">
+										{message.content}
 									</div>
-								{:else}
-									{#each tokens as token}
-										{#if token.type === 'code'}
-											<CodeBlock
-												lang={token.lang}
-												code={revertSanitizedResponseContent(token.text)}
-											/>
-										{:else}
-											{@html marked.parse(token.raw, {
-												...defaults,
-												gfm: true,
-												breaks: true,
-												renderer
-											})}
-										{/if}
+								</div>
+							{:else if message.content === ''}
+								<Skeleton />
+							{:else}
+								{#each tokens as token}
+									{#if token.type === 'code'}
+										<CodeBlock
+											lang={token.lang}
+											code={revertSanitizedResponseContent(token.text)}
+										/>
+									{:else}
+										{@html marked.parse(token.raw, {
+											...defaults,
+											gfm: true,
+											breaks: true,
+											renderer
+										})}
+									{/if}
+								{/each}
+							{/if}
+
+							{#if message.citations}
+								<div class="mt-1 mb-2 w-full flex gap-1 items-center">
+									{#each message.citations.reduce((acc, citation) => {
+										citation.document.forEach((document, index) => {
+											const metadata = citation.metadata?.[index];
+											const id = metadata?.source ?? 'N/A';
+
+											const existingSource = acc.find((item) => item.id === id);
+
+											if (existingSource) {
+												existingSource.document.push(document);
+												existingSource.metadata.push(metadata);
+											} else {
+												acc.push( { id: id, source: citation?.source, document: [document], metadata: metadata ? [metadata] : [] } );
+											}
+										});
+										return acc;
+									}, []) as citation, idx}
+										<div class="flex gap-1 text-xs font-semibold">
+											<button
+												class="flex dark:text-gray-300 py-1 px-1 bg-gray-50 hover:bg-gray-100 dark:bg-gray-850 dark:hover:bg-gray-800 transition rounded-xl"
+												on:click={() => {
+													showCitationModal = true;
+													selectedCitation = citation;
+												}}
+											>
+												<div class="bg-white dark:bg-gray-700 rounded-full size-4">
+													{idx + 1}
+												</div>
+												<div class=" mx-2">
+													{citation.source.name}
+												</div>
+											</button>
+										</div>
 									{/each}
-									<!-- {@html marked(message.content.replaceAll('\\', '\\\\'))} -->
-								{/if}
-
-								{#if message.done}
-									<div
-										class=" flex justify-start space-x-1 overflow-x-auto buttons text-gray-700 dark:text-gray-500"
-									>
-										{#if siblings.length > 1}
-											<div class="flex self-center min-w-fit">
-												<button
-													class="self-center dark:hover:text-white hover:text-black transition"
-													on:click={() => {
-														showPreviousMessage(message);
-													}}
+								</div>
+							{/if}
+
+							{#if message.done || siblings.length > 1}
+								<div
+									class=" flex justify-start space-x-1 overflow-x-auto buttons text-gray-700 dark:text-gray-500"
+								>
+									{#if siblings.length > 1}
+										<div class="flex self-center min-w-fit">
+											<button
+												class="self-center dark:hover:text-white hover:text-black transition"
+												on:click={() => {
+													showPreviousMessage(message);
+												}}
+											>
+												<svg
+													xmlns="http://www.w3.org/2000/svg"
+													viewBox="0 0 20 20"
+													fill="currentColor"
+													class="w-4 h-4"
 												>
-													<svg
-														xmlns="http://www.w3.org/2000/svg"
-														viewBox="0 0 20 20"
-														fill="currentColor"
-														class="w-4 h-4"
-													>
-														<path
-															fill-rule="evenodd"
-															d="M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z"
-															clip-rule="evenodd"
-														/>
-													</svg>
-												</button>
+													<path
+														fill-rule="evenodd"
+														d="M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z"
+														clip-rule="evenodd"
+													/>
+												</svg>
+											</button>
 
-												<div class="text-xs font-bold self-center min-w-fit dark:text-gray-100">
-													{siblings.indexOf(message.id) + 1} / {siblings.length}
-												</div>
+											<div class="text-xs font-bold self-center min-w-fit dark:text-gray-100">
+												{siblings.indexOf(message.id) + 1} / {siblings.length}
+											</div>
 
-												<button
-													class="self-center dark:hover:text-white hover:text-black transition"
-													on:click={() => {
-														showNextMessage(message);
-													}}
+											<button
+												class="self-center dark:hover:text-white hover:text-black transition"
+												on:click={() => {
+													showNextMessage(message);
+												}}
+											>
+												<svg
+													xmlns="http://www.w3.org/2000/svg"
+													viewBox="0 0 20 20"
+													fill="currentColor"
+													class="w-4 h-4"
 												>
-													<svg
-														xmlns="http://www.w3.org/2000/svg"
-														viewBox="0 0 20 20"
-														fill="currentColor"
-														class="w-4 h-4"
-													>
-														<path
-															fill-rule="evenodd"
-															d="M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z"
-															clip-rule="evenodd"
-														/>
-													</svg>
-												</button>
-											</div>
-										{/if}
+													<path
+														fill-rule="evenodd"
+														d="M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z"
+														clip-rule="evenodd"
+													/>
+												</svg>
+											</button>
+										</div>
+									{/if}
 
+									{#if message.done}
 										{#if !readOnly}
 											<Tooltip content={$i18n.t('Edit')} placement="bottom">
 												<button
@@ -854,24 +898,24 @@
 												</button>
 											</Tooltip>
 										{/if}
-									</div>
-								{/if}
-
-								{#if showRateComment}
-									<RateComment
-										messageId={message.id}
-										bind:show={showRateComment}
-										bind:message
-										on:submit={() => {
-											updateChatMessages();
-										}}
-									/>
-								{/if}
-							</div>
-						{/if}
-					</div>
+									{/if}
+								</div>
+							{/if}
+
+							{#if showRateComment}
+								<RateComment
+									messageId={message.id}
+									bind:show={showRateComment}
+									bind:message
+									on:submit={() => {
+										updateChatMessages();
+									}}
+								/>
+							{/if}
+						</div>
+					{/if}
 				</div>
-			{/if}
+			</div>
 		</div>
 	</div>
 {/key}

+ 1 - 1
src/lib/components/chat/Messages/Skeleton.svelte

@@ -1,4 +1,4 @@
-<div class="w-full mt-3">
+<div class="w-full mt-3 mb-4">
 	<div class="animate-pulse flex w-full">
 		<div class="space-y-2 w-full">
 			<div class="h-2 bg-gray-200 dark:bg-gray-600 rounded mr-14" />

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

@@ -82,7 +82,7 @@
 				</div>
 			{:else}
 				<div class="  self-center disabled:text-gray-600 disabled:hover:text-gray-600 mr-2">
-					<Tooltip content="Remove Model">
+					<Tooltip content={$i18n.t('Remove Model')}>
 						<button
 							{disabled}
 							on:click={() => {

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

@@ -151,7 +151,7 @@
 
 				models.set(await getModels(localStorage.token));
 			} else {
-				toast.error('Download canceled');
+				toast.error($i18n.t('Download canceled'));
 			}
 
 			delete $MODEL_DOWNLOAD_POOL[sanitizedModelTag];
@@ -305,7 +305,7 @@
 				{:else}
 					<div>
 						<div class="block px-3 py-2 text-sm text-gray-700 dark:text-gray-100">
-							No results found
+							{$i18n.t('No results found')}
 						</div>
 					</div>
 				{/each}
@@ -317,7 +317,7 @@
 							pullModelHandler();
 						}}
 					>
-						Pull "{searchValue}" from Ollama.com
+						{$i18n.t(`Pull "{{searchValue}}" from Ollama.com`, { searchValue: searchValue })}
 					</button>
 				{/if}
 
@@ -368,7 +368,7 @@
 						</div>
 
 						<div class="mr-2 translate-y-0.5">
-							<Tooltip content="Cancel">
+							<Tooltip content={$i18n.t('Cancel')}>
 								<button
 									class="text-gray-800 dark:text-gray-100"
 									on:click={() => {

+ 2 - 2
src/lib/components/chat/Settings/Account.svelte

@@ -447,7 +447,7 @@
 								{/if}
 							</button>
 
-							<Tooltip content="Create new key">
+							<Tooltip content={$i18n.t('Create new key')}>
 								<button
 									class=" px-1.5 py-1 dark:hover:bg-gray-850transition rounded-lg"
 									on:click={() => {
@@ -479,7 +479,7 @@
 							>
 								<Plus strokeWidth="2" className=" size-3.5" />
 
-								Create new secret key</button
+								{$i18n.t('Create new secret key')}</button
 							>
 						{/if}
 					</div>

+ 37 - 2
src/lib/components/chat/Settings/Audio.svelte

@@ -26,6 +26,8 @@
 
 	let voices = [];
 	let speaker = '';
+	let models = [];
+	let model = '';
 
 	const getOpenAIVoices = () => {
 		voices = [
@@ -38,6 +40,10 @@
 		];
 	};
 
+	const getOpenAIVoicesModel = () => {
+		models = [{ name: 'tts-1' }, { name: 'tts-1-hd' }];
+	};
+
 	const getWebAPIVoices = () => {
 		const getVoicesLoop = setInterval(async () => {
 			voices = await speechSynthesis.getVoices();
@@ -78,12 +84,16 @@
 		if (TTSEngine === 'openai') {
 			const res = await updateAudioConfig(localStorage.token, {
 				url: OpenAIUrl,
-				key: OpenAIKey
+				key: OpenAIKey,
+				model: model,
+				speaker: speaker
 			});
 
 			if (res) {
 				OpenAIUrl = res.OPENAI_API_BASE_URL;
 				OpenAIKey = res.OPENAI_API_KEY;
+				model = res.OPENAI_API_MODEL;
+				speaker = res.OPENAI_API_VOICE;
 			}
 		}
 	};
@@ -98,9 +108,11 @@
 		STTEngine = settings?.audio?.STTEngine ?? '';
 		TTSEngine = settings?.audio?.TTSEngine ?? '';
 		speaker = settings?.audio?.speaker ?? '';
+		model = settings?.audio?.model ?? '';
 
 		if (TTSEngine === 'openai') {
 			getOpenAIVoices();
+			getOpenAIVoicesModel();
 		} else {
 			getWebAPIVoices();
 		}
@@ -111,6 +123,8 @@
 			if (res) {
 				OpenAIUrl = res.OPENAI_API_BASE_URL;
 				OpenAIKey = res.OPENAI_API_KEY;
+				model = res.OPENAI_API_MODEL;
+				speaker = res.OPENAI_API_VOICE;
 			}
 		}
 	});
@@ -126,7 +140,8 @@
 			audio: {
 				STTEngine: STTEngine !== '' ? STTEngine : undefined,
 				TTSEngine: TTSEngine !== '' ? TTSEngine : undefined,
-				speaker: speaker !== '' ? speaker : undefined
+				speaker: speaker !== '' ? speaker : undefined,
+				model: model !== '' ? model : undefined
 			}
 		});
 		dispatch('save');
@@ -215,6 +230,7 @@
 							if (e.target.value === 'openai') {
 								getOpenAIVoices();
 								speaker = 'alloy';
+								model = 'tts-1';
 							} else {
 								getWebAPIVoices();
 								speaker = '';
@@ -307,6 +323,25 @@
 					</div>
 				</div>
 			</div>
+			<div>
+				<div class=" mb-2.5 text-sm font-medium">{$i18n.t('Set Model')}</div>
+				<div class="flex w-full">
+					<div class="flex-1">
+						<input
+							list="model-list"
+							class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
+							bind:value={model}
+							placeholder="Select a model"
+						/>
+
+						<datalist id="model-list">
+							{#each models as model}
+								<option value={model.name} />
+							{/each}
+						</datalist>
+					</div>
+				</div>
+			</div>
 		{/if}
 	</div>
 

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

@@ -164,7 +164,7 @@
 						<div class="flex gap-1.5">
 							<input
 								class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
-								placeholder="Enter URL (e.g. http://localhost:11434)"
+								placeholder={$i18n.t('Enter URL (e.g. http://localhost:11434)')}
 								bind:value={url}
 							/>
 

+ 2 - 2
src/lib/components/chat/Settings/Models.svelte

@@ -245,7 +245,7 @@
 
 				models.set(await getModels(localStorage.token));
 			} else {
-				toast.error('Download canceled');
+				toast.error($i18n.t('Download canceled'));
 			}
 
 			delete $MODEL_DOWNLOAD_POOL[sanitizedModelTag];
@@ -652,7 +652,7 @@
 													</div>
 												</div>
 
-												<Tooltip content="Cancel">
+												<Tooltip content={$i18n.t('Cancel')}>
 													<button
 														class="text-gray-800 dark:text-gray-100"
 														on:click={() => {

+ 10 - 6
src/lib/components/chat/ShareChatModal.svelte

@@ -97,9 +97,10 @@
 				<div class=" text-sm dark:text-gray-300 mb-1">
 					{#if chat.share_id}
 						<a href="/s/{chat.share_id}" target="_blank"
-							>You have shared this chat <span class=" underline">before</span>.</a
+							>{$i18n.t('You have shared this chat')}
+							<span class=" underline">{$i18n.t('before')}</span>.</a
 						>
-						Click here to
+						{$i18n.t('Click here to')}
 						<button
 							class="underline"
 							on:click={async () => {
@@ -108,11 +109,14 @@
 								if (res) {
 									chat = await getChatById(localStorage.token, chatId);
 								}
-							}}>delete this link</button
-						> and create a new shared link.
+							}}
+							>{$i18n.t('delete this link')}
+						</button>
+						{$i18n.t('and create a new shared link.')}
 					{:else}
-						Messages you send after creating your link won't be shared. Users with the URL will be
-						able to view the shared chat.
+						{$i18n.t(
+							"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat."
+						)}
 					{/if}
 				</div>
 

+ 52 - 0
src/lib/components/chat/ShortcutsModal.svelte

@@ -209,6 +209,58 @@
 				</div>
 			</div>
 		</div>
+
+		<div class=" flex justify-between dark:text-gray-300 px-5">
+			<div class=" text-lg font-medium self-center">{$i18n.t('Input commands')}</div>
+		</div>
+
+		<div class="flex flex-col md:flex-row w-full p-5 md:space-x-4 dark:text-gray-200">
+			<div class=" flex flex-col w-full sm:flex-row sm:justify-center sm:space-x-6">
+				<div class="flex flex-col space-y-3 w-full self-start">
+					<div class="w-full flex justify-between items-center">
+						<div class=" text-sm">
+							{$i18n.t('Attach file')}
+						</div>
+
+						<div class="flex space-x-1 text-xs">
+							<div
+								class=" h-fit py-1 px-2 flex items-center justify-center rounded border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
+							>
+								#
+							</div>
+						</div>
+					</div>
+
+					<div class="w-full flex justify-between items-center">
+						<div class=" text-sm">
+							{$i18n.t('Add custom prompt')}
+						</div>
+
+						<div class="flex space-x-1 text-xs">
+							<div
+								class=" h-fit py-1 px-2 flex items-center justify-center rounded border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
+							>
+								/
+							</div>
+						</div>
+					</div>
+
+					<div class="w-full flex justify-between items-center">
+						<div class=" text-sm">
+							{$i18n.t('Select model')}
+						</div>
+
+						<div class="flex space-x-1 text-xs">
+							<div
+								class=" h-fit py-1 px-2 flex items-center justify-center rounded border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
+							>
+								@
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
 	</div>
 </Modal>
 

+ 21 - 3
src/lib/components/chat/Tags.svelte

@@ -3,11 +3,15 @@
 		addTagById,
 		deleteTagById,
 		getAllChatTags,
+		getChatList,
+		getChatListByTagName,
 		getTagsById,
 		updateChatById
 	} from '$lib/apis/chats';
-	import { tags as _tags } from '$lib/stores';
-	import { onMount } from 'svelte';
+	import { tags as _tags, chats } from '$lib/stores';
+	import { createEventDispatcher, onMount } from 'svelte';
+
+	const dispatch = createEventDispatcher();
 
 	import Tags from '../common/Tags.svelte';
 
@@ -39,7 +43,21 @@
 			tags: tags
 		});
 
-		_tags.set(await getAllChatTags(localStorage.token));
+		console.log($_tags);
+
+		await _tags.set(await getAllChatTags(localStorage.token));
+
+		console.log($_tags);
+
+		if ($_tags.map((t) => t.name).includes(tagName)) {
+			await chats.set(await getChatListByTagName(localStorage.token, tagName));
+
+			if ($chats.find((chat) => chat.id === chatId)) {
+				dispatch('close');
+			}
+		} else {
+			await chats.set(await getChatList(localStorage.token));
+		}
 	};
 
 	onMount(async () => {

+ 26 - 1
src/lib/components/common/ImagePreview.svelte

@@ -1,8 +1,12 @@
 <script lang="ts">
+	import { onMount } from 'svelte';
+
 	export let show = false;
 	export let src = '';
 	export let alt = '';
 
+	let mounted = false;
+
 	const downloadImage = (url, filename) => {
 		fetch(url)
 			.then((response) => response.blob())
@@ -18,6 +22,27 @@
 			})
 			.catch((error) => console.error('Error downloading image:', error));
 	};
+
+	const handleKeyDown = (event: KeyboardEvent) => {
+		if (event.key === 'Escape') {
+			console.log('Escape');
+			show = false;
+		}
+	};
+
+	onMount(() => {
+		mounted = true;
+	});
+
+	$: if (mounted) {
+		if (show) {
+			window.addEventListener('keydown', handleKeyDown);
+			document.body.style.overflow = 'hidden';
+		} else {
+			window.removeEventListener('keydown', handleKeyDown);
+			document.body.style.overflow = 'unset';
+		}
+	}
 </script>
 
 {#if show}
@@ -51,7 +76,7 @@
 				<button
 					class=" p-5"
 					on:click={() => {
-						downloadImage(src, 'Image.png');
+						downloadImage(src, src.substring(src.lastIndexOf('/') + 1));
 					}}
 				>
 					<svg

+ 1 - 1
src/lib/components/common/Tags/TagInput.svelte

@@ -17,7 +17,7 @@
 			tagName = '';
 			showTagInput = false;
 		} else {
-			toast.error('Invalid Tag');
+			toast.error($i18n.t(`Invalid Tag`));
 		}
 	};
 </script>

+ 126 - 0
src/lib/components/documents/Settings/ChunkParams.svelte

@@ -0,0 +1,126 @@
+<script lang="ts">
+	import { getDocs } from '$lib/apis/documents';
+	import {
+		getRAGConfig,
+		updateRAGConfig,
+		getQuerySettings,
+		scanDocs,
+		updateQuerySettings,
+		resetVectorDB,
+		getEmbeddingConfig,
+		updateEmbeddingConfig,
+		getRerankingConfig,
+		updateRerankingConfig
+	} from '$lib/apis/rag';
+
+	import { documents, models } from '$lib/stores';
+	import { onMount, getContext } from 'svelte';
+	import { toast } from 'svelte-sonner';
+
+	import Tooltip from '$lib/components/common/Tooltip.svelte';
+
+	const i18n = getContext('i18n');
+
+	export let saveHandler: Function;
+
+	let scanDirLoading = false;
+	let updateEmbeddingModelLoading = false;
+	let updateRerankingModelLoading = false;
+
+	let showResetConfirm = false;
+
+	let chunkSize = 0;
+	let chunkOverlap = 0;
+	let pdfExtractImages = true;
+
+	const submitHandler = async () => {
+		const res = await updateRAGConfig(localStorage.token, {
+			pdf_extract_images: pdfExtractImages,
+			chunk: {
+				chunk_overlap: chunkOverlap,
+				chunk_size: chunkSize
+			}
+		});
+	};
+
+	onMount(async () => {
+		const res = await getRAGConfig(localStorage.token);
+
+		if (res) {
+			pdfExtractImages = res.pdf_extract_images;
+
+			chunkSize = res.chunk.chunk_size;
+			chunkOverlap = res.chunk.chunk_overlap;
+		}
+	});
+</script>
+
+<form
+	class="flex flex-col h-full justify-between space-y-3 text-sm"
+	on:submit|preventDefault={() => {
+		submitHandler();
+		saveHandler();
+	}}
+>
+	<div class=" space-y-3 pr-1.5 overflow-y-scroll h-full max-h-[22rem]">
+		<div class=" ">
+			<div class=" text-sm font-medium">{$i18n.t('Chunk Params')}</div>
+
+			<div class=" flex">
+				<div class="  flex w-full justify-between">
+					<div class="self-center text-xs font-medium min-w-fit">{$i18n.t('Chunk Size')}</div>
+
+					<div class="self-center p-3">
+						<input
+							class=" w-full rounded-lg py-1.5 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
+							type="number"
+							placeholder={$i18n.t('Enter Chunk Size')}
+							bind:value={chunkSize}
+							autocomplete="off"
+							min="0"
+						/>
+					</div>
+				</div>
+
+				<div class="flex w-full">
+					<div class=" self-center text-xs font-medium min-w-fit">
+						{$i18n.t('Chunk Overlap')}
+					</div>
+
+					<div class="self-center p-3">
+						<input
+							class="w-full rounded-lg py-1.5 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
+							type="number"
+							placeholder={$i18n.t('Enter Chunk Overlap')}
+							bind:value={chunkOverlap}
+							autocomplete="off"
+							min="0"
+						/>
+					</div>
+				</div>
+			</div>
+
+			<div class="pr-2">
+				<div class="flex justify-between items-center text-xs">
+					<div class=" text-xs font-medium">{$i18n.t('PDF Extract Images (OCR)')}</div>
+
+					<button
+						class=" text-xs font-medium text-gray-500"
+						type="button"
+						on:click={() => {
+							pdfExtractImages = !pdfExtractImages;
+						}}>{pdfExtractImages ? $i18n.t('On') : $i18n.t('Off')}</button
+					>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="flex justify-end pt-3 text-sm font-medium">
+		<button
+			class=" px-4 py-2 bg-emerald-700 hover:bg-emerald-800 text-gray-100 transition rounded-lg"
+			type="submit"
+		>
+			{$i18n.t('Save')}
+		</button>
+	</div>
+</form>

+ 209 - 393
src/lib/components/documents/Settings/General.svelte

@@ -1,8 +1,6 @@
 <script lang="ts">
 	import { getDocs } from '$lib/apis/documents';
 	import {
-		getRAGConfig,
-		updateRAGConfig,
 		getQuerySettings,
 		scanDocs,
 		updateQuerySettings,
@@ -17,8 +15,6 @@
 	import { onMount, getContext } from 'svelte';
 	import { toast } from 'svelte-sonner';
 
-	import Tooltip from '$lib/components/common/Tooltip.svelte';
-
 	const i18n = getContext('i18n');
 
 	export let saveHandler: Function;
@@ -36,10 +32,6 @@
 	let OpenAIKey = '';
 	let OpenAIUrl = '';
 
-	let chunkSize = 0;
-	let chunkOverlap = 0;
-	let pdfExtractImages = true;
-
 	let querySettings = {
 		template: '',
 		r: 0.0,
@@ -151,14 +143,11 @@
 	};
 
 	const submitHandler = async () => {
-		const res = await updateRAGConfig(localStorage.token, {
-			pdf_extract_images: pdfExtractImages,
-			chunk: {
-				chunk_overlap: chunkOverlap,
-				chunk_size: chunkSize
-			}
-		});
-		querySettings = await updateQuerySettings(localStorage.token, querySettings);
+		embeddingModelUpdateHandler();
+
+		if (querySettings.hybrid) {
+			rerankingModelUpdateHandler();
+		}
 	};
 
 	const setEmbeddingConfig = async () => {
@@ -183,20 +172,10 @@
 
 	const toggleHybridSearch = async () => {
 		querySettings.hybrid = !querySettings.hybrid;
-
 		querySettings = await updateQuerySettings(localStorage.token, querySettings);
 	};
 
 	onMount(async () => {
-		const res = await getRAGConfig(localStorage.token);
-
-		if (res) {
-			pdfExtractImages = res.pdf_extract_images;
-
-			chunkSize = res.chunk.chunk_size;
-			chunkOverlap = res.chunk.chunk_overlap;
-		}
-
 		await setEmbeddingConfig();
 		await setRerankingConfig();
 
@@ -211,24 +190,54 @@
 		saveHandler();
 	}}
 >
-	<div class=" space-y-3 pr-1.5 overflow-y-scroll max-h-[22rem]">
-		<div>
-			<div class=" mb-2 text-sm font-medium">{$i18n.t('General Settings')}</div>
+	<div class=" space-y-2.5 pr-1.5 overflow-y-scroll max-h-[22rem]">
+		<div class="flex flex-col gap-0.5">
+			<div class=" mb-0.5 text-sm font-medium">{$i18n.t('General Settings')}</div>
 
-			<div class=" flex w-full justify-between">
-				<div class=" self-center text-xs font-medium">{$i18n.t('Hybrid Search')}</div>
+			<div class="  flex w-full justify-between">
+				<div class=" self-center text-xs font-medium">
+					{$i18n.t('Scan for documents from {{path}}', { path: '/data/docs' })}
+				</div>
 
 				<button
-					class="p-1 px-3 text-xs flex rounded transition"
+					class=" self-center text-xs p-1 px-3 bg-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700 rounded-lg flex flex-row space-x-1 items-center {scanDirLoading
+						? ' cursor-not-allowed'
+						: ''}"
 					on:click={() => {
-						toggleHybridSearch();
+						scanHandler();
+						console.log('check');
 					}}
 					type="button"
+					disabled={scanDirLoading}
 				>
-					{#if querySettings.hybrid === true}
-						<span class="ml-2 self-center">{$i18n.t('On')}</span>
-					{:else}
-						<span class="ml-2 self-center">{$i18n.t('Off')}</span>
+					<div class="self-center font-medium">{$i18n.t('Scan')}</div>
+
+					{#if scanDirLoading}
+						<div class="ml-3 self-center">
+							<svg
+								class=" w-3 h-3"
+								viewBox="0 0 24 24"
+								fill="currentColor"
+								xmlns="http://www.w3.org/2000/svg"
+								><style>
+									.spinner_ajPY {
+										transform-origin: center;
+										animation: spinner_AtaB 0.75s infinite linear;
+									}
+									@keyframes spinner_AtaB {
+										100% {
+											transform: rotate(360deg);
+										}
+									}
+								</style><path
+									d="M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z"
+									opacity=".25"
+								/><path
+									d="M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z"
+									class="spinner_ajPY"
+								/></svg
+							>
+						</div>
 					{/if}
 				</button>
 			</div>
@@ -256,7 +265,7 @@
 			</div>
 
 			{#if embeddingEngine === 'openai'}
-				<div class="mt-1 flex gap-2">
+				<div class="my-0.5 flex gap-2">
 					<input
 						class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
 						placeholder={$i18n.t('API Base URL')}
@@ -272,31 +281,65 @@
 					/>
 				</div>
 			{/if}
+
+			<div class=" flex w-full justify-between">
+				<div class=" self-center text-xs font-medium">{$i18n.t('Hybrid Search')}</div>
+
+				<button
+					class="p-1 px-3 text-xs flex rounded transition"
+					on:click={() => {
+						toggleHybridSearch();
+					}}
+					type="button"
+				>
+					{#if querySettings.hybrid === true}
+						<span class="ml-2 self-center">{$i18n.t('On')}</span>
+					{:else}
+						<span class="ml-2 self-center">{$i18n.t('Off')}</span>
+					{/if}
+				</button>
+			</div>
 		</div>
 
-		<div class="space-y-2">
-			<div>
-				<div class=" mb-2 text-sm font-medium">{$i18n.t('Update Embedding Model')}</div>
+		<hr class=" dark:border-gray-700 my-1" />
 
-				{#if embeddingEngine === 'ollama'}
-					<div class="flex w-full">
-						<div class="flex-1 mr-2">
-							<select
-								class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
-								bind:value={embeddingModel}
-								placeholder={$i18n.t('Select a model')}
-								required
-							>
-								{#if !embeddingModel}
-									<option value="" disabled selected>{$i18n.t('Select a model')}</option>
-								{/if}
-								{#each $models.filter((m) => m.id && !m.external) as model}
-									<option value={model.name} class="bg-gray-100 dark:bg-gray-700"
-										>{model.name + ' (' + (model.size / 1024 ** 3).toFixed(1) + ' GB)'}</option
-									>
-								{/each}
-							</select>
-						</div>
+		<div class="space-y-2" />
+		<div>
+			<div class=" mb-2 text-sm font-medium">{$i18n.t('Embedding Model')}</div>
+
+			{#if embeddingEngine === 'ollama'}
+				<div class="flex w-full">
+					<div class="flex-1 mr-2">
+						<select
+							class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
+							bind:value={embeddingModel}
+							placeholder={$i18n.t('Select a model')}
+							required
+						>
+							{#if !embeddingModel}
+								<option value="" disabled selected>{$i18n.t('Select a model')}</option>
+							{/if}
+							{#each $models.filter((m) => m.id && !m.external) as model}
+								<option value={model.name} class="bg-gray-100 dark:bg-gray-700"
+									>{model.name + ' (' + (model.size / 1024 ** 3).toFixed(1) + ' GB)'}</option
+								>
+							{/each}
+						</select>
+					</div>
+				</div>
+			{:else}
+				<div class="flex w-full">
+					<div class="flex-1 mr-2">
+						<input
+							class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
+							placeholder={$i18n.t('Set embedding model (e.g. {{model}})', {
+								model: embeddingModel.slice(-40)
+							})}
+							bind:value={embeddingModel}
+						/>
+					</div>
+
+					{#if embeddingEngine === ''}
 						<button
 							class="px-2.5 bg-gray-100 hover:bg-gray-200 text-gray-800 dark:bg-gray-850 dark:hover:bg-gray-800 dark:text-gray-100 rounded-lg transition"
 							on:click={() => {
@@ -338,33 +381,46 @@
 									class="w-4 h-4"
 								>
 									<path
-										fill-rule="evenodd"
-										d="M12.416 3.376a.75.75 0 0 1 .208 1.04l-5 7.5a.75.75 0 0 1-1.154.114l-3-3a.75.75 0 0 1 1.06-1.06l2.353 2.353 4.493-6.74a.75.75 0 0 1 1.04-.207Z"
-										clip-rule="evenodd"
+										d="M8.75 2.75a.75.75 0 0 0-1.5 0v5.69L5.03 6.22a.75.75 0 0 0-1.06 1.06l3.5 3.5a.75.75 0 0 0 1.06 0l3.5-3.5a.75.75 0 0 0-1.06-1.06L8.75 8.44V2.75Z"
+									/>
+									<path
+										d="M3.5 9.75a.75.75 0 0 0-1.5 0v1.5A2.75 2.75 0 0 0 4.75 14h6.5A2.75 2.75 0 0 0 14 11.25v-1.5a.75.75 0 0 0-1.5 0v1.5c0 .69-.56 1.25-1.25 1.25h-6.5c-.69 0-1.25-.56-1.25-1.25v-1.5Z"
 									/>
 								</svg>
 							{/if}
 						</button>
-					</div>
-				{:else}
+					{/if}
+				</div>
+			{/if}
+
+			<div class="mt-2 mb-1 text-xs text-gray-400 dark:text-gray-500">
+				{$i18n.t(
+					'Warning: If you update or change your embedding model, you will need to re-import all documents.'
+				)}
+			</div>
+
+			{#if querySettings.hybrid === true}
+				<div class=" ">
+					<div class=" mb-2 text-sm font-medium">{$i18n.t('Reranking Model')}</div>
+
 					<div class="flex w-full">
 						<div class="flex-1 mr-2">
 							<input
 								class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
-								placeholder={$i18n.t('Update embedding model (e.g. {{model}})', {
-									model: embeddingModel.slice(-40)
+								placeholder={$i18n.t('Set reranking model (e.g. {{model}})', {
+									model: 'BAAI/bge-reranker-v2-m3'
 								})}
-								bind:value={embeddingModel}
+								bind:value={rerankingModel}
 							/>
 						</div>
 						<button
 							class="px-2.5 bg-gray-100 hover:bg-gray-200 text-gray-800 dark:bg-gray-850 dark:hover:bg-gray-800 dark:text-gray-100 rounded-lg transition"
 							on:click={() => {
-								embeddingModelUpdateHandler();
+								rerankingModelUpdateHandler();
 							}}
-							disabled={updateEmbeddingModelLoading}
+							disabled={updateRerankingModelLoading}
 						>
-							{#if updateEmbeddingModelLoading}
+							{#if updateRerankingModelLoading}
 								<div class="self-center">
 									<svg
 										class=" w-4 h-4"
@@ -407,343 +463,103 @@
 							{/if}
 						</button>
 					</div>
-				{/if}
-
-				<div class="mt-2 mb-1 text-xs text-gray-400 dark:text-gray-500">
-					{$i18n.t(
-						'Warning: If you update or change your embedding model, you will need to re-import all documents.'
-					)}
 				</div>
+			{/if}
+		</div>
 
-				<hr class=" dark:border-gray-700 my-3" />
-
-				{#if querySettings.hybrid === true}
-					<div class=" ">
-						<div class=" mb-2 text-sm font-medium">{$i18n.t('Update Reranking Model')}</div>
-
-						<div class="flex w-full">
-							<div class="flex-1 mr-2">
-								<input
-									class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
-									placeholder={$i18n.t('Update reranking model (e.g. {{model}})', {
-										model: rerankingModel.slice(-40)
-									})}
-									bind:value={rerankingModel}
-								/>
-							</div>
-							<button
-								class="px-2.5 bg-gray-100 hover:bg-gray-200 text-gray-800 dark:bg-gray-850 dark:hover:bg-gray-800 dark:text-gray-100 rounded-lg transition"
-								on:click={() => {
-									rerankingModelUpdateHandler();
-								}}
-								disabled={updateRerankingModelLoading}
-							>
-								{#if updateRerankingModelLoading}
-									<div class="self-center">
-										<svg
-											class=" w-4 h-4"
-											viewBox="0 0 24 24"
-											fill="currentColor"
-											xmlns="http://www.w3.org/2000/svg"
-											><style>
-												.spinner_ajPY {
-													transform-origin: center;
-													animation: spinner_AtaB 0.75s infinite linear;
-												}
-												@keyframes spinner_AtaB {
-													100% {
-														transform: rotate(360deg);
-													}
-												}
-											</style><path
-												d="M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z"
-												opacity=".25"
-											/><path
-												d="M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z"
-												class="spinner_ajPY"
-											/></svg
-										>
-									</div>
-								{:else}
-									<svg
-										xmlns="http://www.w3.org/2000/svg"
-										viewBox="0 0 16 16"
-										fill="currentColor"
-										class="w-4 h-4"
-									>
-										<path
-											d="M8.75 2.75a.75.75 0 0 0-1.5 0v5.69L5.03 6.22a.75.75 0 0 0-1.06 1.06l3.5 3.5a.75.75 0 0 0 1.06 0l3.5-3.5a.75.75 0 0 0-1.06-1.06L8.75 8.44V2.75Z"
-										/>
-										<path
-											d="M3.5 9.75a.75.75 0 0 0-1.5 0v1.5A2.75 2.75 0 0 0 4.75 14h6.5A2.75 2.75 0 0 0 14 11.25v-1.5a.75.75 0 0 0-1.5 0v1.5c0 .69-.56 1.25-1.25 1.25h-6.5c-.69 0-1.25-.56-1.25-1.25v-1.5Z"
-										/>
-									</svg>
-								{/if}
-							</button>
-						</div>
-					</div>
-
-					<hr class=" dark:border-gray-700 my-3" />
-				{/if}
-
-				<div class="  flex w-full justify-between">
-					<div class=" self-center text-xs font-medium">
-						{$i18n.t('Scan for documents from {{path}}', { path: '/data/docs' })}
-					</div>
+		<hr class=" dark:border-gray-700" />
 
-					<button
-						class=" self-center text-xs p-1 px-3 bg-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700 rounded-lg flex flex-row space-x-1 items-center {scanDirLoading
-							? ' cursor-not-allowed'
-							: ''}"
-						on:click={() => {
-							scanHandler();
-							console.log('check');
-						}}
-						type="button"
-						disabled={scanDirLoading}
+		{#if showResetConfirm}
+			<div class="flex justify-between rounded-md items-center py-2 px-3.5 w-full transition">
+				<div class="flex items-center space-x-3">
+					<svg
+						xmlns="http://www.w3.org/2000/svg"
+						viewBox="0 0 16 16"
+						fill="currentColor"
+						class="w-4 h-4"
 					>
-						<div class="self-center font-medium">{$i18n.t('Scan')}</div>
-
-						{#if scanDirLoading}
-							<div class="ml-3 self-center">
-								<svg
-									class=" w-3 h-3"
-									viewBox="0 0 24 24"
-									fill="currentColor"
-									xmlns="http://www.w3.org/2000/svg"
-									><style>
-										.spinner_ajPY {
-											transform-origin: center;
-											animation: spinner_AtaB 0.75s infinite linear;
-										}
-										@keyframes spinner_AtaB {
-											100% {
-												transform: rotate(360deg);
-											}
-										}
-									</style><path
-										d="M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z"
-										opacity=".25"
-									/><path
-										d="M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z"
-										class="spinner_ajPY"
-									/></svg
-								>
-							</div>
-						{/if}
-					</button>
-				</div>
-
-				<hr class=" dark:border-gray-700 my-3" />
-
-				<div class=" ">
-					<div class=" text-sm font-medium">{$i18n.t('Chunk Params')}</div>
-
-					<div class=" flex">
-						<div class="  flex w-full justify-between">
-							<div class="self-center text-xs font-medium min-w-fit">{$i18n.t('Chunk Size')}</div>
-
-							<div class="self-center p-3">
-								<input
-									class=" w-full rounded-lg py-1.5 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
-									type="number"
-									placeholder={$i18n.t('Enter Chunk Size')}
-									bind:value={chunkSize}
-									autocomplete="off"
-									min="0"
-								/>
-							</div>
-						</div>
-
-						<div class="flex w-full">
-							<div class=" self-center text-xs font-medium min-w-fit">
-								{$i18n.t('Chunk Overlap')}
-							</div>
-
-							<div class="self-center p-3">
-								<input
-									class="w-full rounded-lg py-1.5 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
-									type="number"
-									placeholder={$i18n.t('Enter Chunk Overlap')}
-									bind:value={chunkOverlap}
-									autocomplete="off"
-									min="0"
-								/>
-							</div>
-						</div>
-					</div>
-
-					<div class="pr-2">
-						<div class="flex justify-between items-center text-xs">
-							<div class=" text-xs font-medium">{$i18n.t('PDF Extract Images (OCR)')}</div>
-
-							<button
-								class=" text-xs font-medium text-gray-500"
-								type="button"
-								on:click={() => {
-									pdfExtractImages = !pdfExtractImages;
-								}}>{pdfExtractImages ? $i18n.t('On') : $i18n.t('Off')}</button
-							>
-						</div>
-					</div>
-				</div>
-
-				<hr class=" dark:border-gray-700 my-3" />
-
-				<div class=" ">
-					<div class=" text-sm font-medium">{$i18n.t('Query Params')}</div>
-
-					<div class=" flex">
-						<div class="  flex w-full justify-between">
-							<div class="self-center text-xs font-medium min-w-fit">{$i18n.t('Top K')}</div>
-
-							<div class="self-center p-3">
-								<input
-									class=" w-full rounded-lg py-1.5 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
-									type="number"
-									placeholder={$i18n.t('Enter Top K')}
-									bind:value={querySettings.k}
-									autocomplete="off"
-									min="0"
-								/>
-							</div>
-						</div>
-
-						{#if querySettings.hybrid === true}
-							<div class="flex w-full">
-								<div class=" self-center text-xs font-medium min-w-fit">
-									{$i18n.t('Minimum Score')}
-								</div>
-
-								<div class="self-center p-3">
-									<input
-										class=" w-full rounded-lg py-1.5 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
-										type="number"
-										step="0.01"
-										placeholder={$i18n.t('Enter Score')}
-										bind:value={querySettings.r}
-										autocomplete="off"
-										min="0.0"
-										title={$i18n.t('The score should be a value between 0.0 (0%) and 1.0 (100%).')}
-									/>
-								</div>
-							</div>
-						{/if}
-					</div>
-
-					{#if querySettings.hybrid === true}
-						<div class="mt-2 mb-1 text-xs text-gray-400 dark:text-gray-500">
-							{$i18n.t(
-								'Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.'
-							)}
-						</div>
-
-						<hr class=" dark:border-gray-700 my-3" />
-					{/if}
-
-					<div>
-						<div class=" mb-2.5 text-sm font-medium">{$i18n.t('RAG Template')}</div>
-						<textarea
-							bind:value={querySettings.template}
-							class="w-full rounded-lg px-4 py-3 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none resize-none"
-							rows="4"
+						<path d="M2 3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3Z" />
+						<path
+							fill-rule="evenodd"
+							d="M13 6H3v6a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V6ZM5.72 7.47a.75.75 0 0 1 1.06 0L8 8.69l1.22-1.22a.75.75 0 1 1 1.06 1.06L9.06 9.75l1.22 1.22a.75.75 0 1 1-1.06 1.06L8 10.81l-1.22 1.22a.75.75 0 0 1-1.06-1.06l1.22-1.22-1.22-1.22a.75.75 0 0 1 0-1.06Z"
+							clip-rule="evenodd"
 						/>
-					</div>
+					</svg>
+					<span>{$i18n.t('Are you sure?')}</span>
 				</div>
 
-				{#if showResetConfirm}
-					<div class="flex justify-between rounded-md items-center py-2 px-3.5 w-full transition">
-						<div class="flex items-center space-x-3">
-							<svg
-								xmlns="http://www.w3.org/2000/svg"
-								viewBox="0 0 16 16"
-								fill="currentColor"
-								class="w-4 h-4"
-							>
-								<path d="M2 3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3Z" />
-								<path
-									fill-rule="evenodd"
-									d="M13 6H3v6a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V6ZM5.72 7.47a.75.75 0 0 1 1.06 0L8 8.69l1.22-1.22a.75.75 0 1 1 1.06 1.06L9.06 9.75l1.22 1.22a.75.75 0 1 1-1.06 1.06L8 10.81l-1.22 1.22a.75.75 0 0 1-1.06-1.06l1.22-1.22-1.22-1.22a.75.75 0 0 1 0-1.06Z"
-									clip-rule="evenodd"
-								/>
-							</svg>
-							<span>{$i18n.t('Are you sure?')}</span>
-						</div>
+				<div class="flex space-x-1.5 items-center">
+					<button
+						class="hover:text-white transition"
+						on:click={() => {
+							const res = resetVectorDB(localStorage.token).catch((error) => {
+								toast.error(error);
+								return null;
+							});
 
-						<div class="flex space-x-1.5 items-center">
-							<button
-								class="hover:text-white transition"
-								on:click={() => {
-									const res = resetVectorDB(localStorage.token).catch((error) => {
-										toast.error(error);
-										return null;
-									});
-
-									if (res) {
-										toast.success($i18n.t('Success'));
-									}
+							if (res) {
+								toast.success($i18n.t('Success'));
+							}
 
-									showResetConfirm = false;
-								}}
-							>
-								<svg
-									xmlns="http://www.w3.org/2000/svg"
-									viewBox="0 0 20 20"
-									fill="currentColor"
-									class="w-4 h-4"
-								>
-									<path
-										fill-rule="evenodd"
-										d="M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z"
-										clip-rule="evenodd"
-									/>
-								</svg>
-							</button>
-							<button
-								class="hover:text-white transition"
-								on:click={() => {
-									showResetConfirm = false;
-								}}
-							>
-								<svg
-									xmlns="http://www.w3.org/2000/svg"
-									viewBox="0 0 20 20"
-									fill="currentColor"
-									class="w-4 h-4"
-								>
-									<path
-										d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"
-									/>
-								</svg>
-							</button>
-						</div>
-					</div>
-				{:else}
+							showResetConfirm = false;
+						}}
+					>
+						<svg
+							xmlns="http://www.w3.org/2000/svg"
+							viewBox="0 0 20 20"
+							fill="currentColor"
+							class="w-4 h-4"
+						>
+							<path
+								fill-rule="evenodd"
+								d="M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z"
+								clip-rule="evenodd"
+							/>
+						</svg>
+					</button>
 					<button
-						class=" flex rounded-md py-2 px-3.5 w-full hover:bg-gray-200 dark:hover:bg-gray-800 transition"
+						class="hover:text-white transition"
 						on:click={() => {
-							showResetConfirm = true;
+							showResetConfirm = false;
 						}}
 					>
-						<div class=" self-center mr-3">
-							<svg
-								xmlns="http://www.w3.org/2000/svg"
-								viewBox="0 0 16 16"
-								fill="currentColor"
-								class="w-4 h-4"
-							>
-								<path
-									fill-rule="evenodd"
-									d="M3.5 2A1.5 1.5 0 0 0 2 3.5v9A1.5 1.5 0 0 0 3.5 14h9a1.5 1.5 0 0 0 1.5-1.5v-7A1.5 1.5 0 0 0 12.5 4H9.621a1.5 1.5 0 0 1-1.06-.44L7.439 2.44A1.5 1.5 0 0 0 6.38 2H3.5Zm6.75 7.75a.75.75 0 0 0 0-1.5h-4.5a.75.75 0 0 0 0 1.5h4.5Z"
-									clip-rule="evenodd"
-								/>
-							</svg>
-						</div>
-						<div class=" self-center text-sm font-medium">{$i18n.t('Reset Vector Storage')}</div>
+						<svg
+							xmlns="http://www.w3.org/2000/svg"
+							viewBox="0 0 20 20"
+							fill="currentColor"
+							class="w-4 h-4"
+						>
+							<path
+								d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"
+							/>
+						</svg>
 					</button>
-				{/if}
+				</div>
 			</div>
-		</div>
+		{:else}
+			<button
+				class=" flex rounded-md py-2 px-3.5 w-full hover:bg-gray-200 dark:hover:bg-gray-800 transition"
+				on:click={() => {
+					showResetConfirm = true;
+				}}
+			>
+				<div class=" self-center mr-3">
+					<svg
+						xmlns="http://www.w3.org/2000/svg"
+						viewBox="0 0 16 16"
+						fill="currentColor"
+						class="w-4 h-4"
+					>
+						<path
+							fill-rule="evenodd"
+							d="M3.5 2A1.5 1.5 0 0 0 2 3.5v9A1.5 1.5 0 0 0 3.5 14h9a1.5 1.5 0 0 0 1.5-1.5v-7A1.5 1.5 0 0 0 12.5 4H9.621a1.5 1.5 0 0 1-1.06-.44L7.439 2.44A1.5 1.5 0 0 0 6.38 2H3.5Zm6.75 7.75a.75.75 0 0 0 0-1.5h-4.5a.75.75 0 0 0 0 1.5h4.5Z"
+							clip-rule="evenodd"
+						/>
+					</svg>
+				</div>
+				<div class=" self-center text-sm font-medium">{$i18n.t('Reset Vector Storage')}</div>
+			</button>
+		{/if}
 	</div>
 	<div class="flex justify-end pt-3 text-sm font-medium">
 		<button

+ 119 - 0
src/lib/components/documents/Settings/QueryParams.svelte

@@ -0,0 +1,119 @@
+<script lang="ts">
+	import { getDocs } from '$lib/apis/documents';
+	import {
+		getRAGConfig,
+		updateRAGConfig,
+		getQuerySettings,
+		scanDocs,
+		updateQuerySettings,
+		resetVectorDB,
+		getEmbeddingConfig,
+		updateEmbeddingConfig,
+		getRerankingConfig,
+		updateRerankingConfig
+	} from '$lib/apis/rag';
+
+	import { documents, models } from '$lib/stores';
+	import { onMount, getContext } from 'svelte';
+	import { toast } from 'svelte-sonner';
+
+	import Tooltip from '$lib/components/common/Tooltip.svelte';
+
+	const i18n = getContext('i18n');
+
+	export let saveHandler: Function;
+
+	let querySettings = {
+		template: '',
+		r: 0.0,
+		k: 4,
+		hybrid: false
+	};
+
+	const submitHandler = async () => {
+		querySettings = await updateQuerySettings(localStorage.token, querySettings);
+	};
+
+	onMount(async () => {
+		querySettings = await getQuerySettings(localStorage.token);
+	});
+</script>
+
+<form
+	class="flex flex-col h-full justify-between space-y-3 text-sm"
+	on:submit|preventDefault={() => {
+		submitHandler();
+		saveHandler();
+	}}
+>
+	<div class=" space-y-3 pr-1.5 overflow-y-scroll max-h-[22rem]">
+		<div class=" ">
+			<div class=" text-sm font-medium">{$i18n.t('Query Params')}</div>
+
+			<div class=" flex">
+				<div class="  flex w-full justify-between">
+					<div class="self-center text-xs font-medium min-w-fit">{$i18n.t('Top K')}</div>
+
+					<div class="self-center p-3">
+						<input
+							class=" w-full rounded-lg py-1.5 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
+							type="number"
+							placeholder={$i18n.t('Enter Top K')}
+							bind:value={querySettings.k}
+							autocomplete="off"
+							min="0"
+						/>
+					</div>
+				</div>
+
+				{#if querySettings.hybrid === true}
+					<div class="flex w-full">
+						<div class=" self-center text-xs font-medium min-w-fit">
+							{$i18n.t('Minimum Score')}
+						</div>
+
+						<div class="self-center p-3">
+							<input
+								class=" w-full rounded-lg py-1.5 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
+								type="number"
+								step="0.01"
+								placeholder={$i18n.t('Enter Score')}
+								bind:value={querySettings.r}
+								autocomplete="off"
+								min="0.0"
+								title={$i18n.t('The score should be a value between 0.0 (0%) and 1.0 (100%).')}
+							/>
+						</div>
+					</div>
+				{/if}
+			</div>
+
+			{#if querySettings.hybrid === true}
+				<div class="mt-2 mb-1 text-xs text-gray-400 dark:text-gray-500">
+					{$i18n.t(
+						'Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.'
+					)}
+				</div>
+
+				<hr class=" dark:border-gray-700 my-3" />
+			{/if}
+
+			<div>
+				<div class=" mb-2.5 text-sm font-medium">{$i18n.t('RAG Template')}</div>
+				<textarea
+					bind:value={querySettings.template}
+					class="w-full rounded-lg px-4 py-3 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none resize-none"
+					rows="4"
+				/>
+			</div>
+		</div>
+	</div>
+	<div class="flex justify-end pt-3 text-sm font-medium">
+		<button
+			class=" px-4 py-2 bg-emerald-700 hover:bg-emerald-800 text-gray-100 transition rounded-lg"
+			type="submit"
+		>
+			{$i18n.t('Save')}
+		</button>
+	</div>
+</form>

+ 102 - 0
src/lib/components/documents/Settings/WebParams.svelte

@@ -0,0 +1,102 @@
+<script lang="ts">
+	import { getRAGConfig, updateRAGConfig } from '$lib/apis/rag';
+
+	import { documents, models } from '$lib/stores';
+	import { onMount, getContext } from 'svelte';
+	import { toast } from 'svelte-sonner';
+
+	const i18n = getContext('i18n');
+
+	export let saveHandler: Function;
+
+	let webLoaderSSLVerification = true;
+
+	let youtubeLanguage = 'en';
+	let youtubeTranslation = null;
+
+	const submitHandler = async () => {
+		const res = await updateRAGConfig(localStorage.token, {
+			web_loader_ssl_verification: webLoaderSSLVerification,
+			youtube: {
+				language: youtubeLanguage.split(',').map((lang) => lang.trim()),
+				translation: youtubeTranslation
+			}
+		});
+	};
+
+	onMount(async () => {
+		const res = await getRAGConfig(localStorage.token);
+
+		if (res) {
+			webLoaderSSLVerification = res.web_loader_ssl_verification;
+			youtubeLanguage = res.youtube.language.join(',');
+			youtubeTranslation = res.youtube.translation;
+		}
+	});
+</script>
+
+<form
+	class="flex flex-col h-full justify-between space-y-3 text-sm"
+	on:submit|preventDefault={() => {
+		submitHandler();
+		saveHandler();
+	}}
+>
+	<div class=" space-y-3 pr-1.5 overflow-y-scroll h-full max-h-[22rem]">
+		<div>
+			<div class=" mb-1 text-sm font-medium">
+				{$i18n.t('Web Loader Settings')}
+			</div>
+
+			<div>
+				<div class=" py-0.5 flex w-full justify-between">
+					<div class=" self-center text-xs font-medium">
+						{$i18n.t('Bypass SSL verification for Websites')}
+					</div>
+
+					<button
+						class="p-1 px-3 text-xs flex rounded transition"
+						on:click={() => {
+							webLoaderSSLVerification = !webLoaderSSLVerification;
+							submitHandler();
+						}}
+						type="button"
+					>
+						{#if webLoaderSSLVerification === true}
+							<span class="ml-2 self-center">{$i18n.t('On')}</span>
+						{:else}
+							<span class="ml-2 self-center">{$i18n.t('Off')}</span>
+						{/if}
+					</button>
+				</div>
+			</div>
+
+			<div class=" mt-2 mb-1 text-sm font-medium">
+				{$i18n.t('Youtube Loader Settings')}
+			</div>
+
+			<div>
+				<div class=" py-0.5 flex w-full justify-between">
+					<div class=" w-20 text-xs font-medium self-center">{$i18n.t('Language')}</div>
+					<div class=" flex-1 self-center">
+						<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 language codes')}
+							bind:value={youtubeLanguage}
+							autocomplete="off"
+						/>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="flex justify-end pt-3 text-sm font-medium">
+		<button
+			class=" px-4 py-2 bg-emerald-700 hover:bg-emerald-800 text-gray-100 transition rounded-lg"
+			type="submit"
+		>
+			{$i18n.t('Save')}
+		</button>
+	</div>
+</form>

+ 102 - 8
src/lib/components/documents/SettingsModal.svelte

@@ -2,6 +2,10 @@
 	import { getContext } from 'svelte';
 	import Modal from '../common/Modal.svelte';
 	import General from './Settings/General.svelte';
+	import ChunkParams from './Settings/ChunkParams.svelte';
+	import QueryParams from './Settings/QueryParams.svelte';
+	import WebParams from './Settings/WebParams.svelte';
+	import { toast } from 'svelte-sonner';
 
 	const i18n = getContext('i18n');
 
@@ -62,25 +66,115 @@
 					</div>
 					<div class=" self-center">{$i18n.t('General')}</div>
 				</button>
+
+				<button
+					class="px-2.5 py-2.5 min-w-fit rounded-lg flex-1 md:flex-none flex text-right transition {selectedTab ===
+					'chunk'
+						? 'bg-gray-200 dark:bg-gray-700'
+						: ' hover:bg-gray-300 dark:hover:bg-gray-800'}"
+					on:click={() => {
+						selectedTab = 'chunk';
+					}}
+				>
+					<div class=" self-center mr-2">
+						<svg
+							xmlns="http://www.w3.org/2000/svg"
+							viewBox="0 0 24 24"
+							fill="currentColor"
+							class="w-4 h-4"
+						>
+							<path
+								fill-rule="evenodd"
+								d="M5.625 1.5H9a3.75 3.75 0 0 1 3.75 3.75v1.875c0 1.036.84 1.875 1.875 1.875H16.5a3.75 3.75 0 0 1 3.75 3.75v7.875c0 1.035-.84 1.875-1.875 1.875H5.625a1.875 1.875 0 0 1-1.875-1.875V3.375c0-1.036.84-1.875 1.875-1.875ZM12.75 12a.75.75 0 0 0-1.5 0v2.25H9a.75.75 0 0 0 0 1.5h2.25V18a.75.75 0 0 0 1.5 0v-2.25H15a.75.75 0 0 0 0-1.5h-2.25V12Z"
+								clip-rule="evenodd"
+							/>
+							<path
+								d="M14.25 5.25a5.23 5.23 0 0 0-1.279-3.434 9.768 9.768 0 0 1 6.963 6.963A5.23 5.23 0 0 0 16.5 7.5h-1.875a.375.375 0 0 1-.375-.375V5.25Z"
+							/>
+						</svg>
+					</div>
+					<div class=" self-center">{$i18n.t('Chunk Params')}</div>
+				</button>
+
+				<button
+					class="px-2.5 py-2.5 min-w-fit rounded-lg flex-1 md:flex-none flex text-right transition {selectedTab ===
+					'query'
+						? 'bg-gray-200 dark:bg-gray-700'
+						: ' hover:bg-gray-300 dark:hover:bg-gray-800'}"
+					on:click={() => {
+						selectedTab = 'query';
+					}}
+				>
+					<div class=" self-center mr-2">
+						<svg
+							xmlns="http://www.w3.org/2000/svg"
+							viewBox="0 0 24 24"
+							fill="currentColor"
+							class="w-4 h-4"
+						>
+							<path d="M11.625 16.5a1.875 1.875 0 1 0 0-3.75 1.875 1.875 0 0 0 0 3.75Z" />
+							<path
+								fill-rule="evenodd"
+								d="M5.625 1.5H9a3.75 3.75 0 0 1 3.75 3.75v1.875c0 1.036.84 1.875 1.875 1.875H16.5a3.75 3.75 0 0 1 3.75 3.75v7.875c0 1.035-.84 1.875-1.875 1.875H5.625a1.875 1.875 0 0 1-1.875-1.875V3.375c0-1.036.84-1.875 1.875-1.875Zm6 16.5c.66 0 1.277-.19 1.797-.518l1.048 1.048a.75.75 0 0 0 1.06-1.06l-1.047-1.048A3.375 3.375 0 1 0 11.625 18Z"
+								clip-rule="evenodd"
+							/>
+							<path
+								d="M14.25 5.25a5.23 5.23 0 0 0-1.279-3.434 9.768 9.768 0 0 1 6.963 6.963A5.23 5.23 0 0 0 16.5 7.5h-1.875a.375.375 0 0 1-.375-.375V5.25Z"
+							/>
+						</svg>
+					</div>
+					<div class=" self-center">{$i18n.t('Query Params')}</div>
+				</button>
+
+				<button
+					class="px-2.5 py-2.5 min-w-fit rounded-lg flex-1 md:flex-none flex text-right transition {selectedTab ===
+					'web'
+						? 'bg-gray-200 dark:bg-gray-700'
+						: ' hover:bg-gray-300 dark:hover:bg-gray-800'}"
+					on:click={() => {
+						selectedTab = 'web';
+					}}
+				>
+					<div class=" self-center mr-2">
+						<svg
+							xmlns="http://www.w3.org/2000/svg"
+							viewBox="0 0 24 24"
+							fill="currentColor"
+							class="w-4 h-4"
+						>
+							<path
+								d="M21.721 12.752a9.711 9.711 0 0 0-.945-5.003 12.754 12.754 0 0 1-4.339 2.708 18.991 18.991 0 0 1-.214 4.772 17.165 17.165 0 0 0 5.498-2.477ZM14.634 15.55a17.324 17.324 0 0 0 .332-4.647c-.952.227-1.945.347-2.966.347-1.021 0-2.014-.12-2.966-.347a17.515 17.515 0 0 0 .332 4.647 17.385 17.385 0 0 0 5.268 0ZM9.772 17.119a18.963 18.963 0 0 0 4.456 0A17.182 17.182 0 0 1 12 21.724a17.18 17.18 0 0 1-2.228-4.605ZM7.777 15.23a18.87 18.87 0 0 1-.214-4.774 12.753 12.753 0 0 1-4.34-2.708 9.711 9.711 0 0 0-.944 5.004 17.165 17.165 0 0 0 5.498 2.477ZM21.356 14.752a9.765 9.765 0 0 1-7.478 6.817 18.64 18.64 0 0 0 1.988-4.718 18.627 18.627 0 0 0 5.49-2.098ZM2.644 14.752c1.682.971 3.53 1.688 5.49 2.099a18.64 18.64 0 0 0 1.988 4.718 9.765 9.765 0 0 1-7.478-6.816ZM13.878 2.43a9.755 9.755 0 0 1 6.116 3.986 11.267 11.267 0 0 1-3.746 2.504 18.63 18.63 0 0 0-2.37-6.49ZM12 2.276a17.152 17.152 0 0 1 2.805 7.121c-.897.23-1.837.353-2.805.353-.968 0-1.908-.122-2.805-.353A17.151 17.151 0 0 1 12 2.276ZM10.122 2.43a18.629 18.629 0 0 0-2.37 6.49 11.266 11.266 0 0 1-3.746-2.504 9.754 9.754 0 0 1 6.116-3.985Z"
+							/>
+						</svg>
+					</div>
+					<div class=" self-center">{$i18n.t('Web Params')}</div>
+				</button>
 			</div>
 			<div class="flex-1 md:min-h-[380px]">
 				{#if selectedTab === 'general'}
 					<General
 						saveHandler={() => {
-							show = false;
+							toast.success($i18n.t('Settings saved successfully!'));
+						}}
+					/>
+				{:else if selectedTab === 'chunk'}
+					<ChunkParams
+						saveHandler={() => {
+							toast.success($i18n.t('Settings saved successfully!'));
 						}}
 					/>
-					<!-- <General
+				{:else if selectedTab === 'query'}
+					<QueryParams
 						saveHandler={() => {
-							show = false;
+							toast.success($i18n.t('Settings saved successfully!'));
 						}}
-					/> -->
-					<!-- {:else if selectedTab === 'users'}
-					<Users
+					/>
+				{:else if selectedTab === 'web'}
+					<WebParams
 						saveHandler={() => {
-							show = false;
+							toast.success($i18n.t('Settings saved successfully!'));
 						}}
-					/> -->
+					/>
 				{/if}
 			</div>
 		</div>

+ 55 - 23
src/lib/components/layout/Sidebar.svelte

@@ -44,6 +44,28 @@
 	let showDropdown = false;
 	let isEditing = false;
 
+	let filteredChatList = [];
+
+	$: filteredChatList = $chats.filter((chat) => {
+		if (search === '') {
+			return true;
+		} else {
+			let title = chat.title.toLowerCase();
+			const query = search.toLowerCase();
+
+			let contentMatches = false;
+			// Access the messages within chat.chat.messages
+			if (chat.chat && chat.chat.messages && Array.isArray(chat.chat.messages)) {
+				contentMatches = chat.chat.messages.some((message) => {
+					// Check if message.content exists and includes the search query
+					return message.content && message.content.toLowerCase().includes(query);
+				});
+			}
+
+			return title.includes(query) || contentMatches;
+		}
+	});
+
 	onMount(async () => {
 		showSidebar.set(window.innerWidth > BREAKPOINT);
 		await chats.set(await getChatList(localStorage.token));
@@ -112,7 +134,7 @@
 
 	const editChatTitle = async (id, _title) => {
 		if (_title === '') {
-			toast.error('Title cannot be an empty string.');
+			toast.error($i18n.t('Title cannot be an empty string.'));
 		} else {
 			title = _title;
 
@@ -397,7 +419,7 @@
 							await chats.set(await getChatList(localStorage.token));
 						}}
 					>
-						all
+						{$i18n.t('all')}
 					</button>
 					{#each $tags as tag}
 						<button
@@ -418,25 +440,35 @@
 			{/if}
 
 			<div class="pl-2 my-2 flex-1 flex flex-col space-y-1 overflow-y-auto scrollbar-none">
-				{#each $chats.filter((chat) => {
-					if (search === '') {
-						return true;
-					} else {
-						let title = chat.title.toLowerCase();
-						const query = search.toLowerCase();
-
-						let contentMatches = false;
-						// Access the messages within chat.chat.messages
-						if (chat.chat && chat.chat.messages && Array.isArray(chat.chat.messages)) {
-							contentMatches = chat.chat.messages.some((message) => {
-								// Check if message.content exists and includes the search query
-								return message.content && message.content.toLowerCase().includes(query);
-							});
-						}
-
-						return title.includes(query) || contentMatches;
-					}
-				}) as chat, i}
+				{#each filteredChatList as chat, idx}
+					{#if idx === 0 || (idx > 0 && chat.time_range !== filteredChatList[idx - 1].time_range)}
+						<div
+							class="w-full pl-2.5 text-xs text-gray-500 dark:text-gray-500 font-medium {idx === 0
+								? ''
+								: 'pt-5'} pb-0.5"
+						>
+							{$i18n.t(chat.time_range)}
+							<!-- localisation keys for time_range to be recognized from the i18next parser (so they don't get automatically removed):
+							{$i18n.t('Today')}
+							{$i18n.t('Yesterday')}
+							{$i18n.t('Previous 7 days')}
+							{$i18n.t('Previous 30 days')}
+							{$i18n.t('January')}
+							{$i18n.t('February')}
+							{$i18n.t('March')}
+							{$i18n.t('April')}
+							{$i18n.t('May')}
+							{$i18n.t('June')}
+							{$i18n.t('July')}
+							{$i18n.t('August')}
+							{$i18n.t('September')}
+							{$i18n.t('October')}
+							{$i18n.t('November')}
+							{$i18n.t('December')}
+							-->
+						</div>
+					{/if}
+
 					<div class=" w-full pr-2 relative group">
 						{#if chatTitleEditId === chat.id}
 							<div
@@ -836,12 +868,12 @@
 					>
 						<div class="flex h-6 w-6 flex-col items-center">
 							<div
-								class="h-3 w-1 rounded-full bg-[#0f0f0f] dark:bg-white rotate-0 translate-y-[0.15rem] {show
+								class="h-3 w-1 rounded-full bg-[#0f0f0f] dark:bg-white rotate-0 translate-y-[0.15rem] {$showSidebar
 									? 'group-hover:rotate-[15deg]'
 									: 'group-hover:rotate-[-15deg]'}"
 							/>
 							<div
-								class="h-3 w-1 rounded-full bg-[#0f0f0f] dark:bg-white rotate-0 translate-y-[-0.15rem] {show
+								class="h-3 w-1 rounded-full bg-[#0f0f0f] dark:bg-white rotate-0 translate-y-[-0.15rem] {$showSidebar
 									? 'group-hover:rotate-[-15deg]'
 									: 'group-hover:rotate-[15deg]'}"
 							/>

+ 3 - 1
src/lib/components/layout/Sidebar/ArchivedChatsModal.svelte

@@ -161,7 +161,9 @@
 						{/each} -->
 					</div>
 				{:else}
-					<div class="text-left text-sm w-full mb-8">You have no archived conversations.</div>
+					<div class="text-left text-sm w-full mb-8">
+						{$i18n.t('You have no archived conversations.')}
+					</div>
 				{/if}
 			</div>
 		</div>

+ 10 - 4
src/lib/components/layout/Sidebar/ChatMenu.svelte

@@ -49,7 +49,7 @@
 				}}
 			>
 				<Share />
-				<div class="flex items-center">Share</div>
+				<div class="flex items-center">{$i18n.t('Share')}</div>
 			</DropdownMenu.Item>
 
 			<DropdownMenu.Item
@@ -59,7 +59,7 @@
 				}}
 			>
 				<Pencil strokeWidth="2" />
-				<div class="flex items-center">Rename</div>
+				<div class="flex items-center">{$i18n.t('Rename')}</div>
 			</DropdownMenu.Item>
 
 			<DropdownMenu.Item
@@ -69,13 +69,19 @@
 				}}
 			>
 				<GarbageBin strokeWidth="2" />
-				<div class="flex items-center">Delete</div>
+				<div class="flex items-center">{$i18n.t('Delete')}</div>
 			</DropdownMenu.Item>
 
 			<hr class="border-gray-100 dark:border-gray-800 mt-2.5 mb-1.5" />
 
 			<div class="flex p-1">
-				<Tags {chatId} />
+				<Tags
+					{chatId}
+					on:close={() => {
+						show = false;
+						onClose();
+					}}
+				/>
 			</div>
 		</DropdownMenu.Content>
 	</div>

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

@@ -0,0 +1,495 @@
+{
+	"'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "",
+	"(Beta)": "(تجريبي)",
+	"(e.g. `sh webui.sh --api`)": "(مثال `sh webui.sh --api`)",
+	"(latest)": "(الأخير)",
+	"{{modelName}} is thinking...": "{{modelName}} ...يفكر",
+	"{{user}}'s Chats": "{{user}}' الدردشات",
+	"{{webUIName}} Backend Required": "",
+	"a user": "المستخدم",
+	"About": "عن",
+	"Account": "الحساب",
+	"Accurate information": "معلومات دقيقة",
+	"Add a model": "أضافة موديل",
+	"Add a model tag name": "ضع تاق للأسم الموديل",
+	"Add a short description about what this modelfile does": "أضف وصفًا قصيرًا حول ما يفعله ملف الموديل هذا",
+	"Add a short title for this prompt": "أضف عنوانًا قصيرًا لبداء المحادثة",
+	"Add a tag": "أضافة تاق",
+	"Add custom prompt": "",
+	"Add Docs": "إضافة المستندات",
+	"Add Files": "إضافة ملفات",
+	"Add message": "اضافة رسالة",
+	"Add Model": "اضافة موديل",
+	"Add Tags": "اضافة تاق",
+	"Add User": "اضافة مستخدم",
+	"Adjusting these settings will apply changes universally to all users.": "سيؤدي ضبط هذه الإعدادات إلى تطبيق التغييرات بشكل عام على كافة المستخدمين.",
+	"admin": "المشرف",
+	"Admin Panel": "لوحة التحكم",
+	"Admin Settings": "اعدادات المشرف",
+	"Advanced Parameters": "التعليمات المتقدمة",
+	"all": "الكل",
+	"All Documents": "",
+	"All Users": "جميع المستخدمين",
+	"Allow": "يسمح",
+	"Allow Chat Deletion": "يستطيع حذف المحادثات",
+	"alphanumeric characters and hyphens": "الأحرف الأبجدية الرقمية والواصلات",
+	"Already have an account?": "هل تملك حساب ؟",
+	"an assistant": "مساعد",
+	"and": "و",
+	"and create a new shared link.": "",
+	"API Base URL": "API الرابط الرئيسي",
+	"API Key": "API مفتاح",
+	"API Key created.": "API تم أنشاء المفتاح",
+	"API keys": "API المفاتيح",
+	"API RPM": "API RPM",
+	"April": "",
+	"Archive": "الأرشيف",
+	"Archived Chats": "الأرشيف المحادثات",
+	"are allowed - Activate this command by typing": "مسموح - قم بتنشيط هذا الأمر عن طريق الكتابة",
+	"Are you sure?": "هل أنت متأكد ؟",
+	"Attach file": "",
+	"Attention to detail": "انتبه للتفاصيل",
+	"Audio": "صوتي",
+	"August": "",
+	"Auto-playback response": "استجابة التشغيل التلقائي",
+	"Auto-send input after 3 sec.": "إرسال تلقائي للإدخال بعد 3 ثوانٍ.",
+	"AUTOMATIC1111 Base URL": "AUTOMATIC1111 الرابط الرئيسي",
+	"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 الرابط مطلوب",
+	"available!": "متاح",
+	"Back": "خلف",
+	"Bad Response": "استجابة خطاء",
+	"before": "",
+	"Being lazy": "كون كسول",
+	"Builder Mode": "بناء الموديل",
+	"Bypass SSL verification for Websites": "",
+	"Cancel": "اللغاء",
+	"Categories": "التصنيفات",
+	"Change Password": "تغير الباسورد",
+	"Chat": "المحادثة",
+	"Chat History": "تاريخ المحادثة",
+	"Chat History is off for this browser.": "سجل الدردشة معطل لهذا المتصفح.",
+	"Chats": "المحادثات",
+	"Check Again": "تحقق مرة اخرى",
+	"Check for updates": "تحقق من التحديثات",
+	"Checking for updates...": "البحث عن تحديثات",
+	"Choose a model before saving...": "أختار موديل قبل الحفظ",
+	"Chunk Overlap": "Chunk تداخل",
+	"Chunk Params": "Chunk المتغيرات",
+	"Chunk Size": "Chunk حجم",
+	"Citation": "",
+	"Click here for help.": "أضغط هنا للمساعدة",
+	"Click here to": "",
+	"Click here to check other modelfiles.": "انقر هنا للتحقق من ملفات الموديلات الأخرى.",
+	"Click here to select": "أضغط هنا للاختيار",
+	"Click here to select a csv file.": "أضغط هنا للاختيار ملف csv",
+	"Click here to select documents.": "انقر هنا لاختيار المستندات.",
+	"click here.": "أضغط هنا",
+	"Click on the user role button to change a user's role.": "أضغط على أسم الصلاحيات لتغيرها للمستخدم",
+	"Close": "أغلق",
+	"Collection": "مجموعة",
+	"ComfyUI": "ComfyUI",
+	"ComfyUI Base URL": "ComfyUI الرابط الافتراضي",
+	"ComfyUI Base URL is required.": "ComfyUI الرابط مطلوب",
+	"Command": "الأوامر",
+	"Confirm Password": "تأكيد كلمة المرور",
+	"Connections": "اتصالات",
+	"Content": "الاتصال",
+	"Context Length": "طول السياق",
+	"Continue Response": "متابعة الرد",
+	"Conversation Mode": "وضع المحادثة",
+	"Copied shared chat URL to clipboard!": "تم نسخ عنوان URL للدردشة المشتركة إلى الحافظة!",
+	"Copy": "نسخ",
+	"Copy last code block": "انسخ كتلة التعليمات البرمجية الأخيرة",
+	"Copy last response": "انسخ الرد الأخير",
+	"Copy Link": "أنسخ الرابط",
+	"Copying to clipboard was successful!": "تم النسخ إلى الحافظة بنجاح!",
+	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "قم بإنشاء عبارة موجزة مكونة من 3-5 كلمات كرأس للاستعلام التالي، مع الالتزام الصارم بالحد الأقصى لعدد الكلمات الذي يتراوح بين 3-5 كلمات وتجنب استخدام الكلمة 'عنوان':",
+	"Create a modelfile": "إنشاء ملف نموذجي",
+	"Create Account": "إنشاء حساب",
+	"Create new key": "",
+	"Create new secret key": "",
+	"Created at": "أنشئت في",
+	"Created At": "أنشئت من",
+	"Current Model": "الموديل المختار",
+	"Current Password": "كلمة السر الحالية",
+	"Custom": "مخصص",
+	"Customize Ollama models for a specific purpose": "تخصيص الموديل Ollama لغرض محدد",
+	"Dark": "مظلم",
+	"Dashboard": "",
+	"Database": "قاعدة البيانات",
+	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
+	"December": "",
+	"Default": "الإفتراضي",
+	"Default (Automatic1111)": "الإفتراضي (Automatic1111)",
+	"Default (SentenceTransformers)": "الإفتراضي (SentenceTransformers)",
+	"Default (Web API)": "الإفتراضي (Web API)",
+	"Default model updated": "الإفتراضي تحديث الموديل",
+	"Default Prompt Suggestions": "الإفتراضي Prompt الاقتراحات",
+	"Default User Role": "الإفتراضي صلاحيات المستخدم",
+	"delete": "حذف",
+	"Delete": "حذف.",
+	"Delete a model": "حذف الموديل",
+	"Delete chat": "حذف المحادثه",
+	"Delete Chat": "حذف المحادثه.",
+	"Delete Chats": "حذ المحادثات",
+	"delete this link": "",
+	"Delete User": "حذف المستخدم",
+	"Deleted {{deleteModelTag}}": "حذف {{deleteModelTag}}",
+	"Deleted {{tagName}}": "حذف {{tagName}}",
+	"Description": "وصف",
+	"Didn't fully follow instructions": "لم أتبع التعليمات بشكل كامل",
+	"Disabled": "تعطيل",
+	"Discover a modelfile": "اكتشاف ملف نموذجي",
+	"Discover a prompt": "اكتشاف موجه",
+	"Discover, download, and explore custom prompts": "اكتشاف وتنزيل واستكشاف المطالبات المخصصة",
+	"Discover, download, and explore model presets": "اكتشاف وتنزيل واستكشاف الإعدادات المسبقة للنموذج",
+	"Display the username instead of You in the Chat": "اعرض اسم المستخدم بدلاً منك في الدردشة",
+	"Document": "المستند",
+	"Document Settings": "أعدادات المستند",
+	"Documents": "مستندات",
+	"does not make any external connections, and your data stays securely on your locally hosted server.": "لا يجري أي اتصالات خارجية، وتظل بياناتك آمنة على الخادم المستضاف محليًا.",
+	"Don't Allow": "لا تسمح بذلك",
+	"Don't have an account?": "ليس لديك حساب؟",
+	"Don't like the style": "لا أحب النمط",
+	"Download": "تحميل",
+	"Download canceled": "",
+	"Download Database": "تحميل قاعدة البيانات",
+	"Drop any files here to add to the conversation": "أسقط أية ملفات هنا لإضافتها إلى المحادثة",
+	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "e.g. '30s','10m'. الوحدات الزمنية الصالحة هي 's', 'm', 'h'.",
+	"Edit": "تعديل",
+	"Edit Doc": "تعديل الملف",
+	"Edit User": "تعديل المستخدم",
+	"Email": "البريد",
+	"Embedding Model": "",
+	"Embedding Model Engine": "تضمين محرك النموذج",
+	"Embedding model set to \"{{embedding_model}}\"": "تم تعيين نموذج التضمين على \"{{embedding_model}}\"",
+	"Enable Chat History": "تمكين سجل الدردشة",
+	"Enable New Sign Ups": "تفعيل عمليات التسجيل الجديدة",
+	"Enabled": "تفعيل",
+	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "تأكد من أن ملف CSV الخاص بك يتضمن 4 أعمدة بهذا الترتيب: Name, Email, Password, Role.",
+	"Enter {{role}} message here": "أدخل رسالة {{role}} هنا",
+	"Enter Chunk Overlap": "أدخل Chunk المتداخل",
+	"Enter Chunk Size": "أدخل Chunk الحجم",
+	"Enter Image Size (e.g. 512x512)": "أدخل حجم الصورة (e.g. 512x512)",
+	"Enter language codes": "",
+	"Enter LiteLLM API Base URL (litellm_params.api_base)": "أدخل عنوان URL الأساسي لواجهة برمجة تطبيقات LiteLLM (litellm_params.api_base)",
+	"Enter LiteLLM API Key (litellm_params.api_key)": "أدخل مفتاح LiteLLM API (litellm_params.api_key)",
+	"Enter LiteLLM API RPM (litellm_params.rpm)": "أدخل LiteLLM API RPM (litllm_params.rpm)",
+	"Enter LiteLLM Model (litellm_params.model)": "أدخل LiteLLM الموديل (litellm_params.model)",
+	"Enter Max Tokens (litellm_params.max_tokens)": "أدخل أكثر Tokens (litellm_params.max_tokens)",
+	"Enter model tag (e.g. {{modelTag}})": "أدخل الموديل تاق (e.g. {{modelTag}})",
+	"Enter Number of Steps (e.g. 50)": "أدخل عدد الخطوات (e.g. 50)",
+	"Enter Score": "أدخل النتيجة",
+	"Enter stop sequence": "أدخل تسلسل التوقف",
+	"Enter Top K": "Enter Top K",
+	"Enter URL (e.g. http://127.0.0.1:7860/)": "الرابط (e.g. http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "",
+	"Enter Your Email": "أدخل البريد الاكتروني",
+	"Enter Your Full Name": "أدخل الاسم كامل",
+	"Enter Your Password": "ادخل كلمة المرور",
+	"Enter Your Role": "أدخل الصلاحيات",
+	"Experimental": "تجريبي",
+	"Export All Chats (All Users)": "تصدير جميع الدردشات (جميع المستخدمين)",
+	"Export Chats": "تصدير جميع الدردشات",
+	"Export Documents Mapping": "تصدير وثائق الخرائط",
+	"Export Modelfiles": "تصدير ملفات النماذج",
+	"Export Prompts": "مطالبات التصدير",
+	"Failed to create API Key.": "فشل في إنشاء مفتاح API.",
+	"Failed to read clipboard contents": "فشل في قراءة محتويات الحافظة",
+	"February": "",
+	"Feel free to add specific details": "لا تتردد في إضافة تفاصيل محددة",
+	"File Mode": "وضع الملف",
+	"File not found.": "لم يتم العثور على الملف.",
+	"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "تم اكتشاف انتحال بصمة الإصبع: غير قادر على استخدام الأحرف الأولى كصورة رمزية. الافتراضي لصورة الملف الشخصي الافتراضية.",
+	"Fluidly stream large external response chunks": "دفق قطع الاستجابة الخارجية الكبيرة بسلاسة",
+	"Focus chat input": "التركيز على إدخال الدردشة",
+	"Followed instructions perfectly": "اتبعت التعليمات على أكمل وجه",
+	"Format your variables using square brackets like this:": "قم بتنسيق المتغيرات الخاصة بك باستخدام الأقواس المربعة مثل هذا:",
+	"From (Base Model)": "من (الموديل الافتراضي)",
+	"Full Screen Mode": "وضع ملء الشاشة",
+	"General": "عام",
+	"General Settings": "الاعدادات العامة",
+	"Generation Info": "معلومات الجيل",
+	"Good Response": "استجابة جيدة",
+	"has no conversations.": "ليس لديه محادثات.",
+	"Hello, {{name}}": "مرحبا, {{name}}",
+	"Help": "",
+	"Hide": "أخفاء",
+	"Hide Additional Params": "إخفاء المعلمات الإضافية",
+	"How can I help you today?": "كيف استطيع مساعدتك اليوم؟",
+	"Hybrid Search": "البحث الهجين",
+	"Image Generation (Experimental)": "توليد الصور (تجريبي)",
+	"Image Generation Engine": "محرك توليد الصور",
+	"Image Settings": "إعدادات الصورة",
+	"Images": "الصور",
+	"Import Chats": "استيراد الدردشات",
+	"Import Documents Mapping": "استيراد خرائط المستندات",
+	"Import Modelfiles": "استيراد ملفات النماذج",
+	"Import Prompts": "مطالبات الاستيراد",
+	"Include `--api` flag when running stable-diffusion-webui": "قم بتضمين علامة `-api` عند تشغيل Stable-diffusion-webui",
+	"Input commands": "",
+	"Interface": "واجهه المستخدم",
+	"Invalid Tag": "",
+	"January": "",
+	"join our Discord for help.": "انضم إلى Discord للحصول على المساعدة.",
+	"JSON": "JSON",
+	"July": "",
+	"June": "",
+	"JWT Expiration": "JWT تجريبي",
+	"JWT Token": "JWT Token",
+	"Keep Alive": "Keep Alive",
+	"Keyboard shortcuts": "اختصارات لوحة المفاتيح",
+	"Language": "اللغة",
+	"Last Active": "آخر نشاط",
+	"Light": "فاتح",
+	"Listening...": "جاري الاستماع...",
+	"LLMs can make mistakes. Verify important information.": "يمكن أن يرتكب LLM الأخطاء. التحقق من المعلومات الهامة.",
+	"Made by OpenWebUI Community": "تم إنشاؤه بواسطة مجتمع OpenWebUI",
+	"Make sure to enclose them with": "تأكد من إرفاقها",
+	"Manage LiteLLM Models": "إدارة نماذج LiteLLM",
+	"Manage Models": "إدارة النماذج",
+	"Manage Ollama Models": "إدارة موديلات Ollama",
+	"March": "",
+	"Max Tokens": "Max Tokens",
+	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "يمكن تنزيل 3 نماذج كحد أقصى في وقت واحد. الرجاء معاودة المحاولة في وقت لاحق.",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
+	"Minimum Score": "الحد الأدنى من النقاط",
+	"Mirostat": "Mirostat",
+	"Mirostat Eta": "Mirostat Eta",
+	"Mirostat Tau": "Mirostat Tau",
+	"MMMM DD, YYYY": "MMMM DD, YYYY",
+	"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
+	"Model '{{modelName}}' has been successfully downloaded.": "موديل '{{modelName}}'تم تحميله بنجاح",
+	"Model '{{modelTag}}' is already in queue for downloading.": "موديل '{{modelTag}}' جاري تحميلة الرجاء الانتظار",
+	"Model {{modelId}} not found": "موديل {{modelId}} لم يوجد",
+	"Model {{modelName}} already exists.": "موديل {{modelName}} موجود",
+	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "تم اكتشاف مسار نظام الملفات النموذجي. الاسم المختصر للنموذج مطلوب للتحديث، ولا يمكن الاستمرار.",
+	"Model Name": "أسم الموديل",
+	"Model not selected": "لم تختار موديل",
+	"Model Tag Name": "أسم التاق للموديل",
+	"Model Whitelisting": "القائمة البيضاء للموديل",
+	"Model(s) Whitelisted": "القائمة البيضاء الموديل",
+	"Modelfile": "ملف نموذجي",
+	"Modelfile Advanced Settings": "الإعدادات المتقدمة لملف النموذج",
+	"Modelfile Content": "محتوى الملف النموذجي",
+	"Modelfiles": "ملفات الموديل",
+	"Models": "الموديلات",
+	"More": "المزيد",
+	"My Documents": "مستنداتي",
+	"My Modelfiles": "ملفاتي النموذجية",
+	"My Prompts": "مطالباتي",
+	"Name": "الأسم",
+	"Name Tag": "أسم التاق",
+	"Name your modelfile": "قم بتسمية ملف النموذج الخاص بك",
+	"New Chat": "دردشة جديدة",
+	"New Password": "كلمة المرور الجديدة",
+	"No results found": "",
+	"No source available": "",
+	"Not factually correct": "ليس صحيحا من حيث الواقع",
+	"Not sure what to add?": "لست متأكدا ما يجب إضافته؟",
+	"Not sure what to write? Switch to": "لست متأكدا ماذا أكتب؟ التبديل إلى",
+	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "ملاحظة: إذا قمت بتعيين الحد الأدنى من النقاط، فلن يؤدي البحث إلا إلى إرجاع المستندات التي لها نقاط أكبر من أو تساوي الحد الأدنى من النقاط.",
+	"Notifications": "إشعارات",
+	"November": "",
+	"October": "",
+	"Off": "أغلاق",
+	"Okay, Let's Go!": "حسنا دعنا نذهب!",
+	"OLED Dark": "OLED داكن",
+	"Ollama": "Ollama",
+	"Ollama Base URL": "Ollama الرابط الافتراضي",
+	"Ollama Version": "Ollama الاصدار",
+	"On": "تشغيل",
+	"Only": "فقط",
+	"Only alphanumeric characters and hyphens are allowed in the command string.": "يُسمح فقط بالأحرف الأبجدية الرقمية والواصلات في سلسلة الأمر.",
+	"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.": "خطاء! تمسك بقوة! ملفاتك لا تزال في فرن المعالجة. نحن نطبخهم إلى حد الكمال. يرجى التحلي بالصبر وسنخبرك عندما يصبحون جاهزين.",
+	"Oops! Looks like the URL is invalid. Please double-check and try again.": "خطاء! يبدو أن عنوان URL غير صالح. يرجى التحقق مرة أخرى والمحاولة مرة أخرى.",
+	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "خطاء! أنت تستخدم طريقة غير مدعومة (الواجهة الأمامية فقط). يرجى تقديم واجهة WebUI من الواجهة الخلفية.",
+	"Open": "فتح",
+	"Open AI": "فتح AI",
+	"Open AI (Dall-E)": "فتح AI (Dall-E)",
+	"Open new chat": "فتح محادثة جديده",
+	"OpenAI": "OpenAI",
+	"OpenAI API": "OpenAI API",
+	"OpenAI API Config": "OpenAI API إعدادات",
+	"OpenAI API Key is required.": "مطلوب مفتاح OpenAI API.",
+	"OpenAI URL/Key required.": "مطلوب عنوان URL/مفتاح OpenAI.",
+	"or": "أو",
+	"Other": "آخر",
+	"Overview": "",
+	"Parameters": "Parameters",
+	"Password": "الباسورد",
+	"PDF document (.pdf)": "PDF ملف (.pdf)",
+	"PDF Extract Images (OCR)": "PDF أستخرج الصور (OCR)",
+	"pending": "قيد الانتظار",
+	"Permission denied when accessing microphone: {{error}}": "تم رفض الإذن عند الوصول إلى الميكروفون: {{error}}",
+	"Plain text (.txt)": "نص عادي (.txt)",
+	"Playground": "مكان التجربة",
+	"Positive attitude": "موقف ايجابي",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
+	"Profile Image": "صورة الملف الشخصي",
+	"Prompt": "",
+	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "موجه (على سبيل المثال: أخبرني بحقيقة ممتعة عن الإمبراطورية الرومانية)",
+	"Prompt Content": "محتوى عاجل",
+	"Prompt suggestions": "اقتراحات سريعة",
+	"Prompts": "حث",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
+	"Pull a model from Ollama.com": "سحب الموديل من Ollama.com",
+	"Pull Progress": "سحب التقدم",
+	"Query Params": "Query Params",
+	"RAG Template": "RAG تنمبلت",
+	"Raw Format": "Raw فورمات",
+	"Read Aloud": "أقراء لي",
+	"Record voice": "سجل صوت",
+	"Redirecting you to OpenWebUI Community": "إعادة توجيهك إلى مجتمع OpenWebUI",
+	"Refused when it shouldn't have": "رفض عندما لا ينبغي أن يكون",
+	"Regenerate": "تجديد",
+	"Release Notes": "ملاحظات الإصدار",
+	"Remove": "إزالة",
+	"Remove Model": "",
+	"Rename": "",
+	"Repeat Last N": "كرر آخر N",
+	"Repeat Penalty": "كرر المخالفة",
+	"Request Mode": "وضع الطلب",
+	"Reranking Model": "",
+	"Reranking model disabled": "تم تعطيل نموذج إعادة الترتيب",
+	"Reranking model set to \"{{reranking_model}}\"": "تم ضبط نموذج إعادة الترتيب على \"{{reranking_model}}\"",
+	"Reset Vector Storage": "إعادة تعيين تخزين المتجهات",
+	"Response AutoCopy to Clipboard": "النسخ التلقائي للاستجابة إلى الحافظة",
+	"Role": "منصب",
+	"Rosé Pine": "Rosé Pine",
+	"Rosé Pine Dawn": "Rosé Pine Dawn",
+	"Save": "حفظ",
+	"Save & Create": "حفظ وإنشاء",
+	"Save & Submit": "حفظ وإرسال",
+	"Save & Update": "حفظ وتحديث",
+	"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": "لم يعد حفظ سجلات الدردشة مباشرة في مساحة تخزين متصفحك مدعومًا. يرجى تخصيص بعض الوقت لتنزيل وحذف سجلات الدردشة الخاصة بك عن طريق النقر على الزر أدناه. لا تقلق، يمكنك بسهولة إعادة استيراد سجلات الدردشة الخاصة بك إلى الواجهة الخلفية من خلاله",
+	"Scan": "مسح",
+	"Scan complete!": "تم المسح",
+	"Scan for documents from {{path}}": " مسح على الملفات من {{path}}",
+	"Search": "البحث",
+	"Search a model": "البحث عن موديل",
+	"Search Documents": "البحث المستندات",
+	"Search Prompts": "أبحث حث",
+	"See readme.md for instructions": "راجع readme.md للحصول على التعليمات",
+	"See what's new": "ما الجديد",
+	"Seed": "Seed",
+	"Select a mode": "أختار موديل",
+	"Select a model": "أختار الموديل",
+	"Select an Ollama instance": "أختار سيرفر Ollama",
+	"Select model": "",
+	"Send a Message": "أرسل رسالة.",
+	"Send message": "أرسل رسالة",
+	"September": "",
+	"Server connection verified": "تم التحقق من اتصال الخادم",
+	"Set as default": "الافتراضي",
+	"Set Default Model": "تفعيد الموديل الافتراضي",
+	"Set embedding model (e.g. {{model}})": "",
+	"Set Image Size": "حجم الصورة",
+	"Set Model": "ضبط النموذج",
+	"Set reranking model (e.g. {{model}})": "",
+	"Set Steps": "ضبط الخطوات",
+	"Set Title Auto-Generation Model": "قم بتعيين نموذج إنشاء العنوان تلقائيًا",
+	"Set Voice": "ضبط الصوت",
+	"Settings": "الاعدادات",
+	"Settings saved successfully!": "تم حفظ الاعدادات بنجاح",
+	"Share": "كشاركة",
+	"Share Chat": "مشاركة الدردشة",
+	"Share to OpenWebUI Community": "شارك في مجتمع OpenWebUI",
+	"short-summary": "ملخص قصير",
+	"Show": "عرض",
+	"Show Additional Params": "إظهار المعلمات الإضافية",
+	"Show shortcuts": "إظهار الاختصارات",
+	"Showcased creativity": "أظهر الإبداع",
+	"sidebar": "الشريط الجانبي",
+	"Sign in": "تسجيل الدخول",
+	"Sign Out": "تسجيل الخروج",
+	"Sign up": "تسجيل",
+	"Signing in": "جاري الدخول",
+	"Source": "",
+	"Speech recognition error: {{error}}": "خطأ في التعرف على الكلام: {{error}}",
+	"Speech-to-Text Engine": "محرك تحويل الكلام إلى نص",
+	"SpeechRecognition API is not supported in this browser.": "API SpeechRecognition غير مدعومة في هذا المتصفح.",
+	"Stop Sequence": "وقف التسلسل",
+	"STT Settings": "STT اعدادات",
+	"Submit": "إرسال",
+	"Subtitle (e.g. about the Roman Empire)": "الترجمة (e.g. about the Roman Empire)",
+	"Success": "نجاح",
+	"Successfully updated.": "تم التحديث بنجاح.",
+	"Suggested": "",
+	"Sync All": "مزامنة الكل",
+	"System": "النظام",
+	"System Prompt": "محادثة النظام",
+	"Tags": "الوسوم",
+	"Tell us more:": "أخبرنا المزيد:",
+	"Temperature": "درجة حرارة",
+	"Template": "نموذج",
+	"Text Completion": "اكتمال النص",
+	"Text-to-Speech Engine": "محرك تحويل النص إلى كلام",
+	"Tfs Z": "Tfs Z",
+	"Thanks for your feedback!": "شكرا لملاحظاتك!",
+	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "يجب أن تكون النتيجة قيمة تتراوح بين 0.0 (0%) و1.0 (100%).",
+	"Theme": "الثيم",
+	"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "وهذا يضمن حفظ محادثاتك القيمة بشكل آمن في قاعدة بياناتك الخلفية. شكرًا لك!",
+	"This setting does not sync across browsers or devices.": "لا تتم مزامنة هذا الإعداد عبر المتصفحات أو الأجهزة.",
+	"Thorough explanation": "شرح شامل",
+	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "ملاحضة: قم بتحديث عدة فتحات متغيرة على التوالي عن طريق الضغط على مفتاح tab في مدخلات الدردشة بعد كل استبدال.",
+	"Title": "العنوان",
+	"Title (e.g. Tell me a fun fact)": "العناون (e.g. Tell me a fun fact)",
+	"Title Auto-Generation": "توليد تلقائي للعنوان",
+	"Title cannot be an empty string.": "",
+	"Title Generation Prompt": "موجه إنشاء العنوان",
+	"to": "الى",
+	"To access the available model names for downloading,": "للوصول إلى أسماء الموديلات المتاحة للتنزيل،",
+	"To access the GGUF models available for downloading,": "للوصول إلى الموديلات GGUF المتاحة للتنزيل،",
+	"to chat input.": "الى كتابة المحادثه",
+	"Today": "",
+	"Toggle settings": "فتح وأغلاق الاعدادات",
+	"Toggle sidebar": "فتح وأغلاق الشريط الجانبي",
+	"Top K": "Top K",
+	"Top P": "Top P",
+	"Trouble accessing Ollama?": "هل تواجه مشكلة في الوصول إلى Olma؟",
+	"TTS Settings": "TTS اعدادات",
+	"Type Hugging Face Resolve (Download) URL": "اكتب عنوان URL لحل مشكلة الوجه (تنزيل).",
+	"Uh-oh! There was an issue connecting to {{provider}}.": "خطاء أوه! حدثت مشكلة في الاتصال بـ {{provider}}.",
+	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "نوع ملف غير معروف '{{file_type}}', ولكن القبول والتعامل كنص عادي ",
+	"Update and Copy Link": "تحديث ونسخ الرابط",
+	"Update password": "تحديث كلمة المرور",
+	"Upload a GGUF model": "رفع موديل نوع GGUF",
+	"Upload files": "رفع الملفات",
+	"Upload Progress": "جاري التحميل",
+	"URL Mode": "رابط الموديل",
+	"Use '#' in the prompt input to load and select your documents.": "أستخدم '#' في المحادثة لربطهامن المستندات",
+	"Use Gravatar": "أستخدم Gravatar",
+	"Use Initials": "أستخدم Initials",
+	"user": "مستخدم",
+	"User Permissions": "صلاحيات المستخدم",
+	"Users": "المستخدمين",
+	"Utilize": "يستخدم",
+	"Valid time units:": "وحدات زمنية صالحة:",
+	"variable": "المتغير",
+	"variable to have them replaced with clipboard content.": "متغير لاستبدالها بمحتوى الحافظة.",
+	"Version": "إصدار",
+	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "تحذير: إذا قمت بتحديث أو تغيير نموذج التضمين الخاص بك، فستحتاج إلى إعادة استيراد كافة المستندات.",
+	"Web": "Web",
+	"Web Loader Settings": "",
+	"Web Params": "",
+	"Webhook URL": "Webhook الرابط",
+	"WebUI Add-ons": "WebUI الأضافات",
+	"WebUI Settings": "WebUI اعدادات",
+	"WebUI will make requests to": "سوف يقوم WebUI بتقديم طلبات ل",
+	"What’s New in": "ما هو الجديد",
+	"When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "عند إيقاف تشغيل السجل، لن تظهر الدردشات الجديدة على هذا المتصفح في سجلك على أي من أجهزتك.",
+	"Whisper (Local)": "Whisper (Local)",
+	"Write a prompt suggestion (e.g. Who are you?)": "اكتب اقتراحًا سريعًا (على سبيل المثال، من أنت؟)",
+	"Write a summary in 50 words that summarizes [topic or keyword].": "اكتب ملخصًا في 50 كلمة يلخص [الموضوع أو الكلمة الرئيسية].",
+	"Yesterday": "",
+	"You": "أنت",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
+	"You're a helpful assistant.": "مساعدك المفيد هنا",
+	"You're now logged in.": "لقد قمت الآن بتسجيل الدخول.",
+	"Youtube": "Youtube",
+	"Youtube Loader Settings": ""
+}

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

@@ -15,6 +15,7 @@
 	"Add a short description about what this modelfile does": "Добавяне на кратко описание за това какво прави този модфайл",
 	"Add a short title for this prompt": "Добавяне на кратко заглавие за този промпт",
 	"Add a tag": "Добавяне на таг",
+	"Add custom prompt": "",
 	"Add Docs": "Добавяне на Документи",
 	"Add Files": "Добавяне на Файлове",
 	"Add message": "Добавяне на съобщение",
@@ -27,6 +28,7 @@
 	"Admin Settings": "Настройки на Администратор",
 	"Advanced Parameters": "Разширени Параметри",
 	"all": "всички",
+	"All Documents": "",
 	"All Users": "Всички Потребители",
 	"Allow": "Позволи",
 	"Allow Chat Deletion": "Позволи Изтриване на Чат",
@@ -34,17 +36,21 @@
 	"Already have an account?": "Вече имате акаунт? ",
 	"an assistant": "асистент",
 	"and": "и",
+	"and create a new shared link.": "",
 	"API Base URL": "API Базов URL",
 	"API Key": "API Ключ",
 	"API Key created.": "",
 	"API keys": "",
 	"API RPM": "API RPM",
+	"April": "",
 	"Archive": "",
 	"Archived Chats": "",
 	"are allowed - Activate this command by typing": "са разрешени - Активирайте тази команда чрез въвеждане",
 	"Are you sure?": "Сигурни ли сте?",
+	"Attach file": "",
 	"Attention to detail": "",
 	"Audio": "Аудио",
+	"August": "",
 	"Auto-playback response": "Аувтоматично възпроизвеждане на Отговора",
 	"Auto-send input after 3 sec.": "Аувтоматично изпращане на входа след 3 сек.",
 	"AUTOMATIC1111 Base URL": "AUTOMATIC1111 Базов URL",
@@ -52,8 +58,10 @@
 	"available!": "наличен!",
 	"Back": "Назад",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "Режим на Създаване",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "Отказ",
 	"Categories": "Категории",
 	"Change Password": "Промяна на Парола",
@@ -68,7 +76,9 @@
 	"Chunk Overlap": "Chunk Overlap",
 	"Chunk Params": "Chunk Params",
 	"Chunk Size": "Chunk Size",
+	"Citation": "",
 	"Click here for help.": "Натиснете тук за помощ.",
+	"Click here to": "",
 	"Click here to check other modelfiles.": "Натиснете тук за проверка на други моделфайлове.",
 	"Click here to select": "Натиснете тук, за да изберете",
 	"Click here to select a csv file.": "",
@@ -96,6 +106,8 @@
 	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Създайте кратка фраза от 3-5 думи като заглавие за следващото запитване, като стриктно спазвате ограничението от 3-5 думи и избягвате използването на думата 'заглавие':",
 	"Create a modelfile": "Създаване на модфайл",
 	"Create Account": "Създаване на Акаунт",
+	"Create new key": "",
+	"Create new secret key": "",
 	"Created at": "Създадено на",
 	"Created At": "",
 	"Current Model": "Текущ модел",
@@ -103,8 +115,10 @@
 	"Custom": "Персонализиран",
 	"Customize Ollama models for a specific purpose": "Персонализиране на Ollama моделите за конкретна цел",
 	"Dark": "Тъмен",
+	"Dashboard": "",
 	"Database": "База данни",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
+	"December": "",
 	"Default": "По подразбиране",
 	"Default (Automatic1111)": "По подразбиране (Automatic1111)",
 	"Default (SentenceTransformers)": "",
@@ -118,6 +132,7 @@
 	"Delete chat": "Изтриване на чат",
 	"Delete Chat": "",
 	"Delete Chats": "Изтриване на Чатове",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "Изтрито {{deleteModelTag}}",
 	"Deleted {{tagName}}": "",
@@ -137,6 +152,7 @@
 	"Don't have an account?": "Нямате акаунт?",
 	"Don't like the style": "",
 	"Download": "",
+	"Download canceled": "",
 	"Download Database": "Сваляне на база данни",
 	"Drop any files here to add to the conversation": "Пускане на файлове тук, за да ги добавите в чата",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "напр. '30с','10м'. Валидни единици са 'с', 'м', 'ч'.",
@@ -144,6 +160,7 @@
 	"Edit Doc": "Редактиране на документ",
 	"Edit User": "Редактиране на потребител",
 	"Email": "Имейл",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "Вклюване на Чат История",
@@ -154,6 +171,7 @@
 	"Enter Chunk Overlap": "Въведете Chunk Overlap",
 	"Enter Chunk Size": "Въведете Chunk Size",
 	"Enter Image Size (e.g. 512x512)": "Въведете размер на изображението (напр. 512x512)",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "Въведете LiteLLM API Base URL (litellm_params.api_base)",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "Въведете LiteLLM API Key (litellm_params.api_key)",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Въведете LiteLLM API RPM (litellm_params.rpm)",
@@ -165,6 +183,7 @@
 	"Enter stop sequence": "Въведете стоп последователност",
 	"Enter Top K": "Въведете Top K",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "Въведете URL (напр. http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "Въведете имейл",
 	"Enter Your Full Name": "Въведете вашето пълно име",
 	"Enter Your Password": "Въведете вашата парола",
@@ -177,6 +196,7 @@
 	"Export Prompts": "Експортване на промптове",
 	"Failed to create API Key.": "",
 	"Failed to read clipboard contents": "Грешка при четене на съдържанието от клипборда",
+	"February": "",
 	"Feel free to add specific details": "",
 	"File Mode": "Файл Мод",
 	"File not found.": "Файл не е намерен.",
@@ -193,6 +213,7 @@
 	"Good Response": "",
 	"has no conversations.": "",
 	"Hello, {{name}}": "Здравей, {{name}}",
+	"Help": "",
 	"Hide": "Скрий",
 	"Hide Additional Params": "Скрий допълнителни параметри",
 	"How can I help you today?": "Как мога да ви помогна днес?",
@@ -206,9 +227,14 @@
 	"Import Modelfiles": "Импортване на модфайлове",
 	"Import Prompts": "Импортване на промптове",
 	"Include `--api` flag when running stable-diffusion-webui": "Включете флага `--api`, когато стартирате stable-diffusion-webui",
+	"Input commands": "",
 	"Interface": "Интерфейс",
+	"Invalid Tag": "",
+	"January": "",
 	"join our Discord for help.": "свържете се с нашия Discord за помощ.",
 	"JSON": "JSON",
+	"July": "",
+	"June": "",
 	"JWT Expiration": "JWT Expiration",
 	"JWT Token": "JWT Token",
 	"Keep Alive": "Keep Alive",
@@ -223,8 +249,11 @@
 	"Manage LiteLLM Models": "Управление на LiteLLM Моделите",
 	"Manage Models": "Управление на Моделите",
 	"Manage Ollama Models": "Управление на Ollama Моделите",
+	"March": "",
 	"Max Tokens": "Max Tokens",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Максимум 3 модели могат да бъдат сваляни едновременно. Моля, опитайте отново по-късно.",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
 	"Minimum Score": "",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
@@ -255,11 +284,15 @@
 	"Name your modelfile": "Име на модфайла",
 	"New Chat": "Нов чат",
 	"New Password": "Нова парола",
+	"No results found": "",
+	"No source available": "",
 	"Not factually correct": "",
 	"Not sure what to add?": "Не сте сигурни, какво да добавите?",
 	"Not sure what to write? Switch to": "Не сте сигурни, какво да напишете? Превключете към",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
 	"Notifications": "Десктоп Известия",
+	"November": "",
+	"October": "",
 	"Off": "Изкл.",
 	"Okay, Let's Go!": "ОК, Нека започваме!",
 	"OLED Dark": "",
@@ -283,6 +316,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "или",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Параметри",
 	"Password": "Парола",
 	"PDF document (.pdf)": "",
@@ -292,11 +326,15 @@
 	"Plain text (.txt)": "",
 	"Playground": "Плейграунд",
 	"Positive attitude": "",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
 	"Profile Image": "",
+	"Prompt": "",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
 	"Prompt Content": "Съдържание на промпта",
 	"Prompt suggestions": "Промпт предложения",
 	"Prompts": "Промптове",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Издърпайте модел от Ollama.com",
 	"Pull Progress": "Прогрес на издърпването",
 	"Query Params": "Query Параметри",
@@ -309,9 +347,12 @@
 	"Regenerate": "",
 	"Release Notes": "Бележки по изданието",
 	"Remove": "",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "Repeat Last N",
 	"Repeat Penalty": "Repeat Penalty",
 	"Request Mode": "Request Mode",
+	"Reranking Model": "",
 	"Reranking model disabled": "",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "Ресет Vector Storage",
@@ -337,12 +378,17 @@
 	"Select a mode": "Изберете режим",
 	"Select a model": "Изберете модел",
 	"Select an Ollama instance": "Изберете Ollama инстанция",
+	"Select model": "",
 	"Send a Message": "Изпращане на Съобщение",
 	"Send message": "Изпращане на съобщение",
+	"September": "",
 	"Server connection verified": "Server connection verified",
 	"Set as default": "Задай по подразбиране",
 	"Set Default Model": "Задай Модел По Подразбиране",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "Задай Размер на Изображението",
+	"Set Model": "Задай Модел",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "Задай Стъпки",
 	"Set Title Auto-Generation Model": "Задай Модел за Автоматично Генериране на Заглавие",
 	"Set Voice": "Задай Глас",
@@ -361,6 +407,7 @@
 	"Sign Out": "Изход",
 	"Sign up": "Регистрация",
 	"Signing in": "",
+	"Source": "",
 	"Speech recognition error: {{error}}": "Speech recognition error: {{error}}",
 	"Speech-to-Text Engine": "Speech-to-Text Engine",
 	"SpeechRecognition API is not supported in this browser.": "SpeechRecognition API is not supported in this browser.",
@@ -370,6 +417,7 @@
 	"Subtitle (e.g. about the Roman Empire)": "",
 	"Success": "Успех",
 	"Successfully updated.": "Успешно обновено.",
+	"Suggested": "",
 	"Sync All": "Синхронизиране на всички",
 	"System": "Система",
 	"System Prompt": "Системен Промпт",
@@ -390,11 +438,13 @@
 	"Title": "Заглавие",
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "Автоматично Генериране на Заглавие",
+	"Title cannot be an empty string.": "",
 	"Title Generation Prompt": "Промпт за Генериране на Заглавие",
 	"to": "в",
 	"To access the available model names for downloading,": "За да получите достъп до наличните имена на модели за изтегляне,",
 	"To access the GGUF models available for downloading,": "За да получите достъп до GGUF моделите, налични за изтегляне,",
 	"to chat input.": "към чат входа.",
+	"Today": "",
 	"Toggle settings": "Toggle settings",
 	"Toggle sidebar": "Toggle sidebar",
 	"Top K": "Top K",
@@ -405,11 +455,7 @@
 	"Uh-oh! There was an issue connecting to {{provider}}.": "О, не! Възникна проблем при свързването с {{provider}}.",
 	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Непознат файлов тип '{{file_type}}', но се приема и обработва като текст",
 	"Update and Copy Link": "",
-	"Update Embedding Model": "",
-	"Update embedding model (e.g. {{model}})": "",
 	"Update password": "Обновяване на парола",
-	"Update Reranking Model": "",
-	"Update reranking model (e.g. {{model}})": "",
 	"Upload a GGUF model": "Качване на GGUF модел",
 	"Upload files": "Качване на файлове",
 	"Upload Progress": "Прогрес на качването",
@@ -427,6 +473,8 @@
 	"Version": "Версия",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Уеб",
+	"Web Loader Settings": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "WebUI Добавки",
 	"WebUI Settings": "WebUI Настройки",
@@ -436,8 +484,12 @@
 	"Whisper (Local)": "Whisper (Локален)",
 	"Write a prompt suggestion (e.g. Who are you?)": "Напиши предложение за промпт (напр. Кой сте вие?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Напиши описание в 50 знака, което описва [тема или ключова дума].",
+	"Yesterday": "",
 	"You": "Вие",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "Вие сте полезен асистент.",
 	"You're now logged in.": "Сега, вие влязохте в системата.",
-	"Youtube": ""
+	"Youtube": "",
+	"Youtube Loader Settings": ""
 }

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

@@ -15,6 +15,7 @@
 	"Add a short description about what this modelfile does": "এই মডেলফাইলটির সম্পর্কে সংক্ষিপ্ত বিবরণ যোগ করুন",
 	"Add a short title for this prompt": "এই প্রম্পটের জন্য একটি সংক্ষিপ্ত টাইটেল যোগ করুন",
 	"Add a tag": "একটি ট্যাগ যোগ করুন",
+	"Add custom prompt": "",
 	"Add Docs": "ডকুমেন্ট যোগ করুন",
 	"Add Files": "ফাইল যোগ করুন",
 	"Add message": "মেসেজ যোগ করুন",
@@ -27,6 +28,7 @@
 	"Admin Settings": "এডমিন সেটিংস",
 	"Advanced Parameters": "এডভান্সড প্যারামিটার্স",
 	"all": "সব",
+	"All Documents": "",
 	"All Users": "সব ইউজার",
 	"Allow": "অনুমোদন",
 	"Allow Chat Deletion": "চ্যাট ডিলিট করতে দিন",
@@ -34,17 +36,21 @@
 	"Already have an account?": "আগে থেকেই একাউন্ট আছে?",
 	"an assistant": "একটা এসিস্ট্যান্ট",
 	"and": "এবং",
+	"and create a new shared link.": "",
 	"API Base URL": "এপিআই বেজ ইউআরএল",
 	"API Key": "এপিআই কোড",
 	"API Key created.": "",
 	"API keys": "",
 	"API RPM": "এপিআই আরপিএম",
+	"April": "",
 	"Archive": "",
 	"Archived Chats": "চ্যাট ইতিহাস সংরক্ষণাগার",
 	"are allowed - Activate this command by typing": "অনুমোদিত - কমান্ডটি চালু করার জন্য লিখুন",
 	"Are you sure?": "আপনি নিশ্চিত?",
+	"Attach file": "",
 	"Attention to detail": "",
 	"Audio": "অডিও",
+	"August": "",
 	"Auto-playback response": "রেসপন্স অটো-প্লেব্যাক",
 	"Auto-send input after 3 sec.": "৩ সেকেন্ড পর ইনপুট সংয়ক্রিয়ভাবে পাঠান",
 	"AUTOMATIC1111 Base URL": "AUTOMATIC1111 বেজ ইউআরএল",
@@ -52,8 +58,10 @@
 	"available!": "উপলব্ধ!",
 	"Back": "পেছনে",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "বিল্ডার মোড",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "বাতিল",
 	"Categories": "ক্যাটাগরিসমূহ",
 	"Change Password": "পাসওয়ার্ড পরিবর্তন করুন",
@@ -68,7 +76,9 @@
 	"Chunk Overlap": "চাঙ্ক ওভারল্যাপ",
 	"Chunk Params": "চাঙ্ক প্যারামিটার্স",
 	"Chunk Size": "চাঙ্ক সাইজ",
+	"Citation": "",
 	"Click here for help.": "সাহায্যের জন্য এখানে ক্লিক করুন",
+	"Click here to": "",
 	"Click here to check other modelfiles.": "অন্যান্য মডেলফাইল চেক করার জন্য এখানে ক্লিক করুন",
 	"Click here to select": "নির্বাচন করার জন্য এখানে ক্লিক করুন",
 	"Click here to select a csv file.": "",
@@ -96,6 +106,8 @@
 	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "'title' শব্দটি ব্যবহার না করে নিম্মোক্ত অনুসন্ধানের জন্য সংক্ষেপে সর্বোচ্চ ৩-৫ শব্দের একটি হেডার তৈরি করুন",
 	"Create a modelfile": "একটি মডেলফাইল তৈরি করুন",
 	"Create Account": "একাউন্ট তৈরি করুন",
+	"Create new key": "",
+	"Create new secret key": "",
 	"Created at": "নির্মানকাল",
 	"Created At": "",
 	"Current Model": "বর্তমান মডেল",
@@ -103,8 +115,10 @@
 	"Custom": "কাস্টম",
 	"Customize Ollama models for a specific purpose": "নির্দিষ্ট উদ্দেশ্যে Ollama মডেল পরিবর্তন করুন",
 	"Dark": "ডার্ক",
+	"Dashboard": "",
 	"Database": "ডেটাবেজ",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
+	"December": "",
 	"Default": "ডিফল্ট",
 	"Default (Automatic1111)": "ডিফল্ট (Automatic1111)",
 	"Default (SentenceTransformers)": "",
@@ -118,6 +132,7 @@
 	"Delete chat": "চ্যাট মুছে ফেলুন",
 	"Delete Chat": "",
 	"Delete Chats": "চ্যাটগুলো মুছে ফেলুন",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} মুছে ফেলা হয়েছে",
 	"Deleted {{tagName}}": "",
@@ -137,6 +152,7 @@
 	"Don't have an account?": "একাউন্ট নেই?",
 	"Don't like the style": "",
 	"Download": "",
+	"Download canceled": "",
 	"Download Database": "ডেটাবেজ ডাউনলোড করুন",
 	"Drop any files here to add to the conversation": "আলোচনায় যুক্ত করার জন্য যে কোন ফাইল এখানে ড্রপ করুন",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "যেমন '30s','10m'. সময়ের অনুমোদিত অনুমোদিত এককগুলি হচ্ছে 's', 'm', 'h'.",
@@ -144,6 +160,7 @@
 	"Edit Doc": "ডকুমেন্ট এডিট করুন",
 	"Edit User": "ইউজার এডিট করুন",
 	"Email": "ইমেইল",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "চ্যাট হিস্টোরি চালু করুন",
@@ -154,6 +171,7 @@
 	"Enter Chunk Overlap": "চাঙ্ক ওভারল্যাপ লিখুন",
 	"Enter Chunk Size": "চাংক সাইজ লিখুন",
 	"Enter Image Size (e.g. 512x512)": "ছবির মাপ লিখুন (যেমন 512x512)",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "LiteLLM এপিআই বেজ ইউআরএল লিখুন (litellm_params.api_base)",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "LiteLLM এপিআই কোড লিখুন (litellm_params.api_key)",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "LiteLLM এপিআই RPM দিন (litellm_params.rpm)",
@@ -165,6 +183,7 @@
 	"Enter stop sequence": "স্টপ সিকোয়েন্স লিখুন",
 	"Enter Top K": "Top K লিখুন",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "ইউআরএল দিন (যেমন http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "আপনার ইমেইল লিখুন",
 	"Enter Your Full Name": "আপনার পূর্ণ নাম লিখুন",
 	"Enter Your Password": "আপনার পাসওয়ার্ড লিখুন",
@@ -177,6 +196,7 @@
 	"Export Prompts": "প্রম্পটগুলো একপোর্ট করুন",
 	"Failed to create API Key.": "",
 	"Failed to read clipboard contents": "ক্লিপবোর্ডের বিষয়বস্তু পড়া সম্ভব হয়নি",
+	"February": "",
 	"Feel free to add specific details": "",
 	"File Mode": "ফাইল মোড",
 	"File not found.": "ফাইল পাওয়া যায়নি",
@@ -193,6 +213,7 @@
 	"Good Response": "",
 	"has no conversations.": "",
 	"Hello, {{name}}": "হ্যালো, {{name}}",
+	"Help": "",
 	"Hide": "লুকান",
 	"Hide Additional Params": "অতিরিক্ত প্যারামিটাগুলো লুকান",
 	"How can I help you today?": "আপনাকে আজ কিভাবে সাহায্য করতে পারি?",
@@ -206,9 +227,14 @@
 	"Import Modelfiles": "মডেলফাইলগুলো ইমপোর্ট করুন",
 	"Import Prompts": "প্রম্পটগুলো ইমপোর্ট করুন",
 	"Include `--api` flag when running stable-diffusion-webui": "stable-diffusion-webui চালু করার সময় `--api` ফ্ল্যাগ সংযুক্ত করুন",
+	"Input commands": "",
 	"Interface": "ইন্টারফেস",
+	"Invalid Tag": "",
+	"January": "",
 	"join our Discord for help.": "সাহায্যের জন্য আমাদের Discord-এ যুক্ত হোন",
 	"JSON": "JSON",
+	"July": "",
+	"June": "",
 	"JWT Expiration": "JWT-র মেয়াদ",
 	"JWT Token": "JWT টোকেন",
 	"Keep Alive": "সচল রাখুন",
@@ -223,8 +249,11 @@
 	"Manage LiteLLM Models": "LiteLLM মডেল ব্যবস্থাপনা করুন",
 	"Manage Models": "মডেলসমূহ ব্যবস্থাপনা করুন",
 	"Manage Ollama Models": "Ollama মডেলসূহ ব্যবস্থাপনা করুন",
+	"March": "",
 	"Max Tokens": "সর্বোচ্চ টোকন",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "একসঙ্গে সর্বোচ্চ তিনটি মডেল ডাউনলোড করা যায়। দয়া করে পরে আবার চেষ্টা করুন।",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
 	"Minimum Score": "",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
@@ -255,11 +284,15 @@
 	"Name your modelfile": "আপনার মডেলফাইলের নাম দিন",
 	"New Chat": "নতুন চ্যাট",
 	"New Password": "নতুন পাসওয়ার্ড",
+	"No results found": "",
+	"No source available": "",
 	"Not factually correct": "",
 	"Not sure what to add?": "কী যুক্ত করতে হবে নিশ্চিত না?",
 	"Not sure what to write? Switch to": "কী লিখতে হবে নিশ্চিত না? পরিবর্তন করুন:",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
 	"Notifications": "নোটিফিকেশনসমূহ",
+	"November": "",
+	"October": "",
 	"Off": "বন্ধ",
 	"Okay, Let's Go!": "ঠিক আছে, চলুন যাই!",
 	"OLED Dark": "",
@@ -283,6 +316,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "অথবা",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "প্যারামিটারসমূহ",
 	"Password": "পাসওয়ার্ড",
 	"PDF document (.pdf)": "",
@@ -292,11 +326,15 @@
 	"Plain text (.txt)": "",
 	"Playground": "খেলাঘর",
 	"Positive attitude": "",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
 	"Profile Image": "",
+	"Prompt": "",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
 	"Prompt Content": "প্রম্পট কন্টেন্ট",
 	"Prompt suggestions": "প্রম্পট সাজেশনসমূহ",
 	"Prompts": "প্রম্পটসমূহ",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Ollama.com থেকে একটি টেনে আনুন আনুন",
 	"Pull Progress": "Pull চলমান",
 	"Query Params": "Query প্যারামিটারসমূহ",
@@ -309,9 +347,12 @@
 	"Regenerate": "",
 	"Release Notes": "রিলিজ নোটসমূহ",
 	"Remove": "",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "রিপিট Last N",
 	"Repeat Penalty": "রিপিট প্যানাল্টি",
 	"Request Mode": "রিকোয়েস্ট মোড",
+	"Reranking Model": "",
 	"Reranking model disabled": "",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "ভেক্টর স্টোরেজ রিসেট করুন",
@@ -337,12 +378,17 @@
 	"Select a mode": "একটি মডেল নির্বাচন করুন",
 	"Select a model": "একটি মডেল নির্বাচন করুন",
 	"Select an Ollama instance": "একটি Ollama ইন্সট্যান্স নির্বাচন করুন",
+	"Select model": "",
 	"Send a Message": "একটি মেসেজ পাঠান",
 	"Send message": "মেসেজ পাঠান",
+	"September": "",
 	"Server connection verified": "সার্ভার কানেকশন যাচাই করা হয়েছে",
 	"Set as default": "ডিফল্ট হিসেবে নির্ধারণ করুন",
 	"Set Default Model": "ডিফল্ট মডেল নির্ধারণ করুন",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "ছবির সাইজ নির্ধারণ করুন",
+	"Set Model": "মডেল নির্ধারণ করুন",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "পরবর্তী ধাপসমূহ",
 	"Set Title Auto-Generation Model": "শিরোনাম অটোজেনারেশন মডেন নির্ধারণ করুন",
 	"Set Voice": "কন্ঠস্বর নির্ধারণ করুন",
@@ -361,6 +407,7 @@
 	"Sign Out": "সাইন আউট",
 	"Sign up": "সাইন আপ",
 	"Signing in": "",
+	"Source": "",
 	"Speech recognition error: {{error}}": "স্পিচ রিকগনিশনে সমস্যা: {{error}}",
 	"Speech-to-Text Engine": "স্পিচ-টু-টেক্সট ইঞ্জিন",
 	"SpeechRecognition API is not supported in this browser.": "এই ব্রাউজার স্পিচরিকগনিশন এপিআই সাপোর্ট করে না।",
@@ -370,6 +417,7 @@
 	"Subtitle (e.g. about the Roman Empire)": "",
 	"Success": "সফল",
 	"Successfully updated.": "সফলভাবে আপডেট হয়েছে",
+	"Suggested": "",
 	"Sync All": "সব সিংক্রোনাইজ করুন",
 	"System": "সিস্টেম",
 	"System Prompt": "সিস্টেম প্রম্পট",
@@ -390,11 +438,13 @@
 	"Title": "শিরোনাম",
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "স্বয়ংক্রিয় শিরোনামগঠন",
+	"Title cannot be an empty string.": "",
 	"Title Generation Prompt": "শিরোনামগঠন প্রম্পট",
 	"to": "প্রতি",
 	"To access the available model names for downloading,": "ডাউনলোডের জন্য এভেইলএবল মডেলের নামগুলো এক্সেস করতে,",
 	"To access the GGUF models available for downloading,": "ডাউলোডের জন্য এভেইলএবল GGUF মডেলগুলো এক্সেস করতে,",
 	"to chat input.": "চ্যাট ইনপুটে",
+	"Today": "",
 	"Toggle settings": "সেটিংস টোগল",
 	"Toggle sidebar": "সাইডবার টোগল",
 	"Top K": "Top K",
@@ -405,11 +455,7 @@
 	"Uh-oh! There was an issue connecting to {{provider}}.": "ওহ-হো! {{provider}} এর সাথে কানেকশনে সমস্যা হয়েছে।",
 	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "অপরিচিত ফাইল ফরম্যাট '{{file_type}}', তবে প্লেইন টেক্সট হিসেবে গ্রহণ করা হলো",
 	"Update and Copy Link": "",
-	"Update Embedding Model": "",
-	"Update embedding model (e.g. {{model}})": "",
 	"Update password": "পাসওয়ার্ড আপডেট করুন",
-	"Update Reranking Model": "",
-	"Update reranking model (e.g. {{model}})": "",
 	"Upload a GGUF model": "একটি GGUF মডেল আপলোড করুন",
 	"Upload files": "ফাইলগুলো আপলোড করুন",
 	"Upload Progress": "আপলোড হচ্ছে",
@@ -427,6 +473,8 @@
 	"Version": "ভার্সন",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "ওয়েব",
+	"Web Loader Settings": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "WebUI এড-অনসমূহ",
 	"WebUI Settings": "WebUI সেটিংসমূহ",
@@ -436,8 +484,12 @@
 	"Whisper (Local)": "Whisper (লোকাল)",
 	"Write a prompt suggestion (e.g. Who are you?)": "একটি প্রম্পট সাজেশন লিখুন (যেমন Who are you?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "৫০ শব্দের মধ্যে [topic or keyword] এর একটি সারসংক্ষেপ লিখুন।",
+	"Yesterday": "",
 	"You": "আপনি",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "আপনি একজন উপকারী এসিস্ট্যান্ট",
 	"You're now logged in.": "আপনি এখন লগইন করা অবস্থায় আছেন",
-	"Youtube": ""
+	"Youtube": "",
+	"Youtube Loader Settings": ""
 }

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

@@ -15,6 +15,7 @@
 	"Add a short description about what this modelfile does": "Afegeix una descripció curta del que fa aquest arxiu de model",
 	"Add a short title for this prompt": "Afegeix un títol curt per aquest prompt",
 	"Add a tag": "Afegeix una etiqueta",
+	"Add custom prompt": "",
 	"Add Docs": "Afegeix Documents",
 	"Add Files": "Afegeix Arxius",
 	"Add message": "Afegeix missatge",
@@ -27,6 +28,7 @@
 	"Admin Settings": "Configuració d'Administració",
 	"Advanced Parameters": "Paràmetres Avançats",
 	"all": "tots",
+	"All Documents": "",
 	"All Users": "Tots els Usuaris",
 	"Allow": "Permet",
 	"Allow Chat Deletion": "Permet la Supressió del Xat",
@@ -34,17 +36,21 @@
 	"Already have an account?": "Ja tens un compte?",
 	"an assistant": "un assistent",
 	"and": "i",
+	"and create a new shared link.": "",
 	"API Base URL": "URL Base de l'API",
 	"API Key": "Clau de l'API",
 	"API Key created.": "",
 	"API keys": "",
 	"API RPM": "RPM de l'API",
+	"April": "",
 	"Archive": "",
 	"Archived Chats": "Arxiu d'historial de xat",
 	"are allowed - Activate this command by typing": "estan permesos - Activa aquesta comanda escrivint",
 	"Are you sure?": "Estàs segur?",
+	"Attach file": "",
 	"Attention to detail": "",
 	"Audio": "Àudio",
+	"August": "",
 	"Auto-playback response": "Resposta de reproducció automàtica",
 	"Auto-send input after 3 sec.": "Enviar entrada automàticament després de 3 segons",
 	"AUTOMATIC1111 Base URL": "URL Base AUTOMATIC1111",
@@ -52,8 +58,10 @@
 	"available!": "disponible!",
 	"Back": "Enrere",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "Mode Constructor",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "Cancel·la",
 	"Categories": "Categories",
 	"Change Password": "Canvia la Contrasenya",
@@ -68,7 +76,9 @@
 	"Chunk Overlap": "Solapament de Blocs",
 	"Chunk Params": "Paràmetres de Blocs",
 	"Chunk Size": "Mida del Bloc",
+	"Citation": "",
 	"Click here for help.": "Fes clic aquí per ajuda.",
+	"Click here to": "",
 	"Click here to check other modelfiles.": "Fes clic aquí per comprovar altres fitxers de model.",
 	"Click here to select": "Fes clic aquí per seleccionar",
 	"Click here to select a csv file.": "",
@@ -96,6 +106,8 @@
 	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Crea una frase concisa de 3-5 paraules com a capçalera per a la següent consulta, seguint estrictament el límit de 3-5 paraules i evitant l'ús de la paraula 'títol':",
 	"Create a modelfile": "Crea un fitxer de model",
 	"Create Account": "Crea un Compte",
+	"Create new key": "",
+	"Create new secret key": "",
 	"Created at": "Creat el",
 	"Created At": "",
 	"Current Model": "Model Actual",
@@ -103,8 +115,10 @@
 	"Custom": "Personalitzat",
 	"Customize Ollama models for a specific purpose": "Personalitza els models Ollama per a un propòsit específic",
 	"Dark": "Fosc",
+	"Dashboard": "",
 	"Database": "Base de Dades",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
+	"December": "",
 	"Default": "Per defecte",
 	"Default (Automatic1111)": "Per defecte (Automatic1111)",
 	"Default (SentenceTransformers)": "",
@@ -118,6 +132,7 @@
 	"Delete chat": "Esborra xat",
 	"Delete Chat": "",
 	"Delete Chats": "Esborra Xats",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "Esborrat {{deleteModelTag}}",
 	"Deleted {{tagName}}": "",
@@ -137,6 +152,7 @@
 	"Don't have an account?": "No tens un compte?",
 	"Don't like the style": "",
 	"Download": "",
+	"Download canceled": "",
 	"Download Database": "Descarrega Base de Dades",
 	"Drop any files here to add to the conversation": "Deixa qualsevol arxiu aquí per afegir-lo a la conversa",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p. ex. '30s','10m'. Les unitats de temps vàlides són 's', 'm', 'h'.",
@@ -144,6 +160,7 @@
 	"Edit Doc": "Edita Document",
 	"Edit User": "Edita Usuari",
 	"Email": "Correu electrònic",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "Activa Historial de Xat",
@@ -154,6 +171,7 @@
 	"Enter Chunk Overlap": "Introdueix el Solapament de Blocs",
 	"Enter Chunk Size": "Introdueix la Mida del Bloc",
 	"Enter Image Size (e.g. 512x512)": "Introdueix la Mida de la Imatge (p. ex. 512x512)",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "Introdueix l'URL Base de LiteLLM API (litellm_params.api_base)",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "Introdueix la Clau de LiteLLM API (litellm_params.api_key)",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Introdueix RPM de LiteLLM API (litellm_params.rpm)",
@@ -165,6 +183,7 @@
 	"Enter stop sequence": "Introdueix la seqüència de parada",
 	"Enter Top K": "Introdueix Top K",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "Introdueix l'URL (p. ex. http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "Introdueix el Teu Correu Electrònic",
 	"Enter Your Full Name": "Introdueix el Teu Nom Complet",
 	"Enter Your Password": "Introdueix la Teva Contrasenya",
@@ -177,6 +196,7 @@
 	"Export Prompts": "Exporta Prompts",
 	"Failed to create API Key.": "",
 	"Failed to read clipboard contents": "No s'ha pogut llegir el contingut del porta-retalls",
+	"February": "",
 	"Feel free to add specific details": "",
 	"File Mode": "Mode Arxiu",
 	"File not found.": "Arxiu no trobat.",
@@ -193,6 +213,7 @@
 	"Good Response": "",
 	"has no conversations.": "",
 	"Hello, {{name}}": "Hola, {{name}}",
+	"Help": "",
 	"Hide": "Amaga",
 	"Hide Additional Params": "Amaga Paràmetres Addicionals",
 	"How can I help you today?": "Com et puc ajudar avui?",
@@ -206,9 +227,14 @@
 	"Import Modelfiles": "Importa Fitxers de Model",
 	"Import Prompts": "Importa Prompts",
 	"Include `--api` flag when running stable-diffusion-webui": "Inclou la bandera `--api` quan executis stable-diffusion-webui",
+	"Input commands": "",
 	"Interface": "Interfície",
+	"Invalid Tag": "",
+	"January": "",
 	"join our Discord for help.": "uneix-te al nostre Discord per ajuda.",
 	"JSON": "JSON",
+	"July": "",
+	"June": "",
 	"JWT Expiration": "Expiració de JWT",
 	"JWT Token": "Token JWT",
 	"Keep Alive": "Mantén Actiu",
@@ -223,8 +249,11 @@
 	"Manage LiteLLM Models": "Gestiona Models LiteLLM",
 	"Manage Models": "Gestiona Models",
 	"Manage Ollama Models": "Gestiona Models Ollama",
+	"March": "",
 	"Max Tokens": "Màxim de Tokens",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Es poden descarregar un màxim de 3 models simultàniament. Si us plau, prova-ho més tard.",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
 	"Minimum Score": "",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Eta de Mirostat",
@@ -255,11 +284,15 @@
 	"Name your modelfile": "Nomena el teu fitxer de model",
 	"New Chat": "Xat Nou",
 	"New Password": "Nova Contrasenya",
+	"No results found": "",
+	"No source available": "",
 	"Not factually correct": "",
 	"Not sure what to add?": "No estàs segur del que afegir?",
 	"Not sure what to write? Switch to": "No estàs segur del que escriure? Canvia a",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
 	"Notifications": "Notificacions d'Escriptori",
+	"November": "",
+	"October": "",
 	"Off": "Desactivat",
 	"Okay, Let's Go!": "D'acord, Anem!",
 	"OLED Dark": "",
@@ -283,6 +316,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "o",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Paràmetres",
 	"Password": "Contrasenya",
 	"PDF document (.pdf)": "",
@@ -292,11 +326,15 @@
 	"Plain text (.txt)": "",
 	"Playground": "Zona de Jocs",
 	"Positive attitude": "",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
 	"Profile Image": "",
+	"Prompt": "",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
 	"Prompt Content": "Contingut del Prompt",
 	"Prompt suggestions": "Suggeriments de Prompt",
 	"Prompts": "Prompts",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Treu un model d'Ollama.com",
 	"Pull Progress": "Progrés de Tracció",
 	"Query Params": "Paràmetres de Consulta",
@@ -309,9 +347,12 @@
 	"Regenerate": "",
 	"Release Notes": "Notes de la Versió",
 	"Remove": "",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "Repeteix Últim N",
 	"Repeat Penalty": "Penalització de Repetició",
 	"Request Mode": "Mode de Sol·licitud",
+	"Reranking Model": "",
 	"Reranking model disabled": "",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "Reinicia l'Emmagatzematge de Vectors",
@@ -337,12 +378,17 @@
 	"Select a mode": "Selecciona un mode",
 	"Select a model": "Selecciona un model",
 	"Select an Ollama instance": "Selecciona una instància d'Ollama",
+	"Select model": "",
 	"Send a Message": "Envia un Missatge",
 	"Send message": "Envia missatge",
+	"September": "",
 	"Server connection verified": "Connexió al servidor verificada",
 	"Set as default": "Estableix com a predeterminat",
 	"Set Default Model": "Estableix Model Predeterminat",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "Estableix Mida de la Imatge",
+	"Set Model": "Estableix Model",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "Estableix Passos",
 	"Set Title Auto-Generation Model": "Estableix Model d'Auto-Generació de Títol",
 	"Set Voice": "Estableix Veu",
@@ -361,6 +407,7 @@
 	"Sign Out": "Tanca sessió",
 	"Sign up": "Registra't",
 	"Signing in": "",
+	"Source": "",
 	"Speech recognition error: {{error}}": "Error de reconeixement de veu: {{error}}",
 	"Speech-to-Text Engine": "Motor de Veu a Text",
 	"SpeechRecognition API is not supported in this browser.": "L'API de Reconèixer Veu no és compatible amb aquest navegador.",
@@ -370,6 +417,7 @@
 	"Subtitle (e.g. about the Roman Empire)": "",
 	"Success": "Èxit",
 	"Successfully updated.": "Actualitzat amb èxit.",
+	"Suggested": "",
 	"Sync All": "Sincronitza Tot",
 	"System": "Sistema",
 	"System Prompt": "Prompt del Sistema",
@@ -390,11 +438,13 @@
 	"Title": "Títol",
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "Auto-Generació de Títol",
+	"Title cannot be an empty string.": "",
 	"Title Generation Prompt": "Prompt de Generació de Títol",
 	"to": "a",
 	"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 chat input.": "a l'entrada del xat.",
+	"Today": "",
 	"Toggle settings": "Commuta configuracions",
 	"Toggle sidebar": "Commuta barra lateral",
 	"Top K": "Top K",
@@ -405,11 +455,7 @@
 	"Uh-oh! There was an issue connecting to {{provider}}.": "Uf! Hi va haver un problema connectant-se a {{provider}}.",
 	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Tipus d'Arxiu Desconegut '{{file_type}}', però acceptant i tractant com a text pla",
 	"Update and Copy Link": "",
-	"Update Embedding Model": "",
-	"Update embedding model (e.g. {{model}})": "",
 	"Update password": "Actualitza contrasenya",
-	"Update Reranking Model": "",
-	"Update reranking model (e.g. {{model}})": "",
 	"Upload a GGUF model": "Puja un model GGUF",
 	"Upload files": "Puja arxius",
 	"Upload Progress": "Progrés de Càrrega",
@@ -427,6 +473,8 @@
 	"Version": "Versió",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Web",
+	"Web Loader Settings": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "Complements de WebUI",
 	"WebUI Settings": "Configuració de WebUI",
@@ -436,8 +484,12 @@
 	"Whisper (Local)": "Whisper (Local)",
 	"Write a prompt suggestion (e.g. Who are you?)": "Escriu una suggerència de prompt (p. ex. Qui ets tu?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Escriu un resum en 50 paraules que resumeixi [tema o paraula clau].",
+	"Yesterday": "",
 	"You": "Tu",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "Ets un assistent útil.",
 	"You're now logged in.": "Ara estàs connectat.",
-	"Youtube": ""
+	"Youtube": "",
+	"Youtube Loader Settings": ""
 }

+ 82 - 30
src/lib/i18n/locales/de-DE/translation.json

@@ -14,19 +14,21 @@
 	"Add a model tag name": "Benenne deinen Modell-Tag",
 	"Add a short description about what this modelfile does": "Füge eine kurze Beschreibung hinzu, was dieses Modelfile kann",
 	"Add a short title for this prompt": "Füge einen kurzen Titel für diesen Prompt hinzu",
-	"Add a tag": "Tag hinzufügen",
+	"Add a tag": "benenne",
+	"Add custom prompt": "Eigenen Prompt hinzufügen",
 	"Add Docs": "Dokumente hinzufügen",
 	"Add Files": "Dateien hinzufügen",
 	"Add message": "Nachricht eingeben",
 	"Add Model": "Modell hinzufügen",
 	"Add Tags": "Tags hinzufügen",
-	"Add User": "",
+	"Add User": "User hinzufügen",
 	"Adjusting these settings will apply changes universally to all users.": "Das Anpassen dieser Einstellungen wirkt sich universell auf alle Benutzer aus.",
 	"admin": "Administrator",
 	"Admin Panel": "Admin Panel",
 	"Admin Settings": "Admin Einstellungen",
 	"Advanced Parameters": "Erweiterte Parameter",
 	"all": "Alle",
+	"All Documents": "Alle Dokumente",
 	"All Users": "Alle Benutzer",
 	"Allow": "Erlauben",
 	"Allow Chat Deletion": "Chat Löschung erlauben",
@@ -34,17 +36,21 @@
 	"Already have an account?": "Hast du vielleicht schon ein Account?",
 	"an assistant": "ein Assistent",
 	"and": "und",
+	"and create a new shared link.": "und einen neuen geteilten Link zu erstellen.",
 	"API Base URL": "API Basis URL",
 	"API Key": "API Key",
 	"API Key created.": "API Key erstellt",
-	"API keys": "",
+	"API keys": "API Schlüssel",
 	"API RPM": "API RPM",
+	"April": "April",
 	"Archive": "Archivieren",
 	"Archived Chats": "Archivierte Chats",
 	"are allowed - Activate this command by typing": "sind erlaubt - Aktiviere diesen Befehl, indem du",
 	"Are you sure?": "Bist du sicher?",
+	"Attach file": "Datei anhängen",
 	"Attention to detail": "Auge fürs Detail",
 	"Audio": "Audio",
+	"August": "August",
 	"Auto-playback response": "Automatische Wiedergabe der Antwort",
 	"Auto-send input after 3 sec.": "Automatisches Senden der Eingabe nach 3 Sek",
 	"AUTOMATIC1111 Base URL": "AUTOMATIC1111 Basis URL",
@@ -52,8 +58,10 @@
 	"available!": "verfügbar!",
 	"Back": "Zurück",
 	"Bad Response": "Schlechte Antwort",
+	"before": "bereits geteilt",
 	"Being lazy": "Faul sein",
 	"Builder Mode": "Builder Modus",
+	"Bypass SSL verification for Websites": "Bypass SSL-Verifizierung für Websites",
 	"Cancel": "Abbrechen",
 	"Categories": "Kategorien",
 	"Change Password": "Passwort ändern",
@@ -68,10 +76,12 @@
 	"Chunk Overlap": "Chunk Overlap",
 	"Chunk Params": "Chunk Parameter",
 	"Chunk Size": "Chunk Size",
+	"Citation": "Zitate",
 	"Click here for help.": "Klicke hier für Hilfe.",
+	"Click here to": "Klicke hier, um",
 	"Click here to check other modelfiles.": "Klicke hier, um andere Modelfiles zu überprüfen.",
 	"Click here to select": "Klicke hier um auszuwählen",
-	"Click here to select a csv file.": "",
+	"Click here to select a csv file.": "Klicke hier um eine CSV-Datei auszuwählen.",
 	"Click here to select documents.": "Klicke hier um Dokumente auszuwählen",
 	"click here.": "hier klicken.",
 	"Click on the user role button to change a user's role.": "Klicke auf die Benutzerrollenschaltfläche, um die Rolle eines Benutzers zu ändern.",
@@ -91,11 +101,13 @@
 	"Copy": "Kopieren",
 	"Copy last code block": "Letzten Codeblock kopieren",
 	"Copy last response": "Letzte Antwort kopieren",
-	"Copy Link": "kopiere Link",
+	"Copy Link": "Link kopieren",
 	"Copying to clipboard was successful!": "Das Kopieren in die Zwischenablage war erfolgreich!",
 	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Erstelle einen prägnanten Satz mit 3-5 Wörtern als Überschrift für die folgende Abfrage. Halte dich dabei strikt an die 3-5-Wort-Grenze und vermeide die Verwendung des Wortes Titel:",
 	"Create a modelfile": "Modelfiles erstellen",
 	"Create Account": "Konto erstellen",
+	"Create new key": "Neuen Schlüssel erstellen",
+	"Create new secret key": "Neuen API Schlüssel erstellen",
 	"Created at": "Erstellt am",
 	"Created At": "Erstellt am",
 	"Current Model": "Aktuelles Modell",
@@ -103,8 +115,10 @@
 	"Custom": "Benutzerdefiniert",
 	"Customize Ollama models for a specific purpose": "Ollama-Modelle für einen bestimmten Zweck anpassen",
 	"Dark": "Dunkel",
+	"Dashboard": "Dashboard",
 	"Database": "Datenbank",
 	"DD/MM/YYYY HH:mm": "DD.MM.YYYY HH:mm",
+	"December": "Dezember",
 	"Default": "Standard",
 	"Default (Automatic1111)": "Standard (Automatic1111)",
 	"Default (SentenceTransformers)": "Standard (SentenceTransformers)",
@@ -118,6 +132,7 @@
 	"Delete chat": "Chat löschen",
 	"Delete Chat": "Chat löschen",
 	"Delete Chats": "Chats löschen",
+	"delete this link": "diesen Link zu löschen",
 	"Delete User": "Benutzer löschen",
 	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} gelöscht",
 	"Deleted {{tagName}}": "{{tagName}} gelöscht",
@@ -128,7 +143,7 @@
 	"Discover a prompt": "Einen Prompt entdecken",
 	"Discover, download, and explore custom prompts": "Benutzerdefinierte Prompts entdecken, herunterladen und erkunden",
 	"Discover, download, and explore model presets": "Modellvorgaben entdecken, herunterladen und erkunden",
-	"Display the username instead of You in the Chat": "Den Benutzernamen anstelle von 'Du' im Chat anzeigen",
+	"Display the username instead of You in the Chat": "Den Benutzernamen anstelle von 'du' im Chat anzeigen",
 	"Document": "Dokument",
 	"Document Settings": "Dokumenteinstellungen",
 	"Documents": "Dokumente",
@@ -137,6 +152,7 @@
 	"Don't have an account?": "Hast du vielleicht noch kein Konto?",
 	"Don't like the style": "Dir gefällt der Style nicht",
 	"Download": "Herunterladen",
+	"Download canceled": "Download abgebrochen",
 	"Download Database": "Datenbank herunterladen",
 	"Drop any files here to add to the conversation": "Ziehe Dateien in diesen Bereich, um sie an den Chat anzuhängen",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "z.B. '30s','10m'. Gültige Zeiteinheiten sind 's', 'm', 'h'.",
@@ -144,8 +160,9 @@
 	"Edit Doc": "Dokument bearbeiten",
 	"Edit User": "Benutzer bearbeiten",
 	"Email": "E-Mail",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
-	"Embedding model set to \"{{embedding_model}}\"": "Das Embedding Modell wurde auf \"{{embedding_model}}\" gesetzt",
+	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "Chat-Verlauf aktivieren",
 	"Enable New Sign Ups": "Neue Anmeldungen aktivieren",
 	"Enabled": "Aktiviert",
@@ -154,6 +171,7 @@
 	"Enter Chunk Overlap": "Gib den Chunk Overlap ein",
 	"Enter Chunk Size": "Gib die Chunk Size ein",
 	"Enter Image Size (e.g. 512x512)": "Gib die Bildgröße ein (z.B. 512x512)",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "Gib die LiteLLM API BASE URL ein (litellm_params.api_base)",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "Gib den LiteLLM API Key ein (litellm_params.api_key)",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Gib die LiteLLM API RPM ein (litellm_params.rpm)",
@@ -161,14 +179,15 @@
 	"Enter Max Tokens (litellm_params.max_tokens)": "Gib die maximalen Token ein (litellm_params.max_tokens) an",
 	"Enter model tag (e.g. {{modelTag}})": "Gib den Model-Tag ein",
 	"Enter Number of Steps (e.g. 50)": "Gib die Anzahl an Schritten ein (z.B. 50)",
-	"Enter Score": "",
+	"Enter Score": "Score eingeben",
 	"Enter stop sequence": "Stop-Sequenz eingeben",
 	"Enter Top K": "Gib Top K ein",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "Gib die URL ein (z.B. http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "Gib die URL ein (z.B. http://localhost:11434)",
 	"Enter Your Email": "Gib deine E-Mail-Adresse ein",
 	"Enter Your Full Name": "Gib deinen vollständigen Namen ein",
 	"Enter Your Password": "Gib dein Passwort ein",
-	"Enter Your Role": "",
+	"Enter Your Role": "Gebe deine Rolle ein",
 	"Experimental": "Experimentell",
 	"Export All Chats (All Users)": "Alle Chats exportieren (alle Benutzer)",
 	"Export Chats": "Chats exportieren",
@@ -177,6 +196,7 @@
 	"Export Prompts": "Prompts exportieren",
 	"Failed to create API Key.": "API Key erstellen fehlgeschlagen",
 	"Failed to read clipboard contents": "Fehler beim Lesen des Zwischenablageninhalts",
+	"February": "Februar",
 	"Feel free to add specific details": "Ergänze Details.",
 	"File Mode": "File Modus",
 	"File not found.": "Datei nicht gefunden.",
@@ -193,9 +213,10 @@
 	"Good Response": "Gute Antwort",
 	"has no conversations.": "hat keine Unterhaltungen.",
 	"Hello, {{name}}": "Hallo, {{name}}",
+	"Help": "Hilfe",
 	"Hide": "Verbergen",
 	"Hide Additional Params": "Verstecke zusätzliche Parameter",
-	"How can I help you today?": "Wie kann ich Dir heute helfen?",
+	"How can I help you today?": "Wie kann ich dir heute helfen?",
 	"Hybrid Search": "Hybride Suche",
 	"Image Generation (Experimental)": "Bildgenerierung (experimentell)",
 	"Image Generation Engine": "Bildgenerierungs-Engine",
@@ -205,10 +226,15 @@
 	"Import Documents Mapping": "Dokumentenmapping importieren",
 	"Import Modelfiles": "Modelfiles importieren",
 	"Import Prompts": "Prompts importieren",
-	"Include `--api` flag when running stable-diffusion-webui": "Füge das `--api`-Flag hinzu, wenn Du stable-diffusion-webui nutzt",
+	"Include `--api` flag when running stable-diffusion-webui": "Füge das `--api`-Flag hinzu, wenn du stable-diffusion-webui nutzt",
+	"Input commands": "Eingabebefehle",
 	"Interface": "Benutzeroberfläche",
+	"Invalid Tag": "Ungültiger Tag",
+	"January": "Januar",
 	"join our Discord for help.": "Trete unserem Discord bei, um Hilfe zu erhalten.",
 	"JSON": "JSON",
+	"July": "Juli",
+	"June": "Juni",
 	"JWT Expiration": "JWT-Ablauf",
 	"JWT Token": "JWT-Token",
 	"Keep Alive": "Keep Alive",
@@ -223,9 +249,12 @@
 	"Manage LiteLLM Models": "LiteLLM-Modelle verwalten",
 	"Manage Models": "Modelle verwalten",
 	"Manage Ollama Models": "Ollama-Modelle verwalten",
+	"March": "März",
 	"Max Tokens": "Maximale Tokens",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Es können maximal 3 Modelle gleichzeitig heruntergeladen werden. Bitte versuche es später erneut.",
-	"Minimum Score": "",
+	"May": "Mai",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "Fortlaudende Nachrichten in diesem Chat werden nicht automatisch geteilt. Benutzer mit dem Link können den Chat einsehen.",
+	"Minimum Score": "Mindestscore",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Tau": "Mirostat Tau",
@@ -255,15 +284,19 @@
 	"Name your modelfile": "Benenne dein modelfile",
 	"New Chat": "Neuer Chat",
 	"New Password": "Neues Passwort",
+	"No results found": "Keine Ergebnisse gefunden",
+	"No source available": "",
 	"Not factually correct": "Nicht sachlich korrekt.",
 	"Not sure what to add?": "Nicht sicher, was hinzugefügt werden soll?",
-	"Not sure what to write? Switch to": "Nicht sicher, was Du schreiben sollst? Wechsel zu",
+	"Not sure what to write? Switch to": "Nicht sicher, was du schreiben sollst? Wechsel zu",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
 	"Notifications": "Desktop-Benachrichtigungen",
+	"November": "November",
+	"October": "Oktober",
 	"Off": "Aus",
 	"Okay, Let's Go!": "Okay, los geht's!",
-	"OLED Dark": "",
-	"Ollama": "",
+	"OLED Dark": "OLED Dunkel",
+	"Ollama": "Ollama",
 	"Ollama Base URL": "Ollama Basis URL",
 	"Ollama Version": "Ollama-Version",
 	"On": "Ein",
@@ -271,18 +304,19 @@
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "Nur alphanumerische Zeichen und Bindestriche sind im Befehlsstring erlaubt.",
 	"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.": "Hoppla! Warte noch einen Moment! Die Dateien sind noch im der Verarbeitung. Bitte habe etwas Geduld und wir informieren Dich, sobald sie bereit sind.",
 	"Oops! Looks like the URL is invalid. Please double-check and try again.": "Hoppla! Es sieht so aus, als wäre die URL ungültig. Bitte überprüfe sie und versuche es nochmal.",
-	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Hoppla! Du verwendest eine nicht unterstützte Methode (nur Frontend). Bitte stelle die WebUI vom Backend aus bereit.",
+	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Hoppla! du verwendest eine nicht unterstützte Methode (nur Frontend). Bitte stelle die WebUI vom Backend aus bereit.",
 	"Open": "Öffne",
 	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "Neuen Chat öffnen",
-	"OpenAI": "",
+	"OpenAI": "OpenAI",
 	"OpenAI API": "OpenAI-API",
 	"OpenAI API Config": "OpenAI API Konfiguration",
 	"OpenAI API Key is required.": "OpenAI API Key erforderlich.",
 	"OpenAI URL/Key required.": "OpenAI URL/Key erforderlich.",
 	"or": "oder",
 	"Other": "Andere",
+	"Overview": "Übersicht",
 	"Parameters": "Parameter",
 	"Password": "Passwort",
 	"PDF document (.pdf)": "PDF-Dokument (.pdf)",
@@ -290,13 +324,17 @@
 	"pending": "ausstehend",
 	"Permission denied when accessing microphone: {{error}}": "Zugriff auf das Mikrofon verweigert: {{error}}",
 	"Plain text (.txt)": "Nur Text (.txt)",
-	"Playground": "Spielplatz",
+	"Playground": "Testumgebung",
 	"Positive attitude": "Positive Einstellung",
+	"Previous 30 days": "Vorherige 30 Tage",
+	"Previous 7 days": "Vorherige 7 Tage",
 	"Profile Image": "Profilbild",
+	"Prompt": "Prompt",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Prompt (z.B. Erzähle mir eine interessante Tatsache über das Römische Reich.",
 	"Prompt Content": "Prompt-Inhalt",
 	"Prompt suggestions": "Prompt-Vorschläge",
 	"Prompts": "Prompts",
+	"Pull \"{{searchValue}}\" from Ollama.com": "\"{{searchValue}}\" von Ollama.com herunterladen",
 	"Pull a model from Ollama.com": "Ein Modell von Ollama.com abrufen",
 	"Pull Progress": "Fortschritt abrufen",
 	"Query Params": "Query Parameter",
@@ -309,10 +347,13 @@
 	"Regenerate": "Neu generieren",
 	"Release Notes": "Versionshinweise",
 	"Remove": "Entfernen",
+	"Remove Model": "Modell entfernen",
+	"Rename": "Umbenennen",
 	"Repeat Last N": "Repeat Last N",
 	"Repeat Penalty": "Repeat Penalty",
 	"Request Mode": "Request-Modus",
-	"Reranking model disabled": "",
+	"Reranking Model": "Reranking Modell",
+	"Reranking model disabled": "Rranking Modell deaktiviert",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "Vektorspeicher zurücksetzen",
 	"Response AutoCopy to Clipboard": "Antwort automatisch in die Zwischenablage kopieren",
@@ -323,12 +364,12 @@
 	"Save & Create": "Speichern und erstellen",
 	"Save & Submit": "Speichern und senden",
 	"Save & Update": "Speichern und aktualisieren",
-	"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Das direkte Speichern von Chat-Protokollen im Browser-Speicher wird nicht mehr unterstützt. Bitte nimm Dir einen Moment Zeit, um deine Chat-Protokolle herunterzuladen und zu löschen, indem Du auf die Schaltfläche unten klickst. Keine Sorge, Du kannst deine Chat-Protokolle problemlos über das Backend wieder importieren.",
+	"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Das direkte Speichern von Chat-Protokollen im Browser-Speicher wird nicht mehr unterstützt. Bitte nimm dir einen Moment Zeit, um deine Chat-Protokolle herunterzuladen und zu löschen, indem du auf die Schaltfläche unten klickst. Keine Sorge, du kannst deine Chat-Protokolle problemlos über das Backend wieder importieren.",
 	"Scan": "Scannen",
 	"Scan complete!": "Scan abgeschlossen!",
 	"Scan for documents from {{path}}": "Dokumente von {{path}} scannen",
 	"Search": "Suchen",
-	"Search a model": "Ein Modell suchen",
+	"Search a model": "Nach einem Modell suchen",
 	"Search Documents": "Dokumente suchen",
 	"Search Prompts": "Prompts suchen",
 	"See readme.md for instructions": "Anleitung in readme.md anzeigen",
@@ -337,12 +378,17 @@
 	"Select a mode": "Einen Modus auswählen",
 	"Select a model": "Ein Modell auswählen",
 	"Select an Ollama instance": "Eine Ollama Instanz auswählen",
+	"Select model": "",
 	"Send a Message": "Eine Nachricht senden",
 	"Send message": "Nachricht senden",
+	"September": "September",
 	"Server connection verified": "Serververbindung überprüft",
 	"Set as default": "Als Standard festlegen",
 	"Set Default Model": "Standardmodell festlegen",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "Bildgröße festlegen",
+	"Set Model": "Modell festlegen",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "Schritte festlegen",
 	"Set Title Auto-Generation Model": "Modell für automatische Titelgenerierung festlegen",
 	"Set Voice": "Stimme festlegen",
@@ -361,6 +407,7 @@
 	"Sign Out": "Abmelden",
 	"Sign up": "Registrieren",
 	"Signing in": "Anmeldung",
+	"Source": "Quellen",
 	"Speech recognition error: {{error}}": "Spracherkennungsfehler: {{error}}",
 	"Speech-to-Text Engine": "Sprache-zu-Text-Engine",
 	"SpeechRecognition API is not supported in this browser.": "Die Spracherkennungs-API wird in diesem Browser nicht unterstützt.",
@@ -370,6 +417,7 @@
 	"Subtitle (e.g. about the Roman Empire)": "Untertitel (z.B. über das Römische Reich)",
 	"Success": "Erfolg",
 	"Successfully updated.": "Erfolgreich aktualisiert.",
+	"Suggested": "Vorgeschlagen",
 	"Sync All": "Alles synchronisieren",
 	"System": "System",
 	"System Prompt": "System-Prompt",
@@ -381,7 +429,7 @@
 	"Text-to-Speech Engine": "Text-zu-Sprache-Engine",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Danke für dein Feedback",
-	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "",
+	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Der Score sollte ein Wert zwischen 0,0 (0 %) und 1,0 (100 %) sein.",
 	"Theme": "Design",
 	"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Dadurch werden deine wertvollen Unterhaltungen sicher in der Backend-Datenbank gespeichert. Vielen Dank!",
 	"This setting does not sync across browsers or devices.": "Diese Einstellung wird nicht zwischen Browsern oder Geräten synchronisiert.",
@@ -390,11 +438,13 @@
 	"Title": "Titel",
 	"Title (e.g. Tell me a fun fact)": "Titel (z.B. Erzähle mir eine lustige Tatsache",
 	"Title Auto-Generation": "Automatische Titelgenerierung",
+	"Title cannot be an empty string.": "Titel darf nicht leer sein.",
 	"Title Generation Prompt": "Prompt für Titelgenerierung",
 	"to": "für",
 	"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 chat input.": "to chat input.",
+	"Today": "Heute",
 	"Toggle settings": "Einstellungen umschalten",
 	"Toggle sidebar": "Seitenleiste umschalten",
 	"Top K": "Top K",
@@ -405,18 +455,14 @@
 	"Uh-oh! There was an issue connecting to {{provider}}.": "Ups! Es gab ein Problem bei der Verbindung mit {{provider}}.",
 	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Unbekannter Dateityp '{{file_type}}', wird jedoch akzeptiert und als einfacher Text behandelt.",
 	"Update and Copy Link": "Erneuern und kopieren",
-	"Update Embedding Model": "Embedding Modell aktualisieren",
-	"Update embedding model (e.g. {{model}})": "Embedding Modell aktualisieren (z.B. {{model}})",
 	"Update password": "Passwort aktualisieren",
-	"Update Reranking Model": "Reranking Model aktualisieren",
-	"Update reranking model (e.g. {{model}})": "Reranking Model aktualisieren (z.B. {{model}})",
 	"Upload a GGUF model": "GGUF Model hochladen",
 	"Upload files": "Dateien hochladen",
 	"Upload Progress": "Upload Progress",
 	"URL Mode": "URL Modus",
 	"Use '#' in the prompt input to load and select your documents.": "Verwende '#' in der Prompt-Eingabe, um deine Dokumente zu laden und auszuwählen.",
-	"Use Gravatar": "verwende Gravatar ",
-	"Use Initials": "verwende Initialen",
+	"Use Gravatar": "Gravatar verwenden",
+	"Use Initials": "Initialen verwenden",
 	"user": "Benutzer",
 	"User Permissions": "Benutzerberechtigungen",
 	"Users": "Benutzer",
@@ -427,7 +473,9 @@
 	"Version": "Version",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Warnung: Wenn du dein Einbettungsmodell aktualisierst oder änderst, musst du alle Dokumente erneut importieren.",
 	"Web": "Web",
-	"Webhook URL": "",
+	"Web Loader Settings": "",
+	"Web Params": "Web Parameter",
+	"Webhook URL": "Webhook URL",
 	"WebUI Add-ons": "WebUI-Add-Ons",
 	"WebUI Settings": "WebUI-Einstellungen",
 	"WebUI will make requests to": "Wenn aktiviert sendet WebUI externe Anfragen an",
@@ -436,8 +484,12 @@
 	"Whisper (Local)": "Whisper (Lokal)",
 	"Write a prompt suggestion (e.g. Who are you?)": "Gebe einen Prompt-Vorschlag ein (z.B. Wer bist du?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Schreibe eine kurze Zusammenfassung in 50 Wörtern, die [Thema oder Schlüsselwort] zusammenfasst.",
+	"Yesterday": "Gestern",
 	"You": "Du",
+	"You have no archived conversations.": "Du hast keine archivierten Unterhaltungen.",
+	"You have shared this chat": "Du hast diesen Chat",
 	"You're a helpful assistant.": "Du bist ein hilfreicher Assistent.",
 	"You're now logged in.": "Du bist nun eingeloggt.",
-	"Youtube": ""
+	"Youtube": "YouTube",
+	"Youtube Loader Settings": ""
 }

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

@@ -15,6 +15,7 @@
 	"Add a short description about what this modelfile does": "Add short description about what this modelfile does",
 	"Add a short title for this prompt": "Add short title for this prompt",
 	"Add a tag": "Add such tag",
+	"Add custom prompt": "",
 	"Add Docs": "Add Docs",
 	"Add Files": "Add Files",
 	"Add message": "Add Prompt",
@@ -27,6 +28,7 @@
 	"Admin Settings": "Admin Settings",
 	"Advanced Parameters": "Advanced Parameters",
 	"all": "all",
+	"All Documents": "",
 	"All Users": "All Users",
 	"Allow": "Allow",
 	"Allow Chat Deletion": "Allow Delete Chats",
@@ -34,17 +36,21 @@
 	"Already have an account?": "Such account exists?",
 	"an assistant": "such assistant",
 	"and": "and",
+	"and create a new shared link.": "",
 	"API Base URL": "API Base URL",
 	"API Key": "API Key",
 	"API Key created.": "",
 	"API keys": "",
 	"API RPM": "API RPM",
+	"April": "",
 	"Archive": "",
 	"Archived Chats": "",
 	"are allowed - Activate this command by typing": "are allowed. Activate typing",
 	"Are you sure?": "Such certainty?",
+	"Attach file": "",
 	"Attention to detail": "",
 	"Audio": "Audio",
+	"August": "",
 	"Auto-playback response": "Auto-playback response",
 	"Auto-send input after 3 sec.": "Auto-send after 3 sec.",
 	"AUTOMATIC1111 Base URL": "AUTOMATIC1111 Base URL",
@@ -52,8 +58,10 @@
 	"available!": "available! So excite!",
 	"Back": "Back",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "Builder Mode",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "Cancel",
 	"Categories": "Categories",
 	"Change Password": "Change Password",
@@ -68,7 +76,9 @@
 	"Chunk Overlap": "Chunk Overlap",
 	"Chunk Params": "Chunk Params",
 	"Chunk Size": "Chunk Size",
+	"Citation": "",
 	"Click here for help.": "Click for help. Much assist.",
+	"Click here to": "",
 	"Click here to check other modelfiles.": "Click to check other modelfiles.",
 	"Click here to select": "Click to select",
 	"Click here to select a csv file.": "",
@@ -96,6 +106,8 @@
 	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Create short phrase, 3-5 word, as header for query, much strict, avoid 'title':",
 	"Create a modelfile": "Create modelfile",
 	"Create Account": "Create Account",
+	"Create new key": "",
+	"Create new secret key": "",
 	"Created at": "Created at",
 	"Created At": "",
 	"Current Model": "Current Model",
@@ -103,8 +115,10 @@
 	"Custom": "Custom",
 	"Customize Ollama models for a specific purpose": "Customize Ollama models for purpose",
 	"Dark": "Dark",
+	"Dashboard": "",
 	"Database": "Database",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
+	"December": "",
 	"Default": "Default",
 	"Default (Automatic1111)": "Default (Automatic1111)",
 	"Default (SentenceTransformers)": "",
@@ -118,6 +132,7 @@
 	"Delete chat": "Delete chat",
 	"Delete Chat": "",
 	"Delete Chats": "Delete Chats",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "Deleted {{deleteModelTag}}",
 	"Deleted {{tagName}}": "",
@@ -137,6 +152,7 @@
 	"Don't have an account?": "No account? Much sad.",
 	"Don't like the style": "",
 	"Download": "",
+	"Download canceled": "",
 	"Download Database": "Download Database",
 	"Drop any files here to add to the conversation": "Drop files here to add to conversation",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "e.g. '30s','10m'. Much time units are 's', 'm', 'h'.",
@@ -144,6 +160,7 @@
 	"Edit Doc": "Edit Doge",
 	"Edit User": "Edit Wowser",
 	"Email": "Email",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "Activate Chat Story",
@@ -154,6 +171,7 @@
 	"Enter Chunk Overlap": "Enter Overlap of Chunks",
 	"Enter Chunk Size": "Enter Size of Chunk",
 	"Enter Image Size (e.g. 512x512)": "Enter Size of Wow (e.g. 512x512)",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "Enter Base URL of LiteLLM API (litellm_params.api_base)",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "Enter API Bark of LiteLLM (litellm_params.api_key)",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Enter RPM of LiteLLM API (litellm_params.rpm)",
@@ -165,6 +183,7 @@
 	"Enter stop sequence": "Enter stop bark",
 	"Enter Top K": "Enter Top Wow",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "Enter URL (e.g. http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "Enter Your Dogemail",
 	"Enter Your Full Name": "Enter Your Full Wow",
 	"Enter Your Password": "Enter Your Barkword",
@@ -177,6 +196,7 @@
 	"Export Prompts": "Export Promptos",
 	"Failed to create API Key.": "",
 	"Failed to read clipboard contents": "Failed to read clipboard borks",
+	"February": "",
 	"Feel free to add specific details": "",
 	"File Mode": "Bark Mode",
 	"File not found.": "Bark not found.",
@@ -193,6 +213,7 @@
 	"Good Response": "",
 	"has no conversations.": "",
 	"Hello, {{name}}": "Much helo, {{name}}",
+	"Help": "",
 	"Hide": "Hide",
 	"Hide Additional Params": "Hide Extra Barkos",
 	"How can I help you today?": "How can I halp u today?",
@@ -206,9 +227,14 @@
 	"Import Modelfiles": "Import Modelfiles",
 	"Import Prompts": "Import Promptos",
 	"Include `--api` flag when running stable-diffusion-webui": "Include `--api` flag when running stable-diffusion-webui",
+	"Input commands": "",
 	"Interface": "Interface",
+	"Invalid Tag": "",
+	"January": "",
 	"join our Discord for help.": "join our Discord for help.",
 	"JSON": "JSON",
+	"July": "",
+	"June": "",
 	"JWT Expiration": "JWT Expire",
 	"JWT Token": "JWT Borken",
 	"Keep Alive": "Keep Wow",
@@ -223,8 +249,11 @@
 	"Manage LiteLLM Models": "Manage LiteLLM Models",
 	"Manage Models": "Manage Wowdels",
 	"Manage Ollama Models": "Manage Ollama Wowdels",
+	"March": "",
 	"Max Tokens": "Max Tokens",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maximum of 3 models can be downloaded simultaneously. Please try again later.",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
 	"Minimum Score": "",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
@@ -255,11 +284,15 @@
 	"Name your modelfile": "Name your modelfile",
 	"New Chat": "New Bark",
 	"New Password": "New Barkword",
+	"No results found": "",
+	"No source available": "",
 	"Not factually correct": "",
 	"Not sure what to add?": "Not sure what to add?",
 	"Not sure what to write? Switch to": "Not sure what to write? Switch to",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
 	"Notifications": "Notifications",
+	"November": "",
+	"October": "",
 	"Off": "Off",
 	"Okay, Let's Go!": "Okay, Let's Go!",
 	"OLED Dark": "OLED Dark",
@@ -283,6 +316,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "or",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Parametos",
 	"Password": "Barkword",
 	"PDF document (.pdf)": "",
@@ -292,11 +326,15 @@
 	"Plain text (.txt)": "",
 	"Playground": "Playground",
 	"Positive attitude": "",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
 	"Profile Image": "",
+	"Prompt": "",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
 	"Prompt Content": "Prompt Content",
 	"Prompt suggestions": "Prompt wowgestions",
 	"Prompts": "Promptos",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Pull a wowdel from Ollama.com",
 	"Pull Progress": "Pull Progress",
 	"Query Params": "Query Bark",
@@ -309,9 +347,12 @@
 	"Regenerate": "",
 	"Release Notes": "Release Borks",
 	"Remove": "",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "Repeat Last N",
 	"Repeat Penalty": "Repeat Penalty",
 	"Request Mode": "Request Bark",
+	"Reranking Model": "",
 	"Reranking model disabled": "",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "Reset Vector Storage",
@@ -337,12 +378,17 @@
 	"Select a mode": "Select a mode very choose",
 	"Select a model": "Select a model much choice",
 	"Select an Ollama instance": "Select an Ollama instance very choose",
+	"Select model": "",
 	"Send a Message": "Send a Message much message",
 	"Send message": "Send message very send",
+	"September": "",
 	"Server connection verified": "Server connection verified much secure",
 	"Set as default": "Set as default very default",
 	"Set Default Model": "Set Default Model much model",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "Set Image Size very size",
+	"Set Model": "Set Model so speak",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "Set Steps so many steps",
 	"Set Title Auto-Generation Model": "Set Title Auto-Generation Model very auto-generate",
 	"Set Voice": "Set Voice so speak",
@@ -361,6 +407,7 @@
 	"Sign Out": "Sign Out much logout",
 	"Sign up": "Sign up much join",
 	"Signing in": "",
+	"Source": "",
 	"Speech recognition error: {{error}}": "Speech recognition error: {{error}} so error",
 	"Speech-to-Text Engine": "Speech-to-Text Engine much speak",
 	"SpeechRecognition API is not supported in this browser.": "SpeechRecognition API is not supported in this browser. Much sad.",
@@ -370,6 +417,7 @@
 	"Subtitle (e.g. about the Roman Empire)": "",
 	"Success": "Success very success",
 	"Successfully updated.": "Successfully updated. Very updated.",
+	"Suggested": "",
 	"Sync All": "Sync All much sync",
 	"System": "System very system",
 	"System Prompt": "System Prompt much prompt",
@@ -390,11 +438,13 @@
 	"Title": "Title very title",
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "Title Auto-Generation much auto-gen",
+	"Title cannot be an empty string.": "",
 	"Title Generation Prompt": "Title Generation Prompt very prompt",
 	"to": "to very to",
 	"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 chat input.": "to chat input. Very chat.",
+	"Today": "",
 	"Toggle settings": "Toggle settings much toggle",
 	"Toggle sidebar": "Toggle sidebar much toggle",
 	"Top K": "Top K very top",
@@ -405,11 +455,7 @@
 	"Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh! There was an issue connecting to {{provider}}. Much uh-oh!",
 	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Unknown File Type '{{file_type}}', but accepting and treating as plain text very unknown",
 	"Update and Copy Link": "",
-	"Update Embedding Model": "",
-	"Update embedding model (e.g. {{model}})": "",
 	"Update password": "Update password much change",
-	"Update Reranking Model": "",
-	"Update reranking model (e.g. {{model}})": "",
 	"Upload a GGUF model": "Upload a GGUF model very upload",
 	"Upload files": "Upload files very upload",
 	"Upload Progress": "Upload Progress much progress",
@@ -427,6 +473,8 @@
 	"Version": "Version much version",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Web very web",
+	"Web Loader Settings": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "WebUI Add-ons very add-ons",
 	"WebUI Settings": "WebUI Settings much settings",
@@ -436,8 +484,12 @@
 	"Whisper (Local)": "Whisper (Local) much whisper",
 	"Write a prompt suggestion (e.g. Who are you?)": "Write a prompt suggestion (e.g. Who are you?) much suggest",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Write a summary in 50 words that summarizes [topic or keyword]. Much summarize.",
+	"Yesterday": "",
 	"You": "You very you",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "You're a helpful assistant. Much helpful.",
 	"You're now logged in.": "You're now logged in. Much logged.",
-	"Youtube": ""
+	"Youtube": "",
+	"Youtube Loader Settings": ""
 }

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

@@ -15,6 +15,7 @@
 	"Add a short description about what this modelfile does": "",
 	"Add a short title for this prompt": "",
 	"Add a tag": "",
+	"Add custom prompt": "",
 	"Add Docs": "",
 	"Add Files": "",
 	"Add message": "",
@@ -27,6 +28,7 @@
 	"Admin Settings": "",
 	"Advanced Parameters": "",
 	"all": "",
+	"All Documents": "",
 	"All Users": "",
 	"Allow": "",
 	"Allow Chat Deletion": "",
@@ -34,17 +36,21 @@
 	"Already have an account?": "",
 	"an assistant": "",
 	"and": "",
+	"and create a new shared link.": "",
 	"API Base URL": "",
 	"API Key": "",
 	"API Key created.": "",
 	"API keys": "",
 	"API RPM": "",
+	"April": "",
 	"Archive": "",
 	"Archived Chats": "",
 	"are allowed - Activate this command by typing": "",
 	"Are you sure?": "",
+	"Attach file": "",
 	"Attention to detail": "",
 	"Audio": "",
+	"August": "",
 	"Auto-playback response": "",
 	"Auto-send input after 3 sec.": "",
 	"AUTOMATIC1111 Base URL": "",
@@ -52,8 +58,10 @@
 	"available!": "",
 	"Back": "",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "",
 	"Categories": "",
 	"Change Password": "",
@@ -68,7 +76,9 @@
 	"Chunk Overlap": "",
 	"Chunk Params": "",
 	"Chunk Size": "",
+	"Citation": "",
 	"Click here for help.": "",
+	"Click here to": "",
 	"Click here to check other modelfiles.": "",
 	"Click here to select": "",
 	"Click here to select a csv file.": "",
@@ -96,6 +106,8 @@
 	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "",
 	"Create a modelfile": "",
 	"Create Account": "",
+	"Create new key": "",
+	"Create new secret key": "",
 	"Created at": "",
 	"Created At": "",
 	"Current Model": "",
@@ -103,8 +115,10 @@
 	"Custom": "",
 	"Customize Ollama models for a specific purpose": "",
 	"Dark": "",
+	"Dashboard": "",
 	"Database": "",
 	"DD/MM/YYYY HH:mm": "",
+	"December": "",
 	"Default": "",
 	"Default (Automatic1111)": "",
 	"Default (SentenceTransformers)": "",
@@ -118,6 +132,7 @@
 	"Delete chat": "",
 	"Delete Chat": "",
 	"Delete Chats": "",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "",
 	"Deleted {{tagName}}": "",
@@ -137,6 +152,7 @@
 	"Don't have an account?": "",
 	"Don't like the style": "",
 	"Download": "",
+	"Download canceled": "",
 	"Download Database": "",
 	"Drop any files here to add to the conversation": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "",
@@ -144,6 +160,7 @@
 	"Edit Doc": "",
 	"Edit User": "",
 	"Email": "",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "",
@@ -154,6 +171,7 @@
 	"Enter Chunk Overlap": "",
 	"Enter Chunk Size": "",
 	"Enter Image Size (e.g. 512x512)": "",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "",
@@ -165,6 +183,7 @@
 	"Enter stop sequence": "",
 	"Enter Top K": "",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "",
+	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "",
 	"Enter Your Full Name": "",
 	"Enter Your Password": "",
@@ -177,6 +196,7 @@
 	"Export Prompts": "",
 	"Failed to create API Key.": "",
 	"Failed to read clipboard contents": "",
+	"February": "",
 	"Feel free to add specific details": "",
 	"File Mode": "",
 	"File not found.": "",
@@ -193,6 +213,7 @@
 	"Good Response": "",
 	"has no conversations.": "",
 	"Hello, {{name}}": "",
+	"Help": "",
 	"Hide": "",
 	"Hide Additional Params": "",
 	"How can I help you today?": "",
@@ -206,9 +227,14 @@
 	"Import Modelfiles": "",
 	"Import Prompts": "",
 	"Include `--api` flag when running stable-diffusion-webui": "",
+	"Input commands": "",
 	"Interface": "",
+	"Invalid Tag": "",
+	"January": "",
 	"join our Discord for help.": "",
 	"JSON": "",
+	"July": "",
+	"June": "",
 	"JWT Expiration": "",
 	"JWT Token": "",
 	"Keep Alive": "",
@@ -223,8 +249,11 @@
 	"Manage LiteLLM Models": "",
 	"Manage Models": "",
 	"Manage Ollama Models": "",
+	"March": "",
 	"Max Tokens": "",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
 	"Minimum Score": "",
 	"Mirostat": "",
 	"Mirostat Eta": "",
@@ -255,11 +284,15 @@
 	"Name your modelfile": "",
 	"New Chat": "",
 	"New Password": "",
+	"No results found": "",
+	"No source available": "",
 	"Not factually correct": "",
 	"Not sure what to add?": "",
 	"Not sure what to write? Switch to": "",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
 	"Notifications": "",
+	"November": "",
+	"October": "",
 	"Off": "",
 	"Okay, Let's Go!": "",
 	"OLED Dark": "",
@@ -283,6 +316,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "",
 	"Password": "",
 	"PDF document (.pdf)": "",
@@ -292,11 +326,15 @@
 	"Plain text (.txt)": "",
 	"Playground": "",
 	"Positive attitude": "",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
 	"Profile Image": "",
+	"Prompt": "",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
 	"Prompt Content": "",
 	"Prompt suggestions": "",
 	"Prompts": "",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "",
 	"Pull Progress": "",
 	"Query Params": "",
@@ -309,9 +347,12 @@
 	"Regenerate": "",
 	"Release Notes": "",
 	"Remove": "",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "",
 	"Repeat Penalty": "",
 	"Request Mode": "",
+	"Reranking Model": "",
 	"Reranking model disabled": "",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "",
@@ -337,12 +378,17 @@
 	"Select a mode": "",
 	"Select a model": "",
 	"Select an Ollama instance": "",
+	"Select model": "",
 	"Send a Message": "",
 	"Send message": "",
+	"September": "",
 	"Server connection verified": "",
 	"Set as default": "",
 	"Set Default Model": "",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "",
+	"Set Model": "",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "",
 	"Set Title Auto-Generation Model": "",
 	"Set Voice": "",
@@ -361,6 +407,7 @@
 	"Sign Out": "",
 	"Sign up": "",
 	"Signing in": "",
+	"Source": "",
 	"Speech recognition error: {{error}}": "",
 	"Speech-to-Text Engine": "",
 	"SpeechRecognition API is not supported in this browser.": "",
@@ -370,6 +417,7 @@
 	"Subtitle (e.g. about the Roman Empire)": "",
 	"Success": "",
 	"Successfully updated.": "",
+	"Suggested": "",
 	"Sync All": "",
 	"System": "",
 	"System Prompt": "",
@@ -390,11 +438,13 @@
 	"Title": "",
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "",
+	"Title cannot be an empty string.": "",
 	"Title Generation Prompt": "",
 	"to": "",
 	"To access the available model names for downloading,": "",
 	"To access the GGUF models available for downloading,": "",
 	"to chat input.": "",
+	"Today": "",
 	"Toggle settings": "",
 	"Toggle sidebar": "",
 	"Top K": "",
@@ -405,11 +455,7 @@
 	"Uh-oh! There was an issue connecting to {{provider}}.": "",
 	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "",
 	"Update and Copy Link": "",
-	"Update Embedding Model": "",
-	"Update embedding model (e.g. {{model}})": "",
 	"Update password": "",
-	"Update Reranking Model": "",
-	"Update reranking model (e.g. {{model}})": "",
 	"Upload a GGUF model": "",
 	"Upload files": "",
 	"Upload Progress": "",
@@ -427,6 +473,8 @@
 	"Version": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "",
+	"Web Loader Settings": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "",
 	"WebUI Settings": "",
@@ -436,8 +484,12 @@
 	"Whisper (Local)": "",
 	"Write a prompt suggestion (e.g. Who are you?)": "",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "",
+	"Yesterday": "",
 	"You": "",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "",
 	"You're now logged in.": "",
-	"Youtube": ""
+	"Youtube": "",
+	"Youtube Loader Settings": ""
 }

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

@@ -15,6 +15,7 @@
 	"Add a short description about what this modelfile does": "",
 	"Add a short title for this prompt": "",
 	"Add a tag": "",
+	"Add custom prompt": "",
 	"Add Docs": "",
 	"Add Files": "",
 	"Add message": "",
@@ -27,6 +28,7 @@
 	"Admin Settings": "",
 	"Advanced Parameters": "",
 	"all": "",
+	"All Documents": "",
 	"All Users": "",
 	"Allow": "",
 	"Allow Chat Deletion": "",
@@ -34,17 +36,21 @@
 	"Already have an account?": "",
 	"an assistant": "",
 	"and": "",
+	"and create a new shared link.": "",
 	"API Base URL": "",
 	"API Key": "",
 	"API Key created.": "",
 	"API keys": "",
 	"API RPM": "",
+	"April": "",
 	"Archive": "",
 	"Archived Chats": "",
 	"are allowed - Activate this command by typing": "",
 	"Are you sure?": "",
+	"Attach file": "",
 	"Attention to detail": "",
 	"Audio": "",
+	"August": "",
 	"Auto-playback response": "",
 	"Auto-send input after 3 sec.": "",
 	"AUTOMATIC1111 Base URL": "",
@@ -52,8 +58,10 @@
 	"available!": "",
 	"Back": "",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "",
 	"Categories": "",
 	"Change Password": "",
@@ -68,7 +76,9 @@
 	"Chunk Overlap": "",
 	"Chunk Params": "",
 	"Chunk Size": "",
+	"Citation": "",
 	"Click here for help.": "",
+	"Click here to": "",
 	"Click here to check other modelfiles.": "",
 	"Click here to select": "",
 	"Click here to select a csv file.": "",
@@ -96,6 +106,8 @@
 	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "",
 	"Create a modelfile": "",
 	"Create Account": "",
+	"Create new key": "",
+	"Create new secret key": "",
 	"Created at": "",
 	"Created At": "",
 	"Current Model": "",
@@ -103,8 +115,10 @@
 	"Custom": "",
 	"Customize Ollama models for a specific purpose": "",
 	"Dark": "",
+	"Dashboard": "",
 	"Database": "",
 	"DD/MM/YYYY HH:mm": "",
+	"December": "",
 	"Default": "",
 	"Default (Automatic1111)": "",
 	"Default (SentenceTransformers)": "",
@@ -118,6 +132,7 @@
 	"Delete chat": "",
 	"Delete Chat": "",
 	"Delete Chats": "",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "",
 	"Deleted {{tagName}}": "",
@@ -137,6 +152,7 @@
 	"Don't have an account?": "",
 	"Don't like the style": "",
 	"Download": "",
+	"Download canceled": "",
 	"Download Database": "",
 	"Drop any files here to add to the conversation": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "",
@@ -144,6 +160,7 @@
 	"Edit Doc": "",
 	"Edit User": "",
 	"Email": "",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "",
@@ -154,6 +171,7 @@
 	"Enter Chunk Overlap": "",
 	"Enter Chunk Size": "",
 	"Enter Image Size (e.g. 512x512)": "",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "",
@@ -165,6 +183,7 @@
 	"Enter stop sequence": "",
 	"Enter Top K": "",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "",
+	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "",
 	"Enter Your Full Name": "",
 	"Enter Your Password": "",
@@ -177,6 +196,7 @@
 	"Export Prompts": "",
 	"Failed to create API Key.": "",
 	"Failed to read clipboard contents": "",
+	"February": "",
 	"Feel free to add specific details": "",
 	"File Mode": "",
 	"File not found.": "",
@@ -193,6 +213,7 @@
 	"Good Response": "",
 	"has no conversations.": "",
 	"Hello, {{name}}": "",
+	"Help": "",
 	"Hide": "",
 	"Hide Additional Params": "",
 	"How can I help you today?": "",
@@ -206,9 +227,14 @@
 	"Import Modelfiles": "",
 	"Import Prompts": "",
 	"Include `--api` flag when running stable-diffusion-webui": "",
+	"Input commands": "",
 	"Interface": "",
+	"Invalid Tag": "",
+	"January": "",
 	"join our Discord for help.": "",
 	"JSON": "",
+	"July": "",
+	"June": "",
 	"JWT Expiration": "",
 	"JWT Token": "",
 	"Keep Alive": "",
@@ -223,8 +249,11 @@
 	"Manage LiteLLM Models": "",
 	"Manage Models": "",
 	"Manage Ollama Models": "",
+	"March": "",
 	"Max Tokens": "",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
 	"Minimum Score": "",
 	"Mirostat": "",
 	"Mirostat Eta": "",
@@ -255,11 +284,15 @@
 	"Name your modelfile": "",
 	"New Chat": "",
 	"New Password": "",
+	"No results found": "",
+	"No source available": "",
 	"Not factually correct": "",
 	"Not sure what to add?": "",
 	"Not sure what to write? Switch to": "",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
 	"Notifications": "",
+	"November": "",
+	"October": "",
 	"Off": "",
 	"Okay, Let's Go!": "",
 	"OLED Dark": "",
@@ -283,6 +316,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "",
 	"Password": "",
 	"PDF document (.pdf)": "",
@@ -292,11 +326,15 @@
 	"Plain text (.txt)": "",
 	"Playground": "",
 	"Positive attitude": "",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
 	"Profile Image": "",
+	"Prompt": "",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
 	"Prompt Content": "",
 	"Prompt suggestions": "",
 	"Prompts": "",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "",
 	"Pull Progress": "",
 	"Query Params": "",
@@ -309,9 +347,12 @@
 	"Regenerate": "",
 	"Release Notes": "",
 	"Remove": "",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "",
 	"Repeat Penalty": "",
 	"Request Mode": "",
+	"Reranking Model": "",
 	"Reranking model disabled": "",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "",
@@ -337,12 +378,17 @@
 	"Select a mode": "",
 	"Select a model": "",
 	"Select an Ollama instance": "",
+	"Select model": "",
 	"Send a Message": "",
 	"Send message": "",
+	"September": "",
 	"Server connection verified": "",
 	"Set as default": "",
 	"Set Default Model": "",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "",
+	"Set Model": "",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "",
 	"Set Title Auto-Generation Model": "",
 	"Set Voice": "",
@@ -361,6 +407,7 @@
 	"Sign Out": "",
 	"Sign up": "",
 	"Signing in": "",
+	"Source": "",
 	"Speech recognition error: {{error}}": "",
 	"Speech-to-Text Engine": "",
 	"SpeechRecognition API is not supported in this browser.": "",
@@ -370,6 +417,7 @@
 	"Subtitle (e.g. about the Roman Empire)": "",
 	"Success": "",
 	"Successfully updated.": "",
+	"Suggested": "",
 	"Sync All": "",
 	"System": "",
 	"System Prompt": "",
@@ -390,11 +438,13 @@
 	"Title": "",
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "",
+	"Title cannot be an empty string.": "",
 	"Title Generation Prompt": "",
 	"to": "",
 	"To access the available model names for downloading,": "",
 	"To access the GGUF models available for downloading,": "",
 	"to chat input.": "",
+	"Today": "",
 	"Toggle settings": "",
 	"Toggle sidebar": "",
 	"Top K": "",
@@ -405,11 +455,7 @@
 	"Uh-oh! There was an issue connecting to {{provider}}.": "",
 	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "",
 	"Update and Copy Link": "",
-	"Update Embedding Model": "",
-	"Update embedding model (e.g. {{model}})": "",
 	"Update password": "",
-	"Update Reranking Model": "",
-	"Update reranking model (e.g. {{model}})": "",
 	"Upload a GGUF model": "",
 	"Upload files": "",
 	"Upload Progress": "",
@@ -427,6 +473,8 @@
 	"Version": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "",
+	"Web Loader Settings": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "",
 	"WebUI Settings": "",
@@ -436,8 +484,12 @@
 	"Whisper (Local)": "",
 	"Write a prompt suggestion (e.g. Who are you?)": "",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "",
+	"Yesterday": "",
 	"You": "",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "",
 	"You're now logged in.": "",
-	"Youtube": ""
+	"Youtube": "",
+	"Youtube Loader Settings": ""
 }

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

@@ -15,6 +15,7 @@
 	"Add a short description about what this modelfile does": "Agregue una descripción corta de lo que este modelfile hace",
 	"Add a short title for this prompt": "Agregue un título corto para este Prompt",
 	"Add a tag": "Agregar una etiqueta",
+	"Add custom prompt": "",
 	"Add Docs": "Agregar Documentos",
 	"Add Files": "Agregar Archivos",
 	"Add message": "Agregar Prompt",
@@ -27,6 +28,7 @@
 	"Admin Settings": "Configuración de Administrador",
 	"Advanced Parameters": "Parámetros Avanzados",
 	"all": "todo",
+	"All Documents": "",
 	"All Users": "Todos los Usuarios",
 	"Allow": "Permitir",
 	"Allow Chat Deletion": "Permitir Borrar Chats",
@@ -34,17 +36,21 @@
 	"Already have an account?": "¿Ya tienes una cuenta?",
 	"an assistant": "un asistente",
 	"and": "y",
+	"and create a new shared link.": "",
 	"API Base URL": "Dirección URL de la API",
 	"API Key": "Clave de la API ",
 	"API Key created.": "",
 	"API keys": "",
 	"API RPM": "RPM de la API",
+	"April": "",
 	"Archive": "",
 	"Archived Chats": "Chats archivados",
 	"are allowed - Activate this command by typing": "están permitidos - Active este comando escribiendo",
 	"Are you sure?": "¿Está seguro?",
+	"Attach file": "",
 	"Attention to detail": "",
 	"Audio": "Audio",
+	"August": "",
 	"Auto-playback response": "Respuesta de reproducción automática",
 	"Auto-send input after 3 sec.": "Envía la información entrada automáticamente luego de 3 segundos.",
 	"AUTOMATIC1111 Base URL": "Dirección URL de AUTOMATIC1111",
@@ -52,8 +58,10 @@
 	"available!": "¡disponible!",
 	"Back": "Volver",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "Modo de Constructor",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "Cancelar",
 	"Categories": "Categorías",
 	"Change Password": "Cambia la Contraseña",
@@ -68,7 +76,9 @@
 	"Chunk Overlap": "Superposición de fragmentos",
 	"Chunk Params": "Parámetros de fragmentos",
 	"Chunk Size": "Tamaño de fragmentos",
+	"Citation": "",
 	"Click here for help.": "Presiona aquí para obtener ayuda.",
+	"Click here to": "",
 	"Click here to check other modelfiles.": "Presiona aquí para consultar otros modelfiles.",
 	"Click here to select": "Presiona aquí para seleccionar",
 	"Click here to select a csv file.": "",
@@ -96,6 +106,8 @@
 	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Cree una frase concisa de 3 a 5 palabras como encabezado para la siguiente consulta, respetando estrictamente el límite de 3 a 5 palabras y evitando el uso de la palabra 'título':",
 	"Create a modelfile": "Crea un modelfile",
 	"Create Account": "Crear una cuenta",
+	"Create new key": "",
+	"Create new secret key": "",
 	"Created at": "Creado en",
 	"Created At": "",
 	"Current Model": "Modelo Actual",
@@ -103,8 +115,10 @@
 	"Custom": "Personalizado",
 	"Customize Ollama models for a specific purpose": "Personaliza los modelos de Ollama para un propósito específico",
 	"Dark": "Oscuro",
+	"Dashboard": "",
 	"Database": "Base de datos",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
+	"December": "",
 	"Default": "Por defecto",
 	"Default (Automatic1111)": "Por defecto (Automatic1111)",
 	"Default (SentenceTransformers)": "",
@@ -118,6 +132,7 @@
 	"Delete chat": "Borrar chat",
 	"Delete Chat": "",
 	"Delete Chats": "Borrar Chats",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "Se borró {{deleteModelTag}}",
 	"Deleted {{tagName}}": "",
@@ -137,6 +152,7 @@
 	"Don't have an account?": "¿No tienes una cuenta?",
 	"Don't like the style": "",
 	"Download": "",
+	"Download canceled": "",
 	"Download Database": "Descarga la Base de Datos",
 	"Drop any files here to add to the conversation": "Suelta cualquier archivo aquí para agregarlo a la conversación",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p.ej. '30s','10m'. Unidades válidas de tiempo son 's', 'm', 'h'.",
@@ -144,6 +160,7 @@
 	"Edit Doc": "Editar Documento",
 	"Edit User": "Editar Usuario",
 	"Email": "Email",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "Activa el Historial de Chat",
@@ -154,6 +171,7 @@
 	"Enter Chunk Overlap": "Ingresar superposición de fragmentos",
 	"Enter Chunk Size": "Ingrese el tamaño del fragmento",
 	"Enter Image Size (e.g. 512x512)": "Ingrese el tamaño de la imagen (p.ej. 512x512)",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "Ingrese la URL base de la API LiteLLM (litellm_params.api_base)",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "Ingrese la clave API LiteLLM (litellm_params.api_key)",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Ingrese el RPM de la API LiteLLM (litellm_params.rpm)",
@@ -165,6 +183,7 @@
 	"Enter stop sequence": "Ingrese la secuencia de parada",
 	"Enter Top K": "Ingrese el Top K",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "Ingrese la URL (p.ej., http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "Ingrese su correo electrónico",
 	"Enter Your Full Name": "Ingrese su nombre completo",
 	"Enter Your Password": "Ingrese su contraseña",
@@ -177,6 +196,7 @@
 	"Export Prompts": "Exportar Prompts",
 	"Failed to create API Key.": "",
 	"Failed to read clipboard contents": "No se pudo leer el contenido del portapapeles",
+	"February": "",
 	"Feel free to add specific details": "",
 	"File Mode": "Modo de archivo",
 	"File not found.": "Archivo no encontrado.",
@@ -193,6 +213,7 @@
 	"Good Response": "",
 	"has no conversations.": "",
 	"Hello, {{name}}": "Hola, {{name}}",
+	"Help": "",
 	"Hide": "Esconder",
 	"Hide Additional Params": "Esconde los Parámetros Adicionales",
 	"How can I help you today?": "¿Cómo puedo ayudarte hoy?",
@@ -206,9 +227,14 @@
 	"Import Modelfiles": "Importar Modelfiles",
 	"Import Prompts": "Importar Prompts",
 	"Include `--api` flag when running stable-diffusion-webui": "Incluir el indicador `--api` al ejecutar stable-diffusion-webui",
+	"Input commands": "",
 	"Interface": "Interfaz",
+	"Invalid Tag": "",
+	"January": "",
 	"join our Discord for help.": "Únase a nuestro Discord para obtener ayuda.",
 	"JSON": "JSON",
+	"July": "",
+	"June": "",
 	"JWT Expiration": "Expiración del JWT",
 	"JWT Token": "Token JWT",
 	"Keep Alive": "Mantener Vivo",
@@ -223,8 +249,11 @@
 	"Manage LiteLLM Models": "Administrar Modelos LiteLLM",
 	"Manage Models": "Administrar Modelos",
 	"Manage Ollama Models": "Administrar Modelos Ollama",
+	"March": "",
 	"Max Tokens": "Máximo de Tokens",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Se pueden descargar un máximo de 3 modelos simultáneamente. Por favor, inténtelo de nuevo más tarde.",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
 	"Minimum Score": "",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
@@ -255,11 +284,15 @@
 	"Name your modelfile": "Nombra tu modelfile",
 	"New Chat": "Nuevo Chat",
 	"New Password": "Nueva Contraseña",
+	"No results found": "",
+	"No source available": "",
 	"Not factually correct": "",
 	"Not sure what to add?": "¿No sabes qué añadir?",
 	"Not sure what to write? Switch to": "¿No sabes qué escribir? Cambia a",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
 	"Notifications": "",
+	"November": "",
+	"October": "",
 	"Off": "Desactivado",
 	"Okay, Let's Go!": "Bien, ¡Vamos!",
 	"OLED Dark": "OLED oscuro",
@@ -283,6 +316,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "o",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Parámetros",
 	"Password": "Contraseña",
 	"PDF document (.pdf)": "",
@@ -292,11 +326,15 @@
 	"Plain text (.txt)": "",
 	"Playground": "Patio de juegos",
 	"Positive attitude": "",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
 	"Profile Image": "",
+	"Prompt": "",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
 	"Prompt Content": "Contenido del Prompt",
 	"Prompt suggestions": "Sugerencias de Prompts",
 	"Prompts": "Prompts",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Obtener un modelo de Ollama.com",
 	"Pull Progress": "Progreso de extracción",
 	"Query Params": "Parámetros de consulta",
@@ -309,9 +347,12 @@
 	"Regenerate": "",
 	"Release Notes": "Notas de la versión",
 	"Remove": "",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "Repetir las últimas N",
 	"Repeat Penalty": "Penalidad de repetición",
 	"Request Mode": "Modo de petición",
+	"Reranking Model": "",
 	"Reranking model disabled": "",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "Restablecer almacenamiento vectorial",
@@ -337,12 +378,17 @@
 	"Select a mode": "Selecciona un modo",
 	"Select a model": "Selecciona un modelo",
 	"Select an Ollama instance": "Seleccione una instancia de Ollama",
+	"Select model": "",
 	"Send a Message": "Enviar un Mensaje",
 	"Send message": "Enviar Mensaje",
+	"September": "",
 	"Server connection verified": "Conexión del servidor verificada",
 	"Set as default": "Establecer por defecto",
 	"Set Default Model": "Establecer modelo predeterminado",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "Establecer tamaño de imagen",
+	"Set Model": "Establecer el modelo",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "Establecer Pasos",
 	"Set Title Auto-Generation Model": "Establecer modelo de generación automática de títulos",
 	"Set Voice": "Establecer la voz",
@@ -361,6 +407,7 @@
 	"Sign Out": "Cerrar sesión",
 	"Sign up": "Crear una cuenta",
 	"Signing in": "",
+	"Source": "",
 	"Speech recognition error: {{error}}": "Error de reconocimiento de voz: {{error}}",
 	"Speech-to-Text Engine": "Motor de voz a texto",
 	"SpeechRecognition API is not supported in this browser.": "La API SpeechRecognition no es compatible con este navegador.",
@@ -370,6 +417,7 @@
 	"Subtitle (e.g. about the Roman Empire)": "",
 	"Success": "Éxito",
 	"Successfully updated.": "Actualizado exitosamente.",
+	"Suggested": "",
 	"Sync All": "Sincronizar todo",
 	"System": "Sistema",
 	"System Prompt": "Prompt del sistema",
@@ -390,11 +438,13 @@
 	"Title": "Título",
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "Generación automática de títulos",
+	"Title cannot be an empty string.": "",
 	"Title Generation Prompt": "Prompt de generación de título",
 	"to": "para",
 	"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 chat input.": "a la entrada del chat.",
+	"Today": "",
 	"Toggle settings": "Alternar configuración",
 	"Toggle sidebar": "Alternar barra lateral",
 	"Top K": "Top K",
@@ -405,11 +455,7 @@
 	"Uh-oh! There was an issue connecting to {{provider}}.": "¡Uh oh! Hubo un problema al conectarse a {{provider}}.",
 	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Tipo de archivo desconocido '{{file_type}}', pero se acepta y se trata como texto sin formato",
 	"Update and Copy Link": "",
-	"Update Embedding Model": "",
-	"Update embedding model (e.g. {{model}})": "",
 	"Update password": "Actualizar contraseña",
-	"Update Reranking Model": "",
-	"Update reranking model (e.g. {{model}})": "",
 	"Upload a GGUF model": "Subir un modelo GGUF",
 	"Upload files": "Subir archivos",
 	"Upload Progress": "Progreso de carga",
@@ -427,6 +473,8 @@
 	"Version": "Versión",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Web",
+	"Web Loader Settings": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "WebUI Add-ons",
 	"WebUI Settings": "Configuración del WebUI",
@@ -436,8 +484,12 @@
 	"Whisper (Local)": "Whisper (Local)",
 	"Write a prompt suggestion (e.g. Who are you?)": "Escribe una sugerencia para un prompt (por ejemplo, ¿quién eres?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Escribe un resumen en 50 palabras que resuma [tema o palabra clave].",
+	"Yesterday": "",
 	"You": "Usted",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "Eres un asistente útil.",
 	"You're now logged in.": "Has iniciado sesión.",
-	"Youtube": ""
+	"Youtube": "",
+	"Youtube Loader Settings": ""
 }

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

@@ -15,6 +15,7 @@
 	"Add a short description about what this modelfile does": "توضیح کوتاهی در مورد کاری که این فایل\u200cمدل انجام می دهد اضافه کنید",
 	"Add a short title for this prompt": "یک عنوان کوتاه برای این درخواست اضافه کنید",
 	"Add a tag": "اضافه کردن یک تگ",
+	"Add custom prompt": "",
 	"Add Docs": "اضافه کردن اسناد",
 	"Add Files": "اضافه کردن فایل\u200cها",
 	"Add message": "اضافه کردن پیغام",
@@ -27,6 +28,7 @@
 	"Admin Settings": "تنظیمات مدیریت",
 	"Advanced Parameters": "پارامترهای پیشرفته",
 	"all": "همه",
+	"All Documents": "",
 	"All Users": "همه کاربران",
 	"Allow": "اجازه دادن",
 	"Allow Chat Deletion": "اجازه حذف گپ",
@@ -34,17 +36,21 @@
 	"Already have an account?": "از قبل حساب کاربری دارید؟",
 	"an assistant": "یک دستیار",
 	"and": "و",
+	"and create a new shared link.": "",
 	"API Base URL": "API Base URL",
 	"API Key": "API Key",
 	"API Key created.": "",
 	"API keys": "",
 	"API RPM": "API RPM",
+	"April": "",
 	"Archive": "",
 	"Archived Chats": "آرشیو تاریخچه چت",
 	"are allowed - Activate this command by typing": "مجاز هستند - این دستور را با تایپ کردن این فعال کنید:",
 	"Are you sure?": "آیا مطمئن هستید؟",
+	"Attach file": "",
 	"Attention to detail": "",
 	"Audio": "صدا",
+	"August": "",
 	"Auto-playback response": "پخش خودکار پاسخ ",
 	"Auto-send input after 3 sec.": "به طور خودکار ورودی را پس از 3 ثانیه ارسال کن.",
 	"AUTOMATIC1111 Base URL": "پایه URL AUTOMATIC1111 ",
@@ -52,8 +58,10 @@
 	"available!": "در دسترس!",
 	"Back": "بازگشت",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "حالت سازنده",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "لغو",
 	"Categories": "دسته\u200cبندی\u200cها",
 	"Change Password": "تغییر رمز عبور",
@@ -68,7 +76,9 @@
 	"Chunk Overlap": "همپوشانی تکه",
 	"Chunk Params": "پارامترهای تکه",
 	"Chunk Size": "اندازه تکه",
+	"Citation": "",
 	"Click here for help.": "برای کمک اینجا را کلیک کنید.",
+	"Click here to": "",
 	"Click here to check other modelfiles.": "برای بررسی سایر فایل\u200cهای مدل اینجا را کلیک کنید.",
 	"Click here to select": "برای انتخاب اینجا کلیک کنید",
 	"Click here to select a csv file.": "",
@@ -96,6 +106,8 @@
 	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "یک عبارت مختصر و ۳ تا ۵ کلمه ای را به عنوان سرفصل برای پرس و جو زیر ایجاد کنید، به شدت محدودیت ۳-۵ کلمه را رعایت کنید و از استفاده از کلمه 'عنوان' خودداری کنید:",
 	"Create a modelfile": "ایجاد یک فایل مدل",
 	"Create Account": "ساخت حساب کاربری",
+	"Create new key": "",
+	"Create new secret key": "",
 	"Created at": "ایجاد شده در",
 	"Created At": "",
 	"Current Model": "مدل فعلی",
@@ -103,8 +115,10 @@
 	"Custom": "دلخواه",
 	"Customize Ollama models for a specific purpose": "مدل های اولاما را برای یک هدف خاص سفارشی کنید",
 	"Dark": "تیره",
+	"Dashboard": "",
 	"Database": "پایگاه داده",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
+	"December": "",
 	"Default": "پیشفرض",
 	"Default (Automatic1111)": "پیشفرض (Automatic1111)",
 	"Default (SentenceTransformers)": "",
@@ -118,6 +132,7 @@
 	"Delete chat": "حذف گپ",
 	"Delete Chat": "",
 	"Delete Chats": "حذف گپ\u200cها",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} پاک شد",
 	"Deleted {{tagName}}": "",
@@ -137,6 +152,7 @@
 	"Don't have an account?": "حساب کاربری ندارید؟",
 	"Don't like the style": "",
 	"Download": "",
+	"Download canceled": "",
 	"Download Database": "دانلود پایگاه داده",
 	"Drop any files here to add to the conversation": "هر فایلی را اینجا رها کنید تا به مکالمه اضافه شود",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "به طور مثال '30s','10m'. واحد\u200cهای زمانی معتبر 's', 'm', 'h' هستند.",
@@ -144,6 +160,7 @@
 	"Edit Doc": "ویرایش سند",
 	"Edit User": "ویرایش کاربر",
 	"Email": "ایمیل",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "تاریخچه چت را فعال کنید",
@@ -154,6 +171,7 @@
 	"Enter Chunk Overlap": "مقدار Chunk Overlap را وارد کنید",
 	"Enter Chunk Size": "مقدار Chunk Size را وارد کنید",
 	"Enter Image Size (e.g. 512x512)": "اندازه تصویر را وارد کنید (مثال: 512x512)",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "URL پایه مربوط به LiteLLM API را وارد کنید (litellm_params.api_base)",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "کلید API مربوط به LiteLLM را وارد کنید (litellm_params.api_key)",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "RPM API مربوط به LiteLLM را وارد کنید (litellm_params.rpm)",
@@ -165,6 +183,7 @@
 	"Enter stop sequence": "توالی توقف را وارد کنید",
 	"Enter Top K": "مقدار Top K را وارد کنید",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "مقدار URL را وارد کنید (مثال http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "ایمیل خود را وارد کنید",
 	"Enter Your Full Name": "نام کامل خود را وارد کنید",
 	"Enter Your Password": "رمز عبور خود را وارد کنید",
@@ -177,6 +196,7 @@
 	"Export Prompts": "اکسپورت از پرامپت\u200cها",
 	"Failed to create API Key.": "",
 	"Failed to read clipboard contents": "خواندن محتوای کلیپ بورد ناموفق بود",
+	"February": "",
 	"Feel free to add specific details": "",
 	"File Mode": "حالت فایل",
 	"File not found.": "فایل یافت نشد.",
@@ -193,6 +213,7 @@
 	"Good Response": "",
 	"has no conversations.": "",
 	"Hello, {{name}}": "سلام، {{name}}",
+	"Help": "",
 	"Hide": "پنهان",
 	"Hide Additional Params": "پنهان کردن پارامترهای اضافه",
 	"How can I help you today?": "امروز چطور می توانم کمک تان کنم؟",
@@ -206,9 +227,14 @@
 	"Import Modelfiles": "ایمپورت فایل\u200cهای مدل",
 	"Import Prompts": "ایمپورت پرامپت\u200cها",
 	"Include `--api` flag when running stable-diffusion-webui": "فلگ `--api` را هنکام اجرای stable-diffusion-webui استفاده کنید.",
+	"Input commands": "",
 	"Interface": "رابط",
+	"Invalid Tag": "",
+	"January": "",
 	"join our Discord for help.": "برای کمک به دیسکورد ما بپیوندید.",
 	"JSON": "JSON",
+	"July": "",
+	"June": "",
 	"JWT Expiration": "JWT انقضای",
 	"JWT Token": "JWT توکن",
 	"Keep Alive": "Keep Alive",
@@ -223,8 +249,11 @@
 	"Manage LiteLLM Models": "Manage LiteLLM Models",
 	"Manage Models": "مدیریت مدل\u200cها",
 	"Manage Ollama Models": "مدیریت مدل\u200cهای اولاما",
+	"March": "",
 	"Max Tokens": "حداکثر توکن",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "حداکثر 3 مدل را می توان به طور همزمان دانلود کرد. لطفاً بعداً دوباره امتحان کنید.",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
 	"Minimum Score": "",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
@@ -255,11 +284,15 @@
 	"Name your modelfile": "فایل مدل را نام\u200cگذاری کنید",
 	"New Chat": "گپ جدید",
 	"New Password": "رمز عبور جدید",
+	"No results found": "",
+	"No source available": "",
 	"Not factually correct": "",
 	"Not sure what to add?": "مطمئن نیستید چه چیزی را اضافه کنید؟",
 	"Not sure what to write? Switch to": "مطمئن نیستید چه بنویسید؟ تغییر به",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
 	"Notifications": "اعلان",
+	"November": "",
+	"October": "",
 	"Off": "خاموش",
 	"Okay, Let's Go!": "باشه، بزن بریم!",
 	"OLED Dark": "",
@@ -283,6 +316,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "روشن",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "پارامترها",
 	"Password": "رمز عبور",
 	"PDF document (.pdf)": "",
@@ -292,11 +326,15 @@
 	"Plain text (.txt)": "",
 	"Playground": "زمین بازی",
 	"Positive attitude": "",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
 	"Profile Image": "",
+	"Prompt": "",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
 	"Prompt Content": "محتویات پرامپت",
 	"Prompt suggestions": "پیشنهادات پرامپت",
 	"Prompts": "پرامپت\u200cها",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "دریافت یک مدل از Ollama.com",
 	"Pull Progress": "پیشرفت دریافت",
 	"Query Params": "پارامترهای پرس و جو",
@@ -309,9 +347,12 @@
 	"Regenerate": "",
 	"Release Notes": "یادداشت\u200cهای انتشار",
 	"Remove": "",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "Repeat Last N",
 	"Repeat Penalty": "Repeat Penalty",
 	"Request Mode": "حالت درخواست",
+	"Reranking Model": "",
 	"Reranking model disabled": "",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "بازنشانی ذخیره سازی برداری",
@@ -337,12 +378,17 @@
 	"Select a mode": "یک حالت انتخاب کنید",
 	"Select a model": "انتخاب یک مدل",
 	"Select an Ollama instance": "انتخاب یک نمونه از اولاما",
+	"Select model": "",
 	"Send a Message": "ارسال یک پیام",
 	"Send message": "ارسال پیام",
+	"September": "",
 	"Server connection verified": "اتصال سرور تأیید شد",
 	"Set as default": "تنظیم به عنوان پیشفرض",
 	"Set Default Model": "تنظیم مدل پیش فرض",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "تنظیم اندازه تصویر",
+	"Set Model": "تنظیم مدل",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "تنظیم گام\u200cها",
 	"Set Title Auto-Generation Model": "تنظیم مدل تولید خودکار عنوان",
 	"Set Voice": "تنظیم صدا",
@@ -361,6 +407,7 @@
 	"Sign Out": "خروج",
 	"Sign up": "ثبت نام",
 	"Signing in": "",
+	"Source": "",
 	"Speech recognition error: {{error}}": "خطای تشخیص گفتار: {{error}}",
 	"Speech-to-Text Engine": "موتور گفتار به متن",
 	"SpeechRecognition API is not supported in this browser.": "API تشخیص گفتار در این مرورگر پشتیبانی نمی شود.",
@@ -370,6 +417,7 @@
 	"Subtitle (e.g. about the Roman Empire)": "",
 	"Success": "موفقیت",
 	"Successfully updated.": "با موفقیت به روز شد",
+	"Suggested": "",
 	"Sync All": "همگام سازی همه",
 	"System": "سیستم",
 	"System Prompt": "پرامپت سیستم",
@@ -390,11 +438,13 @@
 	"Title": "عنوان",
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "تولید خودکار عنوان",
+	"Title cannot be an empty string.": "",
 	"Title Generation Prompt": "پرامپت تولید عنوان",
 	"to": "به",
 	"To access the available model names for downloading,": "برای دسترسی به نام مدل های موجود برای دانلود،",
 	"To access the GGUF models available for downloading,": "برای دسترسی به مدل\u200cهای GGUF موجود برای دانلود،",
 	"to chat input.": "در ورودی گپ.",
+	"Today": "",
 	"Toggle settings": "نمایش/عدم نمایش تنظیمات",
 	"Toggle sidebar": "نمایش/عدم نمایش نوار کناری",
 	"Top K": "Top K",
@@ -405,11 +455,7 @@
 	"Uh-oh! There was an issue connecting to {{provider}}.": "اوه اوه! مشکلی در اتصال به {{provider}} وجود داشت.",
 	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "نوع فایل '{{file_type}}' ناشناخته است، به عنوان یک فایل متنی ساده با آن برخورد می شود.",
 	"Update and Copy Link": "",
-	"Update Embedding Model": "",
-	"Update embedding model (e.g. {{model}})": "",
 	"Update password": "به روزرسانی رمزعبور",
-	"Update Reranking Model": "",
-	"Update reranking model (e.g. {{model}})": "",
 	"Upload a GGUF model": "آپلود یک مدل GGUF",
 	"Upload files": "بارگذاری فایل\u200cها",
 	"Upload Progress": "پیشرفت آپلود",
@@ -427,6 +473,8 @@
 	"Version": "نسخه",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "وب",
+	"Web Loader Settings": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "WebUI افزونه\u200cهای",
 	"WebUI Settings": "تنظیمات WebUI",
@@ -436,8 +484,12 @@
 	"Whisper (Local)": "ویسپر (محلی)",
 	"Write a prompt suggestion (e.g. Who are you?)": "یک پیشنهاد پرامپت بنویسید (مثلاً شما کی هستید؟)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "خلاصه ای در 50 کلمه بنویسید که [موضوع یا کلمه کلیدی] را خلاصه کند.",
+	"Yesterday": "",
 	"You": "شما",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "تو یک دستیار سودمند هستی.",
 	"You're now logged in.": "شما اکنون وارد شده\u200cاید.",
-	"Youtube": ""
+	"Youtube": "",
+	"Youtube Loader Settings": ""
 }

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

@@ -0,0 +1,495 @@
+{
+	"'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' tai '-1' jottei vanhene.",
+	"(Beta)": "(Beta)",
+	"(e.g. `sh webui.sh --api`)": "(esim. `sh webui.sh --api`)",
+	"(latest)": "(uusin)",
+	"{{modelName}} is thinking...": "{{modelName}} miettii...",
+	"{{user}}'s Chats": "{{user}}:n keskustelut",
+	"{{webUIName}} Backend Required": "{{webUIName}} backend vaaditaan",
+	"a user": "käyttäjä",
+	"About": "Tietoja",
+	"Account": "Tili",
+	"Accurate information": "Tarkkaa tietoa",
+	"Add a model": "Lisää malli",
+	"Add a model tag name": "Lisää mallitagi",
+	"Add a short description about what this modelfile does": "Lisää lyhyt kuvaus siitä, mitä tämä mallitiedosto tekee",
+	"Add a short title for this prompt": "Lisää lyhyt otsikko tälle kehotteelle",
+	"Add a tag": "Lisää tagi",
+	"Add custom prompt": "Lisää mukautettu kehote",
+	"Add Docs": "Lisää asiakirjoja",
+	"Add Files": "Lisää tiedostoja",
+	"Add message": "Lisää viesti",
+	"Add Model": "Lisää malli",
+	"Add Tags": "Lisää tageja",
+	"Add User": "Lisää käyttäjä",
+	"Adjusting these settings will apply changes universally to all users.": "Näiden asetusten säätäminen vaikuttaa kaikkiin käyttäjiin.",
+	"admin": "hallinta",
+	"Admin Panel": "Hallintapaneeli",
+	"Admin Settings": "Hallinta-asetukset",
+	"Advanced Parameters": "Edistyneet parametrit",
+	"all": "kaikki",
+	"All Documents": "Kaikki asiakirjat",
+	"All Users": "Kaikki käyttäjät",
+	"Allow": "Salli",
+	"Allow Chat Deletion": "Salli keskustelujen poisto",
+	"alphanumeric characters and hyphens": "kirjaimia, numeroita ja väliviivoja",
+	"Already have an account?": "Onko sinulla jo tili?",
+	"an assistant": "avustaja",
+	"and": "ja",
+	"and create a new shared link.": "ja luo uusi jaettu linkki.",
+	"API Base URL": "APIn perus-URL",
+	"API Key": "API-avain",
+	"API Key created.": "API-avain luotu.",
+	"API keys": "API-avaimet",
+	"API RPM": "API RPM",
+	"April": "huhtikuu",
+	"Archive": "Arkisto",
+	"Archived Chats": "Arkistoidut keskustelut",
+	"are allowed - Activate this command by typing": "ovat sallittuja - Aktivoi tämä komento kirjoittamalla",
+	"Are you sure?": "Oletko varma?",
+	"Attach file": "Liitä tiedosto",
+	"Attention to detail": "Huomio yksityiskohtiin",
+	"Audio": "Ääni",
+	"August": "elokuu",
+	"Auto-playback response": "Soita vastaus automaattisesti",
+	"Auto-send input after 3 sec.": "Lähetä syöte automaattisesti 3 sekunnin kuluttua",
+	"AUTOMATIC1111 Base URL": "AUTOMATIC1111-perus-URL",
+	"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111-perus-URL vaaditaan.",
+	"available!": "saatavilla!",
+	"Back": "Takaisin",
+	"Bad Response": "Epäkelpo vastaus",
+	"before": "ennen",
+	"Being lazy": "Oli laiska",
+	"Builder Mode": "Rakentajan tila",
+	"Bypass SSL verification for Websites": "Ohita SSL-varmennus verkkosivustoille",
+	"Cancel": "Peruuta",
+	"Categories": "Kategoriat",
+	"Change Password": "Vaihda salasana",
+	"Chat": "Keskustelu",
+	"Chat History": "Keskusteluhistoria",
+	"Chat History is off for this browser.": "Keskusteluhistoria on pois päältä tällä selaimella.",
+	"Chats": "Keskustelut",
+	"Check Again": "Tarkista uudelleen",
+	"Check for updates": "Tarkista päivitykset",
+	"Checking for updates...": "Tarkistetaan päivityksiä...",
+	"Choose a model before saving...": "Valitse malli ennen tallentamista...",
+	"Chunk Overlap": "Osien päällekkäisyys",
+	"Chunk Params": "Osien parametrit",
+	"Chunk Size": "Osien koko",
+	"Citation": "Sitaatti",
+	"Click here for help.": "Klikkaa tästä saadaksesi apua.",
+	"Click here to": "Klikkaa tästä",
+	"Click here to check other modelfiles.": "Klikkaa tästä nähdäksesi muita mallitiedostoja.",
+	"Click here to select": "Klikkaa tästä valitaksesi",
+	"Click here to select a csv file.": "Klikkaa tästä valitaksesi CSV-tiedosto.",
+	"Click here to select documents.": "Klikkaa tästä valitaksesi asiakirjoja.",
+	"click here.": "klikkaa tästä.",
+	"Click on the user role button to change a user's role.": "Klikkaa käyttäjän roolipainiketta vaihtaaksesi käyttäjän roolia.",
+	"Close": "Sulje",
+	"Collection": "Kokoelma",
+	"ComfyUI": "ComfyUI",
+	"ComfyUI Base URL": "ComfyUI-perus-URL",
+	"ComfyUI Base URL is required.": "ComfyUI-perus-URL vaaditaan.",
+	"Command": "Komento",
+	"Confirm Password": "Vahvista salasana",
+	"Connections": "Yhteydet",
+	"Content": "Sisältö",
+	"Context Length": "Kontekstin pituus",
+	"Continue Response": "Jatka vastausta",
+	"Conversation Mode": "Keskustelutila",
+	"Copied shared chat URL to clipboard!": "Jaettu keskustelulinkki kopioitu leikepöydälle!",
+	"Copy": "Kopioi",
+	"Copy last code block": "Kopioi viimeisin koodilohko",
+	"Copy last response": "Kopioi viimeisin vastaus",
+	"Copy Link": "Kopioi linkki",
+	"Copying to clipboard was successful!": "Kopioiminen leikepöydälle onnistui!",
+	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Luo tiivis, 3-5 sanan lause otsikoksi seuraavalle kyselylle, noudattaen tiukasti 3-5 sanan rajoitusta ja välttäen sanan 'otsikko' käyttöä:",
+	"Create a modelfile": "Luo mallitiedosto",
+	"Create Account": "Luo tili",
+	"Create new key": "Luo uusi avain",
+	"Create new secret key": "Luo uusi salainen avain",
+	"Created at": "Luotu",
+	"Created At": "Luotu",
+	"Current Model": "Nykyinen malli",
+	"Current Password": "Nykyinen salasana",
+	"Custom": "Mukautettu",
+	"Customize Ollama models for a specific purpose": "Mukauta Ollama-malleja tiettyyn tarkoitukseen",
+	"Dark": "Tumma",
+	"Dashboard": "Kojelauta",
+	"Database": "Tietokanta",
+	"DD/MM/YYYY HH:mm": "DD.MM.YYYY HH:mm",
+	"December": "joulukuu",
+	"Default": "Oletus",
+	"Default (Automatic1111)": "Oletus (AUTOMATIC1111)",
+	"Default (SentenceTransformers)": "Oletus (SentenceTransformers)",
+	"Default (Web API)": "Oletus (web-API)",
+	"Default model updated": "Oletusmalli päivitetty",
+	"Default Prompt Suggestions": "Oletuskehotteiden ehdotukset",
+	"Default User Role": "Oletuskäyttäjärooli",
+	"delete": "poista",
+	"Delete": "Poista",
+	"Delete a model": "Poista malli",
+	"Delete chat": "Poista keskustelu",
+	"Delete Chat": "Poista keskustelu",
+	"Delete Chats": "Poista keskustelut",
+	"delete this link": "poista tämä linkki",
+	"Delete User": "Poista käyttäjä",
+	"Deleted {{deleteModelTag}}": "Poistettu {{deleteModelTag}}",
+	"Deleted {{tagName}}": "Poistettu {{tagName}}",
+	"Description": "Kuvaus",
+	"Didn't fully follow instructions": "Ei noudattanut ohjeita täysin",
+	"Disabled": "Poistettu käytöstä",
+	"Discover a modelfile": "Löydä mallitiedosto",
+	"Discover a prompt": "Löydä kehote",
+	"Discover, download, and explore custom prompts": "Löydä ja lataa mukautettuja kehotteita",
+	"Discover, download, and explore model presets": "Löydä ja lataa mallien esiasetuksia",
+	"Display the username instead of You in the Chat": "Näytä käyttäjänimi keskustelussa",
+	"Document": "Asiakirja",
+	"Document Settings": "Asiakirja-asetukset",
+	"Documents": "Asiakirjat",
+	"does not make any external connections, and your data stays securely on your locally hosted server.": "ei tee ulkoisia yhteyksiä, ja tietosi pysyvät turvallisesti paikallisesti isännöidyllä palvelimellasi.",
+	"Don't Allow": "Älä salli",
+	"Don't have an account?": "Eikö sinulla ole tiliä?",
+	"Don't like the style": "En pidä tyylistä",
+	"Download": "Lataa",
+	"Download canceled": "Lataus peruutettu",
+	"Download Database": "Lataa tietokanta",
+	"Drop any files here to add to the conversation": "Pudota tiedostoja tähän lisätäksesi ne keskusteluun",
+	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "esim. '30s', '10m'. Kelpoiset aikayksiköt ovat 's', 'm', 'h'.",
+	"Edit": "Muokkaa",
+	"Edit Doc": "Muokkaa asiakirjaa",
+	"Edit User": "Muokkaa käyttäjää",
+	"Email": "Sähköposti",
+	"Embedding Model": "Upotusmalli",
+	"Embedding Model Engine": "Upotusmallin moottori",
+	"Embedding model set to \"{{embedding_model}}\"": "\"{{embedding_model}}\" valittu upotusmalliksi",
+	"Enable Chat History": "Ota keskusteluhistoria käyttöön",
+	"Enable New Sign Ups": "Salli uudet rekisteröitymiset",
+	"Enabled": "Käytössä",
+	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Varmista, että CSV-tiedostossasi on 4 saraketta seuraavassa järjestyksessä: Nimi, Sähköposti, Salasana, Rooli.",
+	"Enter {{role}} message here": "Kirjoita {{role}} viesti tähän",
+	"Enter Chunk Overlap": "Syötä osien päällekkäisyys",
+	"Enter Chunk Size": "Syötä osien koko",
+	"Enter Image Size (e.g. 512x512)": "Syötä kuvan koko (esim. 512x512)",
+	"Enter language codes": "",
+	"Enter LiteLLM API Base URL (litellm_params.api_base)": "Syötä LiteLLM-APIn perus-URL (litellm_params.api_base)",
+	"Enter LiteLLM API Key (litellm_params.api_key)": "Syötä LiteLLM-APIn avain (litellm_params.api_key)",
+	"Enter LiteLLM API RPM (litellm_params.rpm)": "Syötä LiteLLM-APIn RPM (litellm_params.rpm)",
+	"Enter LiteLLM Model (litellm_params.model)": "Syötä LiteLLM-malli (litellm_params.model)",
+	"Enter Max Tokens (litellm_params.max_tokens)": "Syötä maksimitokenit (litellm_params.max_tokens)",
+	"Enter model tag (e.g. {{modelTag}})": "Syötä mallitagi (esim. {{modelTag}})",
+	"Enter Number of Steps (e.g. 50)": "Syötä askelien määrä (esim. 50)",
+	"Enter Score": "Syötä pisteet",
+	"Enter stop sequence": "Syötä lopetussekvenssi",
+	"Enter Top K": "Syötä Top K",
+	"Enter URL (e.g. http://127.0.0.1:7860/)": "Syötä URL (esim. http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "Syötä URL (esim. http://localhost:11434)",
+	"Enter Your Email": "Syötä sähköpostiosoitteesi",
+	"Enter Your Full Name": "Syötä koko nimesi",
+	"Enter Your Password": "Syötä salasanasi",
+	"Enter Your Role": "Syötä roolisi",
+	"Experimental": "Kokeellinen",
+	"Export All Chats (All Users)": "Vie kaikki keskustelut (kaikki käyttäjät)",
+	"Export Chats": "Vie keskustelut",
+	"Export Documents Mapping": "Vie asiakirjakartoitus",
+	"Export Modelfiles": "Vie mallitiedostot",
+	"Export Prompts": "Vie kehotteet",
+	"Failed to create API Key.": "API-avaimen luonti epäonnistui.",
+	"Failed to read clipboard contents": "Leikepöydän sisällön lukeminen epäonnistui",
+	"February": "helmikuu",
+	"Feel free to add specific details": "Voit lisätä tarkempia tietoja",
+	"File Mode": "Tiedostotila",
+	"File not found.": "Tiedostoa ei löytynyt.",
+	"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Sormenjäljen väärentäminen havaittu: Ei voi käyttää alkukirjaimia avatarina. Käytetään oletusprofiilikuvaa.",
+	"Fluidly stream large external response chunks": "Virtaa suuria ulkoisia vastausosia joustavasti",
+	"Focus chat input": "Fokusoi syöttökenttään",
+	"Followed instructions perfectly": "Noudatti ohjeita täydellisesti",
+	"Format your variables using square brackets like this:": "Muotoile muuttujat hakasulkeilla näin:",
+	"From (Base Model)": "Lähde (perusmalli)",
+	"Full Screen Mode": "Koko näytön tila",
+	"General": "Yleinen",
+	"General Settings": "Yleisasetukset",
+	"Generation Info": "Generointitiedot",
+	"Good Response": "Hyvä vastaus",
+	"has no conversations.": "ei ole keskusteluja.",
+	"Hello, {{name}}": "Terve, {{name}}",
+	"Help": "Apua",
+	"Hide": "Piilota",
+	"Hide Additional Params": "Piilota lisäparametrit",
+	"How can I help you today?": "Kuinka voin auttaa tänään?",
+	"Hybrid Search": "Hybridihaku",
+	"Image Generation (Experimental)": "Kuvagenerointi (kokeellinen)",
+	"Image Generation Engine": "Kuvagenerointimoottori",
+	"Image Settings": "Kuva-asetukset",
+	"Images": "Kuvat",
+	"Import Chats": "Tuo keskustelut",
+	"Import Documents Mapping": "Tuo asiakirjakartoitus",
+	"Import Modelfiles": "Tuo mallitiedostoja",
+	"Import Prompts": "Tuo kehotteita",
+	"Include `--api` flag when running stable-diffusion-webui": "Sisällytä `--api`-parametri suorittaessasi stable-diffusion-webui",
+	"Input commands": "Syötä komennot",
+	"Interface": "Käyttöliittymä",
+	"Invalid Tag": "Virheellinen tagi",
+	"January": "tammikuu",
+	"join our Discord for help.": "liity Discordiimme saadaksesi apua.",
+	"JSON": "JSON",
+	"July": "heinäkuu",
+	"June": "kesäkuu",
+	"JWT Expiration": "JWT:n vanheneminen",
+	"JWT Token": "JWT-token",
+	"Keep Alive": "Pysy aktiivisena",
+	"Keyboard shortcuts": "Pikanäppäimet",
+	"Language": "Kieli",
+	"Last Active": "Viimeksi aktiivinen",
+	"Light": "Vaalea",
+	"Listening...": "Kuunnellaan...",
+	"LLMs can make mistakes. Verify important information.": "Kielimallit voivat tehdä virheitä. Varmista tärkeät tiedot.",
+	"Made by OpenWebUI Community": "Tehnyt OpenWebUI-yhteisö",
+	"Make sure to enclose them with": "Varmista, että suljet ne",
+	"Manage LiteLLM Models": "Hallitse LiteLLM-malleja",
+	"Manage Models": "Hallitse malleja",
+	"Manage Ollama Models": "Hallitse Ollama-malleja",
+	"March": "maaliskuu",
+	"Max Tokens": "Maksimitokenit",
+	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Enintään 3 mallia voidaan ladata samanaikaisesti. Yritä myöhemmin uudelleen.",
+	"May": "toukokuu",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "Viestejä, jotka lähetät luotuasi linkin, ei jaeta. Käyttäjät, joilla on tämä osoite voivat tarkastella jaettua keskustelua.",
+	"Minimum Score": "Vähimmäispisteet",
+	"Mirostat": "Mirostat",
+	"Mirostat Eta": "Mirostat Eta",
+	"Mirostat Tau": "Mirostat Tau",
+	"MMMM DD, YYYY": "DD MMMM YYYY",
+	"MMMM DD, YYYY HH:mm": "DD MMMM YYYY, HH:mm",
+	"Model '{{modelName}}' has been successfully downloaded.": "Malli '{{modelName}}' ladattiin onnistuneesti.",
+	"Model '{{modelTag}}' is already in queue for downloading.": "Malli '{{modelTag}}' on jo jonossa ladattavaksi.",
+	"Model {{modelId}} not found": "Mallia {{modelId}} ei löytynyt",
+	"Model {{modelName}} already exists.": "Malli {{modelName}} on jo olemassa.",
+	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Mallin tiedostojärjestelmäpolku havaittu. Mallin lyhytnimi vaaditaan päivitykseen, ei voi jatkaa.",
+	"Model Name": "Mallin nimi",
+	"Model not selected": "Mallia ei valittu",
+	"Model Tag Name": "Mallitagin nimi",
+	"Model Whitelisting": "Mallin sallimislista",
+	"Model(s) Whitelisted": "Malli(t) sallittu",
+	"Modelfile": "Mallitiedosto",
+	"Modelfile Advanced Settings": "Mallitiedoston edistyneet asetukset",
+	"Modelfile Content": "Mallitiedoston sisältö",
+	"Modelfiles": "Mallitiedostot",
+	"Models": "Mallit",
+	"More": "Lisää",
+	"My Documents": "Omat asiakirjat",
+	"My Modelfiles": "Omat mallitiedostot",
+	"My Prompts": "Omat kehotteet",
+	"Name": "Nimi",
+	"Name Tag": "Nimitagi",
+	"Name your modelfile": "Nimeä mallitiedostosi",
+	"New Chat": "Uusi keskustelu",
+	"New Password": "Uusi salasana",
+	"No results found": "Ei tuloksia",
+	"No source available": "Ei lähdettä saatavilla",
+	"Not factually correct": "Ei faktisesti oikein",
+	"Not sure what to add?": "Etkö ole varma, mitä lisätä?",
+	"Not sure what to write? Switch to": "Et ole varma, mitä kirjoittaa? Vaihda",
+	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Huom: Jos asetat vähimmäispisteet, haku palauttaa vain asiakirjat, joiden pisteet ovat suurempia tai yhtä suuria kuin vähimmäispistemäärä.",
+	"Notifications": "Ilmoitukset",
+	"November": "marraskuu",
+	"October": "lokakuu",
+	"Off": "Pois",
+	"Okay, Let's Go!": "Eikun menoksi!",
+	"OLED Dark": "OLED-tumma",
+	"Ollama": "Ollama",
+	"Ollama Base URL": "Ollama-perus-URL",
+	"Ollama Version": "Ollama-versio",
+	"On": "Päällä",
+	"Only": "Vain",
+	"Only alphanumeric characters and hyphens are allowed in the command string.": "Vain kirjaimet, numerot ja väliviivat ovat sallittuja komentosarjassa.",
+	"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.": "Hetki pieni, tiedostosi ovat yhä leivinuunissa. Odota kärsivällisesti, ja ilmoitamme, kun ne ovat valmiita.",
+	"Oops! Looks like the URL is invalid. Please double-check and try again.": "Hups! Näyttää siltä, että URL on virheellinen. Tarkista se ja yritä uudelleen.",
+	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Hupsista! Käytät ei-tuettua menetelmää. WebUI pitää palvella backendista.",
+	"Open": "Avaa",
+	"Open AI": "Open AI",
+	"Open AI (Dall-E)": "Open AI (Dall-E)",
+	"Open new chat": "Avaa uusi keskustelu",
+	"OpenAI": "OpenAI",
+	"OpenAI API": "OpenAI API",
+	"OpenAI API Config": "OpenAI API -asetukset",
+	"OpenAI API Key is required.": "OpenAI API -avain vaaditaan.",
+	"OpenAI URL/Key required.": "OpenAI URL/ -avain vaaditaan.",
+	"or": "tai",
+	"Other": "Muu",
+	"Overview": "Yleiskatsaus",
+	"Parameters": "Parametrit",
+	"Password": "Salasana",
+	"PDF document (.pdf)": "PDF-tiedosto (.pdf)",
+	"PDF Extract Images (OCR)": "PDF-tiedoston kuvien erottelu (OCR)",
+	"pending": "odottaa",
+	"Permission denied when accessing microphone: {{error}}": "Mikrofonin käyttöoikeus evätty: {{error}}",
+	"Plain text (.txt)": "Pelkkä teksti (.txt)",
+	"Playground": "Leikkipaikka",
+	"Positive attitude": "Positiivinen asenne",
+	"Previous 30 days": "Edelliset 30 päivää",
+	"Previous 7 days": "Edelliset 7 päivää",
+	"Profile Image": "Profiilikuva",
+	"Prompt": "Kehote",
+	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Kehote (esim. Kerro hauska fakta Turusta)",
+	"Prompt Content": "Kehotteen sisältö",
+	"Prompt suggestions": "Kehotteen ehdotukset",
+	"Prompts": "Kehotteet",
+	"Pull \"{{searchValue}}\" from Ollama.com": "Lataa \"{{searchValue}}\" Ollama.comista",
+	"Pull a model from Ollama.com": "Lataa malli Ollama.comista",
+	"Pull Progress": "Latauksen eteneminen",
+	"Query Params": "Kyselyparametrit",
+	"RAG Template": "RAG-malline",
+	"Raw Format": "Raaka muoto",
+	"Read Aloud": "Lue ääneen",
+	"Record voice": "Nauhoita ääni",
+	"Redirecting you to OpenWebUI Community": "Ohjataan sinut OpenWebUI-yhteisöön",
+	"Refused when it shouldn't have": "Kieltäytyi, vaikka ei olisi pitänyt",
+	"Regenerate": "Uudelleenluo",
+	"Release Notes": "Julkaisutiedot",
+	"Remove": "Poista",
+	"Remove Model": "Poista malli",
+	"Rename": "Nimeä uudelleen",
+	"Repeat Last N": "Viimeinen N -toisto",
+	"Repeat Penalty": "Toistosakko",
+	"Request Mode": "Pyyntötila",
+	"Reranking Model": "Uudelleenpisteytysmalli",
+	"Reranking model disabled": "Uudelleenpisteytysmalli poistettu käytöstä",
+	"Reranking model set to \"{{reranking_model}}\"": "\"{{reranking_model}}\" valittu uudelleenpisteytysmalliksi",
+	"Reset Vector Storage": "Tyhjennä vektorivarasto",
+	"Response AutoCopy to Clipboard": "Vastauksen automaattikopiointi leikepöydälle",
+	"Role": "Rooli",
+	"Rosé Pine": "Rosee-mänty",
+	"Rosé Pine Dawn": "Aamuinen Rosee-mänty",
+	"Save": "Tallenna",
+	"Save & Create": "Tallenna ja luo",
+	"Save & Submit": "Tallenna ja lähetä",
+	"Save & Update": "Tallenna ja päivitä",
+	"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Keskustelulokien tallentaminen suoraan selaimen tallennustilaan ei ole enää tuettua. Lataa ja poista keskustelulokit napsauttamalla alla olevaa painiketta. Älä huoli, voit helposti tuoda keskustelulokit takaisin backendiin",
+	"Scan": "Skannaa",
+	"Scan complete!": "Skannaus valmis!",
+	"Scan for documents from {{path}}": "Skannaa asiakirjoja polusta {{path}}",
+	"Search": "Haku",
+	"Search a model": "Hae mallia",
+	"Search Documents": "Hae asiakirjoja",
+	"Search Prompts": "Hae kehotteita",
+	"See readme.md for instructions": "Katso lisää ohjeita readme.md:stä",
+	"See what's new": "Katso, mitä uutta",
+	"Seed": "Siemen",
+	"Select a mode": "Valitse tila",
+	"Select a model": "Valitse malli",
+	"Select an Ollama instance": "Valitse Ollama-instanssi",
+	"Select model": "Valitse malli",
+	"Send a Message": "Lähetä viesti",
+	"Send message": "Lähetä viesti",
+	"September": "syyskuu",
+	"Server connection verified": "Palvelinyhteys varmennettu",
+	"Set as default": "Aseta oletukseksi",
+	"Set Default Model": "Aseta oletusmalli",
+	"Set embedding model (e.g. {{model}})": "Aseta upotusmalli (esim. {{model}})",
+	"Set Image Size": "Aseta kuvan koko",
+	"Set Model": "",
+	"Set reranking model (e.g. {{model}})": "Aseta uudelleenpisteytysmalli (esim. {{model}})",
+	"Set Steps": "Aseta askelmäärä",
+	"Set Title Auto-Generation Model": "Aseta otsikon automaattisen luonnin malli",
+	"Set Voice": "Aseta puheääni",
+	"Settings": "Asetukset",
+	"Settings saved successfully!": "Asetukset tallennettu onnistuneesti!",
+	"Share": "Jaa",
+	"Share Chat": "Jaa keskustelu",
+	"Share to OpenWebUI Community": "Jaa OpenWebUI-yhteisöön",
+	"short-summary": "lyhyt-yhteenveto",
+	"Show": "Näytä",
+	"Show Additional Params": "Näytä lisäparametrit",
+	"Show shortcuts": "Näytä pikanäppäimet",
+	"Showcased creativity": "Näytti luovuutta",
+	"sidebar": "sivupalkki",
+	"Sign in": "Kirjaudu sisään",
+	"Sign Out": "Kirjaudu ulos",
+	"Sign up": "Rekisteröidy",
+	"Signing in": "Kirjaudutaan sisään",
+	"Source": "Lähde",
+	"Speech recognition error: {{error}}": "Puheentunnistusvirhe: {{error}}",
+	"Speech-to-Text Engine": "Puheentunnistusmoottori",
+	"SpeechRecognition API is not supported in this browser.": "SpeechRecognition-rajapinta ei ole tuettu tässä selaimessa.",
+	"Stop Sequence": "Lopetussekvenssi",
+	"STT Settings": "Puheentunnistusasetukset",
+	"Submit": "Lähetä",
+	"Subtitle (e.g. about the Roman Empire)": "Alaotsikko (esim. Rooman valtakunnasta)",
+	"Success": "Onnistui",
+	"Successfully updated.": "Päivitetty onnistuneesti.",
+	"Suggested": "Suositeltu",
+	"Sync All": "Synkronoi kaikki",
+	"System": "Järjestelmä",
+	"System Prompt": "Järjestelmäkehote",
+	"Tags": "Tagit",
+	"Tell us more:": "Kerro lisää:",
+	"Temperature": "Lämpötila",
+	"Template": "Malline",
+	"Text Completion": "Tekstin täydennys",
+	"Text-to-Speech Engine": "Puhemoottori",
+	"Tfs Z": "TFS Z",
+	"Thanks for your feedback!": "Kiitos palautteestasi!",
+	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Pisteytyksen tulee olla arvo välillä 0.0 (0%) ja 1.0 (100%).",
+	"Theme": "Teema",
+	"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Tämä varmistaa, että arvokkaat keskustelusi tallennetaan turvallisesti backend-tietokantaasi. Kiitos!",
+	"This setting does not sync across browsers or devices.": "Tämä asetus ei synkronoidu selainten tai laitteiden välillä.",
+	"Thorough explanation": "Perusteellinen selitys",
+	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Vinkki: Päivitä useita muuttujapaikkoja peräkkäin painamalla tabulaattoria keskustelusyötteessä jokaisen korvauksen jälkeen.",
+	"Title": "Otsikko",
+	"Title (e.g. Tell me a fun fact)": "Otsikko (esim. Kerro hauska fakta)",
+	"Title Auto-Generation": "Otsikon automaattinen luonti",
+	"Title cannot be an empty string.": "Otsikko ei voi olla tyhjä.",
+	"Title Generation Prompt": "Otsikon luontikehote",
+	"to": "->",
+	"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 chat input.": "keskustelusyötteeseen.",
+	"Today": "Tänään",
+	"Toggle settings": "Kytke asetukset",
+	"Toggle sidebar": "Kytke sivupalkki",
+	"Top K": "Top K",
+	"Top P": "Top P",
+	"Trouble accessing Ollama?": "Ongelmia Ollama-yhteydessä?",
+	"TTS Settings": "Puheentuottamisasetukset",
+	"Type Hugging Face Resolve (Download) URL": "Kirjoita Hugging Face -resolve-osoite",
+	"Uh-oh! There was an issue connecting to {{provider}}.": "Voi ei! Yhteysongelma {{provider}}:n kanssa.",
+	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Tuntematon tiedostotyyppi '{{file_type}}', mutta hyväksytään ja käsitellään pelkkänä tekstinä",
+	"Update and Copy Link": "Päivitä ja kopioi linkki",
+	"Update password": "Päivitä salasana",
+	"Upload a GGUF model": "Lataa GGUF-malli",
+	"Upload files": "Lataa tiedostoja",
+	"Upload Progress": "Latauksen eteneminen",
+	"URL Mode": "URL-tila",
+	"Use '#' in the prompt input to load and select your documents.": "Käytä '#' syötteessä ladataksesi ja valitaksesi asiakirjoja.",
+	"Use Gravatar": "Käytä Gravataria",
+	"Use Initials": "Käytä alkukirjaimia",
+	"user": "käyttäjä",
+	"User Permissions": "Käyttäjäoikeudet",
+	"Users": "Käyttäjät",
+	"Utilize": "Käytä",
+	"Valid time units:": "Kelvolliset aikayksiköt:",
+	"variable": "muuttuja",
+	"variable to have them replaced with clipboard content.": "muuttuja korvataan leikepöydän sisällöllä.",
+	"Version": "Versio",
+	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Varoitus: Jos päivität tai vaihdat upotusmallia, sinun on tuotava kaikki asiakirjat uudelleen.",
+	"Web": "Web",
+	"Web Loader Settings": "",
+	"Web Params": "Web-parametrit",
+	"Webhook URL": "Webhook-URL",
+	"WebUI Add-ons": "WebUI-lisäosat",
+	"WebUI Settings": "WebUI-asetukset",
+	"WebUI will make requests to": "WebUI tekee pyyntöjä",
+	"What’s New in": "Mitä uutta",
+	"When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Kun historia on pois päältä, uudet keskustelut tässä selaimessa eivät näy historiassasi millään laitteellasi.",
+	"Whisper (Local)": "Whisper (paikallinen)",
+	"Write a prompt suggestion (e.g. Who are you?)": "Kirjoita ehdotettu kehote (esim. Kuka olet?)",
+	"Write a summary in 50 words that summarizes [topic or keyword].": "Kirjoita 50 sanan yhteenveto, joka tiivistää [aihe tai avainsana].",
+	"Yesterday": "Eilen",
+	"You": "Sinä",
+	"You have no archived conversations.": "Sinulla ei ole arkistoituja keskusteluja.",
+	"You have shared this chat": "Olet jakanut tämän keskustelun",
+	"You're a helpful assistant.": "Olet avulias apulainen.",
+	"You're now logged in.": "Olet nyt kirjautunut sisään.",
+	"Youtube": "Youtube",
+	"Youtube Loader Settings": ""
+}

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

@@ -15,6 +15,7 @@
 	"Add a short description about what this modelfile does": "Ajouter une courte description de ce que fait ce fichier de modèle",
 	"Add a short title for this prompt": "Ajouter un court titre pour ce prompt",
 	"Add a tag": "Ajouter un tag",
+	"Add custom prompt": "",
 	"Add Docs": "Ajouter des documents",
 	"Add Files": "Ajouter des fichiers",
 	"Add message": "Ajouter un message",
@@ -27,6 +28,7 @@
 	"Admin Settings": "Paramètres d'administration",
 	"Advanced Parameters": "Paramètres avancés",
 	"all": "tous",
+	"All Documents": "",
 	"All Users": "Tous les utilisateurs",
 	"Allow": "Autoriser",
 	"Allow Chat Deletion": "Autoriser la suppression des discussions",
@@ -34,17 +36,21 @@
 	"Already have an account?": "Vous avez déjà un compte ?",
 	"an assistant": "un assistant",
 	"and": "et",
+	"and create a new shared link.": "",
 	"API Base URL": "URL de base de l'API",
 	"API Key": "Clé API",
 	"API Key created.": "",
 	"API keys": "",
 	"API RPM": "RPM API",
+	"April": "",
 	"Archive": "",
 	"Archived Chats": "enregistrement du chat",
 	"are allowed - Activate this command by typing": "sont autorisés - Activez cette commande en tapant",
 	"Are you sure?": "Êtes-vous sûr ?",
+	"Attach file": "",
 	"Attention to detail": "",
 	"Audio": "Audio",
+	"August": "",
 	"Auto-playback response": "Réponse en lecture automatique",
 	"Auto-send input after 3 sec.": "Envoyer automatiquement l'entrée après 3 sec.",
 	"AUTOMATIC1111 Base URL": "URL de base AUTOMATIC1111",
@@ -52,8 +58,10 @@
 	"available!": "disponible !",
 	"Back": "Retour",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "Mode Constructeur",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "Annuler",
 	"Categories": "Catégories",
 	"Change Password": "Changer le mot de passe",
@@ -68,7 +76,9 @@
 	"Chunk Overlap": "Chevauchement de bloc",
 	"Chunk Params": "Paramètres de bloc",
 	"Chunk Size": "Taille de bloc",
+	"Citation": "",
 	"Click here for help.": "Cliquez ici pour de l'aide.",
+	"Click here to": "",
 	"Click here to check other modelfiles.": "Cliquez ici pour vérifier d'autres fichiers de modèle.",
 	"Click here to select": "Cliquez ici pour sélectionner",
 	"Click here to select a csv file.": "",
@@ -96,6 +106,8 @@
 	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Créez une phrase concise de 3 à 5 mots comme en-tête pour la requête suivante, en respectant strictement la limite de 3 à 5 mots et en évitant l'utilisation du mot 'titre' :",
 	"Create a modelfile": "Créer un fichier de modèle",
 	"Create Account": "Créer un compte",
+	"Create new key": "",
+	"Create new secret key": "",
 	"Created at": "Créé le",
 	"Created At": "",
 	"Current Model": "Modèle actuel",
@@ -103,8 +115,10 @@
 	"Custom": "Personnalisé",
 	"Customize Ollama models for a specific purpose": "Personnaliser les modèles Ollama pour un objectif spécifique",
 	"Dark": "Sombre",
+	"Dashboard": "",
 	"Database": "Base de données",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
+	"December": "",
 	"Default": "Par défaut",
 	"Default (Automatic1111)": "Par défaut (Automatic1111)",
 	"Default (SentenceTransformers)": "",
@@ -118,6 +132,7 @@
 	"Delete chat": "Supprimer la discussion",
 	"Delete Chat": "",
 	"Delete Chats": "Supprimer les discussions",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} supprimé",
 	"Deleted {{tagName}}": "",
@@ -137,6 +152,7 @@
 	"Don't have an account?": "Vous n'avez pas de compte ?",
 	"Don't like the style": "",
 	"Download": "",
+	"Download canceled": "",
 	"Download Database": "Télécharger la base de données",
 	"Drop any files here to add to the conversation": "Déposez n'importe quel fichier ici pour les ajouter à la conversation",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p. ex. '30s', '10m'. Les unités de temps valides sont 's', 'm', 'h'.",
@@ -144,6 +160,7 @@
 	"Edit Doc": "Éditer le document",
 	"Edit User": "Éditer l'utilisateur",
 	"Email": "Email",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "Activer l'historique des discussions",
@@ -154,6 +171,7 @@
 	"Enter Chunk Overlap": "Entrez le chevauchement de bloc",
 	"Enter Chunk Size": "Entrez la taille du bloc",
 	"Enter Image Size (e.g. 512x512)": "Entrez la taille de l'image (p. ex. 512x512)",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "Entrez l'URL de base de l'API LiteLLM (litellm_params.api_base)",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "Entrez la clé API LiteLLM (litellm_params.api_key)",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Entrez le RPM de l'API LiteLLM (litellm_params.rpm)",
@@ -165,6 +183,7 @@
 	"Enter stop sequence": "Entrez la séquence de fin",
 	"Enter Top K": "Entrez Top K",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "Entrez l'URL (p. ex. http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "Entrez votre adresse email",
 	"Enter Your Full Name": "Entrez votre nom complet",
 	"Enter Your Password": "Entrez votre mot de passe",
@@ -177,6 +196,7 @@
 	"Export Prompts": "Exporter les prompts",
 	"Failed to create API Key.": "",
 	"Failed to read clipboard contents": "Échec de la lecture du contenu du presse-papiers",
+	"February": "",
 	"Feel free to add specific details": "",
 	"File Mode": "Mode fichier",
 	"File not found.": "Fichier introuvable.",
@@ -193,6 +213,7 @@
 	"Good Response": "",
 	"has no conversations.": "",
 	"Hello, {{name}}": "Bonjour, {{name}}",
+	"Help": "",
 	"Hide": "Cacher",
 	"Hide Additional Params": "Cacher les paramètres supplémentaires",
 	"How can I help you today?": "Comment puis-je vous aider aujourd'hui ?",
@@ -206,9 +227,14 @@
 	"Import Modelfiles": "Importer les fichiers de modèle",
 	"Import Prompts": "Importer les prompts",
 	"Include `--api` flag when running stable-diffusion-webui": "Inclure l'indicateur `--api` lors de l'exécution de stable-diffusion-webui",
+	"Input commands": "",
 	"Interface": "Interface",
+	"Invalid Tag": "",
+	"January": "",
 	"join our Discord for help.": "rejoignez notre Discord pour obtenir de l'aide.",
 	"JSON": "JSON",
+	"July": "",
+	"June": "",
 	"JWT Expiration": "Expiration du JWT",
 	"JWT Token": "Jeton JWT",
 	"Keep Alive": "Garder actif",
@@ -223,8 +249,11 @@
 	"Manage LiteLLM Models": "Gérer les modèles LiteLLM",
 	"Manage Models": "Gérer les modèles",
 	"Manage Ollama Models": "Gérer les modèles Ollama",
+	"March": "",
 	"Max Tokens": "Tokens maximaux",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Un maximum de 3 modèles peut être téléchargé simultanément. Veuillez réessayer plus tard.",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
 	"Minimum Score": "",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
@@ -255,11 +284,15 @@
 	"Name your modelfile": "Nommez votre fichier de modèle",
 	"New Chat": "Nouvelle discussion",
 	"New Password": "Nouveau mot de passe",
+	"No results found": "",
+	"No source available": "",
 	"Not factually correct": "",
 	"Not sure what to add?": "Pas sûr de quoi ajouter ?",
 	"Not sure what to write? Switch to": "Pas sûr de quoi écrire ? Changez pour",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
 	"Notifications": "Notifications de bureau",
+	"November": "",
+	"October": "",
 	"Off": "Éteint",
 	"Okay, Let's Go!": "Okay, Allons-y !",
 	"OLED Dark": "",
@@ -283,6 +316,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "ou",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Paramètres",
 	"Password": "Mot de passe",
 	"PDF document (.pdf)": "",
@@ -292,11 +326,15 @@
 	"Plain text (.txt)": "",
 	"Playground": "Aire de jeu",
 	"Positive attitude": "",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
 	"Profile Image": "",
+	"Prompt": "",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
 	"Prompt Content": "Contenu du prompt",
 	"Prompt suggestions": "Suggestions de prompt",
 	"Prompts": "Prompts",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Tirer un modèle de Ollama.com",
 	"Pull Progress": "Progression du téléchargement",
 	"Query Params": "Paramètres de requête",
@@ -309,9 +347,12 @@
 	"Regenerate": "",
 	"Release Notes": "Notes de version",
 	"Remove": "",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "Répéter les N derniers",
 	"Repeat Penalty": "Pénalité de répétition",
 	"Request Mode": "Mode de requête",
+	"Reranking Model": "",
 	"Reranking model disabled": "",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "Réinitialiser le stockage vectoriel",
@@ -337,12 +378,17 @@
 	"Select a mode": "Sélectionnez un mode",
 	"Select a model": "Sélectionnez un modèle",
 	"Select an Ollama instance": "Sélectionner une instance Ollama",
+	"Select model": "",
 	"Send a Message": "Envoyer un message",
 	"Send message": "Envoyer un message",
+	"September": "",
 	"Server connection verified": "Connexion au serveur vérifiée",
 	"Set as default": "Définir par défaut",
 	"Set Default Model": "Définir le modèle par défaut",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "Définir la taille de l'image",
+	"Set Model": "Configurer le modèle",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "Définir les étapes",
 	"Set Title Auto-Generation Model": "Définir le modèle de génération automatique de titre",
 	"Set Voice": "Définir la voix",
@@ -361,6 +407,7 @@
 	"Sign Out": "Se déconnecter",
 	"Sign up": "S'inscrire",
 	"Signing in": "",
+	"Source": "",
 	"Speech recognition error: {{error}}": "Erreur de reconnaissance vocale : {{error}}",
 	"Speech-to-Text Engine": "Moteur reconnaissance vocale",
 	"SpeechRecognition API is not supported in this browser.": "L'API SpeechRecognition n'est pas prise en charge dans ce navigateur.",
@@ -370,6 +417,7 @@
 	"Subtitle (e.g. about the Roman Empire)": "",
 	"Success": "Succès",
 	"Successfully updated.": "Mis à jour avec succès.",
+	"Suggested": "",
 	"Sync All": "Synchroniser tout",
 	"System": "Système",
 	"System Prompt": "Prompt Système",
@@ -390,11 +438,13 @@
 	"Title": "Titre",
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "Génération automatique de titre",
+	"Title cannot be an empty string.": "",
 	"Title Generation Prompt": "Prompt de génération de titre",
 	"to": "à",
 	"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 chat input.": "à l'entrée du chat.",
+	"Today": "",
 	"Toggle settings": "Basculer les paramètres",
 	"Toggle sidebar": "Basculer la barre latérale",
 	"Top K": "Top K",
@@ -405,11 +455,7 @@
 	"Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh ! Il y a eu un problème de connexion à {{provider}}.",
 	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Type de fichier inconnu '{{file_type}}', mais accepté et traité comme du texte brut",
 	"Update and Copy Link": "",
-	"Update Embedding Model": "",
-	"Update embedding model (e.g. {{model}})": "",
 	"Update password": "Mettre à jour le mot de passe",
-	"Update Reranking Model": "",
-	"Update reranking model (e.g. {{model}})": "",
 	"Upload a GGUF model": "Téléverser un modèle GGUF",
 	"Upload files": "Téléverser des fichiers",
 	"Upload Progress": "Progression du Téléversement",
@@ -427,6 +473,8 @@
 	"Version": "Version",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Web",
+	"Web Loader Settings": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "Add-ons WebUI",
 	"WebUI Settings": "Paramètres WebUI",
@@ -436,8 +484,12 @@
 	"Whisper (Local)": "Whisper (Local)",
 	"Write a prompt suggestion (e.g. Who are you?)": "Rédigez une suggestion de prompt (p. ex. Qui êtes-vous ?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Rédigez un résumé en 50 mots qui résume [sujet ou mot-clé].",
+	"Yesterday": "",
 	"You": "You",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "Vous êtes un assistant utile",
 	"You're now logged in.": "Vous êtes maintenant connecté.",
-	"Youtube": ""
+	"Youtube": "",
+	"Youtube Loader Settings": ""
 }

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

@@ -15,6 +15,7 @@
 	"Add a short description about what this modelfile does": "Ajouter une courte description de ce que fait ce fichier de modèle",
 	"Add a short title for this prompt": "Ajouter un court titre pour ce prompt",
 	"Add a tag": "Ajouter un tag",
+	"Add custom prompt": "",
 	"Add Docs": "Ajouter des documents",
 	"Add Files": "Ajouter des fichiers",
 	"Add message": "Ajouter un message",
@@ -27,6 +28,7 @@
 	"Admin Settings": "Paramètres d'administration",
 	"Advanced Parameters": "Paramètres avancés",
 	"all": "tous",
+	"All Documents": "",
 	"All Users": "Tous les utilisateurs",
 	"Allow": "Autoriser",
 	"Allow Chat Deletion": "Autoriser la suppression du chat",
@@ -34,17 +36,21 @@
 	"Already have an account?": "Vous avez déjà un compte ?",
 	"an assistant": "un assistant",
 	"and": "et",
+	"and create a new shared link.": "",
 	"API Base URL": "URL de base de l'API",
 	"API Key": "Clé API",
 	"API Key created.": "",
 	"API keys": "",
 	"API RPM": "RPM API",
+	"April": "",
 	"Archive": "",
 	"Archived Chats": "enregistrement du chat",
 	"are allowed - Activate this command by typing": "sont autorisés - Activez cette commande en tapant",
 	"Are you sure?": "Êtes-vous sûr ?",
+	"Attach file": "",
 	"Attention to detail": "",
 	"Audio": "Audio",
+	"August": "",
 	"Auto-playback response": "Réponse en lecture automatique",
 	"Auto-send input after 3 sec.": "Envoyer automatiquement l'entrée après 3 sec.",
 	"AUTOMATIC1111 Base URL": "URL de base AUTOMATIC1111",
@@ -52,8 +58,10 @@
 	"available!": "disponible !",
 	"Back": "Retour",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "Mode Constructeur",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "Annuler",
 	"Categories": "Catégories",
 	"Change Password": "Changer le mot de passe",
@@ -68,7 +76,9 @@
 	"Chunk Overlap": "Chevauchement de bloc",
 	"Chunk Params": "Paramètres de bloc",
 	"Chunk Size": "Taille de bloc",
+	"Citation": "",
 	"Click here for help.": "Cliquez ici pour de l'aide.",
+	"Click here to": "",
 	"Click here to check other modelfiles.": "Cliquez ici pour vérifier d'autres fichiers de modèle.",
 	"Click here to select": "Cliquez ici pour sélectionner",
 	"Click here to select a csv file.": "",
@@ -96,6 +106,8 @@
 	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Créez une phrase concise de 3-5 mots comme en-tête pour la requête suivante, en respectant strictement la limite de 3-5 mots et en évitant l'utilisation du mot 'titre' :",
 	"Create a modelfile": "Créer un fichier de modèle",
 	"Create Account": "Créer un compte",
+	"Create new key": "",
+	"Create new secret key": "",
 	"Created at": "Créé le",
 	"Created At": "",
 	"Current Model": "Modèle actuel",
@@ -103,8 +115,10 @@
 	"Custom": "Personnalisé",
 	"Customize Ollama models for a specific purpose": "Personnaliser les modèles Ollama pour un objectif spécifique",
 	"Dark": "Sombre",
+	"Dashboard": "",
 	"Database": "Base de données",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
+	"December": "",
 	"Default": "Par défaut",
 	"Default (Automatic1111)": "Par défaut (Automatic1111)",
 	"Default (SentenceTransformers)": "",
@@ -118,6 +132,7 @@
 	"Delete chat": "Supprimer le chat",
 	"Delete Chat": "",
 	"Delete Chats": "Supprimer les chats",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} supprimé",
 	"Deleted {{tagName}}": "",
@@ -137,6 +152,7 @@
 	"Don't have an account?": "Vous n'avez pas de compte ?",
 	"Don't like the style": "",
 	"Download": "",
+	"Download canceled": "",
 	"Download Database": "Télécharger la base de données",
 	"Drop any files here to add to the conversation": "Déposez des fichiers ici pour les ajouter à la conversation",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "par ex. '30s', '10m'. Les unités de temps valides sont 's', 'm', 'h'.",
@@ -144,6 +160,7 @@
 	"Edit Doc": "Éditer le document",
 	"Edit User": "Éditer l'utilisateur",
 	"Email": "Email",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "Activer l'historique du chat",
@@ -154,6 +171,7 @@
 	"Enter Chunk Overlap": "Entrez le chevauchement de bloc",
 	"Enter Chunk Size": "Entrez la taille du bloc",
 	"Enter Image Size (e.g. 512x512)": "Entrez la taille de l'image (p. ex. 512x512)",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "Entrez l'URL de base de l'API LiteLLM (litellm_params.api_base)",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "Entrez la clé API LiteLLM (litellm_params.api_key)",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Entrez le RPM de l'API LiteLLM (litellm_params.rpm)",
@@ -165,6 +183,7 @@
 	"Enter stop sequence": "Entrez la séquence de fin",
 	"Enter Top K": "Entrez Top K",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "Entrez l'URL (p. ex. http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "Entrez votre email",
 	"Enter Your Full Name": "Entrez votre nom complet",
 	"Enter Your Password": "Entrez votre mot de passe",
@@ -177,6 +196,7 @@
 	"Export Prompts": "Exporter les prompts",
 	"Failed to create API Key.": "",
 	"Failed to read clipboard contents": "Échec de la lecture du contenu du presse-papiers",
+	"February": "",
 	"Feel free to add specific details": "",
 	"File Mode": "Mode fichier",
 	"File not found.": "Fichier non trouvé.",
@@ -193,6 +213,7 @@
 	"Good Response": "",
 	"has no conversations.": "",
 	"Hello, {{name}}": "Bonjour, {{name}}",
+	"Help": "",
 	"Hide": "Cacher",
 	"Hide Additional Params": "Hide additional params",
 	"How can I help you today?": "Comment puis-je vous aider aujourd'hui ?",
@@ -206,9 +227,14 @@
 	"Import Modelfiles": "Importer les fichiers de modèle",
 	"Import Prompts": "Importer les prompts",
 	"Include `--api` flag when running stable-diffusion-webui": "Inclure le drapeau `--api` lors de l'exécution de stable-diffusion-webui",
+	"Input commands": "",
 	"Interface": "Interface",
+	"Invalid Tag": "",
+	"January": "",
 	"join our Discord for help.": "rejoignez notre Discord pour obtenir de l'aide.",
 	"JSON": "JSON",
+	"July": "",
+	"June": "",
 	"JWT Expiration": "Expiration JWT",
 	"JWT Token": "Jeton JWT",
 	"Keep Alive": "Garder en vie",
@@ -223,8 +249,11 @@
 	"Manage LiteLLM Models": "Gérer les modèles LiteLLM",
 	"Manage Models": "Gérer les modèles",
 	"Manage Ollama Models": "Gérer les modèles Ollama",
+	"March": "",
 	"Max Tokens": "Tokens maximaux",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Un maximum de 3 modèles peut être téléchargé simultanément. Veuillez réessayer plus tard.",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
 	"Minimum Score": "",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
@@ -255,11 +284,15 @@
 	"Name your modelfile": "Nommez votre fichier de modèle",
 	"New Chat": "Nouveau chat",
 	"New Password": "Nouveau mot de passe",
+	"No results found": "",
+	"No source available": "",
 	"Not factually correct": "",
 	"Not sure what to add?": "Vous ne savez pas quoi ajouter ?",
 	"Not sure what to write? Switch to": "Vous ne savez pas quoi écrire ? Basculer vers",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
 	"Notifications": "Notifications de bureau",
+	"November": "",
+	"October": "",
 	"Off": "Désactivé",
 	"Okay, Let's Go!": "D'accord, allons-y !",
 	"OLED Dark": "",
@@ -283,6 +316,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "ou",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Paramètres",
 	"Password": "Mot de passe",
 	"PDF document (.pdf)": "",
@@ -292,11 +326,15 @@
 	"Plain text (.txt)": "",
 	"Playground": "Aire de jeu",
 	"Positive attitude": "",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
 	"Profile Image": "",
+	"Prompt": "",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
 	"Prompt Content": "Contenu du prompt",
 	"Prompt suggestions": "Suggestions de prompt",
 	"Prompts": "Prompts",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Tirer un modèle de Ollama.com",
 	"Pull Progress": "Progression du tirage",
 	"Query Params": "Paramètres de requête",
@@ -309,9 +347,12 @@
 	"Regenerate": "",
 	"Release Notes": "Notes de version",
 	"Remove": "",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "Répéter les derniers N",
 	"Repeat Penalty": "Pénalité de répétition",
 	"Request Mode": "Mode de demande",
+	"Reranking Model": "",
 	"Reranking model disabled": "",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "Réinitialiser le stockage de vecteur",
@@ -337,12 +378,17 @@
 	"Select a mode": "Sélectionnez un mode",
 	"Select a model": "Sélectionner un modèle",
 	"Select an Ollama instance": "Sélectionner une instance Ollama",
+	"Select model": "",
 	"Send a Message": "Envoyer un message",
 	"Send message": "Envoyer un message",
+	"September": "",
 	"Server connection verified": "Connexion au serveur vérifiée",
 	"Set as default": "Définir par défaut",
 	"Set Default Model": "Définir le modèle par défaut",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "Définir la taille de l'image",
+	"Set Model": "Définir le modèle",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "Définir les étapes",
 	"Set Title Auto-Generation Model": "Définir le modèle de génération automatique de titre",
 	"Set Voice": "Définir la voix",
@@ -361,6 +407,7 @@
 	"Sign Out": "Se déconnecter",
 	"Sign up": "S'inscrire",
 	"Signing in": "",
+	"Source": "",
 	"Speech recognition error: {{error}}": "Erreur de reconnaissance vocale : {{error}}",
 	"Speech-to-Text Engine": "Moteur de reconnaissance vocale",
 	"SpeechRecognition API is not supported in this browser.": "L'API SpeechRecognition n'est pas prise en charge dans ce navigateur.",
@@ -370,6 +417,7 @@
 	"Subtitle (e.g. about the Roman Empire)": "",
 	"Success": "Succès",
 	"Successfully updated.": "Mis à jour avec succès.",
+	"Suggested": "",
 	"Sync All": "Synchroniser tout",
 	"System": "Système",
 	"System Prompt": "Invite de système",
@@ -390,11 +438,13 @@
 	"Title": "Titre",
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "Génération automatique de titre",
+	"Title cannot be an empty string.": "",
 	"Title Generation Prompt": "Prompt de génération de titre",
 	"to": "à",
 	"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 chat input.": "à l'entrée du chat.",
+	"Today": "",
 	"Toggle settings": "Basculer les paramètres",
 	"Toggle sidebar": "Basculer la barre latérale",
 	"Top K": "Top K",
@@ -405,11 +455,7 @@
 	"Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh ! Il y a eu un problème de connexion à {{provider}}.",
 	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Type de fichier inconnu '{{file_type}}', mais accepté et traité comme du texte brut",
 	"Update and Copy Link": "",
-	"Update Embedding Model": "",
-	"Update embedding model (e.g. {{model}})": "",
 	"Update password": "Mettre à jour le mot de passe",
-	"Update Reranking Model": "",
-	"Update reranking model (e.g. {{model}})": "",
 	"Upload a GGUF model": "Téléverser un modèle GGUF",
 	"Upload files": "Téléverser des fichiers",
 	"Upload Progress": "Progression du Téléversement",
@@ -427,6 +473,8 @@
 	"Version": "Version",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Web",
+	"Web Loader Settings": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "Add-ons WebUI",
 	"WebUI Settings": "Paramètres WebUI",
@@ -436,8 +484,12 @@
 	"Whisper (Local)": "Whisper (Local)",
 	"Write a prompt suggestion (e.g. Who are you?)": "Écrivez un prompt (e.x. Qui est-tu ?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Ecrivez un résumé en 50 mots [sujet ou mot-clé]",
+	"Yesterday": "",
 	"You": "You",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "Vous êtes un assistant utile",
 	"You're now logged in.": "Vous êtes maintenant connecté.",
-	"Youtube": ""
+	"Youtube": "",
+	"Youtube Loader Settings": ""
 }

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

@@ -0,0 +1,495 @@
+{
+	"'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' or '-1' बिना किसी समाप्ति के",
+	"(Beta)": "(Beta)",
+	"(e.g. `sh webui.sh --api`)": "(e.g. `sh webui.sh --api`)",
+	"(latest)": "(latest)",
+	"{{modelName}} is thinking...": "{{modelName}} सोच रहा है...",
+	"{{user}}'s Chats": "{{user}} की चैट",
+	"{{webUIName}} Backend Required": "{{webUIName}} बैकएंड आवश्यक",
+	"a user": "एक उपयोगकर्ता",
+	"About": "हमारे बारे में",
+	"Account": "खाता",
+	"Accurate information": "सटीक जानकारी",
+	"Add a model": "एक मॉडल जोड़ें",
+	"Add a model tag name": "एक मॉडल टैग नाम जोड़ें",
+	"Add a short description about what this modelfile does": "यह मॉडलफ़ाइल क्या करती है इसके बारे में एक संक्षिप्त विवरण जोड़ें",
+	"Add a short title for this prompt": "इस संकेत के लिए एक संक्षिप्त शीर्षक जोड़ें",
+	"Add a tag": "एक टैग जोड़े",
+	"Add custom prompt": "",
+	"Add Docs": "दस्तावेज़ जोड़ें",
+	"Add Files": "फाइलें जोड़ें",
+	"Add message": "संदेश डालें",
+	"Add Model": "मॉडल जोड़ें",
+	"Add Tags": "टैगों को जोड़ें",
+	"Add User": "उपयोगकर्ता जोड़ें",
+	"Adjusting these settings will apply changes universally to all users.": "इन सेटिंग्स को समायोजित करने से परिवर्तन सभी उपयोगकर्ताओं पर सार्वभौमिक रूप से लागू होंगे।",
+	"admin": "व्यवस्थापक",
+	"Admin Panel": "व्यवस्थापक पैनल",
+	"Admin Settings": "व्यवस्थापक सेटिंग्स",
+	"Advanced Parameters": "उन्नत पैरामीटर",
+	"all": "सभी",
+	"All Documents": "",
+	"All Users": "सभी उपयोगकर्ता",
+	"Allow": "अनुमति दें",
+	"Allow Chat Deletion": "चैट हटाने की अनुमति दें",
+	"alphanumeric characters and hyphens": "अल्फ़ान्यूमेरिक वर्ण और हाइफ़न",
+	"Already have an account?": "क्या आपके पास पहले से एक खाता मौजूद है?",
+	"an assistant": "एक सहायक",
+	"and": "और",
+	"and create a new shared link.": "",
+	"API Base URL": "एपीआई बेस यूआरएल",
+	"API Key": "एपीआई कुंजी",
+	"API Key created.": "एपीआई कुंजी बनाई गई",
+	"API keys": "एपीआई कुंजियाँ",
+	"API RPM": "",
+	"April": "",
+	"Archive": "पुरालेख",
+	"Archived Chats": "संग्रहीत चैट",
+	"are allowed - Activate this command by typing": "अनुमति है - टाइप करके इस कमांड को सक्रिय करें",
+	"Are you sure?": "क्या आपको यकीन है?",
+	"Attach file": "",
+	"Attention to detail": "विस्तार पर ध्यान",
+	"Audio": "ऑडियो",
+	"August": "",
+	"Auto-playback response": "ऑटो-प्लेबैक प्रतिक्रिया",
+	"Auto-send input after 3 sec.": "3 सेकंड के बाद स्वचालित रूप से इनपुट भेजें।",
+	"AUTOMATIC1111 Base URL": "AUTOMATIC1111 बेस यूआरएल",
+	"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 का बेस यूआरएल आवश्यक है।",
+	"available!": "उपलब्ध!",
+	"Back": "पीछे",
+	"Bad Response": "ख़राब प्रतिक्रिया",
+	"before": "",
+	"Being lazy": "आलसी होना",
+	"Builder Mode": "बिल्डर मोड",
+	"Bypass SSL verification for Websites": "",
+	"Cancel": "रद्द करें",
+	"Categories": "श्रेणियाँ",
+	"Change Password": "पासवर्ड बदलें",
+	"Chat": "चैट करें",
+	"Chat History": "चैट का इतिहास",
+	"Chat History is off for this browser.": "इस ब्राउज़र के लिए चैट इतिहास बंद है।",
+	"Chats": "सभी चैट",
+	"Check Again": "फिर से जाँचो",
+	"Check for updates": "अपडेट के लिए जाँच",
+	"Checking for updates...": "अपडेट के लिए जांच कर रहा है...",
+	"Choose a model before saving...": "सहेजने से पहले एक मॉडल चुनें...",
+	"Chunk Overlap": "चंक ओवरलैप",
+	"Chunk Params": "चंक पैरामीटर्स",
+	"Chunk Size": "चंक आकार",
+	"Citation": "",
+	"Click here for help.": "सहायता के लिए यहां क्लिक करें।",
+	"Click here to": "",
+	"Click here to check other modelfiles.": "अन्य मॉडल फ़ाइलों की जांच के लिए यहां क्लिक करें।",
+	"Click here to select": "चयन करने के लिए यहां क्लिक करें।",
+	"Click here to select a csv file.": "सीएसवी फ़ाइल का चयन करने के लिए यहां क्लिक करें।",
+	"Click here to select documents.": "दस्तावेज़ चुनने के लिए यहां क्लिक करें।",
+	"click here.": "यहाँ क्लिक करें।",
+	"Click on the user role button to change a user's role.": "उपयोगकर्ता की भूमिका बदलने के लिए उपयोगकर्ता भूमिका बटन पर क्लिक करें।",
+	"Close": "बंद करना",
+	"Collection": "संग्रह",
+	"ComfyUI": "ComfyUI",
+	"ComfyUI Base URL": "ComfyUI बेस यूआरएल",
+	"ComfyUI Base URL is required.": "ComfyUI का बेस यूआरएल आवश्यक है",
+	"Command": "कमांड",
+	"Confirm Password": "पासवर्ड की पुष्टि कीजिये",
+	"Connections": "सम्बन्ध",
+	"Content": "सामग्री",
+	"Context Length": "प्रसंग की लंबाई",
+	"Continue Response": "प्रतिक्रिया जारी रखें",
+	"Conversation Mode": "बातचीत का मॉड",
+	"Copied shared chat URL to clipboard!": "साझा चैट URL को क्लिपबोर्ड पर कॉपी किया गया!",
+	"Copy": "कॉपी",
+	"Copy last code block": "अंतिम कोड ब्लॉक कॉपी करें",
+	"Copy last response": "अंतिम प्रतिक्रिया कॉपी करें",
+	"Copy Link": "लिंक को कॉपी करें",
+	"Copying to clipboard was successful!": "क्लिपबोर्ड पर कॉपी बनाना सफल रहा!",
+	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "निम्नलिखित क्वेरी के लिए हेडर के रूप में एक संक्षिप्त, 3-5 शब्द वाक्यांश बनाएं, 3-5 शब्द सीमा का सख्ती से पालन करें और 'शीर्षक' शब्द के उपयोग से बचें:",
+	"Create a modelfile": "एक मॉडल फ़ाइल बनाएं",
+	"Create Account": "खाता बनाएं",
+	"Create new key": "",
+	"Create new secret key": "",
+	"Created at": "किस समय बनाया गया",
+	"Created At": "किस समय बनाया गया",
+	"Current Model": "वर्तमान मॉडल",
+	"Current Password": "वर्तमान पासवर्ड",
+	"Custom": "कस्टम संस्करण",
+	"Customize Ollama models for a specific purpose": "किसी विशिष्ट उद्देश्य के लिए ओलामा मॉडल को अनुकूलित करें",
+	"Dark": "",
+	"Dashboard": "",
+	"Database": "डेटाबेस",
+	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
+	"December": "",
+	"Default": "डिफ़ॉल्ट",
+	"Default (Automatic1111)": "डिफ़ॉल्ट (Automatic1111)",
+	"Default (SentenceTransformers)": "डिफ़ॉल्ट (SentenceTransformers)",
+	"Default (Web API)": "डिफ़ॉल्ट (Web API)",
+	"Default model updated": "डिफ़ॉल्ट मॉडल अपडेट किया गया",
+	"Default Prompt Suggestions": "डिफ़ॉल्ट प्रॉम्प्ट सुझाव",
+	"Default User Role": "डिफ़ॉल्ट उपयोगकर्ता भूमिका",
+	"delete": "डिलीट",
+	"Delete": "डिलीट",
+	"Delete a model": "एक मॉडल हटाएँ",
+	"Delete chat": "चैट हटाएं",
+	"Delete Chat": "चैट हटाएं",
+	"Delete Chats": "चैट हटाएं",
+	"delete this link": "",
+	"Delete User": "उपभोक्ता मिटायें",
+	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} हटा दिया गया",
+	"Deleted {{tagName}}": "{{tagName}} हटा दिया गया",
+	"Description": "विवरण",
+	"Didn't fully follow instructions": "निर्देशों का पूरी तरह से पालन नहीं किया",
+	"Disabled": "",
+	"Discover a modelfile": "मॉडल फ़ाइल खोजें",
+	"Discover a prompt": "प्रॉम्प्ट खोजें",
+	"Discover, download, and explore custom prompts": "कस्टम प्रॉम्प्ट को खोजें, डाउनलोड करें और एक्सप्लोर करें",
+	"Discover, download, and explore model presets": "मॉडल प्रीसेट खोजें, डाउनलोड करें और एक्सप्लोर करें",
+	"Display the username instead of You in the Chat": "चैट में 'आप' के स्थान पर उपयोगकर्ता नाम प्रदर्शित करें",
+	"Document": "दस्तावेज़",
+	"Document Settings": "दस्तावेज़ सेटिंग्स",
+	"Documents": "दस्तावेज़",
+	"does not make any external connections, and your data stays securely on your locally hosted server.": "कोई बाहरी कनेक्शन नहीं बनाता है, और आपका डेटा आपके स्थानीय रूप से होस्ट किए गए सर्वर पर सुरक्षित रूप से रहता है।",
+	"Don't Allow": "अनुमति न दें",
+	"Don't have an account?": "कोई खाता नहीं है?",
+	"Don't like the style": "शैली पसंद नहीं है",
+	"Download": "डाउनलोड",
+	"Download canceled": "",
+	"Download Database": "डेटाबेस डाउनलोड करें",
+	"Drop any files here to add to the conversation": "बातचीत में जोड़ने के लिए कोई भी फ़ाइल यहां छोड़ें",
+	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "जैसे '30s', '10m', मान्य समय इकाइयाँ 's', 'm', 'h' हैं।",
+	"Edit": "संपादित करें",
+	"Edit Doc": "दस्तावेज़ संपादित करें",
+	"Edit User": "यूजर को संपादित करो",
+	"Email": "ईमेल",
+	"Embedding Model": "",
+	"Embedding Model Engine": "एंबेडिंग मॉडल इंजन",
+	"Embedding model set to \"{{embedding_model}}\"": "एम्बेडिंग मॉडल को \"{{embedding_model}}\" पर सेट किया गया",
+	"Enable Chat History": "चैट इतिहास सक्रिय करें",
+	"Enable New Sign Ups": "नए साइन अप सक्रिय करें",
+	"Enabled": "सक्रिय",
+	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "सुनिश्चित करें कि आपकी CSV फ़ाइल में इस क्रम में 4 कॉलम शामिल हैं: नाम, ईमेल, पासवर्ड, भूमिका।",
+	"Enter {{role}} message here": "यहां {{role}} संदेश दर्ज करें",
+	"Enter Chunk Overlap": "चंक ओवरलैप दर्ज करें",
+	"Enter Chunk Size": "खंड आकार दर्ज करें",
+	"Enter Image Size (e.g. 512x512)": "छवि का आकार दर्ज करें (उदा. 512x512)",
+	"Enter language codes": "",
+	"Enter LiteLLM API Base URL (litellm_params.api_base)": "LiteLLM API Base URL दर्ज करें (litellm_params.api_base)",
+	"Enter LiteLLM API Key (litellm_params.api_key)": "LiteLLM API Key दर्ज करें (litellm_params.api_key)",
+	"Enter LiteLLM API RPM (litellm_params.rpm)": "LiteLLM API RPM दर्ज करें (litellm_params.rpm) ",
+	"Enter LiteLLM Model (litellm_params.model)": "LiteLLM Model दर्ज करें (litellm_params.model)",
+	"Enter Max Tokens (litellm_params.max_tokens)": "Max Tokens दर्ज करें (litellm_params.max_tokens)",
+	"Enter model tag (e.g. {{modelTag}})": "Model tag दर्ज करें (उदा. {{modelTag}})",
+	"Enter Number of Steps (e.g. 50)": "चरणों की संख्या दर्ज करें (उदा. 50)",
+	"Enter Score": "स्कोर दर्ज करें",
+	"Enter stop sequence": "स्टॉप अनुक्रम दर्ज करें",
+	"Enter Top K": "शीर्ष K दर्ज करें",
+	"Enter URL (e.g. http://127.0.0.1:7860/)": "यूआरएल दर्ज करें (उदा. http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "",
+	"Enter Your Email": "अपना ईमेल दर्ज करें",
+	"Enter Your Full Name": "अपना पूरा नाम भरें",
+	"Enter Your Password": "अपना पासवर्ड भरें",
+	"Enter Your Role": "अपनी भूमिका दर्ज करें",
+	"Experimental": "प्रयोगात्मक",
+	"Export All Chats (All Users)": "सभी चैट निर्यात करें (सभी उपयोगकर्ताओं की)",
+	"Export Chats": "चैट निर्यात करें",
+	"Export Documents Mapping": "निर्यात दस्तावेज़ मैपिंग",
+	"Export Modelfiles": "मॉडल फ़ाइलें निर्यात करें",
+	"Export Prompts": "प्रॉम्प्ट निर्यात करें",
+	"Failed to create API Key.": "एपीआई कुंजी बनाने में विफल.",
+	"Failed to read clipboard contents": "क्लिपबोर्ड सामग्री पढ़ने में विफल",
+	"February": "",
+	"Feel free to add specific details": "विशिष्ट विवरण जोड़ने के लिए स्वतंत्र महसूस करें",
+	"File Mode": "फ़ाइल मोड",
+	"File not found.": "फ़ाइल प्राप्त नहीं हुई।",
+	"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "फ़िंगरप्रिंट स्पूफ़िंग का पता चला: प्रारंभिक अक्षरों को अवतार के रूप में उपयोग करने में असमर्थ। प्रोफ़ाइल छवि को डिफ़ॉल्ट पर डिफ़ॉल्ट किया जा रहा है.",
+	"Fluidly stream large external response chunks": "बड़े बाह्य प्रतिक्रिया खंडों को तरल रूप से प्रवाहित करें",
+	"Focus chat input": "चैट इनपुट पर फ़ोकस करें",
+	"Followed instructions perfectly": "निर्देशों का पूर्णतः पालन किया",
+	"Format your variables using square brackets like this:": "वर्गाकार कोष्ठकों का उपयोग करके अपने चरों को इस प्रकार प्रारूपित करें :",
+	"From (Base Model)": "(बेस मॉडल) से ",
+	"Full Screen Mode": "पूर्ण स्क्रीन मोड",
+	"General": "सामान्य",
+	"General Settings": "सामान्य सेटिंग्स",
+	"Generation Info": "जनरेशन की जानकारी",
+	"Good Response": "अच्छी प्रतिक्रिया",
+	"has no conversations.": "कोई बातचीत नहीं है",
+	"Hello, {{name}}": "नमस्ते, {{name}}",
+	"Help": "",
+	"Hide": "छुपाएं",
+	"Hide Additional Params": "अतिरिक्त पैरामीटर छिपाएँ",
+	"How can I help you today?": "आज मैं आपकी कैसे मदद कर सकता हूँ?",
+	"Hybrid Search": "हाइब्रिड खोज",
+	"Image Generation (Experimental)": "छवि निर्माण (प्रायोगिक)",
+	"Image Generation Engine": "छवि निर्माण इंजन",
+	"Image Settings": "छवि सेटिंग्स",
+	"Images": "इमेजिस",
+	"Import Chats": "चैट आयात करें",
+	"Import Documents Mapping": "दस्तावेज़ मैपिंग आयात करें",
+	"Import Modelfiles": "मॉडल फ़ाइलें आयात करें",
+	"Import Prompts": "प्रॉम्प्ट आयात करें",
+	"Include `--api` flag when running stable-diffusion-webui": "stable-diffusion-webui चलाते समय `--api` ध्वज शामिल करें",
+	"Input commands": "",
+	"Interface": "इंटरफेस",
+	"Invalid Tag": "",
+	"January": "",
+	"join our Discord for help.": "मदद के लिए हमारे डिस्कोर्ड में शामिल हों।",
+	"JSON": "",
+	"July": "",
+	"June": "",
+	"JWT Expiration": "JWT समाप्ति",
+	"JWT Token": "",
+	"Keep Alive": "क्रियाशील रहो",
+	"Keyboard shortcuts": "कीबोर्ड शॉर्टकट",
+	"Language": "भाषा",
+	"Last Active": "पिछली बार सक्रिय",
+	"Light": "",
+	"Listening...": "सुन रहा हूँ...",
+	"LLMs can make mistakes. Verify important information.": "एलएलएम गलतियाँ कर सकते हैं। महत्वपूर्ण जानकारी सत्यापित करें.",
+	"Made by OpenWebUI Community": "OpenWebUI समुदाय द्वारा निर्मित",
+	"Make sure to enclose them with": "उन्हें संलग्न करना सुनिश्चित करें",
+	"Manage LiteLLM Models": "LiteLLM मॉडल प्रबंधित करें",
+	"Manage Models": "मॉडल प्रबंधित करें",
+	"Manage Ollama Models": "Ollama मॉडल प्रबंधित करें",
+	"March": "",
+	"Max Tokens": "अधिकतम टोकन",
+	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "अधिकतम 3 मॉडल एक साथ डाउनलोड किये जा सकते हैं। कृपया बाद में पुन: प्रयास करें।",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
+	"Minimum Score": "न्यूनतम स्कोर",
+	"Mirostat": "",
+	"Mirostat Eta": "",
+	"Mirostat Tau": "",
+	"MMMM DD, YYYY": "",
+	"MMMM DD, YYYY HH:mm": "",
+	"Model '{{modelName}}' has been successfully downloaded.": "मॉडल '{{modelName}}' सफलतापूर्वक डाउनलोड हो गया है।",
+	"Model '{{modelTag}}' is already in queue for downloading.": "मॉडल '{{modelTag}}' पहले से ही डाउनलोड करने के लिए कतार में है।",
+	"Model {{modelId}} not found": "मॉडल {{modelId}} नहीं मिला",
+	"Model {{modelName}} already exists.": "मॉडल {{modelName}} पहले से मौजूद है।",
+	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "मॉडल फ़ाइल सिस्टम पथ का पता चला. अद्यतन के लिए मॉडल संक्षिप्त नाम आवश्यक है, जारी नहीं रखा जा सकता।",
+	"Model Name": "मॉडल नाम",
+	"Model not selected": "मॉडल चयनित नहीं है",
+	"Model Tag Name": "मॉडल टैग नाम",
+	"Model Whitelisting": "मॉडल श्वेतसूचीकरण करें",
+	"Model(s) Whitelisted": "मॉडल श्वेतसूची में है",
+	"Modelfile": "मॉडल फ़ाइल",
+	"Modelfile Advanced Settings": "मॉडल फ़ाइल उन्नत सेटिंग्स",
+	"Modelfile Content": "मॉडल फ़ाइल सामग्री",
+	"Modelfiles": "मॉडल फ़ाइलें",
+	"Models": "सभी मॉडल",
+	"More": "और..",
+	"My Documents": "मेरे दस्तावेज़",
+	"My Modelfiles": "मेरी मॉडल फ़ाइलें",
+	"My Prompts": "मेरे प्रॉम्प्ट",
+	"Name": "नाम",
+	"Name Tag": "नाम टैग",
+	"Name your modelfile": "अपनी मॉडलफ़ाइल को नाम दें",
+	"New Chat": "नई चैट",
+	"New Password": "नया पासवर्ड",
+	"No results found": "",
+	"No source available": "",
+	"Not factually correct": "तथ्यात्मक रूप से सही नहीं है",
+	"Not sure what to add?": "निश्चित नहीं कि क्या जोड़ें?",
+	"Not sure what to write? Switch to": "मैं आश्वस्त नहीं हूं कि क्या लिखना है? स्विच करें",
+	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "ध्यान दें: यदि आप न्यूनतम स्कोर निर्धारित करते हैं, तो खोज केवल न्यूनतम स्कोर से अधिक या उसके बराबर स्कोर वाले दस्तावेज़ वापस लाएगी।",
+	"Notifications": "सूचनाएं",
+	"November": "",
+	"October": "",
+	"Off": "बंद",
+	"Okay, Let's Go!": "ठीक है, चलिए चलते हैं!",
+	"OLED Dark": "",
+	"Ollama": "",
+	"Ollama Base URL": "",
+	"Ollama Version": "",
+	"On": "चालू",
+	"Only": "केवल",
+	"Only alphanumeric characters and hyphens are allowed in the command string.": "कमांड स्ट्रिंग में केवल अल्फ़ान्यूमेरिक वर्ण और हाइफ़न की अनुमति है।",
+	"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.": "उफ़! कृपया प्रतीक्षा करें, आपकी फ़ाइलें अभी भी प्रसंस्करण ओवन में हैं। हम उन्हें पूर्णता से पका रहे हैं। कृपया धैर्य रखें और जब वे तैयार हो जाएंगे तो हम आपको बता देंगे।",
+	"Oops! Looks like the URL is invalid. Please double-check and try again.": "उफ़! ऐसा लगता है कि यूआरएल अमान्य है. कृपया दोबारा जांचें और पुनः प्रयास करें।",
+	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "उफ़! आप एक असमर्थित विधि (केवल फ्रंटएंड) का उपयोग कर रहे हैं। कृपया बैकएंड से WebUI सर्वे करें।",
+	"Open": "खोलें",
+	"Open AI": "",
+	"Open AI (Dall-E)": "",
+	"Open new chat": "नई चैट खोलें",
+	"OpenAI": "",
+	"OpenAI API": "",
+	"OpenAI API Config": "",
+	"OpenAI API Key is required.": "OpenAI API कुंजी आवश्यक है",
+	"OpenAI URL/Key required.": "OpenAI URL/Key आवश्यक है।",
+	"or": "या",
+	"Other": "अन्य",
+	"Overview": "",
+	"Parameters": "पैरामीटर",
+	"Password": "पासवर्ड",
+	"PDF document (.pdf)": "PDF दस्तावेज़ (.pdf)",
+	"PDF Extract Images (OCR)": "PDF छवियाँ निकालें (OCR)",
+	"pending": "लंबित",
+	"Permission denied when accessing microphone: {{error}}": "माइक्रोफ़ोन तक पहुँचने पर अनुमति अस्वीकृत: {{error}}",
+	"Plain text (.txt)": "सादा पाठ (.txt)",
+	"Playground": "कार्यक्षेत्र",
+	"Positive attitude": "सकारात्मक रवैया",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
+	"Profile Image": "प्रोफ़ाइल छवि",
+	"Prompt": "",
+	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "प्रॉम्प्ट (उदाहरण के लिए मुझे रोमन साम्राज्य के बारे में एक मजेदार तथ्य बताएं)",
+	"Prompt Content": "प्रॉम्प्ट सामग्री",
+	"Prompt suggestions": "प्रॉम्प्ट सुझाव",
+	"Prompts": "प्रॉम्प्ट",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
+	"Pull a model from Ollama.com": "Ollama.com से एक मॉडल खींचें",
+	"Pull Progress": "प्रगति खींचें",
+	"Query Params": "क्वेरी पैरामीटर",
+	"RAG Template": "RAG टेम्पलेट",
+	"Raw Format": "कच्चा प्रारूप",
+	"Read Aloud": "जोर से पढ़ें",
+	"Record voice": "आवाज रिकॉर्ड करना",
+	"Redirecting you to OpenWebUI Community": "आपको OpenWebUI समुदाय पर पुनर्निर्देशित किया जा रहा है",
+	"Refused when it shouldn't have": "जब ऐसा नहीं होना चाहिए था तो मना कर दिया",
+	"Regenerate": "पुनः जेनरेट",
+	"Release Notes": "रिलीज नोट्स",
+	"Remove": "हटा दें",
+	"Remove Model": "",
+	"Rename": "",
+	"Repeat Last N": "अंतिम N दोहराएँ",
+	"Repeat Penalty": "पुन: दंड",
+	"Request Mode": "अनुरोध मोड",
+	"Reranking Model": "",
+	"Reranking model disabled": "पुनर्रैंकिंग मॉडल अक्षम किया गया",
+	"Reranking model set to \"{{reranking_model}}\"": "रीरैंकिंग मॉडल को \"{{reranking_model}}\" पर \u200b\u200bसेट किया गया",
+	"Reset Vector Storage": "वेक्टर संग्रहण रीसेट करें",
+	"Response AutoCopy to Clipboard": "क्लिपबोर्ड पर प्रतिक्रिया ऑटोकॉपी",
+	"Role": "भूमिका",
+	"Rosé Pine": "",
+	"Rosé Pine Dawn": "",
+	"Save": "सहेजें",
+	"Save & Create": "सहेजें और बनाएं",
+	"Save & Submit": "सहेजें और सबमिट करें",
+	"Save & Update": "सहेजें और अपडेट करें",
+	"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": "चैट लॉग को सीधे आपके ब्राउज़र के स्टोरेज में सहेजना अब समर्थित नहीं है। कृपया नीचे दिए गए बटन पर क्लिक करके डाउनलोड करने और अपने चैट लॉग को हटाने के लिए कुछ समय दें। चिंता न करें, आप आसानी से अपने चैट लॉग को बैकएंड पर पुनः आयात कर सकते हैं",
+	"Scan": "स्कैन",
+	"Scan complete!": "स्कैन पूरा हुआ!",
+	"Scan for documents from {{path}}": "{{path}} से दस्तावेज़ों को स्कैन करें",
+	"Search": "खोजें",
+	"Search a model": "एक मॉडल खोजें",
+	"Search Documents": "दस्तावेज़ खोजें",
+	"Search Prompts": "प्रॉम्प्ट खोजें",
+	"See readme.md for instructions": "निर्देशों के लिए readme.md देखें",
+	"See what's new": "देखें, क्या नया है",
+	"Seed": "सीड्\u200c",
+	"Select a mode": "एक मोड चुनें",
+	"Select a model": "एक मॉडल चुनें",
+	"Select an Ollama instance": "एक Ollama Instance चुनें",
+	"Select model": "",
+	"Send a Message": "एक संदेश भेजो",
+	"Send message": "मेसेज भेजें",
+	"September": "",
+	"Server connection verified": "सर्वर कनेक्शन सत्यापित",
+	"Set as default": "डिफाल्ट के रूप में सेट",
+	"Set Default Model": "डिफ़ॉल्ट मॉडल सेट करें",
+	"Set embedding model (e.g. {{model}})": "",
+	"Set Image Size": "छवि का आकार सेट करें",
+	"Set Model": "",
+	"Set reranking model (e.g. {{model}})": "",
+	"Set Steps": "चरण निर्धारित करें",
+	"Set Title Auto-Generation Model": "शीर्षक ऑटो-जेनरेशन मॉडल सेट करें",
+	"Set Voice": "आवाज सेट करें",
+	"Settings": "सेटिंग्स",
+	"Settings saved successfully!": "सेटिंग्स सफलतापूर्वक सहेजी गईं!",
+	"Share": "साझा करें",
+	"Share Chat": "चैट साझा करें",
+	"Share to OpenWebUI Community": "OpenWebUI समुदाय में साझा करें",
+	"short-summary": "संक्षिप्त सारांश",
+	"Show": "दिखाओ",
+	"Show Additional Params": "अतिरिक्त पैरामीटर दिखाएँ",
+	"Show shortcuts": "शॉर्टकट दिखाएँ",
+	"Showcased creativity": "रचनात्मकता का प्रदर्शन किया",
+	"sidebar": "साइड बार",
+	"Sign in": "साइन इन",
+	"Sign Out": "साइन आउट",
+	"Sign up": "साइन अप",
+	"Signing in": "साइन इन हो रहा है",
+	"Source": "",
+	"Speech recognition error: {{error}}": "वाक् पहचान त्रुटि: {{error}}",
+	"Speech-to-Text Engine": "वाक्-से-पाठ इंजन",
+	"SpeechRecognition API is not supported in this browser.": "इस ब्राउज़र में SpeechRecognition API समर्थित नहीं है",
+	"Stop Sequence": "अनुक्रम रोकें",
+	"STT Settings": "STT सेटिंग्स ",
+	"Submit": "सबमिट करें",
+	"Subtitle (e.g. about the Roman Empire)": "उपशीर्षक (जैसे रोमन साम्राज्य के बारे में)",
+	"Success": "संपन्न",
+	"Successfully updated.": "सफलतापूर्वक उत्परिवर्तित।",
+	"Suggested": "",
+	"Sync All": "सभी को सिंक करें",
+	"System": "सिस्टम",
+	"System Prompt": "सिस्टम प्रॉम्प्ट",
+	"Tags": "टैग",
+	"Tell us more:": "हमें और अधिक बताएँ:",
+	"Temperature": "टेंपेरेचर",
+	"Template": "टेम्पलेट",
+	"Text Completion": "पाठ समापन",
+	"Text-to-Speech Engine": "टेक्स्ट-टू-स्पीच इंजन",
+	"Tfs Z": "",
+	"Thanks for your feedback!": "आपकी प्रतिक्रिया के लिए धन्यवाद!",
+	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "स्कोर का मान 0.0 (0%) और 1.0 (100%) के बीच होना चाहिए।",
+	"Theme": "थीम",
+	"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "यह सुनिश्चित करता है कि आपकी मूल्यवान बातचीत आपके बैकएंड डेटाबेस में सुरक्षित रूप से सहेजी गई है। धन्यवाद!",
+	"This setting does not sync across browsers or devices.": "यह सेटिंग सभी ब्राउज़रों या डिवाइसों में समन्वयित नहीं होती है",
+	"Thorough explanation": "विस्तृत व्याख्या",
+	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "टिप: प्रत्येक प्रतिस्थापन के बाद चैट इनपुट में टैब कुंजी दबाकर लगातार कई वैरिएबल स्लॉट अपडेट करें।",
+	"Title": "शीर्षक",
+	"Title (e.g. Tell me a fun fact)": "शीर्षक (उदा. मुझे एक मज़ेदार तथ्य बताएं)",
+	"Title Auto-Generation": "शीर्षक ऑटो-जेनरेशन",
+	"Title cannot be an empty string.": "",
+	"Title Generation Prompt": "शीर्षक जनरेशन प्रॉम्प्ट",
+	"to": "",
+	"To access the available model names for downloading,": "डाउनलोड करने के लिए उपलब्ध मॉडल नामों तक पहुंचने के लिए,",
+	"To access the GGUF models available for downloading,": "डाउनलोडिंग के लिए उपलब्ध GGUF मॉडल तक पहुँचने के लिए,",
+	"to chat input.": "इनपुट चैट करने के लिए.",
+	"Today": "",
+	"Toggle settings": "सेटिंग्स टॉगल करें",
+	"Toggle sidebar": "साइडबार टॉगल करें",
+	"Top K": "शीर्ष  K",
+	"Top P": "शीर्ष  P",
+	"Trouble accessing Ollama?": "Ollama तक पहुँचने में परेशानी हो रही है?",
+	"TTS Settings": "TTS सेटिंग्स",
+	"Type Hugging Face Resolve (Download) URL": "हगिंग फेस रिज़ॉल्व (डाउनलोड) यूआरएल टाइप करें",
+	"Uh-oh! There was an issue connecting to {{provider}}.": "उह ओह! {{provider}} से कनेक्ट करने में एक समस्या थी।",
+	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "अज्ञात फ़ाइल प्रकार '{{file_type}}', लेकिन स्वीकार करना और सादे पाठ के रूप में व्यवहार करना",
+	"Update and Copy Link": "अपडेट करें और लिंक कॉपी करें",
+	"Update password": "पासवर्ड अपडेट करें",
+	"Upload a GGUF model": "GGUF मॉडल अपलोड करें",
+	"Upload files": "फाइलें अपलोड करें",
+	"Upload Progress": "प्रगति अपलोड करें",
+	"URL Mode": "",
+	"Use '#' in the prompt input to load and select your documents.": "अपने दस्तावेज़ों को लोड करने और चुनने के लिए शीघ्र इनपुट में '#' का उपयोग करें।",
+	"Use Gravatar": "Gravatar का प्रयोग करें",
+	"Use Initials": "प्रथमाक्षर का प्रयोग करें",
+	"user": "उपयोगकर्ता",
+	"User Permissions": "उपयोगकर्ता अनुमतियाँ",
+	"Users": "उपयोगकर्ताओं",
+	"Utilize": "उपयोग करें",
+	"Valid time units:": "मान्य समय इकाइयाँ:",
+	"variable": "",
+	"variable to have them replaced with clipboard content.": "उन्हें क्लिपबोर्ड सामग्री से बदलने के लिए वेरिएबल।",
+	"Version": "संस्करण",
+	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "चेतावनी: यदि आप अपने एम्बेडिंग मॉडल को अपडेट या बदलते हैं, तो आपको सभी दस्तावेज़ों को फिर से आयात करने की आवश्यकता होगी।",
+	"Web": "वेब",
+	"Web Loader Settings": "",
+	"Web Params": "",
+	"Webhook URL": "",
+	"WebUI Add-ons": "",
+	"WebUI Settings": "WebUI सेटिंग्स",
+	"WebUI will make requests to": "WebUI अनुरोध करेगा",
+	"What’s New in": "इसमें नया क्या है",
+	"When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "जब इतिहास बंद हो जाता है, तो इस ब्राउज़र पर नई चैट आपके किसी भी डिवाइस पर इतिहास में दिखाई नहीं देंगी।",
+	"Whisper (Local)": "Whisper (स्थानीय)",
+	"Write a prompt suggestion (e.g. Who are you?)": "एक त्वरित सुझाव लिखें (जैसे कि आप कौन हैं?)",
+	"Write a summary in 50 words that summarizes [topic or keyword].": "50 शब्दों में एक सारांश लिखें जो [विषय या कीवर्ड] का सारांश प्रस्तुत करता हो।",
+	"Yesterday": "",
+	"You": "आप",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
+	"You're a helpful assistant.": "आप एक सहायक सहायक हैं",
+	"You're now logged in.": "अब आप लॉग इन हो गए हैं",
+	"Youtube": "",
+	"Youtube Loader Settings": ""
+}

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

@@ -15,6 +15,7 @@
 	"Add a short description about what this modelfile does": "Aggiungi una breve descrizione di ciò che fa questo file modello",
 	"Add a short title for this prompt": "Aggiungi un titolo breve per questo prompt",
 	"Add a tag": "Aggiungi un tag",
+	"Add custom prompt": "",
 	"Add Docs": "Aggiungi documenti",
 	"Add Files": "Aggiungi file",
 	"Add message": "Aggiungi messaggio",
@@ -27,6 +28,7 @@
 	"Admin Settings": "Impostazioni amministratore",
 	"Advanced Parameters": "Parametri avanzati",
 	"all": "tutti",
+	"All Documents": "",
 	"All Users": "Tutti gli utenti",
 	"Allow": "Consenti",
 	"Allow Chat Deletion": "Consenti l'eliminazione della chat",
@@ -34,17 +36,21 @@
 	"Already have an account?": "Hai già un account?",
 	"an assistant": "un assistente",
 	"and": "e",
+	"and create a new shared link.": "",
 	"API Base URL": "URL base API",
 	"API Key": "Chiave API",
 	"API Key created.": "",
 	"API keys": "",
 	"API RPM": "API RPM",
+	"April": "",
 	"Archive": "",
 	"Archived Chats": "Chat archiviate",
 	"are allowed - Activate this command by typing": "sono consentiti - Attiva questo comando digitando",
 	"Are you sure?": "Sei sicuro?",
+	"Attach file": "",
 	"Attention to detail": "",
 	"Audio": "Audio",
+	"August": "",
 	"Auto-playback response": "Riproduzione automatica della risposta",
 	"Auto-send input after 3 sec.": "Invio automatico dell'input dopo 3 secondi.",
 	"AUTOMATIC1111 Base URL": "URL base AUTOMATIC1111",
@@ -52,8 +58,10 @@
 	"available!": "disponibile!",
 	"Back": "Indietro",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "Modalità costruttore",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "Annulla",
 	"Categories": "Categorie",
 	"Change Password": "Cambia password",
@@ -68,7 +76,9 @@
 	"Chunk Overlap": "Sovrapposizione chunk",
 	"Chunk Params": "Parametri chunk",
 	"Chunk Size": "Dimensione chunk",
+	"Citation": "",
 	"Click here for help.": "Clicca qui per aiuto.",
+	"Click here to": "",
 	"Click here to check other modelfiles.": "Clicca qui per controllare altri file modello.",
 	"Click here to select": "Clicca qui per selezionare",
 	"Click here to select a csv file.": "",
@@ -96,6 +106,8 @@
 	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Crea una frase concisa di 3-5 parole come intestazione per la seguente query, aderendo rigorosamente al limite di 3-5 parole ed evitando l'uso della parola 'titolo':",
 	"Create a modelfile": "Crea un file modello",
 	"Create Account": "Crea account",
+	"Create new key": "",
+	"Create new secret key": "",
 	"Created at": "Creato il",
 	"Created At": "",
 	"Current Model": "Modello corrente",
@@ -103,8 +115,10 @@
 	"Custom": "Personalizzato",
 	"Customize Ollama models for a specific purpose": "Personalizza i modelli Ollama per uno scopo specifico",
 	"Dark": "Scuro",
+	"Dashboard": "",
 	"Database": "Database",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
+	"December": "",
 	"Default": "Predefinito",
 	"Default (Automatic1111)": "Predefinito (Automatic1111)",
 	"Default (SentenceTransformers)": "",
@@ -118,6 +132,7 @@
 	"Delete chat": "Elimina chat",
 	"Delete Chat": "",
 	"Delete Chats": "Elimina chat",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "Eliminato {{deleteModelTag}}",
 	"Deleted {{tagName}}": "",
@@ -137,6 +152,7 @@
 	"Don't have an account?": "Non hai un account?",
 	"Don't like the style": "",
 	"Download": "",
+	"Download canceled": "",
 	"Download Database": "Scarica database",
 	"Drop any files here to add to the conversation": "Trascina qui i file da aggiungere alla conversazione",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "ad esempio '30s','10m'. Le unità di tempo valide sono 's', 'm', 'h'.",
@@ -144,6 +160,7 @@
 	"Edit Doc": "Modifica documento",
 	"Edit User": "Modifica utente",
 	"Email": "Email",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "Abilita cronologia chat",
@@ -154,6 +171,7 @@
 	"Enter Chunk Overlap": "Inserisci la sovrapposizione chunk",
 	"Enter Chunk Size": "Inserisci la dimensione chunk",
 	"Enter Image Size (e.g. 512x512)": "Inserisci la dimensione dell'immagine (ad esempio 512x512)",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "Inserisci l'URL base dell'API LiteLLM (litellm_params.api_base)",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "Inserisci la chiave API LiteLLM (litellm_params.api_key)",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Inserisci LiteLLM API RPM (litellm_params.rpm)",
@@ -165,6 +183,7 @@
 	"Enter stop sequence": "Inserisci la sequenza di arresto",
 	"Enter Top K": "Inserisci Top K",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "Inserisci URL (ad esempio http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "Inserisci la tua email",
 	"Enter Your Full Name": "Inserisci il tuo nome completo",
 	"Enter Your Password": "Inserisci la tua password",
@@ -177,6 +196,7 @@
 	"Export Prompts": "Esporta prompt",
 	"Failed to create API Key.": "",
 	"Failed to read clipboard contents": "Impossibile leggere il contenuto degli appunti",
+	"February": "",
 	"Feel free to add specific details": "",
 	"File Mode": "Modalità file",
 	"File not found.": "File non trovato.",
@@ -193,6 +213,7 @@
 	"Good Response": "",
 	"has no conversations.": "",
 	"Hello, {{name}}": "Ciao, {{name}}",
+	"Help": "",
 	"Hide": "Nascondi",
 	"Hide Additional Params": "Nascondi parametri aggiuntivi",
 	"How can I help you today?": "Come posso aiutarti oggi?",
@@ -206,9 +227,14 @@
 	"Import Modelfiles": "Importa file modello",
 	"Import Prompts": "Importa prompt",
 	"Include `--api` flag when running stable-diffusion-webui": "",
+	"Input commands": "",
 	"Interface": "Interfaccia",
+	"Invalid Tag": "",
+	"January": "",
 	"join our Discord for help.": "unisciti al nostro Discord per ricevere aiuto.",
 	"JSON": "JSON",
+	"July": "",
+	"June": "",
 	"JWT Expiration": "Scadenza JWT",
 	"JWT Token": "Token JWT",
 	"Keep Alive": "Mantieni attivo",
@@ -223,8 +249,11 @@
 	"Manage LiteLLM Models": "Gestisci modelli LiteLLM",
 	"Manage Models": "Gestisci modelli",
 	"Manage Ollama Models": "Gestisci modelli Ollama",
+	"March": "",
 	"Max Tokens": "Max token",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "È possibile scaricare un massimo di 3 modelli contemporaneamente. Riprova più tardi.",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
 	"Minimum Score": "",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
@@ -255,11 +284,15 @@
 	"Name your modelfile": "Assegna un nome al tuo file modello",
 	"New Chat": "Nuova chat",
 	"New Password": "Nuova password",
+	"No results found": "",
+	"No source available": "",
 	"Not factually correct": "",
 	"Not sure what to add?": "Non sei sicuro di cosa aggiungere?",
 	"Not sure what to write? Switch to": "Non sei sicuro di cosa scrivere? Passa a",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
 	"Notifications": "Notifiche desktop",
+	"November": "",
+	"October": "",
 	"Off": "Disattivato",
 	"Okay, Let's Go!": "Ok, andiamo!",
 	"OLED Dark": "",
@@ -283,6 +316,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "o",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Parametri",
 	"Password": "Password",
 	"PDF document (.pdf)": "",
@@ -292,11 +326,15 @@
 	"Plain text (.txt)": "",
 	"Playground": "Terreno di gioco",
 	"Positive attitude": "",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
 	"Profile Image": "",
+	"Prompt": "",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
 	"Prompt Content": "Contenuto del prompt",
 	"Prompt suggestions": "Suggerimenti prompt",
 	"Prompts": "Prompt",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Estrai un modello da Ollama.com",
 	"Pull Progress": "Avanzamento estrazione",
 	"Query Params": "Parametri query",
@@ -309,9 +347,12 @@
 	"Regenerate": "",
 	"Release Notes": "Note di rilascio",
 	"Remove": "",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "Ripeti ultimi N",
 	"Repeat Penalty": "Penalità di ripetizione",
 	"Request Mode": "Modalità richiesta",
+	"Reranking Model": "",
 	"Reranking model disabled": "",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "Reimposta archivio vettoriale",
@@ -337,12 +378,17 @@
 	"Select a mode": "Seleziona una modalità",
 	"Select a model": "Seleziona un modello",
 	"Select an Ollama instance": "Seleziona un'istanza Ollama",
+	"Select model": "",
 	"Send a Message": "Invia un messaggio",
 	"Send message": "Invia messaggio",
+	"September": "",
 	"Server connection verified": "Connessione al server verificata",
 	"Set as default": "Imposta come predefinito",
 	"Set Default Model": "Imposta modello predefinito",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "Imposta dimensione immagine",
+	"Set Model": "Imposta modello",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "Imposta passaggi",
 	"Set Title Auto-Generation Model": "Imposta modello di generazione automatica del titolo",
 	"Set Voice": "Imposta voce",
@@ -361,6 +407,7 @@
 	"Sign Out": "Esci",
 	"Sign up": "Registrati",
 	"Signing in": "",
+	"Source": "",
 	"Speech recognition error: {{error}}": "Errore di riconoscimento vocale: {{error}}",
 	"Speech-to-Text Engine": "Motore da voce a testo",
 	"SpeechRecognition API is not supported in this browser.": "L'API SpeechRecognition non è supportata in questo browser.",
@@ -370,6 +417,7 @@
 	"Subtitle (e.g. about the Roman Empire)": "",
 	"Success": "Successo",
 	"Successfully updated.": "Aggiornato con successo.",
+	"Suggested": "",
 	"Sync All": "Sincronizza tutto",
 	"System": "Sistema",
 	"System Prompt": "Prompt di sistema",
@@ -390,11 +438,13 @@
 	"Title": "Titolo",
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "Generazione automatica del titolo",
+	"Title cannot be an empty string.": "",
 	"Title Generation Prompt": "Prompt di generazione del titolo",
 	"to": "a",
 	"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 chat input.": "all'input della chat.",
+	"Today": "",
 	"Toggle settings": "Attiva/disattiva impostazioni",
 	"Toggle sidebar": "Attiva/disattiva barra laterale",
 	"Top K": "Top K",
@@ -405,11 +455,7 @@
 	"Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh! Si è verificato un problema durante la connessione a {{provider}}.",
 	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Tipo di file sconosciuto '{{file_type}}', ma accettato e trattato come testo normale",
 	"Update and Copy Link": "",
-	"Update Embedding Model": "",
-	"Update embedding model (e.g. {{model}})": "",
 	"Update password": "Aggiorna password",
-	"Update Reranking Model": "",
-	"Update reranking model (e.g. {{model}})": "",
 	"Upload a GGUF model": "Carica un modello GGUF",
 	"Upload files": "Carica file",
 	"Upload Progress": "Avanzamento caricamento",
@@ -427,6 +473,8 @@
 	"Version": "Versione",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Web",
+	"Web Loader Settings": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "Componenti aggiuntivi WebUI",
 	"WebUI Settings": "Impostazioni WebUI",
@@ -436,8 +484,12 @@
 	"Whisper (Local)": "Whisper (locale)",
 	"Write a prompt suggestion (e.g. Who are you?)": "Scrivi un suggerimento per il prompt (ad esempio Chi sei?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Scrivi un riassunto in 50 parole che riassume [argomento o parola chiave].",
+	"Yesterday": "",
 	"You": "Tu",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "Sei un assistente utile.",
 	"You're now logged in.": "Ora hai effettuato l'accesso.",
-	"Youtube": ""
+	"Youtube": "",
+	"Youtube Loader Settings": ""
 }

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

@@ -15,6 +15,7 @@
 	"Add a short description about what this modelfile does": "このモデルファイルの機能に関する簡単な説明を追加",
 	"Add a short title for this prompt": "このプロンプトの短いタイトルを追加",
 	"Add a tag": "タグを追加",
+	"Add custom prompt": "",
 	"Add Docs": "ドキュメントを追加",
 	"Add Files": "ファイルを追加",
 	"Add message": "メッセージを追加",
@@ -27,6 +28,7 @@
 	"Admin Settings": "管理者設定",
 	"Advanced Parameters": "詳細パラメーター",
 	"all": "すべて",
+	"All Documents": "",
 	"All Users": "すべてのユーザー",
 	"Allow": "許可",
 	"Allow Chat Deletion": "チャットの削除を許可",
@@ -34,17 +36,21 @@
 	"Already have an account?": "すでにアカウントをお持ちですか?",
 	"an assistant": "アシスタント",
 	"and": "および",
+	"and create a new shared link.": "",
 	"API Base URL": "API ベース URL",
 	"API Key": "API キー",
 	"API Key created.": "",
 	"API keys": "",
 	"API RPM": "API RPM",
+	"April": "",
 	"Archive": "",
 	"Archived Chats": "チャット記録",
 	"are allowed - Activate this command by typing": "が許可されています - 次のように入力してこのコマンドをアクティブ化します",
 	"Are you sure?": "よろしいですか?",
+	"Attach file": "",
 	"Attention to detail": "",
 	"Audio": "オーディオ",
+	"August": "",
 	"Auto-playback response": "応答の自動再生",
 	"Auto-send input after 3 sec.": "3 秒後に自動的に出力を送信",
 	"AUTOMATIC1111 Base URL": "AUTOMATIC1111 ベース URL",
@@ -52,8 +58,10 @@
 	"available!": "利用可能!",
 	"Back": "戻る",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "ビルダーモード",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "キャンセル",
 	"Categories": "カテゴリ",
 	"Change Password": "パスワードを変更",
@@ -68,7 +76,9 @@
 	"Chunk Overlap": "チャンクオーバーラップ",
 	"Chunk Params": "チャンクパラメーター",
 	"Chunk Size": "チャンクサイズ",
+	"Citation": "",
 	"Click here for help.": "ヘルプについてはここをクリックしてください。",
+	"Click here to": "",
 	"Click here to check other modelfiles.": "他のモデルファイルを確認するにはここをクリックしてください。",
 	"Click here to select": "選択するにはここをクリックしてください",
 	"Click here to select a csv file.": "",
@@ -96,6 +106,8 @@
 	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "次のクエリの見出しとして、3〜5語の簡潔なフレーズを作成してください。3〜5語の制限を厳守し、「タイトル」という単語の使用を避けてください。",
 	"Create a modelfile": "モデルファイルを作成",
 	"Create Account": "アカウントを作成",
+	"Create new key": "",
+	"Create new secret key": "",
 	"Created at": "作成日時",
 	"Created At": "",
 	"Current Model": "現在のモデル",
@@ -103,8 +115,10 @@
 	"Custom": "カスタム",
 	"Customize Ollama models for a specific purpose": "特定の目的に合わせて Ollama モデルをカスタマイズ",
 	"Dark": "ダーク",
+	"Dashboard": "",
 	"Database": "データベース",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
+	"December": "",
 	"Default": "デフォルト",
 	"Default (Automatic1111)": "デフォルト (Automatic1111)",
 	"Default (SentenceTransformers)": "",
@@ -118,6 +132,7 @@
 	"Delete chat": "チャットを削除",
 	"Delete Chat": "",
 	"Delete Chats": "チャットを削除",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} を削除しました",
 	"Deleted {{tagName}}": "",
@@ -137,6 +152,7 @@
 	"Don't have an account?": "アカウントをお持ちではありませんか?",
 	"Don't like the style": "",
 	"Download": "",
+	"Download canceled": "",
 	"Download Database": "データベースをダウンロード",
 	"Drop any files here to add to the conversation": "会話を追加するには、ここにファイルをドロップしてください",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "例: '30秒'、'10分'。有効な時間単位は '秒'、'分'、'時間' です。",
@@ -144,6 +160,7 @@
 	"Edit Doc": "ドキュメントを編集",
 	"Edit User": "ユーザーを編集",
 	"Email": "メールアドレス",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "チャット履歴を有効化",
@@ -154,6 +171,7 @@
 	"Enter Chunk Overlap": "チャンクオーバーラップを入力してください",
 	"Enter Chunk Size": "チャンクサイズを入力してください",
 	"Enter Image Size (e.g. 512x512)": "画像サイズを入力してください (例: 512x512)",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "LiteLLM API ベース URL を入力してください (litellm_params.api_base)",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "LiteLLM API キーを入力してください (litellm_params.api_key)",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "LiteLLM API RPM を入力してください (litellm_params.rpm)",
@@ -165,6 +183,7 @@
 	"Enter stop sequence": "ストップシーケンスを入力してください",
 	"Enter Top K": "トップ K を入力してください",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "URL を入力してください (例: http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "メールアドレスを入力してください",
 	"Enter Your Full Name": "フルネームを入力してください",
 	"Enter Your Password": "パスワードを入力してください",
@@ -177,6 +196,7 @@
 	"Export Prompts": "プロンプトをエクスポート",
 	"Failed to create API Key.": "",
 	"Failed to read clipboard contents": "クリップボードの内容を読み取れませんでした",
+	"February": "",
 	"Feel free to add specific details": "",
 	"File Mode": "ファイルモード",
 	"File not found.": "ファイルが見つかりません。",
@@ -193,6 +213,7 @@
 	"Good Response": "",
 	"has no conversations.": "",
 	"Hello, {{name}}": "こんにちは、{{name}} さん",
+	"Help": "",
 	"Hide": "非表示",
 	"Hide Additional Params": "追加パラメーターを非表示",
 	"How can I help you today?": "今日はどのようにお手伝いしましょうか?",
@@ -206,9 +227,14 @@
 	"Import Modelfiles": "モデルファイルをインポート",
 	"Import Prompts": "プロンプトをインポート",
 	"Include `--api` flag when running stable-diffusion-webui": "",
+	"Input commands": "",
 	"Interface": "インターフェース",
+	"Invalid Tag": "",
+	"January": "",
 	"join our Discord for help.": "ヘルプについては、Discord に参加してください。",
 	"JSON": "JSON",
+	"July": "",
+	"June": "",
 	"JWT Expiration": "JWT 有効期限",
 	"JWT Token": "JWT トークン",
 	"Keep Alive": "キープアライブ",
@@ -223,8 +249,11 @@
 	"Manage LiteLLM Models": "LiteLLM モデルを管理",
 	"Manage Models": "モデルを管理",
 	"Manage Ollama Models": "Ollama モデルを管理",
+	"March": "",
 	"Max Tokens": "最大トークン数",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "同時にダウンロードできるモデルは最大 3 つです。後でもう一度お試しください。",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
 	"Minimum Score": "",
 	"Mirostat": "ミロスタット",
 	"Mirostat Eta": "ミロスタット Eta",
@@ -255,11 +284,15 @@
 	"Name your modelfile": "モデルファイルに名前を付ける",
 	"New Chat": "新しいチャット",
 	"New Password": "新しいパスワード",
+	"No results found": "",
+	"No source available": "",
 	"Not factually correct": "",
 	"Not sure what to add?": "何を追加すればよいかわからない?",
 	"Not sure what to write? Switch to": "何を書けばよいかわからない? 次に切り替える",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
 	"Notifications": "デスクトップ通知",
+	"November": "",
+	"October": "",
 	"Off": "オフ",
 	"Okay, Let's Go!": "OK、始めましょう!",
 	"OLED Dark": "",
@@ -283,6 +316,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "または",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "パラメーター",
 	"Password": "パスワード",
 	"PDF document (.pdf)": "",
@@ -292,11 +326,15 @@
 	"Plain text (.txt)": "",
 	"Playground": "プレイグラウンド",
 	"Positive attitude": "",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
 	"Profile Image": "",
+	"Prompt": "",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
 	"Prompt Content": "プロンプトの内容",
 	"Prompt suggestions": "プロンプトの提案",
 	"Prompts": "プロンプト",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Ollama.com からモデルをプル",
 	"Pull Progress": "プルの進行状況",
 	"Query Params": "クエリパラメーター",
@@ -309,9 +347,12 @@
 	"Regenerate": "",
 	"Release Notes": "リリースノート",
 	"Remove": "",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "最後の N を繰り返す",
 	"Repeat Penalty": "繰り返しペナルティ",
 	"Request Mode": "リクエストモード",
+	"Reranking Model": "",
 	"Reranking model disabled": "",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "ベクトルストレージをリセット",
@@ -337,12 +378,17 @@
 	"Select a mode": "モードを選択",
 	"Select a model": "モデルを選択",
 	"Select an Ollama instance": "Ollama インスタンスを選択",
+	"Select model": "",
 	"Send a Message": "メッセージを送信",
 	"Send message": "メッセージを送信",
+	"September": "",
 	"Server connection verified": "サーバー接続が確認されました",
 	"Set as default": "デフォルトに設定",
 	"Set Default Model": "デフォルトモデルを設定",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "画像サイズを設定",
+	"Set Model": "モデルを設定",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "ステップを設定",
 	"Set Title Auto-Generation Model": "タイトル自動生成モデルを設定",
 	"Set Voice": "音声を設定",
@@ -361,6 +407,7 @@
 	"Sign Out": "サインアウト",
 	"Sign up": "サインアップ",
 	"Signing in": "",
+	"Source": "",
 	"Speech recognition error: {{error}}": "音声認識エラー: {{error}}",
 	"Speech-to-Text Engine": "音声テキスト変換エンジン",
 	"SpeechRecognition API is not supported in this browser.": "このブラウザでは SpeechRecognition API がサポートされていません。",
@@ -370,6 +417,7 @@
 	"Subtitle (e.g. about the Roman Empire)": "",
 	"Success": "成功",
 	"Successfully updated.": "正常に更新されました。",
+	"Suggested": "",
 	"Sync All": "すべてを同期",
 	"System": "システム",
 	"System Prompt": "システムプロンプト",
@@ -390,11 +438,13 @@
 	"Title": "タイトル",
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "タイトル自動生成",
+	"Title cannot be an empty string.": "",
 	"Title Generation Prompt": "タイトル生成プロンプト",
 	"to": "まで",
 	"To access the available model names for downloading,": "ダウンロード可能なモデル名にアクセスするには、",
 	"To access the GGUF models available for downloading,": "ダウンロード可能な GGUF モデルにアクセスするには、",
 	"to chat input.": "チャット入力へ。",
+	"Today": "",
 	"Toggle settings": "設定を切り替え",
 	"Toggle sidebar": "サイドバーを切り替え",
 	"Top K": "トップ K",
@@ -405,11 +455,7 @@
 	"Uh-oh! There was an issue connecting to {{provider}}.": "おっと! {{provider}} への接続に問題が発生しました。",
 	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "不明なファイルタイプ '{{file_type}}' ですが、プレーンテキストとして受け入れて処理します",
 	"Update and Copy Link": "",
-	"Update Embedding Model": "",
-	"Update embedding model (e.g. {{model}})": "",
 	"Update password": "パスワードを更新",
-	"Update Reranking Model": "",
-	"Update reranking model (e.g. {{model}})": "",
 	"Upload a GGUF model": "GGUF モデルをアップロード",
 	"Upload files": "ファイルをアップロード",
 	"Upload Progress": "アップロードの進行状況",
@@ -427,6 +473,8 @@
 	"Version": "バージョン",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "ウェブ",
+	"Web Loader Settings": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "WebUI アドオン",
 	"WebUI Settings": "WebUI 設定",
@@ -436,8 +484,12 @@
 	"Whisper (Local)": "Whisper (ローカル)",
 	"Write a prompt suggestion (e.g. Who are you?)": "プロンプトの提案を書いてください (例: あなたは誰ですか?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "[トピックまたはキーワード] を要約する 50 語の概要を書いてください。",
+	"Yesterday": "",
 	"You": "あなた",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "あなたは役に立つアシスタントです。",
 	"You're now logged in.": "ログインしました。",
-	"Youtube": ""
+	"Youtube": "",
+	"Youtube Loader Settings": ""
 }

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

@@ -15,6 +15,7 @@
 	"Add a short description about what this modelfile does": "დაამატე მოკლე აღწერა იმის შესახებ, თუ რას აკეთებს ეს მოდელური ფაილი",
 	"Add a short title for this prompt": "დაამატე მოკლე სათაური ამ მოთხოვნისთვის",
 	"Add a tag": "დაამატე ტეგი",
+	"Add custom prompt": "",
 	"Add Docs": "დოკუმენტის დამატება",
 	"Add Files": "ფაილების დამატება",
 	"Add message": "შეტყობინების დამატება",
@@ -27,6 +28,7 @@
 	"Admin Settings": "ადმინისტრატორის ხელსაწყოები",
 	"Advanced Parameters": "დამატებითი პარამეტრები",
 	"all": "ყველა",
+	"All Documents": "",
 	"All Users": "ყველა მომხმარებელი",
 	"Allow": "ნების დართვა",
 	"Allow Chat Deletion": "მიმოწერის წაშლის დაშვება",
@@ -34,17 +36,21 @@
 	"Already have an account?": "უკვე გაქვს ანგარიში?",
 	"an assistant": "ასისტენტი",
 	"and": "და",
+	"and create a new shared link.": "",
 	"API Base URL": "API საბაზისო URL",
 	"API Key": "API გასაღები",
 	"API Key created.": "",
 	"API keys": "",
 	"API RPM": "API RPM",
+	"April": "",
 	"Archive": "",
 	"Archived Chats": "ჩატის ისტორიის არქივი",
 	"are allowed - Activate this command by typing": "დაშვებულია - ბრძანების გასააქტიურებლად აკრიფეთ:",
 	"Are you sure?": "დარწმუნებული ხარ?",
+	"Attach file": "",
 	"Attention to detail": "",
 	"Audio": "ხმოვანი",
+	"August": "",
 	"Auto-playback response": "ავტომატური დაკვრის პასუხი",
 	"Auto-send input after 3 sec.": "შეყვანის ავტომატური გაგზავნა 3 წამის შემდეგ ",
 	"AUTOMATIC1111 Base URL": "AUTOMATIC1111 საბაზისო მისამართი",
@@ -52,8 +58,10 @@
 	"available!": "ხელმისაწვდომია!",
 	"Back": "უკან",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "მოდელის შექმნა",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "გაუქმება",
 	"Categories": "კატეგორიები",
 	"Change Password": "პაროლის შეცვლა",
@@ -68,7 +76,9 @@
 	"Chunk Overlap": "გადახურვა ფრაგმენტულია",
 	"Chunk Params": "გადახურვის პარამეტრები",
 	"Chunk Size": "გადახურვის ზომა",
+	"Citation": "",
 	"Click here for help.": "დახმარებისთვის, დააკლიკე აქ",
+	"Click here to": "",
 	"Click here to check other modelfiles.": "სხვა მოდელური ფაილების სანახავად, დააკლიკე აქ",
 	"Click here to select": "ასარჩევად, დააკლიკე აქ",
 	"Click here to select a csv file.": "",
@@ -96,6 +106,8 @@
 	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "შექმენით მოკლე, 3-5 სიტყვიანი ფრაზა, როგორც სათაური თქვენი შემდეგი შეკითხვისთვის, მკაცრად დაიცავით 3-5 სიტყვის ლიმიტი და მოერიდეთ გამოიყენოთ სიტყვა „სათაური“.",
 	"Create a modelfile": "მოდელური ფაილის შექმნა",
 	"Create Account": "ანგარიშის შექმნა",
+	"Create new key": "",
+	"Create new secret key": "",
 	"Created at": "შექმნილია",
 	"Created At": "",
 	"Current Model": "მიმდინარე მოდელი",
@@ -103,8 +115,10 @@
 	"Custom": "საკუთარი",
 	"Customize Ollama models for a specific purpose": "Ollama მოდელების დამუშავება სპეციფიური დანიშნულებისთვის",
 	"Dark": "მუქი",
+	"Dashboard": "",
 	"Database": "მონაცემთა ბაზა",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
+	"December": "",
 	"Default": "დეფოლტი",
 	"Default (Automatic1111)": "დეფოლტ (Automatic1111)",
 	"Default (SentenceTransformers)": "",
@@ -118,6 +132,7 @@
 	"Delete chat": "შეტყობინების წაშლა",
 	"Delete Chat": "",
 	"Delete Chats": "შეტყობინებების წაშლა",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} წაშლილია",
 	"Deleted {{tagName}}": "",
@@ -137,6 +152,7 @@
 	"Don't have an account?": "არ გაქვს ანგარიში?",
 	"Don't like the style": "",
 	"Download": "",
+	"Download canceled": "",
 	"Download Database": "გადმოწერე მონაცემთა ბაზა",
 	"Drop any files here to add to the conversation": "გადაიტანეთ ფაილები აქ, რათა დაამატოთ ისინი მიმოწერაში",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "მაგალითად, '30წ', '10მ'. მოქმედი დროის ერთეულები: 'წ', 'წთ', 'სთ'.",
@@ -144,6 +160,7 @@
 	"Edit Doc": "დოკუმენტის ედიტირება",
 	"Edit User": "მომხმარებლის ედიტირება",
 	"Email": "ელ-ფოსტა",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "მიმოწერის ისტორიის ჩართვა",
@@ -154,6 +171,7 @@
 	"Enter Chunk Overlap": "შეიყვანეთ ნაწილის გადახურვა",
 	"Enter Chunk Size": "შეიყვანე ბლოკის ზომა",
 	"Enter Image Size (e.g. 512x512)": "შეიყვანეთ სურათის ზომა (მაგ. 512x512)",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "შეიყვანეთ LiteLLM API ბაზის მისამართი (litellm_params.api_base)",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "შეიყვანეთ LiteLLM API გასაღები (litellm_params.api_key)",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "შეიყვანეთ LiteLLM API RPM (litellm_params.rpm)",
@@ -165,6 +183,7 @@
 	"Enter stop sequence": "შეიყვანეთ ტოპ თანმიმდევრობა",
 	"Enter Top K": "შეიყვანეთ Top K",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "შეიყვანეთ მისამართი (მაგალითად http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "შეიყვანეთ თქვენი ელ-ფოსტა",
 	"Enter Your Full Name": "შეიყვანეთ თქვენი სრული სახელი",
 	"Enter Your Password": "შეიყვანეთ თქვენი პაროლი",
@@ -177,6 +196,7 @@
 	"Export Prompts": "მოთხოვნების ექსპორტი",
 	"Failed to create API Key.": "",
 	"Failed to read clipboard contents": "ბუფერში შიგთავსის წაკითხვა ვერ მოხერხდა",
+	"February": "",
 	"Feel free to add specific details": "",
 	"File Mode": "ფაილური რეჟიმი",
 	"File not found.": "ფაილი ვერ მოიძებნა",
@@ -193,6 +213,7 @@
 	"Good Response": "",
 	"has no conversations.": "",
 	"Hello, {{name}}": "გამარჯობა, {{name}}",
+	"Help": "",
 	"Hide": "დამალვა",
 	"Hide Additional Params": "დამატებითი პარამეტრების დამალვა",
 	"How can I help you today?": "როგორ შემიძლია დაგეხმარო დღეს?",
@@ -206,9 +227,14 @@
 	"Import Modelfiles": "მოდელური ფაილების იმპორტი",
 	"Import Prompts": "მოთხოვნების იმპორტი",
 	"Include `--api` flag when running stable-diffusion-webui": "ჩართეთ `--api` დროშა stable-diffusion-webui-ის გაშვებისას",
+	"Input commands": "",
 	"Interface": "ინტერფეისი",
+	"Invalid Tag": "",
+	"January": "",
 	"join our Discord for help.": "შეუერთდით ჩვენს Discord-ს დახმარებისთვის",
 	"JSON": "JSON",
+	"July": "",
+	"June": "",
 	"JWT Expiration": "JWT-ის ვადა",
 	"JWT Token": "JWT ტოკენი",
 	"Keep Alive": "აქტიურად დატოვება",
@@ -223,8 +249,11 @@
 	"Manage LiteLLM Models": "LiteLLM მოდელების მართვა",
 	"Manage Models": "მოდელების მართვა",
 	"Manage Ollama Models": "Ollama მოდელების მართვა",
+	"March": "",
 	"Max Tokens": "მაქსიმალური ტოკენები",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "მაქსიმუმ 3 მოდელის ჩამოტვირთვა შესაძლებელია ერთდროულად. Გთხოვთ სცადოთ მოგვიანებით.",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
 	"Minimum Score": "",
 	"Mirostat": "მიროსტატი",
 	"Mirostat Eta": "მიროსტატი ეტა",
@@ -255,11 +284,15 @@
 	"Name your modelfile": "თქვენი მოდელური ფაილის სახელი",
 	"New Chat": "ახალი მიმოწერა",
 	"New Password": "ახალი პაროლი",
+	"No results found": "",
+	"No source available": "",
 	"Not factually correct": "",
 	"Not sure what to add?": "არ იცი რა დაამატო?",
 	"Not sure what to write? Switch to": "არ იცი რა დაწერო? გადართვა:",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
 	"Notifications": "შეტყობინება",
+	"November": "",
+	"October": "",
 	"Off": "გამორთვა",
 	"Okay, Let's Go!": "კარგი, წავედით!",
 	"OLED Dark": "",
@@ -283,6 +316,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "ან",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "პარამეტრები",
 	"Password": "პაროლი",
 	"PDF document (.pdf)": "",
@@ -292,11 +326,15 @@
 	"Plain text (.txt)": "",
 	"Playground": "სათამაშო მოედანი",
 	"Positive attitude": "",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
 	"Profile Image": "",
+	"Prompt": "",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
 	"Prompt Content": "მოთხოვნის შინაარსი",
 	"Prompt suggestions": "მოთხოვნის რჩევები",
 	"Prompts": "მოთხოვნები",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Ollama.com იდან მოდელის გადაწერა ",
 	"Pull Progress": "პროგრესის გადაწერა",
 	"Query Params": "პარამეტრების ძიება",
@@ -309,9 +347,12 @@
 	"Regenerate": "",
 	"Release Notes": "Გამოშვების შენიშვნები",
 	"Remove": "",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "გაიმეორეთ ბოლო N",
 	"Repeat Penalty": "გაიმეორეთ პენალტი",
 	"Request Mode": "მოთხოვნის რეჟიმი",
+	"Reranking Model": "",
 	"Reranking model disabled": "",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "ვექტორული მეხსიერების გადატვირთვა",
@@ -337,12 +378,17 @@
 	"Select a mode": "რეჟიმის არჩევა",
 	"Select a model": "მოდელის არჩევა",
 	"Select an Ollama instance": "",
+	"Select model": "",
 	"Send a Message": "შეტყობინების გაგზავნა",
 	"Send message": "შეტყობინების გაგზავნა",
+	"September": "",
 	"Server connection verified": "სერვერთან კავშირი დადასტურებულია",
 	"Set as default": "დეფოლტად დაყენება",
 	"Set Default Model": "დეფოლტ მოდელის დაყენება",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "სურათის ზომის დაყენება",
+	"Set Model": "მოდელის დაყენება",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "ნაბიჯების დაყენება",
 	"Set Title Auto-Generation Model": "სათაურის ავტომატური გენერაციის მოდელის დაყენება",
 	"Set Voice": "ხმის დაყენება",
@@ -361,6 +407,7 @@
 	"Sign Out": "გასვლა",
 	"Sign up": "რეგისტრაცია",
 	"Signing in": "",
+	"Source": "",
 	"Speech recognition error: {{error}}": "მეტყველების ამოცნობის შეცდომა: {{error}}",
 	"Speech-to-Text Engine": "ხმოვან-ტექსტური ძრავი",
 	"SpeechRecognition API is not supported in this browser.": "მეტყველების ამოცნობის API არ არის მხარდაჭერილი ამ ბრაუზერში.",
@@ -370,6 +417,7 @@
 	"Subtitle (e.g. about the Roman Empire)": "",
 	"Success": "წარმატება",
 	"Successfully updated.": "წარმატებით განახლდა",
+	"Suggested": "",
 	"Sync All": "სინქრონიზაცია",
 	"System": "სისტემა",
 	"System Prompt": "სისტემური მოთხოვნა",
@@ -390,11 +438,13 @@
 	"Title": "სათაური",
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "სათაურის ავტო-გენერაცია",
+	"Title cannot be an empty string.": "",
 	"Title Generation Prompt": "სათაურის გენერაციის მოთხოვნა ",
 	"to": "ში",
 	"To access the available model names for downloading,": "ჩამოტვირთვისთვის ხელმისაწვდომი მოდელების სახელებზე წვდომისთვის",
 	"To access the GGUF models available for downloading,": "ჩასატვირთად ხელმისაწვდომი GGUF მოდელებზე წვდომისთვის",
 	"to chat input.": "ჩატში",
+	"Today": "",
 	"Toggle settings": "პარამეტრების გადართვა",
 	"Toggle sidebar": "გვერდითი ზოლის გადართვა",
 	"Top K": "ტოპ K",
@@ -405,11 +455,7 @@
 	"Uh-oh! There was an issue connecting to {{provider}}.": "{{provider}}-თან დაკავშირების პრობლემა წარმოიშვა.",
 	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "უცნობი ფაილის ტიპი „{{file_type}}“, მაგრამ მიიღება და განიხილება როგორც მარტივი ტექსტი",
 	"Update and Copy Link": "",
-	"Update Embedding Model": "",
-	"Update embedding model (e.g. {{model}})": "",
 	"Update password": "პაროლის განახლება",
-	"Update Reranking Model": "",
-	"Update reranking model (e.g. {{model}})": "",
 	"Upload a GGUF model": "GGUF მოდელის ატვირთვა",
 	"Upload files": "ფაილების ატვირთვა",
 	"Upload Progress": "პროგრესის ატვირთვა",
@@ -427,6 +473,8 @@
 	"Version": "ვერსია",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "ვები",
+	"Web Loader Settings": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "WebUI დანამატები",
 	"WebUI Settings": "WebUI პარამეტრები",
@@ -436,8 +484,12 @@
 	"Whisper (Local)": "ჩურჩული (ადგილობრივი)",
 	"Write a prompt suggestion (e.g. Who are you?)": "დაწერეთ მოკლე წინადადება (მაგ. ვინ ხარ?",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "დაწერეთ რეზიუმე 50 სიტყვით, რომელიც აჯამებს [თემას ან საკვანძო სიტყვას].",
+	"Yesterday": "",
 	"You": "თქვენ",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "თქვენ სასარგებლო ასისტენტი ხართ.",
 	"You're now logged in.": "თქვენ შესული ხართ.",
-	"Youtube": ""
+	"Youtube": "",
+	"Youtube Loader Settings": ""
 }

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

@@ -15,6 +15,7 @@
 	"Add a short description about what this modelfile does": "이 모델파일이 하는 일에 대한 간단한 설명 추가",
 	"Add a short title for this prompt": "이 프롬프트에 대한 간단한 제목 추가",
 	"Add a tag": "태그 추가",
+	"Add custom prompt": "",
 	"Add Docs": "문서 추가",
 	"Add Files": "파일 추가",
 	"Add message": "메시지 추가",
@@ -27,6 +28,7 @@
 	"Admin Settings": "관리자 설정",
 	"Advanced Parameters": "고급 매개변수",
 	"all": "모두",
+	"All Documents": "",
 	"All Users": "모든 사용자",
 	"Allow": "허용",
 	"Allow Chat Deletion": "채팅 삭제 허용",
@@ -34,17 +36,21 @@
 	"Already have an account?": "이미 계정이 있으신가요?",
 	"an assistant": "어시스턴트",
 	"and": "그리고",
+	"and create a new shared link.": "",
 	"API Base URL": "API 기본 URL",
 	"API Key": "API키",
 	"API Key created.": "",
 	"API keys": "",
 	"API RPM": "API RPM",
+	"April": "",
 	"Archive": "",
 	"Archived Chats": "채팅 기록 아카이브",
 	"are allowed - Activate this command by typing": "허용됩니다 - 이 명령을 활성화하려면 입력하세요.",
 	"Are you sure?": "확실합니까?",
+	"Attach file": "",
 	"Attention to detail": "",
 	"Audio": "오디오",
+	"August": "",
 	"Auto-playback response": "응답 자동 재생",
 	"Auto-send input after 3 sec.": "3초 후 입력 자동 전송",
 	"AUTOMATIC1111 Base URL": "AUTOMATIC1111 Base URL",
@@ -52,8 +58,10 @@
 	"available!": "사용 가능!",
 	"Back": "뒤로가기",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "빌더 모드",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "취소",
 	"Categories": "분류",
 	"Change Password": "비밀번호 변경",
@@ -68,7 +76,9 @@
 	"Chunk Overlap": "Chunk Overlap",
 	"Chunk Params": "Chunk Params",
 	"Chunk Size": "Chunk Size",
+	"Citation": "",
 	"Click here for help.": "도움말을 보려면 여기를 클릭하세요.",
+	"Click here to": "",
 	"Click here to check other modelfiles.": "다른 모델파일을 확인하려면 여기를 클릭하세요.",
 	"Click here to select": "선택하려면 여기를 클릭하세요.",
 	"Click here to select a csv file.": "",
@@ -96,6 +106,8 @@
 	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "다음 질문에 대한 제목으로 간결한 3-5 단어 문구를 만드되 3-5 단어 제한을 엄격히 준수하고 'title' 단어 사용을 피하세요:",
 	"Create a modelfile": "모델파일 만들기",
 	"Create Account": "계정 만들기",
+	"Create new key": "",
+	"Create new secret key": "",
 	"Created at": "생성일",
 	"Created At": "",
 	"Current Model": "현재 모델",
@@ -103,8 +115,10 @@
 	"Custom": "사용자 정의",
 	"Customize Ollama models for a specific purpose": "특정 목적으로 Ollama 모델 사용자 정의",
 	"Dark": "어두운",
+	"Dashboard": "",
 	"Database": "데이터베이스",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
+	"December": "",
 	"Default": "기본값",
 	"Default (Automatic1111)": "기본값 (Automatic1111)",
 	"Default (SentenceTransformers)": "",
@@ -118,6 +132,7 @@
 	"Delete chat": "채팅 삭제",
 	"Delete Chat": "",
 	"Delete Chats": "채팅들 삭제",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} 삭제됨",
 	"Deleted {{tagName}}": "",
@@ -137,6 +152,7 @@
 	"Don't have an account?": "계정이 없으신가요?",
 	"Don't like the style": "",
 	"Download": "",
+	"Download canceled": "",
 	"Download Database": "데이터베이스 다운로드",
 	"Drop any files here to add to the conversation": "대화에 추가할 파일을 여기에 드롭하세요.",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "예: '30s','10m'. 유효한 시간 단위는 's', 'm', 'h'입니다.",
@@ -144,6 +160,7 @@
 	"Edit Doc": "문서 편집",
 	"Edit User": "사용자 편집",
 	"Email": "이메일",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "채팅 기록 활성화",
@@ -154,6 +171,7 @@
 	"Enter Chunk Overlap": "청크 오버랩 입력",
 	"Enter Chunk Size": "청크 크기 입력",
 	"Enter Image Size (e.g. 512x512)": "이미지 크기 입력(예: 512x512)",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "LiteLLM API 기본 URL 입력(litellm_params.api_base)",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "LiteLLM API 키 입력(litellm_params.api_key)",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "LiteLLM API RPM 입력(litellm_params.rpm)",
@@ -165,6 +183,7 @@
 	"Enter stop sequence": "중지 시퀀스 입력",
 	"Enter Top K": "Top K 입력",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "URL 입력(예: http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "이메일 입력",
 	"Enter Your Full Name": "전체 이름 입력",
 	"Enter Your Password": "비밀번호 입력",
@@ -177,6 +196,7 @@
 	"Export Prompts": "프롬프트 내보내기",
 	"Failed to create API Key.": "",
 	"Failed to read clipboard contents": "클립보드 내용을 읽는 데 실패했습니다.",
+	"February": "",
 	"Feel free to add specific details": "",
 	"File Mode": "파일 모드",
 	"File not found.": "파일을 찾을 수 없습니다.",
@@ -193,6 +213,7 @@
 	"Good Response": "",
 	"has no conversations.": "",
 	"Hello, {{name}}": "안녕하세요, {{name}}",
+	"Help": "",
 	"Hide": "숨기기",
 	"Hide Additional Params": "추가 매개변수 숨기기",
 	"How can I help you today?": "오늘 어떻게 도와드릴까요?",
@@ -206,9 +227,14 @@
 	"Import Modelfiles": "모델파일 가져오기",
 	"Import Prompts": "프롬프트 가져오기",
 	"Include `--api` flag when running stable-diffusion-webui": "",
+	"Input commands": "",
 	"Interface": "인터페이스",
+	"Invalid Tag": "",
+	"January": "",
 	"join our Discord for help.": "도움말을 보려면 Discord에 가입하세요.",
 	"JSON": "JSON",
+	"July": "",
+	"June": "",
 	"JWT Expiration": "JWT 만료",
 	"JWT Token": "JWT 토큰",
 	"Keep Alive": "계속 유지하기",
@@ -223,8 +249,11 @@
 	"Manage LiteLLM Models": "LiteLLM 모델 관리",
 	"Manage Models": "모델 관리",
 	"Manage Ollama Models": "Ollama 모델 관리",
+	"March": "",
 	"Max Tokens": "최대 토큰 수",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "최대 3개의 모델을 동시에 다운로드할 수 있습니다. 나중에 다시 시도하세요.",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
 	"Minimum Score": "",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
@@ -255,11 +284,15 @@
 	"Name your modelfile": "모델파일 이름 지정",
 	"New Chat": "새 채팅",
 	"New Password": "새 비밀번호",
+	"No results found": "",
+	"No source available": "",
 	"Not factually correct": "",
 	"Not sure what to add?": "추가할 것이 궁금하세요?",
 	"Not sure what to write? Switch to": "무엇을 쓸지 모르겠나요? 전환하세요.",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
 	"Notifications": "알림",
+	"November": "",
+	"October": "",
 	"Off": "끄기",
 	"Okay, Let's Go!": "그렇습니다, 시작합시다!",
 	"OLED Dark": "",
@@ -283,6 +316,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "또는",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "매개변수",
 	"Password": "비밀번호",
 	"PDF document (.pdf)": "",
@@ -292,11 +326,15 @@
 	"Plain text (.txt)": "",
 	"Playground": "놀이터",
 	"Positive attitude": "",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
 	"Profile Image": "",
+	"Prompt": "",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
 	"Prompt Content": "프롬프트 내용",
 	"Prompt suggestions": "프롬프트 제안",
 	"Prompts": "프롬프트",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Ollama.com에서 모델 가져오기",
 	"Pull Progress": "가져오기 진행 상황",
 	"Query Params": "쿼리 매개변수",
@@ -309,9 +347,12 @@
 	"Regenerate": "",
 	"Release Notes": "릴리스 노트",
 	"Remove": "",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "마지막 N 반복",
 	"Repeat Penalty": "반복 패널티",
 	"Request Mode": "요청 모드",
+	"Reranking Model": "",
 	"Reranking model disabled": "",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "벡터 스토리지 초기화",
@@ -337,12 +378,17 @@
 	"Select a mode": "모드 선택",
 	"Select a model": "모델 선택",
 	"Select an Ollama instance": "Ollama 인스턴스 선택",
+	"Select model": "",
 	"Send a Message": "메시지 보내기",
 	"Send message": "메시지 보내기",
+	"September": "",
 	"Server connection verified": "서버 연결 확인됨",
 	"Set as default": "기본값으로 설정",
 	"Set Default Model": "기본 모델 설정",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "이미지 크기 설정",
+	"Set Model": "모델 설정",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "단계 설정",
 	"Set Title Auto-Generation Model": "제목 자동 생성 모델 설정",
 	"Set Voice": "음성 설정",
@@ -361,6 +407,7 @@
 	"Sign Out": "로그아웃",
 	"Sign up": "가입",
 	"Signing in": "",
+	"Source": "",
 	"Speech recognition error: {{error}}": "음성 인식 오류: {{error}}",
 	"Speech-to-Text Engine": "음성-텍스트 엔진",
 	"SpeechRecognition API is not supported in this browser.": "이 브라우저에서는 SpeechRecognition API를 지원하지 않습니다.",
@@ -370,6 +417,7 @@
 	"Subtitle (e.g. about the Roman Empire)": "",
 	"Success": "성공",
 	"Successfully updated.": "성공적으로 업데이트되었습니다.",
+	"Suggested": "",
 	"Sync All": "모두 동기화",
 	"System": "시스템",
 	"System Prompt": "시스템 프롬프트",
@@ -390,11 +438,13 @@
 	"Title": "제목",
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "제목 자동 생성",
+	"Title cannot be an empty string.": "",
 	"Title Generation Prompt": "제목 생성 프롬프트",
 	"to": "~까지",
 	"To access the available model names for downloading,": "다운로드 가능한 모델명을 확인하려면,",
 	"To access the GGUF models available for downloading,": "다운로드 가능한 GGUF 모델을 확인하려면,",
 	"to chat input.": "채팅 입력으로.",
+	"Today": "",
 	"Toggle settings": "설정 전환",
 	"Toggle sidebar": "사이드바 전환",
 	"Top K": "Top K",
@@ -405,11 +455,7 @@
 	"Uh-oh! There was an issue connecting to {{provider}}.": "앗! {{provider}}에 연결하는 데 문제가 있었습니다.",
 	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "알 수 없는 파일 유형 '{{file_type}}', 하지만 일반 텍스트로 허용하고 처리합니다.",
 	"Update and Copy Link": "",
-	"Update Embedding Model": "",
-	"Update embedding model (e.g. {{model}})": "",
 	"Update password": "비밀번호 업데이트",
-	"Update Reranking Model": "",
-	"Update reranking model (e.g. {{model}})": "",
 	"Upload a GGUF model": "GGUF 모델 업로드",
 	"Upload files": "파일 업로드",
 	"Upload Progress": "업로드 진행 상황",
@@ -427,6 +473,8 @@
 	"Version": "버전",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "웹",
+	"Web Loader Settings": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "WebUI 애드온",
 	"WebUI Settings": "WebUI 설정",
@@ -436,8 +484,12 @@
 	"Whisper (Local)": "위스퍼 (Local)",
 	"Write a prompt suggestion (e.g. Who are you?)": "프롬프트 제안 작성 (예: 당신은 누구인가요?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "[주제 또는 키워드]에 대한 50단어 요약문 작성.",
+	"Yesterday": "",
 	"You": "당신",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "당신은 유용한 어시스턴트입니다.",
 	"You're now logged in.": "로그인되었습니다.",
-	"Youtube": ""
+	"Youtube": "",
+	"Youtube Loader Settings": ""
 }

+ 17 - 5
src/lib/i18n/locales/languages.json

@@ -3,13 +3,21 @@
 		"code": "en-US",
 		"title": "English (US)"
 	},
+	{
+		"code": "en-GB",
+		"title": "English (GB)"
+	},
+	{
+		"code": "ar-BH",
+		"title": "العربية (AR)"
+	},
 	{
 		"code": "bg-BG",
 		"title": "Bulgarian (BG)"
 	},
 	{
 		"code": "bn-BD",
-		"title": "Banlga (বাংলা)"
+		"title": "Bangla (বাংলা)"
 	},
 	{
 		"code": "ca-ES",
@@ -19,10 +27,6 @@
 		"code": "de-DE",
 		"title": "Deutsch"
 	},
-	{
-		"code": "en-GB",
-		"title": "English (GB)"
-	},
 	{
 		"code": "es-ES",
 		"title": "Spanish"
@@ -31,6 +35,10 @@
 		"code": "fa-IR",
 		"title": "فارسی (Farsi)"
 	},
+	{
+		"code": "fi-FI",
+		"title": "Finnish"
+	},
 	{
 		"code": "fr-CA",
 		"title": "French (Canada)"
@@ -39,6 +47,10 @@
 		"code": "fr-FR",
 		"title": "French (France)"
 	},
+	{
+		"code": "hi-IN",
+		"title": "Hindi (हिंदी)"
+	},
 	{
 		"code": "it-IT",
 		"title": "Italian"

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

@@ -15,6 +15,7 @@
 	"Add a short description about what this modelfile does": "Voeg een korte beschrijving toe over wat dit modelfile doet",
 	"Add a short title for this prompt": "Voeg een korte titel toe voor deze prompt",
 	"Add a tag": "Voeg een tag toe",
+	"Add custom prompt": "",
 	"Add Docs": "Voeg Docs toe",
 	"Add Files": "Voege Bestanden toe",
 	"Add message": "Voeg bericht toe",
@@ -27,6 +28,7 @@
 	"Admin Settings": "Administratieve Settings",
 	"Advanced Parameters": "Geavanceerde Parameters",
 	"all": "alle",
+	"All Documents": "",
 	"All Users": "Alle Gebruikers",
 	"Allow": "Toestaan",
 	"Allow Chat Deletion": "Sta Chat Verwijdering toe",
@@ -34,17 +36,21 @@
 	"Already have an account?": "Heb je al een account?",
 	"an assistant": "een assistent",
 	"and": "en",
+	"and create a new shared link.": "",
 	"API Base URL": "API Base URL",
 	"API Key": "API Key",
 	"API Key created.": "",
 	"API keys": "",
 	"API RPM": "API RPM",
+	"April": "",
 	"Archive": "",
 	"Archived Chats": "chatrecord",
 	"are allowed - Activate this command by typing": "zijn toegestaan - Activeer deze commando door te typen",
 	"Are you sure?": "Zeker weten?",
+	"Attach file": "",
 	"Attention to detail": "",
 	"Audio": "Audio",
+	"August": "",
 	"Auto-playback response": "Automatisch afspelen van antwoord",
 	"Auto-send input after 3 sec.": "Automatisch verzenden van input na 3 sec.",
 	"AUTOMATIC1111 Base URL": "AUTOMATIC1111 Base URL",
@@ -52,8 +58,10 @@
 	"available!": "beschikbaar!",
 	"Back": "Terug",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "Bouwer Modus",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "Annuleren",
 	"Categories": "Categorieën",
 	"Change Password": "Wijzig Wachtwoord",
@@ -68,7 +76,9 @@
 	"Chunk Overlap": "Chunk Overlap",
 	"Chunk Params": "Chunk Params",
 	"Chunk Size": "Chunk Grootte",
+	"Citation": "",
 	"Click here for help.": "Klik hier voor help.",
+	"Click here to": "",
 	"Click here to check other modelfiles.": "Klik hier om andere modelfiles te controleren.",
 	"Click here to select": "Klik hier om te selecteren",
 	"Click here to select a csv file.": "",
@@ -96,6 +106,8 @@
 	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Maak een beknopte, 3-5 woorden tellende zin als kop voor de volgende query, strikt aanhoudend aan de 3-5 woorden limiet en het vermijden van het gebruik van het woord 'titel':",
 	"Create a modelfile": "Maak een modelfile",
 	"Create Account": "Maak Account",
+	"Create new key": "",
+	"Create new secret key": "",
 	"Created at": "Gemaakt op",
 	"Created At": "",
 	"Current Model": "Huidig Model",
@@ -103,8 +115,10 @@
 	"Custom": "Aangepast",
 	"Customize Ollama models for a specific purpose": "Pas Ollama modellen aan voor een specifiek doel",
 	"Dark": "Donker",
+	"Dashboard": "",
 	"Database": "Database",
 	"DD/MM/YYYY HH:mm": "YYYY/MM/DD HH:mm",
+	"December": "",
 	"Default": "Standaard",
 	"Default (Automatic1111)": "Standaard (Automatic1111)",
 	"Default (SentenceTransformers)": "",
@@ -118,6 +132,7 @@
 	"Delete chat": "Verwijder chat",
 	"Delete Chat": "",
 	"Delete Chats": "Verwijder Chats",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} is verwijderd",
 	"Deleted {{tagName}}": "",
@@ -137,6 +152,7 @@
 	"Don't have an account?": "Heb je geen account?",
 	"Don't like the style": "",
 	"Download": "",
+	"Download canceled": "",
 	"Download Database": "Download Database",
 	"Drop any files here to add to the conversation": "Sleep bestanden hier om toe te voegen aan het gesprek",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "bijv. '30s', '10m'. Geldige tijdseenheden zijn 's', 'm', 'h'.",
@@ -144,6 +160,7 @@
 	"Edit Doc": "Wijzig Doc",
 	"Edit User": "Wijzig Gebruiker",
 	"Email": "Email",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "Schakel Chat Geschiedenis in",
@@ -154,6 +171,7 @@
 	"Enter Chunk Overlap": "Voeg Chunk Overlap toe",
 	"Enter Chunk Size": "Voeg Chunk Size toe",
 	"Enter Image Size (e.g. 512x512)": "Voeg afbeelding formaat toe (Bijv. 512x512)",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "Voeg LiteLLM API Base URL toe (litellm_params.api_base)",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "Voeg LiteLLM API Sleutel toe (litellm_params.api_key)",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Voeg LiteLLM API RPM toe (litellm_params.rpm)",
@@ -165,6 +183,7 @@
 	"Enter stop sequence": "Zet stop sequentie",
 	"Enter Top K": "Voeg Top K toe",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "Zet URL (Bijv. http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "Voer je Email in",
 	"Enter Your Full Name": "Voer je Volledige Naam in",
 	"Enter Your Password": "Voer je Wachtwoord in",
@@ -177,6 +196,7 @@
 	"Export Prompts": "Exporteer Prompts",
 	"Failed to create API Key.": "",
 	"Failed to read clipboard contents": "Kan klembord inhoud niet lezen",
+	"February": "",
 	"Feel free to add specific details": "",
 	"File Mode": "Bestandsmodus",
 	"File not found.": "Bestand niet gevonden.",
@@ -193,6 +213,7 @@
 	"Good Response": "",
 	"has no conversations.": "",
 	"Hello, {{name}}": "Hallo, {{name}}",
+	"Help": "",
 	"Hide": "Verberg",
 	"Hide Additional Params": "Verberg Extra Params",
 	"How can I help you today?": "Hoe kan ik je vandaag helpen?",
@@ -206,9 +227,14 @@
 	"Import Modelfiles": "Importeer Modelfiles",
 	"Import Prompts": "Importeer Prompts",
 	"Include `--api` flag when running stable-diffusion-webui": "Voeg `--api` vlag toe bij het uitvoeren van stable-diffusion-webui",
+	"Input commands": "",
 	"Interface": "Interface",
+	"Invalid Tag": "",
+	"January": "",
 	"join our Discord for help.": "join onze Discord voor hulp.",
 	"JSON": "JSON",
+	"July": "",
+	"June": "",
 	"JWT Expiration": "JWT Expiration",
 	"JWT Token": "JWT Token",
 	"Keep Alive": "Houd Actief",
@@ -223,8 +249,11 @@
 	"Manage LiteLLM Models": "Beheer LiteLLM Modellen",
 	"Manage Models": "Beheer Modellen",
 	"Manage Ollama Models": "Beheer Ollama Modellen",
+	"March": "",
 	"Max Tokens": "Max Tokens",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maximaal 3 modellen kunnen tegelijkertijd worden gedownload. Probeer het later opnieuw.",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
 	"Minimum Score": "",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
@@ -255,11 +284,15 @@
 	"Name your modelfile": "Benoem je modelfile",
 	"New Chat": "Nieuwe Chat",
 	"New Password": "Nieuw Wachtwoord",
+	"No results found": "",
+	"No source available": "",
 	"Not factually correct": "",
 	"Not sure what to add?": "Niet zeker wat toe te voegen?",
 	"Not sure what to write? Switch to": "Niet zeker wat te schrijven? Schakel over naar",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
 	"Notifications": "Desktop Notificaties",
+	"November": "",
+	"October": "",
 	"Off": "Uit",
 	"Okay, Let's Go!": "Okay, Laten we gaan!",
 	"OLED Dark": "",
@@ -283,6 +316,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "of",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Parameters",
 	"Password": "Wachtwoord",
 	"PDF document (.pdf)": "",
@@ -292,11 +326,15 @@
 	"Plain text (.txt)": "",
 	"Playground": "Speeltuin",
 	"Positive attitude": "",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
 	"Profile Image": "",
+	"Prompt": "",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
 	"Prompt Content": "Prompt Inhoud",
 	"Prompt suggestions": "Prompt suggesties",
 	"Prompts": "Prompts",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Haal een model van Ollama.com",
 	"Pull Progress": "Haal Voortgang op",
 	"Query Params": "Query Params",
@@ -309,9 +347,12 @@
 	"Regenerate": "",
 	"Release Notes": "Release Notes",
 	"Remove": "",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "Herhaal Laatste N",
 	"Repeat Penalty": "Herhaal Straf",
 	"Request Mode": "Request Modus",
+	"Reranking Model": "",
 	"Reranking model disabled": "",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "Reset Vector Opslag",
@@ -337,12 +378,17 @@
 	"Select a mode": "Selecteer een modus",
 	"Select a model": "Selecteer een model",
 	"Select an Ollama instance": "Selecteer een Ollama instantie",
+	"Select model": "",
 	"Send a Message": "Stuur een Bericht",
 	"Send message": "Stuur bericht",
+	"September": "",
 	"Server connection verified": "Server verbinding geverifieerd",
 	"Set as default": "Stel in als standaard",
 	"Set Default Model": "Stel Standaard Model in",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "Stel Afbeelding Grootte in",
+	"Set Model": "Stel die model op",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "Stel Stappen in",
 	"Set Title Auto-Generation Model": "Stel Titel Auto-Generatie Model in",
 	"Set Voice": "Stel Stem in",
@@ -361,6 +407,7 @@
 	"Sign Out": "Uitloggen",
 	"Sign up": "Registreren",
 	"Signing in": "",
+	"Source": "",
 	"Speech recognition error: {{error}}": "Spraakherkenning fout: {{error}}",
 	"Speech-to-Text Engine": "Spraak-naar-tekst Engine",
 	"SpeechRecognition API is not supported in this browser.": "SpeechRecognition API wordt niet ondersteund in deze browser.",
@@ -370,6 +417,7 @@
 	"Subtitle (e.g. about the Roman Empire)": "",
 	"Success": "Succes",
 	"Successfully updated.": "Succesvol bijgewerkt.",
+	"Suggested": "",
 	"Sync All": "Synchroniseer Alles",
 	"System": "Systeem",
 	"System Prompt": "Systeem Prompt",
@@ -390,11 +438,13 @@
 	"Title": "Titel",
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "Titel Auto-Generatie",
+	"Title cannot be an empty string.": "",
 	"Title Generation Prompt": "Titel Generatie Prompt",
 	"to": "naar",
 	"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 chat input.": "naar chat input.",
+	"Today": "",
 	"Toggle settings": "Wissel instellingen",
 	"Toggle sidebar": "Wissel sidebar",
 	"Top K": "Top K",
@@ -405,11 +455,7 @@
 	"Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh! Er was een probleem met verbinden met {{provider}}.",
 	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Onbekend Bestandstype '{{file_type}}', maar accepteren en behandelen als platte tekst",
 	"Update and Copy Link": "",
-	"Update Embedding Model": "",
-	"Update embedding model (e.g. {{model}})": "",
 	"Update password": "Wijzig wachtwoord",
-	"Update Reranking Model": "",
-	"Update reranking model (e.g. {{model}})": "",
 	"Upload a GGUF model": "Upload een GGUF model",
 	"Upload files": "Upload bestanden",
 	"Upload Progress": "Upload Voortgang",
@@ -427,6 +473,8 @@
 	"Version": "Versie",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Web",
+	"Web Loader Settings": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "WebUI Add-ons",
 	"WebUI Settings": "WebUI Instellingen",
@@ -436,8 +484,12 @@
 	"Whisper (Local)": "Fluister (Lokaal)",
 	"Write a prompt suggestion (e.g. Who are you?)": "Schrijf een prompt suggestie (bijv. Wie ben je?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Schrijf een samenvatting in 50 woorden die [onderwerp of trefwoord] samenvat.",
+	"Yesterday": "",
 	"You": "Jij",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "Jij bent een behulpzame assistent.",
 	"You're now logged in.": "Je bent nu ingelogd.",
-	"Youtube": ""
+	"Youtube": "",
+	"Youtube Loader Settings": ""
 }

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

@@ -15,6 +15,7 @@
 	"Add a short description about what this modelfile does": "Dodaj krótki opis tego, co robi ten plik modelu",
 	"Add a short title for this prompt": "Dodaj krótki tytuł tego polecenia",
 	"Add a tag": "Dodaj tag",
+	"Add custom prompt": "",
 	"Add Docs": "Dodaj dokumenty",
 	"Add Files": "Dodaj pliki",
 	"Add message": "Dodaj wiadomość",
@@ -27,6 +28,7 @@
 	"Admin Settings": "Ustawienia administratora",
 	"Advanced Parameters": "Zaawansowane parametry",
 	"all": "wszyscy",
+	"All Documents": "",
 	"All Users": "Wszyscy użytkownicy",
 	"Allow": "Pozwól",
 	"Allow Chat Deletion": "Pozwól na usuwanie czatu",
@@ -34,17 +36,21 @@
 	"Already have an account?": "Masz już konto?",
 	"an assistant": "asystent",
 	"and": "i",
+	"and create a new shared link.": "",
 	"API Base URL": "Podstawowy adres URL interfejsu API",
 	"API Key": "Klucz API",
 	"API Key created.": "",
 	"API keys": "",
 	"API RPM": "Pakiet API RPM",
+	"April": "",
 	"Archive": "",
 	"Archived Chats": "",
 	"are allowed - Activate this command by typing": "są dozwolone - Aktywuj to polecenie, wpisując",
 	"Are you sure?": "Jesteś pewien?",
+	"Attach file": "",
 	"Attention to detail": "",
 	"Audio": "Dźwięk",
+	"August": "",
 	"Auto-playback response": "Odtwarzanie automatyczne odpowiedzi",
 	"Auto-send input after 3 sec.": "Wysyłanie automatyczne po 3 sek.",
 	"AUTOMATIC1111 Base URL": "Podstawowy adres URL AUTOMATIC1111",
@@ -52,8 +58,10 @@
 	"available!": "dostępny!",
 	"Back": "Wstecz",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "Tryb budowniczego",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "Anuluj",
 	"Categories": "Kategorie",
 	"Change Password": "Zmień hasło",
@@ -68,7 +76,9 @@
 	"Chunk Overlap": "Zachodzenie bloku",
 	"Chunk Params": "Parametry bloku",
 	"Chunk Size": "Rozmiar bloku",
+	"Citation": "",
 	"Click here for help.": "Kliknij tutaj, aby uzyskać pomoc.",
+	"Click here to": "",
 	"Click here to check other modelfiles.": "Kliknij tutaj, aby sprawdzić inne pliki modelowe.",
 	"Click here to select": "Kliknij tutaj, aby wybrać",
 	"Click here to select a csv file.": "",
@@ -96,6 +106,8 @@
 	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Utwórz zwięzłą frazę składającą się z 3-5 słów jako nagłówek dla następującego zapytania, ściśle przestrzegając limitu od 3 do 5 słów i unikając użycia słowa 'tytuł':",
 	"Create a modelfile": "Utwórz plik modelu",
 	"Create Account": "Utwórz konto",
+	"Create new key": "",
+	"Create new secret key": "",
 	"Created at": "Utworzono o",
 	"Created At": "",
 	"Current Model": "Bieżący model",
@@ -103,8 +115,10 @@
 	"Custom": "Niestandardowy",
 	"Customize Ollama models for a specific purpose": "Dostosuj modele Ollama do określonego celu",
 	"Dark": "Ciemny",
+	"Dashboard": "",
 	"Database": "Baza danych",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
+	"December": "",
 	"Default": "Domyślny",
 	"Default (Automatic1111)": "Domyślny (Automatic1111)",
 	"Default (SentenceTransformers)": "",
@@ -118,6 +132,7 @@
 	"Delete chat": "Usuń czat",
 	"Delete Chat": "",
 	"Delete Chats": "Usuń czaty",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "Usunięto {{deleteModelTag}}",
 	"Deleted {{tagName}}": "",
@@ -137,6 +152,7 @@
 	"Don't have an account?": "Nie masz konta?",
 	"Don't like the style": "",
 	"Download": "",
+	"Download canceled": "",
 	"Download Database": "Pobierz bazę danych",
 	"Drop any files here to add to the conversation": "Upuść pliki tutaj, aby dodać do rozmowy",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "np. '30s', '10m'. Poprawne jednostki czasu to 's', 'm', 'h'.",
@@ -144,6 +160,7 @@
 	"Edit Doc": "Edytuj dokument",
 	"Edit User": "Edytuj użytkownika",
 	"Email": "Email",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "Włącz historię czatu",
@@ -154,6 +171,7 @@
 	"Enter Chunk Overlap": "Wprowadź zakchodzenie bloku",
 	"Enter Chunk Size": "Wprowadź rozmiar bloku",
 	"Enter Image Size (e.g. 512x512)": "Wprowadź rozmiar obrazu (np. 512x512)",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "Wprowadź bazowy adres URL LiteLLM API (litellm_params.api_base)",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "Wprowadź klucz API LiteLLM (litellm_params.api_key)",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Wprowadź API LiteLLM RPM(litellm_params.rpm)",
@@ -165,6 +183,7 @@
 	"Enter stop sequence": "Wprowadź sekwencję zatrzymania",
 	"Enter Top K": "Wprowadź Top K",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "Wprowadź adres URL (np. http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "Wprowadź swój adres email",
 	"Enter Your Full Name": "Wprowadź swoje imię i nazwisko",
 	"Enter Your Password": "Wprowadź swoje hasło",
@@ -177,6 +196,7 @@
 	"Export Prompts": "Eksportuj prompty",
 	"Failed to create API Key.": "",
 	"Failed to read clipboard contents": "Nie udało się odczytać zawartości schowka",
+	"February": "",
 	"Feel free to add specific details": "",
 	"File Mode": "Tryb pliku",
 	"File not found.": "Plik nie został znaleziony.",
@@ -193,6 +213,7 @@
 	"Good Response": "",
 	"has no conversations.": "",
 	"Hello, {{name}}": "Witaj, {{name}}",
+	"Help": "",
 	"Hide": "Ukryj",
 	"Hide Additional Params": "Ukryj dodatkowe parametry",
 	"How can I help you today?": "Jak mogę Ci dzisiaj pomóc?",
@@ -206,9 +227,14 @@
 	"Import Modelfiles": "Importuj pliki modeli",
 	"Import Prompts": "Importuj prompty",
 	"Include `--api` flag when running stable-diffusion-webui": "Dołącz flagę `--api` podczas uruchamiania stable-diffusion-webui",
+	"Input commands": "",
 	"Interface": "Interfejs",
+	"Invalid Tag": "",
+	"January": "",
 	"join our Discord for help.": "Dołącz do naszego Discorda po pomoc.",
 	"JSON": "JSON",
+	"July": "",
+	"June": "",
 	"JWT Expiration": "Wygaśnięcie JWT",
 	"JWT Token": "Token JWT",
 	"Keep Alive": "Zachowaj łączność",
@@ -223,8 +249,11 @@
 	"Manage LiteLLM Models": "Zarządzaj modelami LiteLLM",
 	"Manage Models": "Zarządzaj modelami",
 	"Manage Ollama Models": "Zarządzaj modelami Ollama",
+	"March": "",
 	"Max Tokens": "Maksymalna liczba tokenów",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maksymalnie 3 modele można pobierać jednocześnie. Spróbuj ponownie później.",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
 	"Minimum Score": "",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
@@ -255,11 +284,15 @@
 	"Name your modelfile": "Nadaj nazwę swojemu plikowi modelu",
 	"New Chat": "Nowy czat",
 	"New Password": "Nowe hasło",
+	"No results found": "",
+	"No source available": "",
 	"Not factually correct": "",
 	"Not sure what to add?": "Nie wiesz, co dodać?",
 	"Not sure what to write? Switch to": "Nie wiesz, co napisać? Przełącz się na",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
 	"Notifications": "Powiadomienia",
+	"November": "",
+	"October": "",
 	"Off": "Wyłączony",
 	"Okay, Let's Go!": "Okej, zaczynamy!",
 	"OLED Dark": "",
@@ -283,6 +316,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "lub",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Parametry",
 	"Password": "Hasło",
 	"PDF document (.pdf)": "",
@@ -292,11 +326,15 @@
 	"Plain text (.txt)": "",
 	"Playground": "Plac zabaw",
 	"Positive attitude": "",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
 	"Profile Image": "",
+	"Prompt": "",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
 	"Prompt Content": "Zawartość prompta",
 	"Prompt suggestions": "Sugestie prompta",
 	"Prompts": "Prompty",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Pobierz model z Ollama.com",
 	"Pull Progress": "Postęp pobierania",
 	"Query Params": "Parametry zapytania",
@@ -309,9 +347,12 @@
 	"Regenerate": "",
 	"Release Notes": "Notatki wydania",
 	"Remove": "",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "Powtórz ostatnie N",
 	"Repeat Penalty": "Kara za powtórzenie",
 	"Request Mode": "Tryb żądania",
+	"Reranking Model": "",
 	"Reranking model disabled": "",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "Resetuj przechowywanie wektorów",
@@ -337,12 +378,17 @@
 	"Select a mode": "Wybierz tryb",
 	"Select a model": "Wybierz model",
 	"Select an Ollama instance": "Wybierz instancję Ollama",
+	"Select model": "",
 	"Send a Message": "Wyślij Wiadomość",
 	"Send message": "Wyślij wiadomość",
+	"September": "",
 	"Server connection verified": "Połączenie z serwerem zweryfikowane",
 	"Set as default": "Ustaw jako domyślne",
 	"Set Default Model": "Ustaw domyślny model",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "Ustaw rozmiar obrazu",
+	"Set Model": "Ustaw model",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "Ustaw kroki",
 	"Set Title Auto-Generation Model": "Ustaw model automatycznego generowania tytułów",
 	"Set Voice": "Ustaw głos",
@@ -361,6 +407,7 @@
 	"Sign Out": "Wyloguj się",
 	"Sign up": "Zarejestruj się",
 	"Signing in": "",
+	"Source": "",
 	"Speech recognition error: {{error}}": "Błąd rozpoznawania mowy: {{error}}",
 	"Speech-to-Text Engine": "Silnik mowy na tekst",
 	"SpeechRecognition API is not supported in this browser.": "API Rozpoznawania Mowy nie jest obsługiwane w tej przeglądarce.",
@@ -370,6 +417,7 @@
 	"Subtitle (e.g. about the Roman Empire)": "",
 	"Success": "Sukces",
 	"Successfully updated.": "Pomyślnie zaktualizowano.",
+	"Suggested": "",
 	"Sync All": "Synchronizuj wszystko",
 	"System": "System",
 	"System Prompt": "Prompt systemowy",
@@ -390,11 +438,13 @@
 	"Title": "Tytuł",
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "Automatyczne generowanie tytułu",
+	"Title cannot be an empty string.": "",
 	"Title Generation Prompt": "Prompt generowania tytułu",
 	"to": "do",
 	"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 chat input.": "do pola wprowadzania czatu.",
+	"Today": "",
 	"Toggle settings": "Przełącz ustawienia",
 	"Toggle sidebar": "Przełącz panel boczny",
 	"Top K": "Najlepsze K",
@@ -405,11 +455,7 @@
 	"Uh-oh! There was an issue connecting to {{provider}}.": "O nie! Wystąpił problem z połączeniem z {{provider}}.",
 	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Nieznany typ pliku '{{file_type}}', ale akceptowany i traktowany jako zwykły tekst",
 	"Update and Copy Link": "",
-	"Update Embedding Model": "",
-	"Update embedding model (e.g. {{model}})": "",
 	"Update password": "Aktualizacja hasła",
-	"Update Reranking Model": "",
-	"Update reranking model (e.g. {{model}})": "",
 	"Upload a GGUF model": "Prześlij model GGUF",
 	"Upload files": "Prześlij pliki",
 	"Upload Progress": "Postęp przesyłania",
@@ -427,6 +473,8 @@
 	"Version": "Wersja",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Sieć",
+	"Web Loader Settings": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "Dodatki do interfejsu WebUI",
 	"WebUI Settings": "Ustawienia interfejsu WebUI",
@@ -436,8 +484,12 @@
 	"Whisper (Local)": "Whisper (Lokalnie)",
 	"Write a prompt suggestion (e.g. Who are you?)": "Napisz sugestię do polecenia (np. Kim jesteś?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Napisz podsumowanie w 50 słowach, które podsumowuje [temat lub słowo kluczowe].",
+	"Yesterday": "",
 	"You": "Ty",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "Jesteś pomocnym asystentem.",
 	"You're now logged in.": "Jesteś teraz zalogowany.",
-	"Youtube": ""
+	"Youtube": "",
+	"Youtube Loader Settings": ""
 }

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

@@ -15,6 +15,7 @@
 	"Add a short description about what this modelfile does": "Adicione uma breve descrição sobre o que este arquivo de modelo faz",
 	"Add a short title for this prompt": "Adicione um título curto para este prompt",
 	"Add a tag": "Adicionar uma tag",
+	"Add custom prompt": "",
 	"Add Docs": "Adicionar Documentos",
 	"Add Files": "Adicionar Arquivos",
 	"Add message": "Adicionar mensagem",
@@ -27,6 +28,7 @@
 	"Admin Settings": "Configurações do Administrador",
 	"Advanced Parameters": "Parâmetros Avançados",
 	"all": "todos",
+	"All Documents": "",
 	"All Users": "Todos os Usuários",
 	"Allow": "Permitir",
 	"Allow Chat Deletion": "Permitir Exclusão de Bate-papo",
@@ -34,17 +36,21 @@
 	"Already have an account?": "Já tem uma conta?",
 	"an assistant": "um assistente",
 	"and": "e",
+	"and create a new shared link.": "",
 	"API Base URL": "URL Base da API",
 	"API Key": "Chave da API",
 	"API Key created.": "",
 	"API keys": "",
 	"API RPM": "API RPM",
+	"April": "",
 	"Archive": "",
 	"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": "",
 	"Attention to detail": "",
 	"Audio": "Áudio",
+	"August": "",
 	"Auto-playback response": "Reprodução automática da resposta",
 	"Auto-send input after 3 sec.": "Enviar entrada automaticamente após 3 segundos.",
 	"AUTOMATIC1111 Base URL": "URL Base do AUTOMATIC1111",
@@ -52,8 +58,10 @@
 	"available!": "disponível!",
 	"Back": "Voltar",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "Modo de Construtor",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "Cancelar",
 	"Categories": "Categorias",
 	"Change Password": "Alterar Senha",
@@ -68,7 +76,9 @@
 	"Chunk Overlap": "Sobreposição de Fragmento",
 	"Chunk Params": "Parâmetros de Fragmento",
 	"Chunk Size": "Tamanho do Fragmento",
+	"Citation": "",
 	"Click here for help.": "Clique aqui para obter ajuda.",
+	"Click here to": "",
 	"Click here to check other modelfiles.": "Clique aqui para verificar outros arquivos de modelo.",
 	"Click here to select": "Clique aqui para selecionar",
 	"Click here to select a csv file.": "",
@@ -96,6 +106,8 @@
 	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Crie uma frase concisa de 3 a 5 palavras como cabeçalho para a seguinte consulta, aderindo estritamente ao limite de 3 a 5 palavras e evitando o uso da palavra 'título':",
 	"Create a modelfile": "Criar um arquivo de modelo",
 	"Create Account": "Criar Conta",
+	"Create new key": "",
+	"Create new secret key": "",
 	"Created at": "Criado em",
 	"Created At": "",
 	"Current Model": "Modelo Atual",
@@ -103,8 +115,10 @@
 	"Custom": "Personalizado",
 	"Customize Ollama models for a specific purpose": "Personalize os modelos Ollama para um propósito específico",
 	"Dark": "Escuro",
+	"Dashboard": "",
 	"Database": "Banco de dados",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
+	"December": "",
 	"Default": "Padrão",
 	"Default (Automatic1111)": "Padrão (Automatic1111)",
 	"Default (SentenceTransformers)": "",
@@ -118,6 +132,7 @@
 	"Delete chat": "Excluir bate-papo",
 	"Delete Chat": "",
 	"Delete Chats": "Excluir Bate-papos",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} excluído",
 	"Deleted {{tagName}}": "",
@@ -137,6 +152,7 @@
 	"Don't have an account?": "Não tem uma conta?",
 	"Don't like the style": "",
 	"Download": "",
+	"Download canceled": "",
 	"Download Database": "Baixar Banco de Dados",
 	"Drop any files here to add to the conversation": "Solte os arquivos 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'.",
@@ -144,6 +160,7 @@
 	"Edit Doc": "Editar Documento",
 	"Edit User": "Editar Usuário",
 	"Email": "E-mail",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "Ativar Histórico de Bate-papo",
@@ -154,6 +171,7 @@
 	"Enter Chunk Overlap": "Digite a Sobreposição de Fragmento",
 	"Enter Chunk Size": "Digite o Tamanho do Fragmento",
 	"Enter Image Size (e.g. 512x512)": "Digite o Tamanho da Imagem (por exemplo, 512x512)",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "Digite a URL Base da API LiteLLM (litellm_params.api_base)",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "Digite a Chave da API LiteLLM (litellm_params.api_key)",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Digite o RPM da API LiteLLM (litellm_params.rpm)",
@@ -165,6 +183,7 @@
 	"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)": "",
 	"Enter Your Email": "Digite seu E-mail",
 	"Enter Your Full Name": "Digite seu Nome Completo",
 	"Enter Your Password": "Digite sua Senha",
@@ -177,6 +196,7 @@
 	"Export Prompts": "Exportar Prompts",
 	"Failed to create API Key.": "",
 	"Failed to read clipboard contents": "Falha ao ler o conteúdo da área de transferência",
+	"February": "",
 	"Feel free to add specific details": "",
 	"File Mode": "Modo de Arquivo",
 	"File not found.": "Arquivo não encontrado.",
@@ -193,6 +213,7 @@
 	"Good Response": "",
 	"has no conversations.": "",
 	"Hello, {{name}}": "Olá, {{name}}",
+	"Help": "",
 	"Hide": "Ocultar",
 	"Hide Additional Params": "Ocultar Parâmetros Adicionais",
 	"How can I help you today?": "Como posso ajudá-lo hoje?",
@@ -206,9 +227,14 @@
 	"Import Modelfiles": "Importar Arquivos de Modelo",
 	"Import Prompts": "Importar Prompts",
 	"Include `--api` flag when running stable-diffusion-webui": "Inclua a flag `--api` ao executar stable-diffusion-webui",
+	"Input commands": "",
 	"Interface": "Interface",
+	"Invalid Tag": "",
+	"January": "",
 	"join our Discord for help.": "junte-se ao nosso Discord para obter ajuda.",
 	"JSON": "JSON",
+	"July": "",
+	"June": "",
 	"JWT Expiration": "Expiração JWT",
 	"JWT Token": "Token JWT",
 	"Keep Alive": "Manter Vivo",
@@ -223,8 +249,11 @@
 	"Manage LiteLLM Models": "Gerenciar Modelos LiteLLM",
 	"Manage Models": "Gerenciar Modelos",
 	"Manage Ollama Models": "Gerenciar Modelos Ollama",
+	"March": "",
 	"Max Tokens": "Máximo de Tokens",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Máximo de 3 modelos podem ser baixados simultaneamente. Tente novamente mais tarde.",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
 	"Minimum Score": "",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
@@ -255,11 +284,15 @@
 	"Name your modelfile": "Nomeie seu arquivo de modelo",
 	"New Chat": "Novo Bate-papo",
 	"New Password": "Nova Senha",
+	"No results found": "",
+	"No source available": "",
 	"Not factually correct": "",
 	"Not sure what to add?": "Não tem certeza do que adicionar?",
 	"Not sure what to write? Switch to": "Não tem certeza do que escrever? Mude para",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
 	"Notifications": "Notificações da Área de Trabalho",
+	"November": "",
+	"October": "",
 	"Off": "Desligado",
 	"Okay, Let's Go!": "Ok, Vamos Lá!",
 	"OLED Dark": "",
@@ -283,6 +316,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "ou",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Parâmetros",
 	"Password": "Senha",
 	"PDF document (.pdf)": "",
@@ -292,11 +326,15 @@
 	"Plain text (.txt)": "",
 	"Playground": "Parque infantil",
 	"Positive attitude": "",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
 	"Profile Image": "",
+	"Prompt": "",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
 	"Prompt Content": "Conteúdo do Prompt",
 	"Prompt suggestions": "Sugestões de Prompt",
 	"Prompts": "Prompts",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Extrair um modelo do Ollama.com",
 	"Pull Progress": "Progresso da Extração",
 	"Query Params": "Parâmetros de Consulta",
@@ -309,9 +347,12 @@
 	"Regenerate": "",
 	"Release Notes": "Notas de Lançamento",
 	"Remove": "",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "Repetir Últimos N",
 	"Repeat Penalty": "Penalidade de Repetição",
 	"Request Mode": "Modo de Solicitação",
+	"Reranking Model": "",
 	"Reranking model disabled": "",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "Redefinir Armazenamento de Vetor",
@@ -337,12 +378,17 @@
 	"Select a mode": "Selecione um modo",
 	"Select a model": "Selecione um modelo",
 	"Select an Ollama instance": "Selecione uma instância Ollama",
+	"Select model": "",
 	"Send a Message": "Enviar uma Mensagem",
 	"Send message": "Enviar mensagem",
+	"September": "",
 	"Server connection verified": "Conexão com o servidor verificada",
 	"Set as default": "Definir como padrão",
 	"Set Default Model": "Definir Modelo Padrão",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "Definir Tamanho da Imagem",
+	"Set Model": "Definir Modelo",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "Definir Etapas",
 	"Set Title Auto-Generation Model": "Definir Modelo de Geração Automática de Título",
 	"Set Voice": "Definir Voz",
@@ -361,6 +407,7 @@
 	"Sign Out": "Sair",
 	"Sign up": "Inscrever-se",
 	"Signing in": "",
+	"Source": "",
 	"Speech recognition error: {{error}}": "Erro de reconhecimento de fala: {{error}}",
 	"Speech-to-Text Engine": "Mecanismo de Fala para Texto",
 	"SpeechRecognition API is not supported in this browser.": "A API SpeechRecognition não é suportada neste navegador.",
@@ -370,6 +417,7 @@
 	"Subtitle (e.g. about the Roman Empire)": "",
 	"Success": "Sucesso",
 	"Successfully updated.": "Atualizado com sucesso.",
+	"Suggested": "",
 	"Sync All": "Sincronizar Tudo",
 	"System": "Sistema",
 	"System Prompt": "Prompt do Sistema",
@@ -390,11 +438,13 @@
 	"Title": "Título",
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "Geração Automática de Título",
+	"Title cannot be an empty string.": "",
 	"Title Generation Prompt": "Prompt de Geração de Título",
 	"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 chat input.": "para a entrada de bate-papo.",
+	"Today": "",
 	"Toggle settings": "Alternar configurações",
 	"Toggle sidebar": "Alternar barra lateral",
 	"Top K": "Top K",
@@ -405,11 +455,7 @@
 	"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",
 	"Update and Copy Link": "",
-	"Update Embedding Model": "",
-	"Update embedding model (e.g. {{model}})": "",
 	"Update password": "Atualizar senha",
-	"Update Reranking Model": "",
-	"Update reranking model (e.g. {{model}})": "",
 	"Upload a GGUF model": "Carregar um modelo GGUF",
 	"Upload files": "Carregar arquivos",
 	"Upload Progress": "Progresso do Carregamento",
@@ -427,6 +473,8 @@
 	"Version": "Versão",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Web",
+	"Web Loader Settings": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "Complementos WebUI",
 	"WebUI Settings": "Configurações WebUI",
@@ -436,8 +484,12 @@
 	"Whisper (Local)": "Whisper (Local)",
 	"Write a prompt suggestion (e.g. Who are you?)": "Escreva uma sugestão de prompt (por exemplo, Quem é você?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Escreva um resumo em 50 palavras que resuma [tópico ou palavra-chave].",
+	"Yesterday": "",
 	"You": "Você",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "Você é um assistente útil.",
 	"You're now logged in.": "Você está conectado agora.",
-	"Youtube": ""
+	"Youtube": "",
+	"Youtube Loader Settings": ""
 }

+ 57 - 5
src/lib/i18n/locales/pt-PT/translation.json

@@ -15,6 +15,7 @@
 	"Add a short description about what this modelfile does": "Adicione uma breve descrição sobre o que este arquivo de modelo faz",
 	"Add a short title for this prompt": "Adicione um título curto para este prompt",
 	"Add a tag": "Adicionar uma tag",
+	"Add custom prompt": "",
 	"Add Docs": "Adicionar Documentos",
 	"Add Files": "Adicionar Arquivos",
 	"Add message": "Adicionar mensagem",
@@ -27,6 +28,7 @@
 	"Admin Settings": "Configurações do Administrador",
 	"Advanced Parameters": "Parâmetros Avançados",
 	"all": "todos",
+	"All Documents": "",
 	"All Users": "Todos os Usuários",
 	"Allow": "Permitir",
 	"Allow Chat Deletion": "Permitir Exclusão de Bate-papo",
@@ -34,17 +36,21 @@
 	"Already have an account?": "Já tem uma conta?",
 	"an assistant": "um assistente",
 	"and": "e",
+	"and create a new shared link.": "",
 	"API Base URL": "URL Base da API",
 	"API Key": "Chave da API",
 	"API Key created.": "",
 	"API keys": "",
 	"API RPM": "API RPM",
+	"April": "",
 	"Archive": "",
 	"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": "",
 	"Attention to detail": "",
 	"Audio": "Áudio",
+	"August": "",
 	"Auto-playback response": "Reprodução automática da resposta",
 	"Auto-send input after 3 sec.": "Enviar entrada automaticamente após 3 segundos.",
 	"AUTOMATIC1111 Base URL": "URL Base do AUTOMATIC1111",
@@ -52,8 +58,10 @@
 	"available!": "disponível!",
 	"Back": "Voltar",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "Modo de Construtor",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "Cancelar",
 	"Categories": "Categorias",
 	"Change Password": "Alterar Senha",
@@ -68,7 +76,9 @@
 	"Chunk Overlap": "Sobreposição de Fragmento",
 	"Chunk Params": "Parâmetros de Fragmento",
 	"Chunk Size": "Tamanho do Fragmento",
+	"Citation": "",
 	"Click here for help.": "Clique aqui para obter ajuda.",
+	"Click here to": "",
 	"Click here to check other modelfiles.": "Clique aqui para verificar outros arquivos de modelo.",
 	"Click here to select": "Clique aqui para selecionar",
 	"Click here to select a csv file.": "",
@@ -96,6 +106,8 @@
 	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Crie uma frase concisa de 3 a 5 palavras como cabeçalho para a seguinte consulta, aderindo estritamente ao limite de 3 a 5 palavras e evitando o uso da palavra 'título':",
 	"Create a modelfile": "Criar um arquivo de modelo",
 	"Create Account": "Criar Conta",
+	"Create new key": "",
+	"Create new secret key": "",
 	"Created at": "Criado em",
 	"Created At": "",
 	"Current Model": "Modelo Atual",
@@ -103,8 +115,10 @@
 	"Custom": "Personalizado",
 	"Customize Ollama models for a specific purpose": "Personalize os modelos Ollama para um propósito específico",
 	"Dark": "Escuro",
+	"Dashboard": "",
 	"Database": "Banco de dados",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
+	"December": "",
 	"Default": "Padrão",
 	"Default (Automatic1111)": "Padrão (Automatic1111)",
 	"Default (SentenceTransformers)": "",
@@ -118,6 +132,7 @@
 	"Delete chat": "Excluir bate-papo",
 	"Delete Chat": "",
 	"Delete Chats": "Excluir Bate-papos",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} excluído",
 	"Deleted {{tagName}}": "",
@@ -137,6 +152,7 @@
 	"Don't have an account?": "Não tem uma conta?",
 	"Don't like the style": "",
 	"Download": "",
+	"Download canceled": "",
 	"Download Database": "Baixar Banco de Dados",
 	"Drop any files here to add to the conversation": "Solte os arquivos 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'.",
@@ -144,6 +160,7 @@
 	"Edit Doc": "Editar Documento",
 	"Edit User": "Editar Usuário",
 	"Email": "E-mail",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "Ativar Histórico de Bate-papo",
@@ -154,6 +171,7 @@
 	"Enter Chunk Overlap": "Digite a Sobreposição de Fragmento",
 	"Enter Chunk Size": "Digite o Tamanho do Fragmento",
 	"Enter Image Size (e.g. 512x512)": "Digite o Tamanho da Imagem (por exemplo, 512x512)",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "Digite a URL Base da API LiteLLM (litellm_params.api_base)",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "Digite a Chave da API LiteLLM (litellm_params.api_key)",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Digite o RPM da API LiteLLM (litellm_params.rpm)",
@@ -165,6 +183,7 @@
 	"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)": "",
 	"Enter Your Email": "Digite seu E-mail",
 	"Enter Your Full Name": "Digite seu Nome Completo",
 	"Enter Your Password": "Digite sua Senha",
@@ -177,6 +196,7 @@
 	"Export Prompts": "Exportar Prompts",
 	"Failed to create API Key.": "",
 	"Failed to read clipboard contents": "Falha ao ler o conteúdo da área de transferência",
+	"February": "",
 	"Feel free to add specific details": "",
 	"File Mode": "Modo de Arquivo",
 	"File not found.": "Arquivo não encontrado.",
@@ -193,6 +213,7 @@
 	"Good Response": "",
 	"has no conversations.": "",
 	"Hello, {{name}}": "Olá, {{name}}",
+	"Help": "",
 	"Hide": "Ocultar",
 	"Hide Additional Params": "Ocultar Parâmetros Adicionais",
 	"How can I help you today?": "Como posso ajudá-lo hoje?",
@@ -206,9 +227,14 @@
 	"Import Modelfiles": "Importar Arquivos de Modelo",
 	"Import Prompts": "Importar Prompts",
 	"Include `--api` flag when running stable-diffusion-webui": "Inclua a flag `--api` ao executar stable-diffusion-webui",
+	"Input commands": "",
 	"Interface": "Interface",
+	"Invalid Tag": "",
+	"January": "",
 	"join our Discord for help.": "junte-se ao nosso Discord para obter ajuda.",
 	"JSON": "JSON",
+	"July": "",
+	"June": "",
 	"JWT Expiration": "Expiração JWT",
 	"JWT Token": "Token JWT",
 	"Keep Alive": "Manter Vivo",
@@ -223,8 +249,11 @@
 	"Manage LiteLLM Models": "Gerenciar Modelos LiteLLM",
 	"Manage Models": "Gerenciar Modelos",
 	"Manage Ollama Models": "Gerenciar Modelos Ollama",
+	"March": "",
 	"Max Tokens": "Máximo de Tokens",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Máximo de 3 modelos podem ser baixados simultaneamente. Tente novamente mais tarde.",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
 	"Minimum Score": "",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
@@ -255,11 +284,15 @@
 	"Name your modelfile": "Nomeie seu arquivo de modelo",
 	"New Chat": "Novo Bate-papo",
 	"New Password": "Nova Senha",
+	"No results found": "",
+	"No source available": "",
 	"Not factually correct": "",
 	"Not sure what to add?": "Não tem certeza do que adicionar?",
 	"Not sure what to write? Switch to": "Não tem certeza do que escrever? Mude para",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
 	"Notifications": "Notificações da Área de Trabalho",
+	"November": "",
+	"October": "",
 	"Off": "Desligado",
 	"Okay, Let's Go!": "Ok, Vamos Lá!",
 	"OLED Dark": "",
@@ -283,6 +316,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "ou",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Parâmetros",
 	"Password": "Senha",
 	"PDF document (.pdf)": "",
@@ -292,11 +326,15 @@
 	"Plain text (.txt)": "",
 	"Playground": "Parque infantil",
 	"Positive attitude": "",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
 	"Profile Image": "",
+	"Prompt": "",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
 	"Prompt Content": "Conteúdo do Prompt",
 	"Prompt suggestions": "Sugestões de Prompt",
 	"Prompts": "Prompts",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Extrair um modelo do Ollama.com",
 	"Pull Progress": "Progresso da Extração",
 	"Query Params": "Parâmetros de Consulta",
@@ -309,9 +347,12 @@
 	"Regenerate": "",
 	"Release Notes": "Notas de Lançamento",
 	"Remove": "",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "Repetir Últimos N",
 	"Repeat Penalty": "Penalidade de Repetição",
 	"Request Mode": "Modo de Solicitação",
+	"Reranking Model": "",
 	"Reranking model disabled": "",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "Redefinir Armazenamento de Vetor",
@@ -337,12 +378,17 @@
 	"Select a mode": "Selecione um modo",
 	"Select a model": "Selecione um modelo",
 	"Select an Ollama instance": "Selecione uma instância Ollama",
+	"Select model": "",
 	"Send a Message": "Enviar uma Mensagem",
 	"Send message": "Enviar mensagem",
+	"September": "",
 	"Server connection verified": "Conexão com o servidor verificada",
 	"Set as default": "Definir como padrão",
 	"Set Default Model": "Definir Modelo Padrão",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "Definir Tamanho da Imagem",
+	"Set Model": "Definir Modelo",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "Definir Etapas",
 	"Set Title Auto-Generation Model": "Definir Modelo de Geração Automática de Título",
 	"Set Voice": "Definir Voz",
@@ -361,6 +407,7 @@
 	"Sign Out": "Sair",
 	"Sign up": "Inscrever-se",
 	"Signing in": "",
+	"Source": "",
 	"Speech recognition error: {{error}}": "Erro de reconhecimento de fala: {{error}}",
 	"Speech-to-Text Engine": "Mecanismo de Fala para Texto",
 	"SpeechRecognition API is not supported in this browser.": "A API SpeechRecognition não é suportada neste navegador.",
@@ -370,6 +417,7 @@
 	"Subtitle (e.g. about the Roman Empire)": "",
 	"Success": "Sucesso",
 	"Successfully updated.": "Atualizado com sucesso.",
+	"Suggested": "",
 	"Sync All": "Sincronizar Tudo",
 	"System": "Sistema",
 	"System Prompt": "Prompt do Sistema",
@@ -390,11 +438,13 @@
 	"Title": "Título",
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "Geração Automática de Título",
+	"Title cannot be an empty string.": "",
 	"Title Generation Prompt": "Prompt de Geração de Título",
 	"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 chat input.": "para a entrada de bate-papo.",
+	"Today": "",
 	"Toggle settings": "Alternar configurações",
 	"Toggle sidebar": "Alternar barra lateral",
 	"Top K": "Top K",
@@ -405,11 +455,7 @@
 	"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",
 	"Update and Copy Link": "",
-	"Update Embedding Model": "",
-	"Update embedding model (e.g. {{model}})": "",
 	"Update password": "Atualizar senha",
-	"Update Reranking Model": "",
-	"Update reranking model (e.g. {{model}})": "",
 	"Upload a GGUF model": "Carregar um modelo GGUF",
 	"Upload files": "Carregar arquivos",
 	"Upload Progress": "Progresso do Carregamento",
@@ -427,6 +473,8 @@
 	"Version": "Versão",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Web",
+	"Web Loader Settings": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "Complementos WebUI",
 	"WebUI Settings": "Configurações WebUI",
@@ -436,8 +484,12 @@
 	"Whisper (Local)": "Whisper (Local)",
 	"Write a prompt suggestion (e.g. Who are you?)": "Escreva uma sugestão de prompt (por exemplo, Quem é você?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Escreva um resumo em 50 palavras que resuma [tópico ou palavra-chave].",
+	"Yesterday": "",
 	"You": "Você",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "Você é um assistente útil.",
 	"You're now logged in.": "Você está conectado agora.",
-	"Youtube": ""
+	"Youtube": "",
+	"Youtube Loader Settings": ""
 }

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

@@ -15,6 +15,7 @@
 	"Add a short description about what this modelfile does": "Добавьте краткое описание, что делает этот моделфайл",
 	"Add a short title for this prompt": "Добавьте краткий заголовок для этого ввода",
 	"Add a tag": "Добавьте тэг",
+	"Add custom prompt": "",
 	"Add Docs": "Добавьте документы",
 	"Add Files": "Добавьте файлы",
 	"Add message": "Добавьте сообщение",
@@ -27,6 +28,7 @@
 	"Admin Settings": "Настройки админ",
 	"Advanced Parameters": "Расширенные Параметры",
 	"all": "всё",
+	"All Documents": "",
 	"All Users": "Все пользователи",
 	"Allow": "Разрешить",
 	"Allow Chat Deletion": "Дозволять удаление чат",
@@ -34,17 +36,21 @@
 	"Already have an account?": "у вас уже есть аккаунт?",
 	"an assistant": "ассистент",
 	"and": "и",
+	"and create a new shared link.": "",
 	"API Base URL": "Базовый адрес API",
 	"API Key": "Ключ API",
 	"API Key created.": "",
 	"API keys": "",
 	"API RPM": "API RPM",
+	"April": "",
 	"Archive": "",
 	"Archived Chats": "запис на чат",
 	"are allowed - Activate this command by typing": "разрешено - активируйте эту команду вводом",
 	"Are you sure?": "Вы уверены?",
+	"Attach file": "",
 	"Attention to detail": "",
 	"Audio": "Аудио",
+	"August": "",
 	"Auto-playback response": "Автоматическое воспроизведение ответа",
 	"Auto-send input after 3 sec.": "Автоматическая отправка ввода через 3 секунды.",
 	"AUTOMATIC1111 Base URL": "Базовый адрес URL AUTOMATIC1111",
@@ -52,8 +58,10 @@
 	"available!": "доступный!",
 	"Back": "Назад",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "Режим конструктор",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "Аннулировать",
 	"Categories": "Категории",
 	"Change Password": "Изменить пароль",
@@ -68,7 +76,9 @@
 	"Chunk Overlap": "Перекрытие фрагментов",
 	"Chunk Params": "Параметры фрагментов",
 	"Chunk Size": "Размер фрагмента",
+	"Citation": "",
 	"Click here for help.": "Нажмите здесь для помощь.",
+	"Click here to": "",
 	"Click here to check other modelfiles.": "Нажмите тут чтобы проверить другие файлы моделей.",
 	"Click here to select": "Нажмите тут чтобы выберите",
 	"Click here to select a csv file.": "",
@@ -96,6 +106,8 @@
 	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "",
 	"Create a modelfile": "Создать модельный файл",
 	"Create Account": "Создать аккаунт",
+	"Create new key": "",
+	"Create new secret key": "",
 	"Created at": "Создано в",
 	"Created At": "",
 	"Current Model": "Текущая модель",
@@ -103,8 +115,10 @@
 	"Custom": "Пользовательский",
 	"Customize Ollama models for a specific purpose": "Настроить модели Ollama для конкретной цели",
 	"Dark": "Тёмный",
+	"Dashboard": "",
 	"Database": "База данных",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
+	"December": "",
 	"Default": "По умолчанию",
 	"Default (Automatic1111)": "По умолчанию (Automatic1111)",
 	"Default (SentenceTransformers)": "",
@@ -118,6 +132,7 @@
 	"Delete chat": "Удалить чат",
 	"Delete Chat": "",
 	"Delete Chats": "Удалить чаты",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "Удалено {{deleteModelTag}}",
 	"Deleted {{tagName}}": "",
@@ -137,6 +152,7 @@
 	"Don't have an account?": "у вас не есть аккаунт?",
 	"Don't like the style": "",
 	"Download": "",
+	"Download canceled": "",
 	"Download Database": "Загрузить базу данных",
 	"Drop any files here to add to the conversation": "Перетащите сюда файлы, чтобы добавить их в разговор",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "например, '30с','10м'. Допустимые единицы времени: 'с', 'м', 'ч'.",
@@ -144,6 +160,7 @@
 	"Edit Doc": "Редактировать документ",
 	"Edit User": "Редактировать пользователя",
 	"Email": "Электронная почта",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "Включить историю чата",
@@ -154,6 +171,7 @@
 	"Enter Chunk Overlap": "Введите перекрытие фрагмента",
 	"Enter Chunk Size": "Введите размер фрагмента",
 	"Enter Image Size (e.g. 512x512)": "Введите размер изображения (например, 512x512)",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "Введите базовый URL API LiteLLM (litellm_params.api_base)",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "Введите ключ API LiteLLM (litellm_params.api_key)",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Введите RPM API LiteLLM (litellm_params.rpm)",
@@ -165,6 +183,7 @@
 	"Enter stop sequence": "Введите последовательность остановки",
 	"Enter Top K": "Введите Top K",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "Введите URL-адрес (например, http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "Введите вашу электронную почту",
 	"Enter Your Full Name": "Введите ваше полное имя",
 	"Enter Your Password": "Введите ваш пароль",
@@ -177,6 +196,7 @@
 	"Export Prompts": "Экспортировать промты",
 	"Failed to create API Key.": "",
 	"Failed to read clipboard contents": "Не удалось прочитать содержимое буфера обмена",
+	"February": "",
 	"Feel free to add specific details": "",
 	"File Mode": "Режим файла",
 	"File not found.": "Файл не найден.",
@@ -193,6 +213,7 @@
 	"Good Response": "",
 	"has no conversations.": "",
 	"Hello, {{name}}": "Привет, {{name}}",
+	"Help": "",
 	"Hide": "Скрыть",
 	"Hide Additional Params": "Скрыть дополнительные параметры",
 	"How can I help you today?": "Чем я могу помочь вам сегодня?",
@@ -206,9 +227,14 @@
 	"Import Modelfiles": "Импорт файлов модели",
 	"Import Prompts": "Импорт подсказок",
 	"Include `--api` flag when running stable-diffusion-webui": "Добавьте флаг `--api` при запуске stable-diffusion-webui",
+	"Input commands": "",
 	"Interface": "Интерфейс",
+	"Invalid Tag": "",
+	"January": "",
 	"join our Discord for help.": "присоединяйтесь к нашему Discord для помощи.",
 	"JSON": "JSON",
+	"July": "",
+	"June": "",
 	"JWT Expiration": "Истечение срока JWT",
 	"JWT Token": "Токен JWT",
 	"Keep Alive": "Поддерживать активность",
@@ -223,8 +249,11 @@
 	"Manage LiteLLM Models": "Управление моделями LiteLLM",
 	"Manage Models": "Управление моделями",
 	"Manage Ollama Models": "Управление моделями Ollama",
+	"March": "",
 	"Max Tokens": "Максимальное количество токенов",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Максимальное количество моделей для загрузки одновременно - 3. Пожалуйста, попробуйте позже.",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
 	"Minimum Score": "",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
@@ -255,11 +284,15 @@
 	"Name your modelfile": "Назовите свой файл модели",
 	"New Chat": "Новый чат",
 	"New Password": "Новый пароль",
+	"No results found": "",
+	"No source available": "",
 	"Not factually correct": "",
 	"Not sure what to add?": "Не уверены, что добавить?",
 	"Not sure what to write? Switch to": "Не уверены, что написать? Переключитесь на",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
 	"Notifications": "Уведомления на рабочем столе",
+	"November": "",
+	"October": "",
 	"Off": "Выключено.",
 	"Okay, Let's Go!": "Давайте начнём!",
 	"OLED Dark": "",
@@ -283,6 +316,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "или",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Параметры",
 	"Password": "Пароль",
 	"PDF document (.pdf)": "",
@@ -292,11 +326,15 @@
 	"Plain text (.txt)": "",
 	"Playground": "Площадка",
 	"Positive attitude": "",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
 	"Profile Image": "",
+	"Prompt": "",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
 	"Prompt Content": "Содержание промпта",
 	"Prompt suggestions": "Предложения промптов",
 	"Prompts": "Промпты",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Загрузить модель с Ollama.com",
 	"Pull Progress": "Прогресс загрузки",
 	"Query Params": "Параметры запроса",
@@ -309,9 +347,12 @@
 	"Regenerate": "",
 	"Release Notes": "Примечания к выпуску",
 	"Remove": "",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "Повторить последние N",
 	"Repeat Penalty": "Штраф за повтор",
 	"Request Mode": "Режим запроса",
+	"Reranking Model": "",
 	"Reranking model disabled": "",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "Сбросить векторное хранилище",
@@ -337,12 +378,17 @@
 	"Select a mode": "Выберите режим",
 	"Select a model": "Выберите модель",
 	"Select an Ollama instance": "Выберите экземпляр Ollama",
+	"Select model": "",
 	"Send a Message": "Отправить сообщение",
 	"Send message": "Отправить сообщение",
+	"September": "",
 	"Server connection verified": "Соединение с сервером проверено",
 	"Set as default": "Установить по умолчанию",
 	"Set Default Model": "Установить модель по умолчанию",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "Установить размер изображения",
+	"Set Model": "Установить модель",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "Установить шаги",
 	"Set Title Auto-Generation Model": "Установить модель автогенерации заголовков",
 	"Set Voice": "Установить голос",
@@ -361,6 +407,7 @@
 	"Sign Out": "Выход",
 	"Sign up": "зарегистрировать",
 	"Signing in": "",
+	"Source": "",
 	"Speech recognition error: {{error}}": "Ошибка распознавания речи: {{error}}",
 	"Speech-to-Text Engine": "Система распознавания речи",
 	"SpeechRecognition API is not supported in this browser.": "API распознавания речи не поддерживается в этом браузере.",
@@ -370,6 +417,7 @@
 	"Subtitle (e.g. about the Roman Empire)": "",
 	"Success": "Успех",
 	"Successfully updated.": "Успешно обновлено.",
+	"Suggested": "",
 	"Sync All": "Синхронизировать все",
 	"System": "Система",
 	"System Prompt": "Системный промпт",
@@ -390,11 +438,13 @@
 	"Title": "Заголовок",
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "Автогенерация заголовка",
+	"Title cannot be an empty string.": "",
 	"Title Generation Prompt": "Промпт для генерации заголовка",
 	"to": "в",
 	"To access the available model names for downloading,": "Чтобы получить доступ к доступным для загрузки именам моделей,",
 	"To access the GGUF models available for downloading,": "Чтобы получить доступ к моделям GGUF, доступным для загрузки,",
 	"to chat input.": "в чате.",
+	"Today": "",
 	"Toggle settings": "Переключить настройки",
 	"Toggle sidebar": "Переключить боковую панель",
 	"Top K": "Top K",
@@ -405,11 +455,7 @@
 	"Uh-oh! There was an issue connecting to {{provider}}.": "Упс! Возникла проблема подключения к {{provider}}.",
 	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Неизвестный тип файла '{{file_type}}', но принимается и обрабатывается как обычный текст",
 	"Update and Copy Link": "",
-	"Update Embedding Model": "",
-	"Update embedding model (e.g. {{model}})": "",
 	"Update password": "Обновить пароль",
-	"Update Reranking Model": "",
-	"Update reranking model (e.g. {{model}})": "",
 	"Upload a GGUF model": "Загрузить модель GGUF",
 	"Upload files": "Загрузить файлы",
 	"Upload Progress": "Прогресс загрузки",
@@ -427,6 +473,8 @@
 	"Version": "Версия",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Веб",
+	"Web Loader Settings": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "Дополнения для WebUI",
 	"WebUI Settings": "Настройки WebUI",
@@ -436,8 +484,12 @@
 	"Whisper (Local)": "Шепот (локальный)",
 	"Write a prompt suggestion (e.g. Who are you?)": "Напишите предложение промпта (например, Кто вы?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Напишите резюме в 50 словах, которое кратко описывает [тему или ключевое слово].",
+	"Yesterday": "",
 	"You": "Вы",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "Вы полезный ассистент.",
 	"You're now logged in.": "Вы вошли в систему.",
-	"Youtube": ""
+	"Youtube": "",
+	"Youtube Loader Settings": ""
 }

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

@@ -15,6 +15,7 @@
 	"Add a short description about what this modelfile does": "Lägg till en kort beskrivning av vad den här modelfilen gör",
 	"Add a short title for this prompt": "Lägg till en kort titel för denna prompt",
 	"Add a tag": "Lägg till en tagg",
+	"Add custom prompt": "",
 	"Add Docs": "Lägg till dokument",
 	"Add Files": "Lägg till filer",
 	"Add message": "Lägg till meddelande",
@@ -27,6 +28,7 @@
 	"Admin Settings": "Administratörsinställningar",
 	"Advanced Parameters": "Avancerade parametrar",
 	"all": "alla",
+	"All Documents": "",
 	"All Users": "Alla användare",
 	"Allow": "Tillåt",
 	"Allow Chat Deletion": "Tillåt chattborttagning",
@@ -34,17 +36,21 @@
 	"Already have an account?": "Har du redan ett konto?",
 	"an assistant": "en assistent",
 	"and": "och",
+	"and create a new shared link.": "",
 	"API Base URL": "API-bas-URL",
 	"API Key": "API-nyckel",
 	"API Key created.": "",
 	"API keys": "",
 	"API RPM": "API RPM",
+	"April": "",
 	"Archive": "",
 	"Archived Chats": "",
 	"are allowed - Activate this command by typing": "är tillåtna - Aktivera detta kommando genom att skriva",
 	"Are you sure?": "Är du säker?",
+	"Attach file": "",
 	"Attention to detail": "",
 	"Audio": "Ljud",
+	"August": "",
 	"Auto-playback response": "Automatisk uppspelning",
 	"Auto-send input after 3 sec.": "Skicka automatiskt indata efter 3 sek.",
 	"AUTOMATIC1111 Base URL": "AUTOMATIC1111 bas-URL",
@@ -52,8 +58,10 @@
 	"available!": "tillgänglig!",
 	"Back": "Tillbaka",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "Byggarläge",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "Avbryt",
 	"Categories": "Kategorier",
 	"Change Password": "Ändra lösenord",
@@ -68,7 +76,9 @@
 	"Chunk Overlap": "Överlappning",
 	"Chunk Params": "Chunk-parametrar",
 	"Chunk Size": "Chunk-storlek",
+	"Citation": "",
 	"Click here for help.": "Klicka här för hjälp.",
+	"Click here to": "",
 	"Click here to check other modelfiles.": "Klicka här för att kontrollera andra modelfiler.",
 	"Click here to select": "Klicka här för att välja",
 	"Click here to select a csv file.": "",
@@ -96,6 +106,8 @@
 	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Skapa en kort, 3-5 ords fras som rubrik för följande fråga, strikt följa 3-5 ordsgränsen och undvika användning av ordet 'titel':",
 	"Create a modelfile": "Skapa en modelfil",
 	"Create Account": "Skapa konto",
+	"Create new key": "",
+	"Create new secret key": "",
 	"Created at": "Skapad",
 	"Created At": "",
 	"Current Model": "Aktuell modell",
@@ -103,8 +115,10 @@
 	"Custom": "Anpassad",
 	"Customize Ollama models for a specific purpose": "Anpassa Ollama-modeller för ett specifikt ändamål",
 	"Dark": "Mörk",
+	"Dashboard": "",
 	"Database": "Databas",
 	"DD/MM/YYYY HH:mm": "DD/MM/ÅÅÅÅ TT:mm",
+	"December": "",
 	"Default": "Standard",
 	"Default (Automatic1111)": "Standard (Automatic1111)",
 	"Default (SentenceTransformers)": "",
@@ -118,6 +132,7 @@
 	"Delete chat": "Radera chatt",
 	"Delete Chat": "",
 	"Delete Chats": "Radera chattar",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "Raderad {{deleteModelTag}}",
 	"Deleted {{tagName}}": "",
@@ -137,6 +152,7 @@
 	"Don't have an account?": "Har du inte ett konto?",
 	"Don't like the style": "",
 	"Download": "",
+	"Download canceled": "",
 	"Download Database": "Ladda ner databas",
 	"Drop any files here to add to the conversation": "Släpp filer här för att lägga till i konversationen",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "t.ex. '30s', '10m'. Giltiga tidsenheter är 's', 'm', 'h'.",
@@ -144,6 +160,7 @@
 	"Edit Doc": "Redigera dokument",
 	"Edit User": "Redigera användare",
 	"Email": "E-post",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "Aktivera chatthistorik",
@@ -154,6 +171,7 @@
 	"Enter Chunk Overlap": "Ange Chunk-överlappning",
 	"Enter Chunk Size": "Ange Chunk-storlek",
 	"Enter Image Size (e.g. 512x512)": "Ange bildstorlek (t.ex. 512x512)",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "Ange LiteLLM API-bas-URL (litellm_params.api_base)",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "Ange LiteLLM API-nyckel (litellm_params.api_key)",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Ange LiteLLM API RPM (litellm_params.rpm)",
@@ -165,6 +183,7 @@
 	"Enter stop sequence": "Ange stoppsekvens",
 	"Enter Top K": "Ange Top K",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "Ange URL (t.ex. http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "Ange din e-post",
 	"Enter Your Full Name": "Ange ditt fullständiga namn",
 	"Enter Your Password": "Ange ditt lösenord",
@@ -177,6 +196,7 @@
 	"Export Prompts": "Exportera prompts",
 	"Failed to create API Key.": "",
 	"Failed to read clipboard contents": "Misslyckades med att läsa urklippsinnehåll",
+	"February": "",
 	"Feel free to add specific details": "",
 	"File Mode": "Fil-läge",
 	"File not found.": "Fil hittades inte.",
@@ -193,6 +213,7 @@
 	"Good Response": "",
 	"has no conversations.": "",
 	"Hello, {{name}}": "Hej, {{name}}",
+	"Help": "",
 	"Hide": "Dölj",
 	"Hide Additional Params": "Dölj ytterligare parametrar",
 	"How can I help you today?": "Hur kan jag hjälpa dig idag?",
@@ -206,9 +227,14 @@
 	"Import Modelfiles": "Importera modelfiler",
 	"Import Prompts": "Importera prompts",
 	"Include `--api` flag when running stable-diffusion-webui": "Inkludera `--api`-flagga när du kör stabil-diffusion-webui",
+	"Input commands": "",
 	"Interface": "Gränssnitt",
+	"Invalid Tag": "",
+	"January": "",
 	"join our Discord for help.": "gå med i vår Discord för hjälp.",
 	"JSON": "JSON",
+	"July": "",
+	"June": "",
 	"JWT Expiration": "JWT-utgång",
 	"JWT Token": "JWT-token",
 	"Keep Alive": "Håll vid liv",
@@ -223,8 +249,11 @@
 	"Manage LiteLLM Models": "Hantera LiteLLM-modeller",
 	"Manage Models": "Hantera modeller",
 	"Manage Ollama Models": "Hantera Ollama-modeller",
+	"March": "",
 	"Max Tokens": "Max antal tokens",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Högst 3 modeller kan laddas ner samtidigt. Vänligen försök igen senare.",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
 	"Minimum Score": "",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
@@ -255,11 +284,15 @@
 	"Name your modelfile": "Namnge din modelfil",
 	"New Chat": "Ny chatt",
 	"New Password": "Nytt lösenord",
+	"No results found": "",
+	"No source available": "",
 	"Not factually correct": "",
 	"Not sure what to add?": "Inte säker på vad du ska lägga till?",
 	"Not sure what to write? Switch to": "Inte säker på vad du ska skriva? Växla till",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
 	"Notifications": "Notifikationer",
+	"November": "",
+	"October": "",
 	"Off": "Av",
 	"Okay, Let's Go!": "Okej, nu kör vi!",
 	"OLED Dark": "",
@@ -283,6 +316,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "eller",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Parametrar",
 	"Password": "Lösenord",
 	"PDF document (.pdf)": "",
@@ -292,11 +326,15 @@
 	"Plain text (.txt)": "",
 	"Playground": "Lekplats",
 	"Positive attitude": "",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
 	"Profile Image": "",
+	"Prompt": "",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
 	"Prompt Content": "Promptinnehåll",
 	"Prompt suggestions": "Förslag",
 	"Prompts": "Prompts",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Dra en modell från Ollama.com",
 	"Pull Progress": "Dra framsteg",
 	"Query Params": "Frågeparametrar",
@@ -309,9 +347,12 @@
 	"Regenerate": "",
 	"Release Notes": "Versionsinformation",
 	"Remove": "",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "Upprepa senaste N",
 	"Repeat Penalty": "Upprepa straff",
 	"Request Mode": "Begär läge",
+	"Reranking Model": "",
 	"Reranking model disabled": "",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "Återställ vektorlager",
@@ -337,12 +378,17 @@
 	"Select a mode": "Välj ett läge",
 	"Select a model": "Välj en modell",
 	"Select an Ollama instance": "Välj en Ollama-instans",
+	"Select model": "",
 	"Send a Message": "Skicka ett meddelande",
 	"Send message": "Skicka meddelande",
+	"September": "",
 	"Server connection verified": "Serveranslutning verifierad",
 	"Set as default": "Ange som standard",
 	"Set Default Model": "Ange standardmodell",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "Ange bildstorlek",
+	"Set Model": "Ställ in modell",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "Ange steg",
 	"Set Title Auto-Generation Model": "Ange modell för automatisk generering av titel",
 	"Set Voice": "Ange röst",
@@ -361,6 +407,7 @@
 	"Sign Out": "Logga ut",
 	"Sign up": "Registrera dig",
 	"Signing in": "",
+	"Source": "",
 	"Speech recognition error: {{error}}": "Fel vid taligenkänning: {{error}}",
 	"Speech-to-Text Engine": "Tal-till-text-motor",
 	"SpeechRecognition API is not supported in this browser.": "SpeechRecognition API stöds inte i denna webbläsare.",
@@ -370,6 +417,7 @@
 	"Subtitle (e.g. about the Roman Empire)": "",
 	"Success": "Framgång",
 	"Successfully updated.": "Uppdaterades framgångsrikt.",
+	"Suggested": "",
 	"Sync All": "Synkronisera allt",
 	"System": "System",
 	"System Prompt": "Systemprompt",
@@ -390,11 +438,13 @@
 	"Title": "Titel",
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "Automatisk generering av titel",
+	"Title cannot be an empty string.": "",
 	"Title Generation Prompt": "Titelgenereringsprompt",
 	"to": "till",
 	"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 chat input.": "till chattinmatning.",
+	"Today": "",
 	"Toggle settings": "Växla inställningar",
 	"Toggle sidebar": "Växla sidofält",
 	"Top K": "Topp K",
@@ -405,11 +455,7 @@
 	"Uh-oh! There was an issue connecting to {{provider}}.": "Oj då! Det uppstod ett problem med att ansluta till {{provider}}.",
 	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Okänd filtyp '{{file_type}}', men accepterar och behandlar som vanlig text",
 	"Update and Copy Link": "",
-	"Update Embedding Model": "",
-	"Update embedding model (e.g. {{model}})": "",
 	"Update password": "Uppdatera lösenord",
-	"Update Reranking Model": "",
-	"Update reranking model (e.g. {{model}})": "",
 	"Upload a GGUF model": "Ladda upp en GGUF-modell",
 	"Upload files": "Ladda upp filer",
 	"Upload Progress": "Uppladdningsförlopp",
@@ -427,6 +473,8 @@
 	"Version": "Version",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Webb",
+	"Web Loader Settings": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "WebUI-tillägg",
 	"WebUI Settings": "WebUI-inställningar",
@@ -436,8 +484,12 @@
 	"Whisper (Local)": "Whisper (lokal)",
 	"Write a prompt suggestion (e.g. Who are you?)": "Skriv ett förslag (t.ex. Vem är du?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Skriv en sammanfattning på 50 ord som sammanfattar [ämne eller nyckelord].",
+	"Yesterday": "",
 	"You": "Du",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "Du är en hjälpsam assistent.",
 	"You're now logged in.": "Du är nu inloggad.",
-	"Youtube": ""
+	"Youtube": "",
+	"Youtube Loader Settings": ""
 }

+ 134 - 82
src/lib/i18n/locales/tr-TR/translation.json

@@ -4,29 +4,31 @@
 	"(e.g. `sh webui.sh --api`)": "(örn. `sh webui.sh --api`)",
 	"(latest)": "(en son)",
 	"{{modelName}} is thinking...": "{{modelName}} düşünüyor...",
-	"{{user}}'s Chats": "",
+	"{{user}}'s Chats": "{{user}} Sohbetleri",
 	"{{webUIName}} Backend Required": "{{webUIName}} Arkayüz Gerekli",
 	"a user": "bir kullanıcı",
 	"About": "Hakkında",
 	"Account": "Hesap",
-	"Accurate information": "",
+	"Accurate information": "Doğru bilgi",
 	"Add a model": "Bir model ekleyin",
 	"Add a model tag name": "Bir model etiket adı ekleyin",
 	"Add a short description about what this modelfile does": "Bu model dosyasının ne yaptığı hakkında kısa bir açıklama ekleyin",
 	"Add a short title for this prompt": "Bu prompt için kısa bir başlık ekleyin",
 	"Add a tag": "Bir etiket ekleyin",
+	"Add custom prompt": "",
 	"Add Docs": "Dökümanlar Ekle",
 	"Add Files": "Dosyalar Ekle",
 	"Add message": "Mesaj ekle",
-	"Add Model": "",
-	"Add Tags": "etiketler ekle",
-	"Add User": "",
+	"Add Model": "Model Ekle",
+	"Add Tags": "Etiketler ekle",
+	"Add User": "Kullanıcı Ekle",
 	"Adjusting these settings will apply changes universally to all users.": "Bu ayarları ayarlamak değişiklikleri tüm kullanıcılara evrensel olarak uygular.",
 	"admin": "yönetici",
 	"Admin Panel": "Yönetici Paneli",
 	"Admin Settings": "Yönetici Ayarları",
 	"Advanced Parameters": "Gelişmiş Parametreler",
 	"all": "tümü",
+	"All Documents": "",
 	"All Users": "Tüm Kullanıcılar",
 	"Allow": "İzin ver",
 	"Allow Chat Deletion": "Sohbet Silmeye İzin Ver",
@@ -34,26 +36,32 @@
 	"Already have an account?": "Zaten bir hesabınız mı var?",
 	"an assistant": "bir asistan",
 	"and": "ve",
+	"and create a new shared link.": "",
 	"API Base URL": "API Temel URL",
 	"API Key": "API Anahtarı",
-	"API Key created.": "",
-	"API keys": "",
+	"API Key created.": "API Anahtarı oluşturuldu.",
+	"API keys": "API anahtarları",
 	"API RPM": "API RPM",
-	"Archive": "",
-	"Archived Chats": "sohbet kaydı",
+	"April": "",
+	"Archive": "Arşiv",
+	"Archived Chats": "Arşivlenmiş Sohbetler",
 	"are allowed - Activate this command by typing": "izin verilir - Bu komutu yazarak etkinleştirin",
 	"Are you sure?": "Emin misiniz?",
-	"Attention to detail": "",
+	"Attach file": "",
+	"Attention to detail": "Ayrıntılara dikkat",
 	"Audio": "Ses",
+	"August": "",
 	"Auto-playback response": "Yanıtı otomatik oynatma",
 	"Auto-send input after 3 sec.": "3 saniye sonra otomatik olarak gönder",
 	"AUTOMATIC1111 Base URL": "AUTOMATIC1111 Temel URL",
 	"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 Temel URL gereklidir.",
 	"available!": "mevcut!",
 	"Back": "Geri",
-	"Bad Response": "",
-	"Being lazy": "",
+	"Bad Response": "Kötü Yanıt",
+	"before": "",
+	"Being lazy": "Tembelleşiyor",
 	"Builder Mode": "Oluşturucu Modu",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "İptal",
 	"Categories": "Kategoriler",
 	"Change Password": "Parola Değiştir",
@@ -68,18 +76,20 @@
 	"Chunk Overlap": "Chunk Çakışması",
 	"Chunk Params": "Chunk Parametreleri",
 	"Chunk Size": "Chunk Boyutu",
+	"Citation": "",
 	"Click here for help.": "Yardım için buraya tıklayın.",
+	"Click here to": "",
 	"Click here to check other modelfiles.": "Diğer model dosyalarını kontrol etmek için buraya tıklayın.",
 	"Click here to select": "Seçmek için buraya tıklayın",
-	"Click here to select a csv file.": "",
+	"Click here to select a csv file.": "Bir CSV dosyası seçmek için buraya tıklayın.",
 	"Click here to select documents.": "Belgeleri seçmek için buraya tıklayın.",
 	"click here.": "buraya tıklayın.",
 	"Click on the user role button to change a user's role.": "Bir kullanıcının rolünü değiştirmek için kullanıcı rolü düğmesine tıklayın.",
 	"Close": "Kapat",
 	"Collection": "Koleksiyon",
-	"ComfyUI": "",
-	"ComfyUI Base URL": "",
-	"ComfyUI Base URL is required.": "",
+	"ComfyUI": "ComfyUI",
+	"ComfyUI Base URL": "ComfyUI Temel URL",
+	"ComfyUI Base URL is required.": "ComfyUI Temel URL gerekli.",
 	"Command": "Komut",
 	"Confirm Password": "Parolayı Onayla",
 	"Connections": "Bağlantılar",
@@ -87,42 +97,47 @@
 	"Context Length": "Bağlam Uzunluğu",
 	"Continue Response": "",
 	"Conversation Mode": "Sohbet Modu",
-	"Copied shared chat URL to clipboard!": "",
-	"Copy": "",
+	"Copied shared chat URL to clipboard!": "Paylaşılan sohbet URL'si panoya kopyalandı!",
+	"Copy": "Kopyala",
 	"Copy last code block": "Son kod bloğunu kopyala",
 	"Copy last response": "Son yanıtı kopyala",
-	"Copy Link": "",
+	"Copy Link": "Bağlantıyı Kopyala",
 	"Copying to clipboard was successful!": "Panoya kopyalama başarılı!",
 	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Aşağıdaki sorgu için başlık olarak 3-5 kelimelik kısa ve öz bir ifade oluşturun, 3-5 kelime sınırına kesinlikle uyun ve 'başlık' kelimesini kullanmaktan kaçının:",
 	"Create a modelfile": "Bir model dosyası oluştur",
 	"Create Account": "Hesap Oluştur",
+	"Create new key": "",
+	"Create new secret key": "",
 	"Created at": "Oluşturulma tarihi",
-	"Created At": "",
+	"Created At": "Şu Tarihte Oluşturuldu:",
 	"Current Model": "Mevcut Model",
 	"Current Password": "Mevcut Parola",
 	"Custom": "Özel",
 	"Customize Ollama models for a specific purpose": "Ollama modellerini belirli bir amaç için özelleştirin",
 	"Dark": "Koyu",
+	"Dashboard": "",
 	"Database": "Veritabanı",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
+	"December": "",
 	"Default": "Varsayılan",
 	"Default (Automatic1111)": "Varsayılan (Automatic1111)",
-	"Default (SentenceTransformers)": "",
+	"Default (SentenceTransformers)": "Varsayılan (SentenceTransformers)",
 	"Default (Web API)": "Varsayılan (Web API)",
 	"Default model updated": "Varsayılan model güncellendi",
 	"Default Prompt Suggestions": "Varsayılan Prompt Önerileri",
 	"Default User Role": "Varsayılan Kullanıcı Rolü",
 	"delete": "sil",
-	"Delete": "",
+	"Delete": "Sil",
 	"Delete a model": "Bir modeli sil",
 	"Delete chat": "Sohbeti sil",
-	"Delete Chat": "",
+	"Delete Chat": "Sohbeti Sil",
 	"Delete Chats": "Sohbetleri Sil",
-	"Delete User": "",
+	"delete this link": "",
+	"Delete User": "Kullanıcıyı Sil",
 	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} silindi",
-	"Deleted {{tagName}}": "",
+	"Deleted {{tagName}}": "{{tagName}} silindi",
 	"Description": "Açıklama",
-	"Didn't fully follow instructions": "",
+	"Didn't fully follow instructions": "Talimatları tam olarak takip etmedi",
 	"Disabled": "Devre Dışı",
 	"Discover a modelfile": "Bir model dosyası keşfedin",
 	"Discover a prompt": "Bir prompt keşfedin",
@@ -135,25 +150,28 @@
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "herhangi bir harici bağlantı yapmaz ve verileriniz güvenli bir şekilde yerel olarak barındırılan sunucunuzda kalır.",
 	"Don't Allow": "İzin Verme",
 	"Don't have an account?": "Hesabınız yok mu?",
-	"Don't like the style": "",
-	"Download": "",
+	"Don't like the style": "Tarzını beğenmedim",
+	"Download": "İndir",
+	"Download canceled": "",
 	"Download Database": "Veritabanını İndir",
 	"Drop any files here to add to the conversation": "Sohbete eklemek istediğiniz dosyaları buraya bırakın",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "örn. '30s', '10m'. Geçerli zaman birimleri 's', 'm', 'h'.",
-	"Edit": "",
+	"Edit": "Düzenle",
 	"Edit Doc": "Belgeyi Düzenle",
 	"Edit User": "Kullanıcıyı Düzenle",
 	"Email": "E-posta",
-	"Embedding Model Engine": "",
-	"Embedding model set to \"{{embedding_model}}\"": "",
+	"Embedding Model": "",
+	"Embedding Model Engine": "Gömme Modeli Motoru",
+	"Embedding model set to \"{{embedding_model}}\"": "Gömme modeli \"{{embedding_model}}\" olarak ayarlandı",
 	"Enable Chat History": "Sohbet Geçmişini Etkinleştir",
 	"Enable New Sign Ups": "Yeni Kayıtları Etkinleştir",
 	"Enabled": "Etkin",
-	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
+	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "CSV dosyanızın şu sırayla 4 sütun içerdiğinden emin olun: İsim, E-posta, Şifre, Rol.",
 	"Enter {{role}} message here": "Buraya {{role}} mesajını girin",
 	"Enter Chunk Overlap": "Chunk Örtüşmesini Girin",
 	"Enter Chunk Size": "Chunk Boyutunu Girin",
 	"Enter Image Size (e.g. 512x512)": "Görüntü Boyutunu Girin (örn. 512x512)",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "LiteLLM API Ana URL'sini Girin (litellm_params.api_base)",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "LiteLLM API Anahtarını Girin (litellm_params.api_key)",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "LiteLLM API RPM'ini Girin (litellm_params.rpm)",
@@ -161,42 +179,45 @@
 	"Enter Max Tokens (litellm_params.max_tokens)": "Maksimum Token Sayısını Girin (litellm_params.max_tokens)",
 	"Enter model tag (e.g. {{modelTag}})": "Model etiketini girin (örn. {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "Adım Sayısını Girin (örn. 50)",
-	"Enter Score": "",
+	"Enter Score": "Skoru Girin",
 	"Enter stop sequence": "Durdurma dizisini girin",
 	"Enter Top K": "Top K'yı girin",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "URL'yi Girin (örn. http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "E-postanızı Girin",
 	"Enter Your Full Name": "Tam Adınızı Girin",
 	"Enter Your Password": "Parolanızı Girin",
-	"Enter Your Role": "",
+	"Enter Your Role": "Rolünüzü Girin",
 	"Experimental": "Deneysel",
 	"Export All Chats (All Users)": "Tüm Sohbetleri Dışa Aktar (Tüm Kullanıcılar)",
 	"Export Chats": "Sohbetleri Dışa Aktar",
 	"Export Documents Mapping": "Belge Eşlemesini Dışa Aktar",
 	"Export Modelfiles": "Model Dosyalarını Dışa Aktar",
 	"Export Prompts": "Promptları Dışa Aktar",
-	"Failed to create API Key.": "",
+	"Failed to create API Key.": "API Anahtarı oluşturulamadı.",
 	"Failed to read clipboard contents": "Pano içeriği okunamadı",
-	"Feel free to add specific details": "",
+	"February": "",
+	"Feel free to add specific details": "Spesifik ayrıntılar eklemekten çekinmeyin",
 	"File Mode": "Dosya Modu",
 	"File not found.": "Dosya bulunamadı.",
 	"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Parmak izi sahteciliği tespit edildi: Avatar olarak baş harfler kullanılamıyor. Varsayılan profil resmine dönülüyor.",
 	"Fluidly stream large external response chunks": "Büyük harici yanıt chunklarını akıcı bir şekilde yayınlayın",
 	"Focus chat input": "Sohbet girişine odaklan",
-	"Followed instructions perfectly": "",
+	"Followed instructions perfectly": "Talimatları mükemmel şekilde takip etti",
 	"Format your variables using square brackets like this:": "Değişkenlerinizi şu şekilde kare parantezlerle biçimlendirin:",
 	"From (Base Model)": "(Temel Model)'den",
 	"Full Screen Mode": "Tam Ekran Modu",
 	"General": "Genel",
 	"General Settings": "Genel Ayarlar",
-	"Generation Info": "",
-	"Good Response": "",
-	"has no conversations.": "",
+	"Generation Info": "Üretim Bilgisi",
+	"Good Response": "İyi Yanıt",
+	"has no conversations.": "hiç konuşması yok.",
 	"Hello, {{name}}": "Merhaba, {{name}}",
+	"Help": "",
 	"Hide": "Gizle",
 	"Hide Additional Params": "Ek Parametreleri Gizle",
 	"How can I help you today?": "Bugün size nasıl yardımcı olabilirim?",
-	"Hybrid Search": "",
+	"Hybrid Search": "Karma Arama",
 	"Image Generation (Experimental)": "Görüntü Oluşturma (Deneysel)",
 	"Image Generation Engine": "Görüntü Oluşturma Motoru",
 	"Image Settings": "Görüntü Ayarları",
@@ -206,15 +227,20 @@
 	"Import Modelfiles": "Model Dosyalarını İçe Aktar",
 	"Import Prompts": "Promptları İçe Aktar",
 	"Include `--api` flag when running stable-diffusion-webui": "stable-diffusion-webui çalıştırılırken `--api` bayrağını dahil edin",
+	"Input commands": "",
 	"Interface": "Arayüz",
+	"Invalid Tag": "",
+	"January": "",
 	"join our Discord for help.": "yardım için Discord'umuza katılın.",
 	"JSON": "JSON",
+	"July": "",
+	"June": "",
 	"JWT Expiration": "JWT Bitişi",
 	"JWT Token": "JWT Token",
 	"Keep Alive": "Canlı Tut",
 	"Keyboard shortcuts": "Klavye kısayolları",
 	"Language": "Dil",
-	"Last Active": "",
+	"Last Active": "Son Aktivite",
 	"Light": "Açık",
 	"Listening...": "Dinleniyor...",
 	"LLMs can make mistakes. Verify important information.": "LLM'ler hata yapabilir. Önemli bilgileri doğrulayın.",
@@ -223,14 +249,17 @@
 	"Manage LiteLLM Models": "LiteLLM Modellerini Yönet",
 	"Manage Models": "Modelleri Yönet",
 	"Manage Ollama Models": "Ollama Modellerini Yönet",
+	"March": "",
 	"Max Tokens": "Maksimum Token",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Aynı anda en fazla 3 model indirilebilir. Lütfen daha sonra tekrar deneyin.",
-	"Minimum Score": "",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
+	"Minimum Score": "Minimum Skor",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
 	"Mirostat Tau": "Mirostat Tau",
 	"MMMM DD, YYYY": "DD MMMM YYYY",
-	"MMMM DD, YYYY HH:mm": "",
+	"MMMM DD, YYYY HH:mm": "DD MMMM YYYY HH:mm",
 	"Model '{{modelName}}' has been successfully downloaded.": "'{{modelName}}' başarıyla indirildi.",
 	"Model '{{modelTag}}' is already in queue for downloading.": "'{{modelTag}}' zaten indirme sırasında.",
 	"Model {{modelId}} not found": "{{modelId}} bulunamadı",
@@ -246,7 +275,7 @@
 	"Modelfile Content": "Model Dosyası İçeriği",
 	"Modelfiles": "Model Dosyaları",
 	"Models": "Modeller",
-	"More": "",
+	"More": "Daha Fazla",
 	"My Documents": "Belgelerim",
 	"My Modelfiles": "Model Dosyalarım",
 	"My Prompts": "Promptlarım",
@@ -255,15 +284,19 @@
 	"Name your modelfile": "Model dosyanıza ad verin",
 	"New Chat": "Yeni Sohbet",
 	"New Password": "Yeni Parola",
-	"Not factually correct": "",
+	"No results found": "",
+	"No source available": "",
+	"Not factually correct": "Gerçeklere göre doğru değil",
 	"Not sure what to add?": "Ne ekleyeceğinizden emin değil misiniz?",
 	"Not sure what to write? Switch to": "Ne yazacağınızdan emin değil misiniz? Şuraya geçin",
-	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
+	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Not: Minimum bir skor belirlerseniz, arama yalnızca minimum skora eşit veya daha yüksek bir skora sahip belgeleri getirecektir.",
 	"Notifications": "Bildirimler",
+	"November": "",
+	"October": "",
 	"Off": "Kapalı",
 	"Okay, Let's Go!": "Tamam, Hadi Başlayalım!",
-	"OLED Dark": "",
-	"Ollama": "",
+	"OLED Dark": "OLED Koyu",
+	"Ollama": "Ollama",
 	"Ollama Base URL": "Ollama Temel URL",
 	"Ollama Version": "Ollama Sürümü",
 	"On": "Açık",
@@ -276,44 +309,52 @@
 	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "Yeni sohbet aç",
-	"OpenAI": "",
+	"OpenAI": "OpenAI",
 	"OpenAI API": "OpenAI API",
-	"OpenAI API Config": "",
+	"OpenAI API Config": "OpenAI API Konfigürasyonu",
 	"OpenAI API Key is required.": "OpenAI API Anahtarı gereklidir.",
-	"OpenAI URL/Key required.": "",
+	"OpenAI URL/Key required.": "OpenAI URL/Anahtar gereklidir.",
 	"or": "veya",
-	"Other": "",
+	"Other": "Diğer",
+	"Overview": "",
 	"Parameters": "Parametreler",
 	"Password": "Parola",
-	"PDF document (.pdf)": "",
+	"PDF document (.pdf)": "PDF belgesi (.pdf)",
 	"PDF Extract Images (OCR)": "PDF Görüntülerini Çıkart (OCR)",
 	"pending": "beklemede",
 	"Permission denied when accessing microphone: {{error}}": "Mikrofona erişim izni reddedildi: {{error}}",
-	"Plain text (.txt)": "",
+	"Plain text (.txt)": "Düz metin (.txt)",
 	"Playground": "Oyun Alanı",
-	"Positive attitude": "",
-	"Profile Image": "",
-	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
+	"Positive attitude": "Olumlu yaklaşım",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
+	"Profile Image": "Profil Fotoğrafı",
+	"Prompt": "",
+	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Prompt (örn. Roma İmparatorluğu hakkında ilginç bir bilgi verin)",
 	"Prompt Content": "Prompt İçeriği",
 	"Prompt suggestions": "Prompt önerileri",
 	"Prompts": "Promptlar",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Ollama.com'dan bir model çekin",
 	"Pull Progress": "Çekme İlerlemesi",
 	"Query Params": "Sorgu Parametreleri",
 	"RAG Template": "RAG Şablonu",
 	"Raw Format": "Ham Format",
-	"Read Aloud": "",
+	"Read Aloud": "Sesli Oku",
 	"Record voice": "Ses kaydı yap",
 	"Redirecting you to OpenWebUI Community": "OpenWebUI Topluluğuna yönlendiriliyorsunuz",
-	"Refused when it shouldn't have": "",
-	"Regenerate": "",
+	"Refused when it shouldn't have": "Reddedilmemesi gerekirken reddedildi",
+	"Regenerate": "Tekrar Oluştur",
 	"Release Notes": "Sürüm Notları",
-	"Remove": "",
+	"Remove": "Kaldır",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "Son N'yi Tekrar Et",
 	"Repeat Penalty": "Tekrar Cezası",
 	"Request Mode": "İstek Modu",
-	"Reranking model disabled": "",
-	"Reranking model set to \"{{reranking_model}}\"": "",
+	"Reranking Model": "",
+	"Reranking model disabled": "Yeniden sıralama modeli devre dışı bırakıldı",
+	"Reranking model set to \"{{reranking_model}}\"": "Yeniden sıralama modeli \"{{reranking_model}}\" olarak ayarlandı",
 	"Reset Vector Storage": "Vektör Depolamayı Sıfırla",
 	"Response AutoCopy to Clipboard": "Yanıtı Panoya Otomatik Kopyala",
 	"Role": "Rol",
@@ -328,7 +369,7 @@
 	"Scan complete!": "Tarama tamamlandı!",
 	"Scan for documents from {{path}}": "{{path}} dizininden belgeleri tarayın",
 	"Search": "Ara",
-	"Search a model": "",
+	"Search a model": "Bir model ara",
 	"Search Documents": "Belgeleri Ara",
 	"Search Prompts": "Prompt Ara",
 	"See readme.md for instructions": "Yönergeler için readme.md dosyasına bakın",
@@ -337,19 +378,24 @@
 	"Select a mode": "Bir mod seç",
 	"Select a model": "Bir model seç",
 	"Select an Ollama instance": "Bir Ollama örneği seçin",
+	"Select model": "",
 	"Send a Message": "Bir Mesaj Gönder",
 	"Send message": "Mesaj gönder",
+	"September": "",
 	"Server connection verified": "Sunucu bağlantısı doğrulandı",
 	"Set as default": "Varsayılan olarak ayarla",
 	"Set Default Model": "Varsayılan Modeli Ayarla",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "Görüntü Boyutunu Ayarla",
+	"Set Model": "Model Ayarla",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "Adımları Ayarla",
 	"Set Title Auto-Generation Model": "Otomatik Başlık Oluşturma Modelini Ayarla",
 	"Set Voice": "Ses Ayarla",
 	"Settings": "Ayarlar",
 	"Settings saved successfully!": "Ayarlar başarıyla kaydedildi!",
-	"Share": "",
-	"Share Chat": "",
+	"Share": "Paylaş",
+	"Share Chat": "Sohbeti Paylaş",
 	"Share to OpenWebUI Community": "OpenWebUI Topluluğu ile Paylaş",
 	"short-summary": "kısa-özet",
 	"Show": "Göster",
@@ -360,41 +406,45 @@
 	"Sign in": "Oturum aç",
 	"Sign Out": "Çıkış Yap",
 	"Sign up": "Kaydol",
-	"Signing in": "",
+	"Signing in": "Oturum açma",
+	"Source": "",
 	"Speech recognition error: {{error}}": "Konuşma tanıma hatası: {{error}}",
 	"Speech-to-Text Engine": "Konuşmadan Metne Motoru",
 	"SpeechRecognition API is not supported in this browser.": "SpeechRecognition API bu tarayıcıda desteklenmiyor.",
 	"Stop Sequence": "Diziyi Durdur",
 	"STT Settings": "STT Ayarları",
 	"Submit": "Gönder",
-	"Subtitle (e.g. about the Roman Empire)": "",
+	"Subtitle (e.g. about the Roman Empire)": "Alt başlık (örn. Roma İmparatorluğu hakkında)",
 	"Success": "Başarılı",
 	"Successfully updated.": "Başarıyla güncellendi.",
+	"Suggested": "",
 	"Sync All": "Tümünü Senkronize Et",
 	"System": "Sistem",
 	"System Prompt": "Sistem Promptu",
 	"Tags": "Etiketler",
-	"Tell us more:": "",
+	"Tell us more:": "Bize daha fazlasını anlat:",
 	"Temperature": "Temperature",
 	"Template": "Şablon",
 	"Text Completion": "Metin Tamamlama",
 	"Text-to-Speech Engine": "Metinden Sese Motoru",
 	"Tfs Z": "Tfs Z",
-	"Thanks for your feedback!": "",
-	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "",
+	"Thanks for your feedback!": "Geri bildiriminiz için teşekkürler!",
+	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Puan 0.0 (%0) ile 1.0 (%100) arasında bir değer olmalıdır.",
 	"Theme": "Tema",
 	"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Bu, önemli konuşmalarınızın güvenli bir şekilde arkayüz veritabanınıza kaydedildiğini garantiler. Teşekkür ederiz!",
 	"This setting does not sync across browsers or devices.": "Bu ayar tarayıcılar veya cihazlar arasında senkronize edilmez.",
-	"Thorough explanation": "",
+	"Thorough explanation": "Kapsamlı açıklama",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "İpucu: Her değiştirmeden sonra sohbet girişinde tab tuşuna basarak birden fazla değişken yuvasını art arda güncelleyin.",
 	"Title": "Başlık",
-	"Title (e.g. Tell me a fun fact)": "",
+	"Title (e.g. Tell me a fun fact)": "Başlık (e.g. Bana ilginç bir bilgi ver)",
 	"Title Auto-Generation": "Otomatik Başlık Oluşturma",
+	"Title cannot be an empty string.": "",
 	"Title Generation Prompt": "Başlık Oluşturma Promptu",
 	"to": "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 chat input.": "sohbet girişine.",
+	"Today": "",
 	"Toggle settings": "Ayarları Aç/Kapat",
 	"Toggle sidebar": "Kenar Çubuğunu Aç/Kapat",
 	"Top K": "Top K",
@@ -404,12 +454,8 @@
 	"Type Hugging Face Resolve (Download) URL": "Hugging Face Resolve (Download) URL'sini Yazın",
 	"Uh-oh! There was an issue connecting to {{provider}}.": "Ah! {{provider}}'a bağlanırken bir sorun oluştu.",
 	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Bilinmeyen Dosya Türü '{{file_type}}', ancak düz metin olarak kabul ediliyor ve işleniyor",
-	"Update and Copy Link": "",
-	"Update Embedding Model": "",
-	"Update embedding model (e.g. {{model}})": "",
+	"Update and Copy Link": "Güncelle ve Bağlantıyı Kopyala",
 	"Update password": "Parolayı Güncelle",
-	"Update Reranking Model": "",
-	"Update reranking model (e.g. {{model}})": "",
 	"Upload a GGUF model": "Bir GGUF modeli yükle",
 	"Upload files": "Dosyaları Yükle",
 	"Upload Progress": "Yükleme İlerlemesi",
@@ -425,9 +471,11 @@
 	"variable": "değişken",
 	"variable to have them replaced with clipboard content.": "panodaki içerikle değiştirilmesi için değişken.",
 	"Version": "Sürüm",
-	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
+	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Uyarı: Gömme modelinizi günceller veya değiştirirseniz, tüm belgeleri yeniden içe aktarmanız gerekecektir.",
 	"Web": "Web",
-	"Webhook URL": "",
+	"Web Loader Settings": "",
+	"Web Params": "",
+	"Webhook URL": "Webhook URL",
 	"WebUI Add-ons": "WebUI Eklentileri",
 	"WebUI Settings": "WebUI Ayarları",
 	"WebUI will make requests to": "WebUI, isteklerde bulunacak:",
@@ -436,8 +484,12 @@
 	"Whisper (Local)": "Whisper (Yerel)",
 	"Write a prompt suggestion (e.g. Who are you?)": "Bir prompt önerisi yazın (örn. Sen kimsin?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "[Konuyu veya anahtar kelimeyi] özetleyen 50 kelimelik bir özet yazın.",
+	"Yesterday": "",
 	"You": "Siz",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "Sen yardımcı bir asistansın.",
 	"You're now logged in.": "Şimdi oturum açtınız.",
-	"Youtube": ""
+	"Youtube": "Youtube",
+	"Youtube Loader Settings": ""
 }

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

@@ -15,6 +15,7 @@
 	"Add a short description about what this modelfile does": "Додати короткий опис того, що робить цей файл моделі",
 	"Add a short title for this prompt": "Додати коротку назву для цього промту",
 	"Add a tag": "Додайте тег",
+	"Add custom prompt": "",
 	"Add Docs": "Додати документи",
 	"Add Files": "Додати файли",
 	"Add message": "Додати повідомлення",
@@ -27,6 +28,7 @@
 	"Admin Settings": "Налаштування адміністратора",
 	"Advanced Parameters": "Розширені параметри",
 	"all": "всі",
+	"All Documents": "",
 	"All Users": "Всі користувачі",
 	"Allow": "Дозволити",
 	"Allow Chat Deletion": "Дозволити видалення чату",
@@ -34,17 +36,21 @@
 	"Already have an account?": "Вже є обліковий запис?",
 	"an assistant": "асистента",
 	"and": "та",
+	"and create a new shared link.": "",
 	"API Base URL": "Базова адреса URL API",
 	"API Key": "Ключ API",
 	"API Key created.": "",
 	"API keys": "",
 	"API RPM": "API RPM",
+	"April": "",
 	"Archive": "",
 	"Archived Chats": "запис чату",
 	"are allowed - Activate this command by typing": "дозволено - активізуйте цю команду набором",
 	"Are you sure?": "Ви впевнені?",
+	"Attach file": "",
 	"Attention to detail": "",
 	"Audio": "Аудіо",
+	"August": "",
 	"Auto-playback response": "Автоматичне відтворення відповіді",
 	"Auto-send input after 3 sec.": "Автоматична відправка вводу через 3 сек.",
 	"AUTOMATIC1111 Base URL": "Базова адреса URL AUTOMATIC1111",
@@ -52,8 +58,10 @@
 	"available!": "доступно!",
 	"Back": "Назад",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "Режим конструктора",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "Скасувати",
 	"Categories": "Категорії",
 	"Change Password": "Змінити пароль",
@@ -68,7 +76,9 @@
 	"Chunk Overlap": "Перекриття фрагментів",
 	"Chunk Params": "Параметри фрагментів",
 	"Chunk Size": "Розмір фрагменту",
+	"Citation": "",
 	"Click here for help.": "Клацніть тут, щоб отримати допомогу.",
+	"Click here to": "",
 	"Click here to check other modelfiles.": "Клацніть тут, щоб перевірити інші файли моделей.",
 	"Click here to select": "Натисніть тут, щоб вибрати",
 	"Click here to select a csv file.": "",
@@ -96,6 +106,8 @@
 	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':",
 	"Create a modelfile": "Створити файл моделі",
 	"Create Account": "Створити обліковий запис",
+	"Create new key": "",
+	"Create new secret key": "",
 	"Created at": "Створено",
 	"Created At": "",
 	"Current Model": "Поточна модель",
@@ -103,8 +115,10 @@
 	"Custom": "Налаштувати",
 	"Customize Ollama models for a specific purpose": "Налаштувати моделі Ollama для конкретної мети",
 	"Dark": "Темна",
+	"Dashboard": "",
 	"Database": "База даних",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
+	"December": "",
 	"Default": "За замовчуванням",
 	"Default (Automatic1111)": "За замовчуванням (Automatic1111)",
 	"Default (SentenceTransformers)": "",
@@ -118,6 +132,7 @@
 	"Delete chat": "Видалити чат",
 	"Delete Chat": "",
 	"Delete Chats": "Видалити чати",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "Видалено {{deleteModelTag}}",
 	"Deleted {{tagName}}": "",
@@ -137,6 +152,7 @@
 	"Don't have an account?": "Немає облікового запису?",
 	"Don't like the style": "",
 	"Download": "",
+	"Download canceled": "",
 	"Download Database": "Завантажити базу даних",
 	"Drop any files here to add to the conversation": "Перетягніть сюди файли, щоб додати до розмови",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "напр. '30s','10m'. Дійсні одиниці часу: 'с', 'хв', 'г'.",
@@ -144,6 +160,7 @@
 	"Edit Doc": "Редагувати документ",
 	"Edit User": "Редагувати користувача",
 	"Email": "Електронна пошта",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "Увімкнути історію чату",
@@ -154,6 +171,7 @@
 	"Enter Chunk Overlap": "Введіть перекриття фрагменту",
 	"Enter Chunk Size": "Введіть розмір фрагменту",
 	"Enter Image Size (e.g. 512x512)": "Введіть розмір зображення (напр. 512x512)",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "Введіть URL-адресу API LiteLLM (litellm_params.api_base)",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "Введіть ключ API LiteLLM (litellm_params.api_key)",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Введіть RPM API LiteLLM (litellm_params.rpm)",
@@ -165,6 +183,7 @@
 	"Enter stop sequence": "Введіть символ зупинки",
 	"Enter Top K": "Введіть Top K",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "Введіть URL-адресу (напр. http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "Введіть вашу електронну пошту",
 	"Enter Your Full Name": "Введіть ваше ім'я",
 	"Enter Your Password": "Введіть ваш пароль",
@@ -177,6 +196,7 @@
 	"Export Prompts": "Експортувати промти",
 	"Failed to create API Key.": "",
 	"Failed to read clipboard contents": "Не вдалося прочитати вміст буфера обміну",
+	"February": "",
 	"Feel free to add specific details": "",
 	"File Mode": "Файловий режим",
 	"File not found.": "Файл не знайдено.",
@@ -193,6 +213,7 @@
 	"Good Response": "",
 	"has no conversations.": "",
 	"Hello, {{name}}": "Привіт, {{name}}",
+	"Help": "",
 	"Hide": "Приховати",
 	"Hide Additional Params": "Приховати додаткові параметри",
 	"How can I help you today?": "Чим я можу допомогти вам сьогодні?",
@@ -206,9 +227,14 @@
 	"Import Modelfiles": "Імпортувати файл моделі",
 	"Import Prompts": "Імпортувати промти",
 	"Include `--api` flag when running stable-diffusion-webui": "Включіть прапор `--api` при запуску stable-diffusion-webui",
+	"Input commands": "",
 	"Interface": "Інтерфейс",
+	"Invalid Tag": "",
+	"January": "",
 	"join our Discord for help.": "приєднуйтеся до нашого Discord для допомоги.",
 	"JSON": "JSON",
+	"July": "",
+	"June": "",
 	"JWT Expiration": "Термін дії JWT",
 	"JWT Token": "Токен JWT",
 	"Keep Alive": "Зберегти активність",
@@ -223,8 +249,11 @@
 	"Manage LiteLLM Models": "Керування моделями LiteLLM",
 	"Manage Models": "Керування моделями",
 	"Manage Ollama Models": "Керування моделями Ollama",
+	"March": "",
 	"Max Tokens": "Максимальна кількість токенів",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Максимум 3 моделі можна завантажити одночасно. Будь ласка, спробуйте пізніше.",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
 	"Minimum Score": "",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
@@ -255,11 +284,15 @@
 	"Name your modelfile": "Назвіть свій файл моделі",
 	"New Chat": "Новий чат",
 	"New Password": "Новий пароль",
+	"No results found": "",
+	"No source available": "",
 	"Not factually correct": "",
 	"Not sure what to add?": "Не впевнений, що додати?",
 	"Not sure what to write? Switch to": "Не впевнений, що писати? Переключитися на",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
 	"Notifications": "Сповіщення",
+	"November": "",
+	"October": "",
 	"Off": "Вимк",
 	"Okay, Let's Go!": "Гаразд, давайте почнемо!",
 	"OLED Dark": "",
@@ -283,6 +316,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "або",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Параметри",
 	"Password": "Пароль",
 	"PDF document (.pdf)": "",
@@ -292,11 +326,15 @@
 	"Plain text (.txt)": "",
 	"Playground": "Майданчик",
 	"Positive attitude": "",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
 	"Profile Image": "",
+	"Prompt": "",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
 	"Prompt Content": "Зміст промту",
 	"Prompt suggestions": "Швидкі промти",
 	"Prompts": "Промти",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Завантажити модель з Ollama.com",
 	"Pull Progress": "Прогрес завантаження",
 	"Query Params": "Параметри запиту",
@@ -309,9 +347,12 @@
 	"Regenerate": "",
 	"Release Notes": "Нотатки до випуску",
 	"Remove": "",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "Повторити останні N",
 	"Repeat Penalty": "Штраф за повторення",
 	"Request Mode": "Режим запиту",
+	"Reranking Model": "",
 	"Reranking model disabled": "",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "Скинути векторне сховище",
@@ -337,12 +378,17 @@
 	"Select a mode": "Оберіть режим",
 	"Select a model": "Виберіть модель",
 	"Select an Ollama instance": "Виберіть екземпляр Ollama",
+	"Select model": "",
 	"Send a Message": "Надіслати повідомлення",
 	"Send message": "Надіслати повідомлення",
+	"September": "",
 	"Server connection verified": "З'єднання з сервером підтверджено",
 	"Set as default": "Встановити за замовчуванням",
 	"Set Default Model": "Встановити модель за замовчуванням",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "Встановити розмір зображення",
+	"Set Model": "Встановити модель",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "Встановити кроки",
 	"Set Title Auto-Generation Model": "Встановити модель автогенерації заголовків",
 	"Set Voice": "Встановити голос",
@@ -361,6 +407,7 @@
 	"Sign Out": "Вийти",
 	"Sign up": "Зареєструватися",
 	"Signing in": "",
+	"Source": "",
 	"Speech recognition error: {{error}}": "Помилка розпізнавання мови: {{error}}",
 	"Speech-to-Text Engine": "Система розпізнавання мови",
 	"SpeechRecognition API is not supported in this browser.": "SpeechRecognition API не підтримується в цьому браузері.",
@@ -370,6 +417,7 @@
 	"Subtitle (e.g. about the Roman Empire)": "",
 	"Success": "Успіх",
 	"Successfully updated.": "Успішно оновлено.",
+	"Suggested": "",
 	"Sync All": "Синхронізувати все",
 	"System": "Система",
 	"System Prompt": "Системний промт",
@@ -390,11 +438,13 @@
 	"Title": "Заголовок",
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "Автогенерація заголовків",
+	"Title cannot be an empty string.": "",
 	"Title Generation Prompt": "Промт для генерування заголовків",
 	"to": "в",
 	"To access the available model names for downloading,": "Щоб отримати доступ до назв доступних для завантаження моделей,",
 	"To access the GGUF models available for downloading,": "Щоб отримати доступ до моделей GGUF, які можна завантажити,,",
 	"to chat input.": "в чаті.",
+	"Today": "",
 	"Toggle settings": "Переключити налаштування",
 	"Toggle sidebar": "Переключити бокову панель",
 	"Top K": "Top K",
@@ -405,11 +455,7 @@
 	"Uh-oh! There was an issue connecting to {{provider}}.": "Ой! Виникла проблема при підключенні до {{provider}}.",
 	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Невідомий тип файлу '{{file_type}}', але приймається та обробляється як звичайний текст",
 	"Update and Copy Link": "",
-	"Update Embedding Model": "",
-	"Update embedding model (e.g. {{model}})": "",
 	"Update password": "Оновити пароль",
-	"Update Reranking Model": "",
-	"Update reranking model (e.g. {{model}})": "",
 	"Upload a GGUF model": "Завантажити GGUF модель",
 	"Upload files": "Завантажити файли",
 	"Upload Progress": "Прогрес завантаження",
@@ -427,6 +473,8 @@
 	"Version": "Версія",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Веб",
+	"Web Loader Settings": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "Додатки WebUI",
 	"WebUI Settings": "Налаштування WebUI",
@@ -436,8 +484,12 @@
 	"Whisper (Local)": "Whisper (локально)",
 	"Write a prompt suggestion (e.g. Who are you?)": "Напишіть промт (напр. Хто ти?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Напишіть стислий зміст у 50 слів, який узагальнює [тема або ключове слово].",
+	"Yesterday": "",
 	"You": "Ви",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "Ви корисний асистент.",
 	"You're now logged in.": "Ви увійшли в систему.",
-	"Youtube": ""
+	"Youtube": "",
+	"Youtube Loader Settings": ""
 }

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

@@ -15,6 +15,7 @@
 	"Add a short description about what this modelfile does": "Thêm mô tả ngắn về việc tệp mô tả mô hình (modelfile) này làm gì",
 	"Add a short title for this prompt": "Thêm tiêu đề ngắn cho prompt này",
 	"Add a tag": "Thêm thẻ (tag)",
+	"Add custom prompt": "",
 	"Add Docs": "Thêm tài liệu",
 	"Add Files": "Thêm tệp",
 	"Add message": "Thêm tin nhắn",
@@ -27,6 +28,7 @@
 	"Admin Settings": "Cài đặt hệ thống",
 	"Advanced Parameters": "Các tham số Nâng cao",
 	"all": "tất cả",
+	"All Documents": "",
 	"All Users": "Danh sách người sử dụng",
 	"Allow": "Cho phép",
 	"Allow Chat Deletion": "Cho phép Xóa nội dung chat",
@@ -34,17 +36,21 @@
 	"Already have an account?": "Bạn đã có tài khoản?",
 	"an assistant": "trợ lý",
 	"and": "và",
+	"and create a new shared link.": "",
 	"API Base URL": "Đường dẫn tới API (API Base URL)",
 	"API Key": "API Key",
 	"API Key created.": "",
 	"API keys": "",
 	"API RPM": "API RPM",
+	"April": "",
 	"Archive": "",
 	"Archived Chats": "bản ghi trò chuyện",
 	"are allowed - Activate this command by typing": "được phép - Kích hoạt lệnh này bằng cách gõ",
 	"Are you sure?": "Bạn có chắc chắn không?",
+	"Attach file": "",
 	"Attention to detail": "Có sự chú ý đến chi tiết của vấn đề",
 	"Audio": "Âm thanh",
+	"August": "",
 	"Auto-playback response": "Tự động phát lại phản hồi (Auto-playback)",
 	"Auto-send input after 3 sec.": "Tự động gửi đầu vào sau 3 giây.",
 	"AUTOMATIC1111 Base URL": "Đường dẫn kết nối tới AUTOMATIC1111 (Base URL)",
@@ -52,8 +58,10 @@
 	"available!": "có sẵn!",
 	"Back": "Quay lại",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "Lười biếng",
 	"Builder Mode": "Chế độ Builder",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "Hủy bỏ",
 	"Categories": "Danh mục",
 	"Change Password": "Đổi Mật khẩu",
@@ -68,7 +76,9 @@
 	"Chunk Overlap": "Chồng lấn (overlap)",
 	"Chunk Params": "Cài đặt số lượng ký tự cho khối ký tự (chunk)",
 	"Chunk Size": "Kích thước khối (size)",
+	"Citation": "",
 	"Click here for help.": "Bấm vào đây để được trợ giúp.",
+	"Click here to": "",
 	"Click here to check other modelfiles.": "Bấm vào đây để kiểm tra các tệp mô tả mô hình (modelfiles) khác.",
 	"Click here to select": "Bấm vào đây để chọn",
 	"Click here to select a csv file.": "",
@@ -96,6 +106,8 @@
 	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Tạo một cụm từ súc tích, 3-5 từ làm tiêu đề cho truy vấn sau, tuân thủ nghiêm ngặt giới hạn 3-5 từ và tránh sử dụng từ 'tiêu đề':",
 	"Create a modelfile": "Tạo tệp mô tả cho mô hình",
 	"Create Account": "Tạo Tài khoản",
+	"Create new key": "",
+	"Create new secret key": "",
 	"Created at": "Được tạo vào lúc",
 	"Created At": "",
 	"Current Model": "Mô hình hiện tại",
@@ -103,8 +115,10 @@
 	"Custom": "Tùy chỉnh",
 	"Customize Ollama models for a specific purpose": "Tùy chỉnh các mô hình dựa trên Ollama cho một mục đích cụ thể",
 	"Dark": "Tối",
+	"Dashboard": "",
 	"Database": "Cơ sở dữ liệu",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
+	"December": "",
 	"Default": "Mặc định",
 	"Default (Automatic1111)": "Mặc định (Automatic1111)",
 	"Default (SentenceTransformers)": "",
@@ -118,6 +132,7 @@
 	"Delete chat": "Xóa nội dung chat",
 	"Delete Chat": "",
 	"Delete Chats": "Xóa nội dung chat",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "Đã xóa {{deleteModelTag}}",
 	"Deleted {{tagName}}": "",
@@ -137,6 +152,7 @@
 	"Don't have an account?": "Không có tài khoản?",
 	"Don't like the style": "Không thích phong cách trả lời",
 	"Download": "",
+	"Download canceled": "",
 	"Download Database": "Tải xuống Cơ sở dữ liệu",
 	"Drop any files here to add to the conversation": "Thả bất kỳ tệp nào ở đây để thêm vào nội dung chat",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "vd: '30s','10m'. Đơn vị thời gian hợp lệ là 's', 'm', 'h'.",
@@ -144,6 +160,7 @@
 	"Edit Doc": "Thay đổi tài liệu",
 	"Edit User": "Thay đổi thông tin người sử dụng",
 	"Email": "Email",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "Bật Lịch sử chat",
@@ -154,6 +171,7 @@
 	"Enter Chunk Overlap": "Nhập Chunk chồng lấn (overlap)",
 	"Enter Chunk Size": "Nhập Kích thước Chunk",
 	"Enter Image Size (e.g. 512x512)": "Nhập Kích thước ảnh (vd: 512x512)",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "Nhập URL Cơ bản API LiteLLM (litellm_params.api_base)",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "Nhập Khóa API LiteLLM (litellm_params.api_key)",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Nhập RPM API LiteLLM (litellm_params.rpm)",
@@ -165,6 +183,7 @@
 	"Enter stop sequence": "Nhập stop sequence",
 	"Enter Top K": "Nhập Top K",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "Nhập URL (vd: http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "Nhập Email của bạn",
 	"Enter Your Full Name": "Nhập Họ và Tên của bạn",
 	"Enter Your Password": "Nhập Mật khẩu của bạn",
@@ -177,6 +196,7 @@
 	"Export Prompts": "Tải các prompt về máy",
 	"Failed to create API Key.": "",
 	"Failed to read clipboard contents": "Không thể đọc nội dung clipboard",
+	"February": "",
 	"Feel free to add specific details": "Mô tả chi tiết về chất lượng của câu hỏi và phương án trả lời",
 	"File Mode": "Chế độ Tệp văn bản",
 	"File not found.": "Không tìm thấy tệp.",
@@ -193,6 +213,7 @@
 	"Good Response": "",
 	"has no conversations.": "",
 	"Hello, {{name}}": "Xin chào, {{name}}",
+	"Help": "",
 	"Hide": "Ẩn",
 	"Hide Additional Params": "Ẩn Các tham số bổ sung",
 	"How can I help you today?": "Tôi có thể giúp gì cho bạn hôm nay?",
@@ -206,9 +227,14 @@
 	"Import Modelfiles": "Nạp tệp mô tả",
 	"Import Prompts": "Nạp các prompt lên hệ thống",
 	"Include `--api` flag when running stable-diffusion-webui": "Bao gồm flag `--api` khi chạy stable-diffusion-webui",
+	"Input commands": "",
 	"Interface": "Giao diện",
+	"Invalid Tag": "",
+	"January": "",
 	"join our Discord for help.": "tham gia Discord của chúng tôi để được trợ giúp.",
 	"JSON": "JSON",
+	"July": "",
+	"June": "",
 	"JWT Expiration": "JWT Hết hạn",
 	"JWT Token": "Token JWT",
 	"Keep Alive": "Giữ kết nối",
@@ -223,8 +249,11 @@
 	"Manage LiteLLM Models": "Quản lý mô hình với LiteLLM",
 	"Manage Models": "Quản lý mô hình",
 	"Manage Ollama Models": "Quản lý mô hình với Ollama",
+	"March": "",
 	"Max Tokens": "Max Tokens",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Tối đa 3 mô hình có thể được tải xuống cùng lúc. Vui lòng thử lại sau.",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
 	"Minimum Score": "",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
@@ -255,11 +284,15 @@
 	"Name your modelfile": "Đặt tên cho tệp mô hình của bạn",
 	"New Chat": "Tạo cuộc trò chuyện mới",
 	"New Password": "Mật khẩu mới",
+	"No results found": "",
+	"No source available": "",
 	"Not factually correct": "Không chính xác so với thực tế",
 	"Not sure what to add?": "Không chắc phải thêm gì?",
 	"Not sure what to write? Switch to": "Không chắc phải viết gì? Chuyển sang",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
 	"Notifications": "Thông báo trên máy tính (Notification)",
+	"November": "",
+	"October": "",
 	"Off": "Tắt",
 	"Okay, Let's Go!": "Được rồi, Bắt đầu thôi!",
 	"OLED Dark": "",
@@ -283,6 +316,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "hoặc",
 	"Other": "Khác",
+	"Overview": "",
 	"Parameters": "Tham số",
 	"Password": "Mật khẩu",
 	"PDF document (.pdf)": "",
@@ -292,11 +326,15 @@
 	"Plain text (.txt)": "",
 	"Playground": "Thử nghiệm (Playground)",
 	"Positive attitude": "",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
 	"Profile Image": "",
+	"Prompt": "",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
 	"Prompt Content": "Nội dung prompt",
 	"Prompt suggestions": "Gợi ý prompt",
 	"Prompts": "Prompt",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Tải mô hình từ Ollama.com",
 	"Pull Progress": "Tiến trình Tải xuống",
 	"Query Params": "Tham số Truy vấn",
@@ -309,9 +347,12 @@
 	"Regenerate": "",
 	"Release Notes": "Mô tả những cập nhật mới",
 	"Remove": "",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "Repeat Last N",
 	"Repeat Penalty": "Repeat Penalty",
 	"Request Mode": "Request Mode",
+	"Reranking Model": "",
 	"Reranking model disabled": "",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "Cài đặt lại Vector Storage",
@@ -337,12 +378,17 @@
 	"Select a mode": "Chọn một chế độ",
 	"Select a model": "Chọn mô hình",
 	"Select an Ollama instance": "Chọn một thực thể Ollama",
+	"Select model": "",
 	"Send a Message": "Gửi yêu cầu",
 	"Send message": "Gửi yêu cầu",
+	"September": "",
 	"Server connection verified": "Kết nối máy chủ đã được xác minh",
 	"Set as default": "Đặt làm mặc định",
 	"Set Default Model": "Đặt Mô hình Mặc định",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "Đặt Kích thước ảnh",
+	"Set Model": "Thiết lập mô hình",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "Đặt Số Bước",
 	"Set Title Auto-Generation Model": "Đặt tiêu đề tự động",
 	"Set Voice": "Đặt Giọng nói",
@@ -361,6 +407,7 @@
 	"Sign Out": "Đăng xuất",
 	"Sign up": "Đăng ký",
 	"Signing in": "",
+	"Source": "",
 	"Speech recognition error: {{error}}": "Lỗi nhận dạng giọng nói: {{error}}",
 	"Speech-to-Text Engine": "Công cụ Nhận dạng Giọng nói",
 	"SpeechRecognition API is not supported in this browser.": "Trình duyệt này không hỗ trợ API Nhận dạng Giọng nói.",
@@ -370,6 +417,7 @@
 	"Subtitle (e.g. about the Roman Empire)": "",
 	"Success": "Thành công",
 	"Successfully updated.": "Đã cập nhật thành công.",
+	"Suggested": "",
 	"Sync All": "Đồng bộ hóa Tất cả",
 	"System": "Hệ thống",
 	"System Prompt": "Prompt Hệ thống (System Prompt)",
@@ -390,11 +438,13 @@
 	"Title": "Tiêu đề",
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "Tự động Tạo Tiêu đề",
+	"Title cannot be an empty string.": "",
 	"Title Generation Prompt": "Prompt tạo tiêu đề",
 	"to": "đến",
 	"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 chat input.": "đến đầu vào trò chuyện.",
+	"Today": "",
 	"Toggle settings": "Bật/tắt cài đặt",
 	"Toggle sidebar": "Bật/tắt thanh bên",
 	"Top K": "Top K",
@@ -405,11 +455,7 @@
 	"Uh-oh! There was an issue connecting to {{provider}}.": "Ồ! Đã xảy ra sự cố khi kết nối với {{provider}}.",
 	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Loại Tệp Không xác định '{{file_type}}', nhưng đang chấp nhận và xử lý như văn bản thô",
 	"Update and Copy Link": "",
-	"Update Embedding Model": "",
-	"Update embedding model (e.g. {{model}})": "",
 	"Update password": "Cập nhật mật khẩu",
-	"Update Reranking Model": "",
-	"Update reranking model (e.g. {{model}})": "",
 	"Upload a GGUF model": "Tải lên mô hình GGUF",
 	"Upload files": "Tải tệp lên hệ thống",
 	"Upload Progress": "Tiến trình tải tệp lên hệ thống",
@@ -427,6 +473,8 @@
 	"Version": "Version",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Web",
+	"Web Loader Settings": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "Tiện ích WebUI",
 	"WebUI Settings": "Cài đặt WebUI",
@@ -436,8 +484,12 @@
 	"Whisper (Local)": "Whisper (Local)",
 	"Write a prompt suggestion (e.g. Who are you?)": "Hãy viết một prompt (vd: Bạn là ai?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Viết một tóm tắt trong vòng 50 từ cho [chủ đề hoặc từ khóa].",
+	"Yesterday": "",
 	"You": "Bạn",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "Bạn là một trợ lý hữu ích.",
 	"You're now logged in.": "Bạn đã đăng nhập.",
-	"Youtube": ""
+	"Youtube": "",
+	"Youtube Loader Settings": ""
 }

+ 91 - 39
src/lib/i18n/locales/zh-CN/translation.json

@@ -15,6 +15,7 @@
 	"Add a short description about what this modelfile does": "为这个模型文件添加一段简短的描述",
 	"Add a short title for this prompt": "为这个提示词添加一个简短的标题",
 	"Add a tag": "添加标签",
+	"Add custom prompt": "",
 	"Add Docs": "添加文档",
 	"Add Files": "添加文件",
 	"Add message": "添加消息",
@@ -27,6 +28,7 @@
 	"Admin Settings": "管理员设置",
 	"Advanced Parameters": "高级参数",
 	"all": "所有",
+	"All Documents": "",
 	"All Users": "所有用户",
 	"Allow": "允许",
 	"Allow Chat Deletion": "允许删除聊天记录",
@@ -34,26 +36,32 @@
 	"Already have an account?": "已经有账户了吗?",
 	"an assistant": "助手",
 	"and": "和",
+	"and create a new shared link.": "",
 	"API Base URL": "API 基础 URL",
 	"API Key": "API 密钥",
 	"API Key created.": "",
 	"API keys": "",
 	"API RPM": "API RPM",
+	"April": "",
 	"Archive": "",
 	"Archived Chats": "聊天记录存档",
 	"are allowed - Activate this command by typing": "允许 - 通过输入来激活这个命令",
 	"Are you sure?": "你确定吗?",
+	"Attach file": "",
 	"Attention to detail": "",
 	"Audio": "音频",
+	"August": "",
 	"Auto-playback response": "自动播放回应",
-	"Auto-send input after 3 sec.": "3秒后自动发送输入",
+	"Auto-send input after 3 sec.": "3 秒后自动发送输入",
 	"AUTOMATIC1111 Base URL": "AUTOMATIC1111 基础 URL",
 	"AUTOMATIC1111 Base URL is required.": "需要 AUTOMATIC1111 基础 URL。",
 	"available!": "可用!",
 	"Back": "返回",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "构建模式",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "取消",
 	"Categories": "分类",
 	"Change Password": "更改密码",
@@ -65,10 +73,12 @@
 	"Check for updates": "检查更新",
 	"Checking for updates...": "正在检查更新...",
 	"Choose a model before saving...": "保存前选择一个模型...",
-	"Chunk Overlap": "块重叠(Chunk Overlap)",
-	"Chunk Params": "块参数(Chunk Params)",
-	"Chunk Size": "块大小(Chunk Size)",
+	"Chunk Overlap": "块重叠 (Chunk Overlap)",
+	"Chunk Params": "块参数 (Chunk Params)",
+	"Chunk Size": "块大小 (Chunk Size)",
+	"Citation": "",
 	"Click here for help.": "点击这里获取帮助。",
+	"Click here to": "",
 	"Click here to check other modelfiles.": "点击这里检查其他模型文件。",
 	"Click here to select": "点击这里选择",
 	"Click here to select a csv file.": "",
@@ -93,18 +103,22 @@
 	"Copy last response": "复制最后一次回复",
 	"Copy Link": "",
 	"Copying to clipboard was successful!": "复制到剪贴板成功!",
-	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "为以下查询创建一个简洁的、3-5个词的短语作为标题,严格遵守3-5个词的限制并避免使用“标题”一词:",
+	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "为以下查询创建一个简洁的、3-5 个词的短语作为标题,严格遵守 3-5 个词的限制并避免使用“标题”一词:",
 	"Create a modelfile": "创建模型文件",
 	"Create Account": "创建账户",
+	"Create new key": "",
+	"Create new secret key": "",
 	"Created at": "创建于",
 	"Created At": "",
 	"Current Model": "当前模型",
 	"Current Password": "当前密码",
 	"Custom": "自定义",
-	"Customize Ollama models for a specific purpose": "定制特定用途的Ollama模型",
+	"Customize Ollama models for a specific purpose": "定制特定用途的 Ollama 模型",
 	"Dark": "暗色",
+	"Dashboard": "",
 	"Database": "数据库",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
+	"December": "",
 	"Default": "默认",
 	"Default (Automatic1111)": "默认(Automatic1111)",
 	"Default (SentenceTransformers)": "",
@@ -118,6 +132,7 @@
 	"Delete chat": "删除聊天",
 	"Delete Chat": "",
 	"Delete Chats": "删除聊天记录",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "已删除{{deleteModelTag}}",
 	"Deleted {{tagName}}": "",
@@ -137,6 +152,7 @@
 	"Don't have an account?": "没有账户?",
 	"Don't like the style": "",
 	"Download": "",
+	"Download canceled": "",
 	"Download Database": "下载数据库",
 	"Drop any files here to add to the conversation": "拖动文件到此处以添加到对话中",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "例如 '30s','10m'。有效的时间单位是's', 'm', 'h'。",
@@ -144,6 +160,7 @@
 	"Edit Doc": "编辑文档",
 	"Edit User": "编辑用户",
 	"Email": "电子邮件",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "启用聊天历史",
@@ -151,20 +168,22 @@
 	"Enabled": "启用",
 	"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
 	"Enter {{role}} message here": "在此处输入 {{role}} 信息",
-	"Enter Chunk Overlap": "输入块重叠(Chunk Overlap)",
-	"Enter Chunk Size": "输入块大小(Chunk Size)",
-	"Enter Image Size (e.g. 512x512)": "输入图片大小(例如 512x512)",
+	"Enter Chunk Overlap": "输入块重叠 (Chunk Overlap)",
+	"Enter Chunk Size": "输入块大小 (Chunk Size)",
+	"Enter Image Size (e.g. 512x512)": "输入图片大小 (例如 512x512)",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "输入 LiteLLM API 基本 URL (litellm_params.api_base)",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "输入 LiteLLM API 密匙 (litellm_params.api_key)",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "输入 LiteLLM API 速率限制 (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "输入 LiteLLM 模型 (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "输入模型的 Max Tokens (litellm_params.max_tokens)",
-	"Enter model tag (e.g. {{modelTag}})": "输入模型标签(例如{{modelTag}})",
-	"Enter Number of Steps (e.g. 50)": "输入步数(例如50)",
+	"Enter model tag (e.g. {{modelTag}})": "输入模型标签 (例如{{modelTag}})",
+	"Enter Number of Steps (e.g. 50)": "输入步数 (例如 50)",
 	"Enter Score": "",
 	"Enter stop sequence": "输入停止序列",
 	"Enter Top K": "输入 Top K",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "输入 URL (例如 http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "输入您的电子邮件",
 	"Enter Your Full Name": "输入您的全名",
 	"Enter Your Password": "输入您的密码",
@@ -177,6 +196,7 @@
 	"Export Prompts": "导出提示词",
 	"Failed to create API Key.": "",
 	"Failed to read clipboard contents": "无法读取剪贴板内容",
+	"February": "",
 	"Feel free to add specific details": "",
 	"File Mode": "文件模式",
 	"File not found.": "文件未找到。",
@@ -193,6 +213,7 @@
 	"Good Response": "",
 	"has no conversations.": "",
 	"Hello, {{name}}": "你好,{{name}}",
+	"Help": "",
 	"Hide": "隐藏",
 	"Hide Additional Params": "隐藏额外参数",
 	"How can I help you today?": "我今天能帮你做什么?",
@@ -205,26 +226,34 @@
 	"Import Documents Mapping": "导入文档映射",
 	"Import Modelfiles": "导入模型文件",
 	"Import Prompts": "导入提示",
-	"Include `--api` flag when running stable-diffusion-webui": "运行stable-diffusion-webui时包含`--api`标志",
+	"Include `--api` flag when running stable-diffusion-webui": "运行 stable-diffusion-webui 时包含 `--api` 标志",
+	"Input commands": "",
 	"Interface": "界面",
-	"join our Discord for help.": "加入我们的Discord寻求帮助。",
+	"Invalid Tag": "",
+	"January": "",
+	"join our Discord for help.": "加入我们的 Discord 寻求帮助。",
 	"JSON": "JSON",
-	"JWT Expiration": "JWT过期",
-	"JWT Token": "JWT令牌",
+	"July": "",
+	"June": "",
+	"JWT Expiration": "JWT 过期",
+	"JWT Token": "JWT 令牌",
 	"Keep Alive": "保持活动",
 	"Keyboard shortcuts": "键盘快捷键",
 	"Language": "语言",
 	"Last Active": "",
 	"Light": "浅色",
 	"Listening...": "监听中...",
-	"LLMs can make mistakes. Verify important information.": "LLM可能会生成错误信息,请验证重要信息。",
-	"Made by OpenWebUI Community": "由OpenWebUI社区制作",
+	"LLMs can make mistakes. Verify important information.": "LLM 可能会生成错误信息,请验证重要信息。",
+	"Made by OpenWebUI Community": "由 OpenWebUI 社区制作",
 	"Make sure to enclose them with": "确保将它们包含在内",
-	"Manage LiteLLM Models": "管理LiteLLM模型",
+	"Manage LiteLLM Models": "管理 LiteLLM 模型",
 	"Manage Models": "管理模型",
-	"Manage Ollama Models": "管理Ollama模型",
+	"Manage Ollama Models": "管理 Ollama 模型",
+	"March": "",
 	"Max Tokens": "最大令牌数",
-	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "最多可以同时下载3个模型,请稍后重试。",
+	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "最多可以同时下载 3 个模型,请稍后重试。",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
 	"Minimum Score": "",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
@@ -255,11 +284,15 @@
 	"Name your modelfile": "命名你的模型文件",
 	"New Chat": "新聊天",
 	"New Password": "新密码",
+	"No results found": "",
+	"No source available": "",
 	"Not factually correct": "",
 	"Not sure what to add?": "不确定要添加什么?",
 	"Not sure what to write? Switch to": "不确定写什么?切换到",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
 	"Notifications": "桌面通知",
+	"November": "",
+	"October": "",
 	"Off": "关闭",
 	"Okay, Let's Go!": "好的,我们开始吧!",
 	"OLED Dark": "",
@@ -268,7 +301,7 @@
 	"Ollama Version": "Ollama 版本",
 	"On": "开",
 	"Only": "仅",
-	"Only alphanumeric characters and hyphens are allowed in the command string.": "命令字符串中只允许使用英文字母,数字(0-9)以及连字符(-)。",
+	"Only alphanumeric characters and hyphens are allowed in the command string.": "命令字符串中只允许使用英文字母,数字 (0-9) 以及连字符 (-)。",
 	"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.": "哎呀!请稍等!您的文件仍在处理中。我们正在将它们做得尽善尽美,请耐心等待,一旦准备好我们会通知您。",
 	"Oops! Looks like the URL is invalid. Please double-check and try again.": "哎呀!看起来 URL 无效。请仔细检查后再试一次。",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "哎呀!您正在使用不支持的方法(仅限前端)。请从后端提供 WebUI。",
@@ -283,20 +316,25 @@
 	"OpenAI URL/Key required.": "",
 	"or": "或",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "参数",
 	"Password": "密码",
 	"PDF document (.pdf)": "",
-	"PDF Extract Images (OCR)": "PDF图像处理(使用OCR)",
+	"PDF Extract Images (OCR)": "PDF 图像处理 (使用 OCR)",
 	"pending": "待定",
 	"Permission denied when accessing microphone: {{error}}": "访问麦克风时权限被拒绝:{{error}}",
 	"Plain text (.txt)": "",
 	"Playground": "AI 对话游乐场",
 	"Positive attitude": "",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
 	"Profile Image": "",
+	"Prompt": "",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
 	"Prompt Content": "提示词内容",
 	"Prompt suggestions": "提示词建议",
 	"Prompts": "提示词",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "从 Ollama.com 拉取一个模型",
 	"Pull Progress": "拉取进度",
 	"Query Params": "查询参数",
@@ -309,9 +347,12 @@
 	"Regenerate": "",
 	"Release Notes": "发布说明",
 	"Remove": "",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "重复最后 N 次",
 	"Repeat Penalty": "重复惩罚",
 	"Request Mode": "请求模式",
+	"Reranking Model": "",
 	"Reranking model disabled": "",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "重置向量存储",
@@ -336,13 +377,18 @@
 	"Seed": "种子",
 	"Select a mode": "选择一个模式",
 	"Select a model": "选择一个模型",
-	"Select an Ollama instance": "选择一个Ollama实例",
+	"Select an Ollama instance": "选择一个 Ollama 实例",
+	"Select model": "",
 	"Send a Message": "发送消息",
 	"Send message": "发送消息",
+	"September": "",
 	"Server connection verified": "已验证服务器连接",
 	"Set as default": "设为默认",
 	"Set Default Model": "设置默认模型",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "设置图片大小",
+	"Set Model": "设置模型",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "设置步骤",
 	"Set Title Auto-Generation Model": "设置标题自动生成模型",
 	"Set Voice": "设置声音",
@@ -350,7 +396,7 @@
 	"Settings saved successfully!": "设置已保存",
 	"Share": "",
 	"Share Chat": "",
-	"Share to OpenWebUI Community": "分享到OpenWebUI社区",
+	"Share to OpenWebUI Community": "分享到 OpenWebUI 社区",
 	"short-summary": "简短总结",
 	"Show": "显示",
 	"Show Additional Params": "显示额外参数",
@@ -361,15 +407,17 @@
 	"Sign Out": "登出",
 	"Sign up": "注册",
 	"Signing in": "",
+	"Source": "",
 	"Speech recognition error: {{error}}": "语音识别错误:{{error}}",
 	"Speech-to-Text Engine": "语音转文字引擎",
-	"SpeechRecognition API is not supported in this browser.": "此浏览器不支持SpeechRecognition API。",
+	"SpeechRecognition API is not supported in this browser.": "此浏览器不支持 SpeechRecognition API。",
 	"Stop Sequence": "停止序列",
 	"STT Settings": "语音转文字设置",
 	"Submit": "提交",
 	"Subtitle (e.g. about the Roman Empire)": "",
 	"Success": "成功",
 	"Successfully updated.": "成功更新。",
+	"Suggested": "",
 	"Sync All": "同步所有",
 	"System": "系统",
 	"System Prompt": "系统提示",
@@ -386,36 +434,34 @@
 	"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "这确保了您宝贵的对话被安全保存到后端数据库中。谢谢!",
 	"This setting does not sync across browsers or devices.": "此设置不会在浏览器或设备之间同步。",
 	"Thorough explanation": "",
-	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "提示:在每次替换后,在聊天输入中按Tab键可以连续更新多个变量。",
+	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "提示:在每次替换后,在聊天输入中按 Tab 键可以连续更新多个变量。",
 	"Title": "标题",
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "标题自动生成",
+	"Title cannot be an empty string.": "",
 	"Title Generation Prompt": "自动生成标题的提示词",
 	"to": "到",
 	"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 chat input.": "到聊天输入。",
+	"Today": "",
 	"Toggle settings": "切换设置",
 	"Toggle sidebar": "切换侧边栏",
 	"Top K": "Top K",
 	"Top P": "Top P",
-	"Trouble accessing Ollama?": "访问Ollama时遇到问题?",
+	"Trouble accessing Ollama?": "访问 Ollama 时遇到问题?",
 	"TTS Settings": "文本转语音设置",
-	"Type Hugging Face Resolve (Download) URL": "输入Hugging Face解析(下载)URL",
+	"Type Hugging Face Resolve (Download) URL": "输入 Hugging Face 解析(下载)URL",
 	"Uh-oh! There was an issue connecting to {{provider}}.": "哎呀!连接到{{provider}}时出现问题。",
 	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "未知文件类型'{{file_type}}',将视为纯文本进行处理",
 	"Update and Copy Link": "",
-	"Update Embedding Model": "",
-	"Update embedding model (e.g. {{model}})": "",
 	"Update password": "更新密码",
-	"Update Reranking Model": "",
-	"Update reranking model (e.g. {{model}})": "",
-	"Upload a GGUF model": "上传一个GGUF模型",
+	"Upload a GGUF model": "上传一个 GGUF 模型",
 	"Upload files": "上传文件",
 	"Upload Progress": "上传进度",
-	"URL Mode": "URL模式",
+	"URL Mode": "URL 模式",
 	"Use '#' in the prompt input to load and select your documents.": "在提示输入中使用'#'来加载和选择你的文档。",
-	"Use Gravatar": "使用Gravatar",
+	"Use Gravatar": "使用 Gravatar",
 	"Use Initials": "",
 	"user": "用户",
 	"User Permissions": "用户权限",
@@ -427,17 +473,23 @@
 	"Version": "版本",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "网页",
+	"Web Loader Settings": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "WebUI 插件",
 	"WebUI Settings": "WebUI 设置",
-	"WebUI will make requests to": "WebUI将请求",
+	"WebUI will make requests to": "WebUI 将请求",
 	"What’s New in": "最新变化",
 	"When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "当历史记录被关闭时,这个浏览器上的新聊天不会出现在你任何设备的历史记录中。",
 	"Whisper (Local)": "Whisper(本地)",
 	"Write a prompt suggestion (e.g. Who are you?)": "写一个提示建议(例如:你是谁?)",
-	"Write a summary in 50 words that summarizes [topic or keyword].": "用50个字写一个总结[主题或关键词]。",
+	"Write a summary in 50 words that summarizes [topic or keyword].": "用 50 个字写一个总结 [主题或关键词]。",
+	"Yesterday": "",
 	"You": "你",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "你是一个有帮助的助手。",
 	"You're now logged in.": "已登录。",
-	"Youtube": ""
+	"Youtube": "",
+	"Youtube Loader Settings": ""
 }

+ 62 - 10
src/lib/i18n/locales/zh-TW/translation.json

@@ -15,6 +15,7 @@
 	"Add a short description about what this modelfile does": "為這個 Modelfile 添加一段簡短的描述",
 	"Add a short title for this prompt": "為這個提示詞添加一個簡短的標題",
 	"Add a tag": "新增標籤",
+	"Add custom prompt": "",
 	"Add Docs": "新增文件",
 	"Add Files": "新增檔案",
 	"Add message": "新增訊息",
@@ -27,6 +28,7 @@
 	"Admin Settings": "管理設定",
 	"Advanced Parameters": "進階參數",
 	"all": "所有",
+	"All Documents": "",
 	"All Users": "所有使用者",
 	"Allow": "允許",
 	"Allow Chat Deletion": "允許刪除聊天紀錄",
@@ -34,26 +36,32 @@
 	"Already have an account?": "已經有帳號了嗎?",
 	"an assistant": "助手",
 	"and": "和",
+	"and create a new shared link.": "",
 	"API Base URL": "API 基本 URL",
 	"API Key": "API 金鑰",
 	"API Key created.": "",
 	"API keys": "",
 	"API RPM": "API RPM",
+	"April": "",
 	"Archive": "",
 	"Archived Chats": "聊天記錄存檔",
 	"are allowed - Activate this command by typing": "是允許的 - 透過輸入",
 	"Are you sure?": "你確定嗎?",
+	"Attach file": "",
 	"Attention to detail": "",
 	"Audio": "音訊",
+	"August": "",
 	"Auto-playback response": "自動播放回答",
-	"Auto-send input after 3 sec.": "3秒後自動傳送輸入內容",
+	"Auto-send input after 3 sec.": "3 秒後自動傳送輸入內容",
 	"AUTOMATIC1111 Base URL": "AUTOMATIC1111 基本 URL",
 	"AUTOMATIC1111 Base URL is required.": "需要 AUTOMATIC1111 基本 URL",
 	"available!": "可以使用!",
 	"Back": "返回",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "建構模式",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "取消",
 	"Categories": "分類",
 	"Change Password": "修改密碼",
@@ -68,7 +76,9 @@
 	"Chunk Overlap": "Chunk Overlap",
 	"Chunk Params": "Chunk 參數",
 	"Chunk Size": "Chunk 大小",
+	"Citation": "",
 	"Click here for help.": "點擊這裡尋找幫助。",
+	"Click here to": "",
 	"Click here to check other modelfiles.": "點擊這裡檢查其他 Modelfiles。",
 	"Click here to select": "點擊這裡選擇",
 	"Click here to select a csv file.": "",
@@ -96,6 +106,8 @@
 	"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "為以下的查詢建立一個簡潔、3-5 個詞的短語作為標題,嚴格遵守 3-5 個詞的限制,避免使用「標題」這個詞:",
 	"Create a modelfile": "建立 Modelfile",
 	"Create Account": "建立帳號",
+	"Create new key": "",
+	"Create new secret key": "",
 	"Created at": "建立於",
 	"Created At": "",
 	"Current Model": "目前模型",
@@ -103,8 +115,10 @@
 	"Custom": "自訂",
 	"Customize Ollama models for a specific purpose": "定制特定用途的 Ollama 模型",
 	"Dark": "暗色",
+	"Dashboard": "",
 	"Database": "資料庫",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
+	"December": "",
 	"Default": "預設",
 	"Default (Automatic1111)": "預設(Automatic1111)",
 	"Default (SentenceTransformers)": "",
@@ -118,6 +132,7 @@
 	"Delete chat": "刪除聊天紀錄",
 	"Delete Chat": "",
 	"Delete Chats": "刪除聊天紀錄",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "已刪除 {{deleteModelTag}}",
 	"Deleted {{tagName}}": "",
@@ -137,6 +152,7 @@
 	"Don't have an account?": "還沒有註冊帳號?",
 	"Don't like the style": "",
 	"Download": "",
+	"Download canceled": "",
 	"Download Database": "下載資料庫",
 	"Drop any files here to add to the conversation": "拖拽文件到此處以新增至對話",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "例如 '30s', '10m'。有效的時間單位為 's', 'm', 'h'。",
@@ -144,6 +160,7 @@
 	"Edit Doc": "編輯文件",
 	"Edit User": "編輯使用者",
 	"Email": "電子郵件",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "啟用聊天歷史",
@@ -154,6 +171,7 @@
 	"Enter Chunk Overlap": "輸入 Chunk Overlap",
 	"Enter Chunk Size": "輸入 Chunk 大小",
 	"Enter Image Size (e.g. 512x512)": "輸入圖片大小(例如 512x512)",
+	"Enter language codes": "",
 	"Enter LiteLLM API Base URL (litellm_params.api_base)": "輸入 LiteLLM API 基本 URL(litellm_params.api_base)",
 	"Enter LiteLLM API Key (litellm_params.api_key)": "輸入 LiteLLM API 金鑰(litellm_params.api_key)",
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "輸入 LiteLLM API RPM(litellm_params.rpm)",
@@ -165,6 +183,7 @@
 	"Enter stop sequence": "輸入停止序列",
 	"Enter Top K": "輸入 Top K",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "輸入 URL(例如 http://127.0.0.1:7860/)",
+	"Enter URL (e.g. http://localhost:11434)": "",
 	"Enter Your Email": "輸入你的電子郵件",
 	"Enter Your Full Name": "輸入你的全名",
 	"Enter Your Password": "輸入你的密碼",
@@ -177,6 +196,7 @@
 	"Export Prompts": "匯出提示詞",
 	"Failed to create API Key.": "",
 	"Failed to read clipboard contents": "無法讀取剪貼簿內容",
+	"February": "",
 	"Feel free to add specific details": "",
 	"File Mode": "檔案模式",
 	"File not found.": "找不到檔案。",
@@ -192,7 +212,8 @@
 	"Generation Info": "",
 	"Good Response": "",
 	"has no conversations.": "",
-	"Hello, {{name}}": "你好, {{name}}",
+	"Hello, {{name}}": "你好,{{name}}",
+	"Help": "",
 	"Hide": "隱藏",
 	"Hide Additional Params": "隱藏額外參數",
 	"How can I help you today?": "今天能為你做什麼?",
@@ -206,9 +227,14 @@
 	"Import Modelfiles": "匯入 Modelfiles",
 	"Import Prompts": "匯入提示詞",
 	"Include `--api` flag when running stable-diffusion-webui": "在運行 stable-diffusion-webui 時加上 `--api` 標誌",
+	"Input commands": "",
 	"Interface": "介面",
+	"Invalid Tag": "",
+	"January": "",
 	"join our Discord for help.": "加入我們的 Discord 尋找幫助。",
 	"JSON": "JSON",
+	"July": "",
+	"June": "",
 	"JWT Expiration": "JWT 過期時間",
 	"JWT Token": "JWT Token",
 	"Keep Alive": "保持活躍",
@@ -223,8 +249,11 @@
 	"Manage LiteLLM Models": "管理 LiteLLM 模型",
 	"Manage Models": "管理模組",
 	"Manage Ollama Models": "管理 Ollama 模型",
+	"March": "",
 	"Max Tokens": "最大 Token 數",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "最多可以同時下載 3 個模型。請稍後再試。",
+	"May": "",
+	"Messages you send after creating your link won't be shared. Users with the URL will beable to view the shared chat.": "",
 	"Minimum Score": "",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
@@ -255,11 +284,15 @@
 	"Name your modelfile": "命名你的 Modelfile",
 	"New Chat": "新增聊天",
 	"New Password": "新密碼",
+	"No results found": "",
+	"No source available": "",
 	"Not factually correct": "",
 	"Not sure what to add?": "不確定要新增什麼嗎?",
 	"Not sure what to write? Switch to": "不確定要寫什麼?切換到",
 	"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
 	"Notifications": "桌面通知",
+	"November": "",
+	"October": "",
 	"Off": "關閉",
 	"Okay, Let's Go!": "好的,啟動吧!",
 	"OLED Dark": "",
@@ -283,20 +316,25 @@
 	"OpenAI URL/Key required.": "",
 	"or": "或",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "參數",
 	"Password": "密碼",
 	"PDF document (.pdf)": "",
 	"PDF Extract Images (OCR)": "PDF 圖像擷取(OCR 光學文字辨識)",
 	"pending": "待審查",
-	"Permission denied when accessing microphone: {{error}}": "存取麥克風時被拒絕權限: {{error}}",
+	"Permission denied when accessing microphone: {{error}}": "存取麥克風時被拒絕權限{{error}}",
 	"Plain text (.txt)": "",
 	"Playground": "AI 對話遊樂場",
 	"Positive attitude": "",
+	"Previous 30 days": "",
+	"Previous 7 days": "",
 	"Profile Image": "",
+	"Prompt": "",
 	"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
 	"Prompt Content": "提示詞內容",
 	"Prompt suggestions": "提示詞建議",
 	"Prompts": "提示詞",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "從 Ollama.com 下載模型",
 	"Pull Progress": "下載進度",
 	"Query Params": "查詢參數",
@@ -309,9 +347,12 @@
 	"Regenerate": "",
 	"Release Notes": "發布說明",
 	"Remove": "",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "重複最後 N 次",
 	"Repeat Penalty": "重複懲罰",
 	"Request Mode": "請求模式",
+	"Reranking Model": "",
 	"Reranking model disabled": "",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "重置向量儲存空間",
@@ -337,12 +378,17 @@
 	"Select a mode": "選擇模式",
 	"Select a model": "選擇一個模型",
 	"Select an Ollama instance": "選擇 Ollama 實例",
+	"Select model": "",
 	"Send a Message": "傳送訊息",
 	"Send message": "傳送訊息",
+	"September": "",
 	"Server connection verified": "已驗證伺服器連線",
 	"Set as default": "設為預設",
 	"Set Default Model": "設定預設模型",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "設定圖片大小",
+	"Set Model": "設定模型",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "設定步數",
 	"Set Title Auto-Generation Model": "設定自動生成標題用模型",
 	"Set Voice": "設定語音",
@@ -361,7 +407,8 @@
 	"Sign Out": "登出",
 	"Sign up": "註冊",
 	"Signing in": "",
-	"Speech recognition error: {{error}}": "語音識別錯誤: {{error}}",
+	"Source": "",
+	"Speech recognition error: {{error}}": "語音識別錯誤:{{error}}",
 	"Speech-to-Text Engine": "語音轉文字引擎",
 	"SpeechRecognition API is not supported in this browser.": "此瀏覽器不支持 SpeechRecognition API。",
 	"Stop Sequence": "停止序列",
@@ -370,6 +417,7 @@
 	"Subtitle (e.g. about the Roman Empire)": "",
 	"Success": "成功",
 	"Successfully updated.": "更新成功。",
+	"Suggested": "",
 	"Sync All": "全部同步",
 	"System": "系統",
 	"System Prompt": "系統提示詞",
@@ -390,11 +438,13 @@
 	"Title": "標題",
 	"Title (e.g. Tell me a fun fact)": "",
 	"Title Auto-Generation": "自動生成標題",
+	"Title cannot be an empty string.": "",
 	"Title Generation Prompt": "自動生成標題的提示詞",
 	"to": "到",
 	"To access the available model names for downloading,": "若想查看可供下載的模型名稱,",
 	"To access the GGUF models available for downloading,": "若想查看可供下載的 GGUF 模型名稱,",
 	"to chat input.": "到聊天輸入框來啟動此命令。",
+	"Today": "",
 	"Toggle settings": "切換設定",
 	"Toggle sidebar": "切換側邊欄",
 	"Top K": "Top K",
@@ -405,11 +455,7 @@
 	"Uh-oh! There was an issue connecting to {{provider}}.": "哎呀!連線到 {{provider}} 時出現問題。",
 	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "未知的文件類型 '{{file_type}}',但接受並視為純文字",
 	"Update and Copy Link": "",
-	"Update Embedding Model": "",
-	"Update embedding model (e.g. {{model}})": "",
 	"Update password": "更新密碼",
-	"Update Reranking Model": "",
-	"Update reranking model (e.g. {{model}})": "",
 	"Upload a GGUF model": "上傳一個 GGUF 模型",
 	"Upload files": "上傳文件",
 	"Upload Progress": "上傳進度",
@@ -427,6 +473,8 @@
 	"Version": "版本",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "網頁",
+	"Web Loader Settings": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "WebUI 擴充套件",
 	"WebUI Settings": "WebUI 設定",
@@ -435,9 +483,13 @@
 	"When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "當歷史被關閉時,這個瀏覽器上的新聊天將不會出現在任何裝置的歷史記錄中。",
 	"Whisper (Local)": "Whisper(本機)",
 	"Write a prompt suggestion (e.g. Who are you?)": "寫一個提示詞建議(例如:你是誰?)",
-	"Write a summary in 50 words that summarizes [topic or keyword].": "寫一個50字的摘要來概括[主題或關鍵詞]。",
+	"Write a summary in 50 words that summarizes [topic or keyword].": "寫一個 50 字的摘要來概括 [主題或關鍵詞]。",
+	"Yesterday": "",
 	"You": "你",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "你是一位善於協助他人的助手。",
 	"You're now logged in.": "已登入。",
-	"Youtube": ""
+	"Youtube": "",
+	"Youtube Loader Settings": ""
 }

+ 1 - 0
src/lib/stores/index.ts

@@ -102,6 +102,7 @@ type AudioSettings = {
 	STTEngine?: string;
 	TTSEngine?: string;
 	speaker?: string;
+	model?: string;
 };
 
 type TitleSettings = {

+ 39 - 17
src/lib/utils/index.ts

@@ -472,29 +472,20 @@ export const blobToFile = (blob, fileName) => {
 	return file;
 };
 
-// promptTemplate replaces any occurrences of the following in the template with the prompt
-// {{prompt}} will be replaced with the prompt
-// {{prompt:start:<length>}} will be replaced with the first <length> characters of the prompt
-// {{prompt:end:<length>}} will be replaced with the last <length> characters of the prompt
-// Character length is used as we don't have the ability to tokenize the prompt
 export const promptTemplate = (template: string, prompt: string) => {
+	prompt = prompt.replace(/{{prompt}}|{{prompt:start:\d+}}|{{prompt:end:\d+}}/g, '');
+
 	template = template.replace(/{{prompt}}/g, prompt);
 
 	// Replace all instances of {{prompt:start:<length>}} with the first <length> characters of the prompt
-	const startRegex = /{{prompt:start:(\d+)}}/g;
-	let startMatch: RegExpMatchArray | null;
-	while ((startMatch = startRegex.exec(template)) !== null) {
-		const length = parseInt(startMatch[1]);
-		template = template.replace(startMatch[0], prompt.substring(0, length));
-	}
+	template = template.replace(/{{prompt:start:(\d+)}}/g, (match, length) =>
+		prompt.substring(0, parseInt(length))
+	);
 
 	// Replace all instances of {{prompt:end:<length>}} with the last <length> characters of the prompt
-	const endRegex = /{{prompt:end:(\d+)}}/g;
-	let endMatch: RegExpMatchArray | null;
-	while ((endMatch = endRegex.exec(template)) !== null) {
-		const length = parseInt(endMatch[1]);
-		template = template.replace(endMatch[0], prompt.substring(prompt.length - length));
-	}
+	template = template.replace(/{{prompt:end:(\d+)}}/g, (match, length) =>
+		prompt.slice(-parseInt(length))
+	);
 
 	return template;
 };
@@ -520,3 +511,34 @@ export const approximateToHumanReadable = (nanoseconds: number) => {
 
 	return results.reverse().join(' ');
 };
+
+export const getTimeRange = (timestamp) => {
+	const now = new Date();
+	const date = new Date(timestamp * 1000); // Convert Unix timestamp to milliseconds
+
+	// Calculate the difference in milliseconds
+	const diffTime = now.getTime() - date.getTime();
+	const diffDays = diffTime / (1000 * 3600 * 24);
+
+	const nowDate = now.getDate();
+	const nowMonth = now.getMonth();
+	const nowYear = now.getFullYear();
+
+	const dateDate = date.getDate();
+	const dateMonth = date.getMonth();
+	const dateYear = date.getFullYear();
+
+	if (nowYear === dateYear && nowMonth === dateMonth && nowDate === dateDate) {
+		return 'Today';
+	} else if (nowYear === dateYear && nowMonth === dateMonth && nowDate - dateDate === 1) {
+		return 'Yesterday';
+	} else if (diffDays <= 7) {
+		return 'Previous 7 days';
+	} else if (diffDays <= 30) {
+		return 'Previous 30 days';
+	} else if (nowYear === dateYear) {
+		return date.toLocaleString('default', { month: 'long' });
+	} else {
+		return date.getFullYear().toString();
+	}
+};

Some files were not shown because too many files changed in this diff