Pārlūkot izejas kodu

Merge branch 'dev' into feat/backend-web-search

Timothy Jaeryang Baek 1 gadu atpakaļ
vecāks
revīzija
635951b55c
56 mainītis faili ar 2110 papildinājumiem un 1015 dzēšanām
  1. 10 1
      .github/workflows/integration-test.yml
  2. 37 10
      backend/apps/rag/main.py
  3. 27 22
      backend/apps/rag/utils.py
  4. 20 11
      backend/config.py
  5. 36 3
      backend/main.py
  6. 9 0
      src/app.css
  7. 5 1
      src/lib/apis/ollama/index.ts
  8. 3 1
      src/lib/apis/openai/index.ts
  9. 3 2
      src/lib/apis/rag/index.ts
  10. 11 0
      src/lib/apis/streaming/index.ts
  11. 77 0
      src/lib/components/chat/Messages/CitationsModal.svelte
  12. 473 420
      src/lib/components/chat/Messages/ResponseMessage.svelte
  13. 1 1
      src/lib/components/chat/ModelSelector.svelte
  14. 2 2
      src/lib/components/chat/ModelSelector/Selector.svelte
  15. 2 2
      src/lib/components/chat/Settings/Account.svelte
  16. 1 1
      src/lib/components/chat/Settings/Connections.svelte
  17. 10 6
      src/lib/components/chat/ShareChatModal.svelte
  18. 1 1
      src/lib/components/common/ImagePreview.svelte
  19. 126 0
      src/lib/components/documents/Settings/ChunkParams.svelte
  20. 209 393
      src/lib/components/documents/Settings/General.svelte
  21. 119 0
      src/lib/components/documents/Settings/QueryParams.svelte
  22. 74 0
      src/lib/components/documents/Settings/WebParams.svelte
  23. 102 8
      src/lib/components/documents/SettingsModal.svelte
  24. 1 1
      src/lib/components/layout/Sidebar.svelte
  25. 3 1
      src/lib/components/layout/Sidebar/ArchivedChatsModal.svelte
  26. 3 3
      src/lib/components/layout/Sidebar/ChatMenu.svelte
  27. 26 4
      src/lib/i18n/locales/ar-BH/translation.json
  28. 26 4
      src/lib/i18n/locales/bg-BG/translation.json
  29. 26 4
      src/lib/i18n/locales/bn-BD/translation.json
  30. 26 4
      src/lib/i18n/locales/ca-ES/translation.json
  31. 33 11
      src/lib/i18n/locales/de-DE/translation.json
  32. 26 4
      src/lib/i18n/locales/dg-DG/translation.json
  33. 26 4
      src/lib/i18n/locales/en-GB/translation.json
  34. 26 4
      src/lib/i18n/locales/en-US/translation.json
  35. 26 4
      src/lib/i18n/locales/es-ES/translation.json
  36. 26 4
      src/lib/i18n/locales/fa-IR/translation.json
  37. 26 4
      src/lib/i18n/locales/fr-CA/translation.json
  38. 26 4
      src/lib/i18n/locales/fr-FR/translation.json
  39. 26 4
      src/lib/i18n/locales/it-IT/translation.json
  40. 26 4
      src/lib/i18n/locales/ja-JP/translation.json
  41. 26 4
      src/lib/i18n/locales/ka-GE/translation.json
  42. 26 4
      src/lib/i18n/locales/ko-KR/translation.json
  43. 26 4
      src/lib/i18n/locales/nl-NL/translation.json
  44. 26 4
      src/lib/i18n/locales/pl-PL/translation.json
  45. 26 4
      src/lib/i18n/locales/pt-BR/translation.json
  46. 26 4
      src/lib/i18n/locales/pt-PT/translation.json
  47. 26 4
      src/lib/i18n/locales/ru-RU/translation.json
  48. 26 4
      src/lib/i18n/locales/sv-SE/translation.json
  49. 26 4
      src/lib/i18n/locales/tr-TR/translation.json
  50. 26 4
      src/lib/i18n/locales/uk-UA/translation.json
  51. 26 4
      src/lib/i18n/locales/vi-VN/translation.json
  52. 26 4
      src/lib/i18n/locales/zh-CN/translation.json
  53. 26 4
      src/lib/i18n/locales/zh-TW/translation.json
  54. 15 3
      src/routes/(app)/+page.svelte
  55. 6 4
      src/routes/(app)/admin/+page.svelte
  56. 15 3
      src/routes/(app)/c/[id]/+page.svelte

+ 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: |

+ 37 - 10
backend/apps/rag/main.py

@@ -80,6 +80,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,
@@ -91,7 +92,7 @@ from config import (
     CHUNK_SIZE,
     CHUNK_OVERLAP,
     RAG_TEMPLATE,
-    ENABLE_LOCAL_WEB_FETCH,
+    ENABLE_RAG_LOCAL_WEB_FETCH,
 )
 
 from constants import ERROR_MESSAGES
@@ -105,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
@@ -114,6 +118,7 @@ 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
 
@@ -313,6 +318,7 @@ 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,
     }
 
 
@@ -322,15 +328,34 @@ class ChunkParamUpdateForm(BaseModel):
 
 
 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
 
 
 @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
+    )
 
     return {
         "status": True,
@@ -339,6 +364,7 @@ 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,
     }
 
 
@@ -490,7 +516,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
@@ -510,12 +538,11 @@ def store_web(form_data: UrlForm, user=Depends(get_current_user)):
             detail=ERROR_MESSAGES.DEFAULT(e),
         )
 
-
-def get_web_loader(url: Union[str, Sequence[str]]):
+def get_web_loader(url: Union[str, Sequence[str]], verify_ssl: bool = True):
     # Check if the URL is valid
     if not validate_url(url):
         raise ValueError(ERROR_MESSAGES.INVALID_URL)
-    return WebBaseLoader(url)
+    return WebBaseLoader(url, verify_ssl=verify_ssl)
 
 
 def validate_url(url: Union[str, Sequence[str]]):

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

@@ -287,14 +287,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
 
@@ -304,11 +304,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,
@@ -317,11 +313,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,
@@ -331,18 +323,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(
@@ -371,7 +376,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):

+ 20 - 11
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,16 +71,6 @@ 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":
@@ -454,6 +456,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"
@@ -531,7 +538,9 @@ 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"
+)
 
 SEARXNG_QUERY_URL = os.getenv("SEARXNG_QUERY_URL", "")
 GOOGLE_PSE_API_KEY = os.getenv("GOOGLE_PSE_API_KEY", "")

+ 36 - 3
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
 
 from apps.ollama.main import app as ollama_app
 from apps.openai.main import app as openai_app
@@ -102,6 +102,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
         ):
@@ -114,11 +116,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,
@@ -130,7 +136,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")
 
@@ -148,11 +156,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)
 

+ 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;
+}

+ 5 - 1
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) => {

+ 3 - 1
src/lib/apis/openai/index.ts

@@ -295,7 +295,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) => {

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

@@ -33,8 +33,9 @@ type ChunkConfigForm = {
 };
 
 type RAGConfigForm = {
-	pdf_extract_images: boolean;
-	chunk: ChunkConfigForm;
+	pdf_extract_images?: boolean;
+	chunk?: ChunkConfigForm;
+	web_loader_ssl_verification?: boolean;
 };
 
 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 };

+ 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>

+ 473 - 420
src/lib/components/chat/Messages/ResponseMessage.svelte

@@ -32,6 +32,7 @@
 	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();
@@ -324,6 +328,8 @@
 	});
 </script>
 
+<CitationsModal bind:show={showCitationModal} citation={selectedCitation} />
+
 {#key message.id}
 	<div class=" flex w-full message-{message.id}" id="message-{message.id}">
 		<ProfileImage
@@ -360,7 +366,6 @@
 						{/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"
 				>
@@ -441,436 +446,484 @@
 									{/each}
 									<!-- {@html marked(message.content.replaceAll('\\', '\\\\'))} -->
 								{/if}
+							</div>
+						{/if}
+					</div>
+				</div>
 
-								{#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);
-													}}
-												>
-													<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>
-
-												<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);
-													}}
-												>
-													<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}
+				<!-- if (message.citations) {
+					citations = message.citations.forEach((citation) => {
+						citation.document.forEach((document, index) => {
+							const metadata = citation.metadata?.[index];
+							const source = citation?.source?.name ?? metadata?.source ?? 'N/A';
+		
+							citations[source] = citations[source] || {
+								source: citation.source,
+								document: [],
+								metadata: []
+							};
+		
+							citations[source].document.push(document);
+							citations[source].metadata.push(metadata);
+						});
+					});
+				} -->
 
-										{#if !readOnly}
-											<Tooltip content={$i18n.t('Edit')} placement="bottom">
-												<button
-													class="{isLastMessage
-														? 'visible'
-														: 'invisible group-hover:visible'} p-1 rounded dark:hover:text-white hover:text-black transition"
-													on:click={() => {
-														editMessageHandler();
-													}}
-												>
-													<svg
-														xmlns="http://www.w3.org/2000/svg"
-														fill="none"
-														viewBox="0 0 24 24"
-														stroke-width="2"
-														stroke="currentColor"
-														class="w-4 h-4"
-													>
-														<path
-															stroke-linecap="round"
-															stroke-linejoin="round"
-															d="M16.862 4.487l1.687-1.688a1.875 1.875 0 112.652 2.652L6.832 19.82a4.5 4.5 0 01-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 011.13-1.897L16.863 4.487zm0 0L19.5 7.125"
-														/>
-													</svg>
-												</button>
-											</Tooltip>
-										{/if}
+				{#if message.citations}
+					<hr class="  dark:border-gray-800" />
+					<div class="my-2.5 w-full flex overflow-x-auto gap-2 flex-wrap">
+						{#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">
+								<div>
+									[{idx + 1}]
+								</div>
 
-										<Tooltip content={$i18n.t('Copy')} placement="bottom">
-											<button
-												class="{isLastMessage
-													? 'visible'
-													: 'invisible group-hover:visible'} p-1 rounded dark:hover:text-white hover:text-black transition copy-response-button"
-												on:click={() => {
-													copyToClipboard(message.content);
-												}}
-											>
-												<svg
-													xmlns="http://www.w3.org/2000/svg"
-													fill="none"
-													viewBox="0 0 24 24"
-													stroke-width="2"
-													stroke="currentColor"
-													class="w-4 h-4"
-												>
-													<path
-														stroke-linecap="round"
-														stroke-linejoin="round"
-														d="M15.666 3.888A2.25 2.25 0 0013.5 2.25h-3c-1.03 0-1.9.693-2.166 1.638m7.332 0c.055.194.084.4.084.612v0a.75.75 0 01-.75.75H9a.75.75 0 01-.75-.75v0c0-.212.03-.418.084-.612m7.332 0c.646.049 1.288.11 1.927.184 1.1.128 1.907 1.077 1.907 2.185V19.5a2.25 2.25 0 01-2.25 2.25H6.75A2.25 2.25 0 014.5 19.5V6.257c0-1.108.806-2.057 1.907-2.185a48.208 48.208 0 011.927-.184"
-													/>
-												</svg>
-											</button>
-										</Tooltip>
-
-										{#if !readOnly}
-											<Tooltip content={$i18n.t('Good Response')} placement="bottom">
-												<button
-													class="{isLastMessage
-														? 'visible'
-														: 'invisible group-hover:visible'} p-1 rounded {message?.annotation
-														?.rating === 1
-														? 'bg-gray-100 dark:bg-gray-800'
-														: ''} dark:hover:text-white hover:text-black transition"
-													on:click={() => {
-														rateMessage(message.id, 1);
-														showRateComment = true;
-
-														window.setTimeout(() => {
-															document
-																.getElementById(`message-feedback-${message.id}`)
-																?.scrollIntoView();
-														}, 0);
-													}}
-												>
-													<svg
-														stroke="currentColor"
-														fill="none"
-														stroke-width="2"
-														viewBox="0 0 24 24"
-														stroke-linecap="round"
-														stroke-linejoin="round"
-														class="w-4 h-4"
-														xmlns="http://www.w3.org/2000/svg"
-														><path
-															d="M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3"
-														/></svg
-													>
-												</button>
-											</Tooltip>
-
-											<Tooltip content={$i18n.t('Bad Response')} placement="bottom">
-												<button
-													class="{isLastMessage
-														? 'visible'
-														: 'invisible group-hover:visible'} p-1 rounded {message?.annotation
-														?.rating === -1
-														? 'bg-gray-100 dark:bg-gray-800'
-														: ''} dark:hover:text-white hover:text-black transition"
-													on:click={() => {
-														rateMessage(message.id, -1);
-														showRateComment = true;
-														window.setTimeout(() => {
-															document
-																.getElementById(`message-feedback-${message.id}`)
-																?.scrollIntoView();
-														}, 0);
-													}}
-												>
-													<svg
-														stroke="currentColor"
-														fill="none"
-														stroke-width="2"
-														viewBox="0 0 24 24"
-														stroke-linecap="round"
-														stroke-linejoin="round"
-														class="w-4 h-4"
-														xmlns="http://www.w3.org/2000/svg"
-														><path
-															d="M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17"
-														/></svg
-													>
-												</button>
-											</Tooltip>
-										{/if}
+								<button
+									class="dark:text-gray-500 underline"
+									on:click={() => {
+										showCitationModal = true;
+										selectedCitation = citation;
+									}}
+								>
+									{citation.source.name}
+								</button>
+							</div>
+						{/each}
+					</div>
+				{/if}
 
-										<Tooltip content={$i18n.t('Read Aloud')} placement="bottom">
-											<button
-												id="speak-button-{message.id}"
-												class="{isLastMessage
-													? 'visible'
-													: 'invisible group-hover:visible'} p-1 rounded dark:hover:text-white hover:text-black transition"
-												on:click={() => {
-													if (!loadingSpeech) {
-														toggleSpeakMessage(message);
-													}
-												}}
-											>
-												{#if loadingSpeech}
-													<svg
-														class=" w-4 h-4"
-														fill="currentColor"
-														viewBox="0 0 24 24"
-														xmlns="http://www.w3.org/2000/svg"
-														><style>
-															.spinner_S1WN {
-																animation: spinner_MGfb 0.8s linear infinite;
-																animation-delay: -0.8s;
-															}
-															.spinner_Km9P {
-																animation-delay: -0.65s;
-															}
-															.spinner_JApP {
-																animation-delay: -0.5s;
-															}
-															@keyframes spinner_MGfb {
-																93.75%,
-																100% {
-																	opacity: 0.2;
-																}
-															}
-														</style><circle class="spinner_S1WN" cx="4" cy="12" r="3" /><circle
-															class="spinner_S1WN spinner_Km9P"
-															cx="12"
-															cy="12"
-															r="3"
-														/><circle
-															class="spinner_S1WN spinner_JApP"
-															cx="20"
-															cy="12"
-															r="3"
-														/></svg
-													>
-												{:else if speaking}
-													<svg
-														xmlns="http://www.w3.org/2000/svg"
-														fill="none"
-														viewBox="0 0 24 24"
-														stroke-width="2"
-														stroke="currentColor"
-														class="w-4 h-4"
-													>
-														<path
-															stroke-linecap="round"
-															stroke-linejoin="round"
-															d="M17.25 9.75 19.5 12m0 0 2.25 2.25M19.5 12l2.25-2.25M19.5 12l-2.25 2.25m-10.5-6 4.72-4.72a.75.75 0 0 1 1.28.53v15.88a.75.75 0 0 1-1.28.53l-4.72-4.72H4.51c-.88 0-1.704-.507-1.938-1.354A9.009 9.009 0 0 1 2.25 12c0-.83.112-1.633.322-2.396C2.806 8.756 3.63 8.25 4.51 8.25H6.75Z"
-														/>
-													</svg>
-												{:else}
-													<svg
-														xmlns="http://www.w3.org/2000/svg"
-														fill="none"
-														viewBox="0 0 24 24"
-														stroke-width="2"
-														stroke="currentColor"
-														class="w-4 h-4"
-													>
-														<path
-															stroke-linecap="round"
-															stroke-linejoin="round"
-															d="M19.114 5.636a9 9 0 010 12.728M16.463 8.288a5.25 5.25 0 010 7.424M6.75 8.25l4.72-4.72a.75.75 0 011.28.53v15.88a.75.75 0 01-1.28.53l-4.72-4.72H4.51c-.88 0-1.704-.507-1.938-1.354A9.01 9.01 0 012.25 12c0-.83.112-1.633.322-2.396C2.806 8.756 3.63 8.25 4.51 8.25H6.75z"
-														/>
-													</svg>
-												{/if}
-											</button>
-										</Tooltip>
-
-										{#if $config.images && !readOnly}
-											<Tooltip content="Generate Image" placement="bottom">
-												<button
-													class="{isLastMessage
-														? 'visible'
-														: 'invisible group-hover:visible'} p-1 rounded dark:hover:text-white hover:text-black transition"
-													on:click={() => {
-														if (!generatingImage) {
-															generateImage(message);
-														}
-													}}
-												>
-													{#if generatingImage}
-														<svg
-															class=" w-4 h-4"
-															fill="currentColor"
-															viewBox="0 0 24 24"
-															xmlns="http://www.w3.org/2000/svg"
-															><style>
-																.spinner_S1WN {
-																	animation: spinner_MGfb 0.8s linear infinite;
-																	animation-delay: -0.8s;
-																}
-																.spinner_Km9P {
-																	animation-delay: -0.65s;
-																}
-																.spinner_JApP {
-																	animation-delay: -0.5s;
-																}
-																@keyframes spinner_MGfb {
-																	93.75%,
-																	100% {
-																		opacity: 0.2;
-																	}
-																}
-															</style><circle class="spinner_S1WN" cx="4" cy="12" r="3" /><circle
-																class="spinner_S1WN spinner_Km9P"
-																cx="12"
-																cy="12"
-																r="3"
-															/><circle
-																class="spinner_S1WN spinner_JApP"
-																cx="20"
-																cy="12"
-																r="3"
-															/></svg
-														>
-													{:else}
-														<svg
-															xmlns="http://www.w3.org/2000/svg"
-															fill="none"
-															viewBox="0 0 24 24"
-															stroke-width="2"
-															stroke="currentColor"
-															class="w-4 h-4"
-														>
-															<path
-																stroke-linecap="round"
-																stroke-linejoin="round"
-																d="m2.25 15.75 5.159-5.159a2.25 2.25 0 0 1 3.182 0l5.159 5.159m-1.5-1.5 1.409-1.409a2.25 2.25 0 0 1 3.182 0l2.909 2.909m-18 3.75h16.5a1.5 1.5 0 0 0 1.5-1.5V6a1.5 1.5 0 0 0-1.5-1.5H3.75A1.5 1.5 0 0 0 2.25 6v12a1.5 1.5 0 0 0 1.5 1.5Zm10.5-11.25h.008v.008h-.008V8.25Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Z"
-															/>
-														</svg>
-													{/if}
-												</button>
-											</Tooltip>
-										{/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);
+									}}
+								>
+									<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>
+
+								<div class="text-xs font-bold self-center min-w-fit dark:text-gray-100">
+									{siblings.indexOf(message.id) + 1} / {siblings.length}
+								</div>
 
-										{#if message.info}
-											<Tooltip content={$i18n.t('Generation Info')} placement="bottom">
-												<button
-													class=" {isLastMessage
-														? 'visible'
-														: 'invisible group-hover:visible'} p-1 rounded dark:hover:text-white hover:text-black transition whitespace-pre-wrap"
-													on:click={() => {
-														console.log(message);
-													}}
-													id="info-{message.id}"
-												>
-													<svg
-														xmlns="http://www.w3.org/2000/svg"
-														fill="none"
-														viewBox="0 0 24 24"
-														stroke-width="2"
-														stroke="currentColor"
-														class="w-4 h-4"
-													>
-														<path
-															stroke-linecap="round"
-															stroke-linejoin="round"
-															d="M11.25 11.25l.041-.02a.75.75 0 011.063.852l-.708 2.836a.75.75 0 001.063.853l.041-.021M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9-3.75h.008v.008H12V8.25z"
-														/>
-													</svg>
-												</button>
-											</Tooltip>
-										{/if}
+								<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"
+									>
+										<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 isLastMessage && !readOnly}
-											<Tooltip content={$i18n.t('Continue Response')} placement="bottom">
-												<button
-													type="button"
-													class="{isLastMessage
-														? 'visible'
-														: 'invisible group-hover:visible'} p-1 rounded dark:hover:text-white hover:text-black transition regenerate-response-button"
-													on:click={() => {
-														continueGeneration();
-													}}
-												>
-													<svg
-														xmlns="http://www.w3.org/2000/svg"
-														fill="none"
-														viewBox="0 0 24 24"
-														stroke-width="2"
-														stroke="currentColor"
-														class="w-4 h-4"
-													>
-														<path
-															stroke-linecap="round"
-															stroke-linejoin="round"
-															d="M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"
-														/>
-														<path
-															stroke-linecap="round"
-															stroke-linejoin="round"
-															d="M15.91 11.672a.375.375 0 0 1 0 .656l-5.603 3.113a.375.375 0 0 1-.557-.328V8.887c0-.286.307-.466.557-.327l5.603 3.112Z"
-														/>
-													</svg>
-												</button>
-											</Tooltip>
-
-											<Tooltip content={$i18n.t('Regenerate')} placement="bottom">
-												<button
-													type="button"
-													class="{isLastMessage
-														? 'visible'
-														: 'invisible group-hover:visible'} p-1 rounded dark:hover:text-white hover:text-black transition regenerate-response-button"
-													on:click={regenerateResponse}
-												>
-													<svg
-														xmlns="http://www.w3.org/2000/svg"
-														fill="none"
-														viewBox="0 0 24 24"
-														stroke-width="2"
-														stroke="currentColor"
-														class="w-4 h-4"
-													>
-														<path
-															stroke-linecap="round"
-															stroke-linejoin="round"
-															d="M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0l3.181 3.183a8.25 8.25 0 0013.803-3.7M4.031 9.865a8.25 8.25 0 0113.803-3.7l3.181 3.182m0-4.991v4.99"
-														/>
-													</svg>
-												</button>
-											</Tooltip>
-										{/if}
-									</div>
-								{/if}
+						{#if !readOnly}
+							<Tooltip content={$i18n.t('Edit')} placement="bottom">
+								<button
+									class="{isLastMessage
+										? 'visible'
+										: 'invisible group-hover:visible'} p-1 rounded dark:hover:text-white hover:text-black transition"
+									on:click={() => {
+										editMessageHandler();
+									}}
+								>
+									<svg
+										xmlns="http://www.w3.org/2000/svg"
+										fill="none"
+										viewBox="0 0 24 24"
+										stroke-width="2"
+										stroke="currentColor"
+										class="w-4 h-4"
+									>
+										<path
+											stroke-linecap="round"
+											stroke-linejoin="round"
+											d="M16.862 4.487l1.687-1.688a1.875 1.875 0 112.652 2.652L6.832 19.82a4.5 4.5 0 01-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 011.13-1.897L16.863 4.487zm0 0L19.5 7.125"
+										/>
+									</svg>
+								</button>
+							</Tooltip>
+						{/if}
 
-								{#if showRateComment}
-									<RateComment
-										messageId={message.id}
-										bind:show={showRateComment}
-										bind:message
-										on:submit={() => {
-											updateChatMessages();
-										}}
+						<Tooltip content={$i18n.t('Copy')} placement="bottom">
+							<button
+								class="{isLastMessage
+									? 'visible'
+									: 'invisible group-hover:visible'} p-1 rounded dark:hover:text-white hover:text-black transition copy-response-button"
+								on:click={() => {
+									copyToClipboard(message.content);
+								}}
+							>
+								<svg
+									xmlns="http://www.w3.org/2000/svg"
+									fill="none"
+									viewBox="0 0 24 24"
+									stroke-width="2"
+									stroke="currentColor"
+									class="w-4 h-4"
+								>
+									<path
+										stroke-linecap="round"
+										stroke-linejoin="round"
+										d="M15.666 3.888A2.25 2.25 0 0013.5 2.25h-3c-1.03 0-1.9.693-2.166 1.638m7.332 0c.055.194.084.4.084.612v0a.75.75 0 01-.75.75H9a.75.75 0 01-.75-.75v0c0-.212.03-.418.084-.612m7.332 0c.646.049 1.288.11 1.927.184 1.1.128 1.907 1.077 1.907 2.185V19.5a2.25 2.25 0 01-2.25 2.25H6.75A2.25 2.25 0 014.5 19.5V6.257c0-1.108.806-2.057 1.907-2.185a48.208 48.208 0 011.927-.184"
 									/>
+								</svg>
+							</button>
+						</Tooltip>
+
+						{#if !readOnly}
+							<Tooltip content={$i18n.t('Good Response')} placement="bottom">
+								<button
+									class="{isLastMessage
+										? 'visible'
+										: 'invisible group-hover:visible'} p-1 rounded {message?.annotation?.rating ===
+									1
+										? 'bg-gray-100 dark:bg-gray-800'
+										: ''} dark:hover:text-white hover:text-black transition"
+									on:click={() => {
+										rateMessage(message.id, 1);
+										showRateComment = true;
+
+										window.setTimeout(() => {
+											document.getElementById(`message-feedback-${message.id}`)?.scrollIntoView();
+										}, 0);
+									}}
+								>
+									<svg
+										stroke="currentColor"
+										fill="none"
+										stroke-width="2"
+										viewBox="0 0 24 24"
+										stroke-linecap="round"
+										stroke-linejoin="round"
+										class="w-4 h-4"
+										xmlns="http://www.w3.org/2000/svg"
+									>
+										<path
+											d="M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3"
+										/>
+									</svg>
+								</button>
+							</Tooltip>
+
+							<Tooltip content={$i18n.t('Bad Response')} placement="bottom">
+								<button
+									class="{isLastMessage
+										? 'visible'
+										: 'invisible group-hover:visible'} p-1 rounded {message?.annotation?.rating ===
+									-1
+										? 'bg-gray-100 dark:bg-gray-800'
+										: ''} dark:hover:text-white hover:text-black transition"
+									on:click={() => {
+										rateMessage(message.id, -1);
+										showRateComment = true;
+										window.setTimeout(() => {
+											document.getElementById(`message-feedback-${message.id}`)?.scrollIntoView();
+										}, 0);
+									}}
+								>
+									<svg
+										stroke="currentColor"
+										fill="none"
+										stroke-width="2"
+										viewBox="0 0 24 24"
+										stroke-linecap="round"
+										stroke-linejoin="round"
+										class="w-4 h-4"
+										xmlns="http://www.w3.org/2000/svg"
+									>
+										<path
+											d="M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17"
+										/>
+									</svg>
+								</button>
+							</Tooltip>
+						{/if}
+
+						<Tooltip content={$i18n.t('Read Aloud')} placement="bottom">
+							<button
+								id="speak-button-{message.id}"
+								class="{isLastMessage
+									? 'visible'
+									: 'invisible group-hover:visible'} p-1 rounded dark:hover:text-white hover:text-black transition"
+								on:click={() => {
+									if (!loadingSpeech) {
+										toggleSpeakMessage(message);
+									}
+								}}
+							>
+								{#if loadingSpeech}
+									<svg
+										class=" w-4 h-4"
+										fill="currentColor"
+										viewBox="0 0 24 24"
+										xmlns="http://www.w3.org/2000/svg"
+									>
+										<style>
+											.spinner_S1WN {
+												animation: spinner_MGfb 0.8s linear infinite;
+												animation-delay: -0.8s;
+											}
+
+											.spinner_Km9P {
+												animation-delay: -0.65s;
+											}
+
+											.spinner_JApP {
+												animation-delay: -0.5s;
+											}
+
+											@keyframes spinner_MGfb {
+												93.75%,
+												100% {
+													opacity: 0.2;
+												}
+											}
+										</style>
+										<circle class="spinner_S1WN" cx="4" cy="12" r="3" />
+										<circle class="spinner_S1WN spinner_Km9P" cx="12" cy="12" r="3" />
+										<circle class="spinner_S1WN spinner_JApP" cx="20" cy="12" r="3" />
+									</svg>
+								{:else if speaking}
+									<svg
+										xmlns="http://www.w3.org/2000/svg"
+										fill="none"
+										viewBox="0 0 24 24"
+										stroke-width="2"
+										stroke="currentColor"
+										class="w-4 h-4"
+									>
+										<path
+											stroke-linecap="round"
+											stroke-linejoin="round"
+											d="M17.25 9.75 19.5 12m0 0 2.25 2.25M19.5 12l2.25-2.25M19.5 12l-2.25 2.25m-10.5-6 4.72-4.72a.75.75 0 0 1 1.28.53v15.88a.75.75 0 0 1-1.28.53l-4.72-4.72H4.51c-.88 0-1.704-.507-1.938-1.354A9.009 9.009 0 0 1 2.25 12c0-.83.112-1.633.322-2.396C2.806 8.756 3.63 8.25 4.51 8.25H6.75Z"
+										/>
+									</svg>
+								{:else}
+									<svg
+										xmlns="http://www.w3.org/2000/svg"
+										fill="none"
+										viewBox="0 0 24 24"
+										stroke-width="2"
+										stroke="currentColor"
+										class="w-4 h-4"
+									>
+										<path
+											stroke-linecap="round"
+											stroke-linejoin="round"
+											d="M19.114 5.636a9 9 0 010 12.728M16.463 8.288a5.25 5.25 0 010 7.424M6.75 8.25l4.72-4.72a.75.75 0 011.28.53v15.88a.75.75 0 01-1.28.53l-4.72-4.72H4.51c-.88 0-1.704-.507-1.938-1.354A9.01 9.01 0 012.25 12c0-.83.112-1.633.322-2.396C2.806 8.756 3.63 8.25 4.51 8.25H6.75z"
+										/>
+									</svg>
 								{/if}
-							</div>
+							</button>
+						</Tooltip>
+
+						{#if $config.images && !readOnly}
+							<Tooltip content="Generate Image" placement="bottom">
+								<button
+									class="{isLastMessage
+										? 'visible'
+										: 'invisible group-hover:visible'} p-1 rounded dark:hover:text-white hover:text-black transition"
+									on:click={() => {
+										if (!generatingImage) {
+											generateImage(message);
+										}
+									}}
+								>
+									{#if generatingImage}
+										<svg
+											class=" w-4 h-4"
+											fill="currentColor"
+											viewBox="0 0 24 24"
+											xmlns="http://www.w3.org/2000/svg"
+										>
+											<style>
+												.spinner_S1WN {
+													animation: spinner_MGfb 0.8s linear infinite;
+													animation-delay: -0.8s;
+												}
+
+												.spinner_Km9P {
+													animation-delay: -0.65s;
+												}
+
+												.spinner_JApP {
+													animation-delay: -0.5s;
+												}
+
+												@keyframes spinner_MGfb {
+													93.75%,
+													100% {
+														opacity: 0.2;
+													}
+												}
+											</style>
+											<circle class="spinner_S1WN" cx="4" cy="12" r="3" />
+											<circle class="spinner_S1WN spinner_Km9P" cx="12" cy="12" r="3" />
+											<circle class="spinner_S1WN spinner_JApP" cx="20" cy="12" r="3" />
+										</svg>
+									{:else}
+										<svg
+											xmlns="http://www.w3.org/2000/svg"
+											fill="none"
+											viewBox="0 0 24 24"
+											stroke-width="2"
+											stroke="currentColor"
+											class="w-4 h-4"
+										>
+											<path
+												stroke-linecap="round"
+												stroke-linejoin="round"
+												d="m2.25 15.75 5.159-5.159a2.25 2.25 0 0 1 3.182 0l5.159 5.159m-1.5-1.5 1.409-1.409a2.25 2.25 0 0 1 3.182 0l2.909 2.909m-18 3.75h16.5a1.5 1.5 0 0 0 1.5-1.5V6a1.5 1.5 0 0 0-1.5-1.5H3.75A1.5 1.5 0 0 0 2.25 6v12a1.5 1.5 0 0 0 1.5 1.5Zm10.5-11.25h.008v.008h-.008V8.25Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Z"
+											/>
+										</svg>
+									{/if}
+								</button>
+							</Tooltip>
+						{/if}
+
+						{#if message.info}
+							<Tooltip content={$i18n.t('Generation Info')} placement="bottom">
+								<button
+									class=" {isLastMessage
+										? 'visible'
+										: 'invisible group-hover:visible'} p-1 rounded dark:hover:text-white hover:text-black transition whitespace-pre-wrap"
+									on:click={() => {
+										console.log(message);
+									}}
+									id="info-{message.id}"
+								>
+									<svg
+										xmlns="http://www.w3.org/2000/svg"
+										fill="none"
+										viewBox="0 0 24 24"
+										stroke-width="2"
+										stroke="currentColor"
+										class="w-4 h-4"
+									>
+										<path
+											stroke-linecap="round"
+											stroke-linejoin="round"
+											d="M11.25 11.25l.041-.02a.75.75 0 011.063.852l-.708 2.836a.75.75 0 001.063.853l.041-.021M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9-3.75h.008v.008H12V8.25z"
+										/>
+									</svg>
+								</button>
+							</Tooltip>
+						{/if}
+
+						{#if isLastMessage && !readOnly}
+							<Tooltip content={$i18n.t('Continue Response')} placement="bottom">
+								<button
+									type="button"
+									class="{isLastMessage
+										? 'visible'
+										: 'invisible group-hover:visible'} p-1 rounded dark:hover:text-white hover:text-black transition regenerate-response-button"
+									on:click={() => {
+										continueGeneration();
+									}}
+								>
+									<svg
+										xmlns="http://www.w3.org/2000/svg"
+										fill="none"
+										viewBox="0 0 24 24"
+										stroke-width="2"
+										stroke="currentColor"
+										class="w-4 h-4"
+									>
+										<path
+											stroke-linecap="round"
+											stroke-linejoin="round"
+											d="M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"
+										/>
+										<path
+											stroke-linecap="round"
+											stroke-linejoin="round"
+											d="M15.91 11.672a.375.375 0 0 1 0 .656l-5.603 3.113a.375.375 0 0 1-.557-.328V8.887c0-.286.307-.466.557-.327l5.603 3.112Z"
+										/>
+									</svg>
+								</button>
+							</Tooltip>
+
+							<Tooltip content={$i18n.t('Regenerate')} placement="bottom">
+								<button
+									type="button"
+									class="{isLastMessage
+										? 'visible'
+										: 'invisible group-hover:visible'} p-1 rounded dark:hover:text-white hover:text-black transition regenerate-response-button"
+									on:click={regenerateResponse}
+								>
+									<svg
+										xmlns="http://www.w3.org/2000/svg"
+										fill="none"
+										viewBox="0 0 24 24"
+										stroke-width="2"
+										stroke="currentColor"
+										class="w-4 h-4"
+									>
+										<path
+											stroke-linecap="round"
+											stroke-linejoin="round"
+											d="M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0l3.181 3.183a8.25 8.25 0 0013.803-3.7M4.031 9.865a8.25 8.25 0 0113.803-3.7l3.181 3.182m0-4.991v4.99"
+										/>
+									</svg>
+								</button>
+							</Tooltip>
 						{/if}
 					</div>
-				</div>
+				{/if}
+
+				{#if showRateComment}
+					<RateComment
+						messageId={message.id}
+						bind:show={showRateComment}
+						bind:message
+						on:submit={() => {
+							updateChatMessages();
+						}}
+					/>
+				{/if}
 			{/if}
 		</div>
 	</div>

+ 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={() => {

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

@@ -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}
 

+ 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>

+ 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}
 							/>
 

+ 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>
 

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

@@ -51,7 +51,7 @@
 				<button
 					class=" p-5"
 					on:click={() => {
-						downloadImage(src, 'Image.png');
+						downloadImage(src, src.substring(src.lastIndexOf('/') + 1));
 					}}
 				>
 					<svg

+ 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>

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

@@ -0,0 +1,74 @@
+<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;
+
+	const submitHandler = async () => {
+		const res = await updateRAGConfig(localStorage.token, {
+			web_loader_ssl_verification: webLoaderSSLVerification
+		});
+	};
+
+	onMount(async () => {
+		const res = await getRAGConfig(localStorage.token);
+
+		if (res) {
+			webLoaderSSLVerification = res.web_loader_ssl_verification;
+		}
+	});
+</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('Retrieval Augmented Generation 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>
+	</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>

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

@@ -419,7 +419,7 @@
 							await chats.set(await getChatList(localStorage.token));
 						}}
 					>
-						all
+						{$i18n.t('all')}
 					</button>
 					{#each $tags as tag}
 						<button

+ 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>

+ 3 - 3
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,7 +69,7 @@
 				}}
 			>
 				<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" />

+ 26 - 4
src/lib/i18n/locales/ar-BH/translation.json

@@ -35,6 +35,7 @@
 	"Already have an account?": "هل تملك حساب ؟",
 	"an assistant": "مساعد",
 	"and": "و",
+	"and create a new shared link.": "",
 	"API Base URL": "API الرابط الرئيسي",
 	"API Key": "API مفتاح",
 	"API Key created.": "API تم أنشاء المفتاح",
@@ -54,8 +55,10 @@
 	"available!": "متاح",
 	"Back": "خلف",
 	"Bad Response": "استجابة خطاء",
+	"before": "",
 	"Being lazy": "كون كسول",
 	"Builder Mode": "بناء الموديل",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "اللغاء",
 	"Categories": "التصنيفات",
 	"Change Password": "تغير الباسورد",
@@ -70,7 +73,9 @@
 	"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",
@@ -98,6 +103,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": "الموديل المختار",
@@ -105,6 +112,7 @@
 	"Custom": "مخصص",
 	"Customize Ollama models for a specific purpose": "تخصيص الموديل Ollama لغرض محدد",
 	"Dark": "مظلم",
+	"Dashboard": "",
 	"Database": "قاعدة البيانات",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
 	"Default": "الإفتراضي",
@@ -120,6 +128,7 @@
 	"Delete chat": "حذف المحادثه",
 	"Delete Chat": "حذف المحادثه.",
 	"Delete Chats": "حذ المحادثات",
+	"delete this link": "",
 	"Delete User": "حذف المستخدم",
 	"Deleted {{deleteModelTag}}": "حذف {{deleteModelTag}}",
 	"Deleted {{tagName}}": "حذف {{tagName}}",
@@ -146,6 +155,7 @@
 	"Edit Doc": "تعديل الملف",
 	"Edit User": "تعديل المستخدم",
 	"Email": "البريد",
+	"Embedding Model": "",
 	"Embedding Model Engine": "تضمين محرك النموذج",
 	"Embedding model set to \"{{embedding_model}}\"": "تم تعيين نموذج التضمين على \"{{embedding_model}}\"",
 	"Enable Chat History": "تمكين سجل الدردشة",
@@ -167,6 +177,7 @@
 	"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": "ادخل كلمة المرور",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "إدارة موديلات Ollama",
 	"Max Tokens": "Max Tokens",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "يمكن تنزيل 3 نماذج كحد أقصى في وقت واحد. الرجاء معاودة المحاولة في وقت لاحق.",
+	"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",
@@ -258,6 +270,8 @@
 	"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": "لست متأكدا ماذا أكتب؟ التبديل إلى",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "مطلوب عنوان URL/مفتاح OpenAI.",
 	"or": "أو",
 	"Other": "آخر",
+	"Overview": "",
 	"Parameters": "Parameters",
 	"Password": "الباسورد",
 	"PDF document (.pdf)": "PDF ملف (.pdf)",
@@ -300,6 +315,7 @@
 	"Prompt Content": "محتوى عاجل",
 	"Prompt suggestions": "اقتراحات سريعة",
 	"Prompts": "حث",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "سحب الموديل من Ollama.com",
 	"Pull Progress": "سحب التقدم",
 	"Query Params": "Query Params",
@@ -312,13 +328,17 @@
 	"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": "النسخ التلقائي للاستجابة إلى الحافظة",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "منصب",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
@@ -346,7 +366,9 @@
 	"Server connection verified": "تم التحقق من اتصال الخادم",
 	"Set as default": "الافتراضي",
 	"Set Default Model": "تفعيد الموديل الافتراضي",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "حجم الصورة",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "ضبط الخطوات",
 	"Set Title Auto-Generation Model": "قم بتعيين نموذج إنشاء العنوان تلقائيًا",
 	"Set Voice": "ضبط الصوت",
@@ -365,6 +387,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 SpeechRecognition غير مدعومة في هذا المتصفح.",
@@ -409,11 +432,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}})": "تحديث الموديلات التضمين (e.g. {{model}})",
 	"Update password": "تحديث كلمة المرور",
-	"Update Reranking Model": "تحديث الموديل إعادة الترتيب",
-	"Update reranking model (e.g. {{model}})": "تحديث الموديل إعادة الترتيب (e.g. {{model}})",
 	"Upload a GGUF model": "رفع موديل نوع GGUF",
 	"Upload files": "رفع الملفات",
 	"Upload Progress": "جاري التحميل",
@@ -431,6 +450,7 @@
 	"Version": "إصدار",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "تحذير: إذا قمت بتحديث أو تغيير نموذج التضمين الخاص بك، فستحتاج إلى إعادة استيراد كافة المستندات.",
 	"Web": "Web",
+	"Web Params": "",
 	"Webhook URL": "Webhook الرابط",
 	"WebUI Add-ons": "WebUI الأضافات",
 	"WebUI Settings": "WebUI اعدادات",
@@ -441,6 +461,8 @@
 	"Write a prompt suggestion (e.g. Who are you?)": "اكتب اقتراحًا سريعًا (على سبيل المثال، من أنت؟)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "اكتب ملخصًا في 50 كلمة يلخص [الموضوع أو الكلمة الرئيسية].",
 	"You": "أنت",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "مساعدك المفيد هنا",
 	"You're now logged in.": "لقد قمت الآن بتسجيل الدخول.",
 	"Youtube": "Youtube"

+ 26 - 4
src/lib/i18n/locales/bg-BG/translation.json

@@ -35,6 +35,7 @@
 	"Already have an account?": "Вече имате акаунт? ",
 	"an assistant": "асистент",
 	"and": "и",
+	"and create a new shared link.": "",
 	"API Base URL": "API Базов URL",
 	"API Key": "API Ключ",
 	"API Key created.": "",
@@ -54,8 +55,10 @@
 	"available!": "наличен!",
 	"Back": "Назад",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "Режим на Създаване",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "Отказ",
 	"Categories": "Категории",
 	"Change Password": "Промяна на Парола",
@@ -70,7 +73,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.": "",
@@ -98,6 +103,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": "Текущ модел",
@@ -105,6 +112,7 @@
 	"Custom": "Персонализиран",
 	"Customize Ollama models for a specific purpose": "Персонализиране на Ollama моделите за конкретна цел",
 	"Dark": "Тъмен",
+	"Dashboard": "",
 	"Database": "База данни",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
 	"Default": "По подразбиране",
@@ -120,6 +128,7 @@
 	"Delete chat": "Изтриване на чат",
 	"Delete Chat": "",
 	"Delete Chats": "Изтриване на Чатове",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "Изтрито {{deleteModelTag}}",
 	"Deleted {{tagName}}": "",
@@ -146,6 +155,7 @@
 	"Edit Doc": "Редактиране на документ",
 	"Edit User": "Редактиране на потребител",
 	"Email": "Имейл",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "Вклюване на Чат История",
@@ -167,6 +177,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": "Въведете вашата парола",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "Управление на Ollama Моделите",
 	"Max Tokens": "Max Tokens",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Максимум 3 модели могат да бъдат сваляни едновременно. Моля, опитайте отново по-късно.",
+	"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",
@@ -258,6 +270,8 @@
 	"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": "Не сте сигурни, какво да напишете? Превключете към",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "или",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Параметри",
 	"Password": "Парола",
 	"PDF document (.pdf)": "",
@@ -300,6 +315,7 @@
 	"Prompt Content": "Съдържание на промпта",
 	"Prompt suggestions": "Промпт предложения",
 	"Prompts": "Промптове",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Издърпайте модел от Ollama.com",
 	"Pull Progress": "Прогрес на издърпването",
 	"Query Params": "Query Параметри",
@@ -312,13 +328,17 @@
 	"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",
 	"Response AutoCopy to Clipboard": "Аувтоматично копиране на отговор в клипборда",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "Роля",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
@@ -346,7 +366,9 @@
 	"Server connection verified": "Server connection verified",
 	"Set as default": "Задай по подразбиране",
 	"Set Default Model": "Задай Модел По Подразбиране",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "Задай Размер на Изображението",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "Задай Стъпки",
 	"Set Title Auto-Generation Model": "Задай Модел за Автоматично Генериране на Заглавие",
 	"Set Voice": "Задай Глас",
@@ -365,6 +387,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.",
@@ -409,11 +432,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": "Прогрес на качването",
@@ -431,6 +450,7 @@
 	"Version": "Версия",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Уеб",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "WebUI Добавки",
 	"WebUI Settings": "WebUI Настройки",
@@ -441,6 +461,8 @@
 	"Write a prompt suggestion (e.g. Who are you?)": "Напиши предложение за промпт (напр. Кой сте вие?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Напиши описание в 50 знака, което описва [тема или ключова дума].",
 	"You": "Вие",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "Вие сте полезен асистент.",
 	"You're now logged in.": "Сега, вие влязохте в системата.",
 	"Youtube": ""

+ 26 - 4
src/lib/i18n/locales/bn-BD/translation.json

@@ -35,6 +35,7 @@
 	"Already have an account?": "আগে থেকেই একাউন্ট আছে?",
 	"an assistant": "একটা এসিস্ট্যান্ট",
 	"and": "এবং",
+	"and create a new shared link.": "",
 	"API Base URL": "এপিআই বেজ ইউআরএল",
 	"API Key": "এপিআই কোড",
 	"API Key created.": "",
@@ -54,8 +55,10 @@
 	"available!": "উপলব্ধ!",
 	"Back": "পেছনে",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "বিল্ডার মোড",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "বাতিল",
 	"Categories": "ক্যাটাগরিসমূহ",
 	"Change Password": "পাসওয়ার্ড পরিবর্তন করুন",
@@ -70,7 +73,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.": "",
@@ -98,6 +103,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": "বর্তমান মডেল",
@@ -105,6 +112,7 @@
 	"Custom": "কাস্টম",
 	"Customize Ollama models for a specific purpose": "নির্দিষ্ট উদ্দেশ্যে Ollama মডেল পরিবর্তন করুন",
 	"Dark": "ডার্ক",
+	"Dashboard": "",
 	"Database": "ডেটাবেজ",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
 	"Default": "ডিফল্ট",
@@ -120,6 +128,7 @@
 	"Delete chat": "চ্যাট মুছে ফেলুন",
 	"Delete Chat": "",
 	"Delete Chats": "চ্যাটগুলো মুছে ফেলুন",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} মুছে ফেলা হয়েছে",
 	"Deleted {{tagName}}": "",
@@ -146,6 +155,7 @@
 	"Edit Doc": "ডকুমেন্ট এডিট করুন",
 	"Edit User": "ইউজার এডিট করুন",
 	"Email": "ইমেইল",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "চ্যাট হিস্টোরি চালু করুন",
@@ -167,6 +177,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": "আপনার পাসওয়ার্ড লিখুন",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "Ollama মডেলসূহ ব্যবস্থাপনা করুন",
 	"Max Tokens": "সর্বোচ্চ টোকন",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "একসঙ্গে সর্বোচ্চ তিনটি মডেল ডাউনলোড করা যায়। দয়া করে পরে আবার চেষ্টা করুন।",
+	"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",
@@ -258,6 +270,8 @@
 	"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": "কী লিখতে হবে নিশ্চিত না? পরিবর্তন করুন:",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "অথবা",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "প্যারামিটারসমূহ",
 	"Password": "পাসওয়ার্ড",
 	"PDF document (.pdf)": "",
@@ -300,6 +315,7 @@
 	"Prompt Content": "প্রম্পট কন্টেন্ট",
 	"Prompt suggestions": "প্রম্পট সাজেশনসমূহ",
 	"Prompts": "প্রম্পটসমূহ",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Ollama.com থেকে একটি টেনে আনুন আনুন",
 	"Pull Progress": "Pull চলমান",
 	"Query Params": "Query প্যারামিটারসমূহ",
@@ -312,13 +328,17 @@
 	"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": "ভেক্টর স্টোরেজ রিসেট করুন",
 	"Response AutoCopy to Clipboard": "রেসপন্সগুলো স্বয়ংক্রিভাবে ক্লিপবোর্ডে কপি হবে",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "পদবি",
 	"Rosé Pine": "রোজ পাইন",
 	"Rosé Pine Dawn": "ভোরের রোজ পাইন",
@@ -346,7 +366,9 @@
 	"Server connection verified": "সার্ভার কানেকশন যাচাই করা হয়েছে",
 	"Set as default": "ডিফল্ট হিসেবে নির্ধারণ করুন",
 	"Set Default Model": "ডিফল্ট মডেল নির্ধারণ করুন",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "ছবির সাইজ নির্ধারণ করুন",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "পরবর্তী ধাপসমূহ",
 	"Set Title Auto-Generation Model": "শিরোনাম অটোজেনারেশন মডেন নির্ধারণ করুন",
 	"Set Voice": "কন্ঠস্বর নির্ধারণ করুন",
@@ -365,6 +387,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.": "এই ব্রাউজার স্পিচরিকগনিশন এপিআই সাপোর্ট করে না।",
@@ -409,11 +432,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": "আপলোড হচ্ছে",
@@ -431,6 +450,7 @@
 	"Version": "ভার্সন",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "ওয়েব",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "WebUI এড-অনসমূহ",
 	"WebUI Settings": "WebUI সেটিংসমূহ",
@@ -441,6 +461,8 @@
 	"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] এর একটি সারসংক্ষেপ লিখুন।",
 	"You": "আপনি",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "আপনি একজন উপকারী এসিস্ট্যান্ট",
 	"You're now logged in.": "আপনি এখন লগইন করা অবস্থায় আছেন",
 	"Youtube": ""

+ 26 - 4
src/lib/i18n/locales/ca-ES/translation.json

@@ -35,6 +35,7 @@
 	"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.": "",
@@ -54,8 +55,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",
@@ -70,7 +73,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.": "",
@@ -98,6 +103,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",
@@ -105,6 +112,7 @@
 	"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",
 	"Default": "Per defecte",
@@ -120,6 +128,7 @@
 	"Delete chat": "Esborra xat",
 	"Delete Chat": "",
 	"Delete Chats": "Esborra Xats",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "Esborrat {{deleteModelTag}}",
 	"Deleted {{tagName}}": "",
@@ -146,6 +155,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",
@@ -167,6 +177,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",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "Gestiona Models Ollama",
 	"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.",
+	"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",
@@ -258,6 +270,8 @@
 	"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",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "o",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Paràmetres",
 	"Password": "Contrasenya",
 	"PDF document (.pdf)": "",
@@ -300,6 +315,7 @@
 	"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",
@@ -312,13 +328,17 @@
 	"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",
 	"Response AutoCopy to Clipboard": "Resposta AutoCopiar al Portapapers",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "Rol",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Albada Rosé Pine",
@@ -346,7 +366,9 @@
 	"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 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",
@@ -365,6 +387,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.",
@@ -409,11 +432,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",
@@ -431,6 +450,7 @@
 	"Version": "Versió",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Web",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "Complements de WebUI",
 	"WebUI Settings": "Configuració de WebUI",
@@ -441,6 +461,8 @@
 	"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].",
 	"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": ""

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

@@ -35,6 +35,7 @@
 	"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",
@@ -54,8 +55,10 @@
 	"available!": "verfügbar!",
 	"Back": "Zurück",
 	"Bad Response": "Schlechte Antwort",
+	"before": "",
 	"Being lazy": "Faul sein",
 	"Builder Mode": "Builder Modus",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "Abbrechen",
 	"Categories": "Kategorien",
 	"Change Password": "Passwort ändern",
@@ -70,7 +73,9 @@
 	"Chunk Overlap": "Chunk Overlap",
 	"Chunk Params": "Chunk Parameter",
 	"Chunk Size": "Chunk Size",
+	"Citation": "",
 	"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.": "",
@@ -93,11 +98,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",
@@ -105,6 +112,7 @@
 	"Custom": "Benutzerdefiniert",
 	"Customize Ollama models for a specific purpose": "Ollama-Modelle für einen bestimmten Zweck anpassen",
 	"Dark": "Dunkel",
+	"Dashboard": "",
 	"Database": "Datenbank",
 	"DD/MM/YYYY HH:mm": "DD.MM.YYYY HH:mm",
 	"Default": "Standard",
@@ -120,6 +128,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",
@@ -146,8 +155,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",
@@ -167,6 +177,7 @@
 	"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",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "Ollama-Modelle verwalten",
 	"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.",
+	"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": "",
 	"Mirostat": "Mirostat",
 	"Mirostat Eta": "Mirostat Eta",
@@ -258,6 +270,8 @@
 	"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",
@@ -265,7 +279,7 @@
 	"Notifications": "Desktop-Benachrichtigungen",
 	"Off": "Aus",
 	"Okay, Let's Go!": "Okay, los geht's!",
-	"OLED Dark": "",
+	"OLED Dark": "OLED Dunkel",
 	"Ollama": "",
 	"Ollama Base URL": "Ollama Basis URL",
 	"Ollama Version": "Ollama-Version",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "OpenAI URL/Key erforderlich.",
 	"or": "oder",
 	"Other": "Andere",
+	"Overview": "Übersicht",
 	"Parameters": "Parameter",
 	"Password": "Passwort",
 	"PDF document (.pdf)": "PDF-Dokument (.pdf)",
@@ -293,13 +308,14 @@
 	"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",
 	"Profile Image": "Profilbild",
 	"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",
@@ -312,13 +328,17 @@
 	"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": "",
 	"Reranking model disabled": "",
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset Vector Storage": "Vektorspeicher zurücksetzen",
 	"Response AutoCopy to Clipboard": "Antwort automatisch in die Zwischenablage kopieren",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "Rolle",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
@@ -331,7 +351,7 @@
 	"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",
@@ -346,7 +366,9 @@
 	"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 reranking model (e.g. {{model}})": "",
 	"Set Steps": "Schritte festlegen",
 	"Set Title Auto-Generation Model": "Modell für automatische Titelgenerierung festlegen",
 	"Set Voice": "Stimme festlegen",
@@ -365,6 +387,7 @@
 	"Sign Out": "Abmelden",
 	"Sign up": "Registrieren",
 	"Signing in": "Anmeldung",
+	"Source": "",
 	"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.",
@@ -409,18 +432,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",
@@ -431,6 +450,7 @@
 	"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",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "WebUI-Add-Ons",
 	"WebUI Settings": "WebUI-Einstellungen",
@@ -441,6 +461,8 @@
 	"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.",
 	"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": ""

+ 26 - 4
src/lib/i18n/locales/dg-DG/translation.json

@@ -35,6 +35,7 @@
 	"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.": "",
@@ -54,8 +55,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",
@@ -70,7 +73,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.": "",
@@ -98,6 +103,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",
@@ -105,6 +112,7 @@
 	"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",
 	"Default": "Default",
@@ -120,6 +128,7 @@
 	"Delete chat": "Delete chat",
 	"Delete Chat": "",
 	"Delete Chats": "Delete Chats",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "Deleted {{deleteModelTag}}",
 	"Deleted {{tagName}}": "",
@@ -146,6 +155,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",
@@ -167,6 +177,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",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "Manage Ollama Wowdels",
 	"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.",
+	"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",
@@ -258,6 +270,8 @@
 	"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",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "or",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Parametos",
 	"Password": "Barkword",
 	"PDF document (.pdf)": "",
@@ -300,6 +315,7 @@
 	"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",
@@ -312,13 +328,17 @@
 	"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",
 	"Response AutoCopy to Clipboard": "Copy Bark Auto Bark",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "Role",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
@@ -346,7 +366,9 @@
 	"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 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",
@@ -365,6 +387,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.",
@@ -409,11 +432,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",
@@ -431,6 +450,7 @@
 	"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 Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "WebUI Add-ons very add-ons",
 	"WebUI Settings": "WebUI Settings much settings",
@@ -441,6 +461,8 @@
 	"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.",
 	"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": ""

+ 26 - 4
src/lib/i18n/locales/en-GB/translation.json

@@ -35,6 +35,7 @@
 	"Already have an account?": "",
 	"an assistant": "",
 	"and": "",
+	"and create a new shared link.": "",
 	"API Base URL": "",
 	"API Key": "",
 	"API Key created.": "",
@@ -54,8 +55,10 @@
 	"available!": "",
 	"Back": "",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "",
 	"Categories": "",
 	"Change Password": "",
@@ -70,7 +73,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.": "",
@@ -98,6 +103,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": "",
@@ -105,6 +112,7 @@
 	"Custom": "",
 	"Customize Ollama models for a specific purpose": "",
 	"Dark": "",
+	"Dashboard": "",
 	"Database": "",
 	"DD/MM/YYYY HH:mm": "",
 	"Default": "",
@@ -120,6 +128,7 @@
 	"Delete chat": "",
 	"Delete Chat": "",
 	"Delete Chats": "",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "",
 	"Deleted {{tagName}}": "",
@@ -146,6 +155,7 @@
 	"Edit Doc": "",
 	"Edit User": "",
 	"Email": "",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "",
@@ -167,6 +177,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": "",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "",
 	"Max Tokens": "",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "",
+	"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": "",
@@ -258,6 +270,8 @@
 	"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": "",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "",
 	"Password": "",
 	"PDF document (.pdf)": "",
@@ -300,6 +315,7 @@
 	"Prompt Content": "",
 	"Prompt suggestions": "",
 	"Prompts": "",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "",
 	"Pull Progress": "",
 	"Query Params": "",
@@ -312,13 +328,17 @@
 	"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": "",
 	"Response AutoCopy to Clipboard": "",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "",
 	"Rosé Pine": "",
 	"Rosé Pine Dawn": "",
@@ -346,7 +366,9 @@
 	"Server connection verified": "",
 	"Set as default": "",
 	"Set Default Model": "",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "",
 	"Set Title Auto-Generation Model": "",
 	"Set Voice": "",
@@ -365,6 +387,7 @@
 	"Sign Out": "",
 	"Sign up": "",
 	"Signing in": "",
+	"Source": "",
 	"Speech recognition error: {{error}}": "",
 	"Speech-to-Text Engine": "",
 	"SpeechRecognition API is not supported in this browser.": "",
@@ -409,11 +432,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": "",
@@ -431,6 +450,7 @@
 	"Version": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "",
 	"WebUI Settings": "",
@@ -441,6 +461,8 @@
 	"Write a prompt suggestion (e.g. Who are you?)": "",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "",
 	"You": "",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "",
 	"You're now logged in.": "",
 	"Youtube": ""

+ 26 - 4
src/lib/i18n/locales/en-US/translation.json

@@ -35,6 +35,7 @@
 	"Already have an account?": "",
 	"an assistant": "",
 	"and": "",
+	"and create a new shared link.": "",
 	"API Base URL": "",
 	"API Key": "",
 	"API Key created.": "",
@@ -54,8 +55,10 @@
 	"available!": "",
 	"Back": "",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "",
 	"Categories": "",
 	"Change Password": "",
@@ -70,7 +73,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.": "",
@@ -98,6 +103,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": "",
@@ -105,6 +112,7 @@
 	"Custom": "",
 	"Customize Ollama models for a specific purpose": "",
 	"Dark": "",
+	"Dashboard": "",
 	"Database": "",
 	"DD/MM/YYYY HH:mm": "",
 	"Default": "",
@@ -120,6 +128,7 @@
 	"Delete chat": "",
 	"Delete Chat": "",
 	"Delete Chats": "",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "",
 	"Deleted {{tagName}}": "",
@@ -146,6 +155,7 @@
 	"Edit Doc": "",
 	"Edit User": "",
 	"Email": "",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "",
@@ -167,6 +177,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": "",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "",
 	"Max Tokens": "",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "",
+	"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": "",
@@ -258,6 +270,8 @@
 	"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": "",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "",
 	"Password": "",
 	"PDF document (.pdf)": "",
@@ -300,6 +315,7 @@
 	"Prompt Content": "",
 	"Prompt suggestions": "",
 	"Prompts": "",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "",
 	"Pull Progress": "",
 	"Query Params": "",
@@ -312,13 +328,17 @@
 	"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": "",
 	"Response AutoCopy to Clipboard": "",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "",
 	"Rosé Pine": "",
 	"Rosé Pine Dawn": "",
@@ -346,7 +366,9 @@
 	"Server connection verified": "",
 	"Set as default": "",
 	"Set Default Model": "",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "",
 	"Set Title Auto-Generation Model": "",
 	"Set Voice": "",
@@ -365,6 +387,7 @@
 	"Sign Out": "",
 	"Sign up": "",
 	"Signing in": "",
+	"Source": "",
 	"Speech recognition error: {{error}}": "",
 	"Speech-to-Text Engine": "",
 	"SpeechRecognition API is not supported in this browser.": "",
@@ -409,11 +432,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": "",
@@ -431,6 +450,7 @@
 	"Version": "",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "",
 	"WebUI Settings": "",
@@ -441,6 +461,8 @@
 	"Write a prompt suggestion (e.g. Who are you?)": "",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "",
 	"You": "",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "",
 	"You're now logged in.": "",
 	"Youtube": ""

+ 26 - 4
src/lib/i18n/locales/es-ES/translation.json

@@ -35,6 +35,7 @@
 	"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.": "",
@@ -54,8 +55,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",
@@ -70,7 +73,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.": "",
@@ -98,6 +103,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",
@@ -105,6 +112,7 @@
 	"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",
 	"Default": "Por defecto",
@@ -120,6 +128,7 @@
 	"Delete chat": "Borrar chat",
 	"Delete Chat": "",
 	"Delete Chats": "Borrar Chats",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "Se borró {{deleteModelTag}}",
 	"Deleted {{tagName}}": "",
@@ -146,6 +155,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",
@@ -167,6 +177,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",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "Administrar Modelos Ollama",
 	"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.",
+	"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",
@@ -258,6 +270,8 @@
 	"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",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "o",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Parámetros",
 	"Password": "Contraseña",
 	"PDF document (.pdf)": "",
@@ -300,6 +315,7 @@
 	"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",
@@ -312,13 +328,17 @@
 	"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",
 	"Response AutoCopy to Clipboard": "Copiar respuesta automáticamente al portapapeles",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "Rol",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
@@ -346,7 +366,9 @@
 	"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 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",
@@ -365,6 +387,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.",
@@ -409,11 +432,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",
@@ -431,6 +450,7 @@
 	"Version": "Versión",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Web",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "WebUI Add-ons",
 	"WebUI Settings": "Configuración del WebUI",
@@ -441,6 +461,8 @@
 	"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].",
 	"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": ""

+ 26 - 4
src/lib/i18n/locales/fa-IR/translation.json

@@ -35,6 +35,7 @@
 	"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.": "",
@@ -54,8 +55,10 @@
 	"available!": "در دسترس!",
 	"Back": "بازگشت",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "حالت سازنده",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "لغو",
 	"Categories": "دسته\u200cبندی\u200cها",
 	"Change Password": "تغییر رمز عبور",
@@ -70,7 +73,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.": "",
@@ -98,6 +103,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": "مدل فعلی",
@@ -105,6 +112,7 @@
 	"Custom": "دلخواه",
 	"Customize Ollama models for a specific purpose": "مدل های اولاما را برای یک هدف خاص سفارشی کنید",
 	"Dark": "تیره",
+	"Dashboard": "",
 	"Database": "پایگاه داده",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
 	"Default": "پیشفرض",
@@ -120,6 +128,7 @@
 	"Delete chat": "حذف گپ",
 	"Delete Chat": "",
 	"Delete Chats": "حذف گپ\u200cها",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} پاک شد",
 	"Deleted {{tagName}}": "",
@@ -146,6 +155,7 @@
 	"Edit Doc": "ویرایش سند",
 	"Edit User": "ویرایش کاربر",
 	"Email": "ایمیل",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "تاریخچه چت را فعال کنید",
@@ -167,6 +177,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": "رمز عبور خود را وارد کنید",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "مدیریت مدل\u200cهای اولاما",
 	"Max Tokens": "حداکثر توکن",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "حداکثر 3 مدل را می توان به طور همزمان دانلود کرد. لطفاً بعداً دوباره امتحان کنید.",
+	"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",
@@ -258,6 +270,8 @@
 	"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": "مطمئن نیستید چه بنویسید؟ تغییر به",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "روشن",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "پارامترها",
 	"Password": "رمز عبور",
 	"PDF document (.pdf)": "",
@@ -300,6 +315,7 @@
 	"Prompt Content": "محتویات پرامپت",
 	"Prompt suggestions": "پیشنهادات پرامپت",
 	"Prompts": "پرامپت\u200cها",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "دریافت یک مدل از Ollama.com",
 	"Pull Progress": "پیشرفت دریافت",
 	"Query Params": "پارامترهای پرس و جو",
@@ -312,13 +328,17 @@
 	"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": "بازنشانی ذخیره سازی برداری",
 	"Response AutoCopy to Clipboard": "کپی خودکار پاسخ به کلیپ بورد",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "نقش",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
@@ -346,7 +366,9 @@
 	"Server connection verified": "اتصال سرور تأیید شد",
 	"Set as default": "تنظیم به عنوان پیشفرض",
 	"Set Default Model": "تنظیم مدل پیش فرض",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "تنظیم اندازه تصویر",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "تنظیم گام\u200cها",
 	"Set Title Auto-Generation Model": "تنظیم مدل تولید خودکار عنوان",
 	"Set Voice": "تنظیم صدا",
@@ -365,6 +387,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 تشخیص گفتار در این مرورگر پشتیبانی نمی شود.",
@@ -409,11 +432,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": "پیشرفت آپلود",
@@ -431,6 +450,7 @@
 	"Version": "نسخه",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "وب",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "WebUI افزونه\u200cهای",
 	"WebUI Settings": "تنظیمات WebUI",
@@ -441,6 +461,8 @@
 	"Write a prompt suggestion (e.g. Who are you?)": "یک پیشنهاد پرامپت بنویسید (مثلاً شما کی هستید؟)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "خلاصه ای در 50 کلمه بنویسید که [موضوع یا کلمه کلیدی] را خلاصه کند.",
 	"You": "شما",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "تو یک دستیار سودمند هستی.",
 	"You're now logged in.": "شما اکنون وارد شده\u200cاید.",
 	"Youtube": ""

+ 26 - 4
src/lib/i18n/locales/fr-CA/translation.json

@@ -35,6 +35,7 @@
 	"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.": "",
@@ -54,8 +55,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",
@@ -70,7 +73,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.": "",
@@ -98,6 +103,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",
@@ -105,6 +112,7 @@
 	"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",
 	"Default": "Par défaut",
@@ -120,6 +128,7 @@
 	"Delete chat": "Supprimer la discussion",
 	"Delete Chat": "",
 	"Delete Chats": "Supprimer les discussions",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} supprimé",
 	"Deleted {{tagName}}": "",
@@ -146,6 +155,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",
@@ -167,6 +177,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",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "Gérer les modèles Ollama",
 	"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.",
+	"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",
@@ -258,6 +270,8 @@
 	"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",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "ou",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Paramètres",
 	"Password": "Mot de passe",
 	"PDF document (.pdf)": "",
@@ -300,6 +315,7 @@
 	"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",
@@ -312,13 +328,17 @@
 	"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",
 	"Response AutoCopy to Clipboard": "Copie automatique de la réponse vers le presse-papiers",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "Rôle",
 	"Rosé Pine": "Pin Rosé",
 	"Rosé Pine Dawn": "Aube Pin Rosé",
@@ -346,7 +366,9 @@
 	"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 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",
@@ -365,6 +387,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.",
@@ -409,11 +432,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",
@@ -431,6 +450,7 @@
 	"Version": "Version",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Web",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "Add-ons WebUI",
 	"WebUI Settings": "Paramètres WebUI",
@@ -441,6 +461,8 @@
 	"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é].",
 	"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": ""

+ 26 - 4
src/lib/i18n/locales/fr-FR/translation.json

@@ -35,6 +35,7 @@
 	"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.": "",
@@ -54,8 +55,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",
@@ -70,7 +73,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.": "",
@@ -98,6 +103,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",
@@ -105,6 +112,7 @@
 	"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",
 	"Default": "Par défaut",
@@ -120,6 +128,7 @@
 	"Delete chat": "Supprimer le chat",
 	"Delete Chat": "",
 	"Delete Chats": "Supprimer les chats",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} supprimé",
 	"Deleted {{tagName}}": "",
@@ -146,6 +155,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",
@@ -167,6 +177,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",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "Gérer les modèles Ollama",
 	"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.",
+	"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",
@@ -258,6 +270,8 @@
 	"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",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "ou",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Paramètres",
 	"Password": "Mot de passe",
 	"PDF document (.pdf)": "",
@@ -300,6 +315,7 @@
 	"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",
@@ -312,13 +328,17 @@
 	"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",
 	"Response AutoCopy to Clipboard": "Copie automatique de la réponse dans le presse-papiers",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "Rôle",
 	"Rosé Pine": "Pin Rosé",
 	"Rosé Pine Dawn": "Aube Pin Rosé",
@@ -346,7 +366,9 @@
 	"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 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",
@@ -365,6 +387,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.",
@@ -409,11 +432,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",
@@ -431,6 +450,7 @@
 	"Version": "Version",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Web",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "Add-ons WebUI",
 	"WebUI Settings": "Paramètres WebUI",
@@ -441,6 +461,8 @@
 	"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é]",
 	"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": ""

+ 26 - 4
src/lib/i18n/locales/it-IT/translation.json

@@ -35,6 +35,7 @@
 	"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.": "",
@@ -54,8 +55,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",
@@ -70,7 +73,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.": "",
@@ -98,6 +103,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",
@@ -105,6 +112,7 @@
 	"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",
 	"Default": "Predefinito",
@@ -120,6 +128,7 @@
 	"Delete chat": "Elimina chat",
 	"Delete Chat": "",
 	"Delete Chats": "Elimina chat",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "Eliminato {{deleteModelTag}}",
 	"Deleted {{tagName}}": "",
@@ -146,6 +155,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",
@@ -167,6 +177,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",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "Gestisci modelli Ollama",
 	"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.",
+	"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",
@@ -258,6 +270,8 @@
 	"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",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "o",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Parametri",
 	"Password": "Password",
 	"PDF document (.pdf)": "",
@@ -300,6 +315,7 @@
 	"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",
@@ -312,13 +328,17 @@
 	"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",
 	"Response AutoCopy to Clipboard": "Copia automatica della risposta negli appunti",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "Ruolo",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
@@ -346,7 +366,9 @@
 	"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 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",
@@ -365,6 +387,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.",
@@ -409,11 +432,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",
@@ -431,6 +450,7 @@
 	"Version": "Versione",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Web",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "Componenti aggiuntivi WebUI",
 	"WebUI Settings": "Impostazioni WebUI",
@@ -441,6 +461,8 @@
 	"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].",
 	"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": ""

+ 26 - 4
src/lib/i18n/locales/ja-JP/translation.json

@@ -35,6 +35,7 @@
 	"Already have an account?": "すでにアカウントをお持ちですか?",
 	"an assistant": "アシスタント",
 	"and": "および",
+	"and create a new shared link.": "",
 	"API Base URL": "API ベース URL",
 	"API Key": "API キー",
 	"API Key created.": "",
@@ -54,8 +55,10 @@
 	"available!": "利用可能!",
 	"Back": "戻る",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "ビルダーモード",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "キャンセル",
 	"Categories": "カテゴリ",
 	"Change Password": "パスワードを変更",
@@ -70,7 +73,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.": "",
@@ -98,6 +103,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": "現在のモデル",
@@ -105,6 +112,7 @@
 	"Custom": "カスタム",
 	"Customize Ollama models for a specific purpose": "特定の目的に合わせて Ollama モデルをカスタマイズ",
 	"Dark": "ダーク",
+	"Dashboard": "",
 	"Database": "データベース",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
 	"Default": "デフォルト",
@@ -120,6 +128,7 @@
 	"Delete chat": "チャットを削除",
 	"Delete Chat": "",
 	"Delete Chats": "チャットを削除",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} を削除しました",
 	"Deleted {{tagName}}": "",
@@ -146,6 +155,7 @@
 	"Edit Doc": "ドキュメントを編集",
 	"Edit User": "ユーザーを編集",
 	"Email": "メールアドレス",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "チャット履歴を有効化",
@@ -167,6 +177,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": "パスワードを入力してください",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "Ollama モデルを管理",
 	"Max Tokens": "最大トークン数",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "同時にダウンロードできるモデルは最大 3 つです。後でもう一度お試しください。",
+	"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",
@@ -258,6 +270,8 @@
 	"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": "何を書けばよいかわからない? 次に切り替える",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "または",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "パラメーター",
 	"Password": "パスワード",
 	"PDF document (.pdf)": "",
@@ -300,6 +315,7 @@
 	"Prompt Content": "プロンプトの内容",
 	"Prompt suggestions": "プロンプトの提案",
 	"Prompts": "プロンプト",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Ollama.com からモデルをプル",
 	"Pull Progress": "プルの進行状況",
 	"Query Params": "クエリパラメーター",
@@ -312,13 +328,17 @@
 	"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": "ベクトルストレージをリセット",
 	"Response AutoCopy to Clipboard": "クリップボードへの応答の自動コピー",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "役割",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
@@ -346,7 +366,9 @@
 	"Server connection verified": "サーバー接続が確認されました",
 	"Set as default": "デフォルトに設定",
 	"Set Default Model": "デフォルトモデルを設定",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "画像サイズを設定",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "ステップを設定",
 	"Set Title Auto-Generation Model": "タイトル自動生成モデルを設定",
 	"Set Voice": "音声を設定",
@@ -365,6 +387,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 がサポートされていません。",
@@ -409,11 +432,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": "アップロードの進行状況",
@@ -431,6 +450,7 @@
 	"Version": "バージョン",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "ウェブ",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "WebUI アドオン",
 	"WebUI Settings": "WebUI 設定",
@@ -441,6 +461,8 @@
 	"Write a prompt suggestion (e.g. Who are you?)": "プロンプトの提案を書いてください (例: あなたは誰ですか?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "[トピックまたはキーワード] を要約する 50 語の概要を書いてください。",
 	"You": "あなた",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "あなたは役に立つアシスタントです。",
 	"You're now logged in.": "ログインしました。",
 	"Youtube": ""

+ 26 - 4
src/lib/i18n/locales/ka-GE/translation.json

@@ -35,6 +35,7 @@
 	"Already have an account?": "უკვე გაქვს ანგარიში?",
 	"an assistant": "ასისტენტი",
 	"and": "და",
+	"and create a new shared link.": "",
 	"API Base URL": "API საბაზისო URL",
 	"API Key": "API გასაღები",
 	"API Key created.": "",
@@ -54,8 +55,10 @@
 	"available!": "ხელმისაწვდომია!",
 	"Back": "უკან",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "მოდელის შექმნა",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "გაუქმება",
 	"Categories": "კატეგორიები",
 	"Change Password": "პაროლის შეცვლა",
@@ -70,7 +73,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.": "",
@@ -98,6 +103,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": "მიმდინარე მოდელი",
@@ -105,6 +112,7 @@
 	"Custom": "საკუთარი",
 	"Customize Ollama models for a specific purpose": "Ollama მოდელების დამუშავება სპეციფიური დანიშნულებისთვის",
 	"Dark": "მუქი",
+	"Dashboard": "",
 	"Database": "მონაცემთა ბაზა",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
 	"Default": "დეფოლტი",
@@ -120,6 +128,7 @@
 	"Delete chat": "შეტყობინების წაშლა",
 	"Delete Chat": "",
 	"Delete Chats": "შეტყობინებების წაშლა",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} წაშლილია",
 	"Deleted {{tagName}}": "",
@@ -146,6 +155,7 @@
 	"Edit Doc": "დოკუმენტის ედიტირება",
 	"Edit User": "მომხმარებლის ედიტირება",
 	"Email": "ელ-ფოსტა",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "მიმოწერის ისტორიის ჩართვა",
@@ -167,6 +177,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": "შეიყვანეთ თქვენი პაროლი",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "Ollama მოდელების მართვა",
 	"Max Tokens": "მაქსიმალური ტოკენები",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "მაქსიმუმ 3 მოდელის ჩამოტვირთვა შესაძლებელია ერთდროულად. Გთხოვთ სცადოთ მოგვიანებით.",
+	"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": "მიროსტატი ეტა",
@@ -258,6 +270,8 @@
 	"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": "არ იცი რა დაწერო? გადართვა:",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "ან",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "პარამეტრები",
 	"Password": "პაროლი",
 	"PDF document (.pdf)": "",
@@ -300,6 +315,7 @@
 	"Prompt Content": "მოთხოვნის შინაარსი",
 	"Prompt suggestions": "მოთხოვნის რჩევები",
 	"Prompts": "მოთხოვნები",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Ollama.com იდან მოდელის გადაწერა ",
 	"Pull Progress": "პროგრესის გადაწერა",
 	"Query Params": "პარამეტრების ძიება",
@@ -312,13 +328,17 @@
 	"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": "ვექტორული მეხსიერების გადატვირთვა",
 	"Response AutoCopy to Clipboard": "პასუხის ავტომატური კოპირება ბუფერში",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "როლი",
 	"Rosé Pine": "ვარდისფერი ფიჭვის ხე",
 	"Rosé Pine Dawn": "ვარდისფერი ფიჭვის გარიჟრაჟი",
@@ -346,7 +366,9 @@
 	"Server connection verified": "სერვერთან კავშირი დადასტურებულია",
 	"Set as default": "დეფოლტად დაყენება",
 	"Set Default Model": "დეფოლტ მოდელის დაყენება",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "სურათის ზომის დაყენება",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "ნაბიჯების დაყენება",
 	"Set Title Auto-Generation Model": "სათაურის ავტომატური გენერაციის მოდელის დაყენება",
 	"Set Voice": "ხმის დაყენება",
@@ -365,6 +387,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 არ არის მხარდაჭერილი ამ ბრაუზერში.",
@@ -409,11 +432,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": "პროგრესის ატვირთვა",
@@ -431,6 +450,7 @@
 	"Version": "ვერსია",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "ვები",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "WebUI დანამატები",
 	"WebUI Settings": "WebUI პარამეტრები",
@@ -441,6 +461,8 @@
 	"Write a prompt suggestion (e.g. Who are you?)": "დაწერეთ მოკლე წინადადება (მაგ. ვინ ხარ?",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "დაწერეთ რეზიუმე 50 სიტყვით, რომელიც აჯამებს [თემას ან საკვანძო სიტყვას].",
 	"You": "თქვენ",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "თქვენ სასარგებლო ასისტენტი ხართ.",
 	"You're now logged in.": "თქვენ შესული ხართ.",
 	"Youtube": ""

+ 26 - 4
src/lib/i18n/locales/ko-KR/translation.json

@@ -35,6 +35,7 @@
 	"Already have an account?": "이미 계정이 있으신가요?",
 	"an assistant": "어시스턴트",
 	"and": "그리고",
+	"and create a new shared link.": "",
 	"API Base URL": "API 기본 URL",
 	"API Key": "API키",
 	"API Key created.": "",
@@ -54,8 +55,10 @@
 	"available!": "사용 가능!",
 	"Back": "뒤로가기",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "빌더 모드",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "취소",
 	"Categories": "분류",
 	"Change Password": "비밀번호 변경",
@@ -70,7 +73,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.": "",
@@ -98,6 +103,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": "현재 모델",
@@ -105,6 +112,7 @@
 	"Custom": "사용자 정의",
 	"Customize Ollama models for a specific purpose": "특정 목적으로 Ollama 모델 사용자 정의",
 	"Dark": "어두운",
+	"Dashboard": "",
 	"Database": "데이터베이스",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
 	"Default": "기본값",
@@ -120,6 +128,7 @@
 	"Delete chat": "채팅 삭제",
 	"Delete Chat": "",
 	"Delete Chats": "채팅들 삭제",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} 삭제됨",
 	"Deleted {{tagName}}": "",
@@ -146,6 +155,7 @@
 	"Edit Doc": "문서 편집",
 	"Edit User": "사용자 편집",
 	"Email": "이메일",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "채팅 기록 활성화",
@@ -167,6 +177,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": "비밀번호 입력",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "Ollama 모델 관리",
 	"Max Tokens": "최대 토큰 수",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "최대 3개의 모델을 동시에 다운로드할 수 있습니다. 나중에 다시 시도하세요.",
+	"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",
@@ -258,6 +270,8 @@
 	"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": "무엇을 쓸지 모르겠나요? 전환하세요.",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "또는",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "매개변수",
 	"Password": "비밀번호",
 	"PDF document (.pdf)": "",
@@ -300,6 +315,7 @@
 	"Prompt Content": "프롬프트 내용",
 	"Prompt suggestions": "프롬프트 제안",
 	"Prompts": "프롬프트",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Ollama.com에서 모델 가져오기",
 	"Pull Progress": "가져오기 진행 상황",
 	"Query Params": "쿼리 매개변수",
@@ -312,13 +328,17 @@
 	"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": "벡터 스토리지 초기화",
 	"Response AutoCopy to Clipboard": "응답 자동 클립보드 복사",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "역할",
 	"Rosé Pine": "로제 파인",
 	"Rosé Pine Dawn": "로제 파인 던",
@@ -346,7 +366,9 @@
 	"Server connection verified": "서버 연결 확인됨",
 	"Set as default": "기본값으로 설정",
 	"Set Default Model": "기본 모델 설정",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "이미지 크기 설정",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "단계 설정",
 	"Set Title Auto-Generation Model": "제목 자동 생성 모델 설정",
 	"Set Voice": "음성 설정",
@@ -365,6 +387,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를 지원하지 않습니다.",
@@ -409,11 +432,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": "업로드 진행 상황",
@@ -431,6 +450,7 @@
 	"Version": "버전",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "웹",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "WebUI 애드온",
 	"WebUI Settings": "WebUI 설정",
@@ -441,6 +461,8 @@
 	"Write a prompt suggestion (e.g. Who are you?)": "프롬프트 제안 작성 (예: 당신은 누구인가요?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "[주제 또는 키워드]에 대한 50단어 요약문 작성.",
 	"You": "당신",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "당신은 유용한 어시스턴트입니다.",
 	"You're now logged in.": "로그인되었습니다.",
 	"Youtube": ""

+ 26 - 4
src/lib/i18n/locales/nl-NL/translation.json

@@ -35,6 +35,7 @@
 	"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.": "",
@@ -54,8 +55,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",
@@ -70,7 +73,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.": "",
@@ -98,6 +103,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",
@@ -105,6 +112,7 @@
 	"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",
 	"Default": "Standaard",
@@ -120,6 +128,7 @@
 	"Delete chat": "Verwijder chat",
 	"Delete Chat": "",
 	"Delete Chats": "Verwijder Chats",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} is verwijderd",
 	"Deleted {{tagName}}": "",
@@ -146,6 +155,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",
@@ -167,6 +177,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",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "Beheer Ollama Modellen",
 	"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.",
+	"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",
@@ -258,6 +270,8 @@
 	"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",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "of",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Parameters",
 	"Password": "Wachtwoord",
 	"PDF document (.pdf)": "",
@@ -300,6 +315,7 @@
 	"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",
@@ -312,13 +328,17 @@
 	"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",
 	"Response AutoCopy to Clipboard": "Antwoord Automatisch Kopiëren naar Klembord",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "Rol",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
@@ -346,7 +366,9 @@
 	"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 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",
@@ -365,6 +387,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.",
@@ -409,11 +432,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",
@@ -431,6 +450,7 @@
 	"Version": "Versie",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Web",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "WebUI Add-ons",
 	"WebUI Settings": "WebUI Instellingen",
@@ -441,6 +461,8 @@
 	"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.",
 	"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": ""

+ 26 - 4
src/lib/i18n/locales/pl-PL/translation.json

@@ -35,6 +35,7 @@
 	"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.": "",
@@ -54,8 +55,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",
@@ -70,7 +73,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.": "",
@@ -98,6 +103,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",
@@ -105,6 +112,7 @@
 	"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",
 	"Default": "Domyślny",
@@ -120,6 +128,7 @@
 	"Delete chat": "Usuń czat",
 	"Delete Chat": "",
 	"Delete Chats": "Usuń czaty",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "Usunięto {{deleteModelTag}}",
 	"Deleted {{tagName}}": "",
@@ -146,6 +155,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",
@@ -167,6 +177,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",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "Zarządzaj modelami Ollama",
 	"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.",
+	"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",
@@ -258,6 +270,8 @@
 	"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",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "lub",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Parametry",
 	"Password": "Hasło",
 	"PDF document (.pdf)": "",
@@ -300,6 +315,7 @@
 	"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",
@@ -312,13 +328,17 @@
 	"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",
 	"Response AutoCopy to Clipboard": "Automatyczne kopiowanie odpowiedzi do schowka",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "Rola",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
@@ -346,7 +366,9 @@
 	"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 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",
@@ -365,6 +387,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.",
@@ -409,11 +432,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",
@@ -431,6 +450,7 @@
 	"Version": "Wersja",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Sieć",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "Dodatki do interfejsu WebUI",
 	"WebUI Settings": "Ustawienia interfejsu WebUI",
@@ -441,6 +461,8 @@
 	"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].",
 	"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": ""

+ 26 - 4
src/lib/i18n/locales/pt-BR/translation.json

@@ -35,6 +35,7 @@
 	"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.": "",
@@ -54,8 +55,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",
@@ -70,7 +73,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.": "",
@@ -98,6 +103,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",
@@ -105,6 +112,7 @@
 	"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",
 	"Default": "Padrão",
@@ -120,6 +128,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}}": "",
@@ -146,6 +155,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",
@@ -167,6 +177,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",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "Gerenciar Modelos Ollama",
 	"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.",
+	"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",
@@ -258,6 +270,8 @@
 	"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",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "ou",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Parâmetros",
 	"Password": "Senha",
 	"PDF document (.pdf)": "",
@@ -300,6 +315,7 @@
 	"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",
@@ -312,13 +328,17 @@
 	"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",
 	"Response AutoCopy to Clipboard": "Cópia Automática da Resposta para a Área de Transferência",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "Função",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
@@ -346,7 +366,9 @@
 	"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 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",
@@ -365,6 +387,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.",
@@ -409,11 +432,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",
@@ -431,6 +450,7 @@
 	"Version": "Versão",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Web",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "Complementos WebUI",
 	"WebUI Settings": "Configurações WebUI",
@@ -441,6 +461,8 @@
 	"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].",
 	"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": ""

+ 26 - 4
src/lib/i18n/locales/pt-PT/translation.json

@@ -35,6 +35,7 @@
 	"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.": "",
@@ -54,8 +55,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",
@@ -70,7 +73,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.": "",
@@ -98,6 +103,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",
@@ -105,6 +112,7 @@
 	"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",
 	"Default": "Padrão",
@@ -120,6 +128,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}}": "",
@@ -146,6 +155,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",
@@ -167,6 +177,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",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "Gerenciar Modelos Ollama",
 	"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.",
+	"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",
@@ -258,6 +270,8 @@
 	"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",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "ou",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Parâmetros",
 	"Password": "Senha",
 	"PDF document (.pdf)": "",
@@ -300,6 +315,7 @@
 	"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",
@@ -312,13 +328,17 @@
 	"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",
 	"Response AutoCopy to Clipboard": "Cópia Automática da Resposta para a Área de Transferência",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "Função",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
@@ -346,7 +366,9 @@
 	"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 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",
@@ -365,6 +387,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.",
@@ -409,11 +432,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",
@@ -431,6 +450,7 @@
 	"Version": "Versão",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Web",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "Complementos WebUI",
 	"WebUI Settings": "Configurações WebUI",
@@ -441,6 +461,8 @@
 	"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].",
 	"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": ""

+ 26 - 4
src/lib/i18n/locales/ru-RU/translation.json

@@ -35,6 +35,7 @@
 	"Already have an account?": "у вас уже есть аккаунт?",
 	"an assistant": "ассистент",
 	"and": "и",
+	"and create a new shared link.": "",
 	"API Base URL": "Базовый адрес API",
 	"API Key": "Ключ API",
 	"API Key created.": "",
@@ -54,8 +55,10 @@
 	"available!": "доступный!",
 	"Back": "Назад",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "Режим конструктор",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "Аннулировать",
 	"Categories": "Категории",
 	"Change Password": "Изменить пароль",
@@ -70,7 +73,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.": "",
@@ -98,6 +103,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": "Текущая модель",
@@ -105,6 +112,7 @@
 	"Custom": "Пользовательский",
 	"Customize Ollama models for a specific purpose": "Настроить модели Ollama для конкретной цели",
 	"Dark": "Тёмный",
+	"Dashboard": "",
 	"Database": "База данных",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
 	"Default": "По умолчанию",
@@ -120,6 +128,7 @@
 	"Delete chat": "Удалить чат",
 	"Delete Chat": "",
 	"Delete Chats": "Удалить чаты",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "Удалено {{deleteModelTag}}",
 	"Deleted {{tagName}}": "",
@@ -146,6 +155,7 @@
 	"Edit Doc": "Редактировать документ",
 	"Edit User": "Редактировать пользователя",
 	"Email": "Электронная почта",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "Включить историю чата",
@@ -167,6 +177,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": "Введите ваш пароль",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "Управление моделями Ollama",
 	"Max Tokens": "Максимальное количество токенов",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Максимальное количество моделей для загрузки одновременно - 3. Пожалуйста, попробуйте позже.",
+	"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",
@@ -258,6 +270,8 @@
 	"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": "Не уверены, что написать? Переключитесь на",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "или",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Параметры",
 	"Password": "Пароль",
 	"PDF document (.pdf)": "",
@@ -300,6 +315,7 @@
 	"Prompt Content": "Содержание промпта",
 	"Prompt suggestions": "Предложения промптов",
 	"Prompts": "Промпты",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Загрузить модель с Ollama.com",
 	"Pull Progress": "Прогресс загрузки",
 	"Query Params": "Параметры запроса",
@@ -312,13 +328,17 @@
 	"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": "Сбросить векторное хранилище",
 	"Response AutoCopy to Clipboard": "Автоматическое копирование ответа в буфер обмена",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "Роль",
 	"Rosé Pine": "Розовое сосновое дерево",
 	"Rosé Pine Dawn": "Розовое сосновое дерево рассвет",
@@ -346,7 +366,9 @@
 	"Server connection verified": "Соединение с сервером проверено",
 	"Set as default": "Установить по умолчанию",
 	"Set Default Model": "Установить модель по умолчанию",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "Установить размер изображения",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "Установить шаги",
 	"Set Title Auto-Generation Model": "Установить модель автогенерации заголовков",
 	"Set Voice": "Установить голос",
@@ -365,6 +387,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 распознавания речи не поддерживается в этом браузере.",
@@ -409,11 +432,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": "Прогресс загрузки",
@@ -431,6 +450,7 @@
 	"Version": "Версия",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Веб",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "Дополнения для WebUI",
 	"WebUI Settings": "Настройки WebUI",
@@ -441,6 +461,8 @@
 	"Write a prompt suggestion (e.g. Who are you?)": "Напишите предложение промпта (например, Кто вы?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Напишите резюме в 50 словах, которое кратко описывает [тему или ключевое слово].",
 	"You": "Вы",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "Вы полезный ассистент.",
 	"You're now logged in.": "Вы вошли в систему.",
 	"Youtube": ""

+ 26 - 4
src/lib/i18n/locales/sv-SE/translation.json

@@ -35,6 +35,7 @@
 	"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.": "",
@@ -54,8 +55,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",
@@ -70,7 +73,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.": "",
@@ -98,6 +103,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",
@@ -105,6 +112,7 @@
 	"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",
 	"Default": "Standard",
@@ -120,6 +128,7 @@
 	"Delete chat": "Radera chatt",
 	"Delete Chat": "",
 	"Delete Chats": "Radera chattar",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "Raderad {{deleteModelTag}}",
 	"Deleted {{tagName}}": "",
@@ -146,6 +155,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",
@@ -167,6 +177,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",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "Hantera Ollama-modeller",
 	"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.",
+	"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",
@@ -258,6 +270,8 @@
 	"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",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "eller",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Parametrar",
 	"Password": "Lösenord",
 	"PDF document (.pdf)": "",
@@ -300,6 +315,7 @@
 	"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",
@@ -312,13 +328,17 @@
 	"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",
 	"Response AutoCopy to Clipboard": "Svara AutoCopy till urklipp",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "Roll",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
@@ -346,7 +366,9 @@
 	"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 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",
@@ -365,6 +387,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.",
@@ -409,11 +432,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",
@@ -431,6 +450,7 @@
 	"Version": "Version",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Webb",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "WebUI-tillägg",
 	"WebUI Settings": "WebUI-inställningar",
@@ -441,6 +461,8 @@
 	"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].",
 	"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": ""

+ 26 - 4
src/lib/i18n/locales/tr-TR/translation.json

@@ -35,6 +35,7 @@
 	"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 Anahtarı oluşturuldu.",
@@ -54,8 +55,10 @@
 	"available!": "mevcut!",
 	"Back": "Geri",
 	"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",
@@ -70,7 +73,9 @@
 	"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.": "Bir CSV dosyası seçmek için buraya tıklayın.",
@@ -98,6 +103,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':": "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": "Şu Tarihte Oluşturuldu:",
 	"Current Model": "Mevcut Model",
@@ -105,6 +112,7 @@
 	"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",
 	"Default": "Varsayılan",
@@ -120,6 +128,7 @@
 	"Delete chat": "Sohbeti sil",
 	"Delete Chat": "Sohbeti Sil",
 	"Delete Chats": "Sohbetleri Sil",
+	"delete this link": "",
 	"Delete User": "Kullanıcıyı Sil",
 	"Deleted {{deleteModelTag}}": "{{deleteModelTag}} silindi",
 	"Deleted {{tagName}}": "{{tagName}} silindi",
@@ -146,6 +155,7 @@
 	"Edit Doc": "Belgeyi Düzenle",
 	"Edit User": "Kullanıcıyı Düzenle",
 	"Email": "E-posta",
+	"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",
@@ -167,6 +177,7 @@
 	"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",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "Ollama Modellerini Yönet",
 	"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.",
+	"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",
@@ -258,6 +270,8 @@
 	"Name your modelfile": "Model dosyanıza ad verin",
 	"New Chat": "Yeni Sohbet",
 	"New Password": "Yeni Parola",
+	"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",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "OpenAI URL/Anahtar gereklidir.",
 	"or": "veya",
 	"Other": "Diğer",
+	"Overview": "",
 	"Parameters": "Parametreler",
 	"Password": "Parola",
 	"PDF document (.pdf)": "PDF belgesi (.pdf)",
@@ -300,6 +315,7 @@
 	"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",
@@ -312,13 +328,17 @@
 	"Regenerate": "Tekrar Oluştur",
 	"Release Notes": "Sürüm Notları",
 	"Remove": "Kaldır",
+	"Remove Model": "",
+	"Rename": "",
 	"Repeat Last N": "Son N'yi Tekrar Et",
 	"Repeat Penalty": "Tekrar Cezası",
 	"Request Mode": "İstek Modu",
+	"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",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "Rol",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
@@ -346,7 +366,9 @@
 	"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 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",
@@ -365,6 +387,7 @@
 	"Sign Out": "Çıkış Yap",
 	"Sign up": "Kaydol",
 	"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.",
@@ -409,11 +432,7 @@
 	"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": "Güncelle ve Bağlantıyı Kopyala",
-	"Update Embedding Model": "Gömme Modelini Güncelle",
-	"Update embedding model (e.g. {{model}})": "Gömme modelini güncelle (örn. {{model}})",
 	"Update password": "Parolayı Güncelle",
-	"Update Reranking Model": "Yeniden Sıralama Modelini Güncelle",
-	"Update reranking model (e.g. {{model}})": "Yeniden sıralama modelini güncelleyin (örn. {{model}})",
 	"Upload a GGUF model": "Bir GGUF modeli yükle",
 	"Upload files": "Dosyaları Yükle",
 	"Upload Progress": "Yükleme İlerlemesi",
@@ -431,6 +450,7 @@
 	"Version": "Sürüm",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Uyarı: Gömme modelinizi günceller veya değiştirirseniz, tüm belgeleri yeniden içe aktarmanız gerekecektir.",
 	"Web": "Web",
+	"Web Params": "",
 	"Webhook URL": "Webhook URL",
 	"WebUI Add-ons": "WebUI Eklentileri",
 	"WebUI Settings": "WebUI Ayarları",
@@ -441,6 +461,8 @@
 	"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.",
 	"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"

+ 26 - 4
src/lib/i18n/locales/uk-UA/translation.json

@@ -35,6 +35,7 @@
 	"Already have an account?": "Вже є обліковий запис?",
 	"an assistant": "асистента",
 	"and": "та",
+	"and create a new shared link.": "",
 	"API Base URL": "Базова адреса URL API",
 	"API Key": "Ключ API",
 	"API Key created.": "",
@@ -54,8 +55,10 @@
 	"available!": "доступно!",
 	"Back": "Назад",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "Режим конструктора",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "Скасувати",
 	"Categories": "Категорії",
 	"Change Password": "Змінити пароль",
@@ -70,7 +73,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.": "",
@@ -98,6 +103,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": "Поточна модель",
@@ -105,6 +112,7 @@
 	"Custom": "Налаштувати",
 	"Customize Ollama models for a specific purpose": "Налаштувати моделі Ollama для конкретної мети",
 	"Dark": "Темна",
+	"Dashboard": "",
 	"Database": "База даних",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
 	"Default": "За замовчуванням",
@@ -120,6 +128,7 @@
 	"Delete chat": "Видалити чат",
 	"Delete Chat": "",
 	"Delete Chats": "Видалити чати",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "Видалено {{deleteModelTag}}",
 	"Deleted {{tagName}}": "",
@@ -146,6 +155,7 @@
 	"Edit Doc": "Редагувати документ",
 	"Edit User": "Редагувати користувача",
 	"Email": "Електронна пошта",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "Увімкнути історію чату",
@@ -167,6 +177,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": "Введіть ваш пароль",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "Керування моделями Ollama",
 	"Max Tokens": "Максимальна кількість токенів",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Максимум 3 моделі можна завантажити одночасно. Будь ласка, спробуйте пізніше.",
+	"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",
@@ -258,6 +270,8 @@
 	"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": "Не впевнений, що писати? Переключитися на",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "або",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "Параметри",
 	"Password": "Пароль",
 	"PDF document (.pdf)": "",
@@ -300,6 +315,7 @@
 	"Prompt Content": "Зміст промту",
 	"Prompt suggestions": "Швидкі промти",
 	"Prompts": "Промти",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "Завантажити модель з Ollama.com",
 	"Pull Progress": "Прогрес завантаження",
 	"Query Params": "Параметри запиту",
@@ -312,13 +328,17 @@
 	"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": "Скинути векторне сховище",
 	"Response AutoCopy to Clipboard": "Автокопіювання відповіді в буфер обміну",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "Роль",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
@@ -346,7 +366,9 @@
 	"Server connection verified": "З'єднання з сервером підтверджено",
 	"Set as default": "Встановити за замовчуванням",
 	"Set Default Model": "Встановити модель за замовчуванням",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "Встановити розмір зображення",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "Встановити кроки",
 	"Set Title Auto-Generation Model": "Встановити модель автогенерації заголовків",
 	"Set Voice": "Встановити голос",
@@ -365,6 +387,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 не підтримується в цьому браузері.",
@@ -409,11 +432,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": "Прогрес завантаження",
@@ -431,6 +450,7 @@
 	"Version": "Версія",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Веб",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "Додатки WebUI",
 	"WebUI Settings": "Налаштування WebUI",
@@ -441,6 +461,8 @@
 	"Write a prompt suggestion (e.g. Who are you?)": "Напишіть промт (напр. Хто ти?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Напишіть стислий зміст у 50 слів, який узагальнює [тема або ключове слово].",
 	"You": "Ви",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "Ви корисний асистент.",
 	"You're now logged in.": "Ви увійшли в систему.",
 	"Youtube": ""

+ 26 - 4
src/lib/i18n/locales/vi-VN/translation.json

@@ -35,6 +35,7 @@
 	"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.": "",
@@ -54,8 +55,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",
@@ -70,7 +73,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.": "",
@@ -98,6 +103,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",
@@ -105,6 +112,7 @@
 	"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",
 	"Default": "Mặc định",
@@ -120,6 +128,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}}": "",
@@ -146,6 +155,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",
@@ -167,6 +177,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",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "Quản lý mô hình với Ollama",
 	"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.",
+	"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",
@@ -258,6 +270,8 @@
 	"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",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "hoặc",
 	"Other": "Khác",
+	"Overview": "",
 	"Parameters": "Tham số",
 	"Password": "Mật khẩu",
 	"PDF document (.pdf)": "",
@@ -300,6 +315,7 @@
 	"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",
@@ -312,13 +328,17 @@
 	"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",
 	"Response AutoCopy to Clipboard": "Tự động Sao chép Phản hồi vào clipboard",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "Vai trò",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
@@ -346,7 +366,9 @@
 	"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 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",
@@ -365,6 +387,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.",
@@ -409,11 +432,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",
@@ -431,6 +450,7 @@
 	"Version": "Version",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "Web",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "Tiện ích WebUI",
 	"WebUI Settings": "Cài đặt WebUI",
@@ -441,6 +461,8 @@
 	"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].",
 	"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": ""

+ 26 - 4
src/lib/i18n/locales/zh-CN/translation.json

@@ -35,6 +35,7 @@
 	"Already have an account?": "已经有账户了吗?",
 	"an assistant": "助手",
 	"and": "和",
+	"and create a new shared link.": "",
 	"API Base URL": "API 基础 URL",
 	"API Key": "API 密钥",
 	"API Key created.": "",
@@ -54,8 +55,10 @@
 	"available!": "可用!",
 	"Back": "返回",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "构建模式",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "取消",
 	"Categories": "分类",
 	"Change Password": "更改密码",
@@ -70,7 +73,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.": "",
@@ -98,6 +103,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": "当前模型",
@@ -105,6 +112,7 @@
 	"Custom": "自定义",
 	"Customize Ollama models for a specific purpose": "定制特定用途的Ollama模型",
 	"Dark": "暗色",
+	"Dashboard": "",
 	"Database": "数据库",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
 	"Default": "默认",
@@ -120,6 +128,7 @@
 	"Delete chat": "删除聊天",
 	"Delete Chat": "",
 	"Delete Chats": "删除聊天记录",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "已删除{{deleteModelTag}}",
 	"Deleted {{tagName}}": "",
@@ -146,6 +155,7 @@
 	"Edit Doc": "编辑文档",
 	"Edit User": "编辑用户",
 	"Email": "电子邮件",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "启用聊天历史",
@@ -167,6 +177,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": "输入您的密码",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "管理Ollama模型",
 	"Max Tokens": "最大令牌数",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "最多可以同时下载3个模型,请稍后重试。",
+	"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",
@@ -258,6 +270,8 @@
 	"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": "不确定写什么?切换到",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "或",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "参数",
 	"Password": "密码",
 	"PDF document (.pdf)": "",
@@ -300,6 +315,7 @@
 	"Prompt Content": "提示词内容",
 	"Prompt suggestions": "提示词建议",
 	"Prompts": "提示词",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "从 Ollama.com 拉取一个模型",
 	"Pull Progress": "拉取进度",
 	"Query Params": "查询参数",
@@ -312,13 +328,17 @@
 	"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": "重置向量存储",
 	"Response AutoCopy to Clipboard": "自动复制回答到剪贴板",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "角色",
 	"Rosé Pine": "Rosé Pine",
 	"Rosé Pine Dawn": "Rosé Pine Dawn",
@@ -346,7 +366,9 @@
 	"Server connection verified": "已验证服务器连接",
 	"Set as default": "设为默认",
 	"Set Default Model": "设置默认模型",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "设置图片大小",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "设置步骤",
 	"Set Title Auto-Generation Model": "设置标题自动生成模型",
 	"Set Voice": "设置声音",
@@ -365,6 +387,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。",
@@ -409,11 +432,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": "上传进度",
@@ -431,6 +450,7 @@
 	"Version": "版本",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "网页",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "WebUI 插件",
 	"WebUI Settings": "WebUI 设置",
@@ -441,6 +461,8 @@
 	"Write a prompt suggestion (e.g. Who are you?)": "写一个提示建议(例如:你是谁?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "用50个字写一个总结[主题或关键词]。",
 	"You": "你",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "你是一个有帮助的助手。",
 	"You're now logged in.": "已登录。",
 	"Youtube": ""

+ 26 - 4
src/lib/i18n/locales/zh-TW/translation.json

@@ -35,6 +35,7 @@
 	"Already have an account?": "已經有帳號了嗎?",
 	"an assistant": "助手",
 	"and": "和",
+	"and create a new shared link.": "",
 	"API Base URL": "API 基本 URL",
 	"API Key": "API 金鑰",
 	"API Key created.": "",
@@ -54,8 +55,10 @@
 	"available!": "可以使用!",
 	"Back": "返回",
 	"Bad Response": "",
+	"before": "",
 	"Being lazy": "",
 	"Builder Mode": "建構模式",
+	"Bypass SSL verification for Websites": "",
 	"Cancel": "取消",
 	"Categories": "分類",
 	"Change Password": "修改密碼",
@@ -70,7 +73,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.": "",
@@ -98,6 +103,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": "目前模型",
@@ -105,6 +112,7 @@
 	"Custom": "自訂",
 	"Customize Ollama models for a specific purpose": "定制特定用途的 Ollama 模型",
 	"Dark": "暗色",
+	"Dashboard": "",
 	"Database": "資料庫",
 	"DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm",
 	"Default": "預設",
@@ -120,6 +128,7 @@
 	"Delete chat": "刪除聊天紀錄",
 	"Delete Chat": "",
 	"Delete Chats": "刪除聊天紀錄",
+	"delete this link": "",
 	"Delete User": "",
 	"Deleted {{deleteModelTag}}": "已刪除 {{deleteModelTag}}",
 	"Deleted {{tagName}}": "",
@@ -146,6 +155,7 @@
 	"Edit Doc": "編輯文件",
 	"Edit User": "編輯使用者",
 	"Email": "電子郵件",
+	"Embedding Model": "",
 	"Embedding Model Engine": "",
 	"Embedding model set to \"{{embedding_model}}\"": "",
 	"Enable Chat History": "啟用聊天歷史",
@@ -167,6 +177,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": "輸入你的密碼",
@@ -228,6 +239,7 @@
 	"Manage Ollama Models": "管理 Ollama 模型",
 	"Max Tokens": "最大 Token 數",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "最多可以同時下載 3 個模型。請稍後再試。",
+	"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",
@@ -258,6 +270,8 @@
 	"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": "不確定要寫什麼?切換到",
@@ -286,6 +300,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "或",
 	"Other": "",
+	"Overview": "",
 	"Parameters": "參數",
 	"Password": "密碼",
 	"PDF document (.pdf)": "",
@@ -300,6 +315,7 @@
 	"Prompt Content": "提示詞內容",
 	"Prompt suggestions": "提示詞建議",
 	"Prompts": "提示詞",
+	"Pull \"{{searchValue}}\" from Ollama.com": "",
 	"Pull a model from Ollama.com": "從 Ollama.com 下載模型",
 	"Pull Progress": "下載進度",
 	"Query Params": "查詢參數",
@@ -312,13 +328,17 @@
 	"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": "重置向量儲存空間",
 	"Response AutoCopy to Clipboard": "自動複製回答到剪貼簿",
+	"Retrieval Augmented Generation Settings": "",
 	"Role": "Role",
 	"Rosé Pine": "玫瑰松",
 	"Rosé Pine Dawn": "黎明玫瑰松",
@@ -346,7 +366,9 @@
 	"Server connection verified": "已驗證伺服器連線",
 	"Set as default": "設為預設",
 	"Set Default Model": "設定預設模型",
+	"Set embedding model (e.g. {{model}})": "",
 	"Set Image Size": "設定圖片大小",
+	"Set reranking model (e.g. {{model}})": "",
 	"Set Steps": "設定步數",
 	"Set Title Auto-Generation Model": "設定自動生成標題用模型",
 	"Set Voice": "設定語音",
@@ -365,6 +387,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。",
@@ -409,11 +432,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": "上傳進度",
@@ -431,6 +450,7 @@
 	"Version": "版本",
 	"Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
 	"Web": "網頁",
+	"Web Params": "",
 	"Webhook URL": "",
 	"WebUI Add-ons": "WebUI 擴充套件",
 	"WebUI Settings": "WebUI 設定",
@@ -441,6 +461,8 @@
 	"Write a prompt suggestion (e.g. Who are you?)": "寫一個提示詞建議(例如:你是誰?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "寫一個50字的摘要來概括[主題或關鍵詞]。",
 	"You": "你",
+	"You have no archived conversations.": "",
+	"You have shared this chat": "",
 	"You're a helpful assistant.": "你是一位善於協助他人的助手。",
 	"You're now logged in.": "已登入。",
 	"Youtube": ""

+ 15 - 3
src/routes/(app)/+page.svelte

@@ -366,7 +366,8 @@
 			},
 			format: $settings.requestFormat ?? undefined,
 			keep_alive: $settings.keepAlive ?? undefined,
-			docs: docs.length > 0 ? docs : undefined
+			docs: docs.length > 0 ? docs : undefined,
+			citations: docs.length > 0
 		});
 
 		if (res && res.ok) {
@@ -401,6 +402,11 @@
 							console.log(line);
 							let data = JSON.parse(line);
 
+							if ('citations' in data) {
+								responseMessage.citations = data.citations;
+								continue;
+							}
+
 							if ('detail' in data) {
 								throw data;
 							}
@@ -598,7 +604,8 @@
 				num_ctx: $settings?.options?.num_ctx ?? undefined,
 				frequency_penalty: $settings?.options?.repeat_penalty ?? undefined,
 				max_tokens: $settings?.options?.num_predict ?? undefined,
-				docs: docs.length > 0 ? docs : undefined
+				docs: docs.length > 0 ? docs : undefined,
+				citations: docs.length > 0
 			},
 			model?.source?.toLowerCase() === 'litellm'
 				? `${LITELLM_API_BASE_URL}/v1`
@@ -614,7 +621,7 @@
 			const textStream = await createOpenAITextStream(res.body, $settings.splitLargeChunks);
 
 			for await (const update of textStream) {
-				const { value, done } = update;
+				const { value, done, citations } = update;
 				if (done || stopResponseFlag || _chatId !== $chatId) {
 					responseMessage.done = true;
 					messages = messages;
@@ -626,6 +633,11 @@
 					break;
 				}
 
+				if (citations) {
+					responseMessage.citations = citations;
+					continue;
+				}
+
 				if (responseMessage.content == '' && value == '\n') {
 					continue;
 				} else {

+ 6 - 4
src/routes/(app)/admin/+page.svelte

@@ -110,7 +110,7 @@
 					<div class=" flex flex-col justify-center">
 						<div class=" px-6 pt-4">
 							<div class=" flex justify-between items-center">
-								<div class="flex items-center text-2xl font-semibold">Dashboard</div>
+								<div class="flex items-center text-2xl font-semibold">{$i18n.t('Dashboard')}</div>
 								<div>
 									<Tooltip content={$i18n.t('Admin Settings')}>
 										<button
@@ -140,8 +140,10 @@
 							</div>
 						</div>
 
-						<div class="px-6 flex text-sm gap-2.5">
-							<div class="py-3 border-b font-medium text-gray-100 cursor-pointer">Overview</div>
+						<div class="px-5 flex text-sm gap-2.5">
+							<div class="py-3 border-b font-medium text-gray-100 cursor-pointer">
+								{$i18n.t('Overview')}
+							</div>
 							<!-- <div class="py-3 text-gray-300 cursor-pointer">Users</div> -->
 						</div>
 
@@ -268,7 +270,7 @@
 												<td class="px-3 py-2 text-right">
 													<div class="flex justify-end w-full">
 														{#if user.role !== 'admin'}
-															<Tooltip content="Chats">
+															<Tooltip content={$i18n.t('Chats')}>
 																<button
 																	class="self-center w-fit text-sm px-2 py-2 hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
 																	on:click={async () => {

+ 15 - 3
src/routes/(app)/c/[id]/+page.svelte

@@ -378,7 +378,8 @@
 			},
 			format: $settings.requestFormat ?? undefined,
 			keep_alive: $settings.keepAlive ?? undefined,
-			docs: docs.length > 0 ? docs : undefined
+			docs: docs.length > 0 ? docs : undefined,
+			citations: docs.length > 0
 		});
 
 		if (res && res.ok) {
@@ -413,6 +414,11 @@
 							console.log(line);
 							let data = JSON.parse(line);
 
+							if ('citations' in data) {
+								responseMessage.citations = data.citations;
+								continue;
+							}
+
 							if ('detail' in data) {
 								throw data;
 							}
@@ -610,7 +616,8 @@
 				num_ctx: $settings?.options?.num_ctx ?? undefined,
 				frequency_penalty: $settings?.options?.repeat_penalty ?? undefined,
 				max_tokens: $settings?.options?.num_predict ?? undefined,
-				docs: docs.length > 0 ? docs : undefined
+				docs: docs.length > 0 ? docs : undefined,
+				citations: docs.length > 0
 			},
 			model?.source?.toLowerCase() === 'litellm'
 				? `${LITELLM_API_BASE_URL}/v1`
@@ -626,7 +633,7 @@
 			const textStream = await createOpenAITextStream(res.body, $settings.splitLargeChunks);
 
 			for await (const update of textStream) {
-				const { value, done } = update;
+				const { value, done, citations } = update;
 				if (done || stopResponseFlag || _chatId !== $chatId) {
 					responseMessage.done = true;
 					messages = messages;
@@ -638,6 +645,11 @@
 					break;
 				}
 
+				if (citations) {
+					responseMessage.citations = citations;
+					continue;
+				}
+
 				if (responseMessage.content == '' && value == '\n') {
 					continue;
 				} else {