Merge commit 'e4179aa114fecc8d35ba48f091ce7c9abcc96065' into HEAD

This commit is contained in:
mini-777 2025-05-16 02:10:01 +09:00
commit e24e22debe
93 changed files with 2407 additions and 999 deletions

View File

@ -26,6 +26,9 @@ ARG BUILD_HASH
WORKDIR /app
# to store git revision in build
RUN apk add --no-cache git
COPY package.json package-lock.json ./
RUN npm ci

View File

@ -989,6 +989,26 @@ DEFAULT_USER_ROLE = PersistentConfig(
os.getenv("DEFAULT_USER_ROLE", "pending"),
)
PENDING_USER_OVERLAY_TITLE = PersistentConfig(
"PENDING_USER_OVERLAY_TITLE",
"ui.pending_user_overlay_title",
os.environ.get("PENDING_USER_OVERLAY_TITLE", ""),
)
PENDING_USER_OVERLAY_CONTENT = PersistentConfig(
"PENDING_USER_OVERLAY_CONTENT",
"ui.pending_user_overlay_content",
os.environ.get("PENDING_USER_OVERLAY_CONTENT", ""),
)
RESPONSE_WATERMARK = PersistentConfig(
"RESPONSE_WATERMARK",
"ui.watermark",
os.environ.get("RESPONSE_WATERMARK", ""),
)
USER_PERMISSIONS_WORKSPACE_MODELS_ACCESS = (
os.environ.get("USER_PERMISSIONS_WORKSPACE_MODELS_ACCESS", "False").lower()
== "true"
@ -1731,6 +1751,7 @@ QDRANT_API_KEY = os.environ.get("QDRANT_API_KEY", None)
QDRANT_ON_DISK = os.environ.get("QDRANT_ON_DISK", "false").lower() == "true"
QDRANT_PREFER_GRPC = os.environ.get("QDRANT_PREFER_GRPC", "False").lower() == "true"
QDRANT_GRPC_PORT = int(os.environ.get("QDRANT_GRPC_PORT", "6334"))
ENABLE_QDRANT_MULTITENANCY_MODE = os.environ.get("ENABLE_QDRANT_MULTITENANCY_MODE", "false").lower() == "true"
# OpenSearch
OPENSEARCH_URI = os.environ.get("OPENSEARCH_URI", "https://localhost:9200")
@ -1825,6 +1846,18 @@ CONTENT_EXTRACTION_ENGINE = PersistentConfig(
os.environ.get("CONTENT_EXTRACTION_ENGINE", "").lower(),
)
EXTERNAL_DOCUMENT_LOADER_URL = PersistentConfig(
"EXTERNAL_DOCUMENT_LOADER_URL",
"rag.external_document_loader_url",
os.environ.get("EXTERNAL_DOCUMENT_LOADER_URL", ""),
)
EXTERNAL_DOCUMENT_LOADER_API_KEY = PersistentConfig(
"EXTERNAL_DOCUMENT_LOADER_API_KEY",
"rag.external_document_loader_api_key",
os.environ.get("EXTERNAL_DOCUMENT_LOADER_API_KEY", ""),
)
TIKA_SERVER_URL = PersistentConfig(
"TIKA_SERVER_URL",
"rag.tika_server_url",
@ -1849,6 +1882,12 @@ DOCLING_OCR_LANG = PersistentConfig(
os.getenv("DOCLING_OCR_LANG", "eng,fra,deu,spa"),
)
DOCLING_DO_PICTURE_DESCRIPTION = PersistentConfig(
"DOCLING_DO_PICTURE_DESCRIPTION",
"rag.docling_do_picture_description",
os.getenv("DOCLING_DO_PICTURE_DESCRIPTION", "False").lower() == "true",
)
DOCUMENT_INTELLIGENCE_ENDPOINT = PersistentConfig(
"DOCUMENT_INTELLIGENCE_ENDPOINT",
"rag.document_intelligence_endpoint",
@ -1920,6 +1959,12 @@ RAG_FILE_MAX_SIZE = PersistentConfig(
),
)
RAG_ALLOWED_FILE_EXTENSIONS = PersistentConfig(
"RAG_ALLOWED_FILE_EXTENSIONS",
"rag.file.allowed_extensions",
os.environ.get("RAG_ALLOWED_FILE_EXTENSIONS", "").split(","),
)
RAG_EMBEDDING_ENGINE = PersistentConfig(
"RAG_EMBEDDING_ENGINE",
"rag.embedding_engine",
@ -2839,6 +2884,12 @@ LDAP_CA_CERT_FILE = PersistentConfig(
os.environ.get("LDAP_CA_CERT_FILE", ""),
)
LDAP_VALIDATE_CERT = PersistentConfig(
"LDAP_VALIDATE_CERT",
"ldap.server.validate_cert",
os.environ.get("LDAP_VALIDATE_CERT", "True").lower() == "true",
)
LDAP_CIPHERS = PersistentConfig(
"LDAP_CIPHERS", "ldap.server.ciphers", os.environ.get("LDAP_CIPHERS", "ALL")
)

View File

@ -197,6 +197,7 @@ from open_webui.config import (
RAG_EMBEDDING_ENGINE,
RAG_EMBEDDING_BATCH_SIZE,
RAG_RELEVANCE_THRESHOLD,
RAG_ALLOWED_FILE_EXTENSIONS,
RAG_FILE_MAX_COUNT,
RAG_FILE_MAX_SIZE,
RAG_OPENAI_API_BASE_URL,
@ -206,10 +207,13 @@ from open_webui.config import (
CHUNK_OVERLAP,
CHUNK_SIZE,
CONTENT_EXTRACTION_ENGINE,
EXTERNAL_DOCUMENT_LOADER_URL,
EXTERNAL_DOCUMENT_LOADER_API_KEY,
TIKA_SERVER_URL,
DOCLING_SERVER_URL,
DOCLING_OCR_ENGINE,
DOCLING_OCR_LANG,
DOCLING_DO_PICTURE_DESCRIPTION,
DOCUMENT_INTELLIGENCE_ENDPOINT,
DOCUMENT_INTELLIGENCE_KEY,
MISTRAL_OCR_API_KEY,
@ -291,6 +295,8 @@ from open_webui.config import (
ENABLE_EVALUATION_ARENA_MODELS,
USER_PERMISSIONS,
DEFAULT_USER_ROLE,
PENDING_USER_OVERLAY_CONTENT,
PENDING_USER_OVERLAY_TITLE,
DEFAULT_PROMPT_SUGGESTIONS,
DEFAULT_MODELS,
DEFAULT_ARENA_MODEL,
@ -317,6 +323,7 @@ from open_webui.config import (
LDAP_APP_PASSWORD,
LDAP_USE_TLS,
LDAP_CA_CERT_FILE,
LDAP_VALIDATE_CERT,
LDAP_CIPHERS,
# Misc
ENV,
@ -327,6 +334,7 @@ from open_webui.config import (
DEFAULT_LOCALE,
OAUTH_PROVIDERS,
WEBUI_URL,
RESPONSE_WATERMARK,
# Admin
ENABLE_ADMIN_CHAT_ACCESS,
ENABLE_ADMIN_EXPORT,
@ -373,6 +381,7 @@ from open_webui.env import (
OFFLINE_MODE,
ENABLE_OTEL,
EXTERNAL_PWA_MANIFEST_URL,
AIOHTTP_CLIENT_SESSION_SSL,
)
@ -573,6 +582,11 @@ app.state.config.DEFAULT_MODELS = DEFAULT_MODELS
app.state.config.DEFAULT_PROMPT_SUGGESTIONS = DEFAULT_PROMPT_SUGGESTIONS
app.state.config.DEFAULT_USER_ROLE = DEFAULT_USER_ROLE
app.state.config.PENDING_USER_OVERLAY_CONTENT = PENDING_USER_OVERLAY_CONTENT
app.state.config.PENDING_USER_OVERLAY_TITLE = PENDING_USER_OVERLAY_TITLE
app.state.config.RESPONSE_WATERMARK = RESPONSE_WATERMARK
app.state.config.USER_PERMISSIONS = USER_PERMISSIONS
app.state.config.WEBHOOK_URL = WEBHOOK_URL
app.state.config.BANNERS = WEBUI_BANNERS
@ -609,6 +623,7 @@ app.state.config.LDAP_SEARCH_BASE = LDAP_SEARCH_BASE
app.state.config.LDAP_SEARCH_FILTERS = LDAP_SEARCH_FILTERS
app.state.config.LDAP_USE_TLS = LDAP_USE_TLS
app.state.config.LDAP_CA_CERT_FILE = LDAP_CA_CERT_FILE
app.state.config.LDAP_VALIDATE_CERT = LDAP_VALIDATE_CERT
app.state.config.LDAP_CIPHERS = LDAP_CIPHERS
@ -631,6 +646,7 @@ app.state.FUNCTIONS = {}
app.state.config.TOP_K = RAG_TOP_K
app.state.config.TOP_K_RERANKER = RAG_TOP_K_RERANKER
app.state.config.RELEVANCE_THRESHOLD = RAG_RELEVANCE_THRESHOLD
app.state.config.ALLOWED_FILE_EXTENSIONS = RAG_ALLOWED_FILE_EXTENSIONS
app.state.config.FILE_MAX_SIZE = RAG_FILE_MAX_SIZE
app.state.config.FILE_MAX_COUNT = RAG_FILE_MAX_COUNT
@ -641,10 +657,13 @@ app.state.config.ENABLE_RAG_HYBRID_SEARCH = ENABLE_RAG_HYBRID_SEARCH
app.state.config.ENABLE_WEB_LOADER_SSL_VERIFICATION = ENABLE_WEB_LOADER_SSL_VERIFICATION
app.state.config.CONTENT_EXTRACTION_ENGINE = CONTENT_EXTRACTION_ENGINE
app.state.config.EXTERNAL_DOCUMENT_LOADER_URL = EXTERNAL_DOCUMENT_LOADER_URL
app.state.config.EXTERNAL_DOCUMENT_LOADER_API_KEY = EXTERNAL_DOCUMENT_LOADER_API_KEY
app.state.config.TIKA_SERVER_URL = TIKA_SERVER_URL
app.state.config.DOCLING_SERVER_URL = DOCLING_SERVER_URL
app.state.config.DOCLING_OCR_ENGINE = DOCLING_OCR_ENGINE
app.state.config.DOCLING_OCR_LANG = DOCLING_OCR_LANG
app.state.config.DOCLING_DO_PICTURE_DESCRIPTION = DOCLING_DO_PICTURE_DESCRIPTION
app.state.config.DOCUMENT_INTELLIGENCE_ENDPOINT = DOCUMENT_INTELLIGENCE_ENDPOINT
app.state.config.DOCUMENT_INTELLIGENCE_KEY = DOCUMENT_INTELLIGENCE_KEY
app.state.config.MISTRAL_OCR_API_KEY = MISTRAL_OCR_API_KEY
@ -1170,8 +1189,8 @@ async def chat_completion(
"tool_ids": form_data.get("tool_ids", None),
"tool_servers": form_data.pop("tool_servers", None),
"files": form_data.get("files", None),
"features": form_data.get("features", None),
"variables": form_data.get("variables", None),
"features": form_data.get("features", {}),
"variables": form_data.get("variables", {}),
"model": model,
"direct": model_item.get("direct", False),
**(
@ -1395,6 +1414,11 @@ async def get_app_config(request: Request):
"sharepoint_url": ONEDRIVE_SHAREPOINT_URL.value,
"sharepoint_tenant_id": ONEDRIVE_SHAREPOINT_TENANT_ID.value,
},
"ui": {
"pending_user_overlay_title": app.state.config.PENDING_USER_OVERLAY_TITLE,
"pending_user_overlay_content": app.state.config.PENDING_USER_OVERLAY_CONTENT,
"response_watermark": app.state.config.RESPONSE_WATERMARK,
},
"license_metadata": app.state.LICENSE_METADATA,
**(
{
@ -1446,7 +1470,8 @@ async def get_app_latest_release_version(user=Depends(get_verified_user)):
timeout = aiohttp.ClientTimeout(total=1)
async with aiohttp.ClientSession(timeout=timeout, trust_env=True) as session:
async with session.get(
"https://api.github.com/repos/open-webui/open-webui/releases/latest"
"https://api.github.com/repos/open-webui/open-webui/releases/latest",
ssl=AIOHTTP_CLIENT_SESSION_SSL,
) as response:
response.raise_for_status()
data = await response.json()

View File

@ -0,0 +1,58 @@
import requests
import logging
from typing import Iterator, List, Union
from langchain_core.document_loaders import BaseLoader
from langchain_core.documents import Document
from open_webui.env import SRC_LOG_LEVELS
log = logging.getLogger(__name__)
log.setLevel(SRC_LOG_LEVELS["RAG"])
class ExternalDocumentLoader(BaseLoader):
def __init__(
self,
file_path,
url: str,
api_key: str,
mime_type=None,
**kwargs,
) -> None:
self.url = url
self.api_key = api_key
self.file_path = file_path
self.mime_type = mime_type
def load(self) -> list[Document]:
with open(self.file_path, "rb") as f:
data = f.read()
headers = {}
if self.mime_type is not None:
headers["Content-Type"] = self.mime_type
if self.api_key is not None:
headers["Authorization"] = f"Bearer {self.api_key}"
url = self.url
if url.endswith("/"):
url = url[:-1]
r = requests.put(f"{url}/process", data=data, headers=headers)
if r.ok:
res = r.json()
if res:
return [
Document(
page_content=res.get("page_content"),
metadata=res.get("metadata"),
)
]
else:
raise Exception("Error loading document: No content returned")
else:
raise Exception(f"Error loading document: {r.status_code} {r.text}")

View File

@ -10,7 +10,7 @@ log = logging.getLogger(__name__)
log.setLevel(SRC_LOG_LEVELS["RAG"])
class ExternalLoader(BaseLoader):
class ExternalWebLoader(BaseLoader):
def __init__(
self,
web_paths: Union[str, List[str]],
@ -32,7 +32,7 @@ class ExternalLoader(BaseLoader):
response = requests.post(
self.external_url,
headers={
"User-Agent": "Open WebUI (https://github.com/open-webui/open-webui) RAG Bot",
"User-Agent": "Open WebUI (https://github.com/open-webui/open-webui) External Web Loader",
"Authorization": f"Bearer {self.external_api_key}",
},
json={

View File

@ -21,6 +21,8 @@ from langchain_community.document_loaders import (
)
from langchain_core.documents import Document
from open_webui.retrieval.loaders.external_document import ExternalDocumentLoader
from open_webui.retrieval.loaders.mistral import MistralLoader
from open_webui.env import SRC_LOG_LEVELS, GLOBAL_LOG_LEVEL
@ -126,14 +128,12 @@ class TikaLoader:
class DoclingLoader:
def __init__(
self, url, file_path=None, mime_type=None, ocr_engine=None, ocr_lang=None
):
def __init__(self, url, file_path=None, mime_type=None, params=None):
self.url = url.rstrip("/")
self.file_path = file_path
self.mime_type = mime_type
self.ocr_engine = ocr_engine
self.ocr_lang = ocr_lang
self.params = params or {}
def load(self) -> list[Document]:
with open(self.file_path, "rb") as f:
@ -150,11 +150,19 @@ class DoclingLoader:
"table_mode": "accurate",
}
if self.ocr_engine and self.ocr_lang:
params["ocr_engine"] = self.ocr_engine
params["ocr_lang"] = [
lang.strip() for lang in self.ocr_lang.split(",") if lang.strip()
]
if self.params:
if self.params.get("do_picture_classification"):
params["do_picture_classification"] = self.params.get(
"do_picture_classification"
)
if self.params.get("ocr_engine") and self.params.get("ocr_lang"):
params["ocr_engine"] = self.params.get("ocr_engine")
params["ocr_lang"] = [
lang.strip()
for lang in self.params.get("ocr_lang").split(",")
if lang.strip()
]
endpoint = f"{self.url}/v1alpha/convert/file"
r = requests.post(endpoint, files=files, data=params)
@ -207,6 +215,17 @@ class Loader:
def _get_loader(self, filename: str, file_content_type: str, file_path: str):
file_ext = filename.split(".")[-1].lower()
if (
self.engine == "external"
and self.kwargs.get("EXTERNAL_DOCUMENT_LOADER_URL")
and self.kwargs.get("EXTERNAL_DOCUMENT_LOADER_API_KEY")
):
loader = ExternalDocumentLoader(
file_path=file_path,
url=self.kwargs.get("EXTERNAL_DOCUMENT_LOADER_URL"),
api_key=self.kwargs.get("EXTERNAL_DOCUMENT_LOADER_API_KEY"),
mime_type=file_content_type,
)
if self.engine == "tika" and self.kwargs.get("TIKA_SERVER_URL"):
if self._is_text_file(file_ext, file_content_type):
loader = TextLoader(file_path, autodetect_encoding=True)
@ -225,8 +244,13 @@ class Loader:
url=self.kwargs.get("DOCLING_SERVER_URL"),
file_path=file_path,
mime_type=file_content_type,
ocr_engine=self.kwargs.get("DOCLING_OCR_ENGINE"),
ocr_lang=self.kwargs.get("DOCLING_OCR_LANG"),
params={
"ocr_engine": self.kwargs.get("DOCLING_OCR_ENGINE"),
"ocr_lang": self.kwargs.get("DOCLING_OCR_LANG"),
"do_picture_classification": self.kwargs.get(
"DOCLING_DO_PICTURE_DESCRIPTION"
),
},
)
elif (
self.engine == "document_intelligence"
@ -258,6 +282,15 @@ class Loader:
loader = MistralLoader(
api_key=self.kwargs.get("MISTRAL_OCR_API_KEY"), file_path=file_path
)
elif (
self.engine == "external"
and self.kwargs.get("MISTRAL_OCR_API_KEY") != ""
and file_ext
in ["pdf"] # Mistral OCR currently only supports PDF and images
):
loader = MistralLoader(
api_key=self.kwargs.get("MISTRAL_OCR_API_KEY"), file_path=file_path
)
else:
if file_ext == "pdf":
loader = PyPDFLoader(

View File

@ -12,7 +12,7 @@ from langchain_community.retrievers import BM25Retriever
from langchain_core.documents import Document
from open_webui.config import VECTOR_DB
from open_webui.retrieval.vector.connector import VECTOR_DB_CLIENT
from open_webui.retrieval.vector.factory import VECTOR_DB_CLIENT
from open_webui.models.users import UserModel
from open_webui.models.files import Files

View File

@ -1,30 +0,0 @@
from open_webui.config import VECTOR_DB
if VECTOR_DB == "milvus":
from open_webui.retrieval.vector.dbs.milvus import MilvusClient
VECTOR_DB_CLIENT = MilvusClient()
elif VECTOR_DB == "qdrant":
from open_webui.retrieval.vector.dbs.qdrant import QdrantClient
VECTOR_DB_CLIENT = QdrantClient()
elif VECTOR_DB == "opensearch":
from open_webui.retrieval.vector.dbs.opensearch import OpenSearchClient
VECTOR_DB_CLIENT = OpenSearchClient()
elif VECTOR_DB == "pgvector":
from open_webui.retrieval.vector.dbs.pgvector import PgvectorClient
VECTOR_DB_CLIENT = PgvectorClient()
elif VECTOR_DB == "elasticsearch":
from open_webui.retrieval.vector.dbs.elasticsearch import ElasticsearchClient
VECTOR_DB_CLIENT = ElasticsearchClient()
elif VECTOR_DB == "pinecone":
from open_webui.retrieval.vector.dbs.pinecone import PineconeClient
VECTOR_DB_CLIENT = PineconeClient()
else:
from open_webui.retrieval.vector.dbs.chroma import ChromaClient
VECTOR_DB_CLIENT = ChromaClient()

View File

@ -0,0 +1,712 @@
import logging
from typing import Optional, Tuple
from urllib.parse import urlparse
import grpc
from open_webui.config import (
QDRANT_API_KEY,
QDRANT_GRPC_PORT,
QDRANT_ON_DISK,
QDRANT_PREFER_GRPC,
QDRANT_URI,
)
from open_webui.env import SRC_LOG_LEVELS
from open_webui.retrieval.vector.main import (
GetResult,
SearchResult,
VectorDBBase,
VectorItem,
)
from qdrant_client import QdrantClient as Qclient
from qdrant_client.http.exceptions import UnexpectedResponse
from qdrant_client.http.models import PointStruct
from qdrant_client.models import models
NO_LIMIT = 999999999
log = logging.getLogger(__name__)
log.setLevel(SRC_LOG_LEVELS["RAG"])
class QdrantClient(VectorDBBase):
def __init__(self):
self.collection_prefix = "open-webui"
self.QDRANT_URI = QDRANT_URI
self.QDRANT_API_KEY = QDRANT_API_KEY
self.QDRANT_ON_DISK = QDRANT_ON_DISK
self.PREFER_GRPC = QDRANT_PREFER_GRPC
self.GRPC_PORT = QDRANT_GRPC_PORT
if not self.QDRANT_URI:
self.client = None
return
# Unified handling for either scheme
parsed = urlparse(self.QDRANT_URI)
host = parsed.hostname or self.QDRANT_URI
http_port = parsed.port or 6333 # default REST port
if self.PREFER_GRPC:
self.client = Qclient(
host=host,
port=http_port,
grpc_port=self.GRPC_PORT,
prefer_grpc=self.PREFER_GRPC,
api_key=self.QDRANT_API_KEY,
)
else:
self.client = Qclient(url=self.QDRANT_URI, api_key=self.QDRANT_API_KEY)
# Main collection types for multi-tenancy
self.MEMORY_COLLECTION = f"{self.collection_prefix}_memories"
self.KNOWLEDGE_COLLECTION = f"{self.collection_prefix}_knowledge"
self.FILE_COLLECTION = f"{self.collection_prefix}_files"
self.WEB_SEARCH_COLLECTION = f"{self.collection_prefix}_web-search"
self.HASH_BASED_COLLECTION = f"{self.collection_prefix}_hash-based"
def _result_to_get_result(self, points) -> GetResult:
ids = []
documents = []
metadatas = []
for point in points:
payload = point.payload
ids.append(point.id)
documents.append(payload["text"])
metadatas.append(payload["metadata"])
return GetResult(
**{
"ids": [ids],
"documents": [documents],
"metadatas": [metadatas],
}
)
def _get_collection_and_tenant_id(self, collection_name: str) -> Tuple[str, str]:
"""
Maps the traditional collection name to multi-tenant collection and tenant ID.
Returns:
tuple: (collection_name, tenant_id)
"""
# Check for user memory collections
tenant_id = collection_name
if collection_name.startswith("user-memory-"):
return self.MEMORY_COLLECTION, tenant_id
# Check for file collections
elif collection_name.startswith("file-"):
return self.FILE_COLLECTION, tenant_id
# Check for web search collections
elif collection_name.startswith("web-search-"):
return self.WEB_SEARCH_COLLECTION, tenant_id
# Handle hash-based collections (YouTube and web URLs)
elif len(collection_name) == 63 and all(
c in "0123456789abcdef" for c in collection_name
):
return self.HASH_BASED_COLLECTION, tenant_id
else:
return self.KNOWLEDGE_COLLECTION, tenant_id
def _extract_error_message(self, exception):
"""
Extract error message from either HTTP or gRPC exceptions
Returns:
tuple: (status_code, error_message)
"""
# Check if it's an HTTP exception
if isinstance(exception, UnexpectedResponse):
try:
error_data = exception.structured()
error_msg = error_data.get("status", {}).get("error", "")
return exception.status_code, error_msg
except Exception as inner_e:
log.error(f"Failed to parse HTTP error: {inner_e}")
return exception.status_code, str(exception)
# Check if it's a gRPC exception
elif isinstance(exception, grpc.RpcError):
# Extract status code from gRPC error
status_code = None
if hasattr(exception, "code") and callable(exception.code):
status_code = exception.code().value[0]
# Extract error message
error_msg = str(exception)
if "details =" in error_msg:
# Parse the details line which contains the actual error message
try:
details_line = [
line.strip()
for line in error_msg.split("\n")
if "details =" in line
][0]
error_msg = details_line.split("details =")[1].strip(' "')
except (IndexError, AttributeError):
# Fall back to full message if parsing fails
pass
return status_code, error_msg
# For any other type of exception
return None, str(exception)
def _is_collection_not_found_error(self, exception):
"""
Check if the exception is due to collection not found, supporting both HTTP and gRPC
"""
status_code, error_msg = self._extract_error_message(exception)
# HTTP error (404)
if (
status_code == 404
and "Collection" in error_msg
and "doesn't exist" in error_msg
):
return True
# gRPC error (NOT_FOUND status)
if (
isinstance(exception, grpc.RpcError)
and exception.code() == grpc.StatusCode.NOT_FOUND
):
return True
return False
def _is_dimension_mismatch_error(self, exception):
"""
Check if the exception is due to dimension mismatch, supporting both HTTP and gRPC
"""
status_code, error_msg = self._extract_error_message(exception)
# Common patterns in both HTTP and gRPC
return (
"Vector dimension error" in error_msg
or "dimensions mismatch" in error_msg
or "invalid vector size" in error_msg
)
def _create_multi_tenant_collection_if_not_exists(
self, mt_collection_name: str, dimension: int = 384
):
"""
Creates a collection with multi-tenancy configuration if it doesn't exist.
Default dimension is set to 384 which corresponds to 'sentence-transformers/all-MiniLM-L6-v2'.
When creating collections dynamically (insert/upsert), the actual vector dimensions will be used.
"""
try:
# Try to create the collection directly - will fail if it already exists
self.client.create_collection(
collection_name=mt_collection_name,
vectors_config=models.VectorParams(
size=dimension,
distance=models.Distance.COSINE,
on_disk=self.QDRANT_ON_DISK,
),
hnsw_config=models.HnswConfigDiff(
payload_m=16, # Enable per-tenant indexing
m=0,
on_disk=self.QDRANT_ON_DISK,
),
)
# Create tenant ID payload index
self.client.create_payload_index(
collection_name=mt_collection_name,
field_name="tenant_id",
field_schema=models.KeywordIndexParams(
type=models.KeywordIndexType.KEYWORD,
is_tenant=True,
on_disk=self.QDRANT_ON_DISK,
),
wait=True,
)
log.info(
f"Multi-tenant collection {mt_collection_name} created with dimension {dimension}!"
)
except (UnexpectedResponse, grpc.RpcError) as e:
# Check for the specific error indicating collection already exists
status_code, error_msg = self._extract_error_message(e)
# HTTP status code 409 or gRPC ALREADY_EXISTS
if (isinstance(e, UnexpectedResponse) and status_code == 409) or (
isinstance(e, grpc.RpcError)
and e.code() == grpc.StatusCode.ALREADY_EXISTS
):
if "already exists" in error_msg:
log.debug(f"Collection {mt_collection_name} already exists")
return
# If it's not an already exists error, re-raise
raise e
except Exception as e:
raise e
def _create_points(self, items: list[VectorItem], tenant_id: str):
"""
Create point structs from vector items with tenant ID.
"""
return [
PointStruct(
id=item["id"],
vector=item["vector"],
payload={
"text": item["text"],
"metadata": item["metadata"],
"tenant_id": tenant_id,
},
)
for item in items
]
def has_collection(self, collection_name: str) -> bool:
"""
Check if a logical collection exists by checking for any points with the tenant ID.
"""
if not self.client:
return False
# Map to multi-tenant collection and tenant ID
mt_collection, tenant_id = self._get_collection_and_tenant_id(collection_name)
# Create tenant filter
tenant_filter = models.FieldCondition(
key="tenant_id", match=models.MatchValue(value=tenant_id)
)
try:
# Try directly querying - most of the time collection should exist
response = self.client.query_points(
collection_name=mt_collection,
query_filter=models.Filter(must=[tenant_filter]),
limit=1,
)
# Collection exists with this tenant ID if there are points
return len(response.points) > 0
except (UnexpectedResponse, grpc.RpcError) as e:
if self._is_collection_not_found_error(e):
log.debug(f"Collection {mt_collection} doesn't exist")
return False
else:
# For other API errors, log and return False
_, error_msg = self._extract_error_message(e)
log.warning(f"Unexpected Qdrant error: {error_msg}")
return False
except Exception as e:
# For any other errors, log and return False
log.debug(f"Error checking collection {mt_collection}: {e}")
return False
def delete(
self,
collection_name: str,
ids: Optional[list[str]] = None,
filter: Optional[dict] = None,
):
"""
Delete vectors by ID or filter from a collection with tenant isolation.
"""
if not self.client:
return None
# Map to multi-tenant collection and tenant ID
mt_collection, tenant_id = self._get_collection_and_tenant_id(collection_name)
# Create tenant filter
tenant_filter = models.FieldCondition(
key="tenant_id", match=models.MatchValue(value=tenant_id)
)
must_conditions = [tenant_filter]
should_conditions = []
if ids:
for id_value in ids:
should_conditions.append(
models.FieldCondition(
key="metadata.id",
match=models.MatchValue(value=id_value),
),
)
elif filter:
for key, value in filter.items():
must_conditions.append(
models.FieldCondition(
key=f"metadata.{key}",
match=models.MatchValue(value=value),
),
)
try:
# Try to delete directly - most of the time collection should exist
update_result = self.client.delete(
collection_name=mt_collection,
points_selector=models.FilterSelector(
filter=models.Filter(must=must_conditions, should=should_conditions)
),
)
return update_result
except (UnexpectedResponse, grpc.RpcError) as e:
if self._is_collection_not_found_error(e):
log.debug(
f"Collection {mt_collection} doesn't exist, nothing to delete"
)
return None
else:
# For other API errors, log and re-raise
_, error_msg = self._extract_error_message(e)
log.warning(f"Unexpected Qdrant error: {error_msg}")
raise
except Exception as e:
# For non-Qdrant exceptions, re-raise
raise
def search(
self, collection_name: str, vectors: list[list[float | int]], limit: int
) -> Optional[SearchResult]:
"""
Search for the nearest neighbor items based on the vectors with tenant isolation.
"""
if not self.client:
return None
# Map to multi-tenant collection and tenant ID
mt_collection, tenant_id = self._get_collection_and_tenant_id(collection_name)
# Get the vector dimension from the query vector
dimension = len(vectors[0]) if vectors and len(vectors) > 0 else None
try:
# Try the search operation directly - most of the time collection should exist
# Create tenant filter
tenant_filter = models.FieldCondition(
key="tenant_id", match=models.MatchValue(value=tenant_id)
)
# Ensure vector dimensions match the collection
collection_dim = self.client.get_collection(
mt_collection
).config.params.vectors.size
if collection_dim != dimension:
if collection_dim < dimension:
vectors = [vector[:collection_dim] for vector in vectors]
else:
vectors = [
vector + [0] * (collection_dim - dimension)
for vector in vectors
]
# Search with tenant filter
prefetch_query = models.Prefetch(
filter=models.Filter(must=[tenant_filter]),
limit=NO_LIMIT,
)
query_response = self.client.query_points(
collection_name=mt_collection,
query=vectors[0],
prefetch=prefetch_query,
limit=limit,
)
get_result = self._result_to_get_result(query_response.points)
return SearchResult(
ids=get_result.ids,
documents=get_result.documents,
metadatas=get_result.metadatas,
# qdrant distance is [-1, 1], normalize to [0, 1]
distances=[
[(point.score + 1.0) / 2.0 for point in query_response.points]
],
)
except (UnexpectedResponse, grpc.RpcError) as e:
if self._is_collection_not_found_error(e):
log.debug(
f"Collection {mt_collection} doesn't exist, search returns None"
)
return None
else:
# For other API errors, log and re-raise
_, error_msg = self._extract_error_message(e)
log.warning(f"Unexpected Qdrant error during search: {error_msg}")
raise
except Exception as e:
# For non-Qdrant exceptions, log and return None
log.exception(f"Error searching collection '{collection_name}': {e}")
return None
def query(self, collection_name: str, filter: dict, limit: Optional[int] = None):
"""
Query points with filters and tenant isolation.
"""
if not self.client:
return None
# Map to multi-tenant collection and tenant ID
mt_collection, tenant_id = self._get_collection_and_tenant_id(collection_name)
# Set default limit if not provided
if limit is None:
limit = NO_LIMIT
# Create tenant filter
tenant_filter = models.FieldCondition(
key="tenant_id", match=models.MatchValue(value=tenant_id)
)
# Create metadata filters
field_conditions = []
for key, value in filter.items():
field_conditions.append(
models.FieldCondition(
key=f"metadata.{key}", match=models.MatchValue(value=value)
)
)
# Combine tenant filter with metadata filters
combined_filter = models.Filter(must=[tenant_filter, *field_conditions])
try:
# Try the query directly - most of the time collection should exist
points = self.client.query_points(
collection_name=mt_collection,
query_filter=combined_filter,
limit=limit,
)
return self._result_to_get_result(points.points)
except (UnexpectedResponse, grpc.RpcError) as e:
if self._is_collection_not_found_error(e):
log.debug(
f"Collection {mt_collection} doesn't exist, query returns None"
)
return None
else:
# For other API errors, log and re-raise
_, error_msg = self._extract_error_message(e)
log.warning(f"Unexpected Qdrant error during query: {error_msg}")
raise
except Exception as e:
# For non-Qdrant exceptions, log and re-raise
log.exception(f"Error querying collection '{collection_name}': {e}")
return None
def get(self, collection_name: str) -> Optional[GetResult]:
"""
Get all items in a collection with tenant isolation.
"""
if not self.client:
return None
# Map to multi-tenant collection and tenant ID
mt_collection, tenant_id = self._get_collection_and_tenant_id(collection_name)
# Create tenant filter
tenant_filter = models.FieldCondition(
key="tenant_id", match=models.MatchValue(value=tenant_id)
)
try:
# Try to get points directly - most of the time collection should exist
points = self.client.query_points(
collection_name=mt_collection,
query_filter=models.Filter(must=[tenant_filter]),
limit=NO_LIMIT,
)
return self._result_to_get_result(points.points)
except (UnexpectedResponse, grpc.RpcError) as e:
if self._is_collection_not_found_error(e):
log.debug(f"Collection {mt_collection} doesn't exist, get returns None")
return None
else:
# For other API errors, log and re-raise
_, error_msg = self._extract_error_message(e)
log.warning(f"Unexpected Qdrant error during get: {error_msg}")
raise
except Exception as e:
# For non-Qdrant exceptions, log and return None
log.exception(f"Error getting collection '{collection_name}': {e}")
return None
def _handle_operation_with_error_retry(
self, operation_name, mt_collection, points, dimension
):
"""
Private helper to handle common error cases for insert and upsert operations.
Args:
operation_name: 'insert' or 'upsert'
mt_collection: The multi-tenant collection name
points: The vector points to insert/upsert
dimension: The dimension of the vectors
Returns:
The operation result (for upsert) or None (for insert)
"""
try:
if operation_name == "insert":
self.client.upload_points(mt_collection, points)
return None
else: # upsert
return self.client.upsert(mt_collection, points)
except (UnexpectedResponse, grpc.RpcError) as e:
# Handle collection not found
if self._is_collection_not_found_error(e):
log.info(
f"Collection {mt_collection} doesn't exist. Creating it with dimension {dimension}."
)
# Create collection with correct dimensions from our vectors
self._create_multi_tenant_collection_if_not_exists(
mt_collection_name=mt_collection, dimension=dimension
)
# Try operation again - no need for dimension adjustment since we just created with correct dimensions
if operation_name == "insert":
self.client.upload_points(mt_collection, points)
return None
else: # upsert
return self.client.upsert(mt_collection, points)
# Handle dimension mismatch
elif self._is_dimension_mismatch_error(e):
# For dimension errors, the collection must exist, so get its configuration
mt_collection_info = self.client.get_collection(mt_collection)
existing_size = mt_collection_info.config.params.vectors.size
log.info(
f"Dimension mismatch: Collection {mt_collection} expects {existing_size}, got {dimension}"
)
if existing_size < dimension:
# Truncate vectors to fit
log.info(
f"Truncating vectors from {dimension} to {existing_size} dimensions"
)
points = [
PointStruct(
id=point.id,
vector=point.vector[:existing_size],
payload=point.payload,
)
for point in points
]
elif existing_size > dimension:
# Pad vectors with zeros
log.info(
f"Padding vectors from {dimension} to {existing_size} dimensions with zeros"
)
points = [
PointStruct(
id=point.id,
vector=point.vector
+ [0] * (existing_size - len(point.vector)),
payload=point.payload,
)
for point in points
]
# Try operation again with adjusted dimensions
if operation_name == "insert":
self.client.upload_points(mt_collection, points)
return None
else: # upsert
return self.client.upsert(mt_collection, points)
else:
# Not a known error we can handle, log and re-raise
_, error_msg = self._extract_error_message(e)
log.warning(f"Unhandled Qdrant error: {error_msg}")
raise
except Exception as e:
# For non-Qdrant exceptions, re-raise
raise
def insert(self, collection_name: str, items: list[VectorItem]):
"""
Insert items with tenant ID.
"""
if not self.client or not items:
return None
# Map to multi-tenant collection and tenant ID
mt_collection, tenant_id = self._get_collection_and_tenant_id(collection_name)
# Get dimensions from the actual vectors
dimension = len(items[0]["vector"]) if items else None
# Create points with tenant ID
points = self._create_points(items, tenant_id)
# Handle the operation with error retry
return self._handle_operation_with_error_retry(
"insert", mt_collection, points, dimension
)
def upsert(self, collection_name: str, items: list[VectorItem]):
"""
Upsert items with tenant ID.
"""
if not self.client or not items:
return None
# Map to multi-tenant collection and tenant ID
mt_collection, tenant_id = self._get_collection_and_tenant_id(collection_name)
# Get dimensions from the actual vectors
dimension = len(items[0]["vector"]) if items else None
# Create points with tenant ID
points = self._create_points(items, tenant_id)
# Handle the operation with error retry
return self._handle_operation_with_error_retry(
"upsert", mt_collection, points, dimension
)
def reset(self):
"""
Reset the database by deleting all collections.
"""
if not self.client:
return None
collection_names = self.client.get_collections().collections
for collection_name in collection_names:
if collection_name.name.startswith(self.collection_prefix):
self.client.delete_collection(collection_name=collection_name.name)
def delete_collection(self, collection_name: str):
"""
Delete a collection.
"""
if not self.client:
return None
# Map to multi-tenant collection and tenant ID
mt_collection, tenant_id = self._get_collection_and_tenant_id(collection_name)
tenant_filter = models.FieldCondition(
key="tenant_id", match=models.MatchValue(value=tenant_id)
)
field_conditions = [tenant_filter]
update_result = self.client.delete(
collection_name=mt_collection,
points_selector=models.FilterSelector(
filter=models.Filter(must=field_conditions)
),
)
if self.client.get_collection(mt_collection).points_count == 0:
self.client.delete_collection(mt_collection)
return update_result

View File

@ -0,0 +1,53 @@
from open_webui.retrieval.vector.main import VectorDBBase
from open_webui.retrieval.vector.type import VectorType
from open_webui.config import VECTOR_DB, ENABLE_QDRANT_MULTITENANCY_MODE
class Vector:
@staticmethod
def get_vector(vector_type: str) -> VectorDBBase:
"""
get vector db instance by vector type
"""
match vector_type:
case VectorType.MILVUS:
from open_webui.retrieval.vector.dbs.milvus import MilvusClient
return MilvusClient()
case VectorType.QDRANT:
if ENABLE_QDRANT_MULTITENANCY_MODE:
from open_webui.retrieval.vector.dbs.qdrant_multitenancy import QdrantClient
return QdrantClient()
else:
from open_webui.retrieval.vector.dbs.qdrant import QdrantClient
return QdrantClient()
case VectorType.PINECONE:
from open_webui.retrieval.vector.dbs.pinecone import PineconeClient
return PineconeClient()
case VectorType.OPENSEARCH:
from open_webui.retrieval.vector.dbs.opensearch import OpenSearchClient
return OpenSearchClient()
case VectorType.PGVECTOR:
from open_webui.retrieval.vector.dbs.pgvector import PgvectorClient
return PgvectorClient()
case VectorType.ELASTICSEARCH:
from open_webui.retrieval.vector.dbs.elasticsearch import (
ElasticsearchClient,
)
return ElasticsearchClient()
case VectorType.CHROMA:
from open_webui.retrieval.vector.dbs.chroma import ChromaClient
return ChromaClient()
case _:
raise ValueError(f"Unsupported vector type: {vector_type}")
VECTOR_DB_CLIENT = Vector.get_vector(VECTOR_DB)

View File

@ -0,0 +1,11 @@
from enum import StrEnum
class VectorType(StrEnum):
MILVUS = "milvus"
QDRANT = "qdrant"
CHROMA = "chroma"
PINECONE = "pinecone"
ELASTICSEARCH = "elasticsearch"
OPENSEARCH = "opensearch"
PGVECTOR = "pgvector"

View File

@ -25,7 +25,7 @@ from langchain_community.document_loaders.firecrawl import FireCrawlLoader
from langchain_community.document_loaders.base import BaseLoader
from langchain_core.documents import Document
from open_webui.retrieval.loaders.tavily import TavilyLoader
from open_webui.retrieval.loaders.external import ExternalLoader
from open_webui.retrieval.loaders.external_web import ExternalWebLoader
from open_webui.constants import ERROR_MESSAGES
from open_webui.config import (
ENABLE_RAG_LOCAL_WEB_FETCH,
@ -39,7 +39,7 @@ from open_webui.config import (
EXTERNAL_WEB_LOADER_URL,
EXTERNAL_WEB_LOADER_API_KEY,
)
from open_webui.env import SRC_LOG_LEVELS
from open_webui.env import SRC_LOG_LEVELS, AIOHTTP_CLIENT_SESSION_SSL
log = logging.getLogger(__name__)
log.setLevel(SRC_LOG_LEVELS["RAG"])
@ -515,7 +515,9 @@ class SafeWebBaseLoader(WebBaseLoader):
kwargs["ssl"] = False
async with session.get(
url, **(self.requests_kwargs | kwargs)
url,
**(self.requests_kwargs | kwargs),
ssl=AIOHTTP_CLIENT_SESSION_SSL,
) as response:
if self.raise_for_status:
response.raise_for_status()
@ -628,7 +630,7 @@ def get_web_loader(
web_loader_args["extract_depth"] = TAVILY_EXTRACT_DEPTH.value
if WEB_LOADER_ENGINE.value == "external":
WebLoaderClass = ExternalLoader
WebLoaderClass = ExternalWebLoader
web_loader_args["external_url"] = EXTERNAL_WEB_LOADER_URL.value
web_loader_args["external_api_key"] = EXTERNAL_WEB_LOADER_API_KEY.value

View File

@ -38,6 +38,7 @@ from open_webui.config import (
from open_webui.constants import ERROR_MESSAGES
from open_webui.env import (
AIOHTTP_CLIENT_SESSION_SSL,
AIOHTTP_CLIENT_TIMEOUT,
ENV,
SRC_LOG_LEVELS,
@ -326,6 +327,7 @@ async def speech(request: Request, user=Depends(get_verified_user)):
else {}
),
},
ssl=AIOHTTP_CLIENT_SESSION_SSL,
) as r:
r.raise_for_status()
@ -381,6 +383,7 @@ async def speech(request: Request, user=Depends(get_verified_user)):
"Content-Type": "application/json",
"xi-api-key": request.app.state.config.TTS_API_KEY,
},
ssl=AIOHTTP_CLIENT_SESSION_SSL,
) as r:
r.raise_for_status()
@ -439,6 +442,7 @@ async def speech(request: Request, user=Depends(get_verified_user)):
"X-Microsoft-OutputFormat": output_format,
},
data=data,
ssl=AIOHTTP_CLIENT_SESSION_SSL,
) as r:
r.raise_for_status()

View File

@ -51,7 +51,7 @@ from open_webui.utils.access_control import get_permissions
from typing import Optional, List
from ssl import CERT_REQUIRED, PROTOCOL_TLS
from ssl import CERT_NONE, CERT_REQUIRED, PROTOCOL_TLS
if ENABLE_LDAP.value:
from ldap3 import Server, Connection, NONE, Tls
@ -186,6 +186,9 @@ async def ldap_auth(request: Request, response: Response, form_data: LdapForm):
LDAP_APP_PASSWORD = request.app.state.config.LDAP_APP_PASSWORD
LDAP_USE_TLS = request.app.state.config.LDAP_USE_TLS
LDAP_CA_CERT_FILE = request.app.state.config.LDAP_CA_CERT_FILE
LDAP_VALIDATE_CERT = (
CERT_REQUIRED if request.app.state.config.LDAP_VALIDATE_CERT else CERT_NONE
)
LDAP_CIPHERS = (
request.app.state.config.LDAP_CIPHERS
if request.app.state.config.LDAP_CIPHERS
@ -197,7 +200,7 @@ async def ldap_auth(request: Request, response: Response, form_data: LdapForm):
try:
tls = Tls(
validate=CERT_REQUIRED,
validate=LDAP_VALIDATE_CERT,
version=PROTOCOL_TLS,
ca_certs_file=LDAP_CA_CERT_FILE,
ciphers=LDAP_CIPHERS,
@ -478,10 +481,6 @@ async def signup(request: Request, response: Response, form_data: SignupForm):
"admin" if user_count == 0 else request.app.state.config.DEFAULT_USER_ROLE
)
if user_count == 0:
# Disable signup after the first user is created
request.app.state.config.ENABLE_SIGNUP = False
# The password passed to bcrypt must be 72 bytes or fewer. If it is longer, it will be truncated before hashing.
if len(form_data.password.encode("utf-8")) > 72:
raise HTTPException(
@ -541,6 +540,10 @@ async def signup(request: Request, response: Response, form_data: SignupForm):
user.id, request.app.state.config.USER_PERMISSIONS
)
if user_count == 0:
# Disable signup after the first user is created
request.app.state.config.ENABLE_SIGNUP = False
return {
"token": token,
"token_type": "Bearer",
@ -696,6 +699,9 @@ async def get_admin_config(request: Request, user=Depends(get_admin_user)):
"ENABLE_CHANNELS": request.app.state.config.ENABLE_CHANNELS,
"ENABLE_NOTES": request.app.state.config.ENABLE_NOTES,
"ENABLE_USER_WEBHOOKS": request.app.state.config.ENABLE_USER_WEBHOOKS,
"PENDING_USER_OVERLAY_TITLE": request.app.state.config.PENDING_USER_OVERLAY_TITLE,
"PENDING_USER_OVERLAY_CONTENT": request.app.state.config.PENDING_USER_OVERLAY_CONTENT,
"RESPONSE_WATERMARK": request.app.state.config.RESPONSE_WATERMARK,
}
@ -713,6 +719,9 @@ class AdminConfig(BaseModel):
ENABLE_CHANNELS: bool
ENABLE_NOTES: bool
ENABLE_USER_WEBHOOKS: bool
PENDING_USER_OVERLAY_TITLE: Optional[str] = None
PENDING_USER_OVERLAY_CONTENT: Optional[str] = None
RESPONSE_WATERMARK: Optional[str] = None
@router.post("/admin/config")
@ -750,6 +759,15 @@ async def update_admin_config(
request.app.state.config.ENABLE_USER_WEBHOOKS = form_data.ENABLE_USER_WEBHOOKS
request.app.state.config.PENDING_USER_OVERLAY_TITLE = (
form_data.PENDING_USER_OVERLAY_TITLE
)
request.app.state.config.PENDING_USER_OVERLAY_CONTENT = (
form_data.PENDING_USER_OVERLAY_CONTENT
)
request.app.state.config.RESPONSE_WATERMARK = form_data.RESPONSE_WATERMARK
return {
"SHOW_ADMIN_DETAILS": request.app.state.config.SHOW_ADMIN_DETAILS,
"WEBUI_URL": request.app.state.config.WEBUI_URL,
@ -764,6 +782,9 @@ async def update_admin_config(
"ENABLE_CHANNELS": request.app.state.config.ENABLE_CHANNELS,
"ENABLE_NOTES": request.app.state.config.ENABLE_NOTES,
"ENABLE_USER_WEBHOOKS": request.app.state.config.ENABLE_USER_WEBHOOKS,
"PENDING_USER_OVERLAY_TITLE": request.app.state.config.PENDING_USER_OVERLAY_TITLE,
"PENDING_USER_OVERLAY_CONTENT": request.app.state.config.PENDING_USER_OVERLAY_CONTENT,
"RESPONSE_WATERMARK": request.app.state.config.RESPONSE_WATERMARK,
}
@ -779,6 +800,7 @@ class LdapServerConfig(BaseModel):
search_filters: str = ""
use_tls: bool = True
certificate_path: Optional[str] = None
validate_cert: bool = True
ciphers: Optional[str] = "ALL"
@ -796,6 +818,7 @@ async def get_ldap_server(request: Request, user=Depends(get_admin_user)):
"search_filters": request.app.state.config.LDAP_SEARCH_FILTERS,
"use_tls": request.app.state.config.LDAP_USE_TLS,
"certificate_path": request.app.state.config.LDAP_CA_CERT_FILE,
"validate_cert": request.app.state.config.LDAP_VALIDATE_CERT,
"ciphers": request.app.state.config.LDAP_CIPHERS,
}
@ -831,6 +854,7 @@ async def update_ldap_server(
request.app.state.config.LDAP_SEARCH_FILTERS = form_data.search_filters
request.app.state.config.LDAP_USE_TLS = form_data.use_tls
request.app.state.config.LDAP_CA_CERT_FILE = form_data.certificate_path
request.app.state.config.LDAP_VALIDATE_CERT = form_data.validate_cert
request.app.state.config.LDAP_CIPHERS = form_data.ciphers
return {
@ -845,6 +869,7 @@ async def update_ldap_server(
"search_filters": request.app.state.config.LDAP_SEARCH_FILTERS,
"use_tls": request.app.state.config.LDAP_USE_TLS,
"certificate_path": request.app.state.config.LDAP_CA_CERT_FILE,
"validate_cert": request.app.state.config.LDAP_VALIDATE_CERT,
"ciphers": request.app.state.config.LDAP_CIPHERS,
}

View File

@ -74,13 +74,17 @@ class FeedbackUserResponse(FeedbackResponse):
@router.get("/feedbacks/all", response_model=list[FeedbackUserResponse])
async def get_all_feedbacks(user=Depends(get_admin_user)):
feedbacks = Feedbacks.get_all_feedbacks()
return [
FeedbackUserResponse(
**feedback.model_dump(),
user=UserResponse(**Users.get_user_by_id(feedback.user_id).model_dump()),
feedback_list = []
for feedback in feedbacks:
user = Users.get_user_by_id(feedback.user_id)
feedback_list.append(
FeedbackUserResponse(
**feedback.model_dump(),
user=UserResponse(**user.model_dump()) if user else None,
)
)
for feedback in feedbacks
]
return feedback_list
@router.delete("/feedbacks/all")
@ -92,12 +96,7 @@ async def delete_all_feedbacks(user=Depends(get_admin_user)):
@router.get("/feedbacks/all/export", response_model=list[FeedbackModel])
async def get_all_feedbacks(user=Depends(get_admin_user)):
feedbacks = Feedbacks.get_all_feedbacks()
return [
FeedbackModel(
**feedback.model_dump(), user=Users.get_user_by_id(feedback.user_id)
)
for feedback in feedbacks
]
return feedbacks
@router.get("/feedbacks/user", response_model=list[FeedbackUserResponse])

View File

@ -95,6 +95,16 @@ def upload_file(
unsanitized_filename = file.filename
filename = os.path.basename(unsanitized_filename)
file_extension = os.path.splitext(filename)[1]
if request.app.state.config.ALLOWED_FILE_EXTENSIONS:
if file_extension not in request.app.state.config.ALLOWED_FILE_EXTENSIONS:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail=ERROR_MESSAGES.DEFAULT(
f"File type {file_extension} is not allowed"
),
)
# replace filename with uuid
id = str(uuid.uuid4())
name = filename
@ -125,33 +135,38 @@ def upload_file(
)
if process:
try:
if file.content_type:
if file.content_type.startswith(
(
"audio/mpeg",
"audio/wav",
"audio/ogg",
"audio/x-m4a",
"audio/webm",
"video/webm",
)
):
file_path = Storage.get_file(file_path)
result = transcribe(request, file_path)
if file.content_type.startswith(
(
"audio/mpeg",
"audio/wav",
"audio/ogg",
"audio/x-m4a",
"audio/webm",
"video/webm",
process_file(
request,
ProcessFileForm(file_id=id, content=result.get("text", "")),
user=user,
)
elif file.content_type not in [
"image/png",
"image/jpeg",
"image/gif",
"video/mp4",
"video/ogg",
"video/quicktime",
]:
process_file(request, ProcessFileForm(file_id=id), user=user)
else:
log.info(
f"File type {file.content_type} is not provided, but trying to process anyway"
)
):
file_path = Storage.get_file(file_path)
result = transcribe(request, file_path)
process_file(
request,
ProcessFileForm(file_id=id, content=result.get("text", "")),
user=user,
)
elif file.content_type not in [
"image/png",
"image/jpeg",
"image/gif",
"video/mp4",
"video/ogg",
"video/quicktime",
]:
process_file(request, ProcessFileForm(file_id=id), user=user)
file_item = Files.get_file_by_id(id=id)

View File

@ -10,7 +10,7 @@ from open_webui.models.knowledge import (
KnowledgeUserResponse,
)
from open_webui.models.files import Files, FileModel, FileMetadataResponse
from open_webui.retrieval.vector.connector import VECTOR_DB_CLIENT
from open_webui.retrieval.vector.factory import VECTOR_DB_CLIENT
from open_webui.routers.retrieval import (
process_file,
ProcessFileForm,

View File

@ -4,7 +4,7 @@ import logging
from typing import Optional
from open_webui.models.memories import Memories, MemoryModel
from open_webui.retrieval.vector.connector import VECTOR_DB_CLIENT
from open_webui.retrieval.vector.factory import VECTOR_DB_CLIENT
from open_webui.utils.auth import get_verified_user
from open_webui.env import SRC_LOG_LEVELS

View File

@ -1585,7 +1585,9 @@ async def upload_model(
if url_idx is None:
url_idx = 0
ollama_url = request.app.state.config.OLLAMA_BASE_URLS[url_idx]
file_path = os.path.join(UPLOAD_DIR, file.filename)
filename = os.path.basename(file.filename)
file_path = os.path.join(UPLOAD_DIR, filename)
os.makedirs(UPLOAD_DIR, exist_ok=True)
# --- P1: save file locally ---
@ -1630,13 +1632,13 @@ async def upload_model(
os.remove(file_path)
# Create model in ollama
model_name, ext = os.path.splitext(file.filename)
model_name, ext = os.path.splitext(filename)
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": {filename: f"sha256:{file_hash}"},
}
log.info(f"Model Payload: {create_payload}") # DEBUG
@ -1653,7 +1655,7 @@ async def upload_model(
done_msg = {
"done": True,
"blob": f"sha256:{file_hash}",
"name": file.filename,
"name": filename,
"model_created": model_name,
}
yield f"data: {json.dumps(done_msg)}\n\n"

View File

@ -18,7 +18,7 @@ from pydantic import BaseModel
from starlette.responses import FileResponse
from typing import Optional
from open_webui.env import SRC_LOG_LEVELS
from open_webui.env import SRC_LOG_LEVELS, AIOHTTP_CLIENT_SESSION_SSL
from open_webui.config import CACHE_DIR
from open_webui.constants import ERROR_MESSAGES
@ -69,7 +69,10 @@ async def process_pipeline_inlet_filter(request, payload, user, models):
async with aiohttp.ClientSession(trust_env=True) as session:
for filter in sorted_filters:
urlIdx = filter.get("urlIdx")
if urlIdx is None:
try:
urlIdx = int(urlIdx)
except:
continue
url = request.app.state.config.OPENAI_API_BASE_URLS[urlIdx]
@ -89,6 +92,7 @@ async def process_pipeline_inlet_filter(request, payload, user, models):
f"{url}/{filter['id']}/filter/inlet",
headers=headers,
json=request_data,
ssl=AIOHTTP_CLIENT_SESSION_SSL,
) as response:
payload = await response.json()
response.raise_for_status()
@ -118,7 +122,10 @@ async def process_pipeline_outlet_filter(request, payload, user, models):
async with aiohttp.ClientSession(trust_env=True) as session:
for filter in sorted_filters:
urlIdx = filter.get("urlIdx")
if urlIdx is None:
try:
urlIdx = int(urlIdx)
except:
continue
url = request.app.state.config.OPENAI_API_BASE_URLS[urlIdx]
@ -138,6 +145,7 @@ async def process_pipeline_outlet_filter(request, payload, user, models):
f"{url}/{filter['id']}/filter/outlet",
headers=headers,
json=request_data,
ssl=AIOHTTP_CLIENT_SESSION_SSL,
) as response:
payload = await response.json()
response.raise_for_status()
@ -197,8 +205,10 @@ async def upload_pipeline(
user=Depends(get_admin_user),
):
log.info(f"upload_pipeline: urlIdx={urlIdx}, filename={file.filename}")
filename = os.path.basename(file.filename)
# Check if the uploaded file is a python file
if not (file.filename and file.filename.endswith(".py")):
if not (filename and filename.endswith(".py")):
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="Only Python (.py) files are allowed.",
@ -206,7 +216,7 @@ async def upload_pipeline(
upload_folder = f"{CACHE_DIR}/pipelines"
os.makedirs(upload_folder, exist_ok=True)
file_path = os.path.join(upload_folder, file.filename)
file_path = os.path.join(upload_folder, filename)
r = None
try:

View File

@ -36,7 +36,7 @@ from open_webui.models.knowledge import Knowledges
from open_webui.storage.provider import Storage
from open_webui.retrieval.vector.connector import VECTOR_DB_CLIENT
from open_webui.retrieval.vector.factory import VECTOR_DB_CLIENT
# Document loaders
from open_webui.retrieval.loaders.main import Loader
@ -352,10 +352,13 @@ async def get_rag_config(request: Request, user=Depends(get_admin_user)):
# Content extraction settings
"CONTENT_EXTRACTION_ENGINE": request.app.state.config.CONTENT_EXTRACTION_ENGINE,
"PDF_EXTRACT_IMAGES": request.app.state.config.PDF_EXTRACT_IMAGES,
"EXTERNAL_DOCUMENT_LOADER_URL": request.app.state.config.EXTERNAL_DOCUMENT_LOADER_URL,
"EXTERNAL_DOCUMENT_LOADER_API_KEY": request.app.state.config.EXTERNAL_DOCUMENT_LOADER_API_KEY,
"TIKA_SERVER_URL": request.app.state.config.TIKA_SERVER_URL,
"DOCLING_SERVER_URL": request.app.state.config.DOCLING_SERVER_URL,
"DOCLING_OCR_ENGINE": request.app.state.config.DOCLING_OCR_ENGINE,
"DOCLING_OCR_LANG": request.app.state.config.DOCLING_OCR_LANG,
"DOCLING_DO_PICTURE_DESCRIPTION": request.app.state.config.DOCLING_DO_PICTURE_DESCRIPTION,
"DOCUMENT_INTELLIGENCE_ENDPOINT": request.app.state.config.DOCUMENT_INTELLIGENCE_ENDPOINT,
"DOCUMENT_INTELLIGENCE_KEY": request.app.state.config.DOCUMENT_INTELLIGENCE_KEY,
"MISTRAL_OCR_API_KEY": request.app.state.config.MISTRAL_OCR_API_KEY,
@ -492,10 +495,14 @@ class ConfigForm(BaseModel):
# Content extraction settings
CONTENT_EXTRACTION_ENGINE: Optional[str] = None
PDF_EXTRACT_IMAGES: Optional[bool] = None
EXTERNAL_DOCUMENT_LOADER_URL: Optional[str] = None
EXTERNAL_DOCUMENT_LOADER_API_KEY: Optional[str] = None
TIKA_SERVER_URL: Optional[str] = None
DOCLING_SERVER_URL: Optional[str] = None
DOCLING_OCR_ENGINE: Optional[str] = None
DOCLING_OCR_LANG: Optional[str] = None
DOCLING_DO_PICTURE_DESCRIPTION: Optional[bool] = None
DOCUMENT_INTELLIGENCE_ENDPOINT: Optional[str] = None
DOCUMENT_INTELLIGENCE_KEY: Optional[str] = None
MISTRAL_OCR_API_KEY: Optional[str] = None
@ -581,6 +588,16 @@ async def update_rag_config(
if form_data.PDF_EXTRACT_IMAGES is not None
else request.app.state.config.PDF_EXTRACT_IMAGES
)
request.app.state.config.EXTERNAL_DOCUMENT_LOADER_URL = (
form_data.EXTERNAL_DOCUMENT_LOADER_URL
if form_data.EXTERNAL_DOCUMENT_LOADER_URL is not None
else request.app.state.config.EXTERNAL_DOCUMENT_LOADER_URL
)
request.app.state.config.EXTERNAL_DOCUMENT_LOADER_API_KEY = (
form_data.EXTERNAL_DOCUMENT_LOADER_API_KEY
if form_data.EXTERNAL_DOCUMENT_LOADER_API_KEY is not None
else request.app.state.config.EXTERNAL_DOCUMENT_LOADER_API_KEY
)
request.app.state.config.TIKA_SERVER_URL = (
form_data.TIKA_SERVER_URL
if form_data.TIKA_SERVER_URL is not None
@ -601,6 +618,13 @@ async def update_rag_config(
if form_data.DOCLING_OCR_LANG is not None
else request.app.state.config.DOCLING_OCR_LANG
)
request.app.state.config.DOCLING_DO_PICTURE_DESCRIPTION = (
form_data.DOCLING_DO_PICTURE_DESCRIPTION
if form_data.DOCLING_DO_PICTURE_DESCRIPTION is not None
else request.app.state.config.DOCLING_DO_PICTURE_DESCRIPTION
)
request.app.state.config.DOCUMENT_INTELLIGENCE_ENDPOINT = (
form_data.DOCUMENT_INTELLIGENCE_ENDPOINT
if form_data.DOCUMENT_INTELLIGENCE_ENDPOINT is not None
@ -809,10 +833,13 @@ async def update_rag_config(
# Content extraction settings
"CONTENT_EXTRACTION_ENGINE": request.app.state.config.CONTENT_EXTRACTION_ENGINE,
"PDF_EXTRACT_IMAGES": request.app.state.config.PDF_EXTRACT_IMAGES,
"EXTERNAL_DOCUMENT_LOADER_URL": request.app.state.config.EXTERNAL_DOCUMENT_LOADER_URL,
"EXTERNAL_DOCUMENT_LOADER_API_KEY": request.app.state.config.EXTERNAL_DOCUMENT_LOADER_API_KEY,
"TIKA_SERVER_URL": request.app.state.config.TIKA_SERVER_URL,
"DOCLING_SERVER_URL": request.app.state.config.DOCLING_SERVER_URL,
"DOCLING_OCR_ENGINE": request.app.state.config.DOCLING_OCR_ENGINE,
"DOCLING_OCR_LANG": request.app.state.config.DOCLING_OCR_LANG,
"DOCLING_DO_PICTURE_DESCRIPTION": request.app.state.config.DOCLING_DO_PICTURE_DESCRIPTION,
"DOCUMENT_INTELLIGENCE_ENDPOINT": request.app.state.config.DOCUMENT_INTELLIGENCE_ENDPOINT,
"DOCUMENT_INTELLIGENCE_KEY": request.app.state.config.DOCUMENT_INTELLIGENCE_KEY,
"MISTRAL_OCR_API_KEY": request.app.state.config.MISTRAL_OCR_API_KEY,
@ -1129,10 +1156,13 @@ def process_file(
file_path = Storage.get_file(file_path)
loader = Loader(
engine=request.app.state.config.CONTENT_EXTRACTION_ENGINE,
EXTERNAL_DOCUMENT_LOADER_URL=request.app.state.config.EXTERNAL_DOCUMENT_LOADER_URL,
EXTERNAL_DOCUMENT_LOADER_API_KEY=request.app.state.config.EXTERNAL_DOCUMENT_LOADER_API_KEY,
TIKA_SERVER_URL=request.app.state.config.TIKA_SERVER_URL,
DOCLING_SERVER_URL=request.app.state.config.DOCLING_SERVER_URL,
DOCLING_OCR_ENGINE=request.app.state.config.DOCLING_OCR_ENGINE,
DOCLING_OCR_LANG=request.app.state.config.DOCLING_OCR_LANG,
DOCLING_DO_PICTURE_DESCRIPTION=request.app.state.config.DOCLING_DO_PICTURE_DESCRIPTION,
PDF_EXTRACT_IMAGES=request.app.state.config.PDF_EXTRACT_IMAGES,
DOCUMENT_INTELLIGENCE_ENDPOINT=request.app.state.config.DOCUMENT_INTELLIGENCE_ENDPOINT,
DOCUMENT_INTELLIGENCE_KEY=request.app.state.config.DOCUMENT_INTELLIGENCE_KEY,

View File

@ -651,7 +651,7 @@ def apply_params_to_form_data(form_data, model):
convert_logit_bias_input_to_json(params["logit_bias"])
)
except Exception as e:
print(f"Error parsing logit_bias: {e}")
log.exception(f"Error parsing logit_bias: {e}")
return form_data

View File

@ -41,6 +41,7 @@ from open_webui.config import (
)
from open_webui.constants import ERROR_MESSAGES, WEBHOOK_MESSAGES
from open_webui.env import (
AIOHTTP_CLIENT_SESSION_SSL,
WEBUI_NAME,
WEBUI_AUTH_COOKIE_SAME_SITE,
WEBUI_AUTH_COOKIE_SECURE,
@ -305,8 +306,10 @@ class OAuthManager:
get_kwargs["headers"] = {
"Authorization": f"Bearer {access_token}",
}
async with aiohttp.ClientSession() as session:
async with session.get(picture_url, **get_kwargs) as resp:
async with aiohttp.ClientSession(trust_env=True) as session:
async with session.get(
picture_url, **get_kwargs, ssl=AIOHTTP_CLIENT_SESSION_SSL
) as resp:
if resp.ok:
picture = await resp.read()
base64_encoded_picture = base64.b64encode(picture).decode(
@ -371,7 +374,9 @@ class OAuthManager:
headers = {"Authorization": f"Bearer {access_token}"}
async with aiohttp.ClientSession(trust_env=True) as session:
async with session.get(
"https://api.github.com/user/emails", headers=headers
"https://api.github.com/user/emails",
headers=headers,
ssl=AIOHTTP_CLIENT_SESSION_SSL,
) as resp:
if resp.ok:
emails = await resp.json()

View File

@ -37,6 +37,7 @@ from open_webui.models.tools import Tools
from open_webui.models.users import UserModel
from open_webui.utils.plugin import load_tool_module_by_id
from open_webui.env import (
SRC_LOG_LEVELS,
AIOHTTP_CLIENT_TIMEOUT_TOOL_SERVER_DATA,
AIOHTTP_CLIENT_SESSION_TOOL_SERVER_SSL,
)
@ -44,6 +45,7 @@ from open_webui.env import (
import copy
log = logging.getLogger(__name__)
log.setLevel(SRC_LOG_LEVELS["MODELS"])
def get_async_tool_function_and_apply_extra_params(
@ -477,7 +479,7 @@ async def get_tool_server_data(token: str, url: str) -> Dict[str, Any]:
"specs": convert_openapi_to_tool_payload(res),
}
print("Fetched data:", data)
log.info("Fetched data:", data)
return data
@ -510,7 +512,7 @@ async def get_tool_servers_data(
results = []
for (idx, server, url, _), response in zip(server_entries, responses):
if isinstance(response, Exception):
print(f"Failed to connect to {url} OpenAPI tool server")
log.error(f"Failed to connect to {url} OpenAPI tool server")
continue
results.append(
@ -620,5 +622,5 @@ async def execute_tool_server(
except Exception as err:
error = str(err)
print("API Request Error:", error)
log.exception("API Request Error:", error)
return {"error": error}

View File

@ -6,6 +6,7 @@
"dev": "npm run pyodide:fetch && vite dev --host",
"dev:5050": "npm run pyodide:fetch && vite dev --port 5050",
"build": "npm run pyodide:fetch && vite build",
"build:watch": "npm run pyodide:fetch && vite build --watch",
"preview": "vite preview",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",

View File

@ -314,12 +314,20 @@ input[type='number'] {
.ProseMirror p.is-editor-empty:first-child::before {
content: attr(data-placeholder);
float: left;
color: #adb5bd;
/* Below color is from tailwind, and has the proper contrast
text-gray-600 from: https://tailwindcss.com/docs/color */
color: #676767;
pointer-events: none;
@apply line-clamp-1 absolute;
}
@media (prefers-color-scheme: dark) {
.ProseMirror p.is-editor-empty:first-child::before {
color: #757575;
}
}
.ai-autocompletion::after {
color: #a0a0a0;

View File

@ -124,6 +124,13 @@
};
const submitHandler = async () => {
if (
RAGConfig.CONTENT_EXTRACTION_ENGINE === 'external' &&
RAGConfig.EXTERNAL_DOCUMENT_LOADER_URL === ''
) {
toast.error($i18n.t('External Document Loader URL required.'));
return;
}
if (RAGConfig.CONTENT_EXTRACTION_ENGINE === 'tika' && RAGConfig.TIKA_SERVER_URL === '') {
toast.error($i18n.t('Tika Server URL required.'));
return;
@ -246,7 +253,7 @@
<hr class=" border-gray-100 dark:border-gray-850 my-2" />
<div class="mb-2.5 flex flex-col w-full justify-between">
<div class="flex w-full justify-between">
<div class="flex w-full justify-between mb-1">
<div class="self-center text-xs font-medium">
{$i18n.t('Content Extraction Engine')}
</div>
@ -256,6 +263,7 @@
bind:value={RAGConfig.CONTENT_EXTRACTION_ENGINE}
>
<option value="">{$i18n.t('Default')}</option>
<option value="external">{$i18n.t('External')}</option>
<option value="tika">{$i18n.t('Tika')}</option>
<option value="docling">{$i18n.t('Docling')}</option>
<option value="document_intelligence">{$i18n.t('Document Intelligence')}</option>
@ -275,11 +283,24 @@
</div>
</div>
</div>
{:else if RAGConfig.CONTENT_EXTRACTION_ENGINE === 'external'}
<div class="my-0.5 flex gap-2 pr-2">
<input
class="flex-1 w-full text-sm bg-transparent outline-hidden"
placeholder={$i18n.t('Enter External Document Loader URL')}
bind:value={RAGConfig.EXTERNAL_DOCUMENT_LOADER_URL}
/>
<SensitiveInput
placeholder={$i18n.t('Enter External Document Loader API Key')}
required={false}
bind:value={RAGConfig.EXTERNAL_DOCUMENT_LOADER_API_KEY}
/>
</div>
{:else if RAGConfig.CONTENT_EXTRACTION_ENGINE === 'tika'}
<div class="flex w-full mt-1">
<div class="flex-1 mr-2">
<input
class="flex-1 w-full rounded-lg text-sm bg-transparent outline-hidden"
class="flex-1 w-full text-sm bg-transparent outline-hidden"
placeholder={$i18n.t('Enter Tika Server URL')}
bind:value={RAGConfig.TIKA_SERVER_URL}
/>
@ -288,27 +309,38 @@
{:else if RAGConfig.CONTENT_EXTRACTION_ENGINE === 'docling'}
<div class="flex w-full mt-1">
<input
class="flex-1 w-full rounded-lg text-sm bg-transparent outline-hidden"
class="flex-1 w-full text-sm bg-transparent outline-hidden"
placeholder={$i18n.t('Enter Docling Server URL')}
bind:value={RAGConfig.DOCLING_SERVER_URL}
/>
</div>
<div class="flex w-full mt-2">
<input
class="flex-1 w-full rounded-lg text-sm bg-transparent outline-hidden"
class="flex-1 w-full text-sm bg-transparent outline-hidden"
placeholder={$i18n.t('Enter Docling OCR Engine')}
bind:value={RAGConfig.DOCLING_OCR_ENGINE}
/>
<input
class="flex-1 w-full rounded-lg text-sm bg-transparent outline-hidden"
class="flex-1 w-full text-sm bg-transparent outline-hidden"
placeholder={$i18n.t('Enter Docling OCR Language(s)')}
bind:value={RAGConfig.DOCLING_OCR_LANG}
/>
</div>
<div class="flex w-full mt-2">
<div class="flex-1 flex justify-between">
<div class=" self-center text-xs font-medium">
{$i18n.t('Describe Pictures in Documents')}
</div>
<div class="flex items-center relative">
<Switch bind:state={RAGConfig.DOCLING_DO_PICTURE_DESCRIPTION} />
</div>
</div>
</div>
{:else if RAGConfig.CONTENT_EXTRACTION_ENGINE === 'document_intelligence'}
<div class="my-0.5 flex gap-2 pr-2">
<input
class="flex-1 w-full rounded-lg text-sm bg-transparent outline-hidden"
class="flex-1 w-full text-sm bg-transparent outline-hidden"
placeholder={$i18n.t('Enter Document Intelligence Endpoint')}
bind:value={RAGConfig.DOCUMENT_INTELLIGENCE_ENDPOINT}
/>
@ -437,7 +469,7 @@
{#if embeddingEngine === 'openai'}
<div class="my-0.5 flex gap-2 pr-2">
<input
class="flex-1 w-full rounded-lg text-sm bg-transparent outline-hidden"
class="flex-1 w-full text-sm bg-transparent outline-hidden"
placeholder={$i18n.t('API Base URL')}
bind:value={OpenAIUrl}
required
@ -448,7 +480,7 @@
{:else if embeddingEngine === 'ollama'}
<div class="my-0.5 flex gap-2 pr-2">
<input
class="flex-1 w-full rounded-lg text-sm bg-transparent outline-hidden"
class="flex-1 w-full text-sm bg-transparent outline-hidden"
placeholder={$i18n.t('API Base URL')}
bind:value={OllamaUrl}
required
@ -471,7 +503,7 @@
<div class="flex w-full">
<div class="flex-1 mr-2">
<input
class="flex-1 w-full rounded-lg text-sm bg-transparent outline-hidden"
class="flex-1 w-full text-sm bg-transparent outline-hidden"
bind:value={embeddingModel}
placeholder={$i18n.t('Set embedding model')}
required
@ -482,7 +514,7 @@
<div class="flex w-full">
<div class="flex-1 mr-2">
<input
class="flex-1 w-full rounded-lg text-sm bg-transparent outline-hidden"
class="flex-1 w-full text-sm bg-transparent outline-hidden"
placeholder={$i18n.t('Set embedding model (e.g. {{model}})', {
model: embeddingModel.slice(-40)
})}
@ -639,7 +671,7 @@
{#if RAGConfig.RAG_RERANKING_ENGINE === 'external'}
<div class="my-0.5 flex gap-2 pr-2">
<input
class="flex-1 w-full rounded-lg text-sm bg-transparent outline-hidden"
class="flex-1 w-full text-sm bg-transparent outline-hidden"
placeholder={$i18n.t('API Base URL')}
bind:value={RAGConfig.RAG_EXTERNAL_RERANKER_URL}
required
@ -661,7 +693,7 @@
<div class="flex w-full">
<div class="flex-1 mr-2">
<input
class="flex-1 w-full rounded-lg text-sm bg-transparent outline-hidden"
class="flex-1 w-full text-sm bg-transparent outline-hidden"
placeholder={$i18n.t('Set reranking model (e.g. {{model}})', {
model: 'BAAI/bge-reranker-v2-m3'
})}
@ -677,7 +709,7 @@
<div class=" self-center text-xs font-medium">{$i18n.t('Top K')}</div>
<div class="flex items-center relative">
<input
class="flex-1 w-full rounded-lg text-sm bg-transparent outline-hidden"
class="flex-1 w-full text-sm bg-transparent outline-hidden"
type="number"
placeholder={$i18n.t('Enter Top K')}
bind:value={RAGConfig.TOP_K}
@ -692,7 +724,7 @@
<div class="self-center text-xs font-medium">{$i18n.t('Top K Reranker')}</div>
<div class="flex items-center relative">
<input
class="flex-1 w-full rounded-lg text-sm bg-transparent outline-hidden"
class="flex-1 w-full text-sm bg-transparent outline-hidden"
type="number"
placeholder={$i18n.t('Enter Top K Reranker')}
bind:value={RAGConfig.TOP_K_RERANKER}
@ -711,7 +743,7 @@
</div>
<div class="flex items-center relative">
<input
class="flex-1 w-full rounded-lg text-sm bg-transparent outline-hidden"
class="flex-1 w-full text-sm bg-transparent outline-hidden"
type="number"
step="0.01"
placeholder={$i18n.t('Enter Score')}
@ -770,7 +802,7 @@
placement="top-start"
>
<input
class="flex-1 w-full rounded-lg text-sm bg-transparent outline-hidden"
class="flex-1 w-full text-sm bg-transparent outline-hidden"
type="number"
placeholder={$i18n.t('Leave empty for unlimited')}
bind:value={RAGConfig.FILE_MAX_SIZE}
@ -791,7 +823,7 @@
placement="top-start"
>
<input
class="flex-1 w-full rounded-lg text-sm bg-transparent outline-hidden"
class="flex-1 w-full text-sm bg-transparent outline-hidden"
type="number"
placeholder={$i18n.t('Leave empty for unlimited')}
bind:value={RAGConfig.FILE_MAX_COUNT}

View File

@ -18,6 +18,7 @@
import { compareVersion } from '$lib/utils';
import { onMount, getContext } from 'svelte';
import { toast } from 'svelte-sonner';
import Textarea from '$lib/components/common/Textarea.svelte';
const i18n = getContext('i18n');
@ -305,6 +306,31 @@
<Switch bind:state={adminConfig.SHOW_ADMIN_DETAILS} />
</div>
<div class="mb-2.5">
<div class=" self-center text-xs font-medium mb-2">
{$i18n.t('Pending User Overlay Title')}
</div>
<Textarea
rows={2}
placeholder={$i18n.t(
'Enter a title for the pending user info overlay. Leave empty for default.'
)}
bind:value={adminConfig.PENDING_USER_OVERLAY_TITLE}
/>
</div>
<div class="mb-2.5">
<div class=" self-center text-xs font-medium mb-2">
{$i18n.t('Pending User Overlay Content')}
</div>
<Textarea
placeholder={$i18n.t(
'Enter content for the pending user info overlay. Leave empty for default.'
)}
bind:value={adminConfig.PENDING_USER_OVERLAY_CONTENT}
/>
</div>
<div class="mb-2.5 flex w-full justify-between pr-2">
<div class=" self-center text-xs font-medium">{$i18n.t('Enable API Key')}</div>
@ -559,6 +585,13 @@
/>
</div>
</div>
<div class="flex justify-between items-center text-xs">
<div class=" font-medium">Validate certificate</div>
<div class="mt-1">
<Switch bind:state={LDAP_SERVER.validate_cert} />
</div>
</div>
<div class="flex w-full gap-2">
<div class="w-full">
<div class=" self-center text-xs font-medium min-w-fit mb-1">
@ -625,6 +658,16 @@
<Switch bind:state={adminConfig.ENABLE_USER_WEBHOOKS} />
</div>
<div class="mb-2.5">
<div class=" self-center text-xs font-medium mb-2">
{$i18n.t('Response Watermark')}
</div>
<Textarea
placeholder={$i18n.t('Enter a watermark for the response. Leave empty for none.')}
bind:value={adminConfig.RESPONSE_WATERMARK}
/>
</div>
<div class="mb-2.5 w-full justify-between">
<div class="flex w-full justify-between">
<div class=" self-center text-xs font-medium">{$i18n.t('WebUI URL')}</div>

View File

@ -823,7 +823,7 @@
id="chat-input"
dir="auto"
bind:this={chatInputElement}
class="scrollbar-hidden bg-transparent dark:text-gray-100 outline-hidden w-full pt-3 px-1 resize-none"
class="scrollbar-hidden bg-transparent dark:text-gray-200 outline-hidden w-full pt-3 px-1 resize-none"
placeholder={placeholder ? placeholder : $i18n.t('Send a Message')}
bind:value={prompt}
on:compositionstart={() => (isComposing = true)}

View File

@ -157,6 +157,10 @@
const copyToClipboard = async (text) => {
text = removeAllDetails(text);
if (($config?.ui?.response_watermark ?? '').trim() !== '') {
text = `${text}\n\n${$config?.ui?.response_watermark}`;
}
const res = await _copyToClipboard(text, $settings?.copyFormatted ?? false);
if (res) {
toast.success($i18n.t('Copying to clipboard was successful!'));
@ -560,13 +564,18 @@
await tick();
if (buttonsContainerElement) {
console.log(buttonsContainerElement);
buttonsContainerElement.addEventListener('wheel', function (event) {
// console.log(event.deltaY);
event.preventDefault();
if (event.deltaY !== 0) {
// Adjust horizontal scroll position based on vertical scroll
buttonsContainerElement.scrollLeft += event.deltaY;
buttonsContainerElement.addEventListener('wheel', function (event) {
if (buttonsContainerElement.scrollWidth <= buttonsContainerElement.clientWidth) {
// If the container is not scrollable, horizontal scroll
return;
} else {
event.preventDefault();
if (event.deltaY !== 0) {
// Adjust horizontal scroll position based on vertical scroll
buttonsContainerElement.scrollLeft += event.deltaY;
}
}
});
}

View File

@ -114,7 +114,9 @@
</div>
{#if showSetDefault}
<div class=" absolute text-left mt-[1px] ml-1 text-[0.7rem] text-gray-500 font-primary">
<div
class="absolute text-left mt-[1px] ml-1 text-[0.7rem] text-gray-600 dark:text-gray-400 font-primary"
>
<button on:click={saveDefaultModel}> {$i18n.t('Set as default')}</button>
</div>
{/if}

View File

@ -64,7 +64,7 @@
}
</script>
<div class="mb-1 flex gap-1 text-xs font-medium items-center text-gray-400 dark:text-gray-600">
<div class="mb-1 flex gap-1 text-xs font-medium items-center text-gray-600 dark:text-gray-400">
{#if filteredPrompts.length > 0}
<Bolt />
{$i18n.t('Suggested')}
@ -74,7 +74,7 @@
<div
class="flex w-full {$settings?.landingPageMode === 'chat'
? ' -mt-1'
: 'text-center items-center justify-center'} self-start text-gray-400 dark:text-gray-600"
: 'text-center items-center justify-center'} self-start text-gray-600 dark:text-gray-400"
>
{$WEBUI_NAME} ‧ v{WEBUI_VERSION}
</div>
@ -98,7 +98,7 @@
>
{prompt.title[0]}
</div>
<div class="text-xs text-gray-500 font-normal line-clamp-1">
<div class="text-xs text-gray-600 dark:text-gray-400 font-normal line-clamp-1">
{prompt.title[1]}
</div>
{:else}
@ -107,7 +107,9 @@
>
{prompt.content}
</div>
<div class="text-xs text-gray-500 font-normal line-clamp-1">{$i18n.t('Prompt')}</div>
<div class="text-xs text-gray-600 dark:text-gray-400 font-normal line-clamp-1">
{$i18n.t('Prompt')}
</div>
{/if}
</div>
</button>

View File

@ -7,7 +7,7 @@
export let minSize = null;
export let required = false;
export let className =
'w-full rounded-lg px-3 py-2 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden h-full';
'w-full rounded-lg px-3.5 py-2 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden h-full';
let textareaElement;

View File

@ -1,6 +1,7 @@
<script lang="ts">
import { getAdminDetails } from '$lib/apis/auths';
import { onMount, tick, getContext } from 'svelte';
import { config } from '$lib/stores';
const i18n = getContext('i18n');
@ -20,16 +21,29 @@
>
<div class="m-auto pb-10 flex flex-col justify-center">
<div class="max-w-md">
<div class="text-center dark:text-white text-2xl font-medium z-50">
{$i18n.t('Account Activation Pending')}<br />
{$i18n.t('Contact Admin for WebUI Access')}
<div
class="text-center dark:text-white text-2xl font-medium z-50"
style="white-space: pre-wrap;"
>
{#if ($config?.ui?.pending_user_overlay_title ?? '').trim() !== ''}
{$config.ui.pending_user_overlay_title}
{:else}
{$i18n.t('Account Activation Pending')}<br />
{$i18n.t('Contact Admin for WebUI Access')}
{/if}
</div>
<div class=" mt-4 text-center text-sm dark:text-gray-200 w-full">
{$i18n.t('Your account status is currently pending activation.')}<br />
{$i18n.t(
'To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.'
)}
<div
class=" mt-4 text-center text-sm dark:text-gray-200 w-full"
style="white-space: pre-wrap;"
>
{#if ($config?.ui?.pending_user_overlay_content ?? '').trim() !== ''}
{$config.ui.pending_user_overlay_content}
{:else}
{$i18n.t('Your account status is currently pending activation.')}{'\n'}{$i18n.t(
'To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.'
)}
{/if}
</div>
{#if adminDetails}

View File

@ -14,7 +14,7 @@
</script>
<div
class="flex items-start bg-[#F1F8FE] dark:bg-[#020C1D] border border-[3371D5] dark:border-[#03113B] text-[#3371D5] dark:text-[#6795EC] rounded-lg px-3.5 py-3 text-xs max-w-80 pr-2 w-full shadow-lg"
class="flex items-start bg-[#F1F8FE] dark:bg-[#020C1D] border border-[3371D5] dark:border-[#03113B] text-[#2B6CD4] dark:text-[#6795EC] rounded-lg px-3.5 py-3 text-xs max-w-80 pr-2 w-full shadow-lg"
>
<div class="flex-1 font-medium">
{$i18n.t(`A new version (v{{LATEST_VERSION}}) is now available.`, {

View File

@ -243,7 +243,7 @@
</div>
<div class=" my-2 mb-5 gap-2 grid lg:grid-cols-2 xl:grid-cols-3" id="model-list">
{#each filteredModels as model}
{#each filteredModels as model (model.id)}
<div
class=" flex flex-col cursor-pointer w-full px-3 py-2 dark:hover:bg-white/5 hover:bg-black/5 rounded-xl transition"
id="model-item-{model.id}"

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} حذف",
"Deleted {{name}}": "حذف {{name}}",
"Deleted User": "",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "",
"Description": "وصف",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "تأكد من أن ملف CSV الخاص بك يتضمن 4 أعمدة بهذا الترتيب: Name, Email, Password, Role.",
"Enter {{role}} message here": "أدخل رسالة {{role}} هنا",
"Enter a detail about yourself for your LLMs to recall": "ادخل معلومات عنك تريد أن يتذكرها الموديل",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "",
"Enter Application DN": "",
"Enter Application DN Password": "",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "أدخل الChunk Overlap",
"Enter Chunk Size": "أدخل Chunk الحجم",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF ملف (.pdf)",
"PDF Extract Images (OCR)": "PDF أستخرج الصور (OCR)",
"pending": "قيد الانتظار",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "",
"Permission denied when accessing microphone": "",
"Permission denied when accessing microphone: {{error}}": "{{error}} تم رفض الإذن عند الوصول إلى الميكروفون ",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} حذف",
"Deleted {{name}}": "حذف {{name}}",
"Deleted User": "مستخدم محذوف",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "صف قاعدة معرفتك وأهدافك",
"Description": "وصف",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "تأكد من أن ملف CSV الخاص بك يتضمن 4 أعمدة بهذا الترتيب: Name, Email, Password, Role.",
"Enter {{role}} message here": "أدخل رسالة {{role}} هنا",
"Enter a detail about yourself for your LLMs to recall": "ادخل معلومات عنك تريد أن يتذكرها الموديل",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "أدخل سلسلة توثيق API (مثال: username:password)",
"Enter Application DN": "أدخل DN التطبيق",
"Enter Application DN Password": "أدخل كلمة مرور DN التطبيق",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "أدخل الChunk Overlap",
"Enter Chunk Size": "أدخل Chunk الحجم",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "أدخل أزواج \"الرمز:قيمة التحيز\" مفصولة بفواصل (مثال: 5432:100، 413:-100)",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "أدخل الوصف",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF ملف (.pdf)",
"PDF Extract Images (OCR)": "PDF أستخرج الصور (OCR)",
"pending": "قيد الانتظار",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "تم رفض الإذن عند محاولة الوصول إلى أجهزة الوسائط",
"Permission denied when accessing microphone": "تم رفض الإذن عند محاولة الوصول إلى الميكروفون",
"Permission denied when accessing microphone: {{error}}": "{{error}} تم رفض الإذن عند الوصول إلى الميكروفون ",

View File

@ -12,9 +12,9 @@
"{{COUNT}} Replies": "{{COUNT}} Отговори",
"{{user}}'s Chats": "{{user}}'s чатове",
"{{webUIName}} Backend Required": "{{webUIName}} Изисква се Бекенд",
"*Prompt node ID(s) are required for image generation": "*Идентификаторът(ите) на node-а се изисква(т) за генериране на изображения",
"*Prompt node ID(s) are required for image generation": "*Идентификатор(ите) на възел-а се изисква(т) за генериране на изображения",
"A new version (v{{LATEST_VERSION}}) is now available.": "Вече е налична нова версия (v{{LATEST_VERSION}}).",
"A task model is used when performing tasks such as generating titles for chats and web search queries": "Моделът на задачите се използва при изпълнение на задачи като генериране на заглавия за чатове и заявки за търсене в мрежата",
"A task model is used when performing tasks such as generating titles for chats and web search queries": "Моделът на задачите се използва при изпълнението на задачите като генериране на заглавия за чатове и заявки за търсене в мрежата",
"a user": "потребител",
"About": "Относно",
"Accept autocomplete generation / Jump to prompt variable": "",
@ -29,7 +29,7 @@
"Activate this command by typing \"/{{COMMAND}}\" to chat input.": "Активирайте тази команда, като въведете \"/{{COMMAND}}\" в полето за чат.",
"Active Users": "Активни потребители",
"Add": "Добавяне",
"Add a model ID": "Добавете ID на модел",
"Add a model ID": "Добавете ID на модела",
"Add a short description about what this model does": "Добавете кратко описание за това какво прави този модел",
"Add a tag": "Добавяне на таг",
"Add Arena Model": "Добавяне на Arena модел",
@ -51,9 +51,9 @@
"admin": "админ",
"Admin": "Администратор",
"Admin Panel": "Панел на Администратор",
"Admin Settings": "Настройки на Администратор",
"Admin Settings": "Настройки на администратора",
"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Администраторите имат достъп до всички инструменти по всяко време; потребителите се нуждаят от инструменти, присвоени за всеки модел в работното пространство.",
"Advanced Parameters": "Разширени Параметри",
"Advanced Parameters": "Разширени параметри",
"Advanced Params": "Разширени параметри",
"All": "",
"All Documents": "Всички Документи",
@ -71,7 +71,7 @@
"Allow Speech to Text": "",
"Allow Temporary Chat": "Разреши временен чат",
"Allow Text to Speech": "",
"Allow User Location": "Разреши местоположение на потребителя",
"Allow User Location": "Разреши местоположението на потребителя",
"Allow Voice Interruption in Call": "Разреши прекъсване на гласа по време на разговор",
"Allowed Endpoints": "Разрешени крайни точки",
"Already have an account?": "Вече имате акаунт?",
@ -98,18 +98,18 @@
"applies to all users with the \"user\" role": "прилага се за всички потребители с роля \"потребител\"",
"April": "Април",
"Archive": "Архивирани Чатове",
"Archive All Chats": "Архив Всички чатове",
"Archive All Chats": "Архивирай Всички чатове",
"Archived Chats": "Архивирани Чатове",
"archived-chat-export": "експорт-на-архивирани-чатове",
"Are you sure you want to clear all memories? This action cannot be undone.": "",
"Are you sure you want to clear all memories? This action cannot be undone.": "Сигурни ли сте, че исткате да изчистите всички спомени? Това е необратимо.",
"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?": "Сигурни ли сте, че искате да разархивирате всички архивирани чатове?",
"Are you sure you want to update this user's role to **{{ROLE}}**?": "",
"Are you sure?": "Сигурни ли сте?",
"Arena Models": "Arena Модели",
"Arena Models": "Арена Модели",
"Artifacts": "Артефакти",
"Ask": "",
"Ask": "Питай",
"Ask a question": "Задайте въпрос",
"Assistant": "Асистент",
"Attach file from knowledge": "",
@ -121,7 +121,7 @@
"Auth": "",
"Authenticate": "Удостоверяване",
"Authentication": "Автентикация",
"Auto": "",
"Auto": "Авто",
"Auto-Copy Response to Clipboard": "Автоматично копиране на отговор в клипборда",
"Auto-playback response": "Автоматично възпроизвеждане на отговора",
"Autocomplete Generation": "Генериране на автоматично довършване",
@ -131,7 +131,7 @@
"AUTOMATIC1111 Base URL": "AUTOMATIC1111 Базов URL",
"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 Базов URL е задължителен.",
"Available list": "Наличен списък",
"Available Tools": "",
"Available Tools": "Налични инструменти",
"available!": "наличен!",
"Awful": "Ужасно",
"Azure AI Speech": "Azure AI Реч",
@ -142,7 +142,7 @@
"Base Model (From)": "Базов модел (от)",
"Batch Size (num_batch)": "Размер на партидата (num_batch)",
"before": "преди",
"Being lazy": "Да бъдеш мързелив",
"Being lazy": "Мързелив е",
"Beta": "Бета",
"Bing Search V7 Endpoint": "Крайна точка за Bing Search V7",
"Bing Search V7 Subscription Key": "Абонаментен ключ за Bing Search V7",
@ -154,7 +154,7 @@
"Bypass Embedding and Retrieval": "",
"Calendar": "Календар",
"Call": "Обаждане",
"Call feature is not supported when using Web STT engine": "Функцията за обаждане не се поддържа при използване на Web STT двигател",
"Call feature is not supported when using Web STT engine": "Функцията за обаждане не се поддържа при използването на Web STT двигател",
"Camera": "Камера",
"Cancel": "Отказ",
"Capabilities": "Възможности",
@ -169,7 +169,7 @@
"Chart new frontiers": "Начертайте нови граници",
"Chat": "Чат",
"Chat Background Image": "Фоново изображение на чата",
"Chat Bubble UI": "UI за чат балон",
"Chat Bubble UI": "Потребителски интерфейс за чат балон",
"Chat Controls": "Контроли на чата",
"Chat direction": "Направление на чата",
"Chat Overview": "Преглед на чата",
@ -191,7 +191,7 @@
"Click here for help.": "Натиснете тук за помощ.",
"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 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 файл.",
@ -206,12 +206,12 @@
"Close": "Затвори",
"Code execution": "Изпълнение на код",
"Code Execution": "Изпълнение на код",
"Code Execution Engine": "Двигател за изпълнение на код",
"Code Execution Engine": "Двигател за изпълнение на кода",
"Code Execution Timeout": "",
"Code formatted successfully": "Кодът е форматиран успешно",
"Code Interpreter": "Интерпретатор на код",
"Code Interpreter Engine": "Двигател на интерпретатора на код",
"Code Interpreter Prompt Template": "Шаблон за промпт на интерпретатора на код",
"Code Interpreter Engine": "Двигател на интерпретатора на кода",
"Code Interpreter Prompt Template": "Шаблон за промпт на интерпретатора на кода",
"Collapse": "",
"Collection": "Колекция",
"Color": "Цвят",
@ -296,9 +296,9 @@
"Default to 389 or 636 if TLS is enabled": "По подразбиране 389 или 636, ако TLS е активиран",
"Default to ALL": "По подразбиране за ВСИЧКИ",
"Default to segmented retrieval for focused and relevant content extraction, this is recommended for most cases.": "",
"Default User Role": "Роля на потребителя по подразбиране",
"Default User Role": "Ролята на потребителя по подразбиране",
"Delete": "Изтриване",
"Delete a model": "Изтриване на модел",
"Delete a model": "Изтриване на модела",
"Delete All Chats": "Изтриване на всички чатове",
"Delete All Models": "Изтриване на всички модели",
"Delete chat": "Изтриване на чат",
@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "Изтрито {{deleteModelTag}}",
"Deleted {{name}}": "Изтрито {{name}}",
"Deleted User": "Изтрит потребител",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "Опишете вашата база от знания и цели",
"Description": "Описание",
"Detect Artifacts Automatically": "",
@ -340,7 +341,7 @@
"Display": "Показване",
"Display Emoji in Call": "Показване на емотикони в обаждането",
"Display the username instead of You in the Chat": "Показване на потребителското име вместо Вие в чата",
"Displays citations in the response": "Показва цитати в отговора",
"Displays citations in the response": "Показвам цитати в отговора",
"Dive into knowledge": "Потопете се в знанието",
"Do not install functions from sources you do not fully trust.": "Не инсталирайте функции от източници, на които не се доверявате напълно.",
"Do not install tools from sources you do not fully trust.": "Не инсталирайте инструменти от източници, на които не се доверявате напълно.",
@ -351,7 +352,7 @@
"Document Intelligence endpoint and key required.": "",
"Documentation": "Документация",
"Documents": "Документи",
"does not make any external connections, and your data stays securely on your locally hosted server.": "няма външни връзки, и вашите данни остават сигурни на локално назначен сървър.",
"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.": "не инсталирайте случайни функции от източници, на които не се доверявате.",
@ -393,8 +394,8 @@
"Embedding Model": "Модел за вграждане",
"Embedding Model Engine": "Двигател на модела за вграждане",
"Embedding model set to \"{{embedding_model}}\"": "Модел за вграждане е настроен на \"{{embedding_model}}\"",
"Enable API Key": "Активиране на API ключ",
"Enable autocomplete generation for chat messages": "Активиране на автоматично довършване за съобщения в чата",
"Enable API Key": "Активиране на API",
"Enable autocomplete generation for chat messages": "Активиране на автоматично довършване на съобщения в чата",
"Enable Code Execution": "",
"Enable Code Interpreter": "Активиране на интерпретатор на код",
"Enable Community Sharing": "Разрешаване на споделяне в общност",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Уверете се, че вашият CSV файл включва 4 колони в следния ред: Име, Имейл, Парола, Роля.",
"Enter {{role}} message here": "Въведете съобщение за {{role}} тук",
"Enter a detail about yourself for your LLMs to recall": "Въведете подробности за себе си, за да ги запомнят вашите LLMs",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Въведете низ за удостоверяване на API (напр. потребителско_име:парола)",
"Enter Application DN": "Въведете DN на приложението",
"Enter Application DN Password": "Въведете парола за DN на приложението",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Въведете припокриване на чънкове",
"Enter Chunk Size": "Въведете размер на чънк",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "Въведете описание",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -456,7 +459,7 @@
"Enter Perplexity API Key": "",
"Enter Playwright Timeout": "",
"Enter Playwright WebSocket URL": "",
"Enter proxy URL (e.g. https://user:password@host:port)": "Въведете URL адрес на прокси (напр. https://потребител:парола@хост:порт)",
"Enter proxy URL (e.g. https://user:password@host:port)": "Въведете URL адрес на прокси (напр. https://user:password@host:port)",
"Enter reasoning effort": "Въведете усилие за разсъждение",
"Enter Sampler (e.g. Euler a)": "Въведете семплер (напр. Euler a)",
"Enter Scheduler (e.g. Karras)": "Въведете планировчик (напр. Karras)",
@ -501,7 +504,7 @@
"Enter Your Password": "Въведете вашата парола",
"Enter Your Role": "Въведете вашата роля",
"Enter Your Username": "Въведете вашето потребителско име",
"Enter your webhook URL": "Въведете вашия webhook URL",
"Enter your webhook URL": "Въведете вашия URL адрес на webhook",
"Error": "Грешка",
"ERROR": "ГРЕШКА",
"Error accessing Google Drive: {{error}}": "Грешка при достъп до Google Drive: {{error}}",
@ -517,7 +520,7 @@
"Example: sAMAccountName or uid or userPrincipalName": "Пример: sAMAccountName или uid или userPrincipalName",
"Exceeded the number of seats in your license. Please contact support to increase the number of seats.": "",
"Exclude": "Изключи",
"Execute code for analysis": "Изпълнете код за анализ",
"Execute code for analysis": "Изпълнете кода за анализ",
"Executing **{{NAME}}**...": "",
"Expand": "",
"Experimental": "Експериментално",
@ -526,7 +529,7 @@
"Explore the cosmos": "Изследвайте космоса",
"Export": "Износ",
"Export All Archived Chats": "Износ на всички архивирани чатове",
"Export All Chats (All Users)": "Експортване на всички чатове (За всички потребители)",
"Export All Chats (All Users)": "Експортване на всички чатове (за всички потребители)",
"Export chat (.json)": "Експортиране на чат (.json)",
"Export Chats": "Експортване на чатове",
"Export Config to JSON File": "Експортиране на конфигурацията в JSON файл",
@ -574,7 +577,7 @@
"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Потвърждаване на отпечатък: Не може да се използва инициализационна буква като аватар. Потребителят се връща към стандартна аватарка.",
"Firecrawl API Base URL": "",
"Firecrawl API Key": "",
"Fluidly stream large external response chunks": "Плавно предаване на големи части от външен отговор",
"Fluidly stream large external response chunks": "Плавно предаване на големи части от външния отговор",
"Focus chat input": "Фокусиране на чат вход",
"Folder deleted successfully": "Папката е изтрита успешно",
"Folder name cannot be empty.": "Името на папката не може да бъде празно.",
@ -597,7 +600,7 @@
"Function Name": "Име на функцията",
"Function updated successfully": "Функцията е актуализирана успешно",
"Functions": "Функции",
"Functions allow arbitrary code execution.": "Функциите позволяват произволно изпълнение на код.",
"Functions allow arbitrary code execution.": "Функциите позволяват произволно изпълнение на кода.",
"Functions imported successfully": "Функциите са импортирани успешно",
"Gemini": "",
"Gemini API Config": "",
@ -642,7 +645,7 @@
"iframe Sandbox Allow Same Origin": "",
"Ignite curiosity": "Запалете любопитството",
"Image": "Изображение",
"Image Compression": "Компресия на изображения",
"Image Compression": "Компресия на изображенията",
"Image Generation": "Генериране на изображения",
"Image Generation (Experimental)": "Генерация на изображения (Експериментално)",
"Image Generation Engine": "Двигател за генериране на изображения",
@ -683,7 +686,7 @@
"July": "Юли",
"June": "Юни",
"Jupyter Auth": "Jupyter удостоверяване",
"Jupyter URL": "Jupyter URL",
"Jupyter URL": "URL адрес на Jupyter",
"JWT Expiration": "JWT изтичане",
"JWT Token": "JWT токен",
"Kagi Search API Key": "API ключ за Kagi Search",
@ -730,14 +733,14 @@
"Lost": "Изгубено",
"LTR": "LTR",
"Made by Open WebUI Community": "Направено от OpenWebUI общността",
"Make sure to enclose them with": "Уверете се, че са заключени с",
"Make sure to enclose them with": "Уверете се, че сте заключени с",
"Make sure to export a workflow.json file as API format from ComfyUI.": "Уверете се, че експортирате файл workflow.json като API формат от ComfyUI.",
"Manage": "Управление",
"Manage Direct Connections": "Управление на директни връзки",
"Manage Models": "Управление на модели",
"Manage Models": "Управление на моделите",
"Manage Ollama": "Управление на Ollama",
"Manage Ollama API Connections": "Управление на Ollama API връзки",
"Manage OpenAI API Connections": "Управление на OpenAI API връзки",
"Manage Ollama API Connections": "Управление на Ollama API",
"Manage OpenAI API Connections": "Управление на OpenAI API",
"Manage Pipelines": "Управление на пайплайни",
"Manage Tool Servers": "",
"March": "Март",
@ -762,8 +765,8 @@
"Microsoft OneDrive (work/school)": "",
"Min P": "Мин P",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
"Mirostat Tau": "Mirostat Tau",
"Mirostat Eta": "Mirostat Ета",
"Mirostat Tau": "Mirostat Тау",
"Mistral OCR": "",
"Mistral OCR API Key required.": "",
"Model": "Модел",
@ -779,7 +782,7 @@
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Открит е път до файловата система на модела. За актуализацията се изисква съкратено име на модела, не може да продължи.",
"Model Filtering": "Филтриране на модели",
"Model ID": "ИД на модел",
"Model IDs": "ИД-та на модели",
"Model IDs": "ИД-та на моделите",
"Model Name": "Име на модел",
"Model not selected": "Не е избран модел",
"Model Params": "Параметри на модела",
@ -789,35 +792,35 @@
"Models": "Модели",
"Models Access": "Достъп до модели",
"Models configuration saved successfully": "Конфигурацията на моделите е запазена успешно",
"Models Public Sharing": "",
"Models Public Sharing": "Споделяне на моделите публично",
"Mojeek Search API Key": "API ключ за Mojeek Search",
"more": "още",
"More": "Повече",
"My Notes": "",
"My Notes": "Моите бележки",
"Name": "Име",
"Name your knowledge base": "Именувайте вашата база от знания",
"Native": "Нативен",
"New Chat": "Нов чат",
"New Folder": "Нова папка",
"New Note": "",
"New Note": "Нова бележка",
"New Password": "Нова парола",
"new-channel": "нов-канал",
"No content": "",
"No content": "Без съдържание",
"No content found": "Не е намерено съдържание",
"No content found in file.": "",
"No content found in file.": "Не е намерено съдържание във файла",
"No content to speak": "Няма съдържание за изговаряне",
"No distance available": "Няма налично разстояние",
"No feedbacks found": "Не са намерени обратни връзки",
"No file selected": "Не е избран файл",
"No groups with access, add a group to grant access": "Няма групи с достъп, добавете група, за да предоставите достъп",
"No HTML, CSS, or JavaScript content found.": "Не е намерено HTML, CSS или JavaScript съдържание.",
"No inference engine with management support found": "Не е намерен механизъм за извод с поддръжка на управление",
"No inference engine with management support found": "Не е намерен механизъм за извод с поддръжка на управлението",
"No knowledge found": "Не са намерени знания",
"No memories to clear": "",
"No model IDs": "Няма ИД-та на модели",
"No model IDs": "Няма ИД-та на моделите",
"No models found": "Не са намерени модели",
"No models selected": "Няма избрани модели",
"No Notes": "",
"No Notes": "Няма бележки",
"No results found": "Няма намерени резултати",
"No search query generated": "Не е генерирана заявка за търсене",
"No source available": "Няма наличен източник",
@ -835,20 +838,20 @@
"November": "Ноември",
"num_gpu (Ollama)": "num_gpu (Ollama)",
"num_thread (Ollama)": "num_thread (Ollama)",
"OAuth ID": "OAuth ID",
"OAuth ID": "ID на OAuth",
"October": "Октомври",
"Off": "Изкл.",
"Okay, Let's Go!": "ОК, Нека започваме!",
"OLED Dark": "OLED тъмно",
"Ollama": "Ollama",
"Ollama API": "Ollama API",
"Ollama API": "API на Ollama",
"Ollama API settings updated": "Настройките на Ollama API са актуализирани",
"Ollama Version": "Ollama Версия",
"On": "Вкл.",
"OneDrive": "",
"OneDrive": "OneDrive",
"Only alphanumeric characters and hyphens are allowed": "Разрешени са само буквено-цифрови знаци и тирета",
"Only alphanumeric characters and hyphens are allowed in the command string.": "Само алфанумерични знаци и тире са разрешени в командния низ.",
"Only collections can be edited, create a new knowledge base to edit/add documents.": "Само колекции могат да бъдат редактирани, създайте нова база от знания, за да редактирате/добавяте документи.",
"Only collections can be edited, create a new knowledge base to edit/add documents.": "Само колекциите могат да бъдат редактирани, създайте нова база от знания, за да редактирате/добавяте документи.",
"Only markdown files are allowed": "",
"Only select users and groups with permission can access": "Само избрани потребители и групи с разрешение могат да имат достъп",
"Oops! Looks like the URL is invalid. Please double-check and try again.": "Упс! Изглежда URL адресът е невалиден. Моля, проверете отново и опитайте пак.",
@ -859,11 +862,11 @@
"Open in full screen": "Отвори на цял екран",
"Open new chat": "Отвори нов чат",
"Open WebUI can use tools provided by any OpenAPI server.": "",
"Open WebUI uses faster-whisper internally.": "Open WebUI използва вътрешно faster-whisper.",
"Open WebUI uses faster-whisper internally.": "Open WebUI използва вътрешно по-бързо-whisper.",
"Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI използва SpeechT5 и CMU Arctic говорителни вграждания.",
"Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Версията на Open WebUI (v{{OPEN_WEBUI_VERSION}}) е по-ниска от необходимата версия (v{{REQUIRED_VERSION}})",
"OpenAI": "OpenAI",
"OpenAI API": "OpenAI API",
"OpenAI API": "API на OpenAI",
"OpenAI API Config": "OpenAI API конфигурация",
"OpenAI API Key is required.": "OpenAI API ключ е задължителен.",
"OpenAI API settings updated": "Настройките на OpenAI API са актуализирани",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF документ (.pdf)",
"PDF Extract Images (OCR)": "Извличане на изображения от PDF (OCR)",
"pending": "в очакване",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Отказан достъп при опит за достъп до медийни устройства",
"Permission denied when accessing microphone": "Отказан достъп при опит за достъп до микрофона",
"Permission denied when accessing microphone: {{error}}": "Отказан достъп при опит за достъп до микрофона: {{error}}",
@ -906,7 +911,7 @@
"Please enter a valid path": "",
"Please enter a valid URL": "",
"Please fill in all fields.": "Моля, попълнете всички полета.",
"Please select a model first.": "Моля, първо изберете модел.",
"Please select a model first.": "Моля, първо изберете модела.",
"Please select a model.": "Моля, изберете модел.",
"Please select a reason": "Моля, изберете причина",
"Port": "Порт",
@ -927,10 +932,10 @@
"Prompt updated successfully": "Промптът е актуализиран успешно",
"Prompts": "Промптове",
"Prompts Access": "Достъп до промптове",
"Prompts Public Sharing": "",
"Public": "",
"Prompts Public Sharing": "Публично споделяне на промптове",
"Public": "Публично",
"Pull \"{{searchValue}}\" from Ollama.com": "Извади \"{{searchValue}}\" от Ollama.com",
"Pull a model from Ollama.com": "Издърпайте модел от Ollama.com",
"Pull a model from Ollama.com": "Издърпайте модела от Ollama.com",
"Query Generation Prompt": "Промпт за генериране на запитвания",
"RAG Template": "RAG Шаблон",
"Rating": "Оценка",
@ -938,7 +943,7 @@
"Read": "Четене",
"Read Aloud": "Прочети на глас",
"Reasoning Effort": "Усилие за разсъждение",
"Record": "",
"Record": "Запиши",
"Record voice": "Записване на глас",
"Redirecting you to Open WebUI Community": "Пренасочване към 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.": "",
@ -946,7 +951,7 @@
"References from": "Препратки от",
"Refused when it shouldn't have": "Отказано, когато не трябва да бъде",
"Regenerate": "Регенериране",
"Reindex": "",
"Reindex": "Реиндексирай",
"Reindex Knowledge Base Vectors": "",
"Release Notes": "Бележки по изданието",
"Relevance": "Релевантност",
@ -954,12 +959,12 @@
"Remove": "Изтриване",
"Remove Model": "Изтриване на модела",
"Rename": "Преименуване",
"Reorder Models": "Преорганизиране на модели",
"Reorder Models": "Преорганизиране на моделите",
"Repeat Last N": "Повтори последните N",
"Repeat Penalty (Ollama)": "Наказание за повторение (Ollama)",
"Reply in Thread": "Отговори в тред",
"Request Mode": "Режим на заявка",
"Reranking Engine": "",
"Reranking Engine": "Двигател за пренареждане",
"Reranking Model": "Модел за преподреждане",
"Reset": "Нулиране",
"Reset All Models": "Нулиране на всички модели",
@ -969,13 +974,13 @@
"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Известията за отговори не могат да бъдат активирани, тъй като разрешенията за уебсайта са отказани. Моля, посетете настройките на вашия браузър, за да дадете необходимия достъп.",
"Response splitting": "Разделяне на отговора",
"Result": "Резултат",
"Retrieval": "",
"Retrieval": "Извличане",
"Retrieval Query Generation": "Генериране на заявка за извличане",
"Rich Text Input for Chat": "Богат текстов вход за чат",
"RK": "RK",
"Role": "Роля",
"Rosé Pine": "Rosé Pine",
"Rosé Pine Dawn": "Rosé Pine Dawn",
"Rosé Pine": "Rose pine",
"Rosé Pine Dawn": "Rose pine Dawn",
"RTL": "RTL",
"Run": "Изпълни",
"Running": "Изпълнява се",
@ -1004,12 +1009,12 @@
"Search Tools": "Инструменти за търсене",
"SearchApi API Key": "API ключ за SearchApi",
"SearchApi Engine": "Двигател на SearchApi",
"Searched {{count}} sites": "Претърсени {{count}} сайта",
"Searched {{count}} sites": "Претърсени {{count}} сайт",
"Searching \"{{searchQuery}}\"": "Търсене на \"{{searchQuery}}\"",
"Searching Knowledge for \"{{searchQuery}}\"": "Търсене в знанията за \"{{searchQuery}}\"",
"Searching the web...": "",
"Searxng Query URL": "URL адрес на заявка на Searxng",
"See readme.md for instructions": "Виж readme.md за инструкции",
"Searching the web...": "Търсене в интернет...",
"Searxng Query URL": "URL адрес на заявка за търсене в Searxng",
"See readme.md for instructions": "Вижте readme.md за инструкции",
"See what's new": "Виж какво е новото",
"Seed": "Начално число",
"Select a base model": "Изберете базов модел",
@ -1048,9 +1053,9 @@
"Set Sampler": "Задай семплер",
"Set Scheduler": "Задай планировчик",
"Set Steps": "Задай Стъпки",
"Set Task Model": "Задаване на модел на задача",
"Set Task Model": "Задаване на модел на задачата",
"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.": "Задайте броя слоеве, които ще бъдат прехвърлени към GPU. Увеличаването на тази стойност може значително да подобри производителността за модели, оптимизирани за GPU ускорение, но може също да консумира повече енергия и 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.": "Задайте броя работни нишки, използвани за изчисления. Тази опция контролира колко нишки се използват за едновременна обработка на входящи заявки. Увеличаването на тази стойност може да подобри производителността при високи натоварвания с паралелизъм, но може също да консумира повече CPU ресурси.",
"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.": "Задайте броя работни нишки, използвани за изчисления. Тази опция контролира колко нишки се използват за едновременна обработка на входящи заявки. Увеличаването на тази стойност може да подобри производителността при високи натоварвания с паралелизъм, но може също така да консумира повече ресурси на CPU.",
"Set Voice": "Задай Глас",
"Set whisper model": "Задай модел на шепот",
"Sets a flat bias against tokens that have appeared at least once. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 0.9) will be more lenient. At 0, it is disabled.": "",
@ -1064,13 +1069,13 @@
"Share": "Подели",
"Share Chat": "Подели Чат",
"Share to Open WebUI Community": "Споделете с OpenWebUI Общността",
"Sharing Permissions": "",
"Sharing Permissions": "Права за споделяне",
"Show": "Покажи",
"Show \"What's New\" modal on login": "Покажи модалния прозорец \"Какво е ново\" при вписване",
"Show Admin Details in Account Pending Overlay": "Покажи детайлите на администратора в наслагването на изчакващ акаунт",
"Show All": "",
"Show Less": "",
"Show Model": "",
"Show All": "Покажи всички",
"Show Less": "Покажи по-малко",
"Show Model": "Покажи модел",
"Show shortcuts": "Покажи преки пътища",
"Show your support!": "Покажете вашата подкрепа!",
"Showcased creativity": "Показана креативност",
@ -1086,8 +1091,8 @@
"Sougou Search API SK": "",
"Source": "Източник",
"Speech Playback Speed": "Скорост на възпроизвеждане на речта",
"Speech recognition error: {{error}}": "Грешка при разпознаване на реч: {{error}}",
"Speech-to-Text Engine": "Двигател за преобразуване на реч в текст",
"Speech recognition error: {{error}}": "Грешка при разпознаване на речта: {{error}}",
"Speech-to-Text Engine": "Двигател за преобразуване на реч в текста",
"Stop": "Спри",
"Stop Sequence": "Стоп последователност",
"Stream Chat Response": "Поточен чат отговор",
@ -1104,7 +1109,7 @@
"System": "Система",
"System Instructions": "Системни инструкции",
"System Prompt": "Системен Промпт",
"Tags": "",
"Tags": "Тагове",
"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.": "",
@ -1131,7 +1136,7 @@
"The leaderboard is currently in beta, and we may adjust the rating calculations as we refine the algorithm.": "Класацията в момента е в бета версия и може да коригираме изчисленията на рейтинга, докато усъвършенстваме алгоритъма.",
"The maximum file size in MB. If the file size exceeds this limit, the file will not be uploaded.": "Максималният размер на файла в MB. Ако размерът на файла надвишава този лимит, файлът няма да бъде качен.",
"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.": "Максималният брой файлове, които могат да се използват едновременно в чата. Ако броят на файловете надвишава този лимит, файловете няма да бъдат качени.",
"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Резултатът трябва да бъде стойност между 0.0 (0%) и 1.0 (100%).",
"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Резултатът трябва да бъде стойност между 0,0 (0%) и 1,0 (100%).",
"The temperature of the model. Increasing the temperature will make the model answer more creatively.": "",
"Theme": "Тема",
"Thinking...": "Мисля...",
@ -1153,8 +1158,8 @@
"Thorough explanation": "Подробно обяснение",
"Thought for {{DURATION}}": "Мислил за {{DURATION}}",
"Thought for {{DURATION}} seconds": "Мислил за {{DURATION}} секунди",
"Tika": "Tika",
"Tika Server URL required.": "Изисква се URL адрес на Tika сървъра.",
"Tika": "Тика",
"Tika Server URL required.": "Изисква се URL адрес на Тика сървъра.",
"Tiktoken": "Tiktoken",
"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Съвет: Актуализирайте няколко слота за променливи последователно, като натискате клавиша Tab в чат входа след всяка подмяна.",
"Title": "Заглавие",
@ -1164,12 +1169,12 @@
"Title Generation": "Генериране на заглавие",
"Title Generation Prompt": "Промпт за генериране на заглавие",
"TLS": "TLS",
"To access the available model names for downloading,": "За достъп до наличните имена на модели за изтегляне,",
"To access the available model names for downloading,": "За достъп до наличните имена на моделите за изтегляне,",
"To access the GGUF models available for downloading,": "За достъп до наличните GGUF модели за изтегляне,",
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "За достъп до уеб интерфейса, моля, свържете се с администратора. Администраторите могат да управляват статусите на потребителите от Административния панел.",
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "За да прикачите база знания тук, първо ги добавете към работното пространство \"Знания\".",
"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 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 select actions here, add them to the \"Functions\" workspace first.": "За да изберете действия тук, първо ги добавете към работното пространство \"Функции\".",
"To select filters here, add them to the \"Functions\" workspace first.": "За да изберете филтри тук, първо ги добавете към работното пространство \"Функции\".",
"To select toolkits here, add them to the \"Tools\" workspace first.": "За да изберете инструменти тук, първо ги добавете към работното пространство \"Инструменти\".",
@ -1186,15 +1191,15 @@
"Tool ID": "ID на инструмента",
"Tool imported successfully": "Инструментът е импортиран успешно",
"Tool Name": "Име на инструмента",
"Tool Servers": "",
"Tool Servers": "Сървъри за инструменти",
"Tool updated successfully": "Инструментът е актуализиран успешно",
"Tools": "Инструменти",
"Tools Access": "Достъп до инструменти",
"Tools are a function calling system with arbitrary code execution": "Инструментите са система за извикване на функции с произволно изпълнение на код",
"Tools Function Calling Prompt": "Промпт за извикване на функции на инструментите",
"Tools Function Calling Prompt": "Промпт за извикване на функциите на инструментите",
"Tools have a function calling system that allows arbitrary code execution.": "Инструментите имат система за извикване на функции, която позволява произволно изпълнение на код.",
"Tools Public Sharing": "",
"Top K": "Топ K",
"Tools Public Sharing": "Публично споделяне на инструменти",
"Top K": "Топ К",
"Top K Reranker": "",
"Top P": "Топ P",
"Transformers": "Трансформатори",
@ -1204,7 +1209,7 @@
"TTS Settings": "TTS Настройки",
"TTS Voice": "TTS Глас",
"Type": "Вид",
"Type Hugging Face Resolve (Download) URL": "Въведете Hugging Face Resolve (Download) URL",
"Type Hugging Face Resolve (Download) URL": "Въведете Hugging Face Resolve (Изтегляне) URL",
"Uh-oh! There was an issue with the response.": "Ох! Имаше проблем с отговора.",
"UI": "Потребителски интерфейс",
"Unarchive All": "Разархивирай всички",
@ -1214,9 +1219,9 @@
"Unpin": "Откачи",
"Unravel secrets": "Разгадай тайни",
"Untagged": "Без етикет",
"Untitled": "",
"Untitled": "Неозаглавен",
"Update": "Актуализиране",
"Update and Copy Link": "Обнови и копирай връзка",
"Update and Copy Link": "Обнови и копирай връзката",
"Update for the latest features and improvements.": "Актуализирайте за най-новите функции и подобрения.",
"Update password": "Обновяване на парола",
"Updated": "Актуализирано",
@ -1248,13 +1253,13 @@
"Username": "Потребителско име",
"Users": "Потребители",
"Using the default arena model with all models. Click the plus button to add custom models.": "Използване на стандартния арена модел с всички модели. Кликнете бутона плюс, за да добавите персонализирани модели.",
"Utilize": "Използване",
"Utilize": "Използване на",
"Valid time units:": "Валидни единици за време:",
"Valves": "Клапани",
"Valves updated": "Клапаните са актуализирани",
"Valves updated successfully": "Клапаните са актуализирани успешно",
"variable": "променлива",
"variable to have them replaced with clipboard content.": "променлива, за да бъдат заменени със съдържанието от клипборда.",
"variable to have them replaced with clipboard content.": "променлива, за да бъдат заменени със съдържание от клипборда.",
"Verify Connection": "",
"Verify SSL Certificate": "",
"Version": "Версия",
@ -1268,7 +1273,7 @@
"Warning:": "Предупреждение:",
"Warning: Enabling this will allow users to upload arbitrary code on the server.": "Предупреждение: Активирането на това ще позволи на потребителите да качват произволен код на сървъра.",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Предупреждение: Ако актуализирате или промените вашия модел за вграждане, трябва да повторите импортирането на всички документи.",
"Warning: Jupyter execution enables arbitrary code execution, posing severe security risks—proceed with extreme caution.": "Предупреждение: Изпълнението на Jupyter позволява произволно изпълнение на код, което представлява сериозни рискове за сигурносттапродължете с изключително внимание.",
"Warning: Jupyter execution enables arbitrary code execution, posing severe security risks—proceed with extreme caution.": "Предупреждение: Изпълнението на Jupyter позволява произволно изпълнение на код, което представлява сериозни рискове за сигурността-продължете с изключително внимание.",
"Web": "Уеб",
"Web API": "Уеб API",
"Web Loader Engine": "",
@ -1278,13 +1283,13 @@
"Web Search Query Generation": "Генериране на заявки за уеб търсене",
"Webhook URL": "Уебхук URL",
"WebUI Settings": "WebUI Настройки",
"WebUI URL": "WebUI URL",
"WebUI URL": "URL на WebUI",
"WebUI will make requests to \"{{url}}\"": "",
"WebUI will make requests to \"{{url}}/api/chat\"": "WebUI ще прави заявки към \"{{url}}/api/chat\"",
"WebUI will make requests to \"{{url}}/chat/completions\"": "WebUI ще прави заявки към \"{{url}}/chat/completions\"",
"What are you trying to achieve?": "Какво се опитвате да постигнете?",
"What are you working on?": "Върху какво работите?",
"Whats New in": "",
"Whats New in": "Какво е ново в",
"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": "където и да сте",
"Whisper (Local)": "Whisper (Локално)",
@ -1316,6 +1321,6 @@
"Your account status is currently pending activation.": "Статусът на вашия акаунт в момента очаква активиране.",
"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Цялата ви вноска ще отиде директно при разработчика на плъгина; Open WebUI не взима никакъв процент. Въпреки това, избраната платформа за финансиране може да има свои собствени такси.",
"Youtube": "Youtube",
"Youtube Language": "",
"Youtube Proxy URL": ""
"Youtube Language": "Youtube език",
"Youtube Proxy URL": "Youtube Прокси URL"
}

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} মুছে ফেলা হয়েছে",
"Deleted {{name}}": "{{name}} মোছা হয়েছে",
"Deleted User": "",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "",
"Description": "বিবরণ",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "আপনার সিএসভি ফাইলটিতে এই ক্রমে 4 টি কলাম অন্তর্ভুক্ত রয়েছে তা নিশ্চিত করুন: নাম, ইমেল, পাসওয়ার্ড, ভূমিকা।.",
"Enter {{role}} message here": "{{role}} মেসেজ এখানে লিখুন",
"Enter a detail about yourself for your LLMs to recall": "আপনার এলএলএমগুলি স্মরণ করার জন্য নিজের সম্পর্কে একটি বিশদ লিখুন",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "",
"Enter Application DN": "",
"Enter Application DN Password": "",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "চাঙ্ক ওভারল্যাপ লিখুন",
"Enter Chunk Size": "চাংক সাইজ লিখুন",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF ডকুমেন্ট (.pdf)",
"PDF Extract Images (OCR)": "পিডিএফ এর ছবি থেকে লেখা বের করুন (OCR)",
"pending": "অপেক্ষমান",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "",
"Permission denied when accessing microphone": "",
"Permission denied when accessing microphone: {{error}}": "মাইক্রোফোন ব্যবহারের অনুমতি পাওয়া যায়নি: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} བསུབས་ཟིན།",
"Deleted {{name}}": "{{name}} བསུབས་ཟིན།",
"Deleted User": "བེད་སྤྱོད་མཁན་བསུབས་ཟིན།",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "ཁྱེད་ཀྱི་ཤེས་བྱའི་རྟེན་གཞི་དང་དམིགས་ཡུལ་འགྲེལ་བཤད་བྱེད་པ།",
"Description": "འགྲེལ་བཤད།",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "ཁྱེད་ཀྱི་ CSV ཡིག་ཆར་གོ་རིམ་འདི་ལྟར། མིང་། ཡིག་ཟམ། གསང་གྲངས། གནས་ཚད། སྟར་པ་ ༤ ཚུད་ཡོད་པ་ཁག་ཐེག་བྱེད་རོགས།",
"Enter {{role}} message here": "{{role}} ཡི་འཕྲིན་འདིར་འཇུག་པ།",
"Enter a detail about yourself for your LLMs to recall": "ཁྱེད་ཀྱི་ LLMs ཡིས་ཕྱིར་དྲན་ཆེད་དུ་ཁྱེད་རང་གི་སྐོར་གྱི་ཞིབ་ཕྲ་ཞིག་འཇུག་པ།",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "api auth ཡིག་ཕྲེང་འཇུག་པ། (དཔེར་ན། username:password)",
"Enter Application DN": "Application DN འཇུག་པ།",
"Enter Application DN Password": "Application DN གསང་གྲངས་འཇུག་པ།",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "དུམ་བུ་བསྣོལ་བ་འཇུག་པ།",
"Enter Chunk Size": "དུམ་བུའི་ཆེ་ཆུང་འཇུག་པ།",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "ཚེག་བསྐུངས་ཀྱིས་ལོགས་སུ་བཀར་བའི་ \"ཊོཀ་ཀེན།:ཕྱོགས་ཞེན་རིན་ཐང་།\" ཆ་འཇུག་པ། (དཔེར། 5432:100, 413:-100)",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "འགྲེལ་བཤད་འཇུག་པ།",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF ཡིག་ཆ། (.pdf)",
"PDF Extract Images (OCR)": "PDF པར་འདོན་སྤེལ། (OCR)",
"pending": "སྒུག་བཞིན་པ།",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "བརྒྱུད་ལམ་སྒྲིག་ཆས་འཛུལ་སྤྱོད་སྐབས་དབང་ཚད་ཁས་མ་བླངས།",
"Permission denied when accessing microphone": "སྐད་སྒྲ་འཛིན་ཆས་འཛུལ་སྤྱོད་སྐབས་དབང་ཚད་ཁས་མ་བླངས།",
"Permission denied when accessing microphone: {{error}}": "སྐད་སྒྲ་འཛིན་ཆས་འཛུལ་སྤྱོད་སྐབས་དབང་ཚད་ཁས་མ་བླངས།: {{error}}",

View File

@ -4,7 +4,7 @@
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(p. ex. `sh webui.sh --api --api-auth username_password`)",
"(e.g. `sh webui.sh --api`)": "(p. ex. `sh webui.sh --api`)",
"(latest)": "(últim)",
"(leave blank for to use commercial endpoint)": "",
"(leave blank for to use commercial endpoint)": "(deixa-ho buit per utilitzar un punt d'accés comercial)",
"(Ollama)": "(Ollama)",
"{{ models }}": "{{ models }}",
"{{COUNT}} Available Tools": "{{COUNT}} eines disponibles",
@ -105,7 +105,7 @@
"Are you sure you want to delete this channel?": "Estàs segur que vols eliminar aquest canal?",
"Are you sure you want to delete this message?": "Estàs segur que vols eliminar aquest missatge?",
"Are you sure you want to unarchive all archived chats?": "Estàs segur que vols desarxivar tots els xats arxivats?",
"Are you sure you want to update this user's role to **{{ROLE}}**?": "",
"Are you sure you want to update this user's role to **{{ROLE}}**?": "Estàs segur que vols actualitzar el rol de l'usuari a **{{ROLE}}**?",
"Are you sure?": "Estàs segur?",
"Arena Models": "Models de l'Arena",
"Artifacts": "Artefactes",
@ -148,7 +148,7 @@
"Bing Search V7 Subscription Key": "Clau de subscripció a Bing Search V7",
"Bocha Search API Key": "Clau API de Bocha Search",
"Boosting or penalizing specific tokens for constrained responses. Bias values will be clamped between -100 and 100 (inclusive). (Default: none)": "Potenciar o penalitzar tokens específics per a respostes limitades. Els valors de biaix es fixaran entre -100 i 100 (inclosos). (Per defecte: cap)",
"Both Docling OCR Engine and Language(s) must be provided or both left empty.": "",
"Both Docling OCR Engine and Language(s) must be provided or both left empty.": "Cal proporcionar tant el motor OCR de Docling com els idiomes o bé deixar-los buits.",
"Brave Search API Key": "Clau API de Brave Search",
"By {{name}}": "Per {{name}}",
"Bypass Embedding and Retrieval": "Desactivar l'Embedding i el Retrieval",
@ -159,7 +159,7 @@
"Cancel": "Cancel·lar",
"Capabilities": "Capacitats",
"Capture": "Captura",
"Capture Audio": "",
"Capture Audio": "Capturar àudio",
"Certificate Path": "Camí del certificat",
"Change Password": "Canviar la contrasenya",
"Channel Name": "Nom del canal",
@ -269,8 +269,8 @@
"Create Knowledge": "Crear Coneixement",
"Create new key": "Crear una nova clau",
"Create new secret key": "Crear una nova clau secreta",
"Create Note": "",
"Create your first note by clicking on the plus button below.": "",
"Create Note": "Crea nota",
"Create your first note by clicking on the plus button below.": "Crea la teva primera nota prement sobre el botó 'més' inferior",
"Created at": "Creat el",
"Created At": "Creat el",
"Created by": "Creat per",
@ -308,7 +308,7 @@
"Delete function?": "Eliminar funció?",
"Delete Message": "Eleiminar el missatge",
"Delete message?": "Eliminar el missatge?",
"Delete note?": "",
"Delete note?": "Eliminar la nota?",
"Delete prompt?": "Eliminar indicació?",
"delete this link": "Eliminar aquest enllaç",
"Delete tool?": "Eliminar eina?",
@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "S'ha eliminat {{deleteModelTag}}",
"Deleted {{name}}": "S'ha eliminat {{name}}",
"Deleted User": "Usuari eliminat",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "Descriu la teva base de coneixement i objectius",
"Description": "Descripció",
"Detect Artifacts Automatically": "Detectar automàticament els artefactes",
@ -364,7 +365,7 @@
"Download Database": "Descarregar la base de dades",
"Drag and drop a file to upload or select a file to view": "Arrossegar un arxiu per pujar o escull un arxiu a veure",
"Draw": "Dibuixar",
"Drop any files here to upload": "",
"Drop any files here to upload": "Arrosega qualsevol arxius a pujar",
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p. ex. '30s','10m'. Les unitats de temps vàlides són 's', 'm', 'h'.",
"e.g. \"json\" or a JSON schema": "p. ex. \"json\" o un esquema JSON",
"e.g. 60": "p. ex. 60",
@ -374,9 +375,9 @@
"e.g. my_filter": "p. ex. els_meus_filtres",
"e.g. my_tools": "p. ex. les_meves_eines",
"e.g. Tools for performing various operations": "p. ex. Eines per dur a terme operacions",
"e.g., 3, 4, 5 (leave blank for default)": "",
"e.g., 3, 4, 5 (leave blank for default)": "p. ex. 3, 4, 5 (deixa-ho en blanc per utilitzar el per defecte)",
"e.g., en-US,ja-JP (leave blank for auto-detect)": "p. ex. en-US, ja-JP, ca-ES (deixa-ho en blanc per detecció automàtica)",
"e.g., westus (leave blank for eastus)": "",
"e.g., westus (leave blank for eastus)": "p. ex. westus (deixa-ho en blanc per a eastus)",
"Edit": "Editar",
"Edit Arena Model": "Editar model de l'Arena",
"Edit Channel": "Editar el canal",
@ -404,12 +405,13 @@
"Enable Mirostat sampling for controlling perplexity.": "Permetre el mostreig de Mirostat per controlar la perplexitat",
"Enable New Sign Ups": "Permetre nous registres",
"Enabled": "Habilitat",
"Endpoint URL": "",
"Endpoint URL": "URL de connexió",
"Enforce Temporary Chat": "Forçar els xats temporals",
"Enhance": "",
"Enhance": "Millorar",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Assegura't que els teus fitxers CSV inclouen 4 columnes en aquest ordre: Nom, Correu electrònic, Contrasenya, Rol.",
"Enter {{role}} message here": "Introdueix aquí el missatge de {{role}}",
"Enter a detail about yourself for your LLMs to recall": "Introdueix un detall sobre tu què els teus models de llenguatge puguin recordar",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Entra la cadena d'autenticació api (p. ex. nom d'usuari:contrasenya)",
"Enter Application DN": "Introdueix el DN d'aplicació",
"Enter Application DN Password": "Introdueix la contrasenya del DN d'aplicació",
@ -422,9 +424,10 @@
"Enter Chunk Overlap": "Introdueix la mida de solapament de blocs",
"Enter Chunk Size": "Introdueix la mida del bloc",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "Introdueix parelles de \"token:valor de biaix\" separats per comes (exemple: 5432:100, 413:-100)",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "Introdueix la descripció",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
"Enter Docling OCR Engine": "Introdueix el motor OCR de Docling",
"Enter Docling OCR Language(s)": "Introdueix els idiomes per a l'OCR de Docling",
"Enter Docling Server URL": "Introdueix la URL del servidor Docling",
"Enter Document Intelligence Endpoint": "Introdueix el punt de connexió de Document Intelligence",
"Enter Document Intelligence Key": "Introdueix la clau de Document Intelligence",
@ -451,7 +454,7 @@
"Enter Model ID": "Introdueix l'identificador del model",
"Enter model tag (e.g. {{modelTag}})": "Introdueix l'etiqueta del model (p. ex. {{modelTag}})",
"Enter Mojeek Search API Key": "Introdueix la clau API de Mojeek Search",
"Enter New Password": "",
"Enter New Password": "Introdueix un nova contrasenya",
"Enter Number of Steps (e.g. 50)": "Introdueix el nombre de passos (p. ex. 50)",
"Enter Perplexity API Key": "Introdueix la clau API de Perplexity",
"Enter Playwright Timeout": "Introdueix el timeout de Playwright",
@ -488,15 +491,15 @@
"Enter Top K Reranker": "Introdueix el Top K Reranker",
"Enter URL (e.g. http://127.0.0.1:7860/)": "Introdueix l'URL (p. ex. http://127.0.0.1:7860/)",
"Enter URL (e.g. http://localhost:11434)": "Introdueix l'URL (p. ex. http://localhost:11434)",
"Enter Yacy Password": "",
"Enter Yacy URL (e.g. http://yacy.example.com:8090)": "",
"Enter Yacy Username": "",
"Enter Yacy Password": "Introdueix la contrassenya de Yacy",
"Enter Yacy URL (e.g. http://yacy.example.com:8090)": "Introdueix la URL de Yacy (p. ex. http://yacy.example.com:8090)",
"Enter Yacy Username": "Introdueix l'usuari de Yacy",
"Enter your current password": "Introdueix la teva contrasenya actual",
"Enter Your Email": "Introdueix el teu correu electrònic",
"Enter Your Full Name": "Introdueix el teu nom complet",
"Enter your message": "Introdueix el teu missatge",
"Enter your name": "Entra el teu nom",
"Enter Your Name": "",
"Enter Your Name": "Entra el teu nom",
"Enter your new password": "Introdueix la teva nova contrasenya",
"Enter Your Password": "Introdueix la teva contrasenya",
"Enter Your Role": "Introdueix el teu rol",
@ -505,8 +508,8 @@
"Error": "Error",
"ERROR": "ERROR",
"Error accessing Google Drive: {{error}}": "Error en accedir a Google Drive: {{error}}",
"Error accessing media devices.": "",
"Error starting recording.": "",
"Error accessing media devices.": "Error en accedir als dispositius multimèdia",
"Error starting recording.": "Error en començar a enregistrar",
"Error uploading file: {{error}}": "Error en pujar l'arxiu: {{error}}",
"Evaluations": "Avaluacions",
"Exa API Key": "Clau API d'EXA",
@ -545,7 +548,7 @@
"Failed to add file.": "No s'ha pogut afegir l'arxiu.",
"Failed to connect to {{URL}} OpenAPI tool server": "No s'ha pogut connecta al servidor d'eines OpenAPI {{URL}}",
"Failed to create API Key.": "No s'ha pogut crear la clau API.",
"Failed to delete note": "",
"Failed to delete note": "No s'ha pogut eliminar la nota",
"Failed to fetch models": "No s'han pogut obtenir els models",
"Failed to load file content.": "No s'ha pogut carregar el contingut del fitxer",
"Failed to read clipboard contents": "No s'ha pogut llegir el contingut del porta-retalls",
@ -603,12 +606,12 @@
"Gemini API Config": "Configuració de Gemini API",
"Gemini API Key is required.": "La clau API de Gemini és necessària",
"General": "General",
"Generate": "",
"Generate": "Generar",
"Generate an image": "Generar una imatge",
"Generate Image": "Generar imatge",
"Generate prompt pair": "Generar parella d'indicació",
"Generating search query": "Generant consulta",
"Generating...": "",
"Generating...": "Generant...",
"Get started": "Començar",
"Get started with {{WEBUI_NAME}}": "Començar amb {{WEBUI_NAME}}",
"Global": "Global",
@ -655,7 +658,7 @@
"Import Config from JSON File": "Importar la configuració des d'un arxiu JSON",
"Import Functions": "Importar funcions",
"Import Models": "Importar models",
"Import Notes": "",
"Import Notes": "Importar nota",
"Import Presets": "Importar configuracions",
"Import Prompts": "Importar indicacions",
"Import Tools": "Importar eines",
@ -670,7 +673,7 @@
"Instant Auto-Send After Voice Transcription": "Enviament automàtic després de la transcripció de veu",
"Integration": "Integració",
"Interface": "Interfície",
"Invalid file content": "",
"Invalid file content": "Continguts del fitxer no vàlids",
"Invalid file format.": "Format d'arxiu no vàlid.",
"Invalid JSON schema": "Esquema JSON no vàlid",
"Invalid Tag": "Etiqueta no vàlida",
@ -741,7 +744,7 @@
"Manage Pipelines": "Gestionar les Pipelines",
"Manage Tool Servers": "Gestionar els servidors d'eines",
"March": "Març",
"Max Speakers": "",
"Max Speakers": "Nombre màxim d'altaveus",
"Max Tokens (num_predict)": "Nombre màxim de Tokens (num_predict)",
"Max Upload Count": "Nombre màxim de càrregues",
"Max Upload Size": "Mida màxima de càrrega",
@ -793,16 +796,16 @@
"Mojeek Search API Key": "Clau API de Mojeek Search",
"more": "més",
"More": "Més",
"My Notes": "",
"My Notes": "Les meves notes",
"Name": "Nom",
"Name your knowledge base": "Anomena la teva base de coneixement",
"Native": "Natiu",
"New Chat": "Nou xat",
"New Folder": "Nova carpeta",
"New Note": "",
"New Note": "Nova nota",
"New Password": "Nova contrasenya",
"new-channel": "nou-canal",
"No content": "",
"No content": "No hi ha contingut",
"No content found": "No s'ha trobat contingut",
"No content found in file.": "No s'ha trobat contingut en el fitxer.",
"No content to speak": "No hi ha contingut per parlar",
@ -817,7 +820,7 @@
"No model IDs": "No hi ha IDs de model",
"No models found": "No s'han trobat models",
"No models selected": "No s'ha seleccionat cap model",
"No Notes": "",
"No Notes": "No hi ha notes",
"No results found": "No s'han trobat resultats",
"No search query generated": "No s'ha generat cap consulta",
"No source available": "Sense font disponible",
@ -826,7 +829,7 @@
"None": "Cap",
"Not factually correct": "No és clarament correcte",
"Not helpful": "No ajuda",
"Note deleted successfully": "",
"Note deleted successfully": "La nota s'ha eliminat correctament",
"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 s'estableix una puntuació mínima, la cerca només retornarà documents amb una puntuació major o igual a la puntuació mínima.",
"Notes": "Notes",
"Notification Sound": "So de la notificació",
@ -849,7 +852,7 @@
"Only alphanumeric characters and hyphens are allowed": "Només es permeten caràcters alfanumèrics i guions",
"Only alphanumeric characters and hyphens are allowed in the command string.": "Només es permeten caràcters alfanumèrics i guions en la comanda.",
"Only collections can be edited, create a new knowledge base to edit/add documents.": "Només es poden editar col·leccions, crea una nova base de coneixement per editar/afegir documents.",
"Only markdown files are allowed": "",
"Only markdown files are allowed": "Només es permeten arxius markdown",
"Only select users and groups with permission can access": "Només hi poden accedir usuaris i grups seleccionats amb permís",
"Oops! Looks like the URL is invalid. Please double-check and try again.": "Ui! Sembla que l'URL no és vàlida. Si us plau, revisa-la i torna-ho a provar.",
"Oops! There are files still uploading. Please wait for the upload to complete.": "Ui! Encara hi ha fitxers pujant-se. Si us plau, espera que finalitzi la càrrega.",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "Document PDF (.pdf)",
"PDF Extract Images (OCR)": "Extreu imatges del PDF (OCR)",
"pending": "pendent",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Permís denegat en accedir a dispositius multimèdia",
"Permission denied when accessing microphone": "Permís denegat en accedir al micròfon",
"Permission denied when accessing microphone: {{error}}": "Permís denegat en accedir al micròfon: {{error}}",
@ -895,7 +900,7 @@
"Pipelines": "Pipelines",
"Pipelines Not Detected": "No s'ha detectat Pipelines",
"Pipelines Valves": "Vàlvules de les Pipelines",
"Plain text (.md)": "",
"Plain text (.md)": "Text en pla (.md)",
"Plain text (.txt)": "Text pla (.txt)",
"Playground": "Zona de jocs",
"Playwright Timeout (ms)": "Temps d'espera (ms) de Playwright",
@ -938,7 +943,7 @@
"Read": "Llegit",
"Read Aloud": "Llegir en veu alta",
"Reasoning Effort": "Esforç de raonament",
"Record": "",
"Record": "Enregistrar",
"Record voice": "Enregistrar la veu",
"Redirecting you to Open WebUI Community": "Redirigint-te a la comunitat 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.": "Redueix la probabilitat de generar ximpleries. Un valor més alt (p. ex. 100) donarà respostes més diverses, mentre que un valor més baix (p. ex. 10) serà més conservador.",
@ -959,7 +964,7 @@
"Repeat Penalty (Ollama)": "Penalització per repetició (Ollama)",
"Reply in Thread": "Respondre al fil",
"Request Mode": "Mode de sol·licitud",
"Reranking Engine": "",
"Reranking Engine": "Motor de valoració",
"Reranking Model": "Model de reavaluació",
"Reset": "Restableix",
"Reset All Models": "Restablir tots els models",
@ -1007,7 +1012,7 @@
"Searched {{count}} sites": "S'han cercat {{count}} pàgines",
"Searching \"{{searchQuery}}\"": "Cercant \"{{searchQuery}}\"",
"Searching Knowledge for \"{{searchQuery}}\"": "Cercant \"{{searchQuery}}\" al coneixement",
"Searching the web...": "",
"Searching the web...": "Cercant la web...",
"Searxng Query URL": "URL de consulta de Searxng",
"See readme.md for instructions": "Consulta l'arxiu readme.md per obtenir instruccions",
"See what's new": "Veure què hi ha de nou",
@ -1068,8 +1073,8 @@
"Show": "Mostrar",
"Show \"What's New\" modal on login": "Veure 'Què hi ha de nou' a l'entrada",
"Show Admin Details in Account Pending Overlay": "Mostrar els detalls de l'administrador a la superposició del compte pendent",
"Show All": "",
"Show Less": "",
"Show All": "Mostrar tot",
"Show Less": "Mostrar menys",
"Show Model": "Mostrar el model",
"Show shortcuts": "Mostrar dreceres",
"Show your support!": "Mostra el teu suport!",
@ -1093,7 +1098,7 @@
"Stream Chat Response": "Fer streaming de la resposta del xat",
"STT Model": "Model SST",
"STT Settings": "Preferències de STT",
"Stylized PDF Export": "",
"Stylized PDF Export": "Exportació en PDF estilitzat",
"Subtitle (e.g. about the Roman Empire)": "Subtítol (per exemple, sobre l'Imperi Romà)",
"Success": "Èxit",
"Successfully updated.": "Actualitzat correctament.",
@ -1140,7 +1145,7 @@
"This chat wont appear in history and your messages will not be saved.": "Aquest xat no apareixerà a l'historial i els teus missatges no es desaran.",
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Això assegura que les teves converses valuoses queden desades de manera segura a la teva base de dades. Gràcies!",
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Aquesta és una funció experimental, és possible que no funcioni com s'espera i està subjecta a canvis en qualsevol moment.",
"This model is not publicly available. Please select another model.": "",
"This model is not publicly available. Please select another model.": "Aquest model no està disponible públicament. Seleccioneu-ne un altre.",
"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.": "Aquesta opció controla quants tokens es conserven en actualitzar el context. Per exemple, si s'estableix en 2, es conservaran els darrers 2 tokens del context de conversa. Preservar el context pot ajudar a mantenir la continuïtat d'una conversa, però pot reduir la capacitat de respondre a nous temes.",
"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.": "Aquesta opció estableix el nombre màxim de tokens que el model pot generar en la seva resposta. Augmentar aquest límit permet que el model proporcioni respostes més llargues, però també pot augmentar la probabilitat que es generi contingut poc útil o irrellevant.",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Aquesta opció eliminarà tots els fitxers existents de la col·lecció i els substituirà per fitxers recentment penjats.",
@ -1214,7 +1219,7 @@
"Unpin": "Alliberar",
"Unravel secrets": "Descobreix els secrets",
"Untagged": "Sense etiquetes",
"Untitled": "",
"Untitled": "Sense títol",
"Update": "Actualitzar",
"Update and Copy Link": "Actualitzar i copiar l'enllaç",
"Update for the latest features and improvements.": "Actualitza per a les darreres característiques i millores.",
@ -1225,7 +1230,7 @@
"Upgrade to a licensed plan for enhanced capabilities, including custom theming and branding, and dedicated support.": "Actualitzar a un pla amb llicència per obtenir capacitats millorades, com ara la temàtica personalitzada i la marca, i assistència dedicada.",
"Upload": "Pujar",
"Upload a GGUF model": "Pujar un model GGUF",
"Upload Audio": "",
"Upload Audio": "Pujar àudio",
"Upload directory": "Pujar directori",
"Upload files": "Pujar fitxers",
"Upload Files": "Pujar fitxers",
@ -1299,9 +1304,9 @@
"Write a summary in 50 words that summarizes [topic or keyword].": "Escriu un resum en 50 paraules que resumeixi [tema o paraula clau].",
"Write something...": "Escriu quelcom...",
"Write your model template content here": "Introdueix el contingut de la plantilla del teu model aquí",
"Yacy Instance URL": "",
"Yacy Password": "",
"Yacy Username": "",
"Yacy Instance URL": "URL de la instància de Yacy",
"Yacy Password": "Contrasenya de Yacy",
"Yacy Username": "Nom d'usuari de Yacy",
"Yesterday": "Ahir",
"You": "Tu",
"You are currently using a trial license. Please contact support to upgrade your license.": "Actualment esteu utilitzant una llicència de prova. Poseu-vos en contacte amb el servei d'assistència per actualitzar la vostra llicència.",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} gipapas",
"Deleted {{name}}": "",
"Deleted User": "",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "",
"Description": "Deskripsyon",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
"Enter {{role}} message here": "Pagsulod sa mensahe {{role}} dinhi",
"Enter a detail about yourself for your LLMs to recall": "",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "",
"Enter Application DN": "",
"Enter Application DN Password": "",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Pagsulod sa block overlap",
"Enter Chunk Size": "Isulod ang block size",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "",
"PDF Extract Images (OCR)": "PDF Image Extraction (OCR)",
"pending": "gipugngan",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "",
"Permission denied when accessing microphone": "",
"Permission denied when accessing microphone: {{error}}": "Gidili ang pagtugot sa dihang nag-access sa mikropono: {{error}}",

View File

@ -48,7 +48,7 @@
"Add User": "Přidat uživatele",
"Add User Group": "Přidatg skupinu uživatelů",
"Adjusting these settings will apply changes universally to all users.": "Úprava těchto nastavení se projeví univerzálně u všech uživatelů.",
"admin": "amin",
"admin": "admin",
"Admin": "Admin",
"Admin Panel": "Adminis panel",
"Admin Settings": "Nastavení admina",
@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "Smazáno {{deleteModelTag}}",
"Deleted {{name}}": "Smazáno {{name}}",
"Deleted User": "",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "",
"Description": "Popis",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Ujistěte se, že váš CSV soubor obsahuje 4 sloupce v tomto pořadí: Name, Email, Password, Role.",
"Enter {{role}} message here": "Zadejte zprávu {{role}} sem",
"Enter a detail about yourself for your LLMs to recall": "Zadejte podrobnost o sobě, kterou si vaše LLM mají pamatovat.",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Zadejte autentizační řetězec API (např. uživatelské_jméno:heslo)",
"Enter Application DN": "",
"Enter Application DN Password": "",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Zadejte překryv části",
"Enter Chunk Size": "Zadejte velikost bloku",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "Zadejte popis",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF dokument (.pdf)",
"PDF Extract Images (OCR)": "Extrahování obrázků z PDF (OCR)",
"pending": "čeká na vyřízení",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Odmítnutí povolení při přístupu k mediálním zařízením",
"Permission denied when accessing microphone": "Přístup k mikrofonu byl odepřen",
"Permission denied when accessing microphone: {{error}}": "Oprávnění zamítnuto při přístupu k mikrofonu: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "Slettede {{deleteModelTag}}",
"Deleted {{name}}": "Slettede {{name}}",
"Deleted User": "Slettede bruger",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "Beskriv din videnbase og mål",
"Description": "Beskrivelse",
"Detect Artifacts Automatically": "Genkend artifakter automatisk",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Sørg for at din CSV-fil indeholder 4 kolonner i denne rækkefølge: Name, Email, Password, Role.",
"Enter {{role}} message here": "Indtast {{role}} besked her",
"Enter a detail about yourself for your LLMs to recall": "Indtast en detalje om dig selv, som dine LLMs kan huske",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Indtast api-godkendelsesstreng (f.eks. brugernavn:adgangskode)",
"Enter Application DN": "",
"Enter Application DN Password": "",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Indtast overlapning af tekststykker",
"Enter Chunk Size": "Indtast størrelse af tekststykker",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "Indtast beskrivelse",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF-dokument (.pdf)",
"PDF Extract Images (OCR)": "Udtræk billeder fra PDF (OCR)",
"pending": "afventer",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Tilladelse nægtet ved adgang til medieenheder",
"Permission denied when accessing microphone": "Tilladelse nægtet ved adgang til mikrofon",
"Permission denied when accessing microphone: {{error}}": "Tilladelse nægtet ved adgang til mikrofon: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} gelöscht",
"Deleted {{name}}": "{{name}} gelöscht",
"Deleted User": "Benutzer gelöscht",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "Beschreibe deinen Wissensspeicher und deine Ziele",
"Description": "Beschreibung",
"Detect Artifacts Automatically": "Artefakte automatisch erkennen",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Stellen Sie sicher, dass Ihre CSV-Datei 4 Spalten in dieser Reihenfolge enthält: Name, E-Mail, Passwort, Rolle.",
"Enter {{role}} message here": "Geben Sie die {{role}}-Nachricht hier ein",
"Enter a detail about yourself for your LLMs to recall": "Geben Sie ein Detail über sich selbst ein, das Ihre Sprachmodelle (LLMs) sich merken sollen",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Geben Sie die API-Authentifizierungszeichenfolge ein (z. B. Benutzername:Passwort)",
"Enter Application DN": "Geben Sie die Anwendungs-DN ein",
"Enter Application DN Password": "Geben Sie das Anwendungs-DN-Passwort ein",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Geben Sie die Blocküberlappung ein",
"Enter Chunk Size": "Geben Sie die Blockgröße ein",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "Geben Sie eine Beschreibung ein",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF-Dokument (.pdf)",
"PDF Extract Images (OCR)": "Text von Bildern aus PDFs extrahieren (OCR)",
"pending": "ausstehend",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Zugriff auf Mediengeräte verweigert",
"Permission denied when accessing microphone": "Zugriff auf das Mikrofon verweigert",
"Permission denied when accessing microphone: {{error}}": "Zugriff auf das Mikrofon verweigert: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "Deleted {{deleteModelTag}}",
"Deleted {{name}}": "",
"Deleted User": "",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "",
"Description": "Description",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
"Enter {{role}} message here": "Enter {{role}} bork here",
"Enter a detail about yourself for your LLMs to recall": "",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "",
"Enter Application DN": "",
"Enter Application DN Password": "",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Enter Overlap of Chunks",
"Enter Chunk Size": "Enter Size of Chunk",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "",
"PDF Extract Images (OCR)": "PDF Extract Wowmages (OCR)",
"pending": "pending",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "",
"Permission denied when accessing microphone": "",
"Permission denied when accessing microphone: {{error}}": "Permission denied when accessing microphone: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "Διαγράφηκε το {{deleteModelTag}}",
"Deleted {{name}}": "Διαγράφηκε το {{name}}",
"Deleted User": "Διαγράφηκε ο Χρήστης",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "Περιγράψτε τη βάση γνώσης και τους στόχους σας",
"Description": "Περιγραφή",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Βεβαιωθείτε ότι το αρχείο CSV σας περιλαμβάνει 4 στήλες με αυτή τη σειρά: Όνομα, Email, Κωδικός, Ρόλος.",
"Enter {{role}} message here": "Εισάγετε το μήνυμα {{role}} εδώ",
"Enter a detail about yourself for your LLMs to recall": "Εισάγετε μια λεπτομέρεια για τον εαυτό σας ώστε τα LLMs να την ανακαλούν",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Εισάγετε τη σειρά επαλήθευσης api (π.χ. username:password)",
"Enter Application DN": "Εισάγετε DN Εφαρμογής",
"Enter Application DN Password": "Εισάγετε Κωδικό DN Εφαρμογής",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Εισάγετε την Επικάλυψη Τμημάτων",
"Enter Chunk Size": "Εισάγετε το Μέγεθος Τμημάτων",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "Εισάγετε την περιγραφή",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "Έγγραφο PDF (.pdf)",
"PDF Extract Images (OCR)": "Εξαγωγή Εικόνων PDF (OCR)",
"pending": "εκκρεμεί",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Άρνηση δικαιώματος κατά την πρόσβαση σε μέσα συσκευές",
"Permission denied when accessing microphone": "Άρνηση δικαιώματος κατά την πρόσβαση σε μικρόφωνο",
"Permission denied when accessing microphone: {{error}}": "Άρνηση δικαιώματος κατά την πρόσβαση σε μικρόφωνο: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "",
"Deleted {{name}}": "",
"Deleted User": "",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "",
"Description": "",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
"Enter {{role}} message here": "",
"Enter a detail about yourself for your LLMs to recall": "",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "",
"Enter Application DN": "",
"Enter Application DN Password": "",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "",
"Enter Chunk Size": "",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "",
"PDF Extract Images (OCR)": "",
"pending": "",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "",
"Permission denied when accessing microphone": "",
"Permission denied when accessing microphone: {{error}}": "",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "",
"Deleted {{name}}": "",
"Deleted User": "",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "",
"Description": "",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
"Enter {{role}} message here": "",
"Enter a detail about yourself for your LLMs to recall": "",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "",
"Enter Application DN": "",
"Enter Application DN Password": "",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "",
"Enter Chunk Size": "",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "",
"PDF Extract Images (OCR)": "",
"pending": "",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "",
"Permission denied when accessing microphone": "",
"Permission denied when accessing microphone: {{error}}": "",

View File

@ -17,7 +17,7 @@
"A task model is used when performing tasks such as generating titles for chats and web search queries": "El modelo de tareas realiza tareas como la generación de títulos para chats y consultas de búsqueda web",
"a user": "un usuario",
"About": "Acerca de",
"Accept autocomplete generation / Jump to prompt variable": "Aceptar generación de autocompletado / Saltar a indicador variable",
"Accept autocomplete generation / Jump to prompt variable": "Aceptar generación de autocompletado / Saltar a prompt variable",
"Access": "Acceso",
"Access Control": "Control de Acceso",
"Accessible to all users": "Accesible para todos los usuarios",
@ -36,7 +36,7 @@
"Add Connection": "Añadir Conexión",
"Add Content": "Añadir Contenido",
"Add content here": "Añadir contenido aquí",
"Add custom prompt": "Añadir un indicador personalizado",
"Add custom prompt": "Añadir un prompt personalizado",
"Add Files": "Añadir Archivos",
"Add Group": "Añadir Grupo",
"Add Memory": "Añadir Memoria",
@ -211,7 +211,7 @@
"Code formatted successfully": "El codigo se ha formateado correctamente.",
"Code Interpreter": "Interprete de Código",
"Code Interpreter Engine": "Motor del Interprete de Código",
"Code Interpreter Prompt Template": "Plantilla del Indicador del Interprete de Código",
"Code Interpreter Prompt Template": "Plantilla del Prompt del Interprete de Código",
"Collapse": "Plegar",
"Collection": "Colección",
"Color": "Color",
@ -292,7 +292,7 @@
"Default Models": "Modelos Predeterminados",
"Default permissions": "Permisos Predeterminados",
"Default permissions updated successfully": "Permisos predeterminados actualizados correctamente",
"Default Prompt Suggestions": "Sugerencias Predeterminadas de Indicador",
"Default Prompt Suggestions": "Sugerencias Predeterminadas de Prompt",
"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 to segmented retrieval for focused and relevant content extraction, this is recommended for most cases.": "Por defecto está predeterminada una segmentación de la recuperación para una extracción de contenido centrado y relevante, recomendado para la mayoría de los casos.",
@ -309,13 +309,14 @@
"Delete Message": "Borrar mensaje",
"Delete message?": "¿Borrar mensaje?",
"Delete note?": "",
"Delete prompt?": "¿Borrar el indicador?",
"Delete prompt?": "¿Borrar el prompt?",
"delete this link": "Borrar este enlace",
"Delete tool?": "¿Borrar la herramienta?",
"Delete User": "Borrar Usuario",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} Borrado",
"Deleted {{name}}": "{{nombre}} Borrado",
"Deleted User": "Usuario Borrado",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "Describe tu Base de Conocimientos y sus objetivos",
"Description": "Descripción",
"Detect Artifacts Automatically": "Detectar Artefactos Automáticamente",
@ -328,12 +329,12 @@
"Disabled": "Deshabilitado",
"Discover a function": "Descubrir Funciónes",
"Discover a model": "Descubrir Modelos",
"Discover a prompt": "Descubrir Indicadores",
"Discover a prompt": "Descubrir Prompts",
"Discover a tool": "Descubrir Herramientas",
"Discover how to use Open WebUI and seek support from the community.": "Descubre cómo usar Open WebUI y busca Soporte Comunitario.",
"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 indicadores personalizados",
"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 modelos con preajustados",
"Dismissible": "Desestimable",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Asegúrese de que su archivo CSV incluya 4 columnas en este orden: Nombre, Correo Electrónico, Contraseña, Rol.",
"Enter {{role}} message here": "Ingresar mensaje {{role}} aquí",
"Enter a detail about yourself for your LLMs to recall": "Ingresar detalles sobre ti para que los recuerden sus LLMs",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Ingresar campo de autorización de la api (p.ej. nombre:contraseña)",
"Enter Application DN": "Ingresar el DN de la Aplicación",
"Enter Application DN Password": "Ingresar la Contraseña del DN de la Aplicación",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Ingresar Superposición de los Fragmentos",
"Enter Chunk Size": "Ingresar el Tamaño del Fragmento",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "Ingresar pares \"token:valor_sesgo\" separados por comas (ejemplo: 5432:100, 413:-100)",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "Ingresar Descripción",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -476,8 +479,8 @@
"Enter Sougou Search API sID": "Ingresar Sougou Search API sID",
"Enter Sougou Search API SK": "Ingresar Sougou Search API SK",
"Enter stop sequence": "Ingresar secuencia de parada",
"Enter system prompt": "Ingresar Indicador del sistema",
"Enter system prompt here": "Ingresa aquí el indicador del sistema",
"Enter system prompt": "Ingresar Prompt del sistema",
"Enter system prompt here": "Ingresa aquí el prompt del sistema",
"Enter Tavily API Key": "Ingresar Clave API de Tavily",
"Enter Tavily Extract Depth": "Ingresar parámetro de Extract Depth de Taviliy",
"Enter the public URL of your WebUI. This URL will be used to generate links in the notifications.": "Ingresar URL pública de WebUI. Esta URL se usará para generar enlaces en las notificaciones.",
@ -533,7 +536,7 @@
"Export Functions": "Exportar Funciones",
"Export Models": "Exportar Modelos",
"Export Presets": "Exportar Preajustes",
"Export Prompts": "Exportar Indicadores",
"Export Prompts": "Exportar Prompts",
"Export to CSV": "Exportar a CSV",
"Export Tools": "Exportar Herramientas",
"External": "Externo",
@ -606,7 +609,7 @@
"Generate": "",
"Generate an image": "Generar una imagen",
"Generate Image": "Generar imagen",
"Generate prompt pair": "Generar par de indicadores",
"Generate prompt pair": "Generar par de prompts",
"Generating search query": "Generando consulta de búsqueda",
"Generating...": "",
"Get started": "Empezar",
@ -647,8 +650,8 @@
"Image Generation (Experimental)": "Generación de Imagen (experimental)",
"Image Generation Engine": "Motor de Generación de Imagen",
"Image Max Compression Size": "Tamaño Máximo de Compresión de Imagen",
"Image Prompt Generation": "Indicador para Generación de Imagen",
"Image Prompt Generation Prompt": "Indicador para la Generación de Imagen",
"Image Prompt Generation": "Prompt para Generación de Imagen",
"Image Prompt Generation Prompt": "Prompt para la Generación de Imagen",
"Image Settings": "Configuración de Imágen",
"Images": "Imágenes",
"Import Chats": "Importar Chats",
@ -657,7 +660,7 @@
"Import Models": "Importar Modelos",
"Import Notes": "",
"Import Presets": "Importar Preajustes",
"Import Prompts": "Importar Indicadores",
"Import Prompts": "Importar Prompts",
"Import Tools": "Importar Herramientas",
"Include": "Incluir",
"Include `--api-auth` flag when running stable-diffusion-webui": "Incluir el señalizador `--api-auth` al ejecutar stable-diffusion-webui",
@ -714,7 +717,7 @@
"Leave empty to include all models from \"{{url}}/api/tags\" endpoint": "Dejar vacío para incluir todos los modelos desde el endpoint \"{{url}}/api/tags\"",
"Leave empty to include all models from \"{{url}}/models\" endpoint": "Dejar vacío para incluir todos los modelos desde el endpoint \"{{url}}/models\"",
"Leave empty to include all models or select specific models": "Dejar vacío para incluir todos los modelos o Seleccionar modelos específicos",
"Leave empty to use the default prompt, or enter a custom prompt": "Dejar vacío para usar el indicador predeterminado, o Ingresar un indicador personalizado",
"Leave empty to use the default prompt, or enter a custom prompt": "Dejar vacío para usar el prompt predeterminado, o Ingresar un prompt personalizado",
"Leave model field empty to use the default model.": "Dejar vacío el campo modelo para usar el modelo predeterminado.",
"License": "Licencia",
"Light": "Claro",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "Documento PDF (.pdf)",
"PDF Extract Images (OCR)": "Extraer imágenes del PDF (OCR)",
"pending": "pendiente",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Permiso denegado accediendo a los dispositivos",
"Permission denied when accessing microphone": "Permiso denegado accediendo al micrófono",
"Permission denied when accessing microphone: {{error}}": "Permiso denegado accediendo al micrófono: {{error}}",
@ -902,7 +907,7 @@
"Playwright WebSocket URL": "URL de WebSocket de Playwright",
"Please carefully review the following warnings:": "Por favor revisar cuidadosamente los siguientes avisos:",
"Please do not close the settings page while loading the model.": "Por favor no cerrar la página de ajustes mientras se está descargando el modelo.",
"Please enter a prompt": "Por favor ingresar un indicador",
"Please enter a prompt": "Por favor ingresar un prompt",
"Please enter a valid path": "Por favor, ingresa una ruta válida",
"Please enter a valid URL": "Por favor, ingresa una URL válida",
"Please fill in all fields.": "Por favor rellenar todos los campos.",
@ -918,20 +923,20 @@
"Previous 7 days": "7 días previos",
"Private": "Privado",
"Profile Image": "Imagen del Perfil",
"Prompt": "Indicador",
"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Indicador (p.ej. Cuéntame una cosa divertida sobre el Imperio Romano)",
"Prompt Autocompletion": "Autocompletado del Indicador",
"Prompt Content": "Contenido del Indicador",
"Prompt created successfully": "Indicador creado exitosamente",
"Prompt suggestions": "Indicadores Sugeridos",
"Prompt updated successfully": "Indicador actualizado correctamente",
"Prompts": "Indicadores",
"Prompts Access": "Acceso a Indicadores",
"Prompt": "Prompt",
"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Prompt (p.ej. Cuéntame una cosa divertida sobre el Imperio Romano)",
"Prompt Autocompletion": "Autocompletado del Prompt",
"Prompt Content": "Contenido del Prompt",
"Prompt created successfully": "Prompt creado exitosamente",
"Prompt suggestions": "Prompts Sugeridos",
"Prompt updated successfully": "Prompt actualizado correctamente",
"Prompts": "Prompts",
"Prompts Access": "Acceso a Prompts",
"Prompts Public Sharing": "",
"Public": "Público",
"Pull \"{{searchValue}}\" from Ollama.com": "Extraer \"{{searchValue}}\" desde Ollama.com",
"Pull a model from Ollama.com": "Extraer un modelo desde Ollama.com",
"Query Generation Prompt": "Indicador para la Consulta de Generación",
"Query Generation Prompt": "Prompt para la Consulta de Generación",
"RAG Template": "Plantilla del RAG",
"Rating": "Calificación",
"Re-rank models by topic similarity": "Reclasificar modelos por similitud temática",
@ -998,7 +1003,7 @@
"Search Knowledge": "Buscar Conocimiento",
"Search Models": "Buscar Modelos",
"Search options": "Opciones de Búsqueda",
"Search Prompts": "Buscar Indicadores",
"Search Prompts": "Buscar Prompts",
"Search Result Count": "Número de resultados de la búsqueda",
"Search the internet": "Buscar en internet",
"Search Tools": "Buscar Herramientas",
@ -1056,7 +1061,7 @@
"Sets a flat bias against tokens that have appeared at least once. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 0.9) will be more lenient. At 0, it is disabled.": "Establece un sesgo plano contra los tokens que han aparecido al menos una vez. Un valor más alto (p.ej. 1.5) penalizará las repeticiones más fuertemente, mientras que un valor más bajo (p.ej. 0.9) será más indulgente. En 0, está deshabilitado.",
"Sets a scaling bias against tokens to penalize repetitions, based on how many times they have appeared. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 0.9) will be more lenient. At 0, it is disabled.": "Establece un sesgo escalado contra los tokens para penalizar las repeticiones, basado en cuántas veces han aparecido. Un valor más alto (por ejemplo, 1.5) penalizará las repeticiones más fuertemente, mientras que un valor más bajo (por ejemplo, 0.9) será más indulgente. En 0, está deshabilitado.",
"Sets how far back for the model to look back to prevent repetition.": "Establece cuántos tokens debe mirar atrás el modelo para prevenir la repetición. ",
"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.": "Establece la semilla de números aleatorios 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 indicador(prompt).",
"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.": "Establece la semilla de números aleatorios 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(prompt).",
"Sets the size of the context window used to generate the next token.": "Establece el tamaño de la ventana del contexto utilizada para generar el siguiente token.",
"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 retornará. Se pueden establecer varios patrones de parada especificando separadamente múltiples parámetros de parada en un archivo de modelo.",
"Settings": "Ajustes",
@ -1103,10 +1108,10 @@
"Sync directory": "Sincroniza Directorio",
"System": "Sistema",
"System Instructions": "Instrucciones del sistema",
"System Prompt": "Indicador del sistema",
"System Prompt": "Prompt del sistema",
"Tags": "Etiquetas",
"Tags Generation": "Generación de Etiquetas",
"Tags Generation Prompt": "Indicador para la Generación de Etiquetas",
"Tags Generation Prompt": "Prompt para la 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.": "El Muestreo de cola libre(TFS_Z) es usado para reducir el impacto de los tokens menos probables en la salida. Un valor más alto (p.ej. 2.0) reduce más fuertemente el impacto, mientras que un valor de 1.0 deshabilita este ajuste.",
"Talk to model": "Hablar con el modelo",
"Tap to interrupt": "Toca para interrumpir",
@ -1162,7 +1167,7 @@
"Title Auto-Generation": "AutoGeneración de Títulos",
"Title cannot be an empty string.": "El título no puede ser una cadena vacía.",
"Title Generation": "Generación de Títulos",
"Title Generation Prompt": "Indicador para la Generación de Título",
"Title Generation Prompt": "Prompt para la Generación de Título",
"TLS": "TLS",
"To access the available model names for downloading,": "Para acceder a los nombres de modelos disponibles para descargar,",
"To access the GGUF models available for downloading,": "Para acceder a los modelos GGUF disponibles para descargar,",
@ -1191,7 +1196,7 @@
"Tools": "Herramientas",
"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 ejecución de código arbitrario",
"Tools Function Calling Prompt": "Indicador para la Función de Llamada a las Herramientas",
"Tools Function Calling Prompt": "Prompt para la Función de Llamada a las Herramientas",
"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.",
"Tools Public Sharing": "",
"Top K": "Top K",
@ -1233,7 +1238,7 @@
"Upload Progress": "Progreso de la Subida",
"URL": "URL",
"URL Mode": "Modo URL",
"Use '#' in the prompt input to load and include your knowledge.": "Utilizar '#' en el indicador para cargar e incluir tu conocimiento.",
"Use '#' in the prompt input to load and include your knowledge.": "Utilizar '#' en el prompt para cargar e incluir tu conocimiento.",
"Use Gravatar": "Usar Gravatar",
"Use groups to group your users and assign permissions.": "Usar grupos para agrupar a usuarios y asignar permisos.",
"Use Initials": "Usar Iniciales",
@ -1295,7 +1300,7 @@
"Workspace": "Espacio de Trabajo",
"Workspace Permissions": "Permisos del Espacio de Trabajo",
"Write": "Escribir",
"Write a prompt suggestion (e.g. Who are you?)": "Escribe una sugerencia de indicador (p.ej. ¿quién eres?)",
"Write a prompt suggestion (e.g. Who are you?)": "Escribe una sugerencia de prompt (p.ej. ¿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...": "Escribe algo...",
"Write your model template content here": "Escribe el contenido de la plantilla de tu modelo aquí",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "Kustutatud {{deleteModelTag}}",
"Deleted {{name}}": "Kustutatud {{name}}",
"Deleted User": "Kustutatud kasutaja",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "Kirjeldage oma teadmiste baasi ja eesmärke",
"Description": "Kirjeldus",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Veenduge, et teie CSV-fail sisaldab 4 veergu selles järjekorras: Nimi, E-post, Parool, Roll.",
"Enter {{role}} message here": "Sisestage {{role}} sõnum siia",
"Enter a detail about yourself for your LLMs to recall": "Sisestage detail enda kohta, mida teie LLM-id saavad meenutada",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Sisestage api autentimisstring (nt kasutajanimi:parool)",
"Enter Application DN": "Sisestage rakenduse DN",
"Enter Application DN Password": "Sisestage rakenduse DN parool",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Sisestage tükkide ülekate",
"Enter Chunk Size": "Sisestage tüki suurus",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "Sisestage komadega eraldatud \"token:kallutuse_väärtus\" paarid (näide: 5432:100, 413:-100)",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "Sisestage kirjeldus",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF dokument (.pdf)",
"PDF Extract Images (OCR)": "PDF-ist piltide väljavõtmine (OCR)",
"pending": "ootel",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Juurdepääs meediumiseadmetele keelatud",
"Permission denied when accessing microphone": "Juurdepääs mikrofonile keelatud",
"Permission denied when accessing microphone: {{error}}": "Juurdepääs mikrofonile keelatud: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} ezabatu da",
"Deleted {{name}}": "{{name}} ezabatu da",
"Deleted User": "Ezabatutako Erabiltzailea",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "Deskribatu zure ezagutza-basea eta helburuak",
"Description": "Deskribapena",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Ziurtatu zure CSV fitxategiak 4 zutabe dituela ordena honetan: Izena, Posta elektronikoa, Pasahitza, Rola.",
"Enter {{role}} message here": "Sartu {{role}} mezua hemen",
"Enter a detail about yourself for your LLMs to recall": "Sartu zure buruari buruzko xehetasun bat LLMek gogoratzeko",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Sartu api autentifikazio katea (adib. erabiltzailea:pasahitza)",
"Enter Application DN": "Sartu Aplikazioaren DN",
"Enter Application DN Password": "Sartu Aplikazioaren DN Pasahitza",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Sartu Zatien Gainjartzea (chunk overlap)",
"Enter Chunk Size": "Sartu Zati Tamaina",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "Sartu deskribapena",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF dokumentua (.pdf)",
"PDF Extract Images (OCR)": "PDF irudiak erauzi (OCR)",
"pending": "zain",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Baimena ukatu da multimedia gailuak atzitzean",
"Permission denied when accessing microphone": "Baimena ukatu da mikrofonoa atzitzean",
"Permission denied when accessing microphone: {{error}}": "Baimena ukatu da mikrofonoa atzitzean: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} پاک شد",
"Deleted {{name}}": "حذف شده {{name}}",
"Deleted User": "کاربر حذف شده",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "پایگاه دانش و اهداف خود را توصیف کنید",
"Description": "توضیحات",
"Detect Artifacts Automatically": "تشخیص خودکار مصنوعات",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "اطمینان حاصل کنید که فایل CSV شما شامل چهار ستون در این ترتیب است: نام، ایمیل، رمز عبور، نقش.",
"Enter {{role}} message here": "پیام {{role}} را اینجا وارد کنید",
"Enter a detail about yourself for your LLMs to recall": "برای ذخیره سازی اطلاعات خود، یک توضیح کوتاه درباره خود را وارد کنید",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "رشته احراز هویت api را وارد کنید (مثلا username:password)",
"Enter Application DN": "DN برنامه را وارد کنید",
"Enter Application DN Password": "رمز عبور DN برنامه را وارد کنید",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "مقدار Chunk Overlap را وارد کنید",
"Enter Chunk Size": "مقدار Chunk Size را وارد کنید",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "جفت\u200cهای \"توکن:مقدار_بایاس\" را با کاما جدا شده وارد کنید (مثال: 5432:100, 413:-100)",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "توضیحات را وارد کنید",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF سند (.pdf)",
"PDF Extract Images (OCR)": "استخراج تصاویر از PDF (OCR)",
"pending": "در انتظار",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "دسترسی به دستگاه\u200cهای رسانه رد شد",
"Permission denied when accessing microphone": "دسترسی به میکروفون رد شد",
"Permission denied when accessing microphone: {{error}}": "هنگام دسترسی به میکروفون، اجازه داده نشد: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "Poistettu {{deleteModelTag}}",
"Deleted {{name}}": "Poistettu {{nimi}}",
"Deleted User": "Käyttäjä poistettu",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "Kuvaa tietokantasi ja tavoitteesi",
"Description": "Kuvaus",
"Detect Artifacts Automatically": "Tunnista artefaktit automaattisesti",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Varmista, että CSV-tiedostossasi on 4 saraketta tässä järjestyksessä: Nimi, Sähköposti, Salasana, Rooli.",
"Enter {{role}} message here": "Kirjoita {{role}}-viesti tähän",
"Enter a detail about yourself for your LLMs to recall": "Kirjoita yksityiskohta itsestäsi, jonka LLM-ohjelmat voivat muistaa",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Kirjoita API-todennusmerkkijono (esim. käyttäjätunnus:salasana)",
"Enter Application DN": "Kirjoita sovelluksen DN",
"Enter Application DN Password": "Kirjoita sovelluksen DN-salasana",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Syötä osien päällekkäisyys",
"Enter Chunk Size": "Syötä osien koko",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "Syötä pilkulla erottaen \"token:bias_value\" parit (esim. 5432:100, 413:-100)",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "Kirjoita kuvaus",
"Enter Docling OCR Engine": "Kirjoita Docling OCR moottori",
"Enter Docling OCR Language(s)": "Kirjoita Docling OCR kieli(ä)",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF-asiakirja (.pdf)",
"PDF Extract Images (OCR)": "Poimi kuvat PDF:stä (OCR)",
"pending": "odottaa",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Käyttöoikeus evätty media-laitteille",
"Permission denied when accessing microphone": "Käyttöoikeus evätty mikrofonille",
"Permission denied when accessing microphone: {{error}}": "Käyttöoikeus evätty mikrofonille: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "Supprimé {{deleteModelTag}}",
"Deleted {{name}}": "Supprimé {{name}}",
"Deleted User": "",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "",
"Description": "Description",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Vérifiez que votre fichier CSV comprenne les 4 colonnes dans cet ordre : Name, Email, Password, Role.",
"Enter {{role}} message here": "Entrez le message {{role}} ici",
"Enter a detail about yourself for your LLMs to recall": "Saisissez un détail sur vous-même que vos LLMs pourront se rappeler",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Entrez la chaîne d'authentification de l'API (par ex. nom d'utilisateur:mot de passe)",
"Enter Application DN": "",
"Enter Application DN Password": "",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Entrez le chevauchement de chunk",
"Enter Chunk Size": "Entrez la taille de bloc",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "Document au format PDF (.pdf)",
"PDF Extract Images (OCR)": "Extraction d'images PDF (OCR)",
"pending": "en attente",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Accès aux appareils multimédias refusé",
"Permission denied when accessing microphone": "Autorisation refusée lors de l'accès au micro",
"Permission denied when accessing microphone: {{error}}": "Permission refusée lors de l'accès au microphone : {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "Supprimé {{deleteModelTag}}",
"Deleted {{name}}": "Supprimé {{name}}",
"Deleted User": "Utilisateur supprimé",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "Décrivez votre base de connaissances et vos objectifs",
"Description": "Description",
"Detect Artifacts Automatically": "Détection automatique des Artifacts",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Vérifiez que votre fichier CSV comprenne les 4 colonnes dans cet ordre : Name, Email, Password, Role.",
"Enter {{role}} message here": "Entrez le message {{role}} ici",
"Enter a detail about yourself for your LLMs to recall": "Saisissez un détail sur vous-même que vos LLMs pourront se rappeler",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Entrez la chaîne d'authentification de l'API (par ex. nom d'utilisateur:mot de passe)",
"Enter Application DN": "Entrez le DN de l'application",
"Enter Application DN Password": "Entrez le mot de passe DN de l'application",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Entrez le chevauchement des chunks",
"Enter Chunk Size": "Entrez la taille des chunks",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "Entrez la description",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "Document au format PDF (.pdf)",
"PDF Extract Images (OCR)": "Extraction d'images PDF (OCR)",
"pending": "en attente",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Accès aux appareils multimédias refusé",
"Permission denied when accessing microphone": "Accès au microphone refusé",
"Permission denied when accessing microphone: {{error}}": "Accès au microphone refusé : {{error}}",

View File

@ -254,6 +254,8 @@
"Current Model": "Modelo Actual",
"Current Password": "contrasinal Actual",
"Custom": "Personalizado",
"Custom Account Pending Text": "",
"Custom Account Pending Title": "",
"Danger Zone": "",
"Dark": "Oscuro",
"Database": "Base de datos",
@ -369,6 +371,8 @@
"Enable New Sign Ups": "Habilitar novos Registros",
"Enabled": "Activado",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "asegurese de o teu arquivo CSV inclúe 4 columnas nesta orde: Nome, Email, Contrasinal, Rol.",
"Enter a custom text to be displayed on the account pending screen. Leave empty for default.": "",
"Enter a custom title to be displayed on the account pending screen. Leave empty for default.": "",
"Enter {{role}} message here": "Ingrese o mensaxe {{role}} aquí",
"Enter a detail about yourself for your LLMs to recall": "Ingrese un detalle sobre vostede para que as suas LLMs recorden",
"Enter api auth string (e.g. username:password)": "Ingrese a cadena de autorización de api (p.ej., nombre:contrasinal )",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "נמחק {{deleteModelTag}}",
"Deleted {{name}}": "נמחק {{name}}",
"Deleted User": "",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "",
"Description": "תיאור",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "ודא שקובץ ה-CSV שלך כולל 4 עמודות בסדר הבא: שם, דוא\"ל, סיסמה, תפקיד.",
"Enter {{role}} message here": "הזן הודעת {{role}} כאן",
"Enter a detail about yourself for your LLMs to recall": "הזן פרטים על עצמך כדי שLLMs יזכור",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "",
"Enter Application DN": "",
"Enter Application DN Password": "",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "הזן חפיפת נתונים",
"Enter Chunk Size": "הזן גודל נתונים",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "מסמך PDF (.pdf)",
"PDF Extract Images (OCR)": "חילוץ תמונות מ-PDF (OCR)",
"pending": "ממתין",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "",
"Permission denied when accessing microphone": "",
"Permission denied when accessing microphone: {{error}}": "ההרשאה נדחתה בעת גישה למיקרופון: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} हटा दिया गया",
"Deleted {{name}}": "{{name}} हटा दिया गया",
"Deleted User": "",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "",
"Description": "विवरण",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "सुनिश्चित करें कि आपकी CSV फ़ाइल में इस क्रम में 4 कॉलम शामिल हैं: नाम, ईमेल, पासवर्ड, भूमिका।",
"Enter {{role}} message here": "यहां {{role}} संदेश दर्ज करें",
"Enter a detail about yourself for your LLMs to recall": "अपने एलएलएम को याद करने के लिए अपने बारे में एक विवरण दर्ज करें",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "",
"Enter Application DN": "",
"Enter Application DN Password": "",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "चंक ओवरलैप दर्ज करें",
"Enter Chunk Size": "खंड आकार दर्ज करें",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF दस्तावेज़ (.pdf)",
"PDF Extract Images (OCR)": "PDF छवियाँ निकालें (OCR)",
"pending": "लंबित",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "",
"Permission denied when accessing microphone": "",
"Permission denied when accessing microphone: {{error}}": "माइक्रोफ़ोन तक पहुँचने पर अनुमति अस्वीकृत: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "Izbrisan {{deleteModelTag}}",
"Deleted {{name}}": "Izbrisano {{name}}",
"Deleted User": "",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "",
"Description": "Opis",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Provjerite da vaša CSV datoteka uključuje 4 stupca u ovom redoslijedu: Name, Email, Password, Role.",
"Enter {{role}} message here": "Unesite {{role}} poruku ovdje",
"Enter a detail about yourself for your LLMs to recall": "Unesite pojedinosti o sebi da bi učitali memoriju u LLM",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "",
"Enter Application DN": "",
"Enter Application DN Password": "",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Unesite preklapanje dijelova",
"Enter Chunk Size": "Unesite veličinu dijela",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF dokument (.pdf)",
"PDF Extract Images (OCR)": "PDF izdvajanje slika (OCR)",
"pending": "u tijeku",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Dopuštenje je odbijeno prilikom pristupa medijskim uređajima",
"Permission denied when accessing microphone": "Dopuštenje je odbijeno prilikom pristupa mikrofonu",
"Permission denied when accessing microphone: {{error}}": "Pristup mikrofonu odbijen: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} törölve",
"Deleted {{name}}": "{{name}} törölve",
"Deleted User": "Felhasználó törölve",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "Írd le a tudásbázisodat és céljaidat",
"Description": "Leírás",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Győződj meg róla, hogy a CSV fájl tartalmazza ezt a 4 oszlopot ebben a sorrendben: Név, Email, Jelszó, Szerep.",
"Enter {{role}} message here": "Írd ide a {{role}} üzenetet",
"Enter a detail about yourself for your LLMs to recall": "Adj meg egy részletet magadról, amit az LLM-ek megjegyezhetnek",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Add meg az API hitelesítési karakterláncot (pl. felhasználónév:jelszó)",
"Enter Application DN": "Add meg az alkalmazás DN-t",
"Enter Application DN Password": "Add meg az alkalmazás DN jelszavát",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Add meg a darab átfedést",
"Enter Chunk Size": "Add meg a darab méretet",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "Add meg vesszővel elválasztott \"token:bias_érték\" párokat (példa: 5432:100, 413:-100)",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "Add meg a leírást",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF dokumentum (.pdf)",
"PDF Extract Images (OCR)": "PDF képek kinyerése (OCR)",
"pending": "függőben",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Hozzáférés megtagadva a médiaeszközökhöz",
"Permission denied when accessing microphone": "Hozzáférés megtagadva a mikrofonhoz",
"Permission denied when accessing microphone: {{error}}": "Hozzáférés megtagadva a mikrofonhoz: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "Menghapus {{deleteModelTag}}",
"Deleted {{name}}": "Menghapus {{name}}",
"Deleted User": "",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "",
"Description": "Deskripsi",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Pastikan file CSV Anda menyertakan 4 kolom dengan urutan sebagai berikut: Nama, Email, Kata Sandi, Peran.",
"Enter {{role}} message here": "Masukkan pesan {{role}} di sini",
"Enter a detail about yourself for your LLMs to recall": "Masukkan detail tentang diri Anda untuk diingat oleh LLM Anda",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Masukkan string pengesahan API (misalnya nama pengguna: kata sandi)",
"Enter Application DN": "",
"Enter Application DN Password": "",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Masukkan Tumpang Tindih Chunk",
"Enter Chunk Size": "Masukkan Ukuran Potongan",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "Dokumen PDF (.pdf)",
"PDF Extract Images (OCR)": "Ekstrak Gambar PDF (OCR)",
"pending": "tertunda",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Izin ditolak saat mengakses perangkat media",
"Permission denied when accessing microphone": "Izin ditolak saat mengakses mikrofon",
"Permission denied when accessing microphone: {{error}}": "Izin ditolak saat mengakses mikrofon: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "Scriosta {{deleteModelTag}}",
"Deleted {{name}}": "Scriosta {{name}}",
"Deleted User": "Úsáideoir Scriosta",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "Déan cur síos ar do bhunachar eolais agus do chuspóirí",
"Description": "Cur síos",
"Detect Artifacts Automatically": "Déan Déantáin a bhrath go huathoibríoch",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Déan cinnte go bhfuil 4 cholún san ord seo i do chomhad CSV: Ainm, Ríomhphost, Pasfhocal, Ról.",
"Enter {{role}} message here": "Cuir isteach teachtaireacht {{role}} anseo",
"Enter a detail about yourself for your LLMs to recall": "Cuir isteach mionsonraí fút féin chun do LLManna a mheabhrú",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Cuir isteach sreang auth api (m.sh. ainm úsáideora: pasfhocal)",
"Enter Application DN": "Cuir isteach Feidhmchlár DN",
"Enter Application DN Password": "Iontráil Feidhmchlár DN Pasfhocal",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Cuir isteach Chunk Forluí",
"Enter Chunk Size": "Cuir isteach Méid an Smután",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "Cuir isteach péirí camóg-scartha \"comhartha:luach laofachta\" (mar shampla: 5432:100, 413:-100)",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "Iontráil cur síos",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "Doiciméad PDF (.pdf)",
"PDF Extract Images (OCR)": "Íomhánna Sliocht PDF (OCR)",
"pending": "ar feitheamh",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Cead diúltaithe nuair a bhíonn rochtain agat",
"Permission denied when accessing microphone": "Cead diúltaithe agus tú ag rochtain ar",
"Permission denied when accessing microphone: {{error}}": "Cead diúltaithe agus tú ag teacht ar mhicreafón: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} eliminato",
"Deleted {{name}}": "{{name}} eliminato",
"Deleted User": "Utente eliminato",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "Descrivi la tua base di conoscenza e gli obiettivi",
"Description": "Descrizione",
"Detect Artifacts Automatically": "Rileva artefatti automaticamente",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Assicurati che il tuo file CSV includa 4 colonne in questo ordine: Nome, Email, Password, Ruolo.",
"Enter {{role}} message here": "Inserisci il messaggio per {{role}} qui",
"Enter a detail about yourself for your LLMs to recall": "Inserisci un dettaglio su di te per che i LLM possano ricordare",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Inserisci la stringa di autenticazione API (ad es. nome utente:password)",
"Enter Application DN": "Inserisci DN dell'applicazione",
"Enter Application DN Password": "Inserisci password DN dell'applicazione",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Inserisci la sovrapposizione chunk",
"Enter Chunk Size": "Inserisci la dimensione chunk",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "Inserisci coppie \"token:valore_bias\" separate da virgole (esempio: 5432:100, 413:-100)",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "Inserisci la descrizione",
"Enter Docling OCR Engine": "Inserisci il OCR Docling Engine",
"Enter Docling OCR Language(s)": "Inserisci la lingua OCR Docling",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "Documento PDF (.pdf)",
"PDF Extract Images (OCR)": "Estrazione immagini PDF (OCR)",
"pending": "in sospeso",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Autorizzazione negata durante l'accesso ai dispositivi multimediali",
"Permission denied when accessing microphone": "Autorizzazione negata durante l'accesso al microfono",
"Permission denied when accessing microphone: {{error}}": "Autorizzazione negata durante l'accesso al microfono: {{error}}",

File diff suppressed because it is too large Load Diff

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} წაშლილია",
"Deleted {{name}}": "Deleted {{name}}",
"Deleted User": "წაშლილი მომხმარებელი",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "",
"Description": "აღწერა",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "დარწმუნდით, რომ თქვენი CSV-ფაილი შეიცავს 4 ველს ამ მიმდევრობით: სახელი, ელფოსტა, პაროლი, როლი.",
"Enter {{role}} message here": "შეიყვანე {{role}} შეტყობინება აქ",
"Enter a detail about yourself for your LLMs to recall": "შეიყვანეთ რამე თქვენს შესახებ, რომ თქვენმა LLM-მა გაიხსენოს",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "",
"Enter Application DN": "",
"Enter Application DN Password": "",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "შეიყვანეთ ფრაგმენტის გადაფარვა",
"Enter Chunk Size": "შეიყვანე ფრაგმენტის ზომა",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "შეიყვანეთ აღწერა",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF დოკუმენტი (.pdf)",
"PDF Extract Images (OCR)": "PDF იდან ამოღებული სურათები (OCR)",
"pending": "დარჩენილი",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "",
"Permission denied when accessing microphone": "",
"Permission denied when accessing microphone: {{error}}": "ნებართვა უარყოფილია მიკროფონზე წვდომისას: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} 삭제됨",
"Deleted {{name}}": "{{name}}을(를) 삭제했습니다.",
"Deleted User": "삭제된 사용자",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "지식 기반에 대한 설명과 목적을 입력하세요",
"Description": "설명",
"Detect Artifacts Automatically": "아티팩트 자동 감지",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "CSV 파일에 이름, 이메일, 비밀번호, 역할 4개의 열이 순서대로 포함되어 있는지 확인하세요.",
"Enter {{role}} message here": "여기에 {{role}} 메시지 입력",
"Enter a detail about yourself for your LLMs to recall": "자신에 대한 세부사항을 입력하여 LLM들이 기억할 수 있도록 하세요.",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "API 인증 문자 입력 (예: 사용자 이름:비밀번호)",
"Enter Application DN": "애플리케이션 DN 입력",
"Enter Application DN Password": "애플리케이션 DN 비밀번호 입력",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "청크 오버랩 입력",
"Enter Chunk Size": "청크 크기 입력",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "쉼표로 구분된 \\\"토큰:편향_값\\\" 쌍 입력 (예: 5432:100, 413:-100)",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "설명 입력",
"Enter Docling OCR Engine": "Docling OCR 엔진 입력",
"Enter Docling OCR Language(s)": "Docling OCR 언어(s) 입력",
@ -878,6 +881,8 @@
"PDF document (.pdf)": "PDF 문서(.pdf)",
"PDF Extract Images (OCR)": "PDF 이미지 추출(OCR)",
"pending": "보류 중",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "미디어 장치 접근 권한이 거부되었습니다.",
"Permission denied when accessing microphone": "마이크 접근 권한이 거부되었습니다.",
"Permission denied when accessing microphone: {{error}}": "마이크 접근 권환이 거부되었습니다: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} ištrinta",
"Deleted {{name}}": "Ištrinta {{name}}",
"Deleted User": "",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "",
"Description": "Aprašymas",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Įsitikinkite, kad CSV failas turi 4 kolonas šiuo eiliškumu: Name, Email, Password, Role.",
"Enter {{role}} message here": "Įveskite {{role}} žinutę čia",
"Enter a detail about yourself for your LLMs to recall": "Įveskite informaciją apie save jūsų modelio atminčiai",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Įveskite API autentifikacijos kodą (pvz. username:password)",
"Enter Application DN": "",
"Enter Application DN Password": "",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Įveskite blokų persidengimą",
"Enter Chunk Size": "Įveskite blokų dydį",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF dokumentas (.pdf)",
"PDF Extract Images (OCR)": "PDF paveikslėlių skaitymas (OCR)",
"pending": "laukiama",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Leidimas atmestas bandant prisijungti prie medijos įrenginių",
"Permission denied when accessing microphone": "Mikrofono leidimas atmestas",
"Permission denied when accessing microphone: {{error}}": "Leidimas naudoti mikrofoną atmestas: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} dipadam",
"Deleted {{name}}": "{{name}} dipadam",
"Deleted User": "",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "",
"Description": "Penerangan",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "astikan fail CSV anda mengandungi 4 lajur dalam susunan ini: Nama, E-mel, Kata Laluan, Peranan.",
"Enter {{role}} message here": "Masukkan mesej {{role}} di sini",
"Enter a detail about yourself for your LLMs to recall": "Masukkan butiran tentang diri anda untuk diingati oleh LLM anda",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Masukkan kekunci auth api ( cth nama pengguna:kata laluan )",
"Enter Application DN": "",
"Enter Application DN Password": "",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Masukkan Tindihan 'Chunk'",
"Enter Chunk Size": "Masukkan Saiz 'Chunk'",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "Dokumen PDF (.pdf)",
"PDF Extract Images (OCR)": "Imej Ekstrak PDF (OCR)",
"pending": "tertunda",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Tidak mendapat kebenaran apabila cuba mengakses peranti media",
"Permission denied when accessing microphone": "Tidak mendapat kebenaran apabila cuba mengakses mikrofon",
"Permission denied when accessing microphone: {{error}}": "Tidak mendapat kebenaran apabila cuba mengakses mikrofon: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "Slettet {{deleteModelTag}}",
"Deleted {{name}}": "Slettet {{name}}",
"Deleted User": "Slettet bruker",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "Beskriv kunnskapsbasen din og målene dine",
"Description": "Beskrivelse",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Sørg for at CSV-filen din inkluderer fire kolonner i denne rekkefølgen: Navn, E-post, Passord, Rolle.",
"Enter {{role}} message here": "Skriv inn {{role}} melding her",
"Enter a detail about yourself for your LLMs to recall": "Skriv inn en detalj om deg selv som språkmodellene dine kan huske",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Skriv inn API-autentiseringsstreng (f.eks. brukernavn:passord)",
"Enter Application DN": "Angi applikasjonens DN",
"Enter Application DN Password": "Angi applikasjonens DN-passord",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Angi Chunk-overlapp",
"Enter Chunk Size": "Angi Chunk-størrelse",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "Angi beskrivelse",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF-dokument (.pdf)",
"PDF Extract Images (OCR)": "Uthenting av PDF-bilder (OCR)",
"pending": "avventer",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Tilgang avslått ved bruk av medieenheter",
"Permission denied when accessing microphone": "Tilgang avslått ved bruk av mikrofonen",
"Permission denied when accessing microphone: {{error}}": "Tilgang avslått ved bruk av mikrofonen: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} is verwijderd",
"Deleted {{name}}": "{{name}} verwijderd",
"Deleted User": "Gebruiker verwijderd",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "Beschrijf je kennisbasis en doelstellingen",
"Description": "Beschrijving",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Zorg ervoor dat uw CSV-bestand de volgende vier kolommen in deze volgorde bevat: Naam, E-mail, Wachtwoord, Rol.",
"Enter {{role}} message here": "Voeg {{role}} bericht hier toe",
"Enter a detail about yourself for your LLMs to recall": "Voer een detail over jezelf in zodat LLM's het kunnen onthouden",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Voer api auth string in (bv. gebruikersnaam:wachtwoord)",
"Enter Application DN": "Voer applicatie-DN in",
"Enter Application DN Password": "Voer applicatie-DN wachtwoord in",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Voeg Chunk Overlap toe",
"Enter Chunk Size": "Voeg Chunk Size toe",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "Voer kommagescheiden \"token:bias_waarde\" paren in (bijv. 5432:100, 413:-100)",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "Voer beschrijving in",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF document (.pdf)",
"PDF Extract Images (OCR)": "PDF extraheer afbeeldingen (OCR)",
"pending": "wachtend",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Toegang geweigerd bij het toegang krijgen tot media-apparaten",
"Permission denied when accessing microphone": "Toegang geweigerd bij toegang tot de microfoon",
"Permission denied when accessing microphone: {{error}}": "Toestemming geweigerd bij toegang tot microfoon: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} ਮਿਟਾਇਆ ਗਿਆ",
"Deleted {{name}}": "ਮਿਟਾ ਦਿੱਤਾ ਗਿਆ {{name}}",
"Deleted User": "",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "",
"Description": "ਵਰਣਨਾ",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "ਸੁਨਿਸ਼ਚਿਤ ਕਰੋ ਕਿ ਤੁਹਾਡੀ CSV ਫਾਈਲ ਵਿੱਚ ਇਸ ਕ੍ਰਮ ਵਿੱਚ 4 ਕਾਲਮ ਹਨ: ਨਾਮ, ਈਮੇਲ, ਪਾਸਵਰਡ, ਭੂਮਿਕਾ।",
"Enter {{role}} message here": "{{role}} ਸੁਨੇਹਾ ਇੱਥੇ ਦਰਜ ਕਰੋ",
"Enter a detail about yourself for your LLMs to recall": "ਤੁਹਾਡੇ LLMs ਨੂੰ ਸੁਨੇਹਾ ਕਰਨ ਲਈ ਸੁਨੇਹਾ ਇੱਥੇ ਦਰਜ ਕਰੋ",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "",
"Enter Application DN": "",
"Enter Application DN Password": "",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "ਚੰਕ ਓਵਰਲੈਪ ਦਰਜ ਕਰੋ",
"Enter Chunk Size": "ਚੰਕ ਆਕਾਰ ਦਰਜ ਕਰੋ",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF ਡਾਕੂਮੈਂਟ (.pdf)",
"PDF Extract Images (OCR)": "PDF ਚਿੱਤਰ ਕੱਢੋ (OCR)",
"pending": "ਬਕਾਇਆ",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "",
"Permission denied when accessing microphone": "",
"Permission denied when accessing microphone: {{error}}": "ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਤੱਕ ਪਹੁੰਚਣ ਸਮੇਂ ਆਗਿਆ ਰੱਦ ਕੀਤੀ ਗਈ: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "Usunieto {{deleteModelTag}}",
"Deleted {{name}}": "Usunięto użytkownika {{name}}",
"Deleted User": "Usunięty użytkownik",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "Opisz swoją bazę wiedzy i cele",
"Description": "Opis",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Upewnij się, że twój plik CSV zawiera dokładnie 4 kolumny w następującej kolejności: Nazwa, Email, Hasło, Rola.",
"Enter {{role}} message here": "Wprowadź komunikat dla {{role}} tutaj",
"Enter a detail about yourself for your LLMs to recall": "Podaj informacje o sobie, aby LLMs mogły je przypomnieć.",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Wprowadź ciąg uwierzytelniania API (np. nazwa użytkownika:hasło)",
"Enter Application DN": "Wprowadź nazwę konta technicznego - Format DN",
"Enter Application DN Password": "Wprowadź hasło do konta technicznego",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Wprowadź nakładanie się bloków",
"Enter Chunk Size": "Wprowadź wielkość bloku",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "Wprowadź opis",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "Dokument PDF (.pdf)",
"PDF Extract Images (OCR)": "PDF Ekstrahuj obrazy (OCR)",
"pending": "oczekiwanie",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Odmowa dostępu podczas uzyskiwania dostępu do urządzeń multimedialnych",
"Permission denied when accessing microphone": "Odmowa dostępu podczas uzyskiwania dostępu do mikrofonu",
"Permission denied when accessing microphone: {{error}}": "Odmowa dostępu do mikrofonu: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "Excluído {{deleteModelTag}}",
"Deleted {{name}}": "Excluído {{name}}",
"Deleted User": "Usuário Excluído",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "Descreva sua base de conhecimento e objetivos",
"Description": "Descrição",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Certifique-se de que seu arquivo CSV inclua 4 colunas nesta ordem: Nome, Email, Senha, Função.",
"Enter {{role}} message here": "Digite a mensagem de {{role}} aqui",
"Enter a detail about yourself for your LLMs to recall": "Digite um detalhe sobre você para seus LLMs lembrarem",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Digite a string de autenticação da API (por exemplo, username:password)",
"Enter Application DN": "Digite o DN da Aplicação",
"Enter Application DN Password": "Digite a Senha do DN da Aplicação",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Digite a Sobreposição de Chunk",
"Enter Chunk Size": "Digite o Tamanho do Chunk",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "Digite a descrição",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "Documento PDF (.pdf)",
"PDF Extract Images (OCR)": "Extrair Imagens do PDF (OCR)",
"pending": "pendente",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Permissão negada ao acessar dispositivos de mídia",
"Permission denied when accessing microphone": "Permissão negada ao acessar o microfone",
"Permission denied when accessing microphone: {{error}}": "Permissão negada ao acessar o microfone: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} apagado",
"Deleted {{name}}": "Apagado {{name}}",
"Deleted User": "",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "",
"Description": "Descrição",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Confirme que o seu ficheiro CSV inclui 4 colunas nesta ordem: Nome, E-mail, Senha, Função.",
"Enter {{role}} message here": "Escreva a mensagem de {{role}} aqui",
"Enter a detail about yourself for your LLMs to recall": "Escreva um detalhe sobre você para que os seus LLMs possam lembrar-se",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "",
"Enter Application DN": "",
"Enter Application DN Password": "",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Escreva a Sobreposição de Fragmento",
"Enter Chunk Size": "Escreva o Tamanho do Fragmento",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "Documento PDF (.pdf)",
"PDF Extract Images (OCR)": "Extrair Imagens de PDF (OCR)",
"pending": "pendente",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "A permissão foi negada ao aceder aos dispositivos de media",
"Permission denied when accessing microphone": "A permissão foi negada ao aceder ao microfone",
"Permission denied when accessing microphone: {{error}}": "A permissão foi negada ao aceder o microfone: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} șters",
"Deleted {{name}}": "{{name}} șters",
"Deleted User": "",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "",
"Description": "Descriere",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Asigurați-vă că fișierul CSV include 4 coloane în această ordine: Nume, Email, Parolă, Rol.",
"Enter {{role}} message here": "Introduceți mesajul pentru {{role}} aici",
"Enter a detail about yourself for your LLMs to recall": "Introduceți un detaliu despre dvs. pe care LLM-urile să-l rețină",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Introduceți șirul de autentificare API (de ex. username:password)",
"Enter Application DN": "",
"Enter Application DN Password": "",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Introduceți Suprapunerea Blocului",
"Enter Chunk Size": "Introduceți Dimensiunea Blocului",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "Introduceți descrierea",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "Document PDF (.pdf)",
"PDF Extract Images (OCR)": "Extrage Imagini PDF (OCR)",
"pending": "în așteptare",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Permisiunea refuzată la accesarea dispozitivelor media",
"Permission denied when accessing microphone": "Permisiunea refuzată la accesarea microfonului",
"Permission denied when accessing microphone: {{error}}": "Permisiunea refuzată la accesarea microfonului: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "Удалено {{deleteModelTag}}",
"Deleted {{name}}": "Удалено {{name}}",
"Deleted User": "Удалённый пользователь",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "Опишите свою базу знаний и цели",
"Description": "Описание",
"Detect Artifacts Automatically": "Автоматическое обнаружение артефактов",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Убедитесь, что ваш CSV-файл включает в себя 4 столбца в следующем порядке: Имя, Электронная почта, Пароль, Роль.",
"Enter {{role}} message here": "Введите сообщение {{role}} здесь",
"Enter a detail about yourself for your LLMs to recall": "Введите детали о себе, чтобы LLMs могли запомнить",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Введите строку авторизации api (например, username:password)",
"Enter Application DN": "Введите ND приложения",
"Enter Application DN Password": "Введите пароль DN приложения",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Введите перекрытие фрагмента",
"Enter Chunk Size": "Введите размер фрагмента",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "Введите пары \"token:bias_value\", разделенные запятыми (пример: 5432:100, 413:-100).",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "Введите описание",
"Enter Docling OCR Engine": "Введите Docling OCR Engine",
"Enter Docling OCR Language(s)": "Введите языки для Docling OCR",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF-документ (.pdf)",
"PDF Extract Images (OCR)": "Извлечение изображений из PDF (OCR)",
"pending": "ожидающий",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Отказано в разрешении на доступ к мультимедийным устройствам",
"Permission denied when accessing microphone": "Отказано в разрешении на доступ к микрофону",
"Permission denied when accessing microphone: {{error}}": "Отказано в разрешении на доступ к микрофону: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "Odstránené {{deleteModelTag}}",
"Deleted {{name}}": "Odstránené {{name}}",
"Deleted User": "",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "",
"Description": "Popis",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Uistite sa, že váš CSV súbor obsahuje 4 stĺpce v tomto poradí: Name, Email, Password, Role.",
"Enter {{role}} message here": "Zadajte správu {{role}} sem",
"Enter a detail about yourself for your LLMs to recall": "Zadajte podrobnosť o sebe, ktorú si vaše LLM majú zapamätať.",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Zadajte autentifikačný reťazec API (napr. užívateľské_meno:heslo)",
"Enter Application DN": "",
"Enter Application DN Password": "",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Zadajte prekryv časti",
"Enter Chunk Size": "Zadajte veľkosť časti",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "Zadajte popis",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF dokument (.pdf)",
"PDF Extract Images (OCR)": "Extrahovanie obrázkov z PDF (OCR)",
"pending": "čaká na vybavenie",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Odmietnutie povolenia pri prístupe k mediálnym zariadeniam",
"Permission denied when accessing microphone": "Prístup k mikrofónu bol zamietnutý",
"Permission denied when accessing microphone: {{error}}": "Oprávnenie zamietnuté pri prístupe k mikrofónu: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "Обрисано {{deleteModelTag}}",
"Deleted {{name}}": "Избрисано {{наме}}",
"Deleted User": "Обрисани корисници",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "Опишите вашу базу знања и циљеве",
"Description": "Опис",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Уверите се да ваша CSV датотека укључује 4 колоне у овом редоследу: Име, Е-пошта, Лозинка, Улога.",
"Enter {{role}} message here": "Унесите {{role}} поруку овде",
"Enter a detail about yourself for your LLMs to recall": "Унесите детаље за себе да ће LLMs преузимати",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "",
"Enter Application DN": "",
"Enter Application DN Password": "",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Унесите преклапање делова",
"Enter Chunk Size": "Унесите величину дела",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF документ (.pdf)",
"PDF Extract Images (OCR)": "Извлачење PDF слика (OCR)",
"pending": "на чекању",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Приступ медијским уређајима одбијен",
"Permission denied when accessing microphone": "Приступ микрофону је одбијен",
"Permission denied when accessing microphone: {{error}}": "Приступ микрофону је одбијен: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "Raderad {{deleteModelTag}}",
"Deleted {{name}}": "Borttagen {{name}}",
"Deleted User": "",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "",
"Description": "Beskrivning",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Se till att din CSV-fil innehåller fyra kolumner i denna ordning: Name, Email, Password, Role.",
"Enter {{role}} message here": "Skriv {{role}} meddelande här",
"Enter a detail about yourself for your LLMs to recall": "Skriv en detalj om dig själv för att dina LLMs ska komma ihåg",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "",
"Enter Application DN": "",
"Enter Application DN Password": "",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Ange chunköverlappning",
"Enter Chunk Size": "Ange chunkstorlek",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF-dokument (.pdf)",
"PDF Extract Images (OCR)": "PDF Extrahera bilder (OCR)",
"pending": "väntande",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Nekad behörighet vid åtkomst till mediaenheter",
"Permission denied when accessing microphone": "Nekad behörighet vid åtkomst till mikrofon",
"Permission denied when accessing microphone: {{error}}": "Tillstånd nekades vid åtkomst till mikrofon: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "ลบ {{deleteModelTag}}",
"Deleted {{name}}": "ลบ {{name}}",
"Deleted User": "",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "",
"Description": "คำอธิบาย",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "ตรวจสอบว่าไฟล์ CSV ของคุณมี 4 คอลัมน์ในลำดับนี้: ชื่อ, อีเมล, รหัสผ่าน, บทบาท",
"Enter {{role}} message here": "ใส่ข้อความ {{role}} ที่นี่",
"Enter a detail about yourself for your LLMs to recall": "ใส่รายละเอียดเกี่ยวกับตัวคุณสำหรับ LLMs ของคุณให้จดจำ",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "ใส่สตริงการตรวจสอบ API (เช่น username:password)",
"Enter Application DN": "",
"Enter Application DN Password": "",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "ใส่การทับซ้อนส่วนข้อมูล",
"Enter Chunk Size": "ใส่ขนาดส่วนข้อมูล",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "เอกสาร PDF (.pdf)",
"PDF Extract Images (OCR)": "การแยกรูปภาพจาก PDF (OCR)",
"pending": "รอดำเนินการ",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "ถูกปฏิเสธเมื่อเข้าถึงอุปกรณ์",
"Permission denied when accessing microphone": "ถูกปฏิเสธเมื่อเข้าถึงไมโครโฟน",
"Permission denied when accessing microphone: {{error}}": "การอนุญาตถูกปฏิเสธเมื่อเข้าถึงไมโครโฟน: {{error}}",

View File

@ -125,6 +125,8 @@
"Current Model": "Häzirki Model",
"Current Password": "Häzirki Parol",
"Custom": "Özboluşly",
"Custom Account Pending Text": "",
"Custom Account Pending Title": "",
"Customize models for a specific purpose": "Anyk maksat üçin modelleri düzmek",
"Dark": "Garaňky",
"Database": "Mazada",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "",
"Deleted {{name}}": "",
"Deleted User": "",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "",
"Description": "",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
"Enter {{role}} message here": "",
"Enter a detail about yourself for your LLMs to recall": "",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "",
"Enter Application DN": "",
"Enter Application DN Password": "",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "",
"Enter Chunk Size": "",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "",
"PDF Extract Images (OCR)": "",
"pending": "",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "",
"Permission denied when accessing microphone": "",
"Permission denied when accessing microphone: {{error}}": "",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} silindi",
"Deleted {{name}}": "{{name}} silindi",
"Deleted User": "Kullanıcı Silindi",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "Bilgi tabanınızı ve hedeflerinizi açıklayın",
"Description": "Açıklama",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "CSV dosyanızın şu sırayla 4 sütun içerdiğinden emin olun: İsim, E-posta, Şifre, Rol.",
"Enter {{role}} message here": "Buraya {{role}} mesajını girin",
"Enter a detail about yourself for your LLMs to recall": "LLM'lerinizin hatırlaması için kendiniz hakkında bir bilgi girin",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Api auth dizesini girin (örn. kullanıcı adı:parola)",
"Enter Application DN": "Uygulama DN'sini Girin",
"Enter Application DN Password": "Uygulama DN Parolasını Girin",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Chunk Örtüşmesini Girin",
"Enter Chunk Size": "Chunk Boyutunu Girin",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "Açıklama girin",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF belgesi (.pdf)",
"PDF Extract Images (OCR)": "PDF Görüntülerini Çıkart (OCR)",
"pending": "beklemede",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Medya cihazlarına erişim izni reddedildi",
"Permission denied when accessing microphone": "Mikrofona erişim izni reddedildi",
"Permission denied when accessing microphone: {{error}}": "Mikrofona erişim izni reddedildi: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "Видалено {{deleteModelTag}}",
"Deleted {{name}}": "Видалено {{name}}",
"Deleted User": "Видалений користувач",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "Опишіть вашу базу знань та цілі",
"Description": "Опис",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Переконайтеся, що ваш CSV-файл містить 4 колонки в такому порядку: Ім'я, Email, Пароль, Роль.",
"Enter {{role}} message here": "Введіть повідомлення {{role}} тут",
"Enter a detail about yourself for your LLMs to recall": "Введіть відомості про себе для запам'ятовування вашими LLM.",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Введіть рядок авторизації api (напр, ім'я користувача:пароль)",
"Enter Application DN": "Введіть DN застосунку",
"Enter Application DN Password": "Введіть пароль DN застосунку",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Введіть перекриття фрагменту",
"Enter Chunk Size": "Введіть розмір фрагменту",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "Введіть пари \"токен:значення_зміщення\", розділені комами (напр.: 5432:100, 413:-100)",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "Введіть опис",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF документ (.pdf)",
"PDF Extract Images (OCR)": "Розпізнавання зображень з PDF (OCR)",
"pending": "на розгляді",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Відмовлено в доступі до медіапристроїв",
"Permission denied when accessing microphone": "Відмовлено у доступі до мікрофона",
"Permission denied when accessing microphone: {{error}}": "Доступ до мікрофона заборонено: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} حذف کر دیا گیا",
"Deleted {{name}}": "حذف کر دیا گیا {{name}}",
"Deleted User": "",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "",
"Description": "تفصیل",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "یقینی بنائیں کہ آپ کی CSV فائل میں 4 کالم اس ترتیب میں شامل ہوں: نام، ای میل، پاس ورڈ، کردار",
"Enter {{role}} message here": "یہاں {{کردار}} پیغام درج کریں",
"Enter a detail about yourself for your LLMs to recall": "اپنی ذات کے بارے میں کوئی تفصیل درج کریں تاکہ آپ کے LLMs اسے یاد رکھ سکیں",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "اے پی آئی اتھ سٹرنگ درج کریں (مثال کے طور پر: صارف نام:پاس ورڈ)",
"Enter Application DN": "",
"Enter Application DN Password": "",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "چنک اوورلیپ درج کریں",
"Enter Chunk Size": "چنک سائز درج کریں",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "تفصیل درج کریں",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "پی ڈی ایف دستاویز (.pdf)",
"PDF Extract Images (OCR)": "پی ڈی ایف سے تصاویر نکالیں (او سی آر)",
"pending": "زیر التواء",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "میڈیا آلات تک رسائی کے وقت اجازت مسترد کر دی گئی",
"Permission denied when accessing microphone": "مائیکروفون تک رسائی کی اجازت نہیں دی گئی",
"Permission denied when accessing microphone: {{error}}": "مائیکروفون تک رسائی کے دوران اجازت مسترد: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "Đã xóa {{deleteModelTag}}",
"Deleted {{name}}": "Đã xóa {{name}}",
"Deleted User": "Người dùng đã xóa",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "Mô tả cơ sở kiến thức và mục tiêu của bạn",
"Description": "Mô tả",
"Detect Artifacts Automatically": "",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Đảm bảo tệp CSV của bạn bao gồm 4 cột theo thứ tự sau: Name, Email, Password, Role.",
"Enter {{role}} message here": "Nhập yêu cầu của {{role}} ở đây",
"Enter a detail about yourself for your LLMs to recall": "Nhập chi tiết về bản thân của bạn để LLMs có thể nhớ",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "Nhập chuỗi xác thực api (ví dụ: username: mật khẩu)",
"Enter Application DN": "Nhập DN Ứng dụng",
"Enter Application DN Password": "Nhập Mật khẩu DN Ứng dụng",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "Nhập Chunk chồng lấn (overlap)",
"Enter Chunk Size": "Nhập Kích thước Chunk",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "Nhập các cặp \"token:giá_trị_bias\" được phân tách bằng dấu phẩy (ví dụ: 5432:100, 413:-100)",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "Nhập mô tả",
"Enter Docling OCR Engine": "",
"Enter Docling OCR Language(s)": "",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "Tập tin PDF (.pdf)",
"PDF Extract Images (OCR)": "Trích xuất ảnh từ PDF (OCR)",
"pending": "đang chờ phê duyệt",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "Quyền truy cập các thiết bị đa phương tiện bị từ chối",
"Permission denied when accessing microphone": "Quyền truy cập micrô bị từ chối",
"Permission denied when accessing microphone: {{error}}": "Quyền truy cập micrô bị từ chối: {{error}}",

View File

@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "已删除 {{deleteModelTag}}",
"Deleted {{name}}": "已删除 {{name}}",
"Deleted User": "已删除用户",
"Describe Pictures in Documents": "",
"Describe your knowledge base and objectives": "描述您的知识库和目标",
"Description": "描述",
"Detect Artifacts Automatically": "自动检测 Artifacts",
@ -410,6 +411,7 @@
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "确保您的 CSV 文件按以下顺序包含 4 列: 姓名、电子邮箱、密码、角色。",
"Enter {{role}} message here": "在此处输入 {{role}} 的对话内容",
"Enter a detail about yourself for your LLMs to recall": "输入一个关于你自己的详细信息,方便你的大语言模型记住这些内容",
"Enter a title for the pending user info overlay. Leave empty for default.": "",
"Enter api auth string (e.g. username:password)": "输入 api 鉴权路径 (例如:用户名:密码)",
"Enter Application DN": "输入 Application DN",
"Enter Application DN Password": "输入 Application DN 密码",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "输入块重叠 (Chunk Overlap)",
"Enter Chunk Size": "输入块大小 (Chunk Size)",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "输入以逗号分隔的“token:bias_value”对例如5432:100, 413:-100",
"Enter content for the pending user info overlay. Leave empty for default.": "",
"Enter description": "输入简介描述",
"Enter Docling OCR Engine": "输入 Docling OCR Engine",
"Enter Docling OCR Language(s)": "输入 Docling OCR 语言",
@ -881,6 +884,8 @@
"PDF document (.pdf)": "PDF 文档 (.pdf)",
"PDF Extract Images (OCR)": "PDF 图像处理 (使用 OCR)",
"pending": "待激活",
"Pending User Overlay Content": "",
"Pending User Overlay Title": "",
"Permission denied when accessing media devices": "申请媒体设备权限被拒绝",
"Permission denied when accessing microphone": "申请麦克风权限被拒绝",
"Permission denied when accessing microphone: {{error}}": "申请麦克风权限被拒绝:{{error}}",

View File

@ -4,7 +4,7 @@
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(例如:`sh webui.sh --api --api-auth username_password`",
"(e.g. `sh webui.sh --api`)": "(例如:`sh webui.sh --api`",
"(latest)": "(最新版)",
"(leave blank for to use commercial endpoint)": "",
"(leave blank for to use commercial endpoint)": "(留空以使用商業端點)",
"(Ollama)": "(Ollama)",
"{{ models }}": "{{ models }}",
"{{COUNT}} Available Tools": "{{COUNT}} 個可用工具",
@ -13,8 +13,8 @@
"{{user}}'s Chats": "{{user}} 的對話",
"{{webUIName}} Backend Required": "需要 {{webUIName}} 後端",
"*Prompt node ID(s) are required for image generation": "* 圖片生成需要提示詞節點 ID",
"A new version (v{{LATEST_VERSION}}) is now available.": "新版本 (v{{LATEST_VERSION}}) 已釋出。",
"A task model is used when performing tasks such as generating titles for chats and web search queries": "執行產生對話標題和網頁搜尋查詢等任務時會使用任務模型",
"A new version (v{{LATEST_VERSION}}) is now available.": "新版本 (v{{LATEST_VERSION}}) 已釋出。",
"A task model is used when performing tasks such as generating titles for chats and web search queries": "執行「對話標題生成」和「網頁搜尋查詢生成」等任務時使用的任務模型",
"a user": "使用者",
"About": "關於",
"Accept autocomplete generation / Jump to prompt variable": "接受自動完成生成/跳轉至提示變數",
@ -56,7 +56,7 @@
"Advanced Parameters": "進階參數",
"Advanced Params": "進階參數",
"All": "全部",
"All Documents": "所有文件",
"All Documents": "所有檔案",
"All models deleted successfully": "成功刪除所有模型",
"Allow Call": "允許通話",
"Allow Chat Controls": "允許控制對話",
@ -83,12 +83,12 @@
"Amazing": "很棒",
"an assistant": "助理",
"Analyzed": "分析完畢",
"Analyzing...": "分析……",
"Analyzing...": "正在分析……",
"and": "和",
"and {{COUNT}} more": "和另外 {{COUNT}} 個",
"and create a new shared link.": "並建立新的共用連結。",
"Android": "Android",
"API Base URL": "API 基礎 URL",
"API Base URL": "API Base URL",
"API Key": "API 金鑰",
"API Key created.": "API 金鑰已建立。",
"API Key Endpoint Restrictions": "API 金鑰端點限制",
@ -128,8 +128,8 @@
"Autocomplete Generation Input Max Length": "自動完成輸入最大長度",
"Automatic1111": "Automatic1111",
"AUTOMATIC1111 Api Auth String": "AUTOMATIC1111 API 驗證字串",
"AUTOMATIC1111 Base URL": "AUTOMATIC1111 基礎 URL",
"AUTOMATIC1111 Base URL is required.": "需要 AUTOMATIC1111 基礎 URL。",
"AUTOMATIC1111 Base URL": "AUTOMATIC1111 Base URL",
"AUTOMATIC1111 Base URL is required.": "需要 AUTOMATIC1111 Base URL。",
"Available list": "可用清單",
"Available Tools": "可用工具",
"available!": "可用!",
@ -174,12 +174,12 @@
"Chat direction": "對話方向",
"Chat Overview": "對話概覽",
"Chat Permissions": "對話權限",
"Chat Tags Auto-Generation": "自動生對話標籤",
"Chat Tags Auto-Generation": "自動對話標籤",
"Chats": "對話",
"Check Again": "再次檢查",
"Check for updates": "檢查更新",
"Checking for updates...": "正在檢查更新...",
"Choose a model before saving...": "儲存前請選擇一個模型...",
"Checking for updates...": "正在檢查更新……",
"Choose a model before saving...": "儲存前請選擇一個模型……",
"Chunk Overlap": "區塊重疊",
"Chunk Size": "區塊大小",
"Ciphers": "加密方式",
@ -217,8 +217,8 @@
"Color": "顏色",
"ComfyUI": "ComfyUI",
"ComfyUI API Key": "ComfyUI API 金鑰",
"ComfyUI Base URL": "ComfyUI 基礎 URL",
"ComfyUI Base URL is required.": "需要 ComfyUI 基礎 URL。",
"ComfyUI Base URL": "ComfyUI Base URL",
"ComfyUI Base URL is required.": "需要 ComfyUI Base URL。",
"ComfyUI Workflow": "ComfyUI 工作流程",
"ComfyUI Workflow Nodes": "ComfyUI 工作流程節點",
"Command": "命令",
@ -247,7 +247,7 @@
"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.": "控制文字轉語音TTS請求中如何分割訊息文字。「標點符號」分割為句子「段落」分割為段落「無」則保持訊息為單一字串。",
"Control the repetition of token sequences in the generated text. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 1.1) will be more lenient. At 1, it is disabled.": "控制生成文字中 token 序列的重複程度。較高的值例如1.5會更強烈地懲罰重複而較低的值例如1.1)會更寬容。設為 1 時,此功能將停用。",
"Controls": "控制選項",
"Controls the balance between coherence and diversity of the output. A lower value will result in more focused and coherent text.": "控制輸出結果的連貫性與多樣性之間的平衡。數值越低會生更集中且連貫的文字。",
"Controls the balance between coherence and diversity of the output. A lower value will result in more focused and coherent text.": "控制輸出結果的連貫性與多樣性之間的平衡。數值越低會更集中且連貫的文字。",
"Copied": "已複製",
"Copied shared chat URL to clipboard!": "已複製共用對話 URL 到剪貼簿!",
"Copied to clipboard": "已複製到剪貼簿",
@ -316,6 +316,7 @@
"Deleted {{deleteModelTag}}": "已刪除 {{deleteModelTag}}",
"Deleted {{name}}": "已刪除 {{name}}",
"Deleted User": "刪除使用者?",
"Describe Pictures in Documents": "檔案中的圖片描述",
"Describe your knowledge base and objectives": "描述您的知識庫和目標",
"Description": "描述",
"Detect Artifacts Automatically": "自動偵測 Artifacts",
@ -346,11 +347,11 @@
"Do not install tools from sources you do not fully trust.": "請勿從您無法完全信任的來源安裝工具。",
"Docling": "Docling",
"Docling Server URL required.": "Docling 伺服器 URL 為必填。",
"Document": "文件",
"Document": "檔案",
"Document Intelligence": "Document Intelligence",
"Document Intelligence endpoint and key required.": "需提供 Document Intelligence 端點及金鑰",
"Documentation": "文件",
"Documents": "文件",
"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?": "還沒註冊帳號嗎?",
@ -376,7 +377,7 @@
"e.g. Tools for performing various operations": "例如:用於執行各種操作的工具",
"e.g., 3, 4, 5 (leave blank for default)": "例如3、4、5留空使用預設值",
"e.g., en-US,ja-JP (leave blank for auto-detect)": "例如en-US, ja-JP留空以自動偵測",
"e.g., westus (leave blank for eastus)": "",
"e.g., westus (leave blank for eastus)": "例如westus留空則使用 eastus",
"Edit": "編輯",
"Edit Arena Model": "編輯競技場模型",
"Edit Channel": "編輯頻道",
@ -404,12 +405,13 @@
"Enable Mirostat sampling for controlling perplexity.": "啟用 Mirostat 取樣以控制 perplexity。",
"Enable New Sign Ups": "允許新使用者註冊",
"Enabled": "已啟用",
"Endpoint URL": "",
"Endpoint URL": "端點 URL",
"Enforce Temporary Chat": "強制使用臨時對話",
"Enhance": "增強",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "請確認您的 CSV 檔案包含以下 4 個欄位,並按照此順序排列:姓名、電子郵件、密碼、角色。",
"Enter {{role}} message here": "在此輸入 {{role}} 訊息",
"Enter a detail about yourself for your LLMs to recall": "輸入有關您的詳細資訊,讓您的大型語言模型可以回想起來",
"Enter a title for the pending user info overlay. Leave empty for default.": "為待處理的使用者訊息覆蓋層輸入標題。留空以使用預設值。",
"Enter api auth string (e.g. username:password)": "輸入 API 驗證字串例如username:password",
"Enter Application DN": "輸入應用程式 DN",
"Enter Application DN Password": "輸入應用程式 DN 密碼",
@ -422,6 +424,7 @@
"Enter Chunk Overlap": "輸入區塊重疊",
"Enter Chunk Size": "輸入區塊大小",
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "輸入逗號分隔的 \"token:bias_value\" 配對 (範例5432:100, 413:-100)",
"Enter content for the pending user info overlay. Leave empty for default.": "為待處理的使用者訊息覆蓋層輸入內容。留空以使用預設值。",
"Enter description": "輸入描述",
"Enter Docling OCR Engine": "輸入 Docling OCR 引擎",
"Enter Docling OCR Language(s)": "輸入 Docling OCR 語言",
@ -434,7 +437,7 @@
"Enter External Web Loader URL": "輸入外部網頁載入器 URL",
"Enter External Web Search API Key": "輸入外部網路搜尋 API 金鑰",
"Enter External Web Search URL": "輸入外部網路搜尋 URL",
"Enter Firecrawl API Base URL": "輸入 Firecrawl API 基礎 URL",
"Enter Firecrawl API Base URL": "輸入 Firecrawl API Base URL",
"Enter Firecrawl API Key": "輸入 Firecrawl API 金鑰",
"Enter Github Raw URL": "輸入 GitHub Raw URL",
"Enter Google PSE API Key": "輸入 Google PSE API 金鑰",
@ -480,7 +483,7 @@
"Enter system prompt here": "在此輸入系統提示詞",
"Enter Tavily API Key": "輸入 Tavily API 金鑰",
"Enter Tavily Extract Depth": "輸入 Tavily 提取深度",
"Enter the public URL of your WebUI. This URL will be used to generate links in the notifications.": "請輸入您 WebUI 的公開 URL。此 URL 將用於在通知中生連結。",
"Enter the public URL of your WebUI. This URL will be used to generate links in the notifications.": "請輸入您 WebUI 的公開 URL。此 URL 將用於在通知中連結。",
"Enter Tika Server URL": "輸入 Tika 伺服器 URL",
"Enter timeout in seconds": "請以秒為單位輸入超時時間",
"Enter to Send": "使用 Enter 傳送",
@ -518,7 +521,7 @@
"Exceeded the number of seats in your license. Please contact support to increase the number of seats.": "您的授權名額已超過上限。請聯絡支援以增加授權名額。",
"Exclude": "排除",
"Execute code for analysis": "執行程式碼以進行分析",
"Executing **{{NAME}}**...": "正在執行 **{{NAME}}**...",
"Executing **{{NAME}}**...": "正在執行 **{{NAME}}** ……",
"Expand": "展開",
"Experimental": "實驗性功能",
"Explain": "解釋",
@ -563,7 +566,7 @@
"File added successfully.": "檔案新增成功。",
"File content updated successfully.": "檔案內容更新成功。",
"File Mode": "檔案模式",
"File not found.": "到檔案。",
"File not found.": "找到檔案。",
"File removed successfully.": "成功移除檔案。",
"File size should not exceed {{maxSize}} MB.": "檔案大小不應超過 {{maxSize}} MB。",
"File uploaded successfully": "檔案上傳成功",
@ -572,7 +575,7 @@
"Filter is now globally enabled": "篩選器現在已全域啟用",
"Filters": "篩選器",
"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "偵測到指紋偽造:無法使用姓名縮寫作為大頭貼。將預設為預設個人檔案圖片。",
"Firecrawl API Base URL": "Firecrawl API 基礎 URL",
"Firecrawl API Base URL": "Firecrawl API Base URL",
"Firecrawl API Key": "Firecrawl API 金鑰",
"Fluidly stream large external response chunks": "流暢地串流大型外部回應區塊",
"Focus chat input": "聚焦對話輸入",
@ -603,12 +606,12 @@
"Gemini API Config": "Gemini API 設定",
"Gemini API Key is required.": "必須提供 Gemini API 金鑰",
"General": "一般",
"Generate": "生",
"Generate an image": "生圖片",
"Generate Image": "生圖片",
"Generate prompt pair": "生提示配對",
"Generating search query": "正在生搜尋查詢",
"Generating...": "",
"Generate": "",
"Generate an image": "圖片",
"Generate Image": "圖片",
"Generate prompt pair": "提示配對",
"Generating search query": "正在搜尋查詢",
"Generating...": "正在生成……",
"Get started": "開始使用",
"Get started with {{WEBUI_NAME}}": "開始使用 {{WEBUI_NAME}}",
"Global": "全域",
@ -671,8 +674,8 @@
"Integration": "整合",
"Interface": "介面",
"Invalid file content": "檔案內容無效",
"Invalid file format.": "無效檔案格式。",
"Invalid JSON schema": "無效的 JSON schema",
"Invalid file format.": "檔案格式無效。",
"Invalid JSON schema": "JSON Schema 無效",
"Invalid Tag": "無效標籤",
"is typing...": "正在輸入……",
"January": "1 月",
@ -718,7 +721,7 @@
"Leave model field empty to use the default model.": "留空模型欄位以使用預設模型。",
"License": "授權",
"Light": "淺色",
"Listening...": "正在聆聽...",
"Listening...": "正在聆聽……",
"Llama.cpp": "Llama.cpp",
"LLMs can make mistakes. Verify important information.": "大型語言模型可能會犯錯。請自行驗證重要資訊。",
"Loader": "載入工具",
@ -747,7 +750,7 @@
"Max Upload Size": "最大上傳大小",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "最多可同時下載 3 個模型。請稍後再試。",
"May": "5 月",
"Memories accessible by LLMs will be shown here.": "可被大型語言模型存取的記憶將顯示在這裡。",
"Memories accessible by LLMs will be shown here.": "可被大型語言模型存取的記憶將顯示在。",
"Memory": "記憶",
"Memory added successfully": "成功新增記憶",
"Memory cleared successfully": "成功清除記憶",
@ -759,7 +762,7 @@
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "建立連結後傳送的訊息不會被分享。擁有網址的使用者可檢視分享的對話內容。",
"Microsoft OneDrive": "Microsoft OneDrive",
"Microsoft OneDrive (personal)": "Microsoft OneDrive個人版",
"Microsoft OneDrive (work/school)": "Microsoft OneDrive公司版/學校版)",
"Microsoft OneDrive (work/school)": "Microsoft OneDrive公司版學校版)",
"Min P": "最小 P 值",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -769,7 +772,7 @@
"Model": "模型",
"Model '{{modelName}}' has been successfully downloaded.": "模型「{{modelName}}」已成功下載。",
"Model '{{modelTag}}' is already in queue for downloading.": "模型「{{modelTag}}」已在下載佇列中。",
"Model {{modelId}} not found": "到模型 {{modelId}}",
"Model {{modelId}} not found": "找到模型 {{modelId}}",
"Model {{modelName}} is not vision capable": "模型 {{modelName}} 不具備視覺能力",
"Model {{name}} is now {{status}}": "模型 {{name}} 現在狀態為 {{status}}",
"Model {{name}} is now hidden": "模型 {{name}} 已隱藏",
@ -803,31 +806,31 @@
"New Password": "新密碼",
"new-channel": "new-channel",
"No content": "無內容",
"No content found": "到內容",
"No content found in file.": "檔案中到內容。",
"No content found": "找到內容",
"No content found in file.": "檔案中找到內容。",
"No content to speak": "無可朗讀的內容",
"No distance available": "無可用距離",
"No feedbacks found": "到回饋",
"No feedbacks found": "找到回饋",
"No file selected": "未選取檔案",
"No groups with access, add a group to grant access": "沒有具有存取權限的群組,新增群組以授予存取權限",
"No HTML, CSS, or JavaScript content found.": "到 HTML、CSS 或 JavaScript 內容。",
"No inference engine with management support found": "到支援管理功能的推理引擎",
"No knowledge found": "到知識",
"No HTML, CSS, or JavaScript content found.": "找到 HTML、CSS 或 JavaScript 內容。",
"No inference engine with management support found": "找到支援管理功能的推理引擎",
"No knowledge found": "找到知識",
"No memories to clear": "沒有記憶可清除",
"No model IDs": "沒有任何模型 ID",
"No models found": "到模型",
"No model IDs": "沒有模型 ID",
"No models found": "找到模型",
"No models selected": "未選取模型",
"No Notes": "尚無筆記",
"No results found": "到任何結果",
"No search query generated": "未生搜尋查詢",
"No results found": "找到任何結果",
"No search query generated": "未搜尋查詢",
"No source available": "無可用源",
"No users were found.": "到任何使用者",
"No users were found.": "找到任何使用者",
"No valves to update": "無閥門可更新",
"None": "無",
"Not factually correct": "與事實不符",
"Not helpful": "沒有幫助",
"Note deleted successfully": "筆記已成功刪除",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "注意:如果您設定了最低分數,則搜尋只會回傳分數大於或等於最低分數的文件。",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "注意:如果您設定了最低分數,則搜尋只會回傳分數大於或等於最低分數的檔案。",
"Notes": "筆記",
"Notification Sound": "通知聲音",
"Notification Webhook": "通知 Webhook",
@ -848,7 +851,7 @@
"OneDrive": "OneDrive",
"Only alphanumeric characters and hyphens are allowed": "只允許使用英文字母、數字和連字號",
"Only alphanumeric characters and hyphens are allowed in the command string.": "命令字串中只允許使用英文字母、數字和連字號。",
"Only collections can be edited, create a new knowledge base to edit/add documents.": "只能編輯集合,請建立新的知識以編輯或新增文件。",
"Only collections can be edited, create a new knowledge base to edit/add documents.": "只能編輯集合,請建立新的知識以編輯或新增檔案。",
"Only markdown files are allowed": "僅允許 Markdown 檔案",
"Only select users and groups with permission can access": "只有具有權限的選定使用者和群組可以存取",
"Oops! Looks like the URL is invalid. Please double-check and try again.": "哎呀!這個 URL 似乎無效。請仔細檢查並再試一次。",
@ -878,9 +881,11 @@
"page": "頁面",
"Password": "密碼",
"Paste Large Text as File": "將大型文字以檔案貼上",
"PDF document (.pdf)": "PDF 文件 (.pdf)",
"PDF document (.pdf)": "PDF 檔案 (.pdf)",
"PDF Extract Images (OCR)": "PDF 影像擷取OCR 光學文字辨識)",
"pending": "待處理",
"Pending User Overlay Content": "待處理的使用者訊息覆蓋層內容",
"Pending User Overlay Title": "待處理的使用者訊息覆蓋層標題",
"Permission denied when accessing media devices": "存取媒體裝置時權限遭拒",
"Permission denied when accessing microphone": "存取麥克風時權限遭拒",
"Permission denied when accessing microphone: {{error}}": "存取麥克風時權限遭拒:{{error}}",
@ -941,11 +946,11 @@
"Record": "錄製",
"Record voice": "錄音",
"Redirecting you to Open WebUI Community": "正在將您重導向至 Open WebUI 社群",
"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.": "降低生無意義內容的機率。較高的值例如100生更多樣化的答案而較低的值例如10會更保守。",
"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.": "降低無意義內容的機率。較高的值例如100會生更多樣化的答案而較低的值例如10會更保守。",
"Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "以「使用者」稱呼自己(例如:「使用者正在學習西班牙文」)",
"References from": "引用來源",
"Refused when it shouldn't have": "不應拒絕時拒絕了",
"Regenerate": "重新生",
"Regenerate": "重新",
"Reindex": "重新索引",
"Reindex Knowledge Base Vectors": "重新索引知識庫向量",
"Release Notes": "釋出説明",
@ -959,7 +964,7 @@
"Repeat Penalty (Ollama)": "重複懲罰 (Ollama)",
"Reply in Thread": "在討論串中回覆",
"Request Mode": "請求模式",
"Reranking Engine": "",
"Reranking Engine": "重新排序引擎",
"Reranking Model": "重新排序模型",
"Reset": "重設",
"Reset All Models": "重設所有模型",
@ -978,7 +983,7 @@
"Rosé Pine Dawn": "黎明玫瑰松",
"RTL": "從右到左",
"Run": "執行",
"Running": "運作中",
"Running": "正在執行",
"Save": "儲存",
"Save & Create": "儲存並建立",
"Save & Update": "儲存並更新",
@ -1068,8 +1073,8 @@
"Show": "顯示",
"Show \"What's New\" modal on login": "登入時顯示「新功能」對話框",
"Show Admin Details in Account Pending Overlay": "在帳號待審覆蓋層中顯示管理員詳細資訊",
"Show All": "",
"Show Less": "",
"Show All": "顯示全部",
"Show Less": "顯示較少",
"Show Model": "顯示模型",
"Show shortcuts": "顯示快捷鍵",
"Show your support!": "表達您的支持!",
@ -1093,7 +1098,7 @@
"Stream Chat Response": "串流式對話回應",
"STT Model": "語音轉文字 (STT) 模型",
"STT Settings": "語音轉文字 (STT) 設定",
"Stylized PDF Export": "",
"Stylized PDF Export": "風格化 PDF 匯出",
"Subtitle (e.g. about the Roman Empire)": "副標題(例如:關於羅馬帝國)",
"Success": "成功",
"Successfully updated.": "更新成功。",
@ -1140,7 +1145,7 @@
"This chat wont appear in history and your messages will not be saved.": "此對話不會出現在歷史記錄中,且您的訊息將不被儲存。",
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "這確保您寶貴的對話會安全地儲存到您的後端資料庫。謝謝!",
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "這是一個實驗性功能,它可能無法如預期運作,並且可能會隨時變更。",
"This model is not publicly available. Please select another model.": "",
"This model is not publicly available. Please select another 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.": "此選項控制在重新整理上下文時保留多少 token。例如如果設定為 2則會保留對話上下文的最後 2 個 token。保留上下文有助於保持對話的連貫性但也可能降低對新主題的回應能力。",
"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.": "此選項設定模型在其回應中可以生成的最大 token 數量。增加此限制允許模型提供更長的答案,但也可能增加生成無用或不相關內容的可能性。",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "此選項將刪除集合中的所有現有檔案,並用新上傳的檔案取代它們。",
@ -1159,16 +1164,16 @@
"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "提示:在每次替換後按下對話輸入框中的 Tab 鍵,即可連續更新多個變數欄位。",
"Title": "標題",
"Title (e.g. Tell me a fun fact)": "標題(例如:告訴我一個有趣的事實)",
"Title Auto-Generation": "自動生標題",
"Title Auto-Generation": "自動標題",
"Title cannot be an empty string.": "標題不能是空字串。",
"Title Generation": "生標題",
"Title Generation Prompt": "生標題的提示詞",
"Title Generation": "標題",
"Title Generation Prompt": "標題的提示詞",
"TLS": "TLS",
"To access the available model names for downloading,": "若要存取可供下載的模型名稱,",
"To access the GGUF models available for downloading,": "若要存取可供下載的 GGUF 模型,",
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "若要存取 WebUI請聯絡管理員。管理員可以從管理面板管理使用者狀態。",
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "若要在此處附加知識庫,請先將它們新增到「知識」工作區。",
"To learn more about available endpoints, visit our documentation.": "若要進一步了解可用的端點,請參閱我們的文件。",
"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.": "為了保護您的隱私,只會分享您回饋中的評分、模型 ID、標籤和中繼資料 —— 您的對話紀錄仍然是私密的,不會被包含在內。",
"To select actions here, add them to the \"Functions\" workspace first.": "若要在此選擇動作,請先將它們新增到「函式」工作區。",
"To select filters here, add them to the \"Functions\" workspace first.": "若要在此選擇篩選器,請先將它們新增到「函式」工作區。",
@ -1267,14 +1272,14 @@
"Warning": "警告",
"Warning:": "警告:",
"Warning: Enabling this will allow users to upload arbitrary code on the server.": "警告:啟用此功能將允許使用者在伺服器上上傳任意程式碼。",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "警告:如果您更新或更改嵌入模型,您將需要重新匯入所有文件。",
"Warning: Jupyter execution enables arbitrary code execution, posing severe security risks—proceed with extreme caution.": "警告Jupyter 執行允許任意程式碼執行,構成嚴重安全風險——請務必極度謹慎。",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "警告:如果您更新或更改嵌入模型,您將需要重新匯入所有檔案。",
"Warning: Jupyter execution enables arbitrary code execution, posing severe security risks—proceed with extreme caution.": "警告Jupyter 執行允許任意程式碼執行,構成嚴重安全風險 —— 請務必極度謹慎。",
"Web": "網頁",
"Web API": "網頁 API",
"Web Loader Engine": "網頁載入引擎",
"Web Search": "網頁搜尋",
"Web Search Engine": "網頁搜尋引擎",
"Web Search in Chat": "在對話中進行網搜尋",
"Web Search in Chat": "在對話中進行網搜尋",
"Web Search Query Generation": "網頁搜尋查詢生成",
"Webhook URL": "Webhook URL",
"WebUI Settings": "WebUI 設定",
@ -1291,13 +1296,13 @@
"Why?": "為什麼?",
"Widescreen Mode": "寬螢幕模式",
"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.": "與 top-k 一起使用。較高的值例如0.95)將生更多樣化的文字而較低的值例如0.5)將生更集中和保守的文字。",
"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.": "與 top-k 一起使用。較高的值例如0.95)將更多樣化的文字而較低的值例如0.5)將生更集中和保守的文字。",
"Workspace": "工作區",
"Workspace Permissions": "工作區權限",
"Write": "",
"Write": "寫",
"Write a prompt suggestion (e.g. Who are you?)": "撰寫提示詞建議(例如:你是誰?)",
"Write a summary in 50 words that summarizes [topic or keyword].": "用 50 字寫一篇總結 [主題或關鍵字] 的摘要。",
"Write something...": "寫一些什麼...",
"Write something...": "寫一些什麼……",
"Write your model template content here": "在此撰寫您的模型範本內容",
"Yacy Instance URL": "Yacy 實例 URL",
"Yacy Password": "Yacy 密碼",

View File

@ -213,12 +213,17 @@ type Config = {
enable_admin_chat_access: boolean;
enable_community_sharing: boolean;
enable_autocomplete_generation: boolean;
enable_direct_connections: boolean;
};
oauth: {
providers: {
[key: string]: string;
};
};
ui?: {
pending_user_overlay_title?: string;
pending_user_overlay_description?: string;
};
};
type PromptSuggestion = {

View File

@ -49,6 +49,16 @@
import AppSidebar from '$lib/components/app/AppSidebar.svelte';
import { chatCompletion } from '$lib/apis/openai';
import { beforeNavigate } from '$app/navigation';
import { updated } from '$app/state';
// handle frontend updates (https://svelte.dev/docs/kit/configuration#version)
beforeNavigate(({ willUnload, to }) => {
if (updated.current && !willUnload && to?.url) {
location.href = to.url.href;
}
});
setContext('i18n', i18n);
const bc = new BroadcastChannel('active-tab-channel');

View File

@ -1,4 +1,5 @@
import adapter from '@sveltejs/adapter-static';
import * as child_process from 'node:child_process';
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
/** @type {import('@sveltejs/kit').Config} */
@ -14,7 +15,12 @@ const config = {
pages: 'build',
assets: 'build',
fallback: 'index.html'
})
}),
// poll for new version name every 60 seconds (to trigger reload mechanic in +layout.svelte)
version: {
name: child_process.execSync('git rev-parse HEAD').toString().trim(),
pollInterval: 60000
}
},
vitePlugin: {
// inspector: {