From 159578dfd41a5fc68ac6c7cfdcf0db837600fe35 Mon Sep 17 00:00:00 2001 From: Rodrigo Agundez Date: Thu, 6 Feb 2025 17:59:59 +0900 Subject: [PATCH 01/56] Enable usage of the DB to store generated images --- backend/open_webui/routers/images.py | 63 ++++++++++------------------ 1 file changed, 22 insertions(+), 41 deletions(-) diff --git a/backend/open_webui/routers/images.py b/backend/open_webui/routers/images.py index 7afd9d106..68465e191 100644 --- a/backend/open_webui/routers/images.py +++ b/backend/open_webui/routers/images.py @@ -7,26 +7,21 @@ import re import uuid from pathlib import Path from typing import Optional +import io import requests - - -from fastapi import Depends, FastAPI, HTTPException, Request, APIRouter -from fastapi.middleware.cors import CORSMiddleware -from pydantic import BaseModel - - +from fastapi import APIRouter, Depends, UploadFile, HTTPException, Request from open_webui.config import CACHE_DIR from open_webui.constants import ERROR_MESSAGES -from open_webui.env import ENV, SRC_LOG_LEVELS, ENABLE_FORWARD_USER_INFO_HEADERS - +from open_webui.env import ENABLE_FORWARD_USER_INFO_HEADERS, SRC_LOG_LEVELS +from open_webui.routers.files import upload_file from open_webui.utils.auth import get_admin_user, get_verified_user from open_webui.utils.images.comfyui import ( ComfyUIGenerateImageForm, ComfyUIWorkflow, comfyui_generate_image, ) - +from pydantic import BaseModel log = logging.getLogger(__name__) log.setLevel(SRC_LOG_LEVELS["IMAGES"]) @@ -39,7 +34,7 @@ router = APIRouter() @router.get("/config") -async def get_config(request: Request, user=Depends(get_admin_user)): +async def get_def(request: Request, user=Depends(get_admin_user)): return { "enabled": request.app.state.config.ENABLE_IMAGE_GENERATION, "engine": request.app.state.config.IMAGE_GENERATION_ENGINE, @@ -271,7 +266,6 @@ async def get_image_config(request: Request, user=Depends(get_admin_user)): async def update_image_config( request: Request, form_data: ImageConfigForm, user=Depends(get_admin_user) ): - set_image_model(request, form_data.MODEL) pattern = r"^\d+x\d+$" @@ -383,35 +377,18 @@ class GenerateImageForm(BaseModel): negative_prompt: Optional[str] = None -def save_b64_image(b64_str): +def load_b64_image_data(b64_str): try: - image_id = str(uuid.uuid4()) - if "," in b64_str: header, encoded = b64_str.split(",", 1) mime_type = header.split(";")[0] - img_data = base64.b64decode(encoded) - image_format = mimetypes.guess_extension(mime_type) - - image_filename = f"{image_id}{image_format}" - file_path = IMAGE_CACHE_DIR / f"{image_filename}" - with open(file_path, "wb") as f: - f.write(img_data) - return image_filename else: - image_filename = f"{image_id}.png" - file_path = IMAGE_CACHE_DIR.joinpath(image_filename) - + mime_type = "image/png" img_data = base64.b64decode(b64_str) - - # Write the image data to a file - with open(file_path, "wb") as f: - f.write(img_data) - return image_filename - + return img_data, mime_type except Exception as e: - log.exception(f"Error saving image: {e}") + log.exception(f"Error loading image data: {e}") return None @@ -500,13 +477,17 @@ async def image_generations( images = [] for image in res["data"]: - image_filename = save_b64_image(image["b64_json"]) - images.append({"url": f"/cache/image/generations/{image_filename}"}) - file_body_path = IMAGE_CACHE_DIR.joinpath(f"{image_filename}.json") - - with open(file_body_path, "w") as f: - json.dump(data, f) - + image_data, content_type = load_b64_image_data(image["b64_json"]) + file = UploadFile( + file=io.BytesIO(image_data), + filename="image", # will be converted to a unique ID on upload_file + headers={ + "content-type": content_type, + }, + ) + file_item = upload_file(request, file, user) + url = request.app.url_path_for("get_file_content_by_id", id=file_item.id) + images.append({"url": url}) return images elif request.app.state.config.IMAGE_GENERATION_ENGINE == "comfyui": @@ -618,4 +599,4 @@ async def image_generations( data = r.json() if "error" in data: error = data["error"]["message"] - raise HTTPException(status_code=400, detail=ERROR_MESSAGES.DEFAULT(error)) + raise HTTPException(status_code=400, detail=ERROR_MESSAGES.DEFAULT(error)) \ No newline at end of file From 8d43fdadc17c6db83df4f474a505fae1f509e6ea Mon Sep 17 00:00:00 2001 From: Rodrigo Agundez Date: Thu, 6 Feb 2025 18:24:57 +0900 Subject: [PATCH 02/56] Add functionality in other image generation types --- backend/open_webui/routers/images.py | 64 +++++++++++++++++----------- 1 file changed, 40 insertions(+), 24 deletions(-) diff --git a/backend/open_webui/routers/images.py b/backend/open_webui/routers/images.py index 68465e191..a26c06c61 100644 --- a/backend/open_webui/routers/images.py +++ b/backend/open_webui/routers/images.py @@ -1,5 +1,6 @@ import asyncio import base64 +import io import json import logging import mimetypes @@ -7,10 +8,9 @@ import re import uuid from pathlib import Path from typing import Optional -import io import requests -from fastapi import APIRouter, Depends, UploadFile, HTTPException, Request +from fastapi import APIRouter, Depends, HTTPException, Request, UploadFile from open_webui.config import CACHE_DIR from open_webui.constants import ERROR_MESSAGES from open_webui.env import ENABLE_FORWARD_USER_INFO_HEADERS, SRC_LOG_LEVELS @@ -392,8 +392,7 @@ def load_b64_image_data(b64_str): return None -def save_url_image(url, headers=None): - image_id = str(uuid.uuid4()) +def load_url_image_data(url, headers=None): try: if headers: r = requests.get(url, headers=headers) @@ -403,18 +402,7 @@ def save_url_image(url, headers=None): r.raise_for_status() if r.headers["content-type"].split("/")[0] == "image": mime_type = r.headers["content-type"] - image_format = mimetypes.guess_extension(mime_type) - - if not image_format: - raise ValueError("Could not determine image type from MIME type") - - image_filename = f"{image_id}{image_format}" - - file_path = IMAGE_CACHE_DIR.joinpath(f"{image_filename}") - with open(file_path, "wb") as image_file: - for chunk in r.iter_content(chunk_size=8192): - image_file.write(chunk) - return image_filename + return r.content, mime_type else: log.error("Url does not point to an image.") return None @@ -486,8 +474,14 @@ async def image_generations( }, ) file_item = upload_file(request, file, user) - url = request.app.url_path_for("get_file_content_by_id", id=file_item.id) + url = request.app.url_path_for( + "get_file_content_by_id", id=file_item.id + ) images.append({"url": url}) + file_body_path = IMAGE_CACHE_DIR.joinpath(f"{file_item.id}.json") + + with open(file_body_path, "w") as f: + json.dump(data, f) return images elif request.app.state.config.IMAGE_GENERATION_ENGINE == "comfyui": @@ -533,9 +527,20 @@ async def image_generations( "Authorization": f"Bearer {request.app.state.config.COMFYUI_API_KEY}" } - image_filename = save_url_image(image["url"], headers) - images.append({"url": f"/cache/image/generations/{image_filename}"}) - file_body_path = IMAGE_CACHE_DIR.joinpath(f"{image_filename}.json") + image_data, content_type = load_url_image_data(image["url"], headers) + file = UploadFile( + file=io.BytesIO(image_data), + filename="image", # will be converted to a unique ID on upload_file + headers={ + "content-type": content_type, + }, + ) + file_item = upload_file(request, file, user) + url = request.app.url_path_for( + "get_file_content_by_id", id=file_item.id + ) + images.append({"url": url}) + file_body_path = IMAGE_CACHE_DIR.joinpath(f"{file_item.id}.json") with open(file_body_path, "w") as f: json.dump(form_data.model_dump(exclude_none=True), f) @@ -585,9 +590,20 @@ async def image_generations( images = [] for image in res["images"]: - image_filename = save_b64_image(image) - images.append({"url": f"/cache/image/generations/{image_filename}"}) - file_body_path = IMAGE_CACHE_DIR.joinpath(f"{image_filename}.json") + image_data, content_type = load_b64_image_data(image) + file = UploadFile( + file=io.BytesIO(image_data), + filename="image", # will be converted to a unique ID on upload_file + headers={ + "content-type": content_type, + }, + ) + file_item = upload_file(request, file, user) + url = request.app.url_path_for( + "get_file_content_by_id", id=file_item.id + ) + images.append({"url": url}) + file_body_path = IMAGE_CACHE_DIR.joinpath(f"{file_item.id}.json") with open(file_body_path, "w") as f: json.dump({**data, "info": res["info"]}, f) @@ -599,4 +615,4 @@ async def image_generations( data = r.json() if "error" in data: error = data["error"]["message"] - raise HTTPException(status_code=400, detail=ERROR_MESSAGES.DEFAULT(error)) \ No newline at end of file + raise HTTPException(status_code=400, detail=ERROR_MESSAGES.DEFAULT(error)) From ac3338265d224bbff2ed80310a7bd1bd4d763bed Mon Sep 17 00:00:00 2001 From: Rodrigo Agundez Date: Fri, 7 Feb 2025 07:30:58 +0900 Subject: [PATCH 03/56] Set get_config as the name of the function --- backend/open_webui/routers/images.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/open_webui/routers/images.py b/backend/open_webui/routers/images.py index a26c06c61..a43714956 100644 --- a/backend/open_webui/routers/images.py +++ b/backend/open_webui/routers/images.py @@ -34,7 +34,7 @@ router = APIRouter() @router.get("/config") -async def get_def(request: Request, user=Depends(get_admin_user)): +async def get_config(request: Request, user=Depends(get_admin_user)): return { "enabled": request.app.state.config.ENABLE_IMAGE_GENERATION, "engine": request.app.state.config.IMAGE_GENERATION_ENGINE, @@ -456,7 +456,7 @@ async def image_generations( requests.post, url=f"{request.app.state.config.IMAGES_OPENAI_API_BASE_URL}/images/generations", json=data, - headers=headers, + headers=headers, ) r.raise_for_status() From 7e97e9dcc925dbe969190a510cf1b34bf9fdd1d7 Mon Sep 17 00:00:00 2001 From: Rodrigo Agundez Date: Fri, 7 Feb 2025 07:37:18 +0900 Subject: [PATCH 04/56] Improve style --- backend/open_webui/routers/images.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/backend/open_webui/routers/images.py b/backend/open_webui/routers/images.py index a43714956..df69485c2 100644 --- a/backend/open_webui/routers/images.py +++ b/backend/open_webui/routers/images.py @@ -3,9 +3,7 @@ import base64 import io import json import logging -import mimetypes import re -import uuid from pathlib import Path from typing import Optional @@ -456,7 +454,7 @@ async def image_generations( requests.post, url=f"{request.app.state.config.IMAGES_OPENAI_API_BASE_URL}/images/generations", json=data, - headers=headers, + headers=headers, ) r.raise_for_status() From 4974c9cbb08eb9efd998c5eeb5ba75af827306b3 Mon Sep 17 00:00:00 2001 From: Rodrigo Agundez Date: Fri, 7 Feb 2025 08:12:04 +0900 Subject: [PATCH 05/56] Refactor upload function --- backend/open_webui/routers/images.py | 77 +++++++++++----------------- 1 file changed, 31 insertions(+), 46 deletions(-) diff --git a/backend/open_webui/routers/images.py b/backend/open_webui/routers/images.py index df69485c2..2d608c133 100644 --- a/backend/open_webui/routers/images.py +++ b/backend/open_webui/routers/images.py @@ -410,6 +410,24 @@ def load_url_image_data(url, headers=None): return None +def upload_image(request, data, image_data, content_type, user): + file = UploadFile( + file=io.BytesIO(image_data), + filename="image", # will be converted to a unique ID on upload_file + headers={ + "content-type": content_type, + }, + ) + file_item = upload_file(request, file, user) + file_body_path = IMAGE_CACHE_DIR.joinpath(f"{file_item.id}.json") + + with open(file_body_path, "w") as f: + json.dump(data, f) + + url = request.app.url_path_for("get_file_content_by_id", id=file_item.id) + return url + + @router.post("/generations") async def image_generations( request: Request, @@ -464,22 +482,8 @@ async def image_generations( for image in res["data"]: image_data, content_type = load_b64_image_data(image["b64_json"]) - file = UploadFile( - file=io.BytesIO(image_data), - filename="image", # will be converted to a unique ID on upload_file - headers={ - "content-type": content_type, - }, - ) - file_item = upload_file(request, file, user) - url = request.app.url_path_for( - "get_file_content_by_id", id=file_item.id - ) + url = upload_image(request, data, image_data, content_type, user) images.append({"url": url}) - file_body_path = IMAGE_CACHE_DIR.joinpath(f"{file_item.id}.json") - - with open(file_body_path, "w") as f: - json.dump(data, f) return images elif request.app.state.config.IMAGE_GENERATION_ENGINE == "comfyui": @@ -526,24 +530,14 @@ async def image_generations( } image_data, content_type = load_url_image_data(image["url"], headers) - file = UploadFile( - file=io.BytesIO(image_data), - filename="image", # will be converted to a unique ID on upload_file - headers={ - "content-type": content_type, - }, - ) - file_item = upload_file(request, file, user) - url = request.app.url_path_for( - "get_file_content_by_id", id=file_item.id + url = upload_image( + request, + form_data.model_dump(exclude_none=True), + image_data, + content_type, + user, ) images.append({"url": url}) - file_body_path = IMAGE_CACHE_DIR.joinpath(f"{file_item.id}.json") - - with open(file_body_path, "w") as f: - json.dump(form_data.model_dump(exclude_none=True), f) - - log.debug(f"images: {images}") return images elif ( request.app.state.config.IMAGE_GENERATION_ENGINE == "automatic1111" @@ -589,23 +583,14 @@ async def image_generations( for image in res["images"]: image_data, content_type = load_b64_image_data(image) - file = UploadFile( - file=io.BytesIO(image_data), - filename="image", # will be converted to a unique ID on upload_file - headers={ - "content-type": content_type, - }, - ) - file_item = upload_file(request, file, user) - url = request.app.url_path_for( - "get_file_content_by_id", id=file_item.id + url = upload_image( + request, + {**data, "info": res["info"]}, + image_data, + content_type, + user, ) images.append({"url": url}) - file_body_path = IMAGE_CACHE_DIR.joinpath(f"{file_item.id}.json") - - with open(file_body_path, "w") as f: - json.dump({**data, "info": res["info"]}, f) - return images except Exception as e: error = e From 312f273a1bf60f66089fbcd9f7ad225466419d30 Mon Sep 17 00:00:00 2001 From: Rodrigo Agundez Date: Fri, 7 Feb 2025 08:22:20 +0900 Subject: [PATCH 06/56] Add extension to image filename --- backend/open_webui/routers/images.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/backend/open_webui/routers/images.py b/backend/open_webui/routers/images.py index 2d608c133..da4bf8a17 100644 --- a/backend/open_webui/routers/images.py +++ b/backend/open_webui/routers/images.py @@ -3,6 +3,7 @@ import base64 import io import json import logging +import mimetypes import re from pathlib import Path from typing import Optional @@ -411,15 +412,16 @@ def load_url_image_data(url, headers=None): def upload_image(request, data, image_data, content_type, user): + image_format = mimetypes.guess_extension(content_type) file = UploadFile( file=io.BytesIO(image_data), - filename="image", # will be converted to a unique ID on upload_file + filename=f"generated{image_format}", # will be converted to a unique ID on upload_file headers={ "content-type": content_type, }, ) file_item = upload_file(request, file, user) - file_body_path = IMAGE_CACHE_DIR.joinpath(f"{file_item.id}.json") + file_body_path = IMAGE_CACHE_DIR.joinpath(f"{file_item.filename}.json") with open(file_body_path, "w") as f: json.dump(data, f) From ffb9e739753f1d096531d5084fc524e642744266 Mon Sep 17 00:00:00 2001 From: Rodrigo Agundez Date: Fri, 7 Feb 2025 08:32:06 +0900 Subject: [PATCH 07/56] Save image metadata to DB --- backend/open_webui/routers/files.py | 36 +++++++++++++--------------- backend/open_webui/routers/images.py | 9 ++----- 2 files changed, 18 insertions(+), 27 deletions(-) diff --git a/backend/open_webui/routers/files.py b/backend/open_webui/routers/files.py index 7160c2e86..7cf7a942f 100644 --- a/backend/open_webui/routers/files.py +++ b/backend/open_webui/routers/files.py @@ -3,30 +3,22 @@ import os import uuid from pathlib import Path from typing import Optional -from pydantic import BaseModel -import mimetypes from urllib.parse import quote -from open_webui.storage.provider import Storage - +from fastapi import APIRouter, Depends, File, HTTPException, Request, UploadFile, status +from fastapi.responses import FileResponse, StreamingResponse +from open_webui.constants import ERROR_MESSAGES +from open_webui.env import SRC_LOG_LEVELS from open_webui.models.files import ( FileForm, FileModel, FileModelResponse, Files, ) -from open_webui.routers.retrieval import process_file, ProcessFileForm - -from open_webui.config import UPLOAD_DIR -from open_webui.env import SRC_LOG_LEVELS -from open_webui.constants import ERROR_MESSAGES - - -from fastapi import APIRouter, Depends, File, HTTPException, UploadFile, status, Request -from fastapi.responses import FileResponse, StreamingResponse - - +from open_webui.routers.retrieval import ProcessFileForm, process_file +from open_webui.storage.provider import Storage from open_webui.utils.auth import get_admin_user, get_verified_user +from pydantic import BaseModel log = logging.getLogger(__name__) log.setLevel(SRC_LOG_LEVELS["MODELS"]) @@ -41,7 +33,10 @@ router = APIRouter() @router.post("/", response_model=FileModelResponse) def upload_file( - request: Request, file: UploadFile = File(...), user=Depends(get_verified_user) + request: Request, + file: UploadFile = File(...), + user=Depends(get_verified_user), + file_metadata: dict = {}, ): log.info(f"file.content_type: {file.content_type}") try: @@ -61,6 +56,7 @@ def upload_file( "id": id, "filename": name, "path": file_path, + "data": file_metadata, "meta": { "name": name, "content_type": file.content_type, @@ -126,7 +122,7 @@ async def delete_all_files(user=Depends(get_admin_user)): Storage.delete_all_files() except Exception as e: log.exception(e) - log.error(f"Error deleting files") + log.error("Error deleting files") raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail=ERROR_MESSAGES.DEFAULT("Error deleting files"), @@ -248,7 +244,7 @@ async def get_file_content_by_id(id: str, user=Depends(get_verified_user)): ) except Exception as e: log.exception(e) - log.error(f"Error getting file content") + log.error("Error getting file content") raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail=ERROR_MESSAGES.DEFAULT("Error getting file content"), @@ -279,7 +275,7 @@ async def get_html_file_content_by_id(id: str, user=Depends(get_verified_user)): ) except Exception as e: log.exception(e) - log.error(f"Error getting file content") + log.error("Error getting file content") raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail=ERROR_MESSAGES.DEFAULT("Error getting file content"), @@ -355,7 +351,7 @@ async def delete_file_by_id(id: str, user=Depends(get_verified_user)): Storage.delete_file(file.path) except Exception as e: log.exception(e) - log.error(f"Error deleting files") + log.error("Error deleting files") raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail=ERROR_MESSAGES.DEFAULT("Error deleting files"), diff --git a/backend/open_webui/routers/images.py b/backend/open_webui/routers/images.py index da4bf8a17..1dcaca866 100644 --- a/backend/open_webui/routers/images.py +++ b/backend/open_webui/routers/images.py @@ -411,7 +411,7 @@ def load_url_image_data(url, headers=None): return None -def upload_image(request, data, image_data, content_type, user): +def upload_image(request, image_metadata, image_data, content_type, user): image_format = mimetypes.guess_extension(content_type) file = UploadFile( file=io.BytesIO(image_data), @@ -420,12 +420,7 @@ def upload_image(request, data, image_data, content_type, user): "content-type": content_type, }, ) - file_item = upload_file(request, file, user) - file_body_path = IMAGE_CACHE_DIR.joinpath(f"{file_item.filename}.json") - - with open(file_body_path, "w") as f: - json.dump(data, f) - + file_item = upload_file(request, file, user, file_metadata=image_metadata) url = request.app.url_path_for("get_file_content_by_id", id=file_item.id) return url From 2b05c9d944757600289c38b3d2fde88ebf19997e Mon Sep 17 00:00:00 2001 From: Rodrigo Agundez Date: Sat, 8 Feb 2025 19:35:27 +0900 Subject: [PATCH 08/56] Move file metadata into the [meta][data] key --- backend/open_webui/routers/files.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/open_webui/routers/files.py b/backend/open_webui/routers/files.py index 7cf7a942f..051321257 100644 --- a/backend/open_webui/routers/files.py +++ b/backend/open_webui/routers/files.py @@ -56,11 +56,11 @@ def upload_file( "id": id, "filename": name, "path": file_path, - "data": file_metadata, "meta": { "name": name, "content_type": file.content_type, "size": len(contents), + "data": file_metadata, }, } ), From 167c8bf00d165af523acfc3b870749f6be6d3e57 Mon Sep 17 00:00:00 2001 From: Rodrigo Agundez Date: Mon, 10 Feb 2025 10:35:10 +0800 Subject: [PATCH 09/56] Prevent SSRF and HTML injection --- backend/open_webui/utils/pdf_generator.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/backend/open_webui/utils/pdf_generator.py b/backend/open_webui/utils/pdf_generator.py index 1bb9f76b3..6650fd9b5 100644 --- a/backend/open_webui/utils/pdf_generator.py +++ b/backend/open_webui/utils/pdf_generator.py @@ -2,6 +2,7 @@ from datetime import datetime from io import BytesIO from pathlib import Path from typing import Dict, Any, List +from html import escape from markdown import markdown @@ -11,7 +12,6 @@ from fpdf import FPDF from open_webui.env import STATIC_DIR, FONTS_DIR from open_webui.models.chats import ChatTitleMessagesForm - class PDFGenerator: """ Description: @@ -41,13 +41,13 @@ class PDFGenerator: def _build_html_message(self, message: Dict[str, Any]) -> str: """Build HTML for a single message.""" - role = message.get("role", "user") - content = message.get("content", "") + role = escape(message.get("role", "user")) + content = escape(message.get("content", "")) timestamp = message.get("timestamp") - model = message.get("model") if role == "assistant" else "" + model = escape(message.get("model") if role == "assistant" else "") - date_str = self.format_timestamp(timestamp) if timestamp else "" + date_str = escape(self.format_timestamp(timestamp) if timestamp else "") # extends pymdownx extension to convert markdown to html. # - https://facelessuser.github.io/pymdown-extensions/usage_notes/ @@ -76,6 +76,7 @@ class PDFGenerator: def _generate_html_body(self) -> str: """Generate the full HTML body for the PDF.""" + escaped_title = escape(self.form_data.title) return f""" @@ -84,7 +85,7 @@ class PDFGenerator:
-

{self.form_data.title}

+

{escaped_title}

{self.messages_html}
From a756adfaeee27b0ef299d415c26a825eb8adf418 Mon Sep 17 00:00:00 2001 From: Jose Maldonado aka Yukiteru <63384398+yukiteruamano@users.noreply.github.com> Date: Mon, 10 Feb 2025 00:37:59 -0400 Subject: [PATCH 10/56] i18n: fix translations for es_ES (Spanish) --- src/lib/i18n/locales/es-ES/translation.json | 794 ++++++++++---------- 1 file changed, 397 insertions(+), 397 deletions(-) diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index 08d07c8b5..03a283d8c 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -1,46 +1,46 @@ { - "-1 for no limit, or a positive integer for a specific limit": "", + "-1 for no limit, or a positive integer for a specific limit": "-1 para ilimitado, o un número entero positivo para un límite específico.", "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' o '-1' para evitar expiración.", "(e.g. `sh webui.sh --api --api-auth username_password`)": "(p.ej. `sh webui.sh --api --api-auth username_password`)", "(e.g. `sh webui.sh --api`)": "(p.ej. `sh webui.sh --api`)", "(latest)": "(latest)", "{{ models }}": "{{ models }}", - "{{COUNT}} Replies": "", + "{{COUNT}} Replies": "{{COUNT}} Respuestas", "{{user}}'s Chats": "Chats de {{user}}", "{{webUIName}} Backend Required": "{{webUIName}} Servidor Requerido", "*Prompt node ID(s) are required for image generation": "Los ID de nodo son requeridos para la generación de imágenes", - "A new version (v{{LATEST_VERSION}}) is now available.": "", + "A new version (v{{LATEST_VERSION}}) is now available.": "Una nueva versión (v{{LATEST_VERSION}}) está disponible.", "A task model is used when performing tasks such as generating titles for chats and web search queries": "Un modelo de tareas se utiliza cuando se realizan tareas como la generación de títulos para chats y consultas de búsqueda web", "a user": "un usuario", "About": "Sobre nosotros", - "Access": "", - "Access Control": "", - "Accessible to all users": "", + "Access": "Acceso", + "Access Control": "Control de Acceso", + "Accessible to all users": "Accesible para todos los usuarios", "Account": "Cuenta", "Account Activation Pending": "Activación de cuenta pendiente", "Accurate information": "Información precisa", "Actions": "Acciones", - "Activate this command by typing \"/{{COMMAND}}\" to chat input.": "", + "Activate this command by typing \"/{{COMMAND}}\" to chat input.": "Active este comando escribiendo \"/{{COMMAND}}\" en el chat", "Active Users": "Usuarios activos", "Add": "Agregar", - "Add a model ID": "", + "Add a model ID": "Agregado ID del modelo", "Add a short description about what this model does": "Agregue una breve descripción sobre lo que hace este modelo", "Add a tag": "Agregar una etiqueta", - "Add Arena Model": "", - "Add Connection": "", + "Add Arena Model": "Agregar un modelo a la Arena", + "Add Connection": "Agregar Conexión", "Add Content": "Agregar Contenido", "Add content here": "Agrege contenido aquí", "Add custom prompt": "Agregar un prompt personalizado", "Add Files": "Agregar Archivos", - "Add Group": "", + "Add Group": "Agregar Grupo", "Add Memory": "Agregar Memoria", "Add Model": "Agregar Modelo", - "Add Reaction": "", + "Add Reaction": "Agregar Reacción", "Add Tag": "Agregar etiqueta", "Add Tags": "agregar etiquetas", "Add text content": "Añade contenido de texto", "Add User": "Agregar Usuario", - "Add User Group": "", + "Add User Group": "Agregar usuario al grupo", "Adjusting these settings will apply changes universally to all users.": "Ajustar estas opciones aplicará los cambios universalmente a todos los usuarios.", "admin": "admin", "Admin": "Admin", @@ -50,67 +50,67 @@ "Advanced Parameters": "Parámetros Avanzados", "Advanced Params": "Parámetros avanzados", "All Documents": "Todos los Documentos", - "All models deleted successfully": "", - "Allow Chat Controls": "", - "Allow Chat Delete": "", + "All models deleted successfully": "Todos los modelos han sido borrados", + "Allow Chat Controls": "Permitir Control de Chats", + "Allow Chat Delete": "Permitir Borrar Chat", "Allow Chat Deletion": "Permitir Borrar Chats", - "Allow Chat Edit": "", - "Allow File Upload": "", + "Allow Chat Edit": "Pemritir Editar Chat", + "Allow File Upload": "Permitir la subida de archivos", "Allow non-local voices": "Permitir voces no locales", "Allow Temporary Chat": "Permitir Chat Temporal", "Allow User Location": "Permitir Ubicación del Usuario", "Allow Voice Interruption in Call": "Permitir interrupción de voz en llamada", - "Allowed Endpoints": "", + "Allowed Endpoints": "Endpoints permitidos", "Already have an account?": "¿Ya tienes una cuenta?", - "Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "", - "Always": "", - "Amazing": "", + "Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "Alternativa a top_p, y busca asegurar un equilibrio entre calidad y variedad. El parámetro p representa la probabilidad mínima para que un token sea considerado, en relación con la probabilidad del token más probable. Por ejemplo, con p=0.05 y el token más probable con una probabilidad de 0.9, los logits con un valor menor a 0.045 son filtrados. (Predeterminado: 0.0)", + "Always": "Siempre", + "Amazing": "Sorprendente", "an assistant": "un asistente", - "Analyzed": "", - "Analyzing...": "", + "Analyzed": "Analizado", + "Analyzing...": "Analizando..", "and": "y", - "and {{COUNT}} more": "", + "and {{COUNT}} more": "y {{COUNT}} más", "and create a new shared link.": "y crear un nuevo enlace compartido.", "API Base URL": "Dirección URL de la API", "API Key": "Clave de la API ", "API Key created.": "Clave de la API creada.", - "API Key Endpoint Restrictions": "", + "API Key Endpoint Restrictions": "Restricciones de Endpoint de Clave de API", "API keys": "Claves de la API", - "Application DN": "", - "Application DN Password": "", - "applies to all users with the \"user\" role": "", + "Application DN": "Aplicacion DN", + "Application DN Password": "Contraseña de Aplicacion DN", + "applies to all users with the \"user\" role": "aplicacar a todos los usuarios con el rol \"user\" ", "April": "Abril", "Archive": "Archivar", "Archive All Chats": "Archivar todos los chats", "Archived Chats": "Chats archivados", - "archived-chat-export": "", - "Are you sure you want to delete this channel?": "", - "Are you sure you want to delete this message?": "", - "Are you sure you want to unarchive all archived chats?": "", + "archived-chat-export": "Exportación de chats archivados", + "Are you sure you want to delete this channel?": "¿Seguro de que quieres eliminar este canal?", + "Are you sure you want to delete this message?": "¿Seguro de que quieres eliminar este mensaje? ", + "Are you sure you want to unarchive all archived chats?": "¿Estás seguro de que quieres desarchivar todos los chats archivados?", "Are you sure?": "¿Está seguro?", - "Arena Models": "", + "Arena Models": "Arena de Modelos", "Artifacts": "Artefactos", "Ask a question": "Haz una pregunta", - "Assistant": "", + "Assistant": "Asistente", "Attach file": "Adjuntar archivo", "Attention to detail": "Detalle preciso", - "Attribute for Mail": "", - "Attribute for Username": "", + "Attribute for Mail": "Atributo para correo", + "Attribute for Username": "Atributo para el nombre de usuario", "Audio": "Audio", "August": "Agosto", - "Authenticate": "", + "Authenticate": "Autenticar", "Auto-Copy Response to Clipboard": "Copiar respuesta automáticamente al portapapeles", "Auto-playback response": "Respuesta de reproducción automática", - "Autocomplete Generation": "", - "Autocomplete Generation Input Max Length": "", - "Automatic1111": "", - "AUTOMATIC1111 Api Auth String": "Cadena de autenticación de API", + "Autocomplete Generation": "Generación de autocompletado", + "Autocomplete Generation Input Max Length": "Longitud máxima de entrada de generación de autocompletado", + "Automatic1111": "AUTOMATIC1111", + "AUTOMATIC1111 Api Auth String": "API Auth para instancia AUTOMATIC1111", "AUTOMATIC1111 Base URL": "Dirección URL de AUTOMATIC1111", "AUTOMATIC1111 Base URL is required.": "La dirección URL de AUTOMATIC1111 es requerida.", "Available list": "Lista disponible", "available!": "¡disponible!", - "Awful": "", - "Azure AI Speech": "", + "Awful": "Horrible", + "Azure AI Speech": "Voz de Azure AI", "Azure Region": "Región de Azure", "Back": "Volver", "Bad Response": "Respuesta incorrecta", @@ -119,33 +119,33 @@ "Batch Size (num_batch)": "Tamaño del Batch (num_batch)", "before": "antes", "Being lazy": "Ser perezoso", - "Beta": "", - "Bing Search V7 Endpoint": "", - "Bing Search V7 Subscription Key": "", + "Beta": "Beta", + "Bing Search V7 Endpoint": "Endpoint de Bing Search V7", + "Bing Search V7 Subscription Key": "Clave de suscripción de Bing Search V7", "Brave Search API Key": "Clave de API de Brave Search", - "By {{name}}": "", + "By {{name}}": "Por {{name}}", "Bypass SSL verification for Websites": "Desactivar la verificación SSL para sitios web", "Call": "Llamada", "Call feature is not supported when using Web STT engine": "La funcionalidad de llamada no puede usarse junto con el motor de STT Web", "Camera": "Cámara", "Cancel": "Cancelar", "Capabilities": "Capacidades", - "Capture": "", - "Certificate Path": "", + "Capture": "Captura", + "Certificate Path": "Path para Certificados", "Change Password": "Cambia la Contraseña", - "Channel Name": "", - "Channels": "", - "Character": "", - "Character limit for autocomplete generation input": "", - "Chart new frontiers": "", + "Channel Name": "Nombre del Canal", + "Channels": "Canal", + "Character": "Caracter", + "Character limit for autocomplete generation input": "Limite de caracteres para la entrada de generación de autocompletado", + "Chart new frontiers": "Dibujar nuevas fronteras", "Chat": "Chat", "Chat Background Image": "Imágen de fondo del Chat", "Chat Bubble UI": "Burbuja de chat UI", "Chat Controls": "Controles de chat", "Chat direction": "Dirección del Chat", "Chat Overview": "Vista general del chat", - "Chat Permissions": "", - "Chat Tags Auto-Generation": "", + "Chat Permissions": "Permisos de Chat", + "Chat Tags Auto-Generation": "Auto-generación de Etiquetas para Chat", "Chats": "Chats", "Check Again": "Verifica de nuevo", "Check for updates": "Verificar actualizaciones", @@ -154,15 +154,15 @@ "Chunk Overlap": "Superposición de fragmentos", "Chunk Params": "Parámetros de fragmentos", "Chunk Size": "Tamaño de fragmentos", - "Ciphers": "", + "Ciphers": "Cifrado", "Citation": "Cita", "Clear memory": "Liberar memoria", - "click here": "", - "Click here for filter guides.": "", + "click here": "Clic aquí", + "Click here for filter guides.": "Clic aquí para guías de filtros", "Click here for help.": "Presiona aquí para obtener ayuda.", "Click here to": "Presiona aquí para", "Click here to download user import template file.": "Presiona aquí para descargar el archivo de plantilla de importación de usuario.", - "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to learn more about faster-whisper and see the available models.": "Clic aquí para aprender más sobre faster-whisper y ver los modelos disponibles.", "Click here to select": "Presiona aquí para seleccionar", "Click here to select a csv file.": "Presiona aquí para seleccionar un archivo csv.", "Click here to select a py file.": "Presiona aquí para seleccionar un archivo py.", @@ -171,41 +171,41 @@ "Click on the user role button to change a user's role.": "Presiona en el botón de roles del usuario para cambiar su rol.", "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Permisos de escritura del portapapeles denegados. Por favor, comprueba las configuraciones de tu navegador para otorgar el acceso necesario.", "Clone": "Clonar", - "Clone Chat": "", - "Clone of {{TITLE}}": "", + "Clone Chat": "Clonar chat", + "Clone of {{TITLE}}": "Clon de {{TITLE}}", "Close": "Cerrar", - "Code execution": "", + "Code execution": "Ejecución de código", "Code formatted successfully": "Se ha formateado correctamente el código.", - "Code Interpreter": "", + "Code Interpreter": "Interprete de Código", "Collection": "Colección", - "Color": "", + "Color": "Color", "ComfyUI": "ComfyUI", - "ComfyUI API Key": "", + "ComfyUI API Key": "Clave de API de ComfyUI", "ComfyUI Base URL": "ComfyUI Base URL", "ComfyUI Base URL is required.": "ComfyUI Base URL es requerido.", - "ComfyUI Workflow": "", + "ComfyUI Workflow": "Flujo de trabajo de ComfyUI", "ComfyUI Workflow Nodes": "Nodos para ComfyUI Workflow", "Command": "Comando", - "Completions": "", + "Completions": "Completaciones", "Concurrent Requests": "Solicitudes simultáneas", - "Configure": "", + "Configure": "Confugurar", "Confirm": "Confirmar", "Confirm Password": "Confirmar Contraseña", "Confirm your action": "Confirma tu acción", - "Confirm your new password": "", + "Confirm your new password": "Confirmar tu nueva contraseña", "Connections": "Conexiones", - "Constrains effort on reasoning for reasoning models. Only applicable to reasoning models from specific providers that support reasoning effort. (Default: medium)": "", + "Constrains effort on reasoning for reasoning models. Only applicable to reasoning models from specific providers that support reasoning effort. (Default: medium)": " Restringe el esfuerzo en la razonamiento para los modelos de razonamiento. Solo aplicable a los modelos de razonamiento de proveedores específicos que admiten el esfuerzo de razonamiento. (Por defecto: medio)", "Contact Admin for WebUI Access": "Contacta el administrador para obtener acceso al WebUI", "Content": "Contenido", "Content Extraction": "Extracción de contenido", "Context Length": "Longitud del contexto", "Continue Response": "Continuar Respuesta", "Continue with {{provider}}": "Continuar con {{provider}}", - "Continue with Email": "", - "Continue with LDAP": "", - "Control how message text is split for TTS requests. 'Punctuation' splits into sentences, 'paragraphs' splits into paragraphs, and 'none' keeps the message as a single string.": "", + "Continue with Email": "Continuar con email", + "Continue with LDAP": "Continuar con LDAP", + "Control how message text is split for TTS requests. 'Punctuation' splits into sentences, 'paragraphs' splits into paragraphs, and 'none' keeps the message as a single string.": "Controlar como el texto del mensaje se divide para las solicitudes de TTS. 'Punctuation' divide en oraciones, 'paragraphs' divide en párrafos y 'none' mantiene el mensaje como una sola cadena.", "Controls": "Controles", - "Controls the balance between coherence and diversity of the output. A lower value will result in more focused and coherent text. (Default: 5.0)": "", + "Controls the balance between coherence and diversity of the output. A lower value will result in more focused and coherent text. (Default: 5.0)": " Controlar el equilibrio entre la coherencia y la diversidad de la salida. Un valor más bajo resultará en un texto más enfocado y coherente. (Por defecto: 5.0)", "Copied": "Copiado", "Copied shared chat URL to clipboard!": "¡URL de chat compartido copiado al portapapeles!", "Copied to clipboard": "Copiado al portapapeles", @@ -213,15 +213,15 @@ "Copy last code block": "Copia el último bloque de código", "Copy last response": "Copia la última respuesta", "Copy Link": "Copiar enlace", - "Copy to clipboard": "", + "Copy to clipboard": "Copiado a portapapeles", "Copying to clipboard was successful!": "¡La copia al portapapeles se ha realizado correctamente!", - "Create": "", - "Create a knowledge base": "", + "Create": "Crear", + "Create a knowledge base": "Crear base de conocimiento", "Create a model": "Crear un modelo", "Create Account": "Crear una cuenta", - "Create Admin Account": "", - "Create Channel": "", - "Create Group": "", + "Create Admin Account": "Crear cuenta administrativa", + "Create Channel": "Crear Canal", + "Create Group": "Crear grupo", "Create Knowledge": "Crear Conocimiento", "Create new key": "Crear una nueva clave", "Create new secret key": "Crear una nueva clave secreta", @@ -238,34 +238,34 @@ "Default": "Por defecto", "Default (Open AI)": "Predeterminado (Open AI)", "Default (SentenceTransformers)": "Predeterminado (SentenceTransformers)", - "Default mode works with a wider range of models by calling tools once before execution. Native mode leverages the model’s built-in tool-calling capabilities, but requires the model to inherently support this feature.": "", + "Default mode works with a wider range of models by calling tools once before execution. Native mode leverages the model’s built-in tool-calling capabilities, but requires the model to inherently support this feature.": "El modo predeterminado funciona con una gama más amplia de modelos llamando a las herramientas una vez antes de la ejecución. El modo nativo aprovecha las capacidades integradas de llamada de herramientas del modelo, pero requiere que el modelo soporte esta función de manera inherente.", "Default Model": "Modelo predeterminado", "Default model updated": "El modelo por defecto ha sido actualizado", - "Default Models": "", - "Default permissions": "", - "Default permissions updated successfully": "", + "Default Models": "Modelos predeterminados", + "Default permissions": "Permisos predeterminados", + "Default permissions updated successfully": "Permisos predeterminados actualizados correctamente", "Default Prompt Suggestions": "Sugerencias de mensajes por defecto", - "Default to 389 or 636 if TLS is enabled": "", - "Default to ALL": "", + "Default to 389 or 636 if TLS is enabled": "Predeterminado a 389 o 636 si TLS está habilitado", + "Default to ALL": "Predeterminado a TODOS", "Default User Role": "Rol por defecto para usuarios", "Delete": "Borrar", "Delete a model": "Borra un modelo", "Delete All Chats": "Eliminar todos los chats", - "Delete All Models": "", + "Delete All Models": "Eliminar todos los modelos", "Delete chat": "Borrar chat", "Delete Chat": "Borrar Chat", "Delete chat?": "Borrar el chat?", - "Delete folder?": "", + "Delete folder?": "¿Eliminar carpeta?", "Delete function?": "Borrar la función?", - "Delete Message": "", + "Delete Message": "Eliminar mensaje", "Delete prompt?": "Borrar el prompt?", "delete this link": "Borrar este enlace", "Delete tool?": "Borrar la herramienta", "Delete User": "Borrar Usuario", "Deleted {{deleteModelTag}}": "Se borró {{deleteModelTag}}", "Deleted {{name}}": "Eliminado {{nombre}}", - "Deleted User": "", - "Describe your knowledge base and objectives": "", + "Deleted User": "Usuario eliminado", + "Describe your knowledge base and objectives": "Describe tu base de conocimientos y objetivos", "Description": "Descripción", "Didn't fully follow instructions": "No siguió las instrucciones", "Disabled": "Desactivado", @@ -273,17 +273,17 @@ "Discover a model": "Descubrir un modelo", "Discover a prompt": "Descubre un Prompt", "Discover a tool": "Descubre una herramienta", - "Discover wonders": "", + "Discover wonders": "Descubre maravillas", "Discover, download, and explore custom functions": "Descubre, descarga y explora funciones personalizadas", "Discover, download, and explore custom prompts": "Descubre, descarga, y explora Prompts personalizados", "Discover, download, and explore custom tools": "Descubre, descarga y explora herramientas personalizadas", "Discover, download, and explore model presets": "Descubre, descarga y explora ajustes preestablecidos de modelos", "Dismissible": "Desestimable", - "Display": "", + "Display": "Mostrar", "Display Emoji in Call": "Muestra Emoji en llamada", "Display the username instead of You in the Chat": "Mostrar el nombre de usuario en lugar de Usted en el chat", - "Displays citations in the response": "", - "Dive into knowledge": "", + "Displays citations in the response": "Muestra citas en la respuesta", + "Dive into knowledge": "Sumérgete en el conocimiento", "Do not install functions from sources you do not fully trust.": "No instale funciones desde fuentes que no confíe totalmente.", "Do not install tools from sources you do not fully trust.": "No instale herramientas desde fuentes que no confíe totalmente.", "Document": "Documento", @@ -298,39 +298,39 @@ "Download": "Descargar", "Download canceled": "Descarga cancelada", "Download Database": "Descarga la Base de Datos", - "Drag and drop a file to upload or select a file to view": "", - "Draw": "", + "Drag and drop a file to upload or select a file to view": "Arrastra y suelta un archivo para subirlo o selecciona un archivo para verlo", + "Draw": "Dibujar", "Drop any files here to add to the conversation": "Suelta cualquier archivo aquí para agregarlo a la conversación", "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p.ej. '30s','10m'. Unidades válidas de tiempo son 's', 'm', 'h'.", - "e.g. A filter to remove profanity from text": "", - "e.g. My Filter": "", - "e.g. My Tools": "", - "e.g. my_filter": "", - "e.g. my_tools": "", - "e.g. Tools for performing various operations": "", + "e.g. A filter to remove profanity from text": "p.ej. Un filtro para eliminar la profanidad del texto", + "e.g. My Filter": "p.ej. Mi Filtro", + "e.g. My Tools": "p.ej. Mis Herramientas", + "e.g. my_filter": "p.ej. mi_filtro", + "e.g. my_tools": "p.ej. mis_herramientas", + "e.g. Tools for performing various operations": "p.ej. Herramientas para realizar diversas operaciones", "Edit": "Editar", - "Edit Arena Model": "", - "Edit Channel": "", - "Edit Connection": "", - "Edit Default Permissions": "", + "Edit Arena Model": "Editar modelo de Arena", + "Edit Channel": "Editar Canal", + "Edit Connection": "Editar Conexión", + "Edit Default Permissions": "Editar permisos predeterminados", "Edit Memory": "Editar Memoria", "Edit User": "Editar Usuario", - "Edit User Group": "", - "ElevenLabs": "", + "Edit User Group": "Editar grupo de usuarios", + "ElevenLabs": "ElevenLabs", "Email": "Email", - "Embark on adventures": "", + "Embark on adventures": "Emprende aventuras", "Embedding Batch Size": "Tamaño de Embedding", "Embedding Model": "Modelo de Embedding", "Embedding Model Engine": "Motor de Modelo de Embedding", "Embedding model set to \"{{embedding_model}}\"": "Modelo de Embedding configurado a \"{{embedding_model}}\"", - "Enable API Key": "", - "Enable autocomplete generation for chat messages": "", + "Enable API Key": "Habilitar clave de API", + "Enable autocomplete generation for chat messages": "Habilitar generación de autocompletado para mensajes de chat", "Enable Community Sharing": "Habilitar el uso compartido de la comunidad", - "Enable Google Drive": "", - "Enable Memory Locking (mlock) to prevent model data from being swapped out of RAM. This option locks the model's working set of pages into RAM, ensuring that they will not be swapped out to disk. This can help maintain performance by avoiding page faults and ensuring fast data access.": "", - "Enable Memory Mapping (mmap) to load model data. This option allows the system to use disk storage as an extension of RAM by treating disk files as if they were in RAM. This can improve model performance by allowing for faster data access. However, it may not work correctly with all systems and can consume a significant amount of disk space.": "", + "Enable Google Drive": "Habilitar Google Drive", + "Enable Memory Locking (mlock) to prevent model data from being swapped out of RAM. This option locks the model's working set of pages into RAM, ensuring that they will not be swapped out to disk. This can help maintain performance by avoiding page faults and ensuring fast data access.": "Habilitar bloqueo de memoria (mlock) para evitar que los datos del modelo se intercambien fuera de la RAM. Esta opción bloquea el conjunto de páginas de trabajo del modelo en la RAM, asegurando que no se intercambiarán fuera del disco. Esto puede ayudar a mantener el rendimiento evitando fallos de página y asegurando un acceso rápido a los datos.", + "Enable Memory Mapping (mmap) to load model data. This option allows the system to use disk storage as an extension of RAM by treating disk files as if they were in RAM. This can improve model performance by allowing for faster data access. However, it may not work correctly with all systems and can consume a significant amount of disk space.": "Habilitar asignación de memoria (mmap) para cargar datos del modelo. Esta opción permite al sistema usar el almacenamiento en disco como una extensión de la RAM al tratar los archivos en disco como si estuvieran en la RAM. Esto puede mejorar el rendimiento del modelo permitiendo un acceso más rápido a los datos. Sin embargo, puede no funcionar correctamente con todos los sistemas y puede consumir una cantidad significativa de espacio en disco.", "Enable Message Rating": "Habilitar la calificación de los mensajes", - "Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "", + "Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "Habilitar muestreo Mirostat para controlar la perplejidad. (Predeterminado: 0, 0 = Deshabilitado, 1 = Mirostat, 2 = Mirostat 2.0)", "Enable New Sign Ups": "Habilitar Nuevos Registros", "Enable Web Search": "Habilitar la búsqueda web", "Enabled": "Activado", @@ -339,99 +339,99 @@ "Enter {{role}} message here": "Ingrese el mensaje {{role}} aquí", "Enter a detail about yourself for your LLMs to recall": "Ingrese un detalle sobre usted para que sus LLMs recuerden", "Enter api auth string (e.g. username:password)": "Ingrese la cadena de autorización de api (p.ej., nombre:contraseña)", - "Enter Application DN": "", - "Enter Application DN Password": "", - "Enter Bing Search V7 Endpoint": "", - "Enter Bing Search V7 Subscription Key": "", + "Enter Application DN": "Ingrese la DN de la aplicación", + "Enter Application DN Password": "Ingrese la contraseña de la DN de la aplicación", + "Enter Bing Search V7 Endpoint": "Ingrese el endpoint de Bing Search V7", + "Enter Bing Search V7 Subscription Key": "Ingrese la clave de suscripción de Bing Search V7", "Enter Brave Search API Key": "Ingresa la clave de API de Brave Search", - "Enter certificate path": "", + "Enter certificate path": "Ingrese la ruta del certificado", "Enter CFG Scale (e.g. 7.0)": "Ingresa la escala de CFG (p.ej., 7.0)", "Enter Chunk Overlap": "Ingresar superposición de fragmentos", "Enter Chunk Size": "Ingrese el tamaño del fragmento", - "Enter description": "", - "Enter Exa API Key": "", + "Enter description": "Ingrese la descripción", + "Enter Exa API Key": "Ingrese la clave API de Exa", "Enter Github Raw URL": "Ingresa la URL sin procesar de Github", "Enter Google PSE API Key": "Ingrese la clave API de Google PSE", "Enter Google PSE Engine Id": "Introduzca el ID del motor PSE de Google", "Enter Image Size (e.g. 512x512)": "Ingrese el tamaño de la imagen (p.ej. 512x512)", - "Enter Jina API Key": "", - "Enter Kagi Search API Key": "", + "Enter Jina API Key": "Ingrese la clave API de Jina", + "Enter Kagi Search API Key": "Ingrese la clave API de Kagi Search", "Enter language codes": "Ingrese códigos de idioma", "Enter Model ID": "Ingresa el ID del modelo", "Enter model tag (e.g. {{modelTag}})": "Ingrese la etiqueta del modelo (p.ej. {{modelTag}})", - "Enter Mojeek Search API Key": "", + "Enter Mojeek Search API Key": "Ingrese la clave API de Mojeek Search", "Enter Number of Steps (e.g. 50)": "Ingrese el número de pasos (p.ej., 50)", - "Enter proxy URL (e.g. https://user:password@host:port)": "", - "Enter reasoning effort": "", + "Enter proxy URL (e.g. https://user:password@host:port)": "Ingrese la URL del proxy (p.ej. https://user:password@host:port)", + "Enter reasoning effort": "Ingrese el esfuerzo de razonamiento", "Enter Sampler (e.g. Euler a)": "Ingrese el sampler (p.ej., Euler a)", "Enter Scheduler (e.g. Karras)": "Ingrese el planificador (p.ej., Karras)", "Enter Score": "Ingrese la puntuación", "Enter SearchApi API Key": "Ingrese la Clave API de SearchApi", "Enter SearchApi Engine": "Ingrese el motor de SearchApi", "Enter Searxng Query URL": "Introduzca la URL de consulta de Searxng", - "Enter Seed": "", + "Enter Seed": "Ingrese la semilla", "Enter Serper API Key": "Ingrese la clave API de Serper", "Enter Serply API Key": "Ingrese la clave API de Serply", "Enter Serpstack API Key": "Ingrese la clave API de Serpstack", - "Enter server host": "", - "Enter server label": "", - "Enter server port": "", + "Enter server host": "Ingrese el host del servidor", + "Enter server label": "Ingrese la etiqueta del servidor", + "Enter server port": "Ingrese el puerto del servidor", "Enter stop sequence": "Ingrese la secuencia de parada", "Enter system prompt": "Ingrese el prompt del sistema", "Enter Tavily API Key": "Ingrese la clave API de Tavily", - "Enter the public URL of your WebUI. This URL will be used to generate links in the notifications.": "", + "Enter the public URL of your WebUI. This URL will be used to generate links in the notifications.": "Ingrese la URL pública de su WebUI. Esta URL se utilizará para generar enlaces en las notificaciones.", "Enter Tika Server URL": "Ingrese la URL del servidor Tika", "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)": "Ingrese la URL (p.ej., http://localhost:11434)", - "Enter your current password": "", + "Enter your current password": "Ingrese su contraseña actual", "Enter Your Email": "Ingrese su correo electrónico", "Enter Your Full Name": "Ingrese su nombre completo", "Enter your message": "Ingrese su mensaje", - "Enter your new password": "", + "Enter your new password": "Ingrese su nueva contraseña", "Enter Your Password": "Ingrese su contraseña", "Enter Your Role": "Ingrese su rol", - "Enter Your Username": "", - "Enter your webhook URL": "", + "Enter Your Username": "Ingrese su nombre de usuario", + "Enter your webhook URL": "Ingrese su URL de webhook", "Error": "Error", - "ERROR": "", - "Error accessing Google Drive: {{error}}": "", - "Error uploading file: {{error}}": "", - "Evaluations": "", - "Exa API Key": "", - "Example: (&(objectClass=inetOrgPerson)(uid=%s))": "", - "Example: ALL": "", - "Example: mail": "", - "Example: ou=users,dc=foo,dc=example": "", - "Example: sAMAccountName or uid or userPrincipalName": "", - "Exclude": "", - "Execute code for analysis": "", + "ERROR": "ERROR", + "Error accessing Google Drive: {{error}}": "Error al acceder a Google Drive: {{error}}", + "Error uploading file: {{error}}": "Error al subir el archivo: {{error}}", + "Evaluations": "Evaluaciones", + "Exa API Key": "Clave API de Exa", + "Example: (&(objectClass=inetOrgPerson)(uid=%s))": "Ejemplo: (&(objectClass=inetOrgPerson)(uid=%s))", + "Example: ALL": "Ejemplo: TODOS", + "Example: mail": "Ejemplo: correo", + "Example: ou=users,dc=foo,dc=example": "Ejemplo: ou=usuarios,dc=foo,dc=ejemplo", + "Example: sAMAccountName or uid or userPrincipalName": "Ejemplo: sAMAccountName o uid o userPrincipalName", + "Exclude": "Excluir", + "Execute code for analysis": "Ejecutar código para análisis", "Experimental": "Experimental", - "Explore the cosmos": "", + "Explore the cosmos": "Explora el cosmos", "Export": "Exportar", - "Export All Archived Chats": "", + "Export All Archived Chats": "Exportar todos los chats archivados", "Export All Chats (All Users)": "Exportar todos los chats (Todos los usuarios)", "Export chat (.json)": "Exportar chat (.json)", "Export Chats": "Exportar Chats", - "Export Config to JSON File": "", + "Export Config to JSON File": "Exportar configuración a archivo JSON", "Export Functions": "Exportar Funciones", "Export Models": "Exportar Modelos", - "Export Presets": "", + "Export Presets": "Exportar ajustes preestablecidos", "Export Prompts": "Exportar Prompts", - "Export to CSV": "", + "Export to CSV": "Exportar a CSV", "Export Tools": "Exportar Herramientas", "External Models": "Modelos Externos", - "Failed to add file.": "", + "Failed to add file.": "No se pudo agregar el archivo.", "Failed to create API Key.": "No se pudo crear la clave API.", - "Failed to fetch models": "", + "Failed to fetch models": "No se pudieron obtener los modelos", "Failed to read clipboard contents": "No se pudo leer el contenido del portapapeles", - "Failed to save models configuration": "", + "Failed to save models configuration": "No se pudo guardar la configuración de los modelos", "Failed to update settings": "Falla al actualizar los ajustes", "Failed to upload file.": "Falla al subir el archivo.", - "Features Permissions": "", + "Features Permissions": "Permisos de características", "February": "Febrero", - "Feedback History": "", - "Feedbacks": "", + "Feedback History": "Historial de retroalimentación", + "Feedbacks": "Retroalimentaciones", "Feel free to add specific details": "Libre de agregar detalles específicos", "File": "Archivo", "File added successfully.": "Archivo agregado correctamente.", @@ -440,7 +440,7 @@ "File not found.": "Archivo no encontrado.", "File removed successfully.": "Archivo eliminado correctamente.", "File size should not exceed {{maxSize}} MB.": "Tamaño del archivo no debe exceder {{maxSize}} MB.", - "File uploaded successfully": "", + "File uploaded successfully": "Archivo subido correctamente", "Files": "Archivos", "Filter is now globally disabled": "El filtro ahora está desactivado globalmente", "Filter is now globally enabled": "El filtro ahora está habilitado globalmente", @@ -448,24 +448,24 @@ "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Se detectó suplantación de huellas: No se pueden usar las iniciales como avatar. Por defecto se utiliza la imagen de perfil predeterminada.", "Fluidly stream large external response chunks": "Transmita con fluidez grandes fragmentos de respuesta externa", "Focus chat input": "Enfoca la entrada del chat", - "Folder deleted successfully": "", - "Folder name cannot be empty": "", - "Folder name cannot be empty.": "", - "Folder name updated successfully": "", + "Folder deleted successfully": "Carpeta eliminada correctamente", + "Folder name cannot be empty": "El nombre de la carpeta no puede estar vacío", + "Folder name cannot be empty.": "El nombre de la carpeta no puede estar vacío", + "Folder name updated successfully": "Nombre de la carpeta actualizado correctamente", "Followed instructions perfectly": "Siguió las instrucciones perfectamente", - "Forge new paths": "", + "Forge new paths": "Forja nuevos caminos", "Form": "De", - "Format your variables using brackets like this:": "", + "Format your variables using brackets like this:": "Formatea tus variables usando corchetes así:", "Frequency Penalty": "Penalización de frecuencia", - "Function": "", - "Function Calling": "", + "Function": "Función", + "Function Calling": "Llamada de función", "Function created successfully": "Función creada exitosamente", "Function deleted successfully": "Función borrada exitosamente", - "Function Description": "", - "Function ID": "", + "Function Description": "Descripción de la función", + "Function ID": "ID de la función", "Function is now globally disabled": "La función ahora está desactivada globalmente", "Function is now globally enabled": "La función está habilitada globalmente", - "Function Name": "", + "Function Name": "Nombre de la función", "Function updated successfully": "Función actualizada exitosamente", "Functions": "Funciones", "Functions allow arbitrary code execution": "Funciones habilitan la ejecución de código arbitrario", @@ -473,68 +473,68 @@ "Functions imported successfully": "Funciones importadas exitosamente", "General": "General", "General Settings": "Opciones Generales", - "Generate an image": "", + "Generate an image": "Generar una imagen", "Generate Image": "Generar imagen", "Generating search query": "Generación de consultas de búsqueda", - "Get started": "", - "Get started with {{WEBUI_NAME}}": "", + "Get started": "Empezar", + "Get started with {{WEBUI_NAME}}": "Empezar con {{WEBUI_NAME}}", "Global": "Global", "Good Response": "Buena Respuesta", - "Google Drive": "", + "Google Drive": "Google Drive", "Google PSE API Key": "Clave API de Google PSE", "Google PSE Engine Id": "ID del motor PSE de Google", - "Group created successfully": "", - "Group deleted successfully": "", - "Group Description": "", - "Group Name": "", - "Group updated successfully": "", - "Groups": "", + "Group created successfully": "Grupo creado correctamente", + "Group deleted successfully": "Grupo eliminado correctamente", + "Group Description": "Descripción del grupo", + "Group Name": "Nombre del grupo", + "Group updated successfully": "Grupo actualizado correctamente", + "Groups": "Grupos", "Haptic Feedback": "Retroalimentación háptica", "has no conversations.": "no tiene conversaciones.", "Hello, {{name}}": "Hola, {{name}}", "Help": "Ayuda", - "Help us create the best community leaderboard by sharing your feedback history!": "", - "Hex Color": "", - "Hex Color - Leave empty for default color": "", + "Help us create the best community leaderboard by sharing your feedback history!": "¡Ayúdanos a crear el mejor tablero de líderes de la comunidad compartiendo tu historial de retroalimentación!", + "Hex Color": "Color Hex", + "Hex Color - Leave empty for default color": "Color Hex - Deja vacío para el color predeterminado", "Hide": "Esconder", - "Host": "", + "Host": "Host", "How can I help you today?": "¿Cómo puedo ayudarte hoy?", - "How would you rate this response?": "", + "How would you rate this response?": "¿Cómo calificarías esta respuesta?", "Hybrid Search": "Búsqueda Híbrida", "I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Aseguro que he leído y entiendo las implicaciones de mi acción. Estoy consciente de los riesgos asociados con la ejecución de código arbitrario y he verificado la confianza de la fuente.", - "ID": "", - "Ignite curiosity": "", - "Image": "", - "Image Compression": "", - "Image Generation": "", + "ID": "ID", + "Ignite curiosity": "Encender la curiosidad", + "Image": "Imagen", + "Image Compression": "Compresión de imagen", + "Image Generation": "Generación de imágenes", "Image Generation (Experimental)": "Generación de imágenes (experimental)", "Image Generation Engine": "Motor de generación de imágenes", - "Image Max Compression Size": "", - "Image Prompt Generation": "", - "Image Prompt Generation Prompt": "", + "Image Max Compression Size": "Tamaño máximo de compresión de imagen", + "Image Prompt Generation": "Generación de prompt de imagen", + "Image Prompt Generation Prompt": "Prompt de generación de prompt de imagen", "Image Settings": "Ajustes de la Imágen", "Images": "Imágenes", "Import Chats": "Importar chats", - "Import Config from JSON File": "", + "Import Config from JSON File": "Importar configuración desde archivo JSON", "Import Functions": "Importar Funciones", "Import Models": "Importar modelos", - "Import Presets": "", + "Import Presets": "Importar ajustes preestablecidos", "Import Prompts": "Importar Prompts", "Import Tools": "Importar Herramientas", - "Include": "", + "Include": "Incluir", "Include `--api-auth` flag when running stable-diffusion-webui": "Incluir el indicador `--api-auth` al ejecutar stable-diffusion-webui", "Include `--api` flag when running stable-diffusion-webui": "Incluir el indicador `--api` al ejecutar stable-diffusion-webui", - "Influences how quickly the algorithm responds to feedback from the generated text. A lower learning rate will result in slower adjustments, while a higher learning rate will make the algorithm more responsive. (Default: 0.1)": "", + "Influences how quickly the algorithm responds to feedback from the generated text. A lower learning rate will result in slower adjustments, while a higher learning rate will make the algorithm more responsive. (Default: 0.1)": "Influencia en qué medida el algoritmo responde rápidamente a la retroalimentación del texto generado. Una tasa de aprendizaje más baja resultará en ajustes más lentos, mientras que una tasa de aprendizaje más alta hará que el algoritmo sea más receptivo. (Predeterminado: 0.1)", "Info": "Información", "Input commands": "Ingresar comandos", "Install from Github URL": "Instalar desde la URL de Github", "Instant Auto-Send After Voice Transcription": "Auto-Enviar Después de la Transcripción de Voz", "Interface": "Interfaz", - "Invalid file format.": "", + "Invalid file format.": "Formato de archivo inválido.", "Invalid Tag": "Etiqueta Inválida", - "is typing...": "", + "is typing...": "está escribiendo...", "January": "Enero", - "Jina API Key": "", + "Jina API Key": "Clave API de Jina", "join our Discord for help.": "Únase a nuestro Discord para obtener ayuda.", "JSON": "JSON", "JSON Preview": "Vista previa de JSON", @@ -542,47 +542,47 @@ "June": "Junio", "JWT Expiration": "Expiración del JWT", "JWT Token": "Token JWT", - "Kagi Search API Key": "", + "Kagi Search API Key": "Clave API de Kagi Search", "Keep Alive": "Mantener Vivo", - "Key": "", + "Key": "Clave", "Keyboard shortcuts": "Atajos de teclado", "Knowledge": "Conocimiento", - "Knowledge Access": "", + "Knowledge Access": "Acceso al conocimiento", "Knowledge created successfully.": "Conocimiento creado exitosamente.", "Knowledge deleted successfully.": "Conocimiento eliminado exitosamente.", "Knowledge reset successfully.": "Conocimiento restablecido exitosamente.", "Knowledge updated successfully": "Conocimiento actualizado exitosamente.", - "Label": "", + "Label": "Etiqueta", "Landing Page Mode": "Modo de Página de Inicio", "Language": "Lenguaje", "Last Active": "Última Actividad", "Last Modified": "Modificado por última vez", - "Last reply": "", - "LDAP": "", - "LDAP server updated": "", - "Leaderboard": "", + "Last reply": "Última respuesta", + "LDAP": "LDAP", + "LDAP server updated": "Servidor LDAP actualizado", + "Leaderboard": "Tablero de líderes", "Leave empty for unlimited": "Deje vacío para ilimitado", - "Leave empty to include all models from \"{{URL}}/api/tags\" endpoint": "", - "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", - "Leave empty to include all models or select specific models": "", + "Leave empty to include all models from \"{{URL}}/api/tags\" endpoint": "Deje vacío para incluir todos los modelos desde el endpoint \"{{URL}}/api/tags\"", + "Leave empty to include all models from \"{{URL}}/models\" endpoint": "Deje vacío para incluir todos los modelos desde el endpoint \"{{URL}}/models\"", + "Leave empty to include all models or select specific models": "Deje vacío para incluir todos los modelos o seleccione modelos específicos", "Leave empty to use the default prompt, or enter a custom prompt": "Deje vacío para usar el propmt predeterminado, o ingrese un propmt personalizado", "Light": "Claro", "Listening...": "Escuchando...", - "Llama.cpp": "", + "Llama.cpp": "Llama.cpp", "LLMs can make mistakes. Verify important information.": "Los LLM pueden cometer errores. Verifica la información importante.", - "Local": "", + "Local": "Local", "Local Models": "Modelos locales", - "Lost": "", + "Lost": "Perdido", "LTR": "LTR", "Made by OpenWebUI Community": "Hecho por la comunidad de OpenWebUI", "Make sure to enclose them with": "Asegúrese de adjuntarlos con", "Make sure to export a workflow.json file as API format from ComfyUI.": "Asegúrese de exportar un archivo workflow.json en formato API desde ComfyUI.", "Manage": "Gestionar", - "Manage Arena Models": "", - "Manage Models": "", - "Manage Ollama": "", - "Manage Ollama API Connections": "", - "Manage OpenAI API Connections": "", + "Manage Arena Models": "Gestionar modelos de Arena", + "Manage Models": "Gestionar modelos", + "Manage Ollama": "Gestionar Ollama", + "Manage Ollama API Connections": "Gestionar conexiones API de Ollama", + "Manage OpenAI API Connections": "Gestionar conexiones API de OpenAI", "Manage Pipelines": "Administrar Pipelines", "March": "Marzo", "Max Tokens (num_predict)": "Máximo de fichas (num_predict)", @@ -597,14 +597,14 @@ "Memory deleted successfully": "Memoria borrada correctamente", "Memory updated successfully": "Memoria actualizada correctamente", "Merge Responses": "Fusionar Respuestas", - "Message rating should be enabled to use this feature": "", + "Message rating should be enabled to use this feature": "La calificación de mensajes debe estar habilitada para usar esta función", "Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Los mensajes que envíe después de crear su enlace no se compartirán. Los usuarios con el enlace podrán ver el chat compartido.", - "Min P": "", + "Min P": "Min P", "Minimum Score": "Puntuación mínima", "Mirostat": "Mirostat", "Mirostat Eta": "Mirostat Eta", "Mirostat Tau": "Mirostat Tau", - "Model": "", + "Model": "Modelo", "Model '{{modelName}}' has been successfully downloaded.": "El modelo '{{modelName}}' se ha descargado correctamente.", "Model '{{modelTag}}' is already in queue for downloading.": "El modelo '{{modelTag}}' ya está en cola para descargar.", "Model {{modelId}} not found": "El modelo {{modelId}} no fue encontrado", @@ -613,56 +613,56 @@ "Model accepts image inputs": "El modelo acepta entradas de imagenes", "Model created successfully!": "Modelo creado correctamente!", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Se detectó la ruta del sistema de archivos del modelo. Se requiere el nombre corto del modelo para la actualización, no se puede continuar.", - "Model Filtering": "", + "Model Filtering": "Filtrado de modelos", "Model ID": "ID del modelo", - "Model IDs": "", - "Model Name": "", + "Model IDs": "IDs de modelos", + "Model Name": "Nombre del modelo", "Model not selected": "Modelo no seleccionado", "Model Params": "Parámetros del modelo", - "Model Permissions": "", + "Model Permissions": "Permisos del modelo", "Model updated successfully": "Modelo actualizado correctamente", "Modelfile Content": "Contenido del Modelfile", "Models": "Modelos", - "Models Access": "", - "Models configuration saved successfully": "", - "Mojeek Search API Key": "", - "more": "", + "Models Access": "Acceso a modelos", + "Models configuration saved successfully": "Configuración de modelos guardada correctamente", + "Mojeek Search API Key": "Clave API de Mojeek Search", + "more": "más", "More": "Más", "Name": "Nombre", - "Name your knowledge base": "", - "Native": "", + "Name your knowledge base": "Nombra tu base de conocimientos", + "Native": "Nativo", "New Chat": "Nuevo Chat", - "New Folder": "", + "New Folder": "Nueva carpeta", "New Password": "Nueva Contraseña", - "new-channel": "", - "No content found": "", + "new-channel": "nuevo-canal", + "No content found": "No se encontró contenido", "No content to speak": "No hay contenido para hablar", - "No distance available": "", - "No feedbacks found": "", + "No distance available": "No hay distancia disponible", + "No feedbacks found": "No se encontraron retroalimentaciones", "No file selected": "Ningún archivo fué seleccionado", - "No files found.": "", - "No groups with access, add a group to grant access": "", + "No files found.": "No se encontraron archivos.", + "No groups with access, add a group to grant access": "No hay grupos con acceso, agrega un grupo para otorgar acceso", "No HTML, CSS, or JavaScript content found.": "No se encontró contenido HTML, CSS, o JavaScript.", - "No inference engine with management support found": "", + "No inference engine with management support found": "No se encontró un motor de inferencia con soporte de gestión", "No knowledge found": "No se encontró ningún conocimiento", - "No model IDs": "", - "No models found": "", - "No models selected": "", + "No model IDs": "No hay IDs de modelos", + "No models found": "No se encontraron modelos", + "No models selected": "No se seleccionaron modelos", "No results found": "No se han encontrado resultados", "No search query generated": "No se ha generado ninguna consulta de búsqueda", "No source available": "No hay fuente disponible", - "No users were found.": "", - "No valves to update": "No valves para actualizar", + "No users were found.": "No se encontraron usuarios.", + "No valves to update": "No hay válvulas para actualizar", "None": "Ninguno", "Not factually correct": "No es correcto en todos los aspectos", - "Not helpful": "", + "Not helpful": "No útil", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Nota: Si estableces una puntuación mínima, la búsqueda sólo devolverá documentos con una puntuación mayor o igual a la puntuación mínima.", - "Notes": "", - "Notification Sound": "", - "Notification Webhook": "", + "Notes": "Notas", + "Notification Sound": "Sonido de notificación", + "Notification Webhook": "Webhook de notificación", "Notifications": "Notificaciones", "November": "Noviembre", - "num_gpu (Ollama)": "", + "num_gpu (Ollama)": "num_gpu (Ollama)", "num_thread (Ollama)": "num_thread (Ollama)", "OAuth ID": "OAuth ID", "October": "Octubre", @@ -671,49 +671,49 @@ "OLED Dark": "OLED oscuro", "Ollama": "Ollama", "Ollama API": "Ollama API", - "Ollama API settings updated": "", + "Ollama API settings updated": "Configuración de Ollama API actualizada", "Ollama Version": "Versión de Ollama", "On": "Activado", - "Only alphanumeric characters and hyphens are allowed": "", + "Only alphanumeric characters and hyphens are allowed": "Sólo se permiten caracteres alfanuméricos y guiones", "Only alphanumeric characters and hyphens are allowed in the command string.": "Sólo se permiten caracteres alfanuméricos y guiones en la cadena de comando.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Solo se pueden editar las colecciones, crear una nueva base de conocimientos para editar / añadir documentos", - "Only select users and groups with permission can access": "", + "Only select users and groups with permission can access": "Solo los usuarios y grupos con permiso pueden acceder", "Oops! Looks like the URL is invalid. Please double-check and try again.": "¡Ups! Parece que la URL no es válida. Vuelva a verificar e inténtelo nuevamente.", - "Oops! There are files still uploading. Please wait for the upload to complete.": "", - "Oops! There was an error in the previous response.": "", + "Oops! There are files still uploading. Please wait for the upload to complete.": "¡Ups! Todavía hay archivos subiendo. Por favor, espere a que la subida se complete.", + "Oops! There was an error in the previous response.": "¡Ups! Hubo un error en la respuesta anterior.", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "¡Ups! Estás utilizando un método no compatible (solo frontend). Por favor ejecute la WebUI desde el backend.", "Open file": "Abrir archivo", "Open in full screen": "Abrir en pantalla completa", "Open new chat": "Abrir nuevo chat", - "Open WebUI uses faster-whisper internally.": "", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "Open WebUI uses faster-whisper internally.": "Open WebUI usa faster-whisper internamente.", + "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI usa SpeechT5 y embeddings de locutores CMU Arctic.", "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "La versión de Open WebUI (v{{OPEN_WEBUI_VERSION}}) es inferior a la versión requerida (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", - "OpenAI API Config": "OpenAI API Config", + "OpenAI API Config": "Configuración de OpenAI API", "OpenAI API Key is required.": "La Clave de la API de OpenAI es requerida.", - "OpenAI API settings updated": "", + "OpenAI API settings updated": "Configuración de OpenAI API actualizada", "OpenAI URL/Key required.": "URL/Clave de OpenAI es requerida.", "or": "o", - "Organize your users": "", + "Organize your users": "Organiza tus usuarios", "Other": "Otro", - "OUTPUT": "", + "OUTPUT": "SALIDA", "Output format": "Formato de salida", "Overview": "Vista general", "page": "página", "Password": "Contraseña", - "Paste Large Text as File": "", - "PDF document (.pdf)": "PDF document (.pdf)", + "Paste Large Text as File": "Pegar texto grande como archivo", + "PDF document (.pdf)": "Documento PDF (.pdf)", "PDF Extract Images (OCR)": "Extraer imágenes de PDF (OCR)", "pending": "pendiente", "Permission denied when accessing media devices": "Permiso denegado al acceder a los dispositivos", "Permission denied when accessing microphone": "Permiso denegado al acceder a la micrófono", "Permission denied when accessing microphone: {{error}}": "Permiso denegado al acceder al micrófono: {{error}}", - "Permissions": "", + "Permissions": "Permisos", "Personalization": "Personalización", "Pin": "Fijar", "Pinned": "Fijado", - "Pioneer insights": "", + "Pioneer insights": "Descubrir nuevas perspectivas", "Pipeline deleted successfully": "Pipeline borrada exitosamente", "Pipeline downloaded successfully": "Pipeline descargada exitosamente", "Pipelines": "Pipelines", @@ -722,67 +722,67 @@ "Plain text (.txt)": "Texto plano (.txt)", "Playground": "Patio de juegos", "Please carefully review the following warnings:": "Por favor revise con cuidado los siguientes avisos:", - "Please enter a prompt": "", + "Please enter a prompt": "Por favor ingrese un prompt", "Please fill in all fields.": "Por favor llene todos los campos.", - "Please select a model first.": "", - "Please select a model.": "", + "Please select a model first.": "Por favor seleccione un modelo primero.", + "Please select a model.": "Por favor seleccione un modelo.", "Please select a reason": "Por favor seleccione una razón", - "Port": "", + "Port": "Puerto", "Positive attitude": "Actitud positiva", - "Prefix ID": "", - "Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "", + "Prefix ID": "ID de prefijo", + "Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "El ID de prefijo se utiliza para evitar conflictos con otras conexiones añadiendo un prefijo a los IDs de los modelos - deje vacío para deshabilitar", "Previous 30 days": "Últimos 30 días", "Previous 7 days": "Últimos 7 días", "Profile Image": "Imagen de perfil", - "Prompt": "", + "Prompt": "Prompt", "Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Prompt (por ejemplo, cuéntame una cosa divertida sobre el Imperio Romano)", "Prompt Content": "Contenido del Prompt", - "Prompt created successfully": "", + "Prompt created successfully": "Prompt creado exitosamente", "Prompt suggestions": "Sugerencias de Prompts", - "Prompt updated successfully": "", + "Prompt updated successfully": "Prompt actualizado exitosamente", "Prompts": "Prompts", - "Prompts Access": "", - "Proxy URL": "", + "Prompts Access": "Acceso a Prompts", + "Proxy URL": "URL del proxy", "Pull \"{{searchValue}}\" from Ollama.com": "Extraer \"{{searchValue}}\" de Ollama.com", "Pull a model from Ollama.com": "Obtener un modelo de Ollama.com", - "Query Generation Prompt": "", + "Query Generation Prompt": "Prompt de generación de consulta", "Query Params": "Parámetros de consulta", "RAG Template": "Plantilla de RAG", - "Rating": "", - "Re-rank models by topic similarity": "", - "Read": "", - "Read Aloud": "Leer al oído", - "Reasoning Effort": "", + "Rating": "Calificación", + "Re-rank models by topic similarity": "Re-clasificar modelos por similitud de tema", + "Read": "Leer", + "Read Aloud": "Leer en voz alta", + "Reasoning Effort": "Esfuerzo de razonamiento", "Record voice": "Grabar voz", "Redirecting you to OpenWebUI Community": "Redireccionándote a la comunidad OpenWebUI", - "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative. (Default: 40)": "", + "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative. (Default: 40)": "Reduce la probabilidad de generar tonterías. Un valor más alto (p.ej. 100) dará respuestas más diversas, mientras que un valor más bajo (p.ej. 10) será más conservador. (Predeterminado: 40)", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Referirse a usted mismo como \"Usuario\" (por ejemplo, \"El usuario está aprendiendo Español\")", - "References from": "", + "References from": "Referencias de", "Refused when it shouldn't have": "Rechazado cuando no debería", "Regenerate": "Regenerar", "Release Notes": "Notas de la versión", - "Relevance": "", + "Relevance": "Relevancia", "Remove": "Eliminar", "Remove Model": "Eliminar modelo", "Rename": "Renombrar", - "Reorder Models": "", + "Reorder Models": "Reordenar modelos", "Repeat Last N": "Repetir las últimas N", - "Reply in Thread": "", + "Reply in Thread": "Responder en el hilo", "Request Mode": "Modo de petición", "Reranking Model": "Modelo de reranking", "Reranking model disabled": "Modelo de reranking deshabilitado", "Reranking model set to \"{{reranking_model}}\"": "Modelo de reranking establecido en \"{{reranking_model}}\"", "Reset": "Reiniciar", - "Reset All Models": "", + "Reset All Models": "Reiniciar todos los modelos", "Reset Upload Directory": "Reiniciar Directorio de carga", - "Reset Vector Storage/Knowledge": "", - "Reset view": "", + "Reset Vector Storage/Knowledge": "Reiniciar almacenamiento de vectores/conocimiento", + "Reset view": "Reiniciar vista", "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Las notificaciones de respuesta no pueden activarse debido a que los permisos del sitio web han sido denegados. Por favor, visite las configuraciones de su navegador para otorgar el acceso necesario.", "Response splitting": "División de respuestas", - "Result": "", - "Retrieval Query Generation": "", - "Rich Text Input for Chat": "", - "RK": "", + "Result": "Resultado", + "Retrieval Query Generation": "Generación de consulta de recuperación", + "Rich Text Input for Chat": "Entrada de texto enriquecido para chat", + "RK": "RK", "Role": "Rol", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -799,22 +799,22 @@ "Scroll to bottom when switching between branches": "Moverse a la parte inferior cuando se cambia entre ramas", "Search": "Buscar", "Search a model": "Buscar un modelo", - "Search Base": "", + "Search Base": "Base de búsqueda", "Search Chats": "Chats de búsqueda", "Search Collection": "Buscar Colección", - "Search Filters": "", - "search for tags": "", + "Search Filters": "Filtros de búsqueda", + "search for tags": "buscar etiquetas", "Search Functions": "Buscar Funciones", "Search Knowledge": "Buscar Conocimiento", "Search Models": "Buscar Modelos", - "Search options": "", + "Search options": "Opciones de búsqueda", "Search Prompts": "Buscar Prompts", "Search Result Count": "Recuento de resultados de búsqueda", - "Search the internet": "", + "Search the internet": "Buscar en internet", "Search Tools": "Búsqueda de herramientas", "SearchApi API Key": "Clave API de SearchApi", "SearchApi Engine": "Motor de SearchApi", - "Searched {{count}} sites": "", + "Searched {{count}} sites": "Buscadas {{count}} sitios", "Searching \"{{searchQuery}}\"": "Buscando \"{{searchQuery}}\"", "Searching Knowledge for \"{{searchQuery}}\"": "Buscando Conocimiento para \"{{searchQuery}}\"", "Searxng Query URL": "Searxng URL de consulta", @@ -824,18 +824,18 @@ "Select a base model": "Seleccionar un modelo base", "Select a engine": "Busca un motor", "Select a function": "Busca una función", - "Select a group": "", + "Select a group": "Seleccionar un grupo", "Select a model": "Selecciona un modelo", "Select a pipeline": "Selección de una Pipeline", "Select a pipeline url": "Selección de una dirección URL de Pipeline", "Select a tool": "Busca una herramienta", - "Select an Ollama instance": "", + "Select an Ollama instance": "Seleccionar una instancia de Ollama", "Select Engine": "Selecciona Motor", "Select Knowledge": "Selecciona Conocimiento", "Select model": "Selecciona un modelo", "Select only one model to call": "Selecciona sólo un modelo para llamar", "Selected model(s) do not support image inputs": "Los modelos seleccionados no admiten entradas de imagen", - "Semantic distance to query": "", + "Semantic distance to query": "Distancia semántica a la consulta", "Send": "Enviar", "Send a Message": "Enviar un Mensaje", "Send message": "Enviar Mensaje", @@ -848,7 +848,7 @@ "Set as default": "Establecer por defecto", "Set CFG Scale": "Establecer la escala CFG", "Set Default Model": "Establecer modelo predeterminado", - "Set embedding model": "", + "Set embedding model": "Establecer modelo de embedding", "Set embedding model (e.g. {{model}})": "Establecer modelo de embedding (ej. {{model}})", "Set Image Size": "Establecer tamaño de imagen", "Set reranking model (e.g. {{model}})": "Establecer modelo de reranking (ej. {{model}})", @@ -856,41 +856,41 @@ "Set Scheduler": "Establecer Programador", "Set Steps": "Establecer Pasos", "Set Task Model": "Establecer modelo de tarea", - "Set the number of layers, which will be off-loaded to GPU. Increasing this value can significantly improve performance for models that are optimized for GPU acceleration but may also consume more power and GPU resources.": "", - "Set the number of worker threads used for computation. This option controls how many threads are used to process incoming requests concurrently. Increasing this value can improve performance under high concurrency workloads but may also consume more CPU resources.": "", + "Set the number of layers, which will be off-loaded to GPU. Increasing this value can significantly improve performance for models that are optimized for GPU acceleration but may also consume more power and GPU resources.": "Establece el número de capas que se descargarán en la GPU. Aumentar este valor puede mejorar significativamente el rendimiento de los modelos optimizados para la aceleración de GPU, pero también puede consumir más energía y recursos de GPU.", + "Set the number of worker threads used for computation. This option controls how many threads are used to process incoming requests concurrently. Increasing this value can improve performance under high concurrency workloads but may also consume more CPU resources.": "Establece el número de hilos de trabajo utilizados para el cálculo. Esta opción controla cuántos hilos se utilizan para procesar las solicitudes entrantes simultáneamente. Aumentar este valor puede mejorar el rendimiento bajo cargas de trabajo de alta concurrencia, pero también puede consumir más recursos de CPU.", "Set Voice": "Establecer la voz", - "Set whisper model": "", - "Sets how far back for the model to look back to prevent repetition. (Default: 64, 0 = disabled, -1 = num_ctx)": "", - "Sets how strongly to penalize repetitions. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 0.9) will be more lenient. (Default: 1.1)": "", - "Sets the random number seed to use for generation. Setting this to a specific number will make the model generate the same text for the same prompt. (Default: random)": "", - "Sets the size of the context window used to generate the next token. (Default: 2048)": "", - "Sets the stop sequences to use. When this pattern is encountered, the LLM will stop generating text and return. Multiple stop patterns may be set by specifying multiple separate stop parameters in a modelfile.": "", + "Set whisper model": "Establecer modelo de whisper", + "Sets how far back for the model to look back to prevent repetition. (Default: 64, 0 = disabled, -1 = num_ctx)": "Establece cuán lejos atrás debe mirar el modelo para evitar la repetición. (Predeterminado: 64, 0 = deshabilitado, -1 = num_ctx)", + "Sets how strongly to penalize repetitions. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 0.9) will be more lenient. (Default: 1.1)": "Establece cuán fuertemente penalizar las repeticiones. Un valor más alto (p.ej., 1.5) penalizará más fuertemente las repeticiones, mientras que un valor más bajo (p.ej., 0.9) será más permisivo. (Predeterminado: 1.1)", + "Sets the random number seed to use for generation. Setting this to a specific number will make the model generate the same text for the same prompt. (Default: random)": "Establece la semilla de número aleatorio a usar para la generación. Establecer esto en un número específico hará que el modelo genere el mismo texto para el mismo prompt. (Predeterminado: aleatorio)", + "Sets the size of the context window used to generate the next token. (Default: 2048)": "Establece el tamaño de la ventana de contexto utilizada para generar el siguiente token. (Predeterminado: 2048)", + "Sets the stop sequences to use. When this pattern is encountered, the LLM will stop generating text and return. Multiple stop patterns may be set by specifying multiple separate stop parameters in a modelfile.": "Establece las secuencias de parada a usar. Cuando se encuentre este patrón, el LLM dejará de generar texto y devolverá. Se pueden establecer varios patrones de parada especificando múltiples parámetros de parada separados en un archivo de modelo.", "Settings": "Configuración", "Settings saved successfully!": "¡Configuración guardada con éxito!", "Share": "Compartir", "Share Chat": "Compartir Chat", "Share to OpenWebUI Community": "Compartir con la comunidad OpenWebUI", "Show": "Mostrar", - "Show \"What's New\" modal on login": "", + "Show \"What's New\" modal on login": "Mostrar modal \"Qué hay de nuevo\" al iniciar sesión", "Show Admin Details in Account Pending Overlay": "Mostrar detalles de administración en la capa de espera de la cuenta", "Show shortcuts": "Mostrar atajos", "Show your support!": "¡Muestra tu apoyo!", "Showcased creativity": "Creatividad mostrada", "Sign in": "Iniciar sesión", "Sign in to {{WEBUI_NAME}}": "Iniciar sesión en {{WEBUI_NAME}}", - "Sign in to {{WEBUI_NAME}} with LDAP": "", + "Sign in to {{WEBUI_NAME}} with LDAP": "Iniciar sesión en {{WEBUI_NAME}} con LDAP", "Sign Out": "Cerrar sesión", "Sign up": "Crear una cuenta", "Sign up to {{WEBUI_NAME}}": "Crear una cuenta en {{WEBUI_NAME}}", "Signing in to {{WEBUI_NAME}}": "Iniciando sesión en {{WEBUI_NAME}}", - "sk-1234": "", + "sk-1234": "sk-1234", "Source": "Fuente", "Speech Playback Speed": "Velocidad de reproducción de voz", "Speech recognition error: {{error}}": "Error de reconocimiento de voz: {{error}}", "Speech-to-Text Engine": "Motor de voz a texto", - "Stop": "", + "Stop": "Detener", "Stop Sequence": "Detener secuencia", - "Stream Chat Response": "", + "Stream Chat Response": "Transmitir respuesta de chat", "STT Model": "Modelo STT", "STT Settings": "Configuraciones de STT", "Subtitle (e.g. about the Roman Empire)": "Subtítulo (por ejemplo, sobre el Imperio Romano)", @@ -901,113 +901,113 @@ "Support this plugin:": "Brinda soporte a este plugin:", "Sync directory": "Sincroniza directorio", "System": "Sistema", - "System Instructions": "", + "System Instructions": "Instrucciones del sistema", "System Prompt": "Prompt del sistema", - "Tags Generation": "", - "Tags Generation Prompt": "", - "Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "", + "Tags Generation": "Generación de etiquetas", + "Tags Generation Prompt": "Prompt de generación de etiquetas", + "Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "El muestreo libre de cola se utiliza para reducir el impacto de los tokens menos probables en la salida. Un valor más alto (p.ej., 2.0) reducirá el impacto más, mientras que un valor de 1.0 deshabilitará esta configuración. (predeterminado: 1)", "Tap to interrupt": "Toca para interrumpir", "Tavily API Key": "Clave API de Tavily", "Tell us more:": "Dinos más:", "Temperature": "Temperatura", "Template": "Plantilla", "Temporary Chat": "Chat temporal", - "Text Splitter": "", + "Text Splitter": "Divisor de texto", "Text-to-Speech Engine": "Motor de texto a voz", "Tfs Z": "Tfs Z", "Thanks for your feedback!": "¡Gracias por tu retroalimentación!", - "The Application Account DN you bind with for search": "", - "The base to search for users": "", - "The batch size determines how many text requests are processed together at once. A higher batch size can increase the performance and speed of the model, but it also requires more memory. (Default: 512)": "", + "The Application Account DN you bind with for search": "La cuenta de aplicación DN que vincula para la búsqueda", + "The base to search for users": "La base para buscar usuarios", + "The batch size determines how many text requests are processed together at once. A higher batch size can increase the performance and speed of the model, but it also requires more memory.  (Default: 512)": "El tamaño del lote determina cuántas solicitudes de texto se procesan juntas a la vez. Un tamaño de lote más grande puede aumentar el rendimiento y la velocidad del modelo, pero también requiere más memoria. (Predeterminado: 512)", "The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "Los desarrolladores de este plugin son apasionados voluntarios de la comunidad. Si encuentras este plugin útil, por favor considere contribuir a su desarrollo.", - "The evaluation leaderboard is based on the Elo rating system and is updated in real-time.": "", - "The LDAP attribute that maps to the mail that users use to sign in.": "", - "The LDAP attribute that maps to the username that users use to sign in.": "", - "The leaderboard is currently in beta, and we may adjust the rating calculations as we refine the algorithm.": "", + "The evaluation leaderboard is based on the Elo rating system and is updated in real-time.": "El tablero de líderes de evaluación se basa en el sistema de clasificación Elo y se actualiza en tiempo real.", + "The LDAP attribute that maps to the mail that users use to sign in.": "El atributo LDAP que se asigna al correo que los usuarios utilizan para iniciar sesión.", + "The LDAP attribute that maps to the username that users use to sign in.": "El atributo LDAP que se asigna al nombre de usuario que los usuarios utilizan para iniciar sesión.", + "The leaderboard is currently in beta, and we may adjust the rating calculations as we refine the algorithm.": "El tablero de líderes está actualmente en beta y podemos ajustar los cálculos de clasificación a medida que refinamos el algoritmo.", "The maximum file size in MB. If the file size exceeds this limit, the file will not be uploaded.": "El tamaño máximo del archivo en MB. Si el tamaño del archivo supera este límite, el archivo no se subirá.", "The maximum number of files that can be used at once in chat. If the number of files exceeds this limit, the files will not be uploaded.": "El número máximo de archivos que se pueden utilizar a la vez en chat. Si este límite es superado, los archivos no se subirán.", - "The score should be a value between 0.0 (0%) and 1.0 (100%).": "El puntaje debe ser un valor entre 0.0 (0%) y 1.0 (100%).", - "The temperature of the model. Increasing the temperature will make the model answer more creatively. (Default: 0.8)": "", + "The score should be a value between 0.0 (0%) and 1.0 (100%).": "La puntuación debe ser un valor entre 0.0 (0%) y 1.0 (100%).", + "The temperature of the model. Increasing the temperature will make the model answer more creatively. (Default: 0.8)": "La temperatura del modelo. Aumentar la temperatura hará que el modelo responda de manera más creativa. (Predeterminado: 0.8)", "Theme": "Tema", "Thinking...": "Pensando...", "This action cannot be undone. Do you wish to continue?": "Esta acción no se puede deshacer. ¿Desea continuar?", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Esto garantiza que sus valiosas conversaciones se guarden de forma segura en su base de datos en el backend. ¡Gracias!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "Esta es una característica experimental que puede no funcionar como se esperaba y está sujeto a cambios en cualquier momento.", - "This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics. (Default: 24)": "", - "This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated. (Default: 128)": "", - "This option will delete all existing files in the collection and replace them with newly uploaded files.": " Esta opción eliminará todos los archivos existentes en la colección y los reemplazará con nuevos archivos subidos.", - "This response was generated by \"{{model}}\"": "", + "This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics. (Default: 24)": "Esta opción controla cuántos tokens se conservan al actualizar el contexto. Por ejemplo, si se establece en 2, se conservarán los últimos 2 tokens del contexto de la conversación. Conservar el contexto puede ayudar a mantener la continuidad de una conversación, pero puede reducir la capacidad de responder a nuevos temas. (Predeterminado: 24)", + "This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.  (Default: 128)": "Esta opción establece el número máximo de tokens que el modelo puede generar en su respuesta. Aumentar este límite permite que el modelo proporcione respuestas más largas, pero también puede aumentar la probabilidad de que se genere contenido inútil o irrelevante. (Predeterminado: 128)", + "This option will delete all existing files in the collection and replace them with newly uploaded files.": "Esta opción eliminará todos los archivos existentes en la colección y los reemplazará con nuevos archivos subidos.", + "This response was generated by \"{{model}}\"": "Esta respuesta fue generada por \"{{model}}\"", "This will delete": "Esto eliminará", - "This will delete {{NAME}} and all its contents.": "", - "This will delete all models including custom models": "", - "This will delete all models including custom models and cannot be undone.": "", + "This will delete {{NAME}} and all its contents.": "Esto eliminará {{NAME}} y todo su contenido.", + "This will delete all models including custom models": "Esto eliminará todos los modelos, incluidos los modelos personalizados", + "This will delete all models including custom models and cannot be undone.": "Esto eliminará todos los modelos, incluidos los modelos personalizados y no se puede deshacer.", "This will reset the knowledge base and sync all files. Do you wish to continue?": "Esto reseteará la base de conocimientos y sincronizará todos los archivos. ¿Desea continuar?", "Thorough explanation": "Explicación exhaustiva", - "Thought for {{DURATION}}": "", + "Thought for {{DURATION}}": "Pensamiento para {{DURATION}}", "Tika": "Tika", "Tika Server URL required.": "URL del servidor de Tika", - "Tiktoken": "", + "Tiktoken": "Tiktoken", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Consejo: Actualice múltiples variables consecutivamente presionando la tecla tab en la entrada del chat después de cada reemplazo.", "Title": "Título", "Title (e.g. Tell me a fun fact)": "Título (por ejemplo, cuéntame una curiosidad)", "Title Auto-Generation": "Generación automática de títulos", "Title cannot be an empty string.": "El título no puede ser una cadena vacía.", "Title Generation Prompt": "Prompt de generación de título", - "TLS": "", + "TLS": "TLS", "To access the available model names for downloading,": "Para acceder a los nombres de modelos disponibles para descargar,", "To access the GGUF models available for downloading,": "Para acceder a los modelos GGUF disponibles para descargar,", "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Para acceder al interfaz de usuario web, por favor contacte al administrador. Los administradores pueden administrar los estados de los usuarios desde el panel de administración.", "To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "Para adjuntar la base de conocimientos aquí, agreguelas al área de trabajo \"Conocimiento\" primero.", - "To learn more about available endpoints, visit our documentation.": "", - "To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "", + "To learn more about available endpoints, visit our documentation.": "Para obtener más información sobre los endpoints disponibles, visite nuestra documentación.", + "To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "Para proteger su privacidad, solo se comparten calificaciones, IDs de modelos, etiquetas y metadatos de su retroalimentación; sus registros de chat permanecen privados y no se incluyen.", "To select actions here, add them to the \"Functions\" workspace first.": "Para seleccionar acciones aquí, agreguelas al área de trabajo \"Funciones\" primero.", "To select filters here, add them to the \"Functions\" workspace first.": "Para seleccionar filtros aquí, agreguelos al área de trabajo \"Funciones\" primero.", "To select toolkits here, add them to the \"Tools\" workspace first.": "Para seleccionar herramientas aquí, agreguelas al área de trabajo \"Herramientas\" primero.", - "Toast notifications for new updates": "", + "Toast notifications for new updates": "Notificaciones emergentes para nuevas actualizaciones", "Today": "Hoy", "Toggle settings": "Alternar configuración", "Toggle sidebar": "Alternar barra lateral", - "Token": "", + "Token": "Token", "Tokens To Keep On Context Refresh (num_keep)": "Tokens a mantener en el contexto de actualización (num_keep)", - "Too verbose": "", + "Too verbose": "Demasiado detallado", "Tool created successfully": "Herramienta creada con éxito", "Tool deleted successfully": "Herramienta eliminada con éxito", - "Tool Description": "", - "Tool ID": "", + "Tool Description": "Descripción de la herramienta", + "Tool ID": "ID de la herramienta", "Tool imported successfully": "Herramienta importada con éxito", - "Tool Name": "", + "Tool Name": "Nombre de la herramienta", "Tool updated successfully": "Herramienta actualizada con éxito", "Tools": "Herramientas", - "Tools Access": "", + "Tools Access": "Acceso a herramientas", "Tools are a function calling system with arbitrary code execution": "Las herramientas son un sistema de llamada de funciones con código arbitrario", - "Tools Function Calling Prompt": "", + "Tools Function Calling Prompt": "Prompt de llamada de funciones de herramientas", "Tools have a function calling system that allows arbitrary code execution": "Las herramientas tienen un sistema de llamadas de funciones que permite la ejecución de código arbitrario", "Tools have a function calling system that allows arbitrary code execution.": "Las herramientas tienen un sistema de llamada de funciones que permite la ejecución de código arbitrario.", "Top K": "Top K", "Top P": "Top P", - "Transformers": "", + "Transformers": "Transformadores", "Trouble accessing Ollama?": "¿Problemas para acceder a Ollama?", "TTS Model": "Modelo TTS", "TTS Settings": "Configuración de TTS", "TTS Voice": "Voz del TTS", "Type": "Tipo", "Type Hugging Face Resolve (Download) URL": "Escriba la URL (Descarga) de Hugging Face Resolve", - "Uh-oh! There was an issue with the response.": "", + "Uh-oh! There was an issue with the response.": "¡Ups! Hubo un problema con la respuesta.", "UI": "UI", - "Unarchive All": "", - "Unarchive All Archived Chats": "", - "Unarchive Chat": "", - "Unlock mysteries": "", + "Unarchive All": "Desarchivar todo", + "Unarchive All Archived Chats": "Desarchivar todos los chats archivados", + "Unarchive Chat": "Desarchivar chat", + "Unlock mysteries": "Desbloquear misterios", "Unpin": "Desanclar", - "Unravel secrets": "", - "Untagged": "", + "Unravel secrets": "Desentrañar secretos", + "Untagged": "Sin etiquetar", "Update": "Actualizar", "Update and Copy Link": "Actualizar y copiar enlace", "Update for the latest features and improvements.": "Actualize para las últimas características e mejoras.", "Update password": "Actualizar contraseña", - "Updated": "", + "Updated": "Actualizado", "Updated at": "Actualizado en", - "Updated At": "", + "Updated At": "Actualizado en", "Upload": "Subir", "Upload a GGUF model": "Subir un modelo GGUF", "Upload directory": "Directorio de carga", @@ -1015,20 +1015,20 @@ "Upload Files": "Subir archivos", "Upload Pipeline": "Subir Pipeline", "Upload Progress": "Progreso de carga", - "URL": "", + "URL": "URL", "URL Mode": "Modo de URL", - "Use '#' in the prompt input to load and include your knowledge.": "Utilize '#' en el prompt para cargar y incluir su conocimiento.", + "Use '#' in the prompt input to load and include your knowledge.": "Utilice '#' en el prompt para cargar y incluir su conocimiento.", "Use Gravatar": "Usar Gravatar", - "Use groups to group your users and assign permissions.": "", + "Use groups to group your users and assign permissions.": "Use grupos para agrupar a sus usuarios y asignar permisos.", "Use Initials": "Usar Iniciales", "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "usuario", - "User": "", + "User": "Usuario", "User location successfully retrieved.": "Localización del usuario recuperada con éxito.", - "Username": "", + "Username": "Nombre de usuario", "Users": "Usuarios", - "Using the default arena model with all models. Click the plus button to add custom models.": "", + "Using the default arena model with all models. Click the plus button to add custom models.": "Usando el modelo de arena predeterminado con todos los modelos. Haga clic en el botón más para agregar modelos personalizados.", "Utilize": "Utilizar", "Valid time units:": "Unidades válidas de tiempo:", "Valves": "Valves", @@ -1038,51 +1038,51 @@ "variable to have them replaced with clipboard content.": "variable para reemplazarlos con el contenido del portapapeles.", "Version": "Versión", "Version {{selectedVersion}} of {{totalVersions}}": "Versión {{selectedVersion}} de {{totalVersions}}", - "View Replies": "", - "Visibility": "", + "View Replies": "Ver respuestas", + "Visibility": "Visibilidad", "Voice": "Voz", - "Voice Input": "", + "Voice Input": "Entrada de voz", "Warning": "Advertencia", "Warning:": "Advertencia:", - "Warning: Enabling this will allow users to upload arbitrary code on the server.": "", + "Warning: Enabling this will allow users to upload arbitrary code on the server.": "Advertencia: Habilitar esto permitirá a los usuarios subir código arbitrario en el servidor.", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Advertencia: Si actualiza o cambia su modelo de inserción, necesitará volver a importar todos los documentos.", "Web": "Web", "Web API": "API Web", - "Web Loader Settings": "Web Loader Settings", + "Web Loader Settings": "Configuración del cargador web", "Web Search": "Búsqueda en la Web", "Web Search Engine": "Motor de búsqueda web", - "Web Search in Chat": "", - "Web Search Query Generation": "", + "Web Search in Chat": "Búsqueda web en chat", + "Web Search Query Generation": "Generación de consultas de búsqueda web", "Webhook URL": "Webhook URL", "WebUI Settings": "Configuración del WebUI", - "WebUI URL": "", - "WebUI will make requests to \"{{url}}/api/chat\"": "", - "WebUI will make requests to \"{{url}}/chat/completions\"": "", - "What are you trying to achieve?": "", - "What are you working on?": "", + "WebUI URL": "URL del WebUI", + "WebUI will make requests to \"{{url}}/api/chat\"": "WebUI hará solicitudes a \"{{url}}/api/chat\"", + "WebUI will make requests to \"{{url}}/chat/completions\"": "WebUI hará solicitudes a \"{{url}}/chat/completions\"", + "What are you trying to achieve?": "¿Qué estás tratando de lograr?", + "What are you working on?": "¿En qué estás trabajando?", "What’s New in": "Novedades en", - "When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "", - "wherever you are": "", + "When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "Cuando está habilitado, el modelo responderá a cada mensaje de chat en tiempo real, generando una respuesta tan pronto como el usuario envíe un mensaje. Este modo es útil para aplicaciones de chat en vivo, pero puede afectar el rendimiento en hardware más lento.", + "wherever you are": "dondequiera que estés", "Whisper (Local)": "Whisper (Local)", - "Why?": "", + "Why?": "¿Por qué?", "Widescreen Mode": "Modo de pantalla ancha", - "Won": "", - "Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "", + "Won": "Ganado", + "Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "Funciona junto con top-k. Un valor más alto (p.ej., 0.95) dará como resultado un texto más diverso, mientras que un valor más bajo (p.ej., 0.5) generará un texto más enfocado y conservador. (Predeterminado: 0.9)", "Workspace": "Espacio de trabajo", - "Workspace Permissions": "", - "Write": "", + "Workspace Permissions": "Permisos del espacio de trabajo", + "Write": "Escribir", "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].", - "Write something...": "", - "Write your model template content here": "", + "Write something...": "Escribe algo...", + "Write your model template content here": "Escribe el contenido de tu plantilla de modelo aquí", "Yesterday": "Ayer", "You": "Usted", - "You can only chat with a maximum of {{maxCount}} file(s) at a time.": "", + "You can only chat with a maximum of {{maxCount}} file(s) at a time.": "Solo puede chatear con un máximo de {{maxCount}} archivo(s) a la vez.", "You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "Puede personalizar sus interacciones con LLMs añadiendo memorias a través del botón 'Gestionar' debajo, haciendo que sean más útiles y personalizados para usted.", - "You cannot upload an empty file.": "", - "You do not have permission to access this feature.": "", - "You do not have permission to upload files": "", - "You do not have permission to upload files.": "", + "You cannot upload an empty file.": "No puede subir un archivo vacío.", + "You do not have permission to access this feature.": "No tiene permiso para acceder a esta función.", + "You do not have permission to upload files": "No tiene permiso para subir archivos", + "You do not have permission to upload files.": "No tiene permiso para subir archivos.", "You have no archived conversations.": "No tiene conversaciones archivadas.", "You have shared this chat": "Usted ha compartido esta conversación", "You're a helpful assistant.": "Usted es un asistente útil.", From b1711e9491fc658c75c8dbcb38f1c5c5cb5d8ead Mon Sep 17 00:00:00 2001 From: Jose Maldonado aka Yukiteru <63384398+yukiteruamano@users.noreply.github.com> Date: Mon, 10 Feb 2025 01:07:32 -0400 Subject: [PATCH 11/56] i18n: fix a bad (badword: propmt) translation in es_ES (Spanish) --- src/lib/i18n/locales/es-ES/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index 03a283d8c..3424c127f 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -565,7 +565,7 @@ "Leave empty to include all models from \"{{URL}}/api/tags\" endpoint": "Deje vacío para incluir todos los modelos desde el endpoint \"{{URL}}/api/tags\"", "Leave empty to include all models from \"{{URL}}/models\" endpoint": "Deje vacío para incluir todos los modelos desde el endpoint \"{{URL}}/models\"", "Leave empty to include all models or select specific models": "Deje vacío para incluir todos los modelos o seleccione modelos específicos", - "Leave empty to use the default prompt, or enter a custom prompt": "Deje vacío para usar el propmt predeterminado, o ingrese un propmt personalizado", + "Leave empty to use the default prompt, or enter a custom prompt": "Deje vacío para usar el prompt predeterminado, o ingrese un prompt personalizado", "Light": "Claro", "Listening...": "Escuchando...", "Llama.cpp": "Llama.cpp", From 426f8f29adf3a69c00ee5547587a963dcc6ca6d0 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Sun, 9 Feb 2025 22:19:02 -0800 Subject: [PATCH 12/56] refac --- src/lib/components/admin/Evaluations/Feedbacks.svelte | 4 ++-- src/lib/components/admin/Functions.svelte | 4 ++-- src/lib/components/chat/MessageInput.svelte | 8 ++++---- src/lib/components/chat/ShareChatModal.svelte | 4 ++-- src/lib/components/workspace/Models.svelte | 4 ++-- src/lib/components/workspace/Prompts.svelte | 4 ++-- src/lib/components/workspace/Tools.svelte | 4 ++-- src/lib/i18n/locales/ar-BH/translation.json | 6 +++--- src/lib/i18n/locales/bg-BG/translation.json | 6 +++--- src/lib/i18n/locales/bn-BD/translation.json | 6 +++--- src/lib/i18n/locales/ca-ES/translation.json | 6 +++--- src/lib/i18n/locales/ceb-PH/translation.json | 6 +++--- src/lib/i18n/locales/cs-CZ/translation.json | 6 +++--- src/lib/i18n/locales/da-DK/translation.json | 6 +++--- src/lib/i18n/locales/de-DE/translation.json | 6 +++--- src/lib/i18n/locales/dg-DG/translation.json | 6 +++--- src/lib/i18n/locales/el-GR/translation.json | 6 +++--- src/lib/i18n/locales/en-GB/translation.json | 6 +++--- src/lib/i18n/locales/en-US/translation.json | 6 +++--- src/lib/i18n/locales/es-ES/translation.json | 6 +++--- src/lib/i18n/locales/eu-ES/translation.json | 6 +++--- src/lib/i18n/locales/fa-IR/translation.json | 6 +++--- src/lib/i18n/locales/fi-FI/translation.json | 6 +++--- src/lib/i18n/locales/fr-CA/translation.json | 6 +++--- src/lib/i18n/locales/fr-FR/translation.json | 6 +++--- src/lib/i18n/locales/he-IL/translation.json | 6 +++--- src/lib/i18n/locales/hi-IN/translation.json | 6 +++--- src/lib/i18n/locales/hr-HR/translation.json | 6 +++--- src/lib/i18n/locales/hu-HU/translation.json | 6 +++--- src/lib/i18n/locales/id-ID/translation.json | 6 +++--- src/lib/i18n/locales/ie-GA/translation.json | 6 +++--- src/lib/i18n/locales/it-IT/translation.json | 6 +++--- src/lib/i18n/locales/ja-JP/translation.json | 6 +++--- src/lib/i18n/locales/ka-GE/translation.json | 6 +++--- src/lib/i18n/locales/ko-KR/translation.json | 6 +++--- src/lib/i18n/locales/lt-LT/translation.json | 6 +++--- src/lib/i18n/locales/ms-MY/translation.json | 6 +++--- src/lib/i18n/locales/nb-NO/translation.json | 6 +++--- src/lib/i18n/locales/nl-NL/translation.json | 6 +++--- src/lib/i18n/locales/pa-IN/translation.json | 6 +++--- src/lib/i18n/locales/pl-PL/translation.json | 6 +++--- src/lib/i18n/locales/pt-BR/translation.json | 6 +++--- src/lib/i18n/locales/pt-PT/translation.json | 6 +++--- src/lib/i18n/locales/ro-RO/translation.json | 6 +++--- src/lib/i18n/locales/ru-RU/translation.json | 6 +++--- src/lib/i18n/locales/sk-SK/translation.json | 6 +++--- src/lib/i18n/locales/sr-RS/translation.json | 6 +++--- src/lib/i18n/locales/sv-SE/translation.json | 6 +++--- src/lib/i18n/locales/th-TH/translation.json | 6 +++--- src/lib/i18n/locales/tk-TW/translation.json | 6 +++--- src/lib/i18n/locales/tr-TR/translation.json | 6 +++--- src/lib/i18n/locales/uk-UA/translation.json | 6 +++--- src/lib/i18n/locales/ur-PK/translation.json | 6 +++--- src/lib/i18n/locales/vi-VN/translation.json | 6 +++--- src/lib/i18n/locales/zh-CN/translation.json | 6 +++--- src/lib/i18n/locales/zh-TW/translation.json | 6 +++--- 56 files changed, 163 insertions(+), 163 deletions(-) diff --git a/src/lib/components/admin/Evaluations/Feedbacks.svelte b/src/lib/components/admin/Evaluations/Feedbacks.svelte index e43081302..e73adb027 100644 --- a/src/lib/components/admin/Evaluations/Feedbacks.svelte +++ b/src/lib/components/admin/Evaluations/Feedbacks.svelte @@ -65,7 +65,7 @@ }; const shareHandler = async () => { - toast.success($i18n.t('Redirecting you to OpenWebUI Community')); + toast.success($i18n.t('Redirecting you to Open WebUI Community')); // remove snapshot from feedbacks const feedbacksToShare = feedbacks.map((f) => { @@ -266,7 +266,7 @@ }} >
- {$i18n.t('Share to OpenWebUI Community')} + {$i18n.t('Share to Open WebUI Community')}
diff --git a/src/lib/components/admin/Functions.svelte b/src/lib/components/admin/Functions.svelte index 80c7d11cd..f7814ce91 100644 --- a/src/lib/components/admin/Functions.svelte +++ b/src/lib/components/admin/Functions.svelte @@ -65,7 +65,7 @@ return null; }); - toast.success($i18n.t('Redirecting you to OpenWebUI Community')); + toast.success($i18n.t('Redirecting you to Open WebUI Community')); const url = 'https://openwebui.com'; @@ -453,7 +453,7 @@ {#if $config?.features.enable_community_sharing}
- {$i18n.t('Made by OpenWebUI Community')} + {$i18n.t('Made by Open WebUI Community')}
{/if} diff --git a/src/lib/components/workspace/Models.svelte b/src/lib/components/workspace/Models.svelte index d2f54eb0c..15acaebe5 100644 --- a/src/lib/components/workspace/Models.svelte +++ b/src/lib/components/workspace/Models.svelte @@ -82,7 +82,7 @@ }; const shareModelHandler = async (model) => { - toast.success($i18n.t('Redirecting you to OpenWebUI Community')); + toast.success($i18n.t('Redirecting you to Open WebUI Community')); const url = 'https://openwebui.com'; @@ -479,7 +479,7 @@ {#if $config?.features.enable_community_sharing}
- {$i18n.t('Made by OpenWebUI Community')} + {$i18n.t('Made by Open WebUI Community')}
query === '' || p.command.includes(query)); const shareHandler = async (prompt) => { - toast.success($i18n.t('Redirecting you to OpenWebUI Community')); + toast.success($i18n.t('Redirecting you to Open WebUI Community')); const url = 'https://openwebui.com'; @@ -319,7 +319,7 @@ {#if $config?.features.enable_community_sharing}
- {$i18n.t('Made by OpenWebUI Community')} + {$i18n.t('Made by Open WebUI Community')}
- {$i18n.t('Made by OpenWebUI Community')} + {$i18n.t('Made by Open WebUI Community')}
Date: Sun, 9 Feb 2025 22:20:47 -0800 Subject: [PATCH 13/56] chore: format --- .../retrieval/vector/dbs/opensearch.py | 12 +++------ .../open_webui/retrieval/web/jina_search.py | 7 ++--- backend/open_webui/routers/audio.py | 8 ++++-- backend/open_webui/routers/ollama.py | 26 +++++++++---------- backend/open_webui/storage/provider.py | 12 +++++---- backend/open_webui/utils/misc.py | 2 +- backend/open_webui/utils/oauth.py | 16 +++++++++--- backend/open_webui/utils/pdf_generator.py | 1 + src/lib/i18n/locales/ar-BH/translation.json | 7 +++++ src/lib/i18n/locales/bg-BG/translation.json | 7 +++++ src/lib/i18n/locales/bn-BD/translation.json | 7 +++++ src/lib/i18n/locales/ca-ES/translation.json | 7 +++++ src/lib/i18n/locales/ceb-PH/translation.json | 7 +++++ src/lib/i18n/locales/cs-CZ/translation.json | 7 +++++ src/lib/i18n/locales/da-DK/translation.json | 7 +++++ src/lib/i18n/locales/de-DE/translation.json | 7 +++++ src/lib/i18n/locales/dg-DG/translation.json | 7 +++++ src/lib/i18n/locales/el-GR/translation.json | 7 +++++ src/lib/i18n/locales/en-GB/translation.json | 7 +++++ src/lib/i18n/locales/en-US/translation.json | 6 +++++ src/lib/i18n/locales/es-ES/translation.json | 11 ++++++-- src/lib/i18n/locales/eu-ES/translation.json | 7 +++++ src/lib/i18n/locales/fa-IR/translation.json | 7 +++++ src/lib/i18n/locales/fi-FI/translation.json | 7 +++++ src/lib/i18n/locales/fr-CA/translation.json | 7 +++++ src/lib/i18n/locales/fr-FR/translation.json | 7 +++++ src/lib/i18n/locales/he-IL/translation.json | 7 +++++ src/lib/i18n/locales/hi-IN/translation.json | 7 +++++ src/lib/i18n/locales/hr-HR/translation.json | 7 +++++ src/lib/i18n/locales/hu-HU/translation.json | 7 +++++ src/lib/i18n/locales/id-ID/translation.json | 7 +++++ src/lib/i18n/locales/ie-GA/translation.json | 7 +++++ src/lib/i18n/locales/it-IT/translation.json | 7 +++++ src/lib/i18n/locales/ja-JP/translation.json | 7 +++++ src/lib/i18n/locales/ka-GE/translation.json | 7 +++++ src/lib/i18n/locales/ko-KR/translation.json | 7 +++++ src/lib/i18n/locales/lt-LT/translation.json | 7 +++++ src/lib/i18n/locales/ms-MY/translation.json | 7 +++++ src/lib/i18n/locales/nb-NO/translation.json | 7 +++++ src/lib/i18n/locales/nl-NL/translation.json | 7 +++++ src/lib/i18n/locales/pa-IN/translation.json | 7 +++++ src/lib/i18n/locales/pl-PL/translation.json | 7 +++++ src/lib/i18n/locales/pt-BR/translation.json | 7 +++++ src/lib/i18n/locales/pt-PT/translation.json | 7 +++++ src/lib/i18n/locales/ro-RO/translation.json | 7 +++++ src/lib/i18n/locales/ru-RU/translation.json | 7 +++++ src/lib/i18n/locales/sk-SK/translation.json | 7 +++++ src/lib/i18n/locales/sr-RS/translation.json | 7 +++++ src/lib/i18n/locales/sv-SE/translation.json | 7 +++++ src/lib/i18n/locales/th-TH/translation.json | 7 +++++ src/lib/i18n/locales/tk-TW/translation.json | 7 +++++ src/lib/i18n/locales/tr-TR/translation.json | 7 +++++ src/lib/i18n/locales/uk-UA/translation.json | 7 +++++ src/lib/i18n/locales/ur-PK/translation.json | 7 +++++ src/lib/i18n/locales/vi-VN/translation.json | 7 +++++ src/lib/i18n/locales/zh-CN/translation.json | 6 +++++ src/lib/i18n/locales/zh-TW/translation.json | 7 +++++ 57 files changed, 387 insertions(+), 42 deletions(-) diff --git a/backend/open_webui/retrieval/vector/dbs/opensearch.py b/backend/open_webui/retrieval/vector/dbs/opensearch.py index 41d634391..b8186b3f9 100644 --- a/backend/open_webui/retrieval/vector/dbs/opensearch.py +++ b/backend/open_webui/retrieval/vector/dbs/opensearch.py @@ -120,18 +120,12 @@ class OpenSearchClient: return None query_body = { - "query": { - "bool": { - "filter": [] - } - }, + "query": {"bool": {"filter": []}}, "_source": ["text", "metadata"], } for field, value in filter.items(): - query_body["query"]["bool"]["filter"].append({ - "term": {field: value} - }) + query_body["query"]["bool"]["filter"].append({"term": {field: value}}) size = limit if limit else 10 @@ -139,7 +133,7 @@ class OpenSearchClient: result = self.client.search( index=f"{self.index_prefix}_{collection_name}", body=query_body, - size=size + size=size, ) return self._result_to_get_result(result) diff --git a/backend/open_webui/retrieval/web/jina_search.py b/backend/open_webui/retrieval/web/jina_search.py index 02af42ea6..a87293db5 100644 --- a/backend/open_webui/retrieval/web/jina_search.py +++ b/backend/open_webui/retrieval/web/jina_search.py @@ -25,13 +25,10 @@ def search_jina(api_key: str, query: str, count: int) -> list[SearchResult]: "Accept": "application/json", "Content-Type": "application/json", "Authorization": api_key, - "X-Retain-Images": "none" + "X-Retain-Images": "none", } - payload = { - "q": query, - "count": count if count <= 10 else 10 - } + payload = {"q": query, "count": count if count <= 10 else 10} url = str(URL(jina_search_endpoint)) response = requests.post(url, headers=headers, json=payload) diff --git a/backend/open_webui/routers/audio.py b/backend/open_webui/routers/audio.py index 7242042e2..e2d05ba90 100644 --- a/backend/open_webui/routers/audio.py +++ b/backend/open_webui/routers/audio.py @@ -560,10 +560,14 @@ def transcribe(request: Request, file_path): # Extract transcript from Deepgram response try: - transcript = response_data["results"]["channels"][0]["alternatives"][0].get("transcript", "") + transcript = response_data["results"]["channels"][0]["alternatives"][ + 0 + ].get("transcript", "") except (KeyError, IndexError) as e: log.error(f"Malformed response from Deepgram: {str(e)}") - raise Exception("Failed to parse Deepgram response - unexpected response format") + raise Exception( + "Failed to parse Deepgram response - unexpected response format" + ) data = {"text": transcript.strip()} # Save transcript diff --git a/backend/open_webui/routers/ollama.py b/backend/open_webui/routers/ollama.py index 1c6365683..64373c616 100644 --- a/backend/open_webui/routers/ollama.py +++ b/backend/open_webui/routers/ollama.py @@ -1424,11 +1424,11 @@ async def upload_model( os.makedirs(UPLOAD_DIR, exist_ok=True) # --- P1: save file locally --- - chunk_size = 1024 * 1024 * 2 # 2 MB chunks + chunk_size = 1024 * 1024 * 2 # 2 MB chunks with open(file_path, "wb") as out_f: while True: chunk = file.file.read(chunk_size) - #log.info(f"Chunk: {str(chunk)}") # DEBUG + # log.info(f"Chunk: {str(chunk)}") # DEBUG if not chunk: break out_f.write(chunk) @@ -1436,15 +1436,15 @@ async def upload_model( async def file_process_stream(): nonlocal ollama_url total_size = os.path.getsize(file_path) - log.info(f"Total Model Size: {str(total_size)}") # DEBUG + log.info(f"Total Model Size: {str(total_size)}") # DEBUG # --- P2: SSE progress + calculate sha256 hash --- file_hash = calculate_sha256(file_path, chunk_size) - log.info(f"Model Hash: {str(file_hash)}") # DEBUG + log.info(f"Model Hash: {str(file_hash)}") # DEBUG try: with open(file_path, "rb") as f: bytes_read = 0 - while chunk := f.read(chunk_size): + while chunk := f.read(chunk_size): bytes_read += len(chunk) progress = round(bytes_read / total_size * 100, 2) data_msg = { @@ -1460,25 +1460,23 @@ async def upload_model( response = requests.post(url, data=f) if response.ok: - log.info(f"Uploaded to /api/blobs") # DEBUG + log.info(f"Uploaded to /api/blobs") # DEBUG # Remove local file os.remove(file_path) # Create model in ollama model_name, ext = os.path.splitext(file.filename) - log.info(f"Created Model: {model_name}") # DEBUG + log.info(f"Created Model: {model_name}") # DEBUG create_payload = { "model": model_name, # Reference the file by its original name => the uploaded blob's digest - "files": { - file.filename: f"sha256:{file_hash}" - }, + "files": {file.filename: f"sha256:{file_hash}"}, } - log.info(f"Model Payload: {create_payload}") # DEBUG + log.info(f"Model Payload: {create_payload}") # DEBUG # Call ollama /api/create - #https://github.com/ollama/ollama/blob/main/docs/api.md#create-a-model + # https://github.com/ollama/ollama/blob/main/docs/api.md#create-a-model create_resp = requests.post( url=f"{ollama_url}/api/create", headers={"Content-Type": "application/json"}, @@ -1486,7 +1484,7 @@ async def upload_model( ) if create_resp.ok: - log.info(f"API SUCCESS!") # DEBUG + log.info(f"API SUCCESS!") # DEBUG done_msg = { "done": True, "blob": f"sha256:{file_hash}", @@ -1506,4 +1504,4 @@ async def upload_model( res = {"error": str(e)} yield f"data: {json.dumps(res)}\n\n" - return StreamingResponse(file_process_stream(), media_type="text/event-stream") \ No newline at end of file + return StreamingResponse(file_process_stream(), media_type="text/event-stream") diff --git a/backend/open_webui/storage/provider.py b/backend/open_webui/storage/provider.py index afc50b397..b03cf0a7e 100644 --- a/backend/open_webui/storage/provider.py +++ b/backend/open_webui/storage/provider.py @@ -94,7 +94,7 @@ class S3StorageProvider(StorageProvider): aws_secret_access_key=S3_SECRET_ACCESS_KEY, ) self.bucket_name = S3_BUCKET_NAME - self.key_prefix = S3_KEY_PREFIX if S3_KEY_PREFIX else "" + self.key_prefix = S3_KEY_PREFIX if S3_KEY_PREFIX else "" def upload_file(self, file: BinaryIO, filename: str) -> Tuple[bytes, str]: """Handles uploading of the file to S3 storage.""" @@ -108,7 +108,7 @@ class S3StorageProvider(StorageProvider): ) except ClientError as e: raise RuntimeError(f"Error uploading file to S3: {e}") - + def get_file(self, file_path: str) -> str: """Handles downloading of the file from S3 storage.""" try: @@ -137,7 +137,8 @@ class S3StorageProvider(StorageProvider): if "Contents" in response: for content in response["Contents"]: # Skip objects that were not uploaded from open-webui in the first place - if not content["Key"].startswith(self.key_prefix): continue + if not content["Key"].startswith(self.key_prefix): + continue self.s3_client.delete_object( Bucket=self.bucket_name, Key=content["Key"] @@ -150,11 +151,12 @@ class S3StorageProvider(StorageProvider): # The s3 key is the name assigned to an object. It excludes the bucket name, but includes the internal path and the file name. def _extract_s3_key(self, full_file_path: str) -> str: - return '/'.join(full_file_path.split("//")[1].split("/")[1:]) - + return "/".join(full_file_path.split("//")[1].split("/")[1:]) + def _get_local_file_path(self, s3_key: str) -> str: return f"{UPLOAD_DIR}/{s3_key.split('/')[-1]}" + class GCSStorageProvider(StorageProvider): def __init__(self): self.bucket_name = GCS_BUCKET_NAME diff --git a/backend/open_webui/utils/misc.py b/backend/open_webui/utils/misc.py index eb90ea5ea..99e6d9c39 100644 --- a/backend/open_webui/utils/misc.py +++ b/backend/open_webui/utils/misc.py @@ -245,7 +245,7 @@ def get_gravatar_url(email): def calculate_sha256(file_path, chunk_size): - #Compute SHA-256 hash of a file efficiently in chunks + # Compute SHA-256 hash of a file efficiently in chunks sha256 = hashlib.sha256() with open(file_path, "rb") as f: while chunk := f.read(chunk_size): diff --git a/backend/open_webui/utils/oauth.py b/backend/open_webui/utils/oauth.py index 5182a1b17..7021a52c9 100644 --- a/backend/open_webui/utils/oauth.py +++ b/backend/open_webui/utils/oauth.py @@ -142,13 +142,17 @@ class OAuthManager: log.debug(f"Oauth Groups claim: {oauth_claim}") log.debug(f"User oauth groups: {user_oauth_groups}") log.debug(f"User's current groups: {[g.name for g in user_current_groups]}") - log.debug(f"All groups available in OpenWebUI: {[g.name for g in all_available_groups]}") + log.debug( + f"All groups available in OpenWebUI: {[g.name for g in all_available_groups]}" + ) # Remove groups that user is no longer a part of for group_model in user_current_groups: if group_model.name not in user_oauth_groups: # Remove group from user - log.debug(f"Removing user from group {group_model.name} as it is no longer in their oauth groups") + log.debug( + f"Removing user from group {group_model.name} as it is no longer in their oauth groups" + ) user_ids = group_model.user_ids user_ids = [i for i in user_ids if i != user.id] @@ -174,7 +178,9 @@ class OAuthManager: gm.name == group_model.name for gm in user_current_groups ): # Add user to group - log.debug(f"Adding user to group {group_model.name} as it was found in their oauth groups") + log.debug( + f"Adding user to group {group_model.name} as it was found in their oauth groups" + ) user_ids = group_model.user_ids user_ids.append(user.id) @@ -289,7 +295,9 @@ class OAuthManager: base64_encoded_picture = base64.b64encode( picture ).decode("utf-8") - guessed_mime_type = mimetypes.guess_type(picture_url)[0] + guessed_mime_type = mimetypes.guess_type( + picture_url + )[0] if guessed_mime_type is None: # assume JPG, browsers are tolerant enough of image formats guessed_mime_type = "image/jpeg" diff --git a/backend/open_webui/utils/pdf_generator.py b/backend/open_webui/utils/pdf_generator.py index 6650fd9b5..8b04dd81b 100644 --- a/backend/open_webui/utils/pdf_generator.py +++ b/backend/open_webui/utils/pdf_generator.py @@ -12,6 +12,7 @@ from fpdf import FPDF from open_webui.env import STATIC_DIR, FONTS_DIR from open_webui.models.chats import ChatTitleMessagesForm + class PDFGenerator: """ Description: diff --git a/src/lib/i18n/locales/ar-BH/translation.json b/src/lib/i18n/locales/ar-BH/translation.json index 32ae3269a..ebd9f93a7 100644 --- a/src/lib/i18n/locales/ar-BH/translation.json +++ b/src/lib/i18n/locales/ar-BH/translation.json @@ -163,6 +163,7 @@ "Click here to": "أضغط هنا الانتقال", "Click here to download user import template file.": "", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "أضغط هنا للاختيار", "Click here to select a csv file.": "أضغط هنا للاختيار ملف csv", "Click here to select a py file.": "", @@ -290,6 +291,7 @@ "Documentation": "", "Documents": "مستندات", "does not make any external connections, and your data stays securely on your locally hosted server.": "لا يجري أي اتصالات خارجية، وتظل بياناتك آمنة على الخادم المستضاف محليًا.", + "Domain Filter List": "", "Don't have an account?": "ليس لديك حساب؟", "don't install random functions from sources you don't trust.": "", "don't install random tools from sources you don't trust.": "", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "أدخل الChunk Overlap", "Enter Chunk Size": "أدخل Chunk الحجم", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "أدخل عنوان URL ل Github Raw", "Enter Google PSE API Key": "أدخل مفتاح واجهة برمجة تطبيقات PSE من Google", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "", "Knowledge reset successfully.": "", "Knowledge updated successfully": "", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "", "Language": "اللغة", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "", + "Leave model field empty to use the default model.": "", "Light": "فاتح", "Listening...": "", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "", "Thorough explanation": "شرح شامل", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "", "Tika Server URL required.": "", "Tiktoken": "", diff --git a/src/lib/i18n/locales/bg-BG/translation.json b/src/lib/i18n/locales/bg-BG/translation.json index 0503cc6b4..4062c97ea 100644 --- a/src/lib/i18n/locales/bg-BG/translation.json +++ b/src/lib/i18n/locales/bg-BG/translation.json @@ -163,6 +163,7 @@ "Click here to": "Натиснете тук за", "Click here to download user import template file.": "", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "Натиснете тук, за да изберете", "Click here to select a csv file.": "Натиснете тук, за да изберете csv файл.", "Click here to select a py file.": "", @@ -290,6 +291,7 @@ "Documentation": "", "Documents": "Документи", "does not make any external connections, and your data stays securely on your locally hosted server.": "няма външни връзки, и вашите данни остават сигурни на локално назначен сървър.", + "Domain Filter List": "", "Don't have an account?": "Нямате акаунт?", "don't install random functions from sources you don't trust.": "", "don't install random tools from sources you don't trust.": "", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Въведете Chunk Overlap", "Enter Chunk Size": "Въведете Chunk Size", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Въведете URL адреса на Github Raw", "Enter Google PSE API Key": "Въведете Google PSE API ключ", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "", "Knowledge reset successfully.": "", "Knowledge updated successfully": "", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "", "Language": "Език", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "", + "Leave model field empty to use the default model.": "", "Light": "Светъл", "Listening...": "", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "", "Thorough explanation": "Това е подробно описание.", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "", "Tika Server URL required.": "", "Tiktoken": "", diff --git a/src/lib/i18n/locales/bn-BD/translation.json b/src/lib/i18n/locales/bn-BD/translation.json index 173dedc64..96d990f92 100644 --- a/src/lib/i18n/locales/bn-BD/translation.json +++ b/src/lib/i18n/locales/bn-BD/translation.json @@ -163,6 +163,7 @@ "Click here to": "এখানে ক্লিক করুন", "Click here to download user import template file.": "", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "নির্বাচন করার জন্য এখানে ক্লিক করুন", "Click here to select a csv file.": "একটি csv ফাইল নির্বাচন করার জন্য এখানে ক্লিক করুন", "Click here to select a py file.": "", @@ -290,6 +291,7 @@ "Documentation": "", "Documents": "ডকুমেন্টসমূহ", "does not make any external connections, and your data stays securely on your locally hosted server.": "কোন এক্সটার্নাল কানেকশন তৈরি করে না, এবং আপনার ডেটা আর লোকালি হোস্টেড সার্ভারেই নিরাপদে থাকে।", + "Domain Filter List": "", "Don't have an account?": "একাউন্ট নেই?", "don't install random functions from sources you don't trust.": "", "don't install random tools from sources you don't trust.": "", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "চাঙ্ক ওভারল্যাপ লিখুন", "Enter Chunk Size": "চাংক সাইজ লিখুন", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "গিটহাব কাঁচা URL লিখুন", "Enter Google PSE API Key": "গুগল পিএসই এপিআই কী লিখুন", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "", "Knowledge reset successfully.": "", "Knowledge updated successfully": "", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "", "Language": "ভাষা", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "", + "Leave model field empty to use the default model.": "", "Light": "লাইট", "Listening...": "", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "", "Thorough explanation": "পুঙ্খানুপুঙ্খ ব্যাখ্যা", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "", "Tika Server URL required.": "", "Tiktoken": "", diff --git a/src/lib/i18n/locales/ca-ES/translation.json b/src/lib/i18n/locales/ca-ES/translation.json index dc07f6d4e..75fce883b 100644 --- a/src/lib/i18n/locales/ca-ES/translation.json +++ b/src/lib/i18n/locales/ca-ES/translation.json @@ -163,6 +163,7 @@ "Click here to": "Clic aquí per", "Click here to download user import template file.": "Fes clic aquí per descarregar l'arxiu de plantilla d'importació d'usuaris", "Click here to learn more about faster-whisper and see the available models.": "Clica aquí per obtenir més informació sobre faster-whisper i veure els models disponibles.", + "Click here to see available models.": "", "Click here to select": "Clica aquí per seleccionar", "Click here to select a csv file.": "Clica aquí per seleccionar un fitxer csv.", "Click here to select a py file.": "Clica aquí per seleccionar un fitxer py.", @@ -290,6 +291,7 @@ "Documentation": "Documentació", "Documents": "Documents", "does not make any external connections, and your data stays securely on your locally hosted server.": "no realitza connexions externes, i les teves dades romanen segures al teu servidor allotjat localment.", + "Domain Filter List": "", "Don't have an account?": "No tens un compte?", "don't install random functions from sources you don't trust.": "no instal·lis funcions aleatòries de fonts en què no confiïs.", "don't install random tools from sources you don't trust.": "no instal·lis eines aleatòries de fonts en què no confiïs.", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Introdueix la mida de solapament de blocs", "Enter Chunk Size": "Introdueix la mida del bloc", "Enter description": "Introdueix la descripció", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Introdueix l'URL en brut de Github", "Enter Google PSE API Key": "Introdueix la clau API de Google PSE", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "Coneixement eliminat correctament.", "Knowledge reset successfully.": "Coneixement restablert correctament.", "Knowledge updated successfully": "Coneixement actualitzat correctament.", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "Etiqueta", "Landing Page Mode": "Mode de la pàgina d'entrada", "Language": "Idioma", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "Deixar-ho buit per incloure tots els models del punt de connexió \"{{URL}}/models\"", "Leave empty to include all models or select specific models": "Deixa-ho en blanc per incloure tots els models o selecciona models específics", "Leave empty to use the default prompt, or enter a custom prompt": "Deixa-ho en blanc per utilitzar la indicació predeterminada o introdueix una indicació personalitzada", + "Leave model field empty to use the default model.": "", "Light": "Clar", "Listening...": "Escoltant...", "Llama.cpp": "Llama.cpp", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "Això restablirà la base de coneixement i sincronitzarà tots els fitxers. Vols continuar?", "Thorough explanation": "Explicació en detall", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "Tika", "Tika Server URL required.": "La URL del servidor Tika és obligatòria.", "Tiktoken": "Tiktoken", diff --git a/src/lib/i18n/locales/ceb-PH/translation.json b/src/lib/i18n/locales/ceb-PH/translation.json index af00e8779..92147e381 100644 --- a/src/lib/i18n/locales/ceb-PH/translation.json +++ b/src/lib/i18n/locales/ceb-PH/translation.json @@ -163,6 +163,7 @@ "Click here to": "", "Click here to download user import template file.": "", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "I-klik dinhi aron makapili", "Click here to select a csv file.": "", "Click here to select a py file.": "", @@ -290,6 +291,7 @@ "Documentation": "", "Documents": "Mga dokumento", "does not make any external connections, and your data stays securely on your locally hosted server.": "wala maghimo ug eksternal nga koneksyon, ug ang imong data nagpabiling luwas sa imong lokal nga host server.", + "Domain Filter List": "", "Don't have an account?": "Wala kay account ?", "don't install random functions from sources you don't trust.": "", "don't install random tools from sources you don't trust.": "", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Pagsulod sa block overlap", "Enter Chunk Size": "Isulod ang block size", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "", "Enter Google PSE API Key": "", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "", "Knowledge reset successfully.": "", "Knowledge updated successfully": "", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "", "Language": "Pinulongan", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "", + "Leave model field empty to use the default model.": "", "Light": "Kahayag", "Listening...": "", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "", "Thorough explanation": "", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "", "Tika Server URL required.": "", "Tiktoken": "", diff --git a/src/lib/i18n/locales/cs-CZ/translation.json b/src/lib/i18n/locales/cs-CZ/translation.json index 1902d1e85..39f96a325 100644 --- a/src/lib/i18n/locales/cs-CZ/translation.json +++ b/src/lib/i18n/locales/cs-CZ/translation.json @@ -163,6 +163,7 @@ "Click here to": "Klikněte sem pro", "Click here to download user import template file.": "Klikněte zde pro stažení šablony souboru pro import uživatelů.", "Click here to learn more about faster-whisper and see the available models.": "Klikněte sem a zjistěte více o faster-whisper a podívejte se na dostupné modely.", + "Click here to see available models.": "", "Click here to select": "Klikněte sem pro výběr", "Click here to select a csv file.": "Klikněte zde pro výběr souboru typu csv.", "Click here to select a py file.": "Klikněte sem pro výběr {{py}} souboru.", @@ -290,6 +291,7 @@ "Documentation": "Dokumentace", "Documents": "Dokumenty", "does not make any external connections, and your data stays securely on your locally hosted server.": "nevytváří žádná externí připojení a vaše data zůstávají bezpečně na vašem lokálním serveru.", + "Domain Filter List": "", "Don't have an account?": "Nemáte účet?", "don't install random functions from sources you don't trust.": "Neinstalujte náhodné funkce ze zdrojů, kterým nedůvěřujete.", "don't install random tools from sources you don't trust.": "Neinstalujte náhodné nástroje ze zdrojů, kterým nedůvěřujete.", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Zadejte překryv části", "Enter Chunk Size": "Zadejte velikost bloku", "Enter description": "Zadejte popis", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Zadejte URL adresu Github Raw", "Enter Google PSE API Key": "Zadejte klíč rozhraní API Google PSE", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "Znalosti byly úspěšně odstraněny.", "Knowledge reset successfully.": "Úspěšné obnovení znalostí.", "Knowledge updated successfully": "Znalosti úspěšně aktualizovány", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "Režim vstupní stránky", "Language": "Jazyk", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "Nechte prázdné pro zahrnutí všech modelů nebo vyberte konkrétní modely.", "Leave empty to use the default prompt, or enter a custom prompt": "Nechte prázdné pro použití výchozího podnětu, nebo zadejte vlastní podnět.", + "Leave model field empty to use the default model.": "", "Light": "Světlo", "Listening...": "Poslouchání...", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "Toto obnoví znalostní databázi a synchronizuje všechny soubory. Přejete si pokračovat?", "Thorough explanation": "Obsáhlé vysvětlení", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "Tika", "Tika Server URL required.": "Je vyžadována URL adresa serveru Tika.", "Tiktoken": "Tiktoken", diff --git a/src/lib/i18n/locales/da-DK/translation.json b/src/lib/i18n/locales/da-DK/translation.json index 2699276a3..f2851e361 100644 --- a/src/lib/i18n/locales/da-DK/translation.json +++ b/src/lib/i18n/locales/da-DK/translation.json @@ -163,6 +163,7 @@ "Click here to": "Klik her for at", "Click here to download user import template file.": "Klik her for at downloade bruger import template fil.", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "Klik her for at vælge", "Click here to select a csv file.": "Klik her for at vælge en csv fil", "Click here to select a py file.": "Klik her for at vælge en py fil", @@ -290,6 +291,7 @@ "Documentation": "Dokumentation", "Documents": "Dokumenter", "does not make any external connections, and your data stays securely on your locally hosted server.": "laver ikke eksterne kald, og din data bliver sikkert på din egen lokalt hostede server.", + "Domain Filter List": "", "Don't have an account?": "Har du ikke en profil?", "don't install random functions from sources you don't trust.": "lad være med at installere tilfældige funktioner fra kilder, som du ikke stoler på.", "don't install random tools from sources you don't trust.": "lad være med at installere tilfældige værktøjer fra kilder, som du ikke stoler på.", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Indtast overlapning af tekststykker", "Enter Chunk Size": "Indtast størrelse af tekststykker", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Indtast Github Raw URL", "Enter Google PSE API Key": "Indtast Google PSE API-nøgle", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "Viden slettet.", "Knowledge reset successfully.": "Viden nulstillet.", "Knowledge updated successfully": "Viden opdateret.", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "Landing Page-tilstand", "Language": "Sprog", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "Lad stå tomt for at bruge standardprompten, eller indtast en brugerdefineret prompt", + "Leave model field empty to use the default model.": "", "Light": "Lys", "Listening...": "Lytter...", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "Dette vil nulstille vidensbasen og synkronisere alle filer. Vil du fortsætte?", "Thorough explanation": "Grundig forklaring", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "Tika", "Tika Server URL required.": "Tika-server-URL påkrævet.", "Tiktoken": "", diff --git a/src/lib/i18n/locales/de-DE/translation.json b/src/lib/i18n/locales/de-DE/translation.json index c4f789f54..0951a4485 100644 --- a/src/lib/i18n/locales/de-DE/translation.json +++ b/src/lib/i18n/locales/de-DE/translation.json @@ -163,6 +163,7 @@ "Click here to": "Klicken Sie hier, um", "Click here to download user import template file.": "Klicken Sie hier, um die Vorlage für den Benutzerimport herunterzuladen.", "Click here to learn more about faster-whisper and see the available models.": "Klicken Sie hier, um mehr über faster-whisper zu erfahren und die verfügbaren Modelle zu sehen.", + "Click here to see available models.": "", "Click here to select": "Klicke Sie zum Auswählen hier", "Click here to select a csv file.": "Klicken Sie zum Auswählen einer CSV-Datei hier.", "Click here to select a py file.": "Klicken Sie zum Auswählen einer py-Datei hier.", @@ -290,6 +291,7 @@ "Documentation": "Dokumentation", "Documents": "Dokumente", "does not make any external connections, and your data stays securely on your locally hosted server.": "stellt keine externen Verbindungen her, und Ihre Daten bleiben sicher auf Ihrem lokal gehosteten Server.", + "Domain Filter List": "", "Don't have an account?": "Haben Sie noch kein Benutzerkonto?", "don't install random functions from sources you don't trust.": "installieren Sie keine Funktionen aus Quellen, denen Sie nicht vertrauen.", "don't install random tools from sources you don't trust.": "installieren Sie keine Werkzeuge aus Quellen, denen Sie nicht vertrauen.", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Geben Sie die Blocküberlappung ein", "Enter Chunk Size": "Geben Sie die Blockgröße ein", "Enter description": "Geben Sie eine Beschreibung ein", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "Geben Sie den Exa-API-Schlüssel ein", "Enter Github Raw URL": "Geben Sie die Github Raw-URL ein", "Enter Google PSE API Key": "Geben Sie den Google PSE-API-Schlüssel ein", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "Wissen erfolgreich gelöscht.", "Knowledge reset successfully.": "Wissen erfolgreich zurückgesetzt.", "Knowledge updated successfully": "Wissen erfolgreich aktualisiert", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "Label", "Landing Page Mode": "Startseitenmodus", "Language": "Sprache", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "Leer lassen, um alle Modelle vom \"{{URL}}/models\"-Endpunkt einzuschließen", "Leave empty to include all models or select specific models": "Leer lassen, um alle Modelle einzuschließen oder spezifische Modelle auszuwählen", "Leave empty to use the default prompt, or enter a custom prompt": "Leer lassen, um den Standardprompt zu verwenden, oder geben Sie einen benutzerdefinierten Prompt ein", + "Leave model field empty to use the default model.": "", "Light": "Hell", "Listening...": "Höre zu...", "Llama.cpp": "Llama.cpp", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "Dadurch wird die Wissensdatenbank zurückgesetzt und alle Dateien synchronisiert. Möchten Sie fortfahren?", "Thorough explanation": "Ausführliche Erklärung", "Thought for {{DURATION}}": "Nachgedacht für {{DURATION}}", + "Thought for {{DURATION}} seconds": "", "Tika": "Tika", "Tika Server URL required.": "Tika-Server-URL erforderlich.", "Tiktoken": "Tiktoken", diff --git a/src/lib/i18n/locales/dg-DG/translation.json b/src/lib/i18n/locales/dg-DG/translation.json index 615dcabaf..e77b9dbe2 100644 --- a/src/lib/i18n/locales/dg-DG/translation.json +++ b/src/lib/i18n/locales/dg-DG/translation.json @@ -163,6 +163,7 @@ "Click here to": "", "Click here to download user import template file.": "", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "Click to select", "Click here to select a csv file.": "", "Click here to select a py file.": "", @@ -290,6 +291,7 @@ "Documentation": "", "Documents": "Documents", "does not make any external connections, and your data stays securely on your locally hosted server.": "does not connect external, data stays safe locally.", + "Domain Filter List": "", "Don't have an account?": "No account? Much sad.", "don't install random functions from sources you don't trust.": "", "don't install random tools from sources you don't trust.": "", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Enter Overlap of Chunks", "Enter Chunk Size": "Enter Size of Chunk", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "", "Enter Google PSE API Key": "", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "", "Knowledge reset successfully.": "", "Knowledge updated successfully": "", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "", "Language": "Doge Speak", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "", + "Leave model field empty to use the default model.": "", "Light": "Light", "Listening...": "", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "", "Thorough explanation": "", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "", "Tika Server URL required.": "", "Tiktoken": "", diff --git a/src/lib/i18n/locales/el-GR/translation.json b/src/lib/i18n/locales/el-GR/translation.json index b25c0d7a4..724843fa9 100644 --- a/src/lib/i18n/locales/el-GR/translation.json +++ b/src/lib/i18n/locales/el-GR/translation.json @@ -163,6 +163,7 @@ "Click here to": "Κάντε κλικ εδώ για να", "Click here to download user import template file.": "Κάντε κλικ εδώ για να κατεβάσετε το αρχείο προτύπου εισαγωγής χρήστη.", "Click here to learn more about faster-whisper and see the available models.": "Κάντε κλικ εδώ για να μάθετε περισσότερα σχετικά με το faster-whisper και να δείτε τα διαθέσιμα μοντέλα.", + "Click here to see available models.": "", "Click here to select": "Κάντε κλικ εδώ για επιλογή", "Click here to select a csv file.": "Κάντε κλικ εδώ για να επιλέξετε ένα αρχείο csv.", "Click here to select a py file.": "Κάντε κλικ εδώ για να επιλέξετε ένα αρχείο py.", @@ -290,6 +291,7 @@ "Documentation": "Τεκμηρίωση", "Documents": "Έγγραφα", "does not make any external connections, and your data stays securely on your locally hosted server.": "δεν κάνει καμία εξωτερική σύνδεση, και τα δεδομένα σας παραμένουν ασφαλή στον τοπικά φιλοξενούμενο διακομιστή σας.", + "Domain Filter List": "", "Don't have an account?": "Δεν έχετε λογαριασμό;", "don't install random functions from sources you don't trust.": "μην εγκαθιστάτε τυχαίες λειτουργίες από πηγές που δεν εμπιστεύεστε.", "don't install random tools from sources you don't trust.": "μην εγκαθιστάτε τυχαία εργαλεία από πηγές που δεν εμπιστεύεστε.", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Εισάγετε την Επικάλυψη Τμημάτων", "Enter Chunk Size": "Εισάγετε το Μέγεθος Τμημάτων", "Enter description": "Εισάγετε την περιγραφή", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Εισάγετε το Github Raw URL", "Enter Google PSE API Key": "Εισάγετε το Κλειδί API Google PSE", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "Η γνώση διαγράφηκε με επιτυχία.", "Knowledge reset successfully.": "Η γνώση επαναφέρθηκε με επιτυχία.", "Knowledge updated successfully": "Η γνώση ενημερώθηκε με επιτυχία", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "Ετικέτα", "Landing Page Mode": "Λειτουργία Σελίδας Άφιξης", "Language": "Γλώσσα", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "Αφήστε κενό για να συμπεριλάβετε όλα τα μοντέλα από το endpoint \"{{URL}}/models\"", "Leave empty to include all models or select specific models": "Αφήστε κενό για να χρησιμοποιήσετε όλα τα μοντέλα ή επιλέξτε συγκεκριμένα μοντέλα", "Leave empty to use the default prompt, or enter a custom prompt": "Αφήστε κενό για να χρησιμοποιήσετε την προεπιλεγμένη προτροπή, ή εισάγετε μια προσαρμοσμένη προτροπή", + "Leave model field empty to use the default model.": "", "Light": "Φως", "Listening...": "Ακούγεται...", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "Αυτό θα επαναφέρει τη βάση γνώσης και θα συγχρονίσει όλα τα αρχεία. Θέλετε να συνεχίσετε;", "Thorough explanation": "Λεπτομερής εξήγηση", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "Tika", "Tika Server URL required.": "Απαιτείται το URL διακομιστή Tika.", "Tiktoken": "Tiktoken", diff --git a/src/lib/i18n/locales/en-GB/translation.json b/src/lib/i18n/locales/en-GB/translation.json index ac75f395d..cef4f22f3 100644 --- a/src/lib/i18n/locales/en-GB/translation.json +++ b/src/lib/i18n/locales/en-GB/translation.json @@ -163,6 +163,7 @@ "Click here to": "", "Click here to download user import template file.": "", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "", "Click here to select a csv file.": "", "Click here to select a py file.": "", @@ -290,6 +291,7 @@ "Documentation": "", "Documents": "", "does not make any external connections, and your data stays securely on your locally hosted server.": "", + "Domain Filter List": "", "Don't have an account?": "", "don't install random functions from sources you don't trust.": "", "don't install random tools from sources you don't trust.": "", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "", "Enter Chunk Size": "", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "", "Enter Google PSE API Key": "", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "", "Knowledge reset successfully.": "", "Knowledge updated successfully": "", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "", "Language": "", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "", + "Leave model field empty to use the default model.": "", "Light": "", "Listening...": "", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "", "Thorough explanation": "", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "", "Tika Server URL required.": "", "Tiktoken": "", diff --git a/src/lib/i18n/locales/en-US/translation.json b/src/lib/i18n/locales/en-US/translation.json index 70ecebaa5..cef4f22f3 100644 --- a/src/lib/i18n/locales/en-US/translation.json +++ b/src/lib/i18n/locales/en-US/translation.json @@ -163,6 +163,7 @@ "Click here to": "", "Click here to download user import template file.": "", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "", "Click here to select a csv file.": "", "Click here to select a py file.": "", @@ -290,6 +291,7 @@ "Documentation": "", "Documents": "", "does not make any external connections, and your data stays securely on your locally hosted server.": "", + "Domain Filter List": "", "Don't have an account?": "", "don't install random functions from sources you don't trust.": "", "don't install random tools from sources you don't trust.": "", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "", "Enter Chunk Size": "", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "", "Enter Google PSE API Key": "", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "", "Knowledge reset successfully.": "", "Knowledge updated successfully": "", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "", "Language": "", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "", + "Leave model field empty to use the default model.": "", "Light": "", "Listening...": "", "Llama.cpp": "", diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index 3faf9ba3b..ff2978930 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -163,6 +163,7 @@ "Click here to": "Presiona aquí para", "Click here to download user import template file.": "Presiona aquí para descargar el archivo de plantilla de importación de usuario.", "Click here to learn more about faster-whisper and see the available models.": "Clic aquí para aprender más sobre faster-whisper y ver los modelos disponibles.", + "Click here to see available models.": "", "Click here to select": "Presiona aquí para seleccionar", "Click here to select a csv file.": "Presiona aquí para seleccionar un archivo csv.", "Click here to select a py file.": "Presiona aquí para seleccionar un archivo py.", @@ -290,6 +291,7 @@ "Documentation": "Documentación", "Documents": "Documentos", "does not make any external connections, and your data stays securely on your locally hosted server.": "no realiza ninguna conexión externa y sus datos permanecen seguros en su servidor alojado localmente.", + "Domain Filter List": "", "Don't have an account?": "¿No tienes una cuenta?", "don't install random functions from sources you don't trust.": "no instale funciones aleatorias desde fuentes que no confíe.", "don't install random tools from sources you don't trust.": "no instale herramientas aleatorias desde fuentes que no confíe.", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Ingresar superposición de fragmentos", "Enter Chunk Size": "Ingrese el tamaño del fragmento", "Enter description": "Ingrese la descripción", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "Ingrese la clave API de Exa", "Enter Github Raw URL": "Ingresa la URL sin procesar de Github", "Enter Google PSE API Key": "Ingrese la clave API de Google PSE", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "Conocimiento eliminado exitosamente.", "Knowledge reset successfully.": "Conocimiento restablecido exitosamente.", "Knowledge updated successfully": "Conocimiento actualizado exitosamente.", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "Etiqueta", "Landing Page Mode": "Modo de Página de Inicio", "Language": "Lenguaje", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "Deje vacío para incluir todos los modelos desde el endpoint \"{{URL}}/models\"", "Leave empty to include all models or select specific models": "Deje vacío para incluir todos los modelos o seleccione modelos específicos", "Leave empty to use the default prompt, or enter a custom prompt": "Deje vacío para usar el prompt predeterminado, o ingrese un prompt personalizado", + "Leave model field empty to use the default model.": "", "Light": "Claro", "Listening...": "Escuchando...", "Llama.cpp": "Llama.cpp", @@ -918,7 +924,7 @@ "Thanks for your feedback!": "¡Gracias por tu retroalimentación!", "The Application Account DN you bind with for search": "La cuenta de aplicación DN que vincula para la búsqueda", "The base to search for users": "La base para buscar usuarios", - "The batch size determines how many text requests are processed together at once. A higher batch size can increase the performance and speed of the model, but it also requires more memory.  (Default: 512)": "El tamaño del lote determina cuántas solicitudes de texto se procesan juntas a la vez. Un tamaño de lote más grande puede aumentar el rendimiento y la velocidad del modelo, pero también requiere más memoria. (Predeterminado: 512)", + "The batch size determines how many text requests are processed together at once. A higher batch size can increase the performance and speed of the model, but it also requires more memory. (Default: 512)": "", "The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "Los desarrolladores de este plugin son apasionados voluntarios de la comunidad. Si encuentras este plugin útil, por favor considere contribuir a su desarrollo.", "The evaluation leaderboard is based on the Elo rating system and is updated in real-time.": "El tablero de líderes de evaluación se basa en el sistema de clasificación Elo y se actualiza en tiempo real.", "The LDAP attribute that maps to the mail that users use to sign in.": "El atributo LDAP que se asigna al correo que los usuarios utilizan para iniciar sesión.", @@ -934,7 +940,7 @@ "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Esto garantiza que sus valiosas conversaciones se guarden de forma segura en su base de datos en el backend. ¡Gracias!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "Esta es una característica experimental que puede no funcionar como se esperaba y está sujeto a cambios en cualquier momento.", "This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics. (Default: 24)": "Esta opción controla cuántos tokens se conservan al actualizar el contexto. Por ejemplo, si se establece en 2, se conservarán los últimos 2 tokens del contexto de la conversación. Conservar el contexto puede ayudar a mantener la continuidad de una conversación, pero puede reducir la capacidad de responder a nuevos temas. (Predeterminado: 24)", - "This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.  (Default: 128)": "Esta opción establece el número máximo de tokens que el modelo puede generar en su respuesta. Aumentar este límite permite que el modelo proporcione respuestas más largas, pero también puede aumentar la probabilidad de que se genere contenido inútil o irrelevante. (Predeterminado: 128)", + "This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated. (Default: 128)": "", "This option will delete all existing files in the collection and replace them with newly uploaded files.": "Esta opción eliminará todos los archivos existentes en la colección y los reemplazará con nuevos archivos subidos.", "This response was generated by \"{{model}}\"": "Esta respuesta fue generada por \"{{model}}\"", "This will delete": "Esto eliminará", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "Esto reseteará la base de conocimientos y sincronizará todos los archivos. ¿Desea continuar?", "Thorough explanation": "Explicación exhaustiva", "Thought for {{DURATION}}": "Pensamiento para {{DURATION}}", + "Thought for {{DURATION}} seconds": "", "Tika": "Tika", "Tika Server URL required.": "URL del servidor de Tika", "Tiktoken": "Tiktoken", diff --git a/src/lib/i18n/locales/eu-ES/translation.json b/src/lib/i18n/locales/eu-ES/translation.json index 311842f6b..0c856b094 100644 --- a/src/lib/i18n/locales/eu-ES/translation.json +++ b/src/lib/i18n/locales/eu-ES/translation.json @@ -163,6 +163,7 @@ "Click here to": "Klikatu hemen", "Click here to download user import template file.": "Klikatu hemen erabiltzaileen inportazio txantiloia deskargatzeko.", "Click here to learn more about faster-whisper and see the available models.": "Klikatu hemen faster-whisper-i buruz gehiago ikasteko eta eredu erabilgarriak ikusteko.", + "Click here to see available models.": "", "Click here to select": "Klikatu hemen hautatzeko", "Click here to select a csv file.": "Klikatu hemen csv fitxategi bat hautatzeko.", "Click here to select a py file.": "Klikatu hemen py fitxategi bat hautatzeko.", @@ -290,6 +291,7 @@ "Documentation": "Dokumentazioa", "Documents": "Dokumentuak", "does not make any external connections, and your data stays securely on your locally hosted server.": "ez du kanpo konexiorik egiten, eta zure datuak modu seguruan mantentzen dira zure zerbitzari lokalean.", + "Domain Filter List": "", "Don't have an account?": "Ez duzu konturik?", "don't install random functions from sources you don't trust.": "ez instalatu fidagarriak ez diren iturrietatik datozen ausazko funtzioak.", "don't install random tools from sources you don't trust.": "ez instalatu fidagarriak ez diren iturrietatik datozen ausazko tresnak.", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Sartu Zatien Gainjartzea (chunk overlap)", "Enter Chunk Size": "Sartu Zati Tamaina", "Enter description": "Sartu deskribapena", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Sartu Github Raw URLa", "Enter Google PSE API Key": "Sartu Google PSE API Gakoa", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "Ezagutza ongi ezabatu da.", "Knowledge reset successfully.": "Ezagutza ongi berrezarri da.", "Knowledge updated successfully": "Ezagutza ongi eguneratu da.", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "Etiketa", "Landing Page Mode": "Hasiera Orriaren Modua", "Language": "Hizkuntza", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "Utzi hutsik \"{{URL}}/models\" endpointuko eredu guztiak sartzeko", "Leave empty to include all models or select specific models": "Utzi hutsik eredu guztiak sartzeko edo hautatu eredu zehatzak", "Leave empty to use the default prompt, or enter a custom prompt": "Utzi hutsik prompt lehenetsia erabiltzeko, edo sartu prompt pertsonalizatu bat", + "Leave model field empty to use the default model.": "", "Light": "Argia", "Listening...": "Entzuten...", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "Honek ezagutza-basea berrezarri eta fitxategi guztiak sinkronizatuko ditu. Jarraitu nahi duzu?", "Thorough explanation": "Azalpen sakona", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "Tika", "Tika Server URL required.": "Tika zerbitzariaren URLa beharrezkoa da.", "Tiktoken": "Tiktoken", diff --git a/src/lib/i18n/locales/fa-IR/translation.json b/src/lib/i18n/locales/fa-IR/translation.json index a86e42c13..0a21a004c 100644 --- a/src/lib/i18n/locales/fa-IR/translation.json +++ b/src/lib/i18n/locales/fa-IR/translation.json @@ -163,6 +163,7 @@ "Click here to": "برای کمک اینجا را کلیک کنید.", "Click here to download user import template file.": "", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "برای انتخاب اینجا کلیک کنید", "Click here to select a csv file.": "برای انتخاب یک فایل csv اینجا را کلیک کنید.", "Click here to select a py file.": "", @@ -290,6 +291,7 @@ "Documentation": "", "Documents": "اسناد", "does not make any external connections, and your data stays securely on your locally hosted server.": "هیچ اتصال خارجی ایجاد نمی کند و داده های شما به طور ایمن در سرور میزبان محلی شما باقی می ماند.", + "Domain Filter List": "", "Don't have an account?": "حساب کاربری ندارید؟", "don't install random functions from sources you don't trust.": "", "don't install random tools from sources you don't trust.": "", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "مقدار Chunk Overlap را وارد کنید", "Enter Chunk Size": "مقدار Chunk Size را وارد کنید", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "ادرس Github Raw را وارد کنید", "Enter Google PSE API Key": "کلید API گوگل PSE را وارد کنید", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "", "Knowledge reset successfully.": "", "Knowledge updated successfully": "", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "", "Language": "زبان", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "", + "Leave model field empty to use the default model.": "", "Light": "روشن", "Listening...": "", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "", "Thorough explanation": "توضیح کامل", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "", "Tika Server URL required.": "", "Tiktoken": "", diff --git a/src/lib/i18n/locales/fi-FI/translation.json b/src/lib/i18n/locales/fi-FI/translation.json index 63a045f0b..8153ebe62 100644 --- a/src/lib/i18n/locales/fi-FI/translation.json +++ b/src/lib/i18n/locales/fi-FI/translation.json @@ -163,6 +163,7 @@ "Click here to": "Klikkaa tästä", "Click here to download user import template file.": "Lataa käyttäjien tuontipohjatiedosto klikkaamalla tästä.", "Click here to learn more about faster-whisper and see the available models.": "Klikkaa tästä oppiaksesi lisää faster-whisperista ja nähdäksesi saatavilla olevat mallit.", + "Click here to see available models.": "", "Click here to select": "Klikkaa tästä valitaksesi", "Click here to select a csv file.": "Klikkaa tästä valitaksesi CSV-tiedosto.", "Click here to select a py file.": "Klikkaa tästä valitaksesi py-tiedosto.", @@ -290,6 +291,7 @@ "Documentation": "Dokumentaatio", "Documents": "Asiakirjat", "does not make any external connections, and your data stays securely on your locally hosted server.": "ei tee ulkoisia yhteyksiä, ja tietosi pysyvät turvallisesti paikallisesti isännöidyllä palvelimellasi.", + "Domain Filter List": "", "Don't have an account?": "Eikö sinulla ole tiliä?", "don't install random functions from sources you don't trust.": "älä asenna satunnaisia toimintoja lähteistä, joihin et luota.", "don't install random tools from sources you don't trust.": "älä asenna satunnaisia työkaluja lähteistä, joihin et luota.", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Syötä osien päällekkäisyys", "Enter Chunk Size": "Syötä osien koko", "Enter description": "Kirjoita kuvaus", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Kirjoita Github Raw -URL-osoite", "Enter Google PSE API Key": "Kirjoita Google PSE API -avain", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "Tietokanta poistettu onnistuneesti.", "Knowledge reset successfully.": "Tietokanta nollattu onnistuneesti.", "Knowledge updated successfully": "Tietokanta päivitetty onnistuneesti", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "Tunniste", "Landing Page Mode": "Etusivun tila", "Language": "Kieli", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "Jätä tyhjäksi, jos haluat sisällyttää kaikki mallit \"{{URL}}/models\" -päätepistestä", "Leave empty to include all models or select specific models": "Jätä tyhjäksi, jos haluat sisällyttää kaikki mallit tai valitse tietyt mallit", "Leave empty to use the default prompt, or enter a custom prompt": "Jätä tyhjäksi käyttääksesi oletuskehotetta tai kirjoita mukautettu kehote", + "Leave model field empty to use the default model.": "", "Light": "Vaalea", "Listening...": "Kuuntelee...", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "Tämä nollaa tietokannan ja synkronoi kaikki tiedostot. Haluatko jatkaa?", "Thorough explanation": "Perusteellinen selitys", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "Tika", "Tika Server URL required.": "Tika Server URL vaaditaan.", "Tiktoken": "Tiktoken", diff --git a/src/lib/i18n/locales/fr-CA/translation.json b/src/lib/i18n/locales/fr-CA/translation.json index a2118dcce..e3503edeb 100644 --- a/src/lib/i18n/locales/fr-CA/translation.json +++ b/src/lib/i18n/locales/fr-CA/translation.json @@ -163,6 +163,7 @@ "Click here to": "Cliquez ici pour", "Click here to download user import template file.": "Cliquez ici pour télécharger le fichier modèle d'importation utilisateur.", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "Cliquez ici pour sélectionner", "Click here to select a csv file.": "Cliquez ici pour sélectionner un fichier CSV.", "Click here to select a py file.": "Cliquez ici pour sélectionner un fichier .py.", @@ -290,6 +291,7 @@ "Documentation": "Documentation", "Documents": "Documents", "does not make any external connections, and your data stays securely on your locally hosted server.": "ne fait aucune connexion externe et garde vos données en sécurité sur votre serveur local.", + "Domain Filter List": "", "Don't have an account?": "Vous n'avez pas de compte ?", "don't install random functions from sources you don't trust.": "", "don't install random tools from sources you don't trust.": "", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Entrez le chevauchement de chunk", "Enter Chunk Size": "Entrez la taille de bloc", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Entrez l'URL brute de GitHub", "Enter Google PSE API Key": "Entrez la clé API Google PSE", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "", "Knowledge reset successfully.": "", "Knowledge updated successfully": "", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "", "Language": "Langue", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "", + "Leave model field empty to use the default model.": "", "Light": "Lumineux", "Listening...": "En train d'écouter...", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "", "Thorough explanation": "Explication approfondie", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "Tika", "Tika Server URL required.": "URL du serveur Tika requise.", "Tiktoken": "", diff --git a/src/lib/i18n/locales/fr-FR/translation.json b/src/lib/i18n/locales/fr-FR/translation.json index c3ee08578..4ba053a17 100644 --- a/src/lib/i18n/locales/fr-FR/translation.json +++ b/src/lib/i18n/locales/fr-FR/translation.json @@ -163,6 +163,7 @@ "Click here to": "Cliquez ici pour", "Click here to download user import template file.": "Cliquez ici pour télécharger le fichier modèle d'importation des utilisateurs.", "Click here to learn more about faster-whisper and see the available models.": "Cliquez ici pour en savoir plus sur faster-whisper et voir les modèles disponibles.", + "Click here to see available models.": "", "Click here to select": "Cliquez ici pour sélectionner", "Click here to select a csv file.": "Cliquez ici pour sélectionner un fichier .csv.", "Click here to select a py file.": "Cliquez ici pour sélectionner un fichier .py.", @@ -290,6 +291,7 @@ "Documentation": "Documentation", "Documents": "Documents", "does not make any external connections, and your data stays securely on your locally hosted server.": "n'établit aucune connexion externe et garde vos données en sécurité sur votre serveur local.", + "Domain Filter List": "", "Don't have an account?": "Vous n'avez pas de compte ?", "don't install random functions from sources you don't trust.": "n'installez pas de fonctions aléatoires provenant de sources auxquelles vous ne faites pas confiance.", "don't install random tools from sources you don't trust.": "n'installez pas d'outils aléatoires provenant de sources auxquelles vous ne faites pas confiance.", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Entrez le chevauchement des chunks", "Enter Chunk Size": "Entrez la taille des chunks", "Enter description": "Entrez la description", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Entrez l'URL brute de GitHub", "Enter Google PSE API Key": "Entrez la clé API Google PSE", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "Connaissance supprimée avec succès.", "Knowledge reset successfully.": "Connaissance réinitialisée avec succès.", "Knowledge updated successfully": "Connaissance mise à jour avec succès", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "Étiquette", "Landing Page Mode": "Mode de la page d'accueil", "Language": "Langue", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "Laissez vide pour inclure tous les modèles depuis le point de terminaison \"{{URL}}/models\"", "Leave empty to include all models or select specific models": "Laissez vide pour inclure tous les modèles ou sélectionnez des modèles spécifiques", "Leave empty to use the default prompt, or enter a custom prompt": "Laissez vide pour utiliser le prompt par défaut, ou entrez un prompt personnalisé", + "Leave model field empty to use the default model.": "", "Light": "Clair", "Listening...": "Écoute en cours...", "Llama.cpp": "Llama.cpp", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "Cela réinitialisera la base de connaissances et synchronisera tous les fichiers. Souhaitez-vous continuer ?", "Thorough explanation": "Explication approfondie", "Thought for {{DURATION}}": "Réflexion de {{DURATION}}", + "Thought for {{DURATION}} seconds": "", "Tika": "Tika", "Tika Server URL required.": "URL du serveur Tika requise.", "Tiktoken": "Tiktoken", diff --git a/src/lib/i18n/locales/he-IL/translation.json b/src/lib/i18n/locales/he-IL/translation.json index e9b5e6fe5..e2434b0f0 100644 --- a/src/lib/i18n/locales/he-IL/translation.json +++ b/src/lib/i18n/locales/he-IL/translation.json @@ -163,6 +163,7 @@ "Click here to": "לחץ כאן כדי", "Click here to download user import template file.": "", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "לחץ כאן לבחירה", "Click here to select a csv file.": "לחץ כאן לבחירת קובץ csv.", "Click here to select a py file.": "", @@ -290,6 +291,7 @@ "Documentation": "", "Documents": "מסמכים", "does not make any external connections, and your data stays securely on your locally hosted server.": "לא מבצע חיבורים חיצוניים, והנתונים שלך נשמרים באופן מאובטח בשרת המקומי שלך.", + "Domain Filter List": "", "Don't have an account?": "אין לך חשבון?", "don't install random functions from sources you don't trust.": "", "don't install random tools from sources you don't trust.": "", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "הזן חפיפת נתונים", "Enter Chunk Size": "הזן גודל נתונים", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "הזן כתובת URL של Github Raw", "Enter Google PSE API Key": "הזן מפתח API של Google PSE", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "", "Knowledge reset successfully.": "", "Knowledge updated successfully": "", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "", "Language": "שפה", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "", + "Leave model field empty to use the default model.": "", "Light": "בהיר", "Listening...": "", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "", "Thorough explanation": "תיאור מפורט", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "", "Tika Server URL required.": "", "Tiktoken": "", diff --git a/src/lib/i18n/locales/hi-IN/translation.json b/src/lib/i18n/locales/hi-IN/translation.json index 2e7a0f4f1..5e1c3ee75 100644 --- a/src/lib/i18n/locales/hi-IN/translation.json +++ b/src/lib/i18n/locales/hi-IN/translation.json @@ -163,6 +163,7 @@ "Click here to": "यहां क्लिक करें", "Click here to download user import template file.": "", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "चयन करने के लिए यहां क्लिक करें।", "Click here to select a csv file.": "सीएसवी फ़ाइल का चयन करने के लिए यहां क्लिक करें।", "Click here to select a py file.": "", @@ -290,6 +291,7 @@ "Documentation": "", "Documents": "दस्तावेज़", "does not make any external connections, and your data stays securely on your locally hosted server.": "कोई बाहरी कनेक्शन नहीं बनाता है, और आपका डेटा आपके स्थानीय रूप से होस्ट किए गए सर्वर पर सुरक्षित रूप से रहता है।", + "Domain Filter List": "", "Don't have an account?": "कोई खाता नहीं है?", "don't install random functions from sources you don't trust.": "", "don't install random tools from sources you don't trust.": "", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "चंक ओवरलैप दर्ज करें", "Enter Chunk Size": "खंड आकार दर्ज करें", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Github Raw URL दर्ज करें", "Enter Google PSE API Key": "Google PSE API कुंजी दर्ज करें", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "", "Knowledge reset successfully.": "", "Knowledge updated successfully": "", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "", "Language": "भाषा", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "", + "Leave model field empty to use the default model.": "", "Light": "सुन", "Listening...": "", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "", "Thorough explanation": "विस्तृत व्याख्या", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "", "Tika Server URL required.": "", "Tiktoken": "", diff --git a/src/lib/i18n/locales/hr-HR/translation.json b/src/lib/i18n/locales/hr-HR/translation.json index 3260764ff..53c4beeb8 100644 --- a/src/lib/i18n/locales/hr-HR/translation.json +++ b/src/lib/i18n/locales/hr-HR/translation.json @@ -163,6 +163,7 @@ "Click here to": "Kliknite ovdje za", "Click here to download user import template file.": "", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "Kliknite ovdje za odabir", "Click here to select a csv file.": "Kliknite ovdje da odaberete csv datoteku.", "Click here to select a py file.": "", @@ -290,6 +291,7 @@ "Documentation": "Dokumentacija", "Documents": "Dokumenti", "does not make any external connections, and your data stays securely on your locally hosted server.": "ne uspostavlja vanjske veze, a vaši podaci ostaju sigurno na vašem lokalno hostiranom poslužitelju.", + "Domain Filter List": "", "Don't have an account?": "Nemate račun?", "don't install random functions from sources you don't trust.": "", "don't install random tools from sources you don't trust.": "", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Unesite preklapanje dijelova", "Enter Chunk Size": "Unesite veličinu dijela", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Unesite Github sirovi URL", "Enter Google PSE API Key": "Unesite Google PSE API ključ", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "", "Knowledge reset successfully.": "", "Knowledge updated successfully": "", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "", "Language": "Jezik", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "", + "Leave model field empty to use the default model.": "", "Light": "Svijetlo", "Listening...": "Slušam...", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "", "Thorough explanation": "Detaljno objašnjenje", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "", "Tika Server URL required.": "", "Tiktoken": "", diff --git a/src/lib/i18n/locales/hu-HU/translation.json b/src/lib/i18n/locales/hu-HU/translation.json index bcc2d4189..198fbcd2b 100644 --- a/src/lib/i18n/locales/hu-HU/translation.json +++ b/src/lib/i18n/locales/hu-HU/translation.json @@ -163,6 +163,7 @@ "Click here to": "Kattints ide", "Click here to download user import template file.": "Kattints ide a felhasználó importálási sablon letöltéséhez.", "Click here to learn more about faster-whisper and see the available models.": "Kattints ide, hogy többet tudj meg a faster-whisperről és lásd az elérhető modelleket.", + "Click here to see available models.": "", "Click here to select": "Kattints ide a kiválasztáshoz", "Click here to select a csv file.": "Kattints ide egy CSV fájl kiválasztásához.", "Click here to select a py file.": "Kattints ide egy py fájl kiválasztásához.", @@ -290,6 +291,7 @@ "Documentation": "Dokumentáció", "Documents": "Dokumentumok", "does not make any external connections, and your data stays securely on your locally hosted server.": "nem létesít külső kapcsolatokat, és az adataid biztonságban maradnak a helyileg hosztolt szervereden.", + "Domain Filter List": "", "Don't have an account?": "Nincs még fiókod?", "don't install random functions from sources you don't trust.": "ne telepíts véletlenszerű funkciókat olyan forrásokból, amelyekben nem bízol.", "don't install random tools from sources you don't trust.": "ne telepíts véletlenszerű eszközöket olyan forrásokból, amelyekben nem bízol.", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Add meg a darab átfedést", "Enter Chunk Size": "Add meg a darab méretet", "Enter description": "Add meg a leírást", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Add meg a Github Raw URL-t", "Enter Google PSE API Key": "Add meg a Google PSE API kulcsot", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "Tudásbázis sikeresen törölve.", "Knowledge reset successfully.": "Tudásbázis sikeresen visszaállítva.", "Knowledge updated successfully": "Tudásbázis sikeresen frissítve", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "Kezdőlap mód", "Language": "Nyelv", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "Hagyja üresen az összes modell használatához, vagy válasszon ki konkrét modelleket", "Leave empty to use the default prompt, or enter a custom prompt": "Hagyja üresen az alapértelmezett prompt használatához, vagy adjon meg egyéni promptot", + "Leave model field empty to use the default model.": "", "Light": "Világos", "Listening...": "Hallgatás...", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "Ez visszaállítja a tudásbázist és szinkronizálja az összes fájlt. Szeretné folytatni?", "Thorough explanation": "Alapos magyarázat", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "Tika", "Tika Server URL required.": "Tika szerver URL szükséges.", "Tiktoken": "Tiktoken", diff --git a/src/lib/i18n/locales/id-ID/translation.json b/src/lib/i18n/locales/id-ID/translation.json index ff940f68a..0fefd426c 100644 --- a/src/lib/i18n/locales/id-ID/translation.json +++ b/src/lib/i18n/locales/id-ID/translation.json @@ -163,6 +163,7 @@ "Click here to": "Klik di sini untuk", "Click here to download user import template file.": "Klik di sini untuk mengunduh file templat impor pengguna.", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "Klik di sini untuk memilih", "Click here to select a csv file.": "Klik di sini untuk memilih file csv.", "Click here to select a py file.": "Klik di sini untuk memilih file py.", @@ -290,6 +291,7 @@ "Documentation": "Dokumentasi", "Documents": "Dokumen", "does not make any external connections, and your data stays securely on your locally hosted server.": "tidak membuat koneksi eksternal apa pun, dan data Anda tetap aman di server yang dihosting secara lokal.", + "Domain Filter List": "", "Don't have an account?": "Tidak memiliki akun?", "don't install random functions from sources you don't trust.": "", "don't install random tools from sources you don't trust.": "", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Masukkan Tumpang Tindih Chunk", "Enter Chunk Size": "Masukkan Ukuran Potongan", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Masukkan URL Mentah Github", "Enter Google PSE API Key": "Masukkan Kunci API Google PSE", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "", "Knowledge reset successfully.": "", "Knowledge updated successfully": "", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "", "Language": "Bahasa", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "", + "Leave model field empty to use the default model.": "", "Light": "Cahaya", "Listening...": "Mendengarkan", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "", "Thorough explanation": "Penjelasan menyeluruh", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "", "Tika Server URL required.": "", "Tiktoken": "", diff --git a/src/lib/i18n/locales/ie-GA/translation.json b/src/lib/i18n/locales/ie-GA/translation.json index a43402371..d6563feb5 100644 --- a/src/lib/i18n/locales/ie-GA/translation.json +++ b/src/lib/i18n/locales/ie-GA/translation.json @@ -163,6 +163,7 @@ "Click here to": "Cliceáil anseo chun", "Click here to download user import template file.": "Cliceáil anseo chun an comhad iompórtála úsáideora a íoslódáil.", "Click here to learn more about faster-whisper and see the available models.": "Cliceáil anseo chun níos mó a fhoghlaim faoi cogar níos tapúla agus na múnlaí atá ar fáil a fheiceáil.", + "Click here to see available models.": "", "Click here to select": "Cliceáil anseo chun roghnú", "Click here to select a csv file.": "Cliceáil anseo chun comhad csv a roghnú.", "Click here to select a py file.": "Cliceáil anseo chun comhad py a roghnú.", @@ -290,6 +291,7 @@ "Documentation": "Doiciméadú", "Documents": "Doiciméid", "does not make any external connections, and your data stays securely on your locally hosted server.": "ní dhéanann sé aon naisc sheachtracha, agus fanann do chuid sonraí go slán ar do fhreastalaí a óstáiltear go háitiúil.", + "Domain Filter List": "", "Don't have an account?": "Níl cuntas agat?", "don't install random functions from sources you don't trust.": "ná suiteáil feidhmeanna randamacha ó fhoinsí nach bhfuil muinín agat.", "don't install random tools from sources you don't trust.": "ná suiteáil uirlisí randamacha ó fhoinsí nach bhfuil muinín agat.", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Cuir isteach Chunk Forluí", "Enter Chunk Size": "Cuir isteach Méid an Chunc", "Enter description": "Iontráil cur síos", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "Cuir isteach Eochair Exa API", "Enter Github Raw URL": "Cuir isteach URL Github Raw", "Enter Google PSE API Key": "Cuir isteach Eochair API Google PSE", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "D'éirigh leis an eolas a scriosadh.", "Knowledge reset successfully.": "D'éirigh le hathshocrú eolais.", "Knowledge updated successfully": "D'éirigh leis an eolas a nuashonrú", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "Lipéad", "Landing Page Mode": "Mód Leathanach Tuirlingthe", "Language": "Teanga", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "Fág folamh chun gach múnla ón gcríochphointe \"{{URL}}/models\" a chur san áireamh", "Leave empty to include all models or select specific models": "Fág folamh chun gach múnla a chur san áireamh nó roghnaigh múnlaí sonracha", "Leave empty to use the default prompt, or enter a custom prompt": "Fág folamh chun an leid réamhshocraithe a úsáid, nó cuir isteach leid saincheaptha", + "Leave model field empty to use the default model.": "", "Light": "Solas", "Listening...": "Éisteacht...", "Llama.cpp": "Llama.cpp", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "Déanfaidh sé seo an bonn eolais a athshocrú agus gach comhad a shioncronú. Ar mhaith leat leanúint ar aghaidh?", "Thorough explanation": "Míniú críochnúil", "Thought for {{DURATION}}": "Smaoineamh ar {{DURATION}}", + "Thought for {{DURATION}} seconds": "", "Tika": "Tika", "Tika Server URL required.": "Teastaíonn URL Freastalaí Tika.", "Tiktoken": "Tictoken", diff --git a/src/lib/i18n/locales/it-IT/translation.json b/src/lib/i18n/locales/it-IT/translation.json index 5deb33da8..b7d9aaa49 100644 --- a/src/lib/i18n/locales/it-IT/translation.json +++ b/src/lib/i18n/locales/it-IT/translation.json @@ -163,6 +163,7 @@ "Click here to": "Clicca qui per", "Click here to download user import template file.": "", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "Clicca qui per selezionare", "Click here to select a csv file.": "Clicca qui per selezionare un file csv.", "Click here to select a py file.": "", @@ -290,6 +291,7 @@ "Documentation": "", "Documents": "Documenti", "does not make any external connections, and your data stays securely on your locally hosted server.": "non effettua connessioni esterne e i tuoi dati rimangono al sicuro sul tuo server ospitato localmente.", + "Domain Filter List": "", "Don't have an account?": "Non hai un account?", "don't install random functions from sources you don't trust.": "", "don't install random tools from sources you don't trust.": "", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Inserisci la sovrapposizione chunk", "Enter Chunk Size": "Inserisci la dimensione chunk", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Immettere l'URL grezzo di Github", "Enter Google PSE API Key": "Inserisci la chiave API PSE di Google", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "", "Knowledge reset successfully.": "", "Knowledge updated successfully": "", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "", "Language": "Lingua", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "", + "Leave model field empty to use the default model.": "", "Light": "Chiaro", "Listening...": "", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "", "Thorough explanation": "Spiegazione dettagliata", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "", "Tika Server URL required.": "", "Tiktoken": "", diff --git a/src/lib/i18n/locales/ja-JP/translation.json b/src/lib/i18n/locales/ja-JP/translation.json index f995f5ced..a1611d0c6 100644 --- a/src/lib/i18n/locales/ja-JP/translation.json +++ b/src/lib/i18n/locales/ja-JP/translation.json @@ -163,6 +163,7 @@ "Click here to": "ここをクリックして", "Click here to download user import template file.": "ユーザーテンプレートをインポートするにはここをクリックしてください。", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "選択するにはここをクリックしてください", "Click here to select a csv file.": "CSVファイルを選択するにはここをクリックしてください。", "Click here to select a py file.": "Pythonスクリプトファイルを選択するにはここをクリックしてください。", @@ -290,6 +291,7 @@ "Documentation": "ドキュメント", "Documents": "ドキュメント", "does not make any external connections, and your data stays securely on your locally hosted server.": "外部接続を行わず、データはローカルでホストされているサーバー上に安全に保持されます。", + "Domain Filter List": "", "Don't have an account?": "アカウントをお持ちではありませんか?", "don't install random functions from sources you don't trust.": "信頼出来ないソースからランダムFunctionをインストールしないでください。", "don't install random tools from sources you don't trust.": "信頼出来ないソースからランダムツールをインストールしないでください。", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "チャンクオーバーラップを入力してください", "Enter Chunk Size": "チャンクサイズを入力してください", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Github Raw URLを入力", "Enter Google PSE API Key": "Google PSE APIキーの入力", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "ナレッジベースの削除に成功しました", "Knowledge reset successfully.": "ナレッジベースのリセットに成功しました", "Knowledge updated successfully": "ナレッジベースのアップデートに成功しました", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "ランディングページモード", "Language": "言語", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "カスタムプロンプトを入力。空欄ならデフォルトプロンプト", + "Leave model field empty to use the default model.": "", "Light": "ライト", "Listening...": "", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "", "Thorough explanation": "詳細な説明", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "", "Tika Server URL required.": "", "Tiktoken": "", diff --git a/src/lib/i18n/locales/ka-GE/translation.json b/src/lib/i18n/locales/ka-GE/translation.json index 20799031d..446e9ba35 100644 --- a/src/lib/i18n/locales/ka-GE/translation.json +++ b/src/lib/i18n/locales/ka-GE/translation.json @@ -163,6 +163,7 @@ "Click here to": "დააკლიკე აქ", "Click here to download user import template file.": "", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "ასარჩევად, დააკლიკე აქ", "Click here to select a csv file.": "ასარჩევად, დააკლიკე აქ", "Click here to select a py file.": "", @@ -290,6 +291,7 @@ "Documentation": "", "Documents": "დოკუმენტები", "does not make any external connections, and your data stays securely on your locally hosted server.": "არ ამყარებს გარე კავშირებს და თქვენი მონაცემები უსაფრთხოდ რჩება თქვენს ადგილობრივ სერვერზე.", + "Domain Filter List": "", "Don't have an account?": "არ გაქვს ანგარიში?", "don't install random functions from sources you don't trust.": "", "don't install random tools from sources you don't trust.": "", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "შეიყვანეთ ნაწილის გადახურვა", "Enter Chunk Size": "შეიყვანე ბლოკის ზომა", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "შეიყვანეთ Github Raw URL", "Enter Google PSE API Key": "შეიყვანეთ Google PSE API გასაღები", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "", "Knowledge reset successfully.": "", "Knowledge updated successfully": "", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "", "Language": "ენა", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "", + "Leave model field empty to use the default model.": "", "Light": "მსუბუქი", "Listening...": "", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "", "Thorough explanation": "ვრცლად აღწერა", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "", "Tika Server URL required.": "", "Tiktoken": "", diff --git a/src/lib/i18n/locales/ko-KR/translation.json b/src/lib/i18n/locales/ko-KR/translation.json index 7b50c3118..145645fce 100644 --- a/src/lib/i18n/locales/ko-KR/translation.json +++ b/src/lib/i18n/locales/ko-KR/translation.json @@ -163,6 +163,7 @@ "Click here to": "여기를 클릭하면", "Click here to download user import template file.": "사용자 삽입 템플렛 파일을 다운받으려면 여기를 클릭하세요", "Click here to learn more about faster-whisper and see the available models.": "빠른 속삭임에 대해 배우거나 가능한 모델을 보려면 여기를 클릭하세요", + "Click here to see available models.": "", "Click here to select": "선택하려면 여기를 클릭하세요.", "Click here to select a csv file.": "csv 파일을 선택하려면 여기를 클릭하세요.", "Click here to select a py file.": "py 파일을 선택하려면 여기를 클릭하세요.", @@ -290,6 +291,7 @@ "Documentation": "문서 조사", "Documents": "문서", "does not make any external connections, and your data stays securely on your locally hosted server.": "외부와 어떠한 연결도 하지 않으며, 데이터는 로컬에서 호스팅되는 서버에 안전하게 유지됩니다.", + "Domain Filter List": "", "Don't have an account?": "계정이 없으신가요?", "don't install random functions from sources you don't trust.": "불분명한 출처를 가진 임의의 함수를 설치하지마세요", "don't install random tools from sources you don't trust.": "불분명한 출처를 가진 임의의 도구를 설치하지마세요", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "청크 오버랩 입력", "Enter Chunk Size": "청크 크기 입력", "Enter description": "설명 입력", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Github Raw URL 입력", "Enter Google PSE API Key": "Google PSE API 키 입력", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "성공적으로 지식 기반이 삭제되었습니다", "Knowledge reset successfully.": "성공적으로 지식 기반이 초기화되었습니다", "Knowledge updated successfully": "성공적으로 지식 기반이 업데이트되었습니다", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "랜딩페이지 모드", "Language": "언어", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "특정 모델을 선택하거나 모든 모델을 포함하고 싶으면 빈칸으로 남겨두세요", "Leave empty to use the default prompt, or enter a custom prompt": "기본 프롬프트를 사용하기 위해 빈칸으로 남겨두거나, 커스텀 프롬프트를 입력하세요", + "Leave model field empty to use the default model.": "", "Light": "라이트", "Listening...": "듣는 중...", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "지식 기반과 모든 파일 연동을 초기화합니다. 계속 하시겠습니까?", "Thorough explanation": "완전한 설명", "Thought for {{DURATION}}": "{{DURATION}} 동안 생각함", + "Thought for {{DURATION}} seconds": "", "Tika": "티카(Tika)", "Tika Server URL required.": "티카 서버 URL이 필요합니다", "Tiktoken": "틱토큰 (Tiktoken)", diff --git a/src/lib/i18n/locales/lt-LT/translation.json b/src/lib/i18n/locales/lt-LT/translation.json index d5af495ba..78d22dc00 100644 --- a/src/lib/i18n/locales/lt-LT/translation.json +++ b/src/lib/i18n/locales/lt-LT/translation.json @@ -163,6 +163,7 @@ "Click here to": "Paspauskite čia, kad:", "Click here to download user import template file.": "Pasauskite čia norėdami sukurti naudotojo įkėlimo šablono rinkmeną", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "Spauskite čia norėdami pasirinkti", "Click here to select a csv file.": "Spauskite čia tam, kad pasirinkti csv failą", "Click here to select a py file.": "Spauskite čia norėdami pasirinkti py failą", @@ -290,6 +291,7 @@ "Documentation": "Dokumentacija", "Documents": "Dokumentai", "does not make any external connections, and your data stays securely on your locally hosted server.": "neturi jokių išorinių ryšių ir duomenys lieka serveryje.", + "Domain Filter List": "", "Don't have an account?": "Neturite paskyros?", "don't install random functions from sources you don't trust.": "neinstaliuokite funkcijų iš nepatikimų šaltinių", "don't install random tools from sources you don't trust.": "neinstaliuokite įrankių iš nepatikimų šaltinių", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Įveskite blokų persidengimą", "Enter Chunk Size": "Įveskite blokų dydį", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Įveskite GitHub Raw nuorodą", "Enter Google PSE API Key": "Įveskite Google PSE API raktą", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "", "Knowledge reset successfully.": "", "Knowledge updated successfully": "", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "", "Language": "Kalba", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "", + "Leave model field empty to use the default model.": "", "Light": "Šviesus", "Listening...": "Klausoma...", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "", "Thorough explanation": "Platus paaiškinimas", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "Tika", "Tika Server URL required.": "Reiklainga Tika serverio nuorodą", "Tiktoken": "", diff --git a/src/lib/i18n/locales/ms-MY/translation.json b/src/lib/i18n/locales/ms-MY/translation.json index 096b96623..e9550ed3a 100644 --- a/src/lib/i18n/locales/ms-MY/translation.json +++ b/src/lib/i18n/locales/ms-MY/translation.json @@ -163,6 +163,7 @@ "Click here to": "Klik disini untuk", "Click here to download user import template file.": "Klik disini untuk memuat turun fail templat import pengguna", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "Klik disini untuk memilih", "Click here to select a csv file.": "Klik disini untuk memilih fail csv", "Click here to select a py file.": "Klik disini untuk memilih fail py", @@ -290,6 +291,7 @@ "Documentation": "Dokumentasi", "Documents": "Dokumen", "does not make any external connections, and your data stays securely on your locally hosted server.": "tidak membuat sebarang sambungan luaran, dan data anda kekal selamat pada pelayan yang dihoskan ditempat anda", + "Domain Filter List": "", "Don't have an account?": "Anda tidak mempunyai akaun?", "don't install random functions from sources you don't trust.": "jangan pasang mana-mana fungsi daripada sumber yang anda tidak percayai.", "don't install random tools from sources you don't trust.": "jangan pasang mana-mana alat daripada sumber yang anda tidak percayai.", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Masukkan Tindihan 'Chunk'", "Enter Chunk Size": "Masukkan Saiz 'Chunk'", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Masukkan URL 'Github Raw'", "Enter Google PSE API Key": "Masukkan kunci API Google PSE", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "", "Knowledge reset successfully.": "", "Knowledge updated successfully": "", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "", "Language": "Bahasa", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "", + "Leave model field empty to use the default model.": "", "Light": "Cerah", "Listening...": "Mendengar...", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "", "Thorough explanation": "Penjelasan menyeluruh", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "Tika", "Tika Server URL required.": "URL Pelayan Tika diperlukan.", "Tiktoken": "", diff --git a/src/lib/i18n/locales/nb-NO/translation.json b/src/lib/i18n/locales/nb-NO/translation.json index 2e8ff2ca6..45cbb0fc3 100644 --- a/src/lib/i18n/locales/nb-NO/translation.json +++ b/src/lib/i18n/locales/nb-NO/translation.json @@ -163,6 +163,7 @@ "Click here to": "Klikk her for å", "Click here to download user import template file.": "Klikk her for å hente ned malfilen for import av brukere.", "Click here to learn more about faster-whisper and see the available models.": "Klikk her for å lære mer om faster-whisper, og se de tilgjengelige modellene.", + "Click here to see available models.": "", "Click here to select": "Klikk her for å velge", "Click here to select a csv file.": "Klikk her for å velge en CSV-fil.", "Click here to select a py file.": "Klikk her for å velge en PY-fil.", @@ -290,6 +291,7 @@ "Documentation": "Dokumentasjon", "Documents": "Dokumenter", "does not make any external connections, and your data stays securely on your locally hosted server.": "ikke ingen tilkobling til eksterne tjenester. Dataene dine forblir sikkert på den lokale serveren.", + "Domain Filter List": "", "Don't have an account?": "Har du ingen konto?", "don't install random functions from sources you don't trust.": "ikke installer tilfeldige funksjoner fra kilder du ikke stoler på.", "don't install random tools from sources you don't trust.": "ikke installer tilfeldige verktøy fra kilder du ikke stoler på.", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Angi Chunk-overlapp", "Enter Chunk Size": "Angi Chunk-størrelse", "Enter description": "Angi beskrivelse", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Angi Github Raw-URL", "Enter Google PSE API Key": "Angi API-nøkkel for Google PSE", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "Kunnskap slettet.", "Knowledge reset successfully.": "Tilbakestilling av kunnskap vellykket.", "Knowledge updated successfully": "Kunnskap oppdatert", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "Etikett", "Landing Page Mode": "Modus for startside", "Language": "Språk", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "La stå tomt for å inkludere alle modeller fra endepunktet \"{{URL}}/api/models\"", "Leave empty to include all models or select specific models": "La stå tomt for å inkludere alle modeller", "Leave empty to use the default prompt, or enter a custom prompt": "La stå tomt for å bruke standard ledetekst, eller angi en tilpasset ledetekst", + "Leave model field empty to use the default model.": "", "Light": "Lys", "Listening...": "Lytter ...", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "Dette tilbakestiller kunnskapsbasen og synkroniserer alle filer. Vil du fortsette?", "Thorough explanation": "Grundig forklaring", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "Tika", "Tika Server URL required.": "Server-URL for Tika kreves.", "Tiktoken": "Tiktoken", diff --git a/src/lib/i18n/locales/nl-NL/translation.json b/src/lib/i18n/locales/nl-NL/translation.json index 11ce91834..47d39d2c1 100644 --- a/src/lib/i18n/locales/nl-NL/translation.json +++ b/src/lib/i18n/locales/nl-NL/translation.json @@ -163,6 +163,7 @@ "Click here to": "Klik hier om", "Click here to download user import template file.": "Klik hier om het sjabloonbestand voor gebruikersimport te downloaden.", "Click here to learn more about faster-whisper and see the available models.": "Klik hier om meer te leren over faster-whisper en de beschikbare modellen te bekijken.", + "Click here to see available models.": "", "Click here to select": "Klik hier om te selecteren", "Click here to select a csv file.": "Klik hier om een csv file te selecteren.", "Click here to select a py file.": "Klik hier om een py-bestand te selecteren.", @@ -290,6 +291,7 @@ "Documentation": "Documentatie", "Documents": "Documenten", "does not make any external connections, and your data stays securely on your locally hosted server.": "maakt geen externe verbindingen, en je gegevens blijven veilig op je lokaal gehoste server.", + "Domain Filter List": "", "Don't have an account?": "Heb je geen account?", "don't install random functions from sources you don't trust.": "installeer geen willekeurige functies van bronnen die je niet vertrouwd", "don't install random tools from sources you don't trust.": "installeer geen willekeurige gereedschappen van bronnen die je niet vertrouwd", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Voeg Chunk Overlap toe", "Enter Chunk Size": "Voeg Chunk Size toe", "Enter description": "Voer beschrijving in", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Voer de Github Raw-URL in", "Enter Google PSE API Key": "Voer de Google PSE API-sleutel in", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "Kennis succesvol verwijderd", "Knowledge reset successfully.": "Kennis succesvol gereset", "Knowledge updated successfully": "Kennis succesvol bijgewerkt", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "Label", "Landing Page Mode": "Landingspaginamodus", "Language": "Taal", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "Laat leeg om alle modellen van het \"{{URL}}/models\" endpoint toe te voegen", "Leave empty to include all models or select specific models": "Laat leeg om alle modellen mee te nemen, of selecteer specifieke modellen", "Leave empty to use the default prompt, or enter a custom prompt": "Laat leeg om de standaard prompt te gebruiken, of selecteer een aangepaste prompt", + "Leave model field empty to use the default model.": "", "Light": "Licht", "Listening...": "Aan het luisteren...", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "Dit zal de kennisdatabase resetten en alle bestanden synchroniseren. Wilt u doorgaan?", "Thorough explanation": "Gevorderde uitleg", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "Tika", "Tika Server URL required.": "Tika Server-URL vereist", "Tiktoken": "Tiktoken", diff --git a/src/lib/i18n/locales/pa-IN/translation.json b/src/lib/i18n/locales/pa-IN/translation.json index a112c50cf..a4d698003 100644 --- a/src/lib/i18n/locales/pa-IN/translation.json +++ b/src/lib/i18n/locales/pa-IN/translation.json @@ -163,6 +163,7 @@ "Click here to": "ਇੱਥੇ ਕਲਿੱਕ ਕਰੋ", "Click here to download user import template file.": "", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "ਚੁਣਨ ਲਈ ਇੱਥੇ ਕਲਿੱਕ ਕਰੋ", "Click here to select a csv file.": "CSV ਫਾਈਲ ਚੁਣਨ ਲਈ ਇੱਥੇ ਕਲਿੱਕ ਕਰੋ।", "Click here to select a py file.": "", @@ -290,6 +291,7 @@ "Documentation": "", "Documents": "ਡਾਕੂਮੈਂਟ", "does not make any external connections, and your data stays securely on your locally hosted server.": "ਕੋਈ ਬਾਹਰੀ ਕਨੈਕਸ਼ਨ ਨਹੀਂ ਬਣਾਉਂਦਾ, ਅਤੇ ਤੁਹਾਡਾ ਡਾਟਾ ਤੁਹਾਡੇ ਸਥਾਨਕ ਸਰਵਰ 'ਤੇ ਸੁਰੱਖਿਅਤ ਰਹਿੰਦਾ ਹੈ।", + "Domain Filter List": "", "Don't have an account?": "ਖਾਤਾ ਨਹੀਂ ਹੈ?", "don't install random functions from sources you don't trust.": "", "don't install random tools from sources you don't trust.": "", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "ਚੰਕ ਓਵਰਲੈਪ ਦਰਜ ਕਰੋ", "Enter Chunk Size": "ਚੰਕ ਆਕਾਰ ਦਰਜ ਕਰੋ", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Github ਕੱਚਾ URL ਦਾਖਲ ਕਰੋ", "Enter Google PSE API Key": "Google PSE API ਕੁੰਜੀ ਦਾਖਲ ਕਰੋ", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "", "Knowledge reset successfully.": "", "Knowledge updated successfully": "", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "", "Language": "ਭਾਸ਼ਾ", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "", + "Leave model field empty to use the default model.": "", "Light": "ਹਲਕਾ", "Listening...": "", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "", "Thorough explanation": "ਵਿਸਥਾਰ ਨਾਲ ਵਿਆਖਿਆ", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "", "Tika Server URL required.": "", "Tiktoken": "", diff --git a/src/lib/i18n/locales/pl-PL/translation.json b/src/lib/i18n/locales/pl-PL/translation.json index 6e33817b2..31ae4dec6 100644 --- a/src/lib/i18n/locales/pl-PL/translation.json +++ b/src/lib/i18n/locales/pl-PL/translation.json @@ -163,6 +163,7 @@ "Click here to": "Kliknij tutaj, żeby", "Click here to download user import template file.": "", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "Kliknij tutaj, aby wybrać", "Click here to select a csv file.": "Kliknij tutaj, żeby wybrać plik CSV", "Click here to select a py file.": "", @@ -290,6 +291,7 @@ "Documentation": "", "Documents": "Dokumenty", "does not make any external connections, and your data stays securely on your locally hosted server.": "nie nawiązuje żadnych zewnętrznych połączeń, a Twoje dane pozostają bezpiecznie na Twoim lokalnie hostowanym serwerze.", + "Domain Filter List": "", "Don't have an account?": "Nie masz konta?", "don't install random functions from sources you don't trust.": "", "don't install random tools from sources you don't trust.": "", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Wprowadź zakchodzenie bloku", "Enter Chunk Size": "Wprowadź rozmiar bloku", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Wprowadź nieprzetworzony adres URL usługi Github", "Enter Google PSE API Key": "Wprowadź klucz API Google PSE", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "", "Knowledge reset successfully.": "", "Knowledge updated successfully": "", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "", "Language": "Język", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "", + "Leave model field empty to use the default model.": "", "Light": "Jasny", "Listening...": "", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "", "Thorough explanation": "Dokładne wyjaśnienie", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "", "Tika Server URL required.": "", "Tiktoken": "", diff --git a/src/lib/i18n/locales/pt-BR/translation.json b/src/lib/i18n/locales/pt-BR/translation.json index c1a29eb16..cfe0cb8e9 100644 --- a/src/lib/i18n/locales/pt-BR/translation.json +++ b/src/lib/i18n/locales/pt-BR/translation.json @@ -163,6 +163,7 @@ "Click here to": "Clique aqui para", "Click here to download user import template file.": "Clique aqui para baixar o arquivo de modelo de importação de usuários.", "Click here to learn more about faster-whisper and see the available models.": "Clique aqui para aprender mais sobre Whisper e ver os modelos disponíveis.", + "Click here to see available models.": "", "Click here to select": "Clique aqui para enviar", "Click here to select a csv file.": "Clique aqui para enviar um arquivo csv.", "Click here to select a py file.": "Clique aqui para enviar um arquivo python.", @@ -290,6 +291,7 @@ "Documentation": "Documentação", "Documents": "Documentos", "does not make any external connections, and your data stays securely on your locally hosted server.": "não faz nenhuma conexão externa, e seus dados permanecem seguros no seu servidor local.", + "Domain Filter List": "", "Don't have an account?": "Não tem uma conta?", "don't install random functions from sources you don't trust.": "não instale funções aleatórias de fontes que você não confia.", "don't install random tools from sources you don't trust.": "não instale ferramentas aleatórias de fontes que você não confia.", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Digite a Sobreposição de Chunk", "Enter Chunk Size": "Digite o Tamanho do Chunk", "Enter description": "Digite a descrição", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Digite a URL bruta do Github", "Enter Google PSE API Key": "Digite a Chave API do Google PSE", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "Conhecimento excluído com sucesso.", "Knowledge reset successfully.": "Conhecimento resetado com sucesso.", "Knowledge updated successfully": "Conhecimento atualizado com sucesso", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "Rótulo", "Landing Page Mode": "Modo Landing Page", "Language": "Idioma", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "Deixe vazio para incluir todos os modelos do endpoint \"{{URL}}/models\"", "Leave empty to include all models or select specific models": "Deixe vazio para incluir todos os modelos ou selecione modelos especificos", "Leave empty to use the default prompt, or enter a custom prompt": "Deixe vazio para usar o prompt padrão, ou insira um prompt personalizado", + "Leave model field empty to use the default model.": "", "Light": "Claro", "Listening...": "Escutando...", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "Esta ação resetará a base de conhecimento e sincronizará todos os arquivos. Deseja continuar?", "Thorough explanation": "Explicação detalhada", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "Tika", "Tika Server URL required.": "URL do servidor Tika necessária.", "Tiktoken": "", diff --git a/src/lib/i18n/locales/pt-PT/translation.json b/src/lib/i18n/locales/pt-PT/translation.json index 66849c5a8..8bc08b09f 100644 --- a/src/lib/i18n/locales/pt-PT/translation.json +++ b/src/lib/i18n/locales/pt-PT/translation.json @@ -163,6 +163,7 @@ "Click here to": "Clique aqui para", "Click here to download user import template file.": "", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "Clique aqui para selecionar", "Click here to select a csv file.": "Clique aqui para selecionar um ficheiro csv.", "Click here to select a py file.": "Clique aqui para selecionar um ficheiro py", @@ -290,6 +291,7 @@ "Documentation": "Documentação", "Documents": "Documentos", "does not make any external connections, and your data stays securely on your locally hosted server.": "não faz conexões externas e os seus dados permanecem seguros no seu servidor alojado localmente.", + "Domain Filter List": "", "Don't have an account?": "Não tem uma conta?", "don't install random functions from sources you don't trust.": "", "don't install random tools from sources you don't trust.": "", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Escreva a Sobreposição de Fragmento", "Enter Chunk Size": "Escreva o Tamanho do Fragmento", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Escreva o URL cru do Github", "Enter Google PSE API Key": "Escreva a chave da API PSE do Google", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "", "Knowledge reset successfully.": "", "Knowledge updated successfully": "", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "", "Language": "Idioma", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "", + "Leave model field empty to use the default model.": "", "Light": "Claro", "Listening...": "A escutar...", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "", "Thorough explanation": "Explicação Minuciosa", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "", "Tika Server URL required.": "", "Tiktoken": "", diff --git a/src/lib/i18n/locales/ro-RO/translation.json b/src/lib/i18n/locales/ro-RO/translation.json index 32434979d..07233336d 100644 --- a/src/lib/i18n/locales/ro-RO/translation.json +++ b/src/lib/i18n/locales/ro-RO/translation.json @@ -163,6 +163,7 @@ "Click here to": "Apasă aici pentru", "Click here to download user import template file.": "Apasă aici pentru a descărca fișierul șablon de import utilizator.", "Click here to learn more about faster-whisper and see the available models.": "Faceți clic aici pentru a afla mai multe despre faster-whisper și pentru a vedea modelele disponibile.", + "Click here to see available models.": "", "Click here to select": "Apasă aici pentru a selecta", "Click here to select a csv file.": "Apasă aici pentru a selecta un fișier csv.", "Click here to select a py file.": "Apasă aici pentru a selecta un fișier py.", @@ -290,6 +291,7 @@ "Documentation": "Documentație", "Documents": "Documente", "does not make any external connections, and your data stays securely on your locally hosted server.": "nu face nicio conexiune externă, iar datele tale rămân în siguranță pe serverul găzduit local.", + "Domain Filter List": "", "Don't have an account?": "Nu ai un cont?", "don't install random functions from sources you don't trust.": "nu instala funcții aleatorii din surse în care nu ai încredere.", "don't install random tools from sources you don't trust.": "nu instala instrumente aleatorii din surse în care nu ai încredere.", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Introduceți Suprapunerea Blocului", "Enter Chunk Size": "Introduceți Dimensiunea Blocului", "Enter description": "Introduceți descrierea", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Introduceți URL-ul Raw de pe Github", "Enter Google PSE API Key": "Introduceți Cheia API Google PSE", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "Cunoștințele au fost șterse cu succes.", "Knowledge reset successfully.": "Resetarea cunoștințelor a fost efectuată cu succes.", "Knowledge updated successfully": "Cunoașterea a fost actualizată cu succes", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "Modul Pagină de Aterizare", "Language": "Limbă", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "Lăsați gol pentru a include toate modelele sau selectați modele specifice", "Leave empty to use the default prompt, or enter a custom prompt": "Lăsați gol pentru a utiliza promptul implicit sau introduceți un prompt personalizat", + "Leave model field empty to use the default model.": "", "Light": "Luminos", "Listening...": "Ascult...", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "Aceasta va reseta baza de cunoștințe și va sincroniza toate fișierele. Doriți să continuați?", "Thorough explanation": "Explicație detaliată", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "Tika", "Tika Server URL required.": "Este necesar URL-ul serverului Tika.", "Tiktoken": "Tiktoken", diff --git a/src/lib/i18n/locales/ru-RU/translation.json b/src/lib/i18n/locales/ru-RU/translation.json index a992d6d72..e6c6931c7 100644 --- a/src/lib/i18n/locales/ru-RU/translation.json +++ b/src/lib/i18n/locales/ru-RU/translation.json @@ -163,6 +163,7 @@ "Click here to": "Нажмите здесь, чтобы", "Click here to download user import template file.": "Нажмите здесь, чтобы загрузить файл шаблона импорта пользователя", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "Нажмите здесь, чтобы выбрать", "Click here to select a csv file.": "Нажмите здесь, чтобы выбрать csv-файл.", "Click here to select a py file.": "Нажмите здесь, чтобы выбрать py-файл", @@ -290,6 +291,7 @@ "Documentation": "Документация", "Documents": "Документы", "does not make any external connections, and your data stays securely on your locally hosted server.": "не устанавливает никаких внешних соединений, и ваши данные надежно хранятся на вашем локальном сервере.", + "Domain Filter List": "", "Don't have an account?": "У вас нет аккаунта?", "don't install random functions from sources you don't trust.": "не устанавливайте случайные функции из источников, которым вы не доверяете.", "don't install random tools from sources you don't trust.": "не устанавливайте случайные инструменты из источников, которым вы не доверяете.", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Введите перекрытие фрагмента", "Enter Chunk Size": "Введите размер фрагмента", "Enter description": "Введите описание", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Введите необработанный URL-адрес Github", "Enter Google PSE API Key": "Введите ключ API Google PSE", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "Знания успешно удалены.", "Knowledge reset successfully.": "Знания успешно сброшены.", "Knowledge updated successfully": "Знания успешно обновлены", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "Режим Целевой Страницы", "Language": "Язык", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "Оставьте пустым, чтобы использовать промпт по умолчанию, или введите пользовательский промпт", + "Leave model field empty to use the default model.": "", "Light": "Светлый", "Listening...": "Слушаю...", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "Это сбросит базу знаний и синхронизирует все файлы. Хотите продолжить?", "Thorough explanation": "Подробное объяснение", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "Tika", "Tika Server URL required.": "Требуется URL-адрес сервера Tika.", "Tiktoken": "", diff --git a/src/lib/i18n/locales/sk-SK/translation.json b/src/lib/i18n/locales/sk-SK/translation.json index 3b7cfea03..a8fe4aa0b 100644 --- a/src/lib/i18n/locales/sk-SK/translation.json +++ b/src/lib/i18n/locales/sk-SK/translation.json @@ -163,6 +163,7 @@ "Click here to": "Kliknite tu na", "Click here to download user import template file.": "Kliknite tu pre stiahnutie šablóny súboru na import užívateľov.", "Click here to learn more about faster-whisper and see the available models.": "Kliknite sem a dozviete sa viac o faster-whisper a pozrite si dostupné modely.", + "Click here to see available models.": "", "Click here to select": "Kliknite sem pre výber", "Click here to select a csv file.": "Kliknite sem pre výber súboru typu csv.", "Click here to select a py file.": "Kliknite sem pre výber {{py}} súboru.", @@ -290,6 +291,7 @@ "Documentation": "Dokumentácia", "Documents": "Dokumenty", "does not make any external connections, and your data stays securely on your locally hosted server.": "nevytvára žiadne externé pripojenia a vaše dáta zostávajú bezpečne na vašom lokálnom serveri.", + "Domain Filter List": "", "Don't have an account?": "Nemáte účet?", "don't install random functions from sources you don't trust.": "Neinštalujte náhodné funkcie zo zdrojov, ktorým nedôverujete.", "don't install random tools from sources you don't trust.": "Neinštalujte náhodné nástroje zo zdrojov, ktorým nedôverujete.", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Zadajte prekryv časti", "Enter Chunk Size": "Zadajte veľkosť časti", "Enter description": "Zadajte popis", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Zadajte URL adresu Github Raw", "Enter Google PSE API Key": "Zadajte kľúč rozhrania API Google PSE", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "Znalosti boli úspešne odstránené.", "Knowledge reset successfully.": "Úspešné obnovenie znalostí.", "Knowledge updated successfully": "Znalosti úspešne aktualizované", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "Režim vstupnej stránky", "Language": "Jazyk", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "Nechajte prázdne pre zahrnutie všetkých modelov alebo vyberte konkrétne modely.", "Leave empty to use the default prompt, or enter a custom prompt": "Nechajte prázdne pre použitie predvoleného podnetu, alebo zadajte vlastný podnet.", + "Leave model field empty to use the default model.": "", "Light": "Svetlo", "Listening...": "Počúvanie...", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "Toto obnoví znalostnú databázu a synchronizuje všetky súbory. Prajete si pokračovať?", "Thorough explanation": "Obsiahle vysvetlenie", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "Tika", "Tika Server URL required.": "Je vyžadovaná URL adresa servera Tika.", "Tiktoken": "Tiktoken", diff --git a/src/lib/i18n/locales/sr-RS/translation.json b/src/lib/i18n/locales/sr-RS/translation.json index 33b160ac5..7bc4253aa 100644 --- a/src/lib/i18n/locales/sr-RS/translation.json +++ b/src/lib/i18n/locales/sr-RS/translation.json @@ -163,6 +163,7 @@ "Click here to": "Кликните овде да", "Click here to download user import template file.": "", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "Кликните овде да изаберете", "Click here to select a csv file.": "Кликните овде да изаберете csv датотеку.", "Click here to select a py file.": "", @@ -290,6 +291,7 @@ "Documentation": "Документација", "Documents": "Документи", "does not make any external connections, and your data stays securely on your locally hosted server.": "не отвара никакве спољне везе и ваши подаци остају сигурно на вашем локално хостованом серверу.", + "Domain Filter List": "", "Don't have an account?": "Немате налог?", "don't install random functions from sources you don't trust.": "", "don't install random tools from sources you don't trust.": "", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Унесите преклапање делова", "Enter Chunk Size": "Унесите величину дела", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Унесите Гитхуб Раw УРЛ адресу", "Enter Google PSE API Key": "Унесите Гоогле ПСЕ АПИ кључ", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "", "Knowledge reset successfully.": "", "Knowledge updated successfully": "", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "Етикета", "Landing Page Mode": "Режим почетне стране", "Language": "Језик", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "", + "Leave model field empty to use the default model.": "", "Light": "Светла", "Listening...": "Слушам...", "Llama.cpp": "Llama.cpp", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "Ово ће обрисати базу знања и ускладити све датотеке. Да ли желите наставити?", "Thorough explanation": "Детаљно објашњење", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "", "Tika Server URL required.": "", "Tiktoken": "", diff --git a/src/lib/i18n/locales/sv-SE/translation.json b/src/lib/i18n/locales/sv-SE/translation.json index 94b4ce048..6fda8fada 100644 --- a/src/lib/i18n/locales/sv-SE/translation.json +++ b/src/lib/i18n/locales/sv-SE/translation.json @@ -163,6 +163,7 @@ "Click here to": "Klicka här för att", "Click here to download user import template file.": "", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "Klicka här för att välja", "Click here to select a csv file.": "Klicka här för att välja en csv-fil.", "Click here to select a py file.": "Klicka här för att välja en python-fil.", @@ -290,6 +291,7 @@ "Documentation": "Dokumentation", "Documents": "Dokument", "does not make any external connections, and your data stays securely on your locally hosted server.": "gör inga externa anslutningar, och dina data förblir säkra på din lokalt värdade server.", + "Domain Filter List": "", "Don't have an account?": "Har du inget konto?", "don't install random functions from sources you don't trust.": "", "don't install random tools from sources you don't trust.": "", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Ange chunköverlappning", "Enter Chunk Size": "Ange chunkstorlek", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Ange Github Raw URL", "Enter Google PSE API Key": "Ange Google PSE API-nyckel", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "", "Knowledge reset successfully.": "", "Knowledge updated successfully": "", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "", "Language": "Språk", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "", + "Leave model field empty to use the default model.": "", "Light": "Ljus", "Listening...": "Lyssnar...", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "", "Thorough explanation": "Djupare förklaring", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "", "Tika Server URL required.": "", "Tiktoken": "", diff --git a/src/lib/i18n/locales/th-TH/translation.json b/src/lib/i18n/locales/th-TH/translation.json index e8318d98e..530a8e00d 100644 --- a/src/lib/i18n/locales/th-TH/translation.json +++ b/src/lib/i18n/locales/th-TH/translation.json @@ -163,6 +163,7 @@ "Click here to": "คลิกที่นี่เพื่อ", "Click here to download user import template file.": "คลิกที่นี่เพื่อดาวน์โหลดไฟล์แม่แบบนำเข้าผู้ใช้", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "คลิกที่นี่เพื่อเลือก", "Click here to select a csv file.": "คลิกที่นี่เพื่อเลือกไฟล์ csv", "Click here to select a py file.": "คลิกที่นี่เพื่อเลือกไฟล์ py", @@ -290,6 +291,7 @@ "Documentation": "เอกสารประกอบ", "Documents": "เอกสาร", "does not make any external connections, and your data stays securely on your locally hosted server.": "ไม่เชื่อมต่อภายนอกใดๆ และข้อมูลของคุณจะอยู่บนเซิร์ฟเวอร์ที่โฮสต์ในท้องถิ่นของคุณอย่างปลอดภัย", + "Domain Filter List": "", "Don't have an account?": "ยังไม่มีบัญชี?", "don't install random functions from sources you don't trust.": "อย่าติดตั้งฟังก์ชันแบบสุ่มจากแหล่งที่คุณไม่ไว้วางใจ", "don't install random tools from sources you don't trust.": "อย่าติดตั้งเครื่องมือแบบสุ่มจากแหล่งที่คุณไม่ไว้วางใจ", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "ใส่การทับซ้อนส่วนข้อมูล", "Enter Chunk Size": "ใส่ขนาดส่วนข้อมูล", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "ใส่ URL ดิบของ Github", "Enter Google PSE API Key": "ใส่คีย์ API ของ Google PSE", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "", "Knowledge reset successfully.": "", "Knowledge updated successfully": "", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "", "Language": "ภาษา", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "", + "Leave model field empty to use the default model.": "", "Light": "แสง", "Listening...": "กำลังฟัง...", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "", "Thorough explanation": "คำอธิบายอย่างละเอียด", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "Tika", "Tika Server URL required.": "จำเป็นต้องมี URL ของเซิร์ฟเวอร์ Tika", "Tiktoken": "", diff --git a/src/lib/i18n/locales/tk-TW/translation.json b/src/lib/i18n/locales/tk-TW/translation.json index ac75f395d..cef4f22f3 100644 --- a/src/lib/i18n/locales/tk-TW/translation.json +++ b/src/lib/i18n/locales/tk-TW/translation.json @@ -163,6 +163,7 @@ "Click here to": "", "Click here to download user import template file.": "", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "", "Click here to select a csv file.": "", "Click here to select a py file.": "", @@ -290,6 +291,7 @@ "Documentation": "", "Documents": "", "does not make any external connections, and your data stays securely on your locally hosted server.": "", + "Domain Filter List": "", "Don't have an account?": "", "don't install random functions from sources you don't trust.": "", "don't install random tools from sources you don't trust.": "", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "", "Enter Chunk Size": "", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "", "Enter Google PSE API Key": "", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "", "Knowledge reset successfully.": "", "Knowledge updated successfully": "", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "", "Language": "", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "", + "Leave model field empty to use the default model.": "", "Light": "", "Listening...": "", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "", "Thorough explanation": "", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "", "Tika Server URL required.": "", "Tiktoken": "", diff --git a/src/lib/i18n/locales/tr-TR/translation.json b/src/lib/i18n/locales/tr-TR/translation.json index 86126cbf2..931aed1e5 100644 --- a/src/lib/i18n/locales/tr-TR/translation.json +++ b/src/lib/i18n/locales/tr-TR/translation.json @@ -163,6 +163,7 @@ "Click here to": "Şunu yapmak için buraya tıklayın:", "Click here to download user import template file.": "Kullanıcı içe aktarma şablon dosyasını indirmek için buraya tıklayın.", "Click here to learn more about faster-whisper and see the available models.": "faster-whisper hakkında daha fazla bilgi edinmek ve mevcut modelleri görmek için buraya tıklayın.", + "Click here to see available models.": "", "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.", "Click here to select a py file.": "Bir py dosyası seçmek için buraya tıklayın.", @@ -290,6 +291,7 @@ "Documentation": "Dökümantasyon", "Documents": "Belgeler", "does not make any external connections, and your data stays securely on your locally hosted server.": "herhangi bir harici bağlantı yapmaz ve verileriniz güvenli bir şekilde yerel olarak barındırılan sunucunuzda kalır.", + "Domain Filter List": "", "Don't have an account?": "Hesabınız yok mu?", "don't install random functions from sources you don't trust.": "Tanımadığınız kaynaklardan rastgele fonksiyonlar yüklemeyin.", "don't install random tools from sources you don't trust.": "Tanımadığınız kaynaklardan rastgele araçlar yüklemeyin.", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Chunk Örtüşmesini Girin", "Enter Chunk Size": "Chunk Boyutunu Girin", "Enter description": "Açıklama girin", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Github Raw URL'sini girin", "Enter Google PSE API Key": "Google PSE API Anahtarını Girin", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "Bilgi başarıyla silindi.", "Knowledge reset successfully.": "Bilgi başarıyla sıfırlandı.", "Knowledge updated successfully": "Bilgi başarıyla güncellendi", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "", "Language": "Dil", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "Tüm modelleri dahil etmek için boş bırakın veya belirli modelleri seçin", "Leave empty to use the default prompt, or enter a custom prompt": "Varsayılan promptu kullanmak için boş bırakın veya özel bir prompt girin", + "Leave model field empty to use the default model.": "", "Light": "Açık", "Listening...": "Dinleniyor...", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "Bu, bilgi tabanını sıfırlayacak ve tüm dosyaları senkronize edecek. Devam etmek istiyor musunuz?", "Thorough explanation": "Kapsamlı açıklama", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "", "Tika Server URL required.": "Tika Sunucu URL'si gereklidir.", "Tiktoken": "Tiktoken", diff --git a/src/lib/i18n/locales/uk-UA/translation.json b/src/lib/i18n/locales/uk-UA/translation.json index 237816be2..1d59e415e 100644 --- a/src/lib/i18n/locales/uk-UA/translation.json +++ b/src/lib/i18n/locales/uk-UA/translation.json @@ -163,6 +163,7 @@ "Click here to": "Натисніть тут, щоб", "Click here to download user import template file.": "Натисніть тут, щоб завантажити файл шаблону імпорту користувача.", "Click here to learn more about faster-whisper and see the available models.": "Натисніть тут, щоб дізнатися більше про faster-whisper та переглянути доступні моделі.", + "Click here to see available models.": "", "Click here to select": "Натисніть тут, щоб обрати", "Click here to select a csv file.": "Натисніть тут, щоб обрати csv-файл.", "Click here to select a py file.": "Натисніть тут, щоб обрати py-файл.", @@ -290,6 +291,7 @@ "Documentation": "Документація", "Documents": "Документи", "does not make any external connections, and your data stays securely on your locally hosted server.": "не встановлює жодних зовнішніх з'єднань, і ваші дані залишаються в безпеці на вашому локальному сервері.", + "Domain Filter List": "", "Don't have an account?": "Немає облікового запису?", "don't install random functions from sources you don't trust.": "не встановлюйте випадкові функції з джерел, яким ви не довіряєте.", "don't install random tools from sources you don't trust.": "не встановлюйте випадкові інструменти з джерел, яким ви не довіряєте.", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Введіть перекриття фрагменту", "Enter Chunk Size": "Введіть розмір фрагменту", "Enter description": "Введіть опис", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "Введіть ключ API Exa", "Enter Github Raw URL": "Введіть Raw URL-адресу Github", "Enter Google PSE API Key": "Введіть ключ API Google PSE", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "Знання успішно видалено.", "Knowledge reset successfully.": "Знання успішно скинуто.", "Knowledge updated successfully": "Знання успішно оновлено", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "Мітка", "Landing Page Mode": "Режим головної сторінки", "Language": "Мова", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "Залиште порожнім, щоб включити всі моделі з кінцевої точки \"{{URL}}/models\"", "Leave empty to include all models or select specific models": "Залиште порожнім, щоб включити всі моделі, або виберіть конкретні моделі.", "Leave empty to use the default prompt, or enter a custom prompt": "Залиште порожнім для використання стандартного запиту, або введіть власний запит", + "Leave model field empty to use the default model.": "", "Light": "Світла", "Listening...": "Слухаю...", "Llama.cpp": "Llama.cpp", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "Це скине базу знань і синхронізує всі файли. Ви бажаєте продовжити?", "Thorough explanation": "Детальне пояснення", "Thought for {{DURATION}}": "Думка для {{DURATION}}", + "Thought for {{DURATION}} seconds": "", "Tika": "Tika", "Tika Server URL required.": "Потрібна URL-адреса сервера Tika.", "Tiktoken": "Tiktoken", diff --git a/src/lib/i18n/locales/ur-PK/translation.json b/src/lib/i18n/locales/ur-PK/translation.json index ef4509805..80f26500a 100644 --- a/src/lib/i18n/locales/ur-PK/translation.json +++ b/src/lib/i18n/locales/ur-PK/translation.json @@ -163,6 +163,7 @@ "Click here to": "یہاں کلک کریں تاکہ", "Click here to download user import template file.": "صارف امپورٹ ٹیمپلیٹ فائل ڈاؤن لوڈ کرنے کے لیے یہاں کلک کریں", "Click here to learn more about faster-whisper and see the available models.": "تیز ویسپر کے بارے میں مزید جاننے اور دستیاب ماڈلز دیکھنے کے لیے یہاں کلک کریں", + "Click here to see available models.": "", "Click here to select": "منتخب کرنے کے لیے یہاں کلک کریں", "Click here to select a csv file.": "یہاں کلک کریں تاکہ CSV فائل منتخب کریں", "Click here to select a py file.": "یہاں کلک کریں تاکہ پی وائی فائل منتخب کریں", @@ -290,6 +291,7 @@ "Documentation": "دستاویزات", "Documents": "دستاویزات", "does not make any external connections, and your data stays securely on your locally hosted server.": "آپ کا ڈیٹا مقامی طور پر میزبانی شدہ سرور پر محفوظ رہتا ہے اور کوئی بیرونی رابطے نہیں بناتا", + "Domain Filter List": "", "Don't have an account?": "کیا آپ کے پاس اکاؤنٹ نہیں ہے؟", "don't install random functions from sources you don't trust.": "غیر معتبر ذرائع سے بے ترتیب فنکشنز انسٹال نہ کریں", "don't install random tools from sources you don't trust.": "جو ذرائع آپ پر بھروسہ نہیں کرتے ان سے بے ترتیب ٹولز انسٹال نہ کریں", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "چنک اوورلیپ درج کریں", "Enter Chunk Size": "چنک سائز درج کریں", "Enter description": "تفصیل درج کریں", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "گیٹ ہب را یو آر ایل درج کریں", "Enter Google PSE API Key": "گوگل PSE API کلید درج کریں", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "معلومات کامیابی سے حذف ہو گئیں", "Knowledge reset successfully.": "علم کو کامیابی کے ساتھ دوبارہ ترتیب دیا گیا", "Knowledge updated successfully": "علم کامیابی سے تازہ کر دیا گیا ہے", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "لینڈر صفحہ موڈ", "Language": "زبان", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "تمام ماڈلز کو شامل کرنے کے لئے خالی چھوڑ دیں یا مخصوص ماڈلز منتخب کریں", "Leave empty to use the default prompt, or enter a custom prompt": "خالی چھوڑیں تاکہ ڈیفالٹ پرامپٹ استعمال ہو، یا ایک حسب ضرورت پرامپٹ درج کریں", + "Leave model field empty to use the default model.": "", "Light": "روشنی", "Listening...": "سن رہے ہیں...", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "یہ علمی بنیاد کو دوبارہ ترتیب دے گا اور تمام فائلز کو متوازن کرے گا کیا آپ جاری رکھنا چاہتے ہیں؟", "Thorough explanation": "مکمل وضاحت", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "ٹیکہ", "Tika Server URL required.": "ٹکا سرور یو آر ایل درکار ہے", "Tiktoken": "ٹک ٹوکن", diff --git a/src/lib/i18n/locales/vi-VN/translation.json b/src/lib/i18n/locales/vi-VN/translation.json index 057c70bc2..f9f6178f3 100644 --- a/src/lib/i18n/locales/vi-VN/translation.json +++ b/src/lib/i18n/locales/vi-VN/translation.json @@ -163,6 +163,7 @@ "Click here to": "Nhấn vào đây để", "Click here to download user import template file.": "Bấm vào đây để tải xuống tệp template của người dùng.", "Click here to learn more about faster-whisper and see the available models.": "", + "Click here to see available models.": "", "Click here to select": "Bấm vào đây để chọn", "Click here to select a csv file.": "Nhấn vào đây để chọn tệp csv", "Click here to select a py file.": "Nhấn vào đây để chọn tệp py", @@ -290,6 +291,7 @@ "Documentation": "Tài liệu", "Documents": "Tài liệu", "does not make any external connections, and your data stays securely on your locally hosted server.": "không thực hiện bất kỳ kết nối ngoài nào, và dữ liệu của bạn vẫn được lưu trữ an toàn trên máy chủ lưu trữ cục bộ của bạn.", + "Domain Filter List": "", "Don't have an account?": "Không có tài khoản?", "don't install random functions from sources you don't trust.": "không cài đặt các function từ các nguồn mà bạn không tin tưởng.", "don't install random tools from sources you don't trust.": "không cài đặt các tools từ các nguồn mà bạn không tin tưởng.", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "Nhập Chunk chồng lấn (overlap)", "Enter Chunk Size": "Nhập Kích thước Chunk", "Enter description": "", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "", "Enter Github Raw URL": "Nhập URL cho Github Raw", "Enter Google PSE API Key": "Nhập Google PSE API Key", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "", "Knowledge reset successfully.": "", "Knowledge updated successfully": "", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "", "Landing Page Mode": "", "Language": "Ngôn ngữ", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "", "Leave empty to include all models or select specific models": "", "Leave empty to use the default prompt, or enter a custom prompt": "", + "Leave model field empty to use the default model.": "", "Light": "Sáng", "Listening...": "Đang nghe...", "Llama.cpp": "", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "", "Thorough explanation": "Giải thích kỹ lưỡng", "Thought for {{DURATION}}": "", + "Thought for {{DURATION}} seconds": "", "Tika": "", "Tika Server URL required.": "Bắt buộc phải nhập URL cho Tika Server ", "Tiktoken": "", diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index 9add4e073..7c6161cfc 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -163,6 +163,7 @@ "Click here to": "点击", "Click here to download user import template file.": "点击此处下载用户导入所需的模板文件。", "Click here to learn more about faster-whisper and see the available models.": "点击此处了解更多关于faster-whisper的信息,并查看可用的模型。", + "Click here to see available models.": "", "Click here to select": "点击这里选择", "Click here to select a csv file.": "点击此处选择 csv 文件。", "Click here to select a py file.": "点击此处选择 py 文件。", @@ -290,6 +291,7 @@ "Documentation": "帮助文档", "Documents": "文档", "does not make any external connections, and your data stays securely on your locally hosted server.": "不会与外部建立任何连接,您的数据会安全地存储在本地托管的服务器上。", + "Domain Filter List": "", "Don't have an account?": "没有账号?", "don't install random functions from sources you don't trust.": "切勿随意从不完全可信的来源安装函数。", "don't install random tools from sources you don't trust.": "切勿随意从不完全可信的来源安装工具。", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "输入块重叠 (Chunk Overlap)", "Enter Chunk Size": "输入块大小 (Chunk Size)", "Enter description": "输入简介描述", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "输入 Exa API 密钥", "Enter Github Raw URL": "输入 Github Raw 地址", "Enter Google PSE API Key": "输入 Google PSE API 密钥", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "知识成功删除", "Knowledge reset successfully.": "知识成功重置", "Knowledge updated successfully": "知识成功更新", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "标签", "Landing Page Mode": "默认主页样式", "Language": "语言", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "留空表示包含所有来自 \"{{URL}}/models\" 的模型", "Leave empty to include all models or select specific models": "留空表示包含所有模型或请选择模型", "Leave empty to use the default prompt, or enter a custom prompt": "留空以使用默认提示词,或输入自定义提示词。", + "Leave model field empty to use the default model.": "", "Light": "浅色", "Listening...": "正在倾听...", "Llama.cpp": "Llama.cpp", diff --git a/src/lib/i18n/locales/zh-TW/translation.json b/src/lib/i18n/locales/zh-TW/translation.json index 574435e12..cf1f3fdef 100644 --- a/src/lib/i18n/locales/zh-TW/translation.json +++ b/src/lib/i18n/locales/zh-TW/translation.json @@ -163,6 +163,7 @@ "Click here to": "點選這裡", "Click here to download user import template file.": "點選這裡下載使用者匯入範本檔案。", "Click here to learn more about faster-whisper and see the available models.": "點選這裡了解更多關於 faster-whisper 的資訊並查看可用的模型。", + "Click here to see available models.": "", "Click here to select": "點選這裡選擇", "Click here to select a csv file.": "點選這裡選擇 CSV 檔案。", "Click here to select a py file.": "點選這裡選擇 Python 檔案。", @@ -290,6 +291,7 @@ "Documentation": "文件", "Documents": "文件", "does not make any external connections, and your data stays securely on your locally hosted server.": "不會建立任何外部連線,而且您的資料會安全地儲存在您本機伺服器上。", + "Domain Filter List": "", "Don't have an account?": "還沒註冊帳號嗎?", "don't install random functions from sources you don't trust.": "請勿從您無法信任的來源安裝隨機函式。", "don't install random tools from sources you don't trust.": "請勿從您無法信任的來源安裝隨機工具。", @@ -349,6 +351,7 @@ "Enter Chunk Overlap": "輸入區塊重疊", "Enter Chunk Size": "輸入區塊大小", "Enter description": "輸入描述", + "Enter domains separated by commas (e.g., example.com,site.org)": "", "Enter Exa API Key": "輸入 Exa API 金鑰", "Enter Github Raw URL": "輸入 GitHub Raw URL", "Enter Google PSE API Key": "輸入 Google PSE API 金鑰", @@ -552,6 +555,8 @@ "Knowledge deleted successfully.": "知識刪除成功。", "Knowledge reset successfully.": "知識重設成功。", "Knowledge updated successfully": "知識更新成功", + "Kokoro.js (Browser)": "", + "Kokoro.js Dtype": "", "Label": "標籤", "Landing Page Mode": "首頁模式", "Language": "語言", @@ -566,6 +571,7 @@ "Leave empty to include all models from \"{{URL}}/models\" endpoint": "留空以包含來自 \"{{URL}}/models\" 端點的所有模型", "Leave empty to include all models or select specific models": "留空以包含所有模型或選擇特定模型", "Leave empty to use the default prompt, or enter a custom prompt": "留空以使用預設提示詞,或輸入自訂提示詞", + "Leave model field empty to use the default model.": "", "Light": "淺色", "Listening...": "正在聆聽...", "Llama.cpp": "Llama.cpp", @@ -944,6 +950,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "這將重設知識庫並同步所有檔案。您確定要繼續嗎?", "Thorough explanation": "詳細解釋", "Thought for {{DURATION}}": "思考時間 {{DURATION}}", + "Thought for {{DURATION}} seconds": "", "Tika": "Tika", "Tika Server URL required.": "需要 Tika 伺服器 URL。", "Tiktoken": "Tiktoken", From a22d1d54104e72d30af4be65f4800b1ea7ba078a Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Sun, 9 Feb 2025 22:43:32 -0800 Subject: [PATCH 14/56] refac: code block --- .../components/chat/Messages/CodeBlock.svelte | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/lib/components/chat/Messages/CodeBlock.svelte b/src/lib/components/chat/Messages/CodeBlock.svelte index f4efaba73..7a17ee607 100644 --- a/src/lib/components/chat/Messages/CodeBlock.svelte +++ b/src/lib/components/chat/Messages/CodeBlock.svelte @@ -5,7 +5,14 @@ import { v4 as uuidv4 } from 'uuid'; - import { getContext, getAllContexts, onMount, tick, createEventDispatcher } from 'svelte'; + import { + getContext, + getAllContexts, + onMount, + tick, + createEventDispatcher, + onDestroy + } from 'svelte'; import { copyToClipboard } from '$lib/utils'; import 'highlight.js/styles/github-dark.min.css'; @@ -31,6 +38,8 @@ export let editorClassName = ''; export let stickyButtonsClassName = 'top-8'; + let pyodideWorker = null; + let _code = ''; $: if (code) { updateCode(); @@ -138,7 +147,7 @@ console.log(packages); - const pyodideWorker = new PyodideWorker(); + pyodideWorker = new PyodideWorker(); pyodideWorker.postMessage({ id: id, @@ -280,6 +289,12 @@ }); } }); + + onDestroy(() => { + if (pyodideWorker) { + pyodideWorker.terminate(); + } + });
From 205ce635f6f678e8cd5f5aa3ab1dac6325f784fb Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Sun, 9 Feb 2025 23:42:27 -0800 Subject: [PATCH 15/56] feat: Kokoro-js TTS support --- .../chat/Messages/ResponseMessage.svelte | 165 +++++++++------- src/lib/components/chat/Settings/Audio.svelte | 176 ++++++++++++++++-- src/lib/stores/index.ts | 2 + src/lib/workers/KokoroWorker.ts | 70 +++++++ src/lib/workers/kokoro.worker.ts | 53 ++++++ 5 files changed, 388 insertions(+), 78 deletions(-) create mode 100644 src/lib/workers/KokoroWorker.ts create mode 100644 src/lib/workers/kokoro.worker.ts diff --git a/src/lib/components/chat/Messages/ResponseMessage.svelte b/src/lib/components/chat/Messages/ResponseMessage.svelte index f6a4b0bc0..c83980482 100644 --- a/src/lib/components/chat/Messages/ResponseMessage.svelte +++ b/src/lib/components/chat/Messages/ResponseMessage.svelte @@ -4,12 +4,18 @@ import { createEventDispatcher } from 'svelte'; import { onMount, tick, getContext } from 'svelte'; + import type { Writable } from 'svelte/store'; + import type { i18n as i18nType } from 'i18next'; const i18n = getContext>('i18n'); const dispatch = createEventDispatcher(); - import { config, models, settings, user } from '$lib/stores'; + import { createNewFeedback, getFeedbackById, updateFeedbackById } from '$lib/apis/evaluations'; + import { getChatById } from '$lib/apis/chats'; + import { generateTags } from '$lib/apis'; + + import { config, models, settings, TTSWorker, user } from '$lib/stores'; import { synthesizeOpenAISpeech } from '$lib/apis/audio'; import { imageGenerations } from '$lib/apis/images'; import { @@ -34,13 +40,8 @@ import Error from './Error.svelte'; import Citations from './Citations.svelte'; import CodeExecutions from './CodeExecutions.svelte'; - - import type { Writable } from 'svelte/store'; - import type { i18n as i18nType } from 'i18next'; import ContentRenderer from './ContentRenderer.svelte'; - import { createNewFeedback, getFeedbackById, updateFeedbackById } from '$lib/apis/evaluations'; - import { getChatById } from '$lib/apis/chats'; - import { generateTags } from '$lib/apis'; + import { KokoroWorker } from '$lib/workers/KokoroWorker'; interface MessageType { id: string; @@ -193,62 +194,7 @@ speaking = true; - if ($config.audio.tts.engine !== '') { - loadingSpeech = true; - - const messageContentParts: string[] = getMessageContentParts( - message.content, - $config?.audio?.tts?.split_on ?? 'punctuation' - ); - - if (!messageContentParts.length) { - console.log('No content to speak'); - toast.info($i18n.t('No content to speak')); - - speaking = false; - loadingSpeech = false; - return; - } - - console.debug('Prepared message content for TTS', messageContentParts); - - audioParts = messageContentParts.reduce( - (acc, _sentence, idx) => { - acc[idx] = null; - return acc; - }, - {} as typeof audioParts - ); - - let lastPlayedAudioPromise = Promise.resolve(); // Initialize a promise that resolves immediately - - for (const [idx, sentence] of messageContentParts.entries()) { - const res = await synthesizeOpenAISpeech( - localStorage.token, - $settings?.audio?.tts?.defaultVoice === $config.audio.tts.voice - ? ($settings?.audio?.tts?.voice ?? $config?.audio?.tts?.voice) - : $config?.audio?.tts?.voice, - sentence - ).catch((error) => { - console.error(error); - toast.error(`${error}`); - - speaking = false; - loadingSpeech = false; - }); - - if (res) { - const blob = await res.blob(); - const blobUrl = URL.createObjectURL(blob); - const audio = new Audio(blobUrl); - audio.playbackRate = $settings.audio?.tts?.playbackRate ?? 1; - - audioParts[idx] = audio; - loadingSpeech = false; - lastPlayedAudioPromise = lastPlayedAudioPromise.then(() => playAudio(idx)); - } - } - } else { + if ($config.audio.tts.engine === '') { let voices = []; const getVoicesLoop = setInterval(() => { voices = speechSynthesis.getVoices(); @@ -283,6 +229,99 @@ speechSynthesis.speak(speak); } }, 100); + } else { + loadingSpeech = true; + + const messageContentParts: string[] = getMessageContentParts( + message.content, + $config?.audio?.tts?.split_on ?? 'punctuation' + ); + + if (!messageContentParts.length) { + console.log('No content to speak'); + toast.info($i18n.t('No content to speak')); + + speaking = false; + loadingSpeech = false; + return; + } + + console.debug('Prepared message content for TTS', messageContentParts); + + audioParts = messageContentParts.reduce( + (acc, _sentence, idx) => { + acc[idx] = null; + return acc; + }, + {} as typeof audioParts + ); + + let lastPlayedAudioPromise = Promise.resolve(); // Initialize a promise that resolves immediately + + if ($settings.audio?.tts?.engine === 'browser-kokoro') { + if (!$TTSWorker) { + await TTSWorker.set( + new KokoroWorker({ + dtype: $settings.audio?.tts?.engineConfig?.dtype ?? 'fp32' + }) + ); + + await $TTSWorker.init(); + } + + console.log($TTSWorker); + + for (const [idx, sentence] of messageContentParts.entries()) { + const blob = await $TTSWorker + .generate({ + text: sentence, + voice: $settings?.audio?.tts?.voice ?? $config?.audio?.tts?.voice + }) + .catch((error) => { + console.error(error); + toast.error(`${error}`); + + speaking = false; + loadingSpeech = false; + }); + + if (blob) { + const audio = new Audio(blob); + audio.playbackRate = $settings.audio?.tts?.playbackRate ?? 1; + + audioParts[idx] = audio; + loadingSpeech = false; + lastPlayedAudioPromise = lastPlayedAudioPromise.then(() => playAudio(idx)); + } + } + } else { + for (const [idx, sentence] of messageContentParts.entries()) { + const res = await synthesizeOpenAISpeech( + localStorage.token, + $settings?.audio?.tts?.defaultVoice === $config.audio.tts.voice + ? ($settings?.audio?.tts?.voice ?? $config?.audio?.tts?.voice) + : $config?.audio?.tts?.voice, + sentence + ).catch((error) => { + console.error(error); + toast.error(`${error}`); + + speaking = false; + loadingSpeech = false; + }); + + if (res) { + const blob = await res.blob(); + const blobUrl = URL.createObjectURL(blob); + const audio = new Audio(blobUrl); + audio.playbackRate = $settings.audio?.tts?.playbackRate ?? 1; + + audioParts[idx] = audio; + loadingSpeech = false; + lastPlayedAudioPromise = lastPlayedAudioPromise.then(() => playAudio(idx)); + } + } + } } }; diff --git a/src/lib/components/chat/Settings/Audio.svelte b/src/lib/components/chat/Settings/Audio.svelte index 3f9fa9335..ce9cae771 100644 --- a/src/lib/components/chat/Settings/Audio.svelte +++ b/src/lib/components/chat/Settings/Audio.svelte @@ -1,11 +1,14 @@
{$i18n.t('TTS Settings')}
+
+
{$i18n.t('Text-to-Speech Engine')}
+
+ +
+
+ + {#if TTSEngine === 'browser-kokoro'} +
+
{$i18n.t('Kokoro.js Dtype')}
+
+ +
+
+ {/if} +
{$i18n.t('Auto-playback response')}
@@ -178,7 +285,46 @@
- {#if $config.audio.tts.engine === ''} + {#if TTSEngine === 'browser-kokoro'} + {#if TTSModel} +
+
{$i18n.t('Set Voice')}
+
+
+ + + + {#each voices as voice} + + {/each} + +
+
+
+ {:else} +
+
+ + +
+ {$i18n.t('Loading Kokoro.js...')} + {TTSModelProgress && TTSModelProgress.status === 'progress' + ? `(${Math.round(TTSModelProgress.progress * 10) / 10}%)` + : ''} +
+
+ +
+ {$i18n.t('Please do not close the settings page while loading the model.')} +
+
+ {/if} + {:else if $config.audio.tts.engine === ''}
{$i18n.t('Set Voice')}
diff --git a/src/lib/stores/index.ts b/src/lib/stores/index.ts index 1b8839556..f96670cb6 100644 --- a/src/lib/stores/index.ts +++ b/src/lib/stores/index.ts @@ -41,6 +41,8 @@ export const shortCodesToEmojis = writable( }, {}) ); +export const TTSWorker = writable(null); + export const chatId = writable(''); export const chatTitle = writable(''); diff --git a/src/lib/workers/KokoroWorker.ts b/src/lib/workers/KokoroWorker.ts new file mode 100644 index 000000000..e5cc4b930 --- /dev/null +++ b/src/lib/workers/KokoroWorker.ts @@ -0,0 +1,70 @@ +import WorkerInstance from '$lib/workers/kokoro.worker?worker'; + +export class KokoroWorker { + private worker: Worker | null = null; + private initialized: boolean = false; + private dtype: string; + + constructor(dtype: string = 'fp32') { + this.dtype = dtype; + } + + public async init() { + if (this.worker) { + console.warn('KokoroWorker is already initialized.'); + return; + } + + this.worker = new WorkerInstance(); + + return new Promise((resolve, reject) => { + this.worker!.onmessage = (event) => { + const { status, error } = event.data; + + if (status === 'init:complete') { + this.initialized = true; + resolve(); + } else if (status === 'init:error') { + console.error(error); + this.initialized = false; + reject(new Error(error)); + } + }; + + this.worker!.postMessage({ + type: 'init', + payload: { dtype: this.dtype } + }); + }); + } + + public async generate({ text, voice }: { text: string; voice: string }): Promise { + if (!this.initialized || !this.worker) { + throw new Error('KokoroTTS Worker is not initialized yet.'); + } + + return new Promise((resolve, reject) => { + this.worker.postMessage({ type: 'generate', payload: { text, voice } }); + + const handleMessage = (event: MessageEvent) => { + if (event.data.status === 'generate:complete') { + this.worker!.removeEventListener('message', handleMessage); + resolve(event.data.audioUrl); + } else if (event.data.status === 'generate:error') { + this.worker!.removeEventListener('message', handleMessage); + reject(new Error(event.data.error)); + } + }; + + this.worker.addEventListener('message', handleMessage); + }); + } + + public terminate() { + if (this.worker) { + this.worker.terminate(); + this.worker = null; + this.initialized = false; + } + } +} diff --git a/src/lib/workers/kokoro.worker.ts b/src/lib/workers/kokoro.worker.ts new file mode 100644 index 000000000..39277330f --- /dev/null +++ b/src/lib/workers/kokoro.worker.ts @@ -0,0 +1,53 @@ +import { KokoroTTS } from 'kokoro-js'; + +let tts; +let isInitialized = false; // Flag to track initialization status +const DEFAULT_MODEL_ID = 'onnx-community/Kokoro-82M-v1.0-ONNX'; // Default model + +self.onmessage = async (event) => { + const { type, payload } = event.data; + + if (type === 'init') { + let { model_id, dtype } = payload; + model_id = model_id || DEFAULT_MODEL_ID; // Use default model if none provided + + self.postMessage({ status: 'init:start' }); + + try { + tts = await KokoroTTS.from_pretrained(model_id, { + dtype, + device: !!navigator?.gpu ? 'webgpu' : 'wasm' // Detect WebGPU + }); + isInitialized = true; // Mark as initialized after successful loading + self.postMessage({ status: 'init:complete' }); + } catch (error) { + isInitialized = false; // Ensure it's marked as false on failure + self.postMessage({ status: 'init:error', error: error.message }); + } + } + + if (type === 'generate') { + if (!isInitialized || !tts) { + // Ensure model is initialized + self.postMessage({ status: 'generate:error', error: 'TTS model not initialized' }); + return; + } + + const { text, voice } = payload; + self.postMessage({ status: 'generate:start' }); + + try { + const rawAudio = await tts.generate(text, { voice }); + const blob = await rawAudio.toBlob(); + const blobUrl = URL.createObjectURL(blob); + self.postMessage({ status: 'generate:complete', audioUrl: blobUrl }); + } catch (error) { + self.postMessage({ status: 'generate:error', error: error.message }); + } + } + + if (type === 'status') { + // Respond with the current initialization status + self.postMessage({ status: 'status:check', initialized: isInitialized }); + } +}; From d95e5e0ba5dd8ce9b2b94866ca6ee4fcb720e57a Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Sun, 9 Feb 2025 23:54:24 -0800 Subject: [PATCH 16/56] enh: kokorojs call support --- src/lib/components/chat/MessageInput.svelte | 14 +++- .../chat/MessageInput/CallOverlay.svelte | 19 ++++- .../chat/Messages/ResponseMessage.svelte | 2 - src/lib/workers/KokoroWorker.ts | 84 +++++++++++++------ 4 files changed, 90 insertions(+), 29 deletions(-) diff --git a/src/lib/components/chat/MessageInput.svelte b/src/lib/components/chat/MessageInput.svelte index 261be72ed..f9c6786f6 100644 --- a/src/lib/components/chat/MessageInput.svelte +++ b/src/lib/components/chat/MessageInput.svelte @@ -16,7 +16,8 @@ showCallOverlay, tools, user as _user, - showControls + showControls, + TTSWorker } from '$lib/stores'; import { blobToFile, compressImage, createMessagesList, findWordIndices } from '$lib/utils'; @@ -43,6 +44,7 @@ import PhotoSolid from '../icons/PhotoSolid.svelte'; import Photo from '../icons/Photo.svelte'; import CommandLine from '../icons/CommandLine.svelte'; + import { KokoroWorker } from '$lib/workers/KokoroWorker'; const i18n = getContext('i18n'); @@ -1281,6 +1283,16 @@ stream = null; + if (!$TTSWorker) { + await TTSWorker.set( + new KokoroWorker({ + dtype: $settings.audio?.tts?.engineConfig?.dtype ?? 'fp32' + }) + ); + + await $TTSWorker.init(); + } + showCallOverlay.set(true); showControls.set(true); } catch (err) { diff --git a/src/lib/components/chat/MessageInput/CallOverlay.svelte b/src/lib/components/chat/MessageInput/CallOverlay.svelte index 466fe7950..c7a2d4d1e 100644 --- a/src/lib/components/chat/MessageInput/CallOverlay.svelte +++ b/src/lib/components/chat/MessageInput/CallOverlay.svelte @@ -1,5 +1,5 @@ + + { + await submitHandler(); + saveHandler(); + }} +> +
+ {#if config} +
+
+ {$i18n.t('Code Interpreter')} +
+ +
+
+
+ {$i18n.t('Enable Code Interpreter')} +
+ + +
+
+ +
+
{$i18n.t('Code Interpreter Engine')}
+
+ +
+
+ + {#if config.CODE_INTERPRETER_ENGINE === 'jupyter'} +
+
+ {$i18n.t('Jupyter Kernel Gateway URL')} +
+ +
+
+ +
+
+
+ +
+
+ {$i18n.t('Jupyter Kernel Gateway Auth')} +
+ +
+ +
+
+ + {#if config.CODE_INTERPRETER_JUPYTER_AUTH} +
+
+ {#if config.CODE_INTERPRETER_JUPYTER_AUTH === 'password'} + + {:else} + + {/if} +
+
+ {/if} + {/if} +
+ + + {/if} +
+
+ +
+ From abfe8687327d2f0e1558fe46af0e335f0a1ae546 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Mon, 10 Feb 2025 02:28:01 -0800 Subject: [PATCH 21/56] enh: code interpreter global toggle --- backend/open_webui/main.py | 5 +++-- src/lib/components/chat/Chat.svelte | 3 ++- src/lib/components/chat/MessageInput.svelte | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/backend/open_webui/main.py b/backend/open_webui/main.py index d9f1408ba..2b741a2bc 100644 --- a/backend/open_webui/main.py +++ b/backend/open_webui/main.py @@ -1040,13 +1040,14 @@ async def get_app_config(request: Request): { "enable_channels": app.state.config.ENABLE_CHANNELS, "enable_web_search": app.state.config.ENABLE_RAG_WEB_SEARCH, - "enable_google_drive_integration": app.state.config.ENABLE_GOOGLE_DRIVE_INTEGRATION, + "enable_code_interpreter": app.state.config.ENABLE_CODE_INTERPRETER, "enable_image_generation": app.state.config.ENABLE_IMAGE_GENERATION, + "enable_autocomplete_generation": app.state.config.ENABLE_AUTOCOMPLETE_GENERATION, "enable_community_sharing": app.state.config.ENABLE_COMMUNITY_SHARING, "enable_message_rating": app.state.config.ENABLE_MESSAGE_RATING, - "enable_autocomplete_generation": app.state.config.ENABLE_AUTOCOMPLETE_GENERATION, "enable_admin_export": ENABLE_ADMIN_EXPORT, "enable_admin_chat_access": ENABLE_ADMIN_CHAT_ACCESS, + "enable_google_drive_integration": app.state.config.ENABLE_GOOGLE_DRIVE_INTEGRATION, } if user is not None else {} diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index cc14f2c6f..2348d42fe 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -1556,7 +1556,8 @@ ? imageGenerationEnabled : false, code_interpreter: - $user.role === 'admin' || $user?.permissions?.features?.code_interpreter + $config?.features?.enable_code_interpreter && + ($user.role === 'admin' || $user?.permissions?.features?.code_interpreter) ? codeInterpreterEnabled : false, web_search: diff --git a/src/lib/components/chat/MessageInput.svelte b/src/lib/components/chat/MessageInput.svelte index f9c6786f6..3ab5d05fe 100644 --- a/src/lib/components/chat/MessageInput.svelte +++ b/src/lib/components/chat/MessageInput.svelte @@ -1171,7 +1171,7 @@ {/if} - {#if $_user.role === 'admin' || $_user?.permissions?.features?.code_interpreter} + {#if $config?.features?.enable_code_interpreter && ($_user.role === 'admin' || $_user?.permissions?.features?.code_interpreter)}
- {:else if $mobile && ($user.role === 'admin' || $user?.permissions.chat?.controls)} + {:else if $mobile && ($user.role === 'admin' || $user?.permissions?.chat?.controls)} + +
+ +
+ {#each config?.OPENAI_API_BASE_URLS ?? [] as url, idx} + { + updateHandler(); + }} + onDelete={() => { + config.OPENAI_API_BASE_URLS = config.OPENAI_API_BASE_URLS.filter( + (url, urlIdx) => idx !== urlIdx + ); + config.OPENAI_API_KEYS = config.OPENAI_API_KEYS.filter( + (key, keyIdx) => idx !== keyIdx + ); + + let newConfig = {}; + config.OPENAI_API_BASE_URLS.forEach((url, newIdx) => { + newConfig[newIdx] = + config.OPENAI_API_CONFIGS[newIdx < idx ? newIdx : newIdx + 1]; + }); + config.OPENAI_API_CONFIGS = newConfig; + }} + /> + {/each} +
+
+ {/if} +
+
+ +
+
+ +
+ +
+ diff --git a/src/lib/components/chat/Settings/Connections/Connection.svelte b/src/lib/components/chat/Settings/Connections/Connection.svelte new file mode 100644 index 000000000..6c8475b4b --- /dev/null +++ b/src/lib/components/chat/Settings/Connections/Connection.svelte @@ -0,0 +1,106 @@ + + + { + url = connection.url; + key = connection.key; + config = connection.config; + onSubmit(connection); + }} +/> + +
+ + {#if !(config?.enable ?? true)} +
+ {/if} +
+
+ + + {#if pipeline} +
+ + + + + + + +
+ {/if} +
+ + +
+
+ +
+ + + +
+
diff --git a/src/lib/components/chat/SettingsModal.svelte b/src/lib/components/chat/SettingsModal.svelte index 93ed327c1..fdf6d7ace 100644 --- a/src/lib/components/chat/SettingsModal.svelte +++ b/src/lib/components/chat/SettingsModal.svelte @@ -1,7 +1,7 @@ - +
-
-
-
{$i18n.t('Direct Connections')}
+
+
+
+
{$i18n.t('Manage Direct Connections')}
+ + + + +
+ +
+ {#each config?.OPENAI_API_BASE_URLS ?? [] as url, idx} + { + updateHandler(); + }} + onDelete={() => { + config.OPENAI_API_BASE_URLS = config.OPENAI_API_BASE_URLS.filter( + (url, urlIdx) => idx !== urlIdx + ); + config.OPENAI_API_KEYS = config.OPENAI_API_KEYS.filter( + (key, keyIdx) => idx !== keyIdx + ); + + let newConfig = {}; + config.OPENAI_API_BASE_URLS.forEach((url, newIdx) => { + newConfig[newIdx] = + config.OPENAI_API_CONFIGS[newIdx < idx ? newIdx : newIdx + 1]; + }); + config.OPENAI_API_CONFIGS = newConfig; + }} + /> + {/each} +
+
+
{$i18n.t('Connect to your own OpenAI compatible API endpoints.')}
- - {#if false} -
- -
-
-
{$i18n.t('Manage Connections')}
- - - - -
- -
- {#each config?.OPENAI_API_BASE_URLS ?? [] as url, idx} - { - updateHandler(); - }} - onDelete={() => { - config.OPENAI_API_BASE_URLS = config.OPENAI_API_BASE_URLS.filter( - (url, urlIdx) => idx !== urlIdx - ); - config.OPENAI_API_KEYS = config.OPENAI_API_KEYS.filter( - (key, keyIdx) => idx !== keyIdx - ); - - let newConfig = {}; - config.OPENAI_API_BASE_URLS.forEach((url, newIdx) => { - newConfig[newIdx] = - config.OPENAI_API_CONFIGS[newIdx < idx ? newIdx : newIdx + 1]; - }); - config.OPENAI_API_CONFIGS = newConfig; - }} - /> - {/each} -
-
- {/if}
- -
From cd2f4142d55709e5b09fae0c0ff11f49ac1643ae Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Tue, 11 Feb 2025 23:42:31 -0800 Subject: [PATCH 46/56] fix: user settings save issue --- backend/open_webui/models/users.py | 18 ++++++++++++++++++ backend/open_webui/routers/users.py | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/backend/open_webui/models/users.py b/backend/open_webui/models/users.py index 5c196281f..605299528 100644 --- a/backend/open_webui/models/users.py +++ b/backend/open_webui/models/users.py @@ -271,6 +271,24 @@ class UsersTable: except Exception: return None + def update_user_settings_by_id(self, id: str, updated: dict) -> Optional[UserModel]: + try: + with get_db() as db: + user_settings = db.query(User).filter_by(id=id).first().settings + + if user_settings is None: + user_settings = {} + + user_settings.update(updated) + + db.query(User).filter_by(id=id).update({"settings": user_settings}) + db.commit() + + user = db.query(User).filter_by(id=id).first() + return UserModel.model_validate(user) + except Exception: + return None + def delete_user_by_id(self, id: str) -> bool: try: # Remove User from Groups diff --git a/backend/open_webui/routers/users.py b/backend/open_webui/routers/users.py index ddcaef767..872212d3c 100644 --- a/backend/open_webui/routers/users.py +++ b/backend/open_webui/routers/users.py @@ -153,7 +153,7 @@ async def get_user_settings_by_session_user(user=Depends(get_verified_user)): async def update_user_settings_by_session_user( form_data: UserSettings, user=Depends(get_verified_user) ): - user = Users.update_user_by_id(user.id, {"settings": form_data.model_dump()}) + user = Users.update_user_settings_by_id(user.id, form_data.model_dump()) if user: return user.settings else: From 982b1fb7e205d145e940aaae5aca87b4811c9f6b Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Wed, 12 Feb 2025 00:08:51 -0800 Subject: [PATCH 47/56] wip: direct connections --- .../chat/Settings/Connections.svelte | 168 +++++++++++------- .../Settings/Connections/Connection.svelte | 23 --- 2 files changed, 108 insertions(+), 83 deletions(-) diff --git a/src/lib/components/chat/Settings/Connections.svelte b/src/lib/components/chat/Settings/Connections.svelte index 3700f90e4..4c0d54595 100644 --- a/src/lib/components/chat/Settings/Connections.svelte +++ b/src/lib/components/chat/Settings/Connections.svelte @@ -6,7 +6,7 @@ const dispatch = createEventDispatcher(); const i18n = getContext('i18n'); - import { models, user } from '$lib/stores'; + import { models, settings, user } from '$lib/stores'; import Switch from '$lib/components/common/Switch.svelte'; import Spinner from '$lib/components/common/Spinner.svelte'; @@ -16,84 +16,132 @@ import AddConnectionModal from '$lib/components/AddConnectionModal.svelte'; - const getModels = async () => { - const models = await _getModels(localStorage.token); - return models; - }; + export let saveSettings: Function; let config = null; let showConnectionModal = false; - onMount(async () => {}); + const addConnectionHandler = async (connection) => { + config.OPENAI_API_BASE_URLS.push(connection.url); + config.OPENAI_API_KEYS.push(connection.key); + config.OPENAI_API_CONFIGS[config.OPENAI_API_BASE_URLS.length - 1] = connection.config; - const addConnectionHandler = async (connection) => {}; + await updateHandler(); + }; - const submitHandler = async () => {}; - const updateHandler = async () => {}; + const updateHandler = async () => { + // Remove trailing slashes + config.OPENAI_API_BASE_URLS = config.OPENAI_API_BASE_URLS.map((url) => url.replace(/\/$/, '')); + + // Check if API KEYS length is same than API URLS length + if (config.OPENAI_API_KEYS.length !== config.OPENAI_API_BASE_URLS.length) { + // if there are more keys than urls, remove the extra keys + if (config.OPENAI_API_KEYS.length > config.OPENAI_API_BASE_URLS.length) { + config.OPENAI_API_KEYS = config.OPENAI_API_KEYS.slice( + 0, + config.OPENAI_API_BASE_URLS.length + ); + } + + // if there are more urls than keys, add empty keys + if (config.OPENAI_API_KEYS.length < config.OPENAI_API_BASE_URLS.length) { + const diff = config.OPENAI_API_BASE_URLS.length - config.OPENAI_API_KEYS.length; + for (let i = 0; i < diff; i++) { + config.OPENAI_API_KEYS.push(''); + } + } + } + + await saveSettings({ + directConnections: config + }); + }; + + const submitHandler = async () => { + await updateHandler(); + + await saveSettings({ + directConnections: config + }); + }; + + onMount(async () => { + config = $settings?.directConnections ?? { + OPENAI_API_BASE_URLS: [], + OPENAI_API_KEYS: [], + OPENAI_API_CONFIGS: {} + }; + });
-
-
-
-
-
{$i18n.t('Manage Direct Connections')}
+ {#if config !== null} +
+
+
+
+
{$i18n.t('Manage Direct Connections')}
- - - + + + +
+ +
+ {#each config?.OPENAI_API_BASE_URLS ?? [] as url, idx} + { + updateHandler(); + }} + onDelete={() => { + config.OPENAI_API_BASE_URLS = config.OPENAI_API_BASE_URLS.filter( + (url, urlIdx) => idx !== urlIdx + ); + config.OPENAI_API_KEYS = config.OPENAI_API_KEYS.filter( + (key, keyIdx) => idx !== keyIdx + ); + + let newConfig = {}; + config.OPENAI_API_BASE_URLS.forEach((url, newIdx) => { + newConfig[newIdx] = + config.OPENAI_API_CONFIGS[newIdx < idx ? newIdx : newIdx + 1]; + }); + config.OPENAI_API_CONFIGS = newConfig; + }} + /> + {/each} +
-
- {#each config?.OPENAI_API_BASE_URLS ?? [] as url, idx} - { - updateHandler(); - }} - onDelete={() => { - config.OPENAI_API_BASE_URLS = config.OPENAI_API_BASE_URLS.filter( - (url, urlIdx) => idx !== urlIdx - ); - config.OPENAI_API_KEYS = config.OPENAI_API_KEYS.filter( - (key, keyIdx) => idx !== keyIdx - ); - - let newConfig = {}; - config.OPENAI_API_BASE_URLS.forEach((url, newIdx) => { - newConfig[newIdx] = - config.OPENAI_API_CONFIGS[newIdx < idx ? newIdx : newIdx + 1]; - }); - config.OPENAI_API_CONFIGS = newConfig; - }} - /> - {/each} -
-
- -
- -
-
- {$i18n.t('Connect to your own OpenAI compatible API endpoints.')} +
+
+ {$i18n.t('Connect to your own OpenAI compatible API endpoints.')} +
-
+ {:else} +
+
+ +
+
+ {/if}
diff --git a/src/lib/components/chat/Settings/Connections/Connection.svelte b/src/lib/components/chat/Settings/Connections/Connection.svelte index 6c8475b4b..ef605876e 100644 --- a/src/lib/components/chat/Settings/Connections/Connection.svelte +++ b/src/lib/components/chat/Settings/Connections/Connection.svelte @@ -57,29 +57,6 @@ bind:value={url} autocomplete="off" /> - - {#if pipeline} -
- - - - - - - -
- {/if}
Date: Wed, 12 Feb 2025 01:17:30 -0800 Subject: [PATCH 48/56] wip: direct models --- src/lib/apis/index.ts | 77 ++++++++++++++++++- src/lib/apis/openai/index.ts | 27 +++++++ src/lib/components/admin/Functions.svelte | 14 ++-- .../components/admin/Settings/Audio.svelte | 10 ++- .../admin/Settings/Connections.svelte | 4 +- .../admin/Settings/Evaluations.svelte | 10 +-- .../components/admin/Settings/Models.svelte | 10 ++- .../Models/Manage/ManageOllama.svelte | 10 +-- .../admin/Settings/Pipelines.svelte | 10 +-- .../chat/ModelSelector/Selector.svelte | 30 +++++++- .../chat/Settings/Connections.svelte | 15 ++-- src/lib/components/chat/SettingsModal.svelte | 6 +- src/lib/components/workspace/Models.svelte | 12 ++- src/routes/(app)/+layout.svelte | 2 +- .../(app)/admin/functions/create/+page.svelte | 4 +- .../(app)/admin/functions/edit/+page.svelte | 4 +- .../(app)/workspace/models/+page.svelte | 4 +- .../workspace/models/create/+page.svelte | 2 +- .../(app)/workspace/models/edit/+page.svelte | 2 +- src/routes/s/[id]/+page.svelte | 2 +- 20 files changed, 194 insertions(+), 61 deletions(-) diff --git a/src/lib/apis/index.ts b/src/lib/apis/index.ts index c7fd78819..d1be9c210 100644 --- a/src/lib/apis/index.ts +++ b/src/lib/apis/index.ts @@ -1,6 +1,11 @@ import { WEBUI_API_BASE_URL, WEBUI_BASE_URL } from '$lib/constants'; +import { getOpenAIModelsDirect } from './openai'; -export const getModels = async (token: string = '', base: boolean = false) => { +export const getModels = async ( + token: string = '', + connections: object | null = null, + base: boolean = false +) => { let error = null; const res = await fetch(`${WEBUI_BASE_URL}/api/models${base ? '/base' : ''}`, { method: 'GET', @@ -25,6 +30,76 @@ export const getModels = async (token: string = '', base: boolean = false) => { } let models = res?.data ?? []; + + if (connections && !base) { + let localModels = []; + + if (connections) { + const OPENAI_API_BASE_URLS = connections.OPENAI_API_BASE_URLS; + const OPENAI_API_KEYS = connections.OPENAI_API_KEYS; + const OPENAI_API_CONFIGS = connections.OPENAI_API_CONFIGS; + + const requests = []; + for (const idx in OPENAI_API_BASE_URLS) { + const url = OPENAI_API_BASE_URLS[idx]; + + if (idx.toString() in OPENAI_API_CONFIGS) { + const apiConfig = OPENAI_API_CONFIGS[idx.toString()] ?? {}; + + const enable = apiConfig?.enable ?? true; + const modelIds = apiConfig?.model_ids ?? []; + + if (enable) { + if (modelIds.length > 0) { + const modelList = { + object: 'list', + data: modelIds.map((modelId) => ({ + id: modelId, + name: modelId, + owned_by: 'openai', + openai: { id: modelId }, + urlIdx: idx + })) + }; + + requests.push(() => modelList); + } else { + requests.push(getOpenAIModelsDirect(url, OPENAI_API_KEYS[idx])); + } + } else { + requests.push(() => {}); + } + } + } + const responses = await Promise.all(requests); + + for (const idx in responses) { + const response = responses[idx]; + const apiConfig = OPENAI_API_CONFIGS[idx.toString()] ?? {}; + + let models = Array.isArray(response) ? response : (response?.data ?? []); + models = models.map((model) => ({ ...model, openai: { id: model.id }, urlIdx: idx })); + + const prefixId = apiConfig.prefix_id; + if (prefixId) { + for (const model of models) { + model.id = `${prefixId}.${model.id}`; + } + } + + localModels = localModels.concat(models); + } + } + + models = models.concat( + localModels.map((model) => ({ + ...model, + name: model?.name ?? model?.id, + direct: true + })) + ); + } + return models; }; diff --git a/src/lib/apis/openai/index.ts b/src/lib/apis/openai/index.ts index 53f369e01..bab2d6e36 100644 --- a/src/lib/apis/openai/index.ts +++ b/src/lib/apis/openai/index.ts @@ -208,6 +208,33 @@ export const updateOpenAIKeys = async (token: string = '', keys: string[]) => { return res.OPENAI_API_KEYS; }; +export const getOpenAIModelsDirect = async (url: string, key: string) => { + let error = null; + + const res = await fetch(`${url}/models`, { + method: 'GET', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + ...(key && { authorization: `Bearer ${key}` }) + } + }) + .then(async (res) => { + if (!res.ok) throw await res.json(); + return res.json(); + }) + .catch((err) => { + error = `OpenAI: ${err?.error?.message ?? 'Network Problem'}`; + return []; + }); + + if (error) { + throw error; + } + + return res; +}; + export const getOpenAIModels = async (token: string, urlIdx?: number) => { let error = null; diff --git a/src/lib/components/admin/Functions.svelte b/src/lib/components/admin/Functions.svelte index f7814ce91..67bfc0499 100644 --- a/src/lib/components/admin/Functions.svelte +++ b/src/lib/components/admin/Functions.svelte @@ -3,7 +3,7 @@ import fileSaver from 'file-saver'; const { saveAs } = fileSaver; - import { WEBUI_NAME, config, functions, models } from '$lib/stores'; + import { WEBUI_NAME, config, functions, models, settings } from '$lib/stores'; import { onMount, getContext, tick } from 'svelte'; import { goto } from '$app/navigation'; @@ -126,7 +126,7 @@ toast.success($i18n.t('Function deleted successfully')); functions.set(await getFunctions(localStorage.token)); - models.set(await getModels(localStorage.token)); + models.set(await getModels(localStorage.token, $settings?.directConnections ?? null)); } }; @@ -147,7 +147,7 @@ } functions.set(await getFunctions(localStorage.token)); - models.set(await getModels(localStorage.token)); + models.set(await getModels(localStorage.token, $settings?.directConnections ?? null)); } }; @@ -359,7 +359,9 @@ bind:state={func.is_active} on:change={async (e) => { toggleFunctionById(localStorage.token, func.id); - models.set(await getModels(localStorage.token)); + models.set( + await getModels(localStorage.token, $settings?.directConnections ?? null) + ); }} /> @@ -496,7 +498,7 @@ id={selectedFunction?.id ?? null} on:save={async () => { await tick(); - models.set(await getModels(localStorage.token)); + models.set(await getModels(localStorage.token, $settings?.directConnections ?? null)); }} /> @@ -517,7 +519,7 @@ toast.success($i18n.t('Functions imported successfully')); functions.set(await getFunctions(localStorage.token)); - models.set(await getModels(localStorage.token)); + models.set(await getModels(localStorage.token, $settings?.directConnections ?? null)); }; reader.readAsText(importFiles[0]); diff --git a/src/lib/components/admin/Settings/Audio.svelte b/src/lib/components/admin/Settings/Audio.svelte index 69dcb55fa..ca4401029 100644 --- a/src/lib/components/admin/Settings/Audio.svelte +++ b/src/lib/components/admin/Settings/Audio.svelte @@ -10,7 +10,7 @@ getModels as _getModels, getVoices as _getVoices } from '$lib/apis/audio'; - import { config } from '$lib/stores'; + import { config, settings } from '$lib/stores'; import SensitiveInput from '$lib/components/common/SensitiveInput.svelte'; @@ -51,9 +51,11 @@ if (TTS_ENGINE === '') { models = []; } else { - const res = await _getModels(localStorage.token).catch((e) => { - toast.error(`${e}`); - }); + const res = await _getModels(localStorage.token, $settings?.directConnections ?? null).catch( + (e) => { + toast.error(`${e}`); + } + ); if (res) { console.log(res); diff --git a/src/lib/components/admin/Settings/Connections.svelte b/src/lib/components/admin/Settings/Connections.svelte index 893f45602..a4254ae4c 100644 --- a/src/lib/components/admin/Settings/Connections.svelte +++ b/src/lib/components/admin/Settings/Connections.svelte @@ -9,7 +9,7 @@ import { getModels as _getModels } from '$lib/apis'; import { getDirectConnectionsConfig, setDirectConnectionsConfig } from '$lib/apis/configs'; - import { models, user } from '$lib/stores'; + import { models, settings, user } from '$lib/stores'; import Switch from '$lib/components/common/Switch.svelte'; import Spinner from '$lib/components/common/Spinner.svelte'; @@ -23,7 +23,7 @@ const i18n = getContext('i18n'); const getModels = async () => { - const models = await _getModels(localStorage.token); + const models = await _getModels(localStorage.token, $settings?.directConnections ?? null); return models; }; diff --git a/src/lib/components/admin/Settings/Evaluations.svelte b/src/lib/components/admin/Settings/Evaluations.svelte index c0d1b4f32..41c76d94a 100644 --- a/src/lib/components/admin/Settings/Evaluations.svelte +++ b/src/lib/components/admin/Settings/Evaluations.svelte @@ -1,6 +1,6 @@ -
+
{#if title !== null} From 361a98980e7cc7763d16f5522a05c7188bab4c0e Mon Sep 17 00:00:00 2001 From: Feynman Liang Date: Wed, 12 Feb 2025 13:49:37 -0800 Subject: [PATCH 54/56] Retab collapsible --- src/lib/components/common/Collapsible.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/components/common/Collapsible.svelte b/src/lib/components/common/Collapsible.svelte index c2290a6dc..c06b525b8 100644 --- a/src/lib/components/common/Collapsible.svelte +++ b/src/lib/components/common/Collapsible.svelte @@ -34,7 +34,7 @@ import Spinner from './Spinner.svelte'; export let open = false; - export let id = ''; + export let id = ''; export let className = ''; export let buttonClassName = 'w-fit text-gray-500 hover:text-gray-700 dark:hover:text-gray-300 transition'; From 9f9adce72caa8f7490ca9784919f70e8494e7c50 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Wed, 12 Feb 2025 14:23:53 -0800 Subject: [PATCH 55/56] fix --- src/routes/(app)/workspace/models/create/+page.svelte | 2 +- src/routes/(app)/workspace/models/edit/+page.svelte | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/routes/(app)/workspace/models/create/+page.svelte b/src/routes/(app)/workspace/models/create/+page.svelte index 2518db760..fddf8277b 100644 --- a/src/routes/(app)/workspace/models/create/+page.svelte +++ b/src/routes/(app)/workspace/models/create/+page.svelte @@ -2,7 +2,7 @@ import { v4 as uuidv4 } from 'uuid'; import { toast } from 'svelte-sonner'; import { goto } from '$app/navigation'; - import { models } from '$lib/stores'; + import { config, models, settings } from '$lib/stores'; import { onMount, tick, getContext } from 'svelte'; import { createNewModel, getModelById } from '$lib/apis/models'; diff --git a/src/routes/(app)/workspace/models/edit/+page.svelte b/src/routes/(app)/workspace/models/edit/+page.svelte index df2ff21d7..1ff9652c6 100644 --- a/src/routes/(app)/workspace/models/edit/+page.svelte +++ b/src/routes/(app)/workspace/models/edit/+page.svelte @@ -6,7 +6,7 @@ const i18n = getContext('i18n'); import { page } from '$app/stores'; - import { config, models } from '$lib/stores'; + import { config, models, settings } from '$lib/stores'; import { getModelById, updateModelById } from '$lib/apis/models'; From 67958c02b4a48bef3bc3f22847fbb4fe1c486aac Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Wed, 12 Feb 2025 14:29:43 -0800 Subject: [PATCH 56/56] refac --- src/lib/components/admin/Settings/General.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/components/admin/Settings/General.svelte b/src/lib/components/admin/Settings/General.svelte index 0dea5a1e8..7423a314f 100644 --- a/src/lib/components/admin/Settings/General.svelte +++ b/src/lib/components/admin/Settings/General.svelte @@ -144,7 +144,7 @@