Merge branch 'dev' into patch-1

This commit is contained in:
Tim Jaeryang Baek 2025-04-28 05:49:50 -07:00 committed by GitHub
commit 146a08c68f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
125 changed files with 4346 additions and 1958 deletions

View file

@ -73,4 +73,4 @@
### Contributor License Agreement
By submitting this pull request, I confirm that I have read and fully agree to the [CONTRIBUTOR_LICENSE_AGREEMENT](CONTRIBUTOR_LICENSE_AGREEMENT), and I am providing my contributions under its terms.
By submitting this pull request, I confirm that I have read and fully agree to the [Contributor License Agreement (CLA)](/CONTRIBUTOR_LICENSE_AGREEMENT), and I am providing my contributions under its terms.

View file

@ -1,4 +1,4 @@
Copyright (c) 2023-2025 Timothy Jaeryang Baek
Copyright (c) 2023-2025 Timothy Jaeryang Baek (Open WebUI)
All rights reserved.
Redistribution and use in source and binary forms, with or without
@ -15,6 +15,12 @@ modification, are permitted provided that the following conditions are met:
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
4. Notwithstanding any other provision of this License, and as a material condition of the rights granted herein, licensees are strictly prohibited from altering, removing, obscuring, or replacing any "Open WebUI" branding, including but not limited to the name, logo, or any visual, textual, or symbolic identifiers that distinguish the software and its interfaces, in any deployment or distribution, regardless of the number of users, except as explicitly set forth in Clauses 5 and 6 below.
5. The branding restriction enumerated in Clause 4 shall not apply in the following limited circumstances: (i) deployments or distributions where the total number of end users (defined as individual natural persons with direct access to the application) does not exceed fifty (50) within any rolling thirty (30) day period; (ii) cases in which the licensee is an official contributor to the codebase—with a substantive code change successfully merged into the main branch of the official codebase maintained by the copyright holder—who has obtained specific prior written permission for branding adjustment from the copyright holder; or (iii) where the licensee has obtained a duly executed enterprise license expressly permitting such modification. For all other cases, any removal or alteration of the "Open WebUI" branding shall constitute a material breach of license.
6. All code, modifications, or derivative works incorporated into this project prior to the incorporation of this branding clause remain licensed under the BSD 3-Clause License, and prior contributors retain all BSD-3 rights therein; if any such contributor requests the removal of their BSD-3-licensed code, the copyright holder will do so, and any replacement code will be licensed under the project's primary license then in effect. By contributing after this clause's adoption, you agree to the project's Contributor License Agreement (CLA) and to these updated terms for all new contributions.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE

View file

@ -7,7 +7,6 @@
![GitHub language count](https://img.shields.io/github/languages/count/open-webui/open-webui)
![GitHub top language](https://img.shields.io/github/languages/top/open-webui/open-webui)
![GitHub last commit](https://img.shields.io/github/last-commit/open-webui/open-webui?color=red)
![Hits](https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Follama-webui%2Follama-wbui&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=hits&edge_flat=false)
[![Discord](https://img.shields.io/badge/Discord-Open_WebUI-blue?logo=discord&logoColor=white)](https://discord.gg/5rJgQTnV4s)
[![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/tjbck)
@ -206,7 +205,7 @@ Discover upcoming features on our roadmap in the [Open WebUI Documentation](http
## License 📜
This project is licensed under the [BSD-3-Clause License](LICENSE) - see the [LICENSE](LICENSE) file for details. 📄
This project is licensed under the [Open WebUI License](LICENSE), a revised BSD-3-Clause license. You receive all the same rights as the classic BSD-3 license: you can use, modify, and distribute the software, including in proprietary and commercial products, with minimal restrictions. The only additional requirement is to preserve the "Open WebUI" branding, as detailed in the LICENSE file. For full terms, see the [LICENSE](LICENSE) document. 📄
## Support 💬

View file

@ -76,7 +76,7 @@ def serve(
from open_webui.env import UVICORN_WORKERS # Import the workers setting
uvicorn.run(
open_webui.main.app,
"open_webui.main:app",
host=host,
port=port,
forwarded_allow_ips="*",

View file

@ -509,6 +509,12 @@ ENABLE_OAUTH_GROUP_MANAGEMENT = PersistentConfig(
os.environ.get("ENABLE_OAUTH_GROUP_MANAGEMENT", "False").lower() == "true",
)
ENABLE_OAUTH_GROUP_CREATION = PersistentConfig(
"ENABLE_OAUTH_GROUP_CREATION",
"oauth.enable_group_creation",
os.environ.get("ENABLE_OAUTH_GROUP_CREATION", "False").lower() == "true",
)
OAUTH_ROLES_CLAIM = PersistentConfig(
"OAUTH_ROLES_CLAIM",
"oauth.roles_claim",
@ -952,10 +958,13 @@ DEFAULT_MODELS = PersistentConfig(
"DEFAULT_MODELS", "ui.default_models", os.environ.get("DEFAULT_MODELS", None)
)
DEFAULT_PROMPT_SUGGESTIONS = PersistentConfig(
"DEFAULT_PROMPT_SUGGESTIONS",
"ui.prompt_suggestions",
[
try:
default_prompt_suggestions = json.loads(os.environ.get("DEFAULT_PROMPT_SUGGESTIONS", "[]"))
except Exception as e:
log.exception(f"Error loading DEFAULT_PROMPT_SUGGESTIONS: {e}")
default_prompt_suggestions = []
if default_prompt_suggestions == []:
default_prompt_suggestions = [
{
"title": ["Help me study", "vocabulary for a college entrance exam"],
"content": "Help me study vocabulary: write a sentence for me to fill in the blank, and I'll try to pick the correct option.",
@ -983,7 +992,11 @@ DEFAULT_PROMPT_SUGGESTIONS = PersistentConfig(
"title": ["Overcome procrastination", "give me tips"],
"content": "Could you start by asking me about instances when I procrastinate the most and then give me some suggestions to overcome it?",
},
],
]
DEFAULT_PROMPT_SUGGESTIONS = PersistentConfig(
"DEFAULT_PROMPT_SUGGESTIONS",
"ui.prompt_suggestions",
default_prompt_suggestions,
)
MODEL_ORDER_LIST = PersistentConfig(
@ -1062,6 +1075,14 @@ USER_PERMISSIONS_CHAT_EDIT = (
os.environ.get("USER_PERMISSIONS_CHAT_EDIT", "True").lower() == "true"
)
USER_PERMISSIONS_CHAT_SHARE = (
os.environ.get("USER_PERMISSIONS_CHAT_SHARE", "True").lower() == "true"
)
USER_PERMISSIONS_CHAT_EXPORT = (
os.environ.get("USER_PERMISSIONS_CHAT_EXPORT", "True").lower() == "true"
)
USER_PERMISSIONS_CHAT_STT = (
os.environ.get("USER_PERMISSIONS_CHAT_STT", "True").lower() == "true"
)
@ -1126,6 +1147,8 @@ DEFAULT_USER_PERMISSIONS = {
"file_upload": USER_PERMISSIONS_CHAT_FILE_UPLOAD,
"delete": USER_PERMISSIONS_CHAT_DELETE,
"edit": USER_PERMISSIONS_CHAT_EDIT,
"share": USER_PERMISSIONS_CHAT_SHARE,
"export": USER_PERMISSIONS_CHAT_EXPORT,
"stt": USER_PERMISSIONS_CHAT_STT,
"tts": USER_PERMISSIONS_CHAT_TTS,
"call": USER_PERMISSIONS_CHAT_CALL,
@ -1203,6 +1226,9 @@ ENABLE_USER_WEBHOOKS = PersistentConfig(
os.environ.get("ENABLE_USER_WEBHOOKS", "True").lower() == "true",
)
# FastAPI / AnyIO settings
THREAD_POOL_SIZE = int(os.getenv("THREAD_POOL_SIZE", "0"))
def validate_cors_origins(origins):
for origin in origins:
@ -1693,6 +1719,9 @@ MILVUS_TOKEN = os.environ.get("MILVUS_TOKEN", None)
# Qdrant
QDRANT_URI = os.environ.get("QDRANT_URI", None)
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"))
# OpenSearch
OPENSEARCH_URI = os.environ.get("OPENSEARCH_URI", "https://localhost:9200")
@ -1724,6 +1753,14 @@ PGVECTOR_INITIALIZE_MAX_VECTOR_LENGTH = int(
os.environ.get("PGVECTOR_INITIALIZE_MAX_VECTOR_LENGTH", "1536")
)
# Pinecone
PINECONE_API_KEY = os.environ.get("PINECONE_API_KEY", None)
PINECONE_ENVIRONMENT = os.environ.get("PINECONE_ENVIRONMENT", None)
PINECONE_INDEX_NAME = os.getenv("PINECONE_INDEX_NAME", "open-webui-index")
PINECONE_DIMENSION = int(os.getenv("PINECONE_DIMENSION", 1536)) # or 3072, 1024, 768
PINECONE_METRIC = os.getenv("PINECONE_METRIC", "cosine")
PINECONE_CLOUD = os.getenv("PINECONE_CLOUD", "aws") # or "gcp" or "azure"
####################################
# Information Retrieval (RAG)
####################################
@ -1760,6 +1797,13 @@ ONEDRIVE_CLIENT_ID = PersistentConfig(
os.environ.get("ONEDRIVE_CLIENT_ID", ""),
)
ONEDRIVE_SHAREPOINT_URL = PersistentConfig(
"ONEDRIVE_SHAREPOINT_URL",
"onedrive.sharepoint_url",
os.environ.get("ONEDRIVE_SHAREPOINT_URL", ""),
)
# RAG Content Extraction
CONTENT_EXTRACTION_ENGINE = PersistentConfig(
"CONTENT_EXTRACTION_ENGINE",
@ -2251,6 +2295,29 @@ FIRECRAWL_API_BASE_URL = PersistentConfig(
os.environ.get("FIRECRAWL_API_BASE_URL", "https://api.firecrawl.dev"),
)
EXTERNAL_WEB_SEARCH_URL = PersistentConfig(
"EXTERNAL_WEB_SEARCH_URL",
"rag.web.search.external_web_search_url",
os.environ.get("EXTERNAL_WEB_SEARCH_URL", ""),
)
EXTERNAL_WEB_SEARCH_API_KEY = PersistentConfig(
"EXTERNAL_WEB_SEARCH_API_KEY",
"rag.web.search.external_web_search_api_key",
os.environ.get("EXTERNAL_WEB_SEARCH_API_KEY", ""),
)
EXTERNAL_WEB_LOADER_URL = PersistentConfig(
"EXTERNAL_WEB_LOADER_URL",
"rag.web.loader.external_web_loader_url",
os.environ.get("EXTERNAL_WEB_LOADER_URL", ""),
)
EXTERNAL_WEB_LOADER_API_KEY = PersistentConfig(
"EXTERNAL_WEB_LOADER_API_KEY",
"rag.web.loader.external_web_loader_api_key",
os.environ.get("EXTERNAL_WEB_LOADER_API_KEY", ""),
)
####################################
# Images

View file

@ -354,6 +354,10 @@ BYPASS_MODEL_ACCESS_CONTROL = (
os.environ.get("BYPASS_MODEL_ACCESS_CONTROL", "False").lower() == "true"
)
WEBUI_AUTH_SIGNOUT_REDIRECT_URL = os.environ.get(
"WEBUI_AUTH_SIGNOUT_REDIRECT_URL", None
)
####################################
# WEBUI_SECRET_KEY
####################################
@ -409,6 +413,11 @@ else:
except Exception:
AIOHTTP_CLIENT_TIMEOUT = 300
AIOHTTP_CLIENT_SESSION_SSL = (
os.environ.get("AIOHTTP_CLIENT_SESSION_SSL", "True").lower() == "true"
)
AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST = os.environ.get(
"AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST",
os.environ.get("AIOHTTP_CLIENT_TIMEOUT_OPENAI_MODEL_LIST", "10"),
@ -437,6 +446,56 @@ else:
except Exception:
AIOHTTP_CLIENT_TIMEOUT_TOOL_SERVER_DATA = 10
AIOHTTP_CLIENT_SESSION_TOOL_SERVER_SSL = (
os.environ.get("AIOHTTP_CLIENT_SESSION_TOOL_SERVER_SSL", "True").lower() == "true"
)
####################################
# SENTENCE TRANSFORMERS
####################################
SENTENCE_TRANSFORMERS_BACKEND = os.environ.get("SENTENCE_TRANSFORMERS_BACKEND", "")
if SENTENCE_TRANSFORMERS_BACKEND == "":
SENTENCE_TRANSFORMERS_BACKEND = "torch"
SENTENCE_TRANSFORMERS_MODEL_KWARGS = os.environ.get(
"SENTENCE_TRANSFORMERS_MODEL_KWARGS", ""
)
if SENTENCE_TRANSFORMERS_MODEL_KWARGS == "":
SENTENCE_TRANSFORMERS_MODEL_KWARGS = None
else:
try:
SENTENCE_TRANSFORMERS_MODEL_KWARGS = json.loads(
SENTENCE_TRANSFORMERS_MODEL_KWARGS
)
except Exception:
SENTENCE_TRANSFORMERS_MODEL_KWARGS = None
SENTENCE_TRANSFORMERS_CROSS_ENCODER_BACKEND = os.environ.get(
"SENTENCE_TRANSFORMERS_CROSS_ENCODER_BACKEND", ""
)
if SENTENCE_TRANSFORMERS_CROSS_ENCODER_BACKEND == "":
SENTENCE_TRANSFORMERS_CROSS_ENCODER_BACKEND = "torch"
SENTENCE_TRANSFORMERS_CROSS_ENCODER_MODEL_KWARGS = os.environ.get(
"SENTENCE_TRANSFORMERS_CROSS_ENCODER_MODEL_KWARGS", ""
)
if SENTENCE_TRANSFORMERS_CROSS_ENCODER_MODEL_KWARGS == "":
SENTENCE_TRANSFORMERS_CROSS_ENCODER_MODEL_KWARGS = None
else:
try:
SENTENCE_TRANSFORMERS_CROSS_ENCODER_MODEL_KWARGS = json.loads(
SENTENCE_TRANSFORMERS_CROSS_ENCODER_MODEL_KWARGS
)
except Exception:
SENTENCE_TRANSFORMERS_CROSS_ENCODER_MODEL_KWARGS = None
####################################
# OFFLINE_MODE
####################################
@ -446,6 +505,7 @@ OFFLINE_MODE = os.environ.get("OFFLINE_MODE", "false").lower() == "true"
if OFFLINE_MODE:
os.environ["HF_HUB_OFFLINE"] = "1"
####################################
# AUDIT LOGGING
####################################
@ -467,6 +527,7 @@ AUDIT_EXCLUDED_PATHS = os.getenv("AUDIT_EXCLUDED_PATHS", "/chats,/chat,/folders"
AUDIT_EXCLUDED_PATHS = [path.strip() for path in AUDIT_EXCLUDED_PATHS]
AUDIT_EXCLUDED_PATHS = [path.lstrip("/") for path in AUDIT_EXCLUDED_PATHS]
####################################
# OPENTELEMETRY
####################################

View file

@ -17,6 +17,7 @@ from sqlalchemy import text
from typing import Optional
from aiocache import cached
import aiohttp
import anyio.to_thread
import requests
@ -100,11 +101,14 @@ from open_webui.config import (
# OpenAI
ENABLE_OPENAI_API,
ONEDRIVE_CLIENT_ID,
ONEDRIVE_SHAREPOINT_URL,
OPENAI_API_BASE_URLS,
OPENAI_API_KEYS,
OPENAI_API_CONFIGS,
# Direct Connections
ENABLE_DIRECT_CONNECTIONS,
# Thread pool size for FastAPI/AnyIO
THREAD_POOL_SIZE,
# Tool Server Configs
TOOL_SERVER_CONNECTIONS,
# Code Execution
@ -240,12 +244,17 @@ from open_webui.config import (
GOOGLE_DRIVE_CLIENT_ID,
GOOGLE_DRIVE_API_KEY,
ONEDRIVE_CLIENT_ID,
ONEDRIVE_SHAREPOINT_URL,
ENABLE_RAG_HYBRID_SEARCH,
ENABLE_RAG_LOCAL_WEB_FETCH,
ENABLE_WEB_LOADER_SSL_VERIFICATION,
ENABLE_GOOGLE_DRIVE_INTEGRATION,
ENABLE_ONEDRIVE_INTEGRATION,
UPLOAD_DIR,
EXTERNAL_WEB_SEARCH_URL,
EXTERNAL_WEB_SEARCH_API_KEY,
EXTERNAL_WEB_LOADER_URL,
EXTERNAL_WEB_LOADER_API_KEY,
# WebUI
WEBUI_AUTH,
WEBUI_NAME,
@ -341,6 +350,7 @@ from open_webui.env import (
WEBUI_SESSION_COOKIE_SECURE,
WEBUI_AUTH_TRUSTED_EMAIL_HEADER,
WEBUI_AUTH_TRUSTED_NAME_HEADER,
WEBUI_AUTH_SIGNOUT_REDIRECT_URL,
ENABLE_WEBSOCKET_SUPPORT,
BYPASS_MODEL_ACCESS_CONTROL,
RESET_CONFIG_ON_START,
@ -432,6 +442,11 @@ async def lifespan(app: FastAPI):
if LICENSE_KEY:
get_license_data(app, LICENSE_KEY)
pool_size = THREAD_POOL_SIZE
if pool_size and pool_size > 0:
limiter = anyio.to_thread.current_default_thread_limiter()
limiter.total_tokens = pool_size
asyncio.create_task(periodic_usage_pool_cleanup())
yield
@ -576,6 +591,7 @@ app.state.config.LDAP_CIPHERS = LDAP_CIPHERS
app.state.AUTH_TRUSTED_EMAIL_HEADER = WEBUI_AUTH_TRUSTED_EMAIL_HEADER
app.state.AUTH_TRUSTED_NAME_HEADER = WEBUI_AUTH_TRUSTED_NAME_HEADER
app.state.WEBUI_AUTH_SIGNOUT_REDIRECT_URL = WEBUI_AUTH_SIGNOUT_REDIRECT_URL
app.state.EXTERNAL_PWA_MANIFEST_URL = EXTERNAL_PWA_MANIFEST_URL
app.state.USER_COUNT = None
@ -668,6 +684,10 @@ app.state.config.EXA_API_KEY = EXA_API_KEY
app.state.config.PERPLEXITY_API_KEY = PERPLEXITY_API_KEY
app.state.config.SOUGOU_API_SID = SOUGOU_API_SID
app.state.config.SOUGOU_API_SK = SOUGOU_API_SK
app.state.config.EXTERNAL_WEB_SEARCH_URL = EXTERNAL_WEB_SEARCH_URL
app.state.config.EXTERNAL_WEB_SEARCH_API_KEY = EXTERNAL_WEB_SEARCH_API_KEY
app.state.config.EXTERNAL_WEB_LOADER_URL = EXTERNAL_WEB_LOADER_URL
app.state.config.EXTERNAL_WEB_LOADER_API_KEY = EXTERNAL_WEB_LOADER_API_KEY
app.state.config.PLAYWRIGHT_WS_URL = PLAYWRIGHT_WS_URL
@ -1327,7 +1347,10 @@ async def get_app_config(request: Request):
"client_id": GOOGLE_DRIVE_CLIENT_ID.value,
"api_key": GOOGLE_DRIVE_API_KEY.value,
},
"onedrive": {"client_id": ONEDRIVE_CLIENT_ID.value},
"onedrive": {
"client_id": ONEDRIVE_CLIENT_ID.value,
"sharepoint_url": ONEDRIVE_SHAREPOINT_URL.value,
},
"license_metadata": app.state.LICENSE_METADATA,
**(
{
@ -1439,7 +1462,7 @@ async def get_manifest_json():
"start_url": "/",
"display": "standalone",
"background_color": "#343541",
"orientation": "natural",
"orientation": "any",
"icons": [
{
"src": "/static/logo.png",

View file

@ -0,0 +1,53 @@
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 ExternalLoader(BaseLoader):
def __init__(
self,
web_paths: Union[str, List[str]],
external_url: str,
external_api_key: str,
continue_on_failure: bool = True,
**kwargs,
) -> None:
self.external_url = external_url
self.external_api_key = external_api_key
self.urls = web_paths if isinstance(web_paths, list) else [web_paths]
self.continue_on_failure = continue_on_failure
def lazy_load(self) -> Iterator[Document]:
batch_size = 20
for i in range(0, len(self.urls), batch_size):
urls = self.urls[i : i + batch_size]
try:
response = requests.post(
self.external_url,
headers={
"User-Agent": "Open WebUI (https://github.com/open-webui/open-webui) RAG Bot",
"Authorization": f"Bearer {self.external_api_key}",
},
json={
"urls": urls,
},
)
response.raise_for_status()
results = response.json()
for result in results:
yield Document(
page_content=result.get("page_content", ""),
metadata=result.get("metadata", {}),
)
except Exception as e:
if self.continue_on_failure:
log.error(f"Error extracting content from batch {urls}: {e}")
else:
raise e

View file

@ -260,23 +260,47 @@ def query_collection(
k: int,
) -> dict:
results = []
for query in queries:
log.debug(f"query_collection:query {query}")
query_embedding = embedding_function(query, prefix=RAG_EMBEDDING_QUERY_PREFIX)
for collection_name in collection_names:
error = False
def process_query_collection(collection_name, query_embedding):
try:
if collection_name:
try:
result = query_doc(
collection_name=collection_name,
k=k,
query_embedding=query_embedding,
)
if result is not None:
results.append(result.model_dump())
except Exception as e:
log.exception(f"Error when querying the collection: {e}")
else:
pass
result = query_doc(
collection_name=collection_name,
k=k,
query_embedding=query_embedding,
)
if result is not None:
return result.model_dump(), None
return None, None
except Exception as e:
log.exception(f"Error when querying the collection: {e}")
return None, e
# Generate all query embeddings (in one call)
query_embeddings = embedding_function(queries, prefix=RAG_EMBEDDING_QUERY_PREFIX)
log.debug(
f"query_collection: processing {len(queries)} queries across {len(collection_names)} collections"
)
with ThreadPoolExecutor() as executor:
future_results = []
for query_embedding in query_embeddings:
for collection_name in collection_names:
result = executor.submit(
process_query_collection, collection_name, query_embedding
)
future_results.append(result)
task_results = [future.result() for future in future_results]
for result, err in task_results:
if err is not None:
error = True
elif result is not None:
results.append(result)
if error and not results:
log.warning("All collection queries failed. No results returned.")
return merge_and_sort_query_results(results, k=k)

View file

@ -20,6 +20,10 @@ 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

View file

@ -5,7 +5,12 @@ from chromadb.utils.batch_utils import create_batches
from typing import Optional
from open_webui.retrieval.vector.main import VectorItem, SearchResult, GetResult
from open_webui.retrieval.vector.main import (
VectorDBBase,
VectorItem,
SearchResult,
GetResult,
)
from open_webui.config import (
CHROMA_DATA_PATH,
CHROMA_HTTP_HOST,
@ -23,7 +28,7 @@ log = logging.getLogger(__name__)
log.setLevel(SRC_LOG_LEVELS["RAG"])
class ChromaClient:
class ChromaClient(VectorDBBase):
def __init__(self):
settings_dict = {
"allow_reset": True,

View file

@ -2,7 +2,12 @@ from elasticsearch import Elasticsearch, BadRequestError
from typing import Optional
import ssl
from elasticsearch.helpers import bulk, scan
from open_webui.retrieval.vector.main import VectorItem, SearchResult, GetResult
from open_webui.retrieval.vector.main import (
VectorDBBase,
VectorItem,
SearchResult,
GetResult,
)
from open_webui.config import (
ELASTICSEARCH_URL,
ELASTICSEARCH_CA_CERTS,
@ -15,7 +20,7 @@ from open_webui.config import (
)
class ElasticsearchClient:
class ElasticsearchClient(VectorDBBase):
"""
Important:
in order to reduce the number of indexes and since the embedding vector length is fixed, we avoid creating

View file

@ -4,7 +4,12 @@ import json
import logging
from typing import Optional
from open_webui.retrieval.vector.main import VectorItem, SearchResult, GetResult
from open_webui.retrieval.vector.main import (
VectorDBBase,
VectorItem,
SearchResult,
GetResult,
)
from open_webui.config import (
MILVUS_URI,
MILVUS_DB,
@ -16,7 +21,7 @@ log = logging.getLogger(__name__)
log.setLevel(SRC_LOG_LEVELS["RAG"])
class MilvusClient:
class MilvusClient(VectorDBBase):
def __init__(self):
self.collection_prefix = "open_webui"
if MILVUS_TOKEN is None:

View file

@ -2,7 +2,12 @@ from opensearchpy import OpenSearch
from opensearchpy.helpers import bulk
from typing import Optional
from open_webui.retrieval.vector.main import VectorItem, SearchResult, GetResult
from open_webui.retrieval.vector.main import (
VectorDBBase,
VectorItem,
SearchResult,
GetResult,
)
from open_webui.config import (
OPENSEARCH_URI,
OPENSEARCH_SSL,
@ -12,7 +17,7 @@ from open_webui.config import (
)
class OpenSearchClient:
class OpenSearchClient(VectorDBBase):
def __init__(self):
self.index_prefix = "open_webui"
self.client = OpenSearch(

View file

@ -22,7 +22,12 @@ from pgvector.sqlalchemy import Vector
from sqlalchemy.ext.mutable import MutableDict
from sqlalchemy.exc import NoSuchTableError
from open_webui.retrieval.vector.main import VectorItem, SearchResult, GetResult
from open_webui.retrieval.vector.main import (
VectorDBBase,
VectorItem,
SearchResult,
GetResult,
)
from open_webui.config import PGVECTOR_DB_URL, PGVECTOR_INITIALIZE_MAX_VECTOR_LENGTH
from open_webui.env import SRC_LOG_LEVELS
@ -44,7 +49,7 @@ class DocumentChunk(Base):
vmetadata = Column(MutableDict.as_mutable(JSONB), nullable=True)
class PgvectorClient:
class PgvectorClient(VectorDBBase):
def __init__(self) -> None:
# if no pgvector uri, use the existing database connection

View file

@ -0,0 +1,412 @@
from typing import Optional, List, Dict, Any, Union
import logging
from pinecone import Pinecone, ServerlessSpec
from open_webui.retrieval.vector.main import (
VectorDBBase,
VectorItem,
SearchResult,
GetResult,
)
from open_webui.config import (
PINECONE_API_KEY,
PINECONE_ENVIRONMENT,
PINECONE_INDEX_NAME,
PINECONE_DIMENSION,
PINECONE_METRIC,
PINECONE_CLOUD,
)
from open_webui.env import SRC_LOG_LEVELS
NO_LIMIT = 10000 # Reasonable limit to avoid overwhelming the system
BATCH_SIZE = 100 # Recommended batch size for Pinecone operations
log = logging.getLogger(__name__)
log.setLevel(SRC_LOG_LEVELS["RAG"])
class PineconeClient(VectorDBBase):
def __init__(self):
self.collection_prefix = "open-webui"
# Validate required configuration
self._validate_config()
# Store configuration values
self.api_key = PINECONE_API_KEY
self.environment = PINECONE_ENVIRONMENT
self.index_name = PINECONE_INDEX_NAME
self.dimension = PINECONE_DIMENSION
self.metric = PINECONE_METRIC
self.cloud = PINECONE_CLOUD
# Initialize Pinecone client
self.client = Pinecone(api_key=self.api_key)
# Create index if it doesn't exist
self._initialize_index()
def _validate_config(self) -> None:
"""Validate that all required configuration variables are set."""
missing_vars = []
if not PINECONE_API_KEY:
missing_vars.append("PINECONE_API_KEY")
if not PINECONE_ENVIRONMENT:
missing_vars.append("PINECONE_ENVIRONMENT")
if not PINECONE_INDEX_NAME:
missing_vars.append("PINECONE_INDEX_NAME")
if not PINECONE_DIMENSION:
missing_vars.append("PINECONE_DIMENSION")
if not PINECONE_CLOUD:
missing_vars.append("PINECONE_CLOUD")
if missing_vars:
raise ValueError(
f"Required configuration missing: {', '.join(missing_vars)}"
)
def _initialize_index(self) -> None:
"""Initialize the Pinecone index."""
try:
# Check if index exists
if self.index_name not in self.client.list_indexes().names():
log.info(f"Creating Pinecone index '{self.index_name}'...")
self.client.create_index(
name=self.index_name,
dimension=self.dimension,
metric=self.metric,
spec=ServerlessSpec(cloud=self.cloud, region=self.environment),
)
log.info(f"Successfully created Pinecone index '{self.index_name}'")
else:
log.info(f"Using existing Pinecone index '{self.index_name}'")
# Connect to the index
self.index = self.client.Index(self.index_name)
except Exception as e:
log.error(f"Failed to initialize Pinecone index: {e}")
raise RuntimeError(f"Failed to initialize Pinecone index: {e}")
def _create_points(
self, items: List[VectorItem], collection_name_with_prefix: str
) -> List[Dict[str, Any]]:
"""Convert VectorItem objects to Pinecone point format."""
points = []
for item in items:
# Start with any existing metadata or an empty dict
metadata = item.get("metadata", {}).copy() if item.get("metadata") else {}
# Add text to metadata if available
if "text" in item:
metadata["text"] = item["text"]
# Always add collection_name to metadata for filtering
metadata["collection_name"] = collection_name_with_prefix
point = {
"id": item["id"],
"values": item["vector"],
"metadata": metadata,
}
points.append(point)
return points
def _get_collection_name_with_prefix(self, collection_name: str) -> str:
"""Get the collection name with prefix."""
return f"{self.collection_prefix}_{collection_name}"
def _normalize_distance(self, score: float) -> float:
"""Normalize distance score based on the metric used."""
if self.metric.lower() == "cosine":
# Cosine similarity ranges from -1 to 1, normalize to 0 to 1
return (score + 1.0) / 2.0
elif self.metric.lower() in ["euclidean", "dotproduct"]:
# These are already suitable for ranking (smaller is better for Euclidean)
return score
else:
# For other metrics, use as is
return score
def _result_to_get_result(self, matches: list) -> GetResult:
"""Convert Pinecone matches to GetResult format."""
ids = []
documents = []
metadatas = []
for match in matches:
metadata = match.get("metadata", {})
ids.append(match["id"])
documents.append(metadata.get("text", ""))
metadatas.append(metadata)
return GetResult(
**{
"ids": [ids],
"documents": [documents],
"metadatas": [metadatas],
}
)
def has_collection(self, collection_name: str) -> bool:
"""Check if a collection exists by searching for at least one item."""
collection_name_with_prefix = self._get_collection_name_with_prefix(
collection_name
)
try:
# Search for at least 1 item with this collection name in metadata
response = self.index.query(
vector=[0.0] * self.dimension, # dummy vector
top_k=1,
filter={"collection_name": collection_name_with_prefix},
include_metadata=False,
)
return len(response.matches) > 0
except Exception as e:
log.exception(
f"Error checking collection '{collection_name_with_prefix}': {e}"
)
return False
def delete_collection(self, collection_name: str) -> None:
"""Delete a collection by removing all vectors with the collection name in metadata."""
collection_name_with_prefix = self._get_collection_name_with_prefix(
collection_name
)
try:
self.index.delete(filter={"collection_name": collection_name_with_prefix})
log.info(
f"Collection '{collection_name_with_prefix}' deleted (all vectors removed)."
)
except Exception as e:
log.warning(
f"Failed to delete collection '{collection_name_with_prefix}': {e}"
)
raise
def insert(self, collection_name: str, items: List[VectorItem]) -> None:
"""Insert vectors into a collection."""
if not items:
log.warning("No items to insert")
return
collection_name_with_prefix = self._get_collection_name_with_prefix(
collection_name
)
points = self._create_points(items, collection_name_with_prefix)
# Insert in batches for better performance and reliability
for i in range(0, len(points), BATCH_SIZE):
batch = points[i : i + BATCH_SIZE]
try:
self.index.upsert(vectors=batch)
log.debug(
f"Inserted batch of {len(batch)} vectors into '{collection_name_with_prefix}'"
)
except Exception as e:
log.error(
f"Error inserting batch into '{collection_name_with_prefix}': {e}"
)
raise
log.info(
f"Successfully inserted {len(items)} vectors into '{collection_name_with_prefix}'"
)
def upsert(self, collection_name: str, items: List[VectorItem]) -> None:
"""Upsert (insert or update) vectors into a collection."""
if not items:
log.warning("No items to upsert")
return
collection_name_with_prefix = self._get_collection_name_with_prefix(
collection_name
)
points = self._create_points(items, collection_name_with_prefix)
# Upsert in batches
for i in range(0, len(points), BATCH_SIZE):
batch = points[i : i + BATCH_SIZE]
try:
self.index.upsert(vectors=batch)
log.debug(
f"Upserted batch of {len(batch)} vectors into '{collection_name_with_prefix}'"
)
except Exception as e:
log.error(
f"Error upserting batch into '{collection_name_with_prefix}': {e}"
)
raise
log.info(
f"Successfully upserted {len(items)} vectors into '{collection_name_with_prefix}'"
)
def search(
self, collection_name: str, vectors: List[List[Union[float, int]]], limit: int
) -> Optional[SearchResult]:
"""Search for similar vectors in a collection."""
if not vectors or not vectors[0]:
log.warning("No vectors provided for search")
return None
collection_name_with_prefix = self._get_collection_name_with_prefix(
collection_name
)
if limit is None or limit <= 0:
limit = NO_LIMIT
try:
# Search using the first vector (assuming this is the intended behavior)
query_vector = vectors[0]
# Perform the search
query_response = self.index.query(
vector=query_vector,
top_k=limit,
include_metadata=True,
filter={"collection_name": collection_name_with_prefix},
)
if not query_response.matches:
# Return empty result if no matches
return SearchResult(
ids=[[]],
documents=[[]],
metadatas=[[]],
distances=[[]],
)
# Convert to GetResult format
get_result = self._result_to_get_result(query_response.matches)
# Calculate normalized distances based on metric
distances = [
[
self._normalize_distance(match.score)
for match in query_response.matches
]
]
return SearchResult(
ids=get_result.ids,
documents=get_result.documents,
metadatas=get_result.metadatas,
distances=distances,
)
except Exception as e:
log.error(f"Error searching in '{collection_name_with_prefix}': {e}")
return None
def query(
self, collection_name: str, filter: Dict, limit: Optional[int] = None
) -> Optional[GetResult]:
"""Query vectors by metadata filter."""
collection_name_with_prefix = self._get_collection_name_with_prefix(
collection_name
)
if limit is None or limit <= 0:
limit = NO_LIMIT
try:
# Create a zero vector for the dimension as Pinecone requires a vector
zero_vector = [0.0] * self.dimension
# Combine user filter with collection_name
pinecone_filter = {"collection_name": collection_name_with_prefix}
if filter:
pinecone_filter.update(filter)
# Perform metadata-only query
query_response = self.index.query(
vector=zero_vector,
filter=pinecone_filter,
top_k=limit,
include_metadata=True,
)
return self._result_to_get_result(query_response.matches)
except Exception as e:
log.error(f"Error querying collection '{collection_name}': {e}")
return None
def get(self, collection_name: str) -> Optional[GetResult]:
"""Get all vectors in a collection."""
collection_name_with_prefix = self._get_collection_name_with_prefix(
collection_name
)
try:
# Use a zero vector for fetching all entries
zero_vector = [0.0] * self.dimension
# Add filter to only get vectors for this collection
query_response = self.index.query(
vector=zero_vector,
top_k=NO_LIMIT,
include_metadata=True,
filter={"collection_name": collection_name_with_prefix},
)
return self._result_to_get_result(query_response.matches)
except Exception as e:
log.error(f"Error getting collection '{collection_name}': {e}")
return None
def delete(
self,
collection_name: str,
ids: Optional[List[str]] = None,
filter: Optional[Dict] = None,
) -> None:
"""Delete vectors by IDs or filter."""
collection_name_with_prefix = self._get_collection_name_with_prefix(
collection_name
)
try:
if ids:
# Delete by IDs (in batches for large deletions)
for i in range(0, len(ids), BATCH_SIZE):
batch_ids = ids[i : i + BATCH_SIZE]
# Note: When deleting by ID, we can't filter by collection_name
# This is a limitation of Pinecone - be careful with ID uniqueness
self.index.delete(ids=batch_ids)
log.debug(
f"Deleted batch of {len(batch_ids)} vectors by ID from '{collection_name_with_prefix}'"
)
log.info(
f"Successfully deleted {len(ids)} vectors by ID from '{collection_name_with_prefix}'"
)
elif filter:
# Combine user filter with collection_name
pinecone_filter = {"collection_name": collection_name_with_prefix}
if filter:
pinecone_filter.update(filter)
# Delete by metadata filter
self.index.delete(filter=pinecone_filter)
log.info(
f"Successfully deleted vectors by filter from '{collection_name_with_prefix}'"
)
else:
log.warning("No ids or filter provided for delete operation")
except Exception as e:
log.error(f"Error deleting from collection '{collection_name}': {e}")
raise
def reset(self) -> None:
"""Reset the database by deleting all collections."""
try:
self.index.delete(delete_all=True)
log.info("All vectors successfully deleted from the index.")
except Exception as e:
log.error(f"Failed to reset Pinecone index: {e}")
raise

View file

@ -1,12 +1,24 @@
from typing import Optional
import logging
from urllib.parse import urlparse
from qdrant_client import QdrantClient as Qclient
from qdrant_client.http.models import PointStruct
from qdrant_client.models import models
from open_webui.retrieval.vector.main import VectorItem, SearchResult, GetResult
from open_webui.config import QDRANT_URI, QDRANT_API_KEY
from open_webui.retrieval.vector.main import (
VectorDBBase,
VectorItem,
SearchResult,
GetResult,
)
from open_webui.config import (
QDRANT_URI,
QDRANT_API_KEY,
QDRANT_ON_DISK,
QDRANT_GRPC_PORT,
QDRANT_PREFER_GRPC,
)
from open_webui.env import SRC_LOG_LEVELS
NO_LIMIT = 999999999
@ -15,16 +27,34 @@ log = logging.getLogger(__name__)
log.setLevel(SRC_LOG_LEVELS["RAG"])
class QdrantClient:
class QdrantClient(VectorDBBase):
def __init__(self):
self.collection_prefix = "open-webui"
self.QDRANT_URI = QDRANT_URI
self.QDRANT_API_KEY = QDRANT_API_KEY
self.client = (
Qclient(url=self.QDRANT_URI, api_key=self.QDRANT_API_KEY)
if self.QDRANT_URI
else None
)
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)
def _result_to_get_result(self, points) -> GetResult:
ids = []
@ -50,7 +80,9 @@ class QdrantClient:
self.client.create_collection(
collection_name=collection_name_with_prefix,
vectors_config=models.VectorParams(
size=dimension, distance=models.Distance.COSINE
size=dimension,
distance=models.Distance.COSINE,
on_disk=self.QDRANT_ON_DISK,
),
)

View file

@ -1,5 +1,6 @@
from pydantic import BaseModel
from typing import Optional, List, Any
from abc import ABC, abstractmethod
from typing import Any, Dict, List, Optional, Union
class VectorItem(BaseModel):
@ -17,3 +18,69 @@ class GetResult(BaseModel):
class SearchResult(GetResult):
distances: Optional[List[List[float | int]]]
class VectorDBBase(ABC):
"""
Abstract base class for all vector database backends.
Implementations of this class provide methods for collection management,
vector insertion, deletion, similarity search, and metadata filtering.
Any custom vector database integration must inherit from this class and
implement all abstract methods.
"""
@abstractmethod
def has_collection(self, collection_name: str) -> bool:
"""Check if the collection exists in the vector DB."""
pass
@abstractmethod
def delete_collection(self, collection_name: str) -> None:
"""Delete a collection from the vector DB."""
pass
@abstractmethod
def insert(self, collection_name: str, items: List[VectorItem]) -> None:
"""Insert a list of vector items into a collection."""
pass
@abstractmethod
def upsert(self, collection_name: str, items: List[VectorItem]) -> None:
"""Insert or update vector items in a collection."""
pass
@abstractmethod
def search(
self, collection_name: str, vectors: List[List[Union[float, int]]], limit: int
) -> Optional[SearchResult]:
"""Search for similar vectors in a collection."""
pass
@abstractmethod
def query(
self, collection_name: str, filter: Dict, limit: Optional[int] = None
) -> Optional[GetResult]:
"""Query vectors from a collection using metadata filter."""
pass
@abstractmethod
def get(self, collection_name: str) -> Optional[GetResult]:
"""Retrieve all vectors from a collection."""
pass
@abstractmethod
def delete(
self,
collection_name: str,
ids: Optional[List[str]] = None,
filter: Optional[Dict] = None,
) -> None:
"""Delete vectors by ID or filter from a collection."""
pass
@abstractmethod
def reset(self) -> None:
"""Reset the vector database by removing all collections or those matching a condition."""
pass

View file

@ -0,0 +1,47 @@
import logging
from typing import Optional, List
import requests
from open_webui.retrieval.web.main import SearchResult, get_filtered_results
from open_webui.env import SRC_LOG_LEVELS
log = logging.getLogger(__name__)
log.setLevel(SRC_LOG_LEVELS["RAG"])
def search_external(
external_url: str,
external_api_key: str,
query: str,
count: int,
filter_list: Optional[List[str]] = None,
) -> List[SearchResult]:
try:
response = requests.post(
external_url,
headers={
"User-Agent": "Open WebUI (https://github.com/open-webui/open-webui) RAG Bot",
"Authorization": f"Bearer {external_api_key}",
},
json={
"query": query,
"count": count,
},
)
response.raise_for_status()
results = response.json()
if filter_list:
results = get_filtered_results(results, filter_list)
results = [
SearchResult(
link=result.get("link"),
title=result.get("title"),
snippet=result.get("snippet"),
)
for result in results[:count]
]
log.info(f"External search results: {results}")
return results
except Exception as e:
log.error(f"Error in External search: {e}")
return []

View file

@ -2,7 +2,7 @@ import logging
from typing import Optional
import requests
from open_webui.retrieval.web.main import SearchResult
from open_webui.retrieval.web.main import SearchResult, get_filtered_results
from open_webui.env import SRC_LOG_LEVELS
log = logging.getLogger(__name__)
@ -21,18 +21,25 @@ def search_tavily(
Args:
api_key (str): A Tavily Search API key
query (str): The query to search for
count (int): The maximum number of results to return
Returns:
list[SearchResult]: A list of search results
"""
url = "https://api.tavily.com/search"
data = {"query": query, "api_key": api_key}
response = requests.post(url, json=data)
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}",
}
data = {"query": query, "max_results": count}
response = requests.post(url, headers=headers, json=data)
response.raise_for_status()
json_response = response.json()
raw_search_results = json_response.get("results", [])
results = json_response.get("results", [])
if filter_list:
results = get_filtered_results(results, filter_list)
return [
SearchResult(
@ -40,5 +47,5 @@ def search_tavily(
title=result.get("title", ""),
snippet=result.get("content"),
)
for result in raw_search_results[:count]
for result in results
]

View file

@ -25,6 +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.constants import ERROR_MESSAGES
from open_webui.config import (
ENABLE_RAG_LOCAL_WEB_FETCH,
@ -35,6 +36,8 @@ from open_webui.config import (
FIRECRAWL_API_KEY,
TAVILY_API_KEY,
TAVILY_EXTRACT_DEPTH,
EXTERNAL_WEB_LOADER_URL,
EXTERNAL_WEB_LOADER_API_KEY,
)
from open_webui.env import SRC_LOG_LEVELS
@ -225,7 +228,10 @@ class SafeFireCrawlLoader(BaseLoader, RateLimitMixin, URLProcessingMixin):
mode=self.mode,
params=self.params,
)
yield from loader.lazy_load()
for document in loader.lazy_load():
if not document.metadata.get("source"):
document.metadata["source"] = document.metadata.get("sourceURL")
yield document
except Exception as e:
if self.continue_on_failure:
log.exception(f"Error loading {url}: {e}")
@ -245,6 +251,8 @@ class SafeFireCrawlLoader(BaseLoader, RateLimitMixin, URLProcessingMixin):
params=self.params,
)
async for document in loader.alazy_load():
if not document.metadata.get("source"):
document.metadata["source"] = document.metadata.get("sourceURL")
yield document
except Exception as e:
if self.continue_on_failure:
@ -619,6 +627,11 @@ def get_web_loader(
web_loader_args["api_key"] = TAVILY_API_KEY.value
web_loader_args["extract_depth"] = TAVILY_EXTRACT_DEPTH.value
if WEB_LOADER_ENGINE.value == "external":
WebLoaderClass = ExternalLoader
web_loader_args["external_url"] = EXTERNAL_WEB_LOADER_URL.value
web_loader_args["external_api_key"] = EXTERNAL_WEB_LOADER_API_KEY.value
if WebLoaderClass:
web_loader = WebLoaderClass(**web_loader_args)

View file

@ -27,20 +27,24 @@ from open_webui.env import (
WEBUI_AUTH_TRUSTED_NAME_HEADER,
WEBUI_AUTH_COOKIE_SAME_SITE,
WEBUI_AUTH_COOKIE_SECURE,
WEBUI_AUTH_SIGNOUT_REDIRECT_URL,
SRC_LOG_LEVELS,
)
from fastapi import APIRouter, Depends, HTTPException, Request, status
from fastapi.responses import RedirectResponse, Response
from open_webui.config import OPENID_PROVIDER_URL, ENABLE_OAUTH_SIGNUP, ENABLE_LDAP
from pydantic import BaseModel
from open_webui.utils.misc import parse_duration, validate_email_format
from open_webui.utils.auth import (
decode_token,
create_api_key,
create_token,
get_admin_user,
get_verified_user,
get_current_user,
get_password_hash,
get_http_authorization_cred,
)
from open_webui.utils.webhook import post_webhook
from open_webui.utils.access_control import get_permissions
@ -72,31 +76,13 @@ class SessionUserResponse(Token, UserResponse):
async def get_session_user(
request: Request, response: Response, user=Depends(get_current_user)
):
expires_delta = parse_duration(request.app.state.config.JWT_EXPIRES_IN)
expires_at = None
if expires_delta:
expires_at = int(time.time()) + int(expires_delta.total_seconds())
token = create_token(
data={"id": user.id},
expires_delta=expires_delta,
)
auth_header = request.headers.get("Authorization")
auth_token = get_http_authorization_cred(auth_header)
token = auth_token.credentials
datetime_expires_at = (
datetime.datetime.fromtimestamp(expires_at, datetime.timezone.utc)
if expires_at
else None
)
# Set the cookie token
response.set_cookie(
key="token",
value=token,
expires=datetime_expires_at,
httponly=True, # Ensures the cookie is not accessible via JavaScript
samesite=WEBUI_AUTH_COOKIE_SAME_SITE,
secure=WEBUI_AUTH_COOKIE_SECURE,
)
data = decode_token(token)
expires_at = data.get("exp")
user_permissions = get_permissions(
user.id, request.app.state.config.USER_PERMISSIONS
@ -288,11 +274,14 @@ async def ldap_auth(request: Request, response: Response, form_data: LdapForm):
user = Auths.authenticate_user_by_trusted_header(email)
if user:
expires_delta = parse_duration(request.app.state.config.JWT_EXPIRES_IN)
expires_at = None
if expires_delta:
expires_at = int(time.time()) + int(expires_delta.total_seconds())
token = create_token(
data={"id": user.id},
expires_delta=parse_duration(
request.app.state.config.JWT_EXPIRES_IN
),
expires_delta=expires_delta,
)
# Set the cookie token
@ -300,6 +289,8 @@ async def ldap_auth(request: Request, response: Response, form_data: LdapForm):
key="token",
value=token,
httponly=True, # Ensures the cookie is not accessible via JavaScript
samesite=WEBUI_AUTH_COOKIE_SAME_SITE,
secure=WEBUI_AUTH_COOKIE_SECURE,
)
user_permissions = get_permissions(
@ -309,6 +300,7 @@ async def ldap_auth(request: Request, response: Response, form_data: LdapForm):
return {
"token": token,
"token_type": "Bearer",
"expires_at": expires_at,
"id": user.id,
"email": user.email,
"name": user.name,
@ -566,6 +558,12 @@ async def signout(request: Request, response: Response):
detail="Failed to sign out from the OpenID provider.",
)
if WEBUI_AUTH_SIGNOUT_REDIRECT_URL:
return RedirectResponse(
headers=response.headers,
url=WEBUI_AUTH_SIGNOUT_REDIRECT_URL,
)
return {"status": True}

View file

@ -638,8 +638,17 @@ async def archive_chat_by_id(id: str, user=Depends(get_verified_user)):
@router.post("/{id}/share", response_model=Optional[ChatResponse])
async def share_chat_by_id(id: str, user=Depends(get_verified_user)):
async def share_chat_by_id(request: Request, id: str, user=Depends(get_verified_user)):
if not has_permission(
user.id, "chat.share", request.app.state.config.USER_PERMISSIONS
):
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail=ERROR_MESSAGES.ACCESS_PROHIBITED,
)
chat = Chats.get_chat_by_id_and_user_id(id, user.id)
if chat:
if chat.share_id:
shared_chat = Chats.update_shared_chat_by_chat_id(chat.id)

View file

@ -173,7 +173,8 @@ async def list_files(user=Depends(get_verified_user), content: bool = Query(True
if not content:
for file in files:
del file.data["content"]
if "content" in file.data:
del file.data["content"]
return files
@ -214,7 +215,8 @@ async def search_files(
if not content:
for file in matching_files:
del file.data["content"]
if "content" in file.data:
del file.data["content"]
return matching_files

View file

@ -9,7 +9,7 @@ from open_webui.models.knowledge import (
KnowledgeResponse,
KnowledgeUserResponse,
)
from open_webui.models.files import Files, FileModel
from open_webui.models.files import Files, FileModel, FileMetadataResponse
from open_webui.retrieval.vector.connector import VECTOR_DB_CLIENT
from open_webui.routers.retrieval import (
process_file,
@ -235,7 +235,7 @@ async def reindex_knowledge_files(request: Request, user=Depends(get_verified_us
class KnowledgeFilesResponse(KnowledgeResponse):
files: list[FileModel]
files: list[FileMetadataResponse]
@router.get("/{id}", response_model=Optional[KnowledgeFilesResponse])
@ -251,7 +251,7 @@ async def get_knowledge_by_id(id: str, user=Depends(get_verified_user)):
):
file_ids = knowledge.data.get("file_ids", []) if knowledge.data else []
files = Files.get_files_by_ids(file_ids)
files = Files.get_file_metadatas_by_ids(file_ids)
return KnowledgeFilesResponse(
**knowledge.model_dump(),
@ -379,7 +379,7 @@ def add_file_to_knowledge_by_id(
knowledge = Knowledges.update_knowledge_data_by_id(id=id, data=data)
if knowledge:
files = Files.get_files_by_ids(file_ids)
files = Files.get_file_metadatas_by_ids(file_ids)
return KnowledgeFilesResponse(
**knowledge.model_dump(),
@ -456,7 +456,7 @@ def update_file_from_knowledge_by_id(
data = knowledge.data or {}
file_ids = data.get("file_ids", [])
files = Files.get_files_by_ids(file_ids)
files = Files.get_file_metadatas_by_ids(file_ids)
return KnowledgeFilesResponse(
**knowledge.model_dump(),
@ -538,7 +538,7 @@ def remove_file_from_knowledge_by_id(
knowledge = Knowledges.update_knowledge_data_by_id(id=id, data=data)
if knowledge:
files = Files.get_files_by_ids(file_ids)
files = Files.get_file_metadatas_by_ids(file_ids)
return KnowledgeFilesResponse(
**knowledge.model_dump(),
@ -734,7 +734,7 @@ def add_files_to_knowledge_batch(
error_details = [f"{err.file_id}: {err.error}" for err in result.errors]
return KnowledgeFilesResponse(
**knowledge.model_dump(),
files=Files.get_files_by_ids(existing_file_ids),
files=Files.get_file_metadatas_by_ids(existing_file_ids),
warnings={
"message": "Some files failed to process",
"errors": error_details,
@ -742,5 +742,6 @@ def add_files_to_knowledge_batch(
)
return KnowledgeFilesResponse(
**knowledge.model_dump(), files=Files.get_files_by_ids(existing_file_ids)
**knowledge.model_dump(),
files=Files.get_file_metadatas_by_ids(existing_file_ids),
)

View file

@ -54,6 +54,7 @@ from open_webui.config import (
from open_webui.env import (
ENV,
SRC_LOG_LEVELS,
AIOHTTP_CLIENT_SESSION_SSL,
AIOHTTP_CLIENT_TIMEOUT,
AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST,
BYPASS_MODEL_ACCESS_CONTROL,
@ -91,6 +92,7 @@ async def send_get_request(url, key=None, user: UserModel = None):
else {}
),
},
ssl=AIOHTTP_CLIENT_SESSION_SSL,
) as response:
return await response.json()
except Exception as e:
@ -141,6 +143,7 @@ async def send_post_request(
else {}
),
},
ssl=AIOHTTP_CLIENT_SESSION_SSL,
)
r.raise_for_status()
@ -216,7 +219,8 @@ async def verify_connection(
key = form_data.key
async with aiohttp.ClientSession(
timeout=aiohttp.ClientTimeout(total=AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST)
trust_env=True,
timeout=aiohttp.ClientTimeout(total=AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST),
) as session:
try:
async with session.get(
@ -234,6 +238,7 @@ async def verify_connection(
else {}
),
},
ssl=AIOHTTP_CLIENT_SESSION_SSL,
) as r:
if r.status != 200:
detail = f"HTTP Error: {r.status}"
@ -1006,7 +1011,7 @@ class GenerateCompletionForm(BaseModel):
prompt: str
suffix: Optional[str] = None
images: Optional[list[str]] = None
format: Optional[str] = None
format: Optional[Union[dict, str]] = None
options: Optional[dict] = None
system: Optional[str] = None
template: Optional[str] = None
@ -1482,7 +1487,9 @@ async def download_file_stream(
timeout = aiohttp.ClientTimeout(total=600) # Set the timeout
async with aiohttp.ClientSession(timeout=timeout, trust_env=True) as session:
async with session.get(file_url, headers=headers) as response:
async with session.get(
file_url, headers=headers, ssl=AIOHTTP_CLIENT_SESSION_SSL
) as response:
total_size = int(response.headers.get("content-length", 0)) + current_size
with open(file_path, "ab+") as file:
@ -1497,7 +1504,8 @@ async def download_file_stream(
if done:
file.seek(0)
hashed = calculate_sha256(file)
chunk_size = 1024 * 1024 * 2
hashed = calculate_sha256(file, chunk_size)
file.seek(0)
url = f"{ollama_url}/api/blobs/sha256:{hashed}"

View file

@ -21,6 +21,7 @@ from open_webui.config import (
CACHE_DIR,
)
from open_webui.env import (
AIOHTTP_CLIENT_SESSION_SSL,
AIOHTTP_CLIENT_TIMEOUT,
AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST,
ENABLE_FORWARD_USER_INFO_HEADERS,
@ -74,6 +75,7 @@ async def send_get_request(url, key=None, user: UserModel = None):
else {}
),
},
ssl=AIOHTTP_CLIENT_SESSION_SSL,
) as response:
return await response.json()
except Exception as e:
@ -92,20 +94,19 @@ async def cleanup_response(
await session.close()
def openai_o1_o3_handler(payload):
def openai_o_series_handler(payload):
"""
Handle o1, o3 specific parameters
Handle "o" series specific parameters
"""
if "max_tokens" in payload:
# Remove "max_tokens" from the payload
# Convert "max_tokens" to "max_completion_tokens" for all o-series models
payload["max_completion_tokens"] = payload["max_tokens"]
del payload["max_tokens"]
# Fix: o1 and o3 do not support the "system" role directly.
# For older models like "o1-mini" or "o1-preview", use role "user".
# For newer o1/o3 models, replace "system" with "developer".
# Handle system role conversion based on model type
if payload["messages"][0]["role"] == "system":
model_lower = payload["model"].lower()
# Legacy models use "user" role instead of "system"
if model_lower.startswith("o1-mini") or model_lower.startswith("o1-preview"):
payload["messages"][0]["role"] = "user"
else:
@ -462,7 +463,8 @@ async def get_models(
r = None
async with aiohttp.ClientSession(
timeout=aiohttp.ClientTimeout(total=AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST)
trust_env=True,
timeout=aiohttp.ClientTimeout(total=AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST),
) as session:
try:
async with session.get(
@ -481,6 +483,7 @@ async def get_models(
else {}
),
},
ssl=AIOHTTP_CLIENT_SESSION_SSL,
) as r:
if r.status != 200:
# Extract response error details if available
@ -542,7 +545,8 @@ async def verify_connection(
key = form_data.key
async with aiohttp.ClientSession(
timeout=aiohttp.ClientTimeout(total=AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST)
trust_env=True,
timeout=aiohttp.ClientTimeout(total=AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST),
) as session:
try:
async with session.get(
@ -561,6 +565,7 @@ async def verify_connection(
else {}
),
},
ssl=AIOHTTP_CLIENT_SESSION_SSL,
) as r:
if r.status != 200:
# Extract response error details if available
@ -666,10 +671,10 @@ async def generate_chat_completion(
url = request.app.state.config.OPENAI_API_BASE_URLS[idx]
key = request.app.state.config.OPENAI_API_KEYS[idx]
# Fix: o1,o3 does not support the "max_tokens" parameter, Modify "max_tokens" to "max_completion_tokens"
is_o1_o3 = payload["model"].lower().startswith(("o1", "o3-"))
if is_o1_o3:
payload = openai_o1_o3_handler(payload)
# Check if model is from "o" series
is_o_series = payload["model"].lower().startswith(("o1", "o3", "o4"))
if is_o_series:
payload = openai_o_series_handler(payload)
elif "api.openai.com" not in url:
# Remove "max_completion_tokens" from the payload for backward compatibility
if "max_completion_tokens" in payload:
@ -723,6 +728,7 @@ async def generate_chat_completion(
else {}
),
},
ssl=AIOHTTP_CLIENT_SESSION_SSL,
)
# Check if response is SSE
@ -802,6 +808,7 @@ async def proxy(path: str, request: Request, user=Depends(get_verified_user)):
else {}
),
},
ssl=AIOHTTP_CLIENT_SESSION_SSL,
)
r.raise_for_status()

View file

@ -66,7 +66,7 @@ async def process_pipeline_inlet_filter(request, payload, user, models):
if "pipeline" in model:
sorted_filters.append(model)
async with aiohttp.ClientSession() as session:
async with aiohttp.ClientSession(trust_env=True) as session:
for filter in sorted_filters:
urlIdx = filter.get("urlIdx")
if urlIdx is None:
@ -115,7 +115,7 @@ async def process_pipeline_outlet_filter(request, payload, user, models):
if "pipeline" in model:
sorted_filters = [model] + sorted_filters
async with aiohttp.ClientSession() as session:
async with aiohttp.ClientSession(trust_env=True) as session:
for filter in sorted_filters:
urlIdx = filter.get("urlIdx")
if urlIdx is None:

View file

@ -61,6 +61,7 @@ from open_webui.retrieval.web.bing import search_bing
from open_webui.retrieval.web.exa import search_exa
from open_webui.retrieval.web.perplexity import search_perplexity
from open_webui.retrieval.web.sougou import search_sougou
from open_webui.retrieval.web.external import search_external
from open_webui.retrieval.utils import (
get_embedding_function,
@ -90,7 +91,12 @@ from open_webui.env import (
SRC_LOG_LEVELS,
DEVICE_TYPE,
DOCKER,
SENTENCE_TRANSFORMERS_BACKEND,
SENTENCE_TRANSFORMERS_MODEL_KWARGS,
SENTENCE_TRANSFORMERS_CROSS_ENCODER_BACKEND,
SENTENCE_TRANSFORMERS_CROSS_ENCODER_MODEL_KWARGS,
)
from open_webui.constants import ERROR_MESSAGES
log = logging.getLogger(__name__)
@ -117,6 +123,8 @@ def get_ef(
get_model_path(embedding_model, auto_update),
device=DEVICE_TYPE,
trust_remote_code=RAG_EMBEDDING_MODEL_TRUST_REMOTE_CODE,
backend=SENTENCE_TRANSFORMERS_BACKEND,
model_kwargs=SENTENCE_TRANSFORMERS_MODEL_KWARGS,
)
except Exception as e:
log.debug(f"Error loading SentenceTransformer: {e}")
@ -150,6 +158,8 @@ def get_rf(
get_model_path(reranking_model, auto_update),
device=DEVICE_TYPE,
trust_remote_code=RAG_RERANKING_MODEL_TRUST_REMOTE_CODE,
backend=SENTENCE_TRANSFORMERS_CROSS_ENCODER_BACKEND,
model_kwargs=SENTENCE_TRANSFORMERS_CROSS_ENCODER_MODEL_KWARGS,
)
except Exception as e:
log.error(f"CrossEncoder: {e}")
@ -418,6 +428,10 @@ async def get_rag_config(request: Request, user=Depends(get_admin_user)):
"FIRECRAWL_API_KEY": request.app.state.config.FIRECRAWL_API_KEY,
"FIRECRAWL_API_BASE_URL": request.app.state.config.FIRECRAWL_API_BASE_URL,
"TAVILY_EXTRACT_DEPTH": request.app.state.config.TAVILY_EXTRACT_DEPTH,
"EXTERNAL_WEB_SEARCH_URL": request.app.state.config.EXTERNAL_WEB_SEARCH_URL,
"EXTERNAL_WEB_SEARCH_API_KEY": request.app.state.config.EXTERNAL_WEB_SEARCH_API_KEY,
"EXTERNAL_WEB_LOADER_URL": request.app.state.config.EXTERNAL_WEB_LOADER_URL,
"EXTERNAL_WEB_LOADER_API_KEY": request.app.state.config.EXTERNAL_WEB_LOADER_API_KEY,
"YOUTUBE_LOADER_LANGUAGE": request.app.state.config.YOUTUBE_LOADER_LANGUAGE,
"YOUTUBE_LOADER_PROXY_URL": request.app.state.config.YOUTUBE_LOADER_PROXY_URL,
"YOUTUBE_LOADER_TRANSLATION": request.app.state.YOUTUBE_LOADER_TRANSLATION,
@ -463,6 +477,10 @@ class WebConfig(BaseModel):
FIRECRAWL_API_KEY: Optional[str] = None
FIRECRAWL_API_BASE_URL: Optional[str] = None
TAVILY_EXTRACT_DEPTH: Optional[str] = None
EXTERNAL_WEB_SEARCH_URL: Optional[str] = None
EXTERNAL_WEB_SEARCH_API_KEY: Optional[str] = None
EXTERNAL_WEB_LOADER_URL: Optional[str] = None
EXTERNAL_WEB_LOADER_API_KEY: Optional[str] = None
YOUTUBE_LOADER_LANGUAGE: Optional[List[str]] = None
YOUTUBE_LOADER_PROXY_URL: Optional[str] = None
YOUTUBE_LOADER_TRANSLATION: Optional[str] = None
@ -697,6 +715,18 @@ async def update_rag_config(
request.app.state.config.FIRECRAWL_API_BASE_URL = (
form_data.web.FIRECRAWL_API_BASE_URL
)
request.app.state.config.EXTERNAL_WEB_SEARCH_URL = (
form_data.web.EXTERNAL_WEB_SEARCH_URL
)
request.app.state.config.EXTERNAL_WEB_SEARCH_API_KEY = (
form_data.web.EXTERNAL_WEB_SEARCH_API_KEY
)
request.app.state.config.EXTERNAL_WEB_LOADER_URL = (
form_data.web.EXTERNAL_WEB_LOADER_URL
)
request.app.state.config.EXTERNAL_WEB_LOADER_API_KEY = (
form_data.web.EXTERNAL_WEB_LOADER_API_KEY
)
request.app.state.config.TAVILY_EXTRACT_DEPTH = (
form_data.web.TAVILY_EXTRACT_DEPTH
)
@ -778,6 +808,10 @@ async def update_rag_config(
"FIRECRAWL_API_KEY": request.app.state.config.FIRECRAWL_API_KEY,
"FIRECRAWL_API_BASE_URL": request.app.state.config.FIRECRAWL_API_BASE_URL,
"TAVILY_EXTRACT_DEPTH": request.app.state.config.TAVILY_EXTRACT_DEPTH,
"EXTERNAL_WEB_SEARCH_URL": request.app.state.config.EXTERNAL_WEB_SEARCH_URL,
"EXTERNAL_WEB_SEARCH_API_KEY": request.app.state.config.EXTERNAL_WEB_SEARCH_API_KEY,
"EXTERNAL_WEB_LOADER_URL": request.app.state.config.EXTERNAL_WEB_LOADER_URL,
"EXTERNAL_WEB_LOADER_API_KEY": request.app.state.config.EXTERNAL_WEB_LOADER_API_KEY,
"YOUTUBE_LOADER_LANGUAGE": request.app.state.config.YOUTUBE_LOADER_LANGUAGE,
"YOUTUBE_LOADER_PROXY_URL": request.app.state.config.YOUTUBE_LOADER_PROXY_URL,
"YOUTUBE_LOADER_TRANSLATION": request.app.state.YOUTUBE_LOADER_TRANSLATION,
@ -1465,6 +1499,14 @@ def search_web(request: Request, engine: str, query: str) -> list[SearchResult]:
raise Exception(
"No SOUGOU_API_SID or SOUGOU_API_SK found in environment variables"
)
elif engine == "external":
return search_external(
request.app.state.config.EXTERNAL_WEB_SEARCH_URL,
request.app.state.config.EXTERNAL_WEB_SEARCH_API_KEY,
query,
request.app.state.config.WEB_SEARCH_RESULT_COUNT,
request.app.state.config.WEB_SEARCH_DOMAIN_FILTER_LIST,
)
else:
raise Exception("No search engine API key found in environment variables")
@ -1477,8 +1519,11 @@ async def process_web_search(
logging.info(
f"trying to web search with {request.app.state.config.WEB_SEARCH_ENGINE, form_data.query}"
)
web_results = search_web(
request, request.app.state.config.WEB_SEARCH_ENGINE, form_data.query
web_results = await run_in_threadpool(
search_web,
request,
request.app.state.config.WEB_SEARCH_ENGINE,
form_data.query,
)
except Exception as e:
log.exception(e)
@ -1500,8 +1545,8 @@ async def process_web_search(
)
docs = await loader.aload()
urls = [
doc.metadata["source"] for doc in docs
] # only keep URLs which could be retrieved
doc.metadata.get("source") for doc in docs if doc.metadata.get("source")
] # only keep URLs
if request.app.state.config.BYPASS_WEB_SEARCH_EMBEDDING_AND_RETRIEVAL:
return {
@ -1521,19 +1566,22 @@ async def process_web_search(
collection_names = []
for doc_idx, doc in enumerate(docs):
if doc and doc.page_content:
collection_name = f"web-search-{calculate_sha256_string(form_data.query + '-' + urls[doc_idx])}"[
:63
]
try:
collection_name = f"web-search-{calculate_sha256_string(form_data.query + '-' + urls[doc_idx])}"[
:63
]
collection_names.append(collection_name)
await run_in_threadpool(
save_docs_to_vector_db,
request,
[doc],
collection_name,
overwrite=True,
user=user,
)
collection_names.append(collection_name)
await run_in_threadpool(
save_docs_to_vector_db,
request,
[doc],
collection_name,
overwrite=True,
user=user,
)
except Exception as e:
log.debug(f"error saving doc {doc_idx}: {e}")
return {
"status": True,

View file

@ -88,6 +88,8 @@ class ChatPermissions(BaseModel):
file_upload: bool = True
delete: bool = True
edit: bool = True
share: bool = True
export: bool = True
stt: bool = True
tts: bool = True
call: bool = True
@ -288,6 +290,21 @@ async def update_user_by_id(
form_data: UserUpdateForm,
session_user=Depends(get_admin_user),
):
# Prevent modification of the primary admin user by other admins
try:
first_user = Users.get_first_user()
if first_user and user_id == first_user.id and session_user.id != user_id:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail=ERROR_MESSAGES.ACTION_PROHIBITED,
)
except Exception as e:
log.error(f"Error checking primary admin status: {e}")
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
detail="Could not verify primary admin status.",
)
user = Users.get_user_by_id(user_id)
if user:
@ -335,6 +352,21 @@ async def update_user_by_id(
@router.delete("/{user_id}", response_model=bool)
async def delete_user_by_id(user_id: str, user=Depends(get_admin_user)):
# Prevent deletion of the primary admin user
try:
first_user = Users.get_first_user()
if first_user and user_id == first_user.id:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail=ERROR_MESSAGES.ACTION_PROHIBITED,
)
except Exception as e:
log.error(f"Error checking primary admin status: {e}")
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
detail="Could not verify primary admin status.",
)
if user.id != user_id:
result = Auths.delete_auth_by_id(user_id)
@ -346,6 +378,7 @@ async def delete_user_by_id(user_id: str, user=Depends(get_admin_user)):
detail=ERROR_MESSAGES.DELETE_USER_ERROR,
)
# Prevent self-deletion
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail=ERROR_MESSAGES.ACTION_PROHIBITED,

View file

@ -37,7 +37,7 @@ if TYPE_CHECKING:
class AuditLogEntry:
# `Metadata` audit level properties
id: str
user: dict[str, Any]
user: Optional[dict[str, Any]]
audit_level: str
verb: str
request_uri: str
@ -190,21 +190,40 @@ class AuditLoggingMiddleware:
finally:
await self._log_audit_entry(request, context)
async def _get_authenticated_user(self, request: Request) -> UserModel:
async def _get_authenticated_user(self, request: Request) -> Optional[UserModel]:
auth_header = request.headers.get("Authorization")
assert auth_header
user = get_current_user(request, None, get_http_authorization_cred(auth_header))
return user
try:
user = get_current_user(
request, None, get_http_authorization_cred(auth_header)
)
return user
except Exception as e:
logger.debug(f"Failed to get authenticated user: {str(e)}")
return None
def _should_skip_auditing(self, request: Request) -> bool:
if (
request.method not in {"POST", "PUT", "PATCH", "DELETE"}
or AUDIT_LOG_LEVEL == "NONE"
or not request.headers.get("authorization")
):
return True
ALWAYS_LOG_ENDPOINTS = {
"/api/v1/auths/signin",
"/api/v1/auths/signout",
"/api/v1/auths/signup",
}
path = request.url.path.lower()
for endpoint in ALWAYS_LOG_ENDPOINTS:
if path.startswith(endpoint):
return False # Do NOT skip logging for auth endpoints
# Skip logging if the request is not authenticated
if not request.headers.get("authorization"):
return True
# match either /api/<resource>/...(for the endpoint /api/chat case) or /api/v1/<resource>/...
pattern = re.compile(
r"^/api(?:/v1)?/(" + "|".join(self.excluded_paths) + r")\b"
@ -231,17 +250,32 @@ class AuditLoggingMiddleware:
try:
user = await self._get_authenticated_user(request)
user = (
user.model_dump(include={"id", "name", "email", "role"}) if user else {}
)
request_body = context.request_body.decode("utf-8", errors="replace")
response_body = context.response_body.decode("utf-8", errors="replace")
# Redact sensitive information
if "password" in request_body:
request_body = re.sub(
r'"password":\s*"(.*?)"',
'"password": "********"',
request_body,
)
entry = AuditLogEntry(
id=str(uuid.uuid4()),
user=user.model_dump(include={"id", "name", "email", "role"}),
user=user,
audit_level=self.audit_level.value,
verb=request.method,
request_uri=str(request.url),
response_status_code=context.metadata.get("response_status_code", None),
source_ip=request.client.host if request.client else None,
user_agent=request.headers.get("user-agent"),
request_object=context.request_body.decode("utf-8", errors="replace"),
response_object=context.response_body.decode("utf-8", errors="replace"),
request_object=request_body,
response_object=response_body,
)
self.audit_logger.write(entry)

View file

@ -50,7 +50,7 @@ class JupyterCodeExecuter:
self.password = password
self.timeout = timeout
self.kernel_id = ""
self.session = aiohttp.ClientSession(base_url=self.base_url)
self.session = aiohttp.ClientSession(trust_env=True, base_url=self.base_url)
self.params = {}
self.result = ResultModel()

View file

@ -888,16 +888,20 @@ async def process_chat_payload(request, form_data, user, metadata, model):
# If context is not empty, insert it into the messages
if len(sources) > 0:
context_string = ""
citated_file_idx = {}
for _, source in enumerate(sources, 1):
citation_idx = {}
for source in sources:
if "document" in source:
for doc_context, doc_meta in zip(
source["document"], source["metadata"]
):
file_id = doc_meta.get("file_id")
if file_id not in citated_file_idx:
citated_file_idx[file_id] = len(citated_file_idx) + 1
context_string += f'<source id="{citated_file_idx[file_id]}">{doc_context}</source>\n'
citation_id = (
doc_meta.get("source", None)
or source.get("source", {}).get("id", None)
or "N/A"
)
if citation_id not in citation_idx:
citation_idx[citation_id] = len(citation_idx) + 1
context_string += f'<source id="{citation_idx[citation_id]}">{doc_context}</source>\n'
context_string = context_string.strip()
prompt = get_last_user_message(form_data["messages"])
@ -1667,6 +1671,15 @@ async def process_chat_response(
if current_response_tool_call is None:
# Add the new tool call
delta_tool_call.setdefault(
"function", {}
)
delta_tool_call[
"function"
].setdefault("name", "")
delta_tool_call[
"function"
].setdefault("arguments", "")
response_tool_calls.append(
delta_tool_call
)

View file

@ -15,7 +15,7 @@ from starlette.responses import RedirectResponse
from open_webui.models.auths import Auths
from open_webui.models.users import Users
from open_webui.models.groups import Groups, GroupModel, GroupUpdateForm
from open_webui.models.groups import Groups, GroupModel, GroupUpdateForm, GroupForm
from open_webui.config import (
DEFAULT_USER_ROLE,
ENABLE_OAUTH_SIGNUP,
@ -23,6 +23,7 @@ from open_webui.config import (
OAUTH_PROVIDERS,
ENABLE_OAUTH_ROLE_MANAGEMENT,
ENABLE_OAUTH_GROUP_MANAGEMENT,
ENABLE_OAUTH_GROUP_CREATION,
OAUTH_ROLES_CLAIM,
OAUTH_GROUPS_CLAIM,
OAUTH_EMAIL_CLAIM,
@ -57,6 +58,7 @@ auth_manager_config.ENABLE_OAUTH_SIGNUP = ENABLE_OAUTH_SIGNUP
auth_manager_config.OAUTH_MERGE_ACCOUNTS_BY_EMAIL = OAUTH_MERGE_ACCOUNTS_BY_EMAIL
auth_manager_config.ENABLE_OAUTH_ROLE_MANAGEMENT = ENABLE_OAUTH_ROLE_MANAGEMENT
auth_manager_config.ENABLE_OAUTH_GROUP_MANAGEMENT = ENABLE_OAUTH_GROUP_MANAGEMENT
auth_manager_config.ENABLE_OAUTH_GROUP_CREATION = ENABLE_OAUTH_GROUP_CREATION
auth_manager_config.OAUTH_ROLES_CLAIM = OAUTH_ROLES_CLAIM
auth_manager_config.OAUTH_GROUPS_CLAIM = OAUTH_GROUPS_CLAIM
auth_manager_config.OAUTH_EMAIL_CLAIM = OAUTH_EMAIL_CLAIM
@ -152,6 +154,51 @@ class OAuthManager:
user_current_groups: list[GroupModel] = Groups.get_groups_by_member_id(user.id)
all_available_groups: list[GroupModel] = Groups.get_groups()
# Create groups if they don't exist and creation is enabled
if auth_manager_config.ENABLE_OAUTH_GROUP_CREATION:
log.debug("Checking for missing groups to create...")
all_group_names = {g.name for g in all_available_groups}
groups_created = False
# Determine creator ID: Prefer admin, fallback to current user if no admin exists
admin_user = Users.get_admin_user()
creator_id = admin_user.id if admin_user else user.id
log.debug(f"Using creator ID {creator_id} for potential group creation.")
for group_name in user_oauth_groups:
if group_name not in all_group_names:
log.info(
f"Group '{group_name}' not found via OAuth claim. Creating group..."
)
try:
new_group_form = GroupForm(
name=group_name,
description=f"Group '{group_name}' created automatically via OAuth.",
permissions=default_permissions, # Use default permissions from function args
user_ids=[], # Start with no users, user will be added later by subsequent logic
)
# Use determined creator ID (admin or fallback to current user)
created_group = Groups.insert_new_group(
creator_id, new_group_form
)
if created_group:
log.info(
f"Successfully created group '{group_name}' with ID {created_group.id} using creator ID {creator_id}"
)
groups_created = True
# Add to local set to prevent duplicate creation attempts in this run
all_group_names.add(group_name)
else:
log.error(
f"Failed to create group '{group_name}' via OAuth."
)
except Exception as e:
log.error(f"Error creating group '{group_name}' via OAuth: {e}")
# Refresh the list of all available groups if any were created
if groups_created:
all_available_groups = Groups.get_groups()
log.debug("Refreshed list of all available groups after creation.")
log.debug(f"Oauth Groups claim: {oauth_claim}")
log.debug(f"User oauth groups: {user_oauth_groups}")
log.debug(f"User's current groups: {[g.name for g in user_current_groups]}")
@ -257,7 +304,7 @@ class OAuthManager:
try:
access_token = token.get("access_token")
headers = {"Authorization": f"Bearer {access_token}"}
async with aiohttp.ClientSession() as session:
async with aiohttp.ClientSession(trust_env=True) as session:
async with session.get(
"https://api.github.com/user/emails", headers=headers
) as resp:
@ -339,7 +386,7 @@ class OAuthManager:
get_kwargs["headers"] = {
"Authorization": f"Bearer {access_token}",
}
async with aiohttp.ClientSession() as session:
async with aiohttp.ClientSession(trust_env=True) as session:
async with session.get(
picture_url, **get_kwargs
) as resp:

View file

@ -36,7 +36,10 @@ from langchain_core.utils.function_calling import (
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 AIOHTTP_CLIENT_TIMEOUT_TOOL_SERVER_DATA
from open_webui.env import (
AIOHTTP_CLIENT_TIMEOUT_TOOL_SERVER_DATA,
AIOHTTP_CLIENT_SESSION_TOOL_SERVER_SSL,
)
import copy
@ -371,51 +374,64 @@ def convert_openapi_to_tool_payload(openapi_spec):
for path, methods in openapi_spec.get("paths", {}).items():
for method, operation in methods.items():
tool = {
"type": "function",
"name": operation.get("operationId"),
"description": operation.get(
"description", operation.get("summary", "No description available.")
),
"parameters": {"type": "object", "properties": {}, "required": []},
}
# Extract path and query parameters
for param in operation.get("parameters", []):
param_name = param["name"]
param_schema = param.get("schema", {})
tool["parameters"]["properties"][param_name] = {
"type": param_schema.get("type"),
"description": param_schema.get("description", ""),
if operation.get("operationId"):
tool = {
"type": "function",
"name": operation.get("operationId"),
"description": operation.get(
"description",
operation.get("summary", "No description available."),
),
"parameters": {"type": "object", "properties": {}, "required": []},
}
if param.get("required"):
tool["parameters"]["required"].append(param_name)
# Extract and resolve requestBody if available
request_body = operation.get("requestBody")
if request_body:
content = request_body.get("content", {})
json_schema = content.get("application/json", {}).get("schema")
if json_schema:
resolved_schema = resolve_schema(
json_schema, openapi_spec.get("components", {})
)
if resolved_schema.get("properties"):
tool["parameters"]["properties"].update(
resolved_schema["properties"]
# Extract path and query parameters
for param in operation.get("parameters", []):
param_name = param["name"]
param_schema = param.get("schema", {})
description = param_schema.get("description", "")
if not description:
description = param.get("description") or ""
if param_schema.get("enum") and isinstance(
param_schema.get("enum"), list
):
description += (
f". Possible values: {', '.join(param_schema.get('enum'))}"
)
if "required" in resolved_schema:
tool["parameters"]["required"] = list(
set(
tool["parameters"]["required"]
+ resolved_schema["required"]
)
)
elif resolved_schema.get("type") == "array":
tool["parameters"] = resolved_schema # special case for array
tool["parameters"]["properties"][param_name] = {
"type": param_schema.get("type"),
"description": description,
}
if param.get("required"):
tool["parameters"]["required"].append(param_name)
tool_payload.append(tool)
# Extract and resolve requestBody if available
request_body = operation.get("requestBody")
if request_body:
content = request_body.get("content", {})
json_schema = content.get("application/json", {}).get("schema")
if json_schema:
resolved_schema = resolve_schema(
json_schema, openapi_spec.get("components", {})
)
if resolved_schema.get("properties"):
tool["parameters"]["properties"].update(
resolved_schema["properties"]
)
if "required" in resolved_schema:
tool["parameters"]["required"] = list(
set(
tool["parameters"]["required"]
+ resolved_schema["required"]
)
)
elif resolved_schema.get("type") == "array":
tool["parameters"] = (
resolved_schema # special case for array
)
tool_payload.append(tool)
return tool_payload
@ -431,8 +447,10 @@ async def get_tool_server_data(token: str, url: str) -> Dict[str, Any]:
error = None
try:
timeout = aiohttp.ClientTimeout(total=AIOHTTP_CLIENT_TIMEOUT_TOOL_SERVER_DATA)
async with aiohttp.ClientSession(timeout=timeout) as session:
async with session.get(url, headers=headers) as response:
async with aiohttp.ClientSession(timeout=timeout, trust_env=True) as session:
async with session.get(
url, headers=headers, ssl=AIOHTTP_CLIENT_SESSION_TOOL_SERVER_SSL
) as response:
if response.status != 200:
error_body = await response.json()
raise Exception(error_body)
@ -573,19 +591,26 @@ async def execute_tool_server(
if token:
headers["Authorization"] = f"Bearer {token}"
async with aiohttp.ClientSession() as session:
async with aiohttp.ClientSession(trust_env=True) as session:
request_method = getattr(session, http_method.lower())
if http_method in ["post", "put", "patch"]:
async with request_method(
final_url, json=body_params, headers=headers
final_url,
json=body_params,
headers=headers,
ssl=AIOHTTP_CLIENT_SESSION_TOOL_SERVER_SSL,
) as response:
if response.status >= 400:
text = await response.text()
raise Exception(f"HTTP error {response.status}: {text}")
return await response.json()
else:
async with request_method(final_url, headers=headers) as response:
async with request_method(
final_url,
headers=headers,
ssl=AIOHTTP_CLIENT_SESSION_TOOL_SERVER_SSL,
) as response:
if response.status >= 400:
text = await response.text()
raise Exception(f"HTTP error {response.status}: {text}")

View file

@ -50,10 +50,10 @@ qdrant-client~=1.12.0
opensearch-py==2.8.0
playwright==1.49.1 # Caution: version must match docker-compose.playwright.yaml
elasticsearch==8.17.1
pinecone==6.0.2
transformers
sentence-transformers==3.3.1
sentence-transformers==4.1.0
accelerate
colbert-ai==0.2.21
einops==0.8.1

4
package-lock.json generated
View file

@ -1,12 +1,12 @@
{
"name": "open-webui",
"version": "0.6.5",
"version": "0.6.6",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "open-webui",
"version": "0.6.5",
"version": "0.6.6",
"dependencies": {
"@azure/msal-browser": "^4.5.0",
"@codemirror/lang-javascript": "^6.2.2",

View file

@ -1,6 +1,6 @@
{
"name": "open-webui",
"version": "0.6.5",
"version": "0.6.6",
"private": true,
"scripts": {
"dev": "npm run pyodide:fetch && vite dev --host",

View file

@ -58,9 +58,10 @@ dependencies = [
"opensearch-py==2.8.0",
"playwright==1.49.1",
"elasticsearch==8.17.1",
"pinecone==6.0.2",
"transformers",
"sentence-transformers==3.3.1",
"sentence-transformers==4.1.0",
"accelerate",
"colbert-ai==0.2.21",
"einops==0.8.1",

View file

@ -30,9 +30,10 @@
'bing',
'exa',
'perplexity',
'sougou'
'sougou',
'external'
];
let webLoaderEngines = ['playwright', 'firecrawl', 'tavily'];
let webLoaderEngines = ['playwright', 'firecrawl', 'tavily', 'external'];
let webConfig = null;
@ -431,6 +432,37 @@
/>
</div>
</div>
{:else if webConfig.WEB_SEARCH_ENGINE === 'external'}
<div class="mb-2.5 flex w-full flex-col">
<div>
<div class=" self-center text-xs font-medium mb-1">
{$i18n.t('External Web Search URL')}
</div>
<div class="flex w-full">
<div class="flex-1">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
type="text"
placeholder={$i18n.t('Enter External Web Search URL')}
bind:value={webConfig.EXTERNAL_WEB_SEARCH_URL}
autocomplete="off"
/>
</div>
</div>
</div>
<div class="mt-2">
<div class=" self-center text-xs font-medium mb-1">
{$i18n.t('External Web Search API Key')}
</div>
<SensitiveInput
placeholder={$i18n.t('Enter External Web Search API Key')}
bind:value={webConfig.EXTERNAL_WEB_SEARCH_API_KEY}
/>
</div>
</div>
{/if}
{/if}
@ -652,6 +684,37 @@
</div>
{/if}
</div>
{:else if webConfig.WEB_LOADER_ENGINE === 'external'}
<div class="mb-2.5 flex w-full flex-col">
<div>
<div class=" self-center text-xs font-medium mb-1">
{$i18n.t('External Web Loader URL')}
</div>
<div class="flex w-full">
<div class="flex-1">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
type="text"
placeholder={$i18n.t('Enter External Web Loader URL')}
bind:value={webConfig.EXTERNAL_WEB_LOADER_URL}
autocomplete="off"
/>
</div>
</div>
</div>
<div class="mt-2">
<div class=" self-center text-xs font-medium mb-1">
{$i18n.t('External Web Loader API Key')}
</div>
<SensitiveInput
placeholder={$i18n.t('Enter External Web Loader API Key')}
bind:value={webConfig.EXTERNAL_WEB_LOADER_API_KEY}
/>
</div>
</div>
{/if}
<div class=" mb-2.5 flex w-full justify-between">

View file

@ -63,6 +63,8 @@
file_upload: true,
delete: true,
edit: true,
share: true,
export: true,
stt: true,
tts: true,
call: true,

View file

@ -24,6 +24,8 @@
file_upload: true,
delete: true,
edit: true,
share: true,
export: true,
stt: true,
tts: true,
call: true,
@ -276,6 +278,22 @@
<Switch bind:state={permissions.chat.edit} />
</div>
<div class=" flex w-full justify-between my-2 pr-2">
<div class=" self-center text-xs font-medium">
{$i18n.t('Allow Chat Share')}
</div>
<Switch bind:state={permissions.chat.share} />
</div>
<div class=" flex w-full justify-between my-2 pr-2">
<div class=" self-center text-xs font-medium">
{$i18n.t('Allow Chat Export')}
</div>
<Switch bind:state={permissions.chat.export} />
</div>
<div class=" flex w-full justify-between my-2 pr-2">
<div class=" self-center text-xs font-medium">
{$i18n.t('Allow Speech to Text')}

View file

@ -262,7 +262,7 @@
{#if threadId !== null}
<Drawer
show={threadId !== null}
on:close={() => {
onClose={() => {
threadId = null;
}}
>

View file

@ -236,9 +236,11 @@
await tick();
await tick();
const messageElement = document.getElementById(`message-${message.id}`);
if (messageElement) {
messageElement.scrollIntoView({ behavior: 'smooth' });
if ($settings?.scrollOnBranchChange ?? true) {
const messageElement = document.getElementById(`message-${message.id}`);
if (messageElement) {
messageElement.scrollIntoView({ behavior: 'smooth' });
}
}
await tick();

View file

@ -140,7 +140,7 @@
{#if $showControls}
<Drawer
show={$showControls}
on:close={() => {
onClose={() => {
showControls.set(false);
}}
>

View file

@ -395,39 +395,37 @@
</div>
<div class="w-full relative">
{#if atSelectedModel !== undefined || selectedToolIds.length > 0 || webSearchEnabled || ($settings?.webSearch ?? false) === 'always' || imageGenerationEnabled || codeInterpreterEnabled}
{#if atSelectedModel !== undefined}
<div
class="px-3 pb-0.5 pt-1.5 text-left w-full flex flex-col absolute bottom-0 left-0 right-0 bg-linear-to-t from-white dark:from-gray-900 z-10"
>
{#if atSelectedModel !== undefined}
<div class="flex items-center justify-between w-full">
<div class="pl-[1px] flex items-center gap-2 text-sm dark:text-gray-500">
<img
crossorigin="anonymous"
alt="model profile"
class="size-3.5 max-w-[28px] object-cover rounded-full"
src={$models.find((model) => model.id === atSelectedModel.id)?.info?.meta
?.profile_image_url ??
($i18n.language === 'dg-DG'
? `/doge.png`
: `${WEBUI_BASE_URL}/static/favicon.png`)}
/>
<div class="translate-y-[0.5px]">
Talking to <span class=" font-medium">{atSelectedModel.name}</span>
</div>
</div>
<div>
<button
class="flex items-center dark:text-gray-500"
on:click={() => {
atSelectedModel = undefined;
}}
>
<XMark />
</button>
<div class="flex items-center justify-between w-full">
<div class="pl-[1px] flex items-center gap-2 text-sm dark:text-gray-500">
<img
crossorigin="anonymous"
alt="model profile"
class="size-3.5 max-w-[28px] object-cover rounded-full"
src={$models.find((model) => model.id === atSelectedModel.id)?.info?.meta
?.profile_image_url ??
($i18n.language === 'dg-DG'
? `/doge.png`
: `${WEBUI_BASE_URL}/static/favicon.png`)}
/>
<div class="translate-y-[0.5px]">
Talking to <span class=" font-medium">{atSelectedModel.name}</span>
</div>
</div>
{/if}
<div>
<button
class="flex items-center dark:text-gray-500"
on:click={() => {
atSelectedModel = undefined;
}}
>
<XMark />
</button>
</div>
</div>
</div>
{/if}
@ -1063,9 +1061,9 @@
);
}
}}
uploadOneDriveHandler={async () => {
uploadOneDriveHandler={async (authorityType) => {
try {
const fileData = await pickAndDownloadFile();
const fileData = await pickAndDownloadFile(authorityType);
if (fileData) {
const file = new File([fileData.blob], fileData.name, {
type: fileData.blob.type || 'application/octet-stream'

View file

@ -229,94 +229,119 @@
{/if}
{#if $config?.features?.enable_onedrive_integration}
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-xl"
on:click={() => {
uploadOneDriveHandler();
}}
>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" class="w-5 h-5" fill="none">
<mask
id="mask0_87_7796"
style="mask-type:alpha"
maskUnits="userSpaceOnUse"
x="0"
y="6"
width="32"
height="20"
<DropdownMenu.Sub>
<DropdownMenu.SubTrigger
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-xl w-full"
>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" class="w-5 h-5" fill="none">
<mask
id="mask0_87_7796"
style="mask-type:alpha"
maskUnits="userSpaceOnUse"
x="0"
y="6"
width="32"
height="20"
>
<path
d="M7.82979 26C3.50549 26 0 22.5675 0 18.3333C0 14.1921 3.35322 10.8179 7.54613 10.6716C9.27535 7.87166 12.4144 6 16 6C20.6308 6 24.5169 9.12183 25.5829 13.3335C29.1316 13.3603 32 16.1855 32 19.6667C32 23.0527 29 26 25.8723 25.9914L7.82979 26Z"
fill="#C4C4C4"
/>
</mask>
<g mask="url(#mask0_87_7796)">
<path
d="M7.83017 26.0001C5.37824 26.0001 3.18957 24.8966 1.75391 23.1691L18.0429 16.3335L30.7089 23.4647C29.5926 24.9211 27.9066 26.0001 26.0004 25.9915C23.1254 26.0001 12.0629 26.0001 7.83017 26.0001Z"
fill="url(#paint0_linear_87_7796)"
/>
<path
d="M25.5785 13.3149L18.043 16.3334L30.709 23.4647C31.5199 22.4065 32.0004 21.0916 32.0004 19.6669C32.0004 16.1857 29.1321 13.3605 25.5833 13.3337C25.5817 13.3274 25.5801 13.3212 25.5785 13.3149Z"
fill="url(#paint1_linear_87_7796)"
/>
<path
d="M7.06445 10.7028L18.0423 16.3333L25.5779 13.3148C24.5051 9.11261 20.6237 6 15.9997 6C12.4141 6 9.27508 7.87166 7.54586 10.6716C7.3841 10.6773 7.22358 10.6877 7.06445 10.7028Z"
fill="url(#paint2_linear_87_7796)"
/>
<path
d="M1.7535 23.1687L18.0425 16.3331L7.06471 10.7026C3.09947 11.0792 0 14.3517 0 18.3331C0 20.1665 0.657197 21.8495 1.7535 23.1687Z"
fill="url(#paint3_linear_87_7796)"
/>
</g>
<defs>
<linearGradient
id="paint0_linear_87_7796"
x1="4.42591"
y1="24.6668"
x2="27.2309"
y2="23.2764"
gradientUnits="userSpaceOnUse"
>
<stop stop-color="#2086B8" />
<stop offset="1" stop-color="#46D3F6" />
</linearGradient>
<linearGradient
id="paint1_linear_87_7796"
x1="23.8302"
y1="19.6668"
x2="30.2108"
y2="15.2082"
gradientUnits="userSpaceOnUse"
>
<stop stop-color="#1694DB" />
<stop offset="1" stop-color="#62C3FE" />
</linearGradient>
<linearGradient
id="paint2_linear_87_7796"
x1="8.51037"
y1="7.33333"
x2="23.3335"
y2="15.9348"
gradientUnits="userSpaceOnUse"
>
<stop stop-color="#0D3D78" />
<stop offset="1" stop-color="#063B83" />
</linearGradient>
<linearGradient
id="paint3_linear_87_7796"
x1="-0.340429"
y1="19.9998"
x2="14.5634"
y2="14.4649"
gradientUnits="userSpaceOnUse"
>
<stop stop-color="#16589B" />
<stop offset="1" stop-color="#1464B7" />
</linearGradient>
</defs>
</svg>
<div class="line-clamp-1">{$i18n.t('Microsoft OneDrive')}</div>
</DropdownMenu.SubTrigger>
<DropdownMenu.SubContent
class="w-[calc(100vw-2rem)] max-w-[280px] rounded-xl px-1 py-1 border border-gray-300/30 dark:border-gray-700/50 z-50 bg-white dark:bg-gray-850 dark:text-white shadow-sm"
side={$mobile ? 'bottom' : 'right'}
sideOffset={$mobile ? 5 : 0}
alignOffset={$mobile ? 0 : -8}
>
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-xl"
on:click={() => {
uploadOneDriveHandler('personal');
}}
>
<path
d="M7.82979 26C3.50549 26 0 22.5675 0 18.3333C0 14.1921 3.35322 10.8179 7.54613 10.6716C9.27535 7.87166 12.4144 6 16 6C20.6308 6 24.5169 9.12183 25.5829 13.3335C29.1316 13.3603 32 16.1855 32 19.6667C32 23.0527 29 26 25.8723 25.9914L7.82979 26Z"
fill="#C4C4C4"
/>
</mask>
<g mask="url(#mask0_87_7796)">
<path
d="M7.83017 26.0001C5.37824 26.0001 3.18957 24.8966 1.75391 23.1691L18.0429 16.3335L30.7089 23.4647C29.5926 24.9211 27.9066 26.0001 26.0004 25.9915C23.1254 26.0001 12.0629 26.0001 7.83017 26.0001Z"
fill="url(#paint0_linear_87_7796)"
/>
<path
d="M25.5785 13.3149L18.043 16.3334L30.709 23.4647C31.5199 22.4065 32.0004 21.0916 32.0004 19.6669C32.0004 16.1857 29.1321 13.3605 25.5833 13.3337C25.5817 13.3274 25.5801 13.3212 25.5785 13.3149Z"
fill="url(#paint1_linear_87_7796)"
/>
<path
d="M7.06445 10.7028L18.0423 16.3333L25.5779 13.3148C24.5051 9.11261 20.6237 6 15.9997 6C12.4141 6 9.27508 7.87166 7.54586 10.6716C7.3841 10.6773 7.22358 10.6877 7.06445 10.7028Z"
fill="url(#paint2_linear_87_7796)"
/>
<path
d="M1.7535 23.1687L18.0425 16.3331L7.06471 10.7026C3.09947 11.0792 0 14.3517 0 18.3331C0 20.1665 0.657197 21.8495 1.7535 23.1687Z"
fill="url(#paint3_linear_87_7796)"
/>
</g>
<defs>
<linearGradient
id="paint0_linear_87_7796"
x1="4.42591"
y1="24.6668"
x2="27.2309"
y2="23.2764"
gradientUnits="userSpaceOnUse"
>
<stop stop-color="#2086B8" />
<stop offset="1" stop-color="#46D3F6" />
</linearGradient>
<linearGradient
id="paint1_linear_87_7796"
x1="23.8302"
y1="19.6668"
x2="30.2108"
y2="15.2082"
gradientUnits="userSpaceOnUse"
>
<stop stop-color="#1694DB" />
<stop offset="1" stop-color="#62C3FE" />
</linearGradient>
<linearGradient
id="paint2_linear_87_7796"
x1="8.51037"
y1="7.33333"
x2="23.3335"
y2="15.9348"
gradientUnits="userSpaceOnUse"
>
<stop stop-color="#0D3D78" />
<stop offset="1" stop-color="#063B83" />
</linearGradient>
<linearGradient
id="paint3_linear_87_7796"
x1="-0.340429"
y1="19.9998"
x2="14.5634"
y2="14.4649"
gradientUnits="userSpaceOnUse"
>
<stop stop-color="#16589B" />
<stop offset="1" stop-color="#1464B7" />
</linearGradient>
</defs>
</svg>
<div class="line-clamp-1">{$i18n.t('OneDrive')}</div>
</DropdownMenu.Item>
<div class="line-clamp-1">{$i18n.t('Microsoft OneDrive (personal)')}</div>
</DropdownMenu.Item>
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-xl"
on:click={() => {
uploadOneDriveHandler('organizations');
}}
>
<div class="flex flex-col">
<div class="line-clamp-1">{$i18n.t('Microsoft OneDrive (work/school)')}</div>
<div class="text-xs text-gray-500">Includes SharePoint</div>
</div>
</DropdownMenu.Item>
</DropdownMenu.SubContent>
</DropdownMenu.Sub>
{/if}
</DropdownMenu.Content>
</div>

View file

@ -83,6 +83,7 @@
});
return acc;
}, []);
console.log('citations', citations);
showRelevance = calculateShowRelevance(citations);
showPercentage = shouldShowPercentage(citations);

View file

@ -139,13 +139,16 @@
{percentage.toFixed(2)}%
</span>
{/if}
{#if typeof document?.distance === 'number'}
<span class="text-gray-500 dark:text-gray-500">
({(document?.distance ?? 0).toFixed(4)})
</span>
{/if}
{:else if typeof document?.distance === 'number'}
<span class="text-gray-500 dark:text-gray-500">
({(document?.distance ?? 0).toFixed(4)})
</span>
{:else}
<span class="text-gray-500 dark:text-gray-500">
{(document?.distance ?? 0).toFixed(4)}
</span>
{/if}
</div>
</Tooltip>

View file

@ -154,11 +154,11 @@
}, [])}
{onSourceClick}
{onTaskClick}
on:update={(e) => {
dispatch('update', e.detail);
onUpdate={(value) => {
dispatch('update', value);
}}
on:code={(e) => {
const { lang, code } = e.detail;
onCode={(value) => {
const { lang, code } = value;
if (
($settings?.detectArtifacts ?? true) &&

View file

@ -7,9 +7,6 @@
import markedKatexExtension from '$lib/utils/marked/katex-extension';
import MarkdownTokens from './Markdown/MarkdownTokens.svelte';
import { createEventDispatcher } from 'svelte';
const dispatch = createEventDispatcher();
export let id = '';
export let content;
@ -18,6 +15,9 @@
export let sourceIds = [];
export let onUpdate = () => {};
export let onCode = () => {};
export let onSourceClick = () => {};
export let onTaskClick = () => {};
@ -40,17 +40,5 @@
</script>
{#key id}
<MarkdownTokens
{tokens}
{id}
{save}
{onTaskClick}
{onSourceClick}
on:update={(e) => {
dispatch('update', e.detail);
}}
on:code={(e) => {
dispatch('code', e.detail);
}}
/>
<MarkdownTokens {tokens} {id} {save} {onTaskClick} {onSourceClick} {onUpdate} {onCode} />
{/key}

View file

@ -0,0 +1,49 @@
<script lang="ts">
import DOMPurify from 'dompurify';
import type { Token } from 'marked';
import { WEBUI_BASE_URL } from '$lib/constants';
import Source from './Source.svelte';
export let id: string;
export let token: Token;
export let onSourceClick: Function = () => {};
let html: string | null = null;
$: if (token.type === 'html' && token?.text) {
html = DOMPurify.sanitize(token.text);
} else {
html = null;
}
</script>
{#if token.type === 'html'}
{#if html && html.includes('<video')}
{@html html}
{:else if token.text && token.text.match(/<iframe\s+[^>]*src="https:\/\/www\.youtube\.com\/embed\/([a-zA-Z0-9_-]{11})(?:\?[^"]*)?"[^>]*><\/iframe>/)}
{@const match = token.text.match(
/<iframe\s+[^>]*src="https:\/\/www\.youtube\.com\/embed\/([a-zA-Z0-9_-]{11})(?:\?[^"]*)?"[^>]*><\/iframe>/
)}
{@const ytId = match && match[1]}
{#if ytId}
<iframe
class="w-full aspect-video my-2"
src={`https://www.youtube.com/embed/${ytId}`}
title="YouTube video player"
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
referrerpolicy="strict-origin-when-cross-origin"
allowfullscreen
>
</iframe>
{/if}
{:else if token.text.includes(`<iframe src="${WEBUI_BASE_URL}/api/v1/files/`)}
{@html `${token.text}`}
{:else if token.text.includes(`<source_id`)}
<Source {id} {token} onClick={onSourceClick} />
{:else}
{token.text}
{/if}
{/if}

View file

@ -13,6 +13,7 @@
import Image from '$lib/components/common/Image.svelte';
import KatexRenderer from './KatexRenderer.svelte';
import Source from './Source.svelte';
import HtmlToken from './HTMLToken.svelte';
export let id: string;
export let tokens: Token[];
@ -23,16 +24,7 @@
{#if token.type === 'escape'}
{unescapeHtml(token.text)}
{:else if token.type === 'html'}
{@const html = DOMPurify.sanitize(token.text)}
{#if html && html.includes('<video')}
{@html html}
{:else if token.text.includes(`<iframe src="${WEBUI_BASE_URL}/api/v1/files/`)}
{@html `${token.text}`}
{:else if token.text.includes(`<source_id`)}
<Source {id} {token} onClick={onSourceClick} />
{:else}
{@html html}
{/if}
<HtmlToken {id} {token} {onSourceClick} />
{:else if token.type === 'link'}
{#if token.tokens}
<a href={token.href} target="_blank" rel="nofollow" title={token.title}>

View file

@ -1,6 +1,6 @@
<script lang="ts">
import DOMPurify from 'dompurify';
import { createEventDispatcher, onMount, getContext } from 'svelte';
import { onMount, getContext } from 'svelte';
const i18n = getContext('i18n');
import fileSaver from 'file-saver';
@ -21,8 +21,7 @@
import Source from './Source.svelte';
import { settings } from '$lib/stores';
const dispatch = createEventDispatcher();
import HtmlToken from './HTMLToken.svelte';
export let id: string;
export let tokens: Token[];
@ -31,6 +30,9 @@
export let save = false;
export let onUpdate: Function = () => {};
export let onCode: Function = () => {};
export let onTaskClick: Function = () => {};
export let onSourceClick: Function = () => {};
@ -93,11 +95,9 @@
code={token?.text ?? ''}
{attributes}
{save}
onCode={(value) => {
dispatch('code', value);
}}
{onCode}
onSave={(value) => {
dispatch('update', {
onUpdate({
raw: token.raw,
oldContent: token.text,
newContent: value
@ -267,16 +267,7 @@
</div>
</Collapsible>
{:else if token.type === 'html'}
{@const html = DOMPurify.sanitize(token.text)}
{#if html && html.includes('<video')}
{@html html}
{:else if token.text.includes(`<iframe src="${WEBUI_BASE_URL}/api/v1/files/`)}
{@html `${token.text}`}
{:else if token.text.includes(`<source_id`)}
<Source {id} {token} onClick={onSourceClick} />
{:else}
{token.text}
{/if}
<HtmlToken {id} {token} {onSourceClick} />
{:else if token.type === 'iframe'}
<iframe
src="{WEBUI_BASE_URL}/api/v1/files/{token.fileId}/content"

View file

@ -200,9 +200,11 @@
await initHandler();
await tick();
const messageElement = document.getElementById(`message-${messageId}`);
if (messageElement) {
messageElement.scrollIntoView({ block: 'start' });
if ($settings?.scrollOnBranchChange ?? true) {
const messageElement = document.getElementById(`message-${messageId}`);
if (messageElement) {
messageElement.scrollIntoView({ block: 'start' });
}
}
});
</script>
@ -238,10 +240,9 @@
messageChildrenIds = history.messages[currentMessageId].childrenIds;
}
history.currentId = currentMessageId;
await tick();
await updateChat();
triggerScroll();
// await tick();
// await updateChat();
// triggerScroll();
}
}}
>
@ -293,7 +294,7 @@
<div class="w-full rounded-xl pl-5 pr-2 py-2">
<Name>
Merged Response
{$i18n.t('Merged Response')}
{#if message.timestamp}
<span

View file

@ -65,10 +65,12 @@
await tick();
messageEditTextAreaElement.style.height = '';
messageEditTextAreaElement.style.height = `${messageEditTextAreaElement.scrollHeight}px`;
if (messageEditTextAreaElement) {
messageEditTextAreaElement.style.height = '';
messageEditTextAreaElement.style.height = `${messageEditTextAreaElement.scrollHeight}px`;
messageEditTextAreaElement?.focus();
messageEditTextAreaElement?.focus();
}
};
const editMessageConfirmHandler = async (submit = true) => {

View file

@ -778,7 +778,7 @@
</div>
</button>
</div>
{:else if filteredItems.length === 0}
{:else}
<div class="mb-3"></div>
{/if}

View file

@ -159,15 +159,21 @@ Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
4. Notwithstanding any other provision of this License, and as a material condition of the rights granted herein, licensees are strictly prohibited from altering, removing, obscuring, or replacing any "Open WebUI" branding, including but not limited to the name, logo, or any visual, textual, or symbolic identifiers that distinguish the software and its interfaces, in any deployment or distribution, regardless of the number of users, except as explicitly set forth in Clauses 5 and 6 below.
5. The branding restriction enumerated in Clause 4 shall not apply in the following limited circumstances: (i) deployments or distributions where the total number of end users (defined as individual natural persons with direct access to the application) does not exceed fifty (50) within any rolling thirty (30) day period; (ii) cases in which the licensee is an official contributor to the codebase—with a substantive code change successfully merged into the main branch of the official codebase maintained by the copyright holder—who has obtained specific prior written permission for branding adjustment from the copyright holder; or (iii) where the licensee has obtained a duly executed enterprise license expressly permitting such modification. For all other cases, any removal or alteration of the "Open WebUI" branding shall constitute a material breach of license.
6. All code, modifications, or derivative works incorporated into this project prior to the incorporation of this branding clause remain licensed under the BSD 3-Clause License, and prior contributors retain all BSD-3 rights therein; if any such contributor requests the removal of their BSD-3-licensed code, the copyright holder will do so, and any replacement code will be licensed under the project's primary license then in effect. By contributing after this clause's adoption, you agree to the project's Contributor License Agreement (CLA) and to these updated terms for all new contributions.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE

View file

@ -140,28 +140,31 @@
</div>
<div class=" self-center text-sm font-medium">{$i18n.t('Import Chats')}</div>
</button>
<button
class=" flex rounded-md py-2 px-3.5 w-full hover:bg-gray-200 dark:hover:bg-gray-800 transition"
on:click={() => {
exportChats();
}}
>
<div class=" self-center mr-3">
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 16 16"
fill="currentColor"
class="w-4 h-4"
>
<path
fill-rule="evenodd"
d="M4 2a1.5 1.5 0 0 0-1.5 1.5v9A1.5 1.5 0 0 0 4 14h8a1.5 1.5 0 0 0 1.5-1.5V6.621a1.5 1.5 0 0 0-.44-1.06L9.94 2.439A1.5 1.5 0 0 0 8.878 2H4Zm4 3.5a.75.75 0 0 1 .75.75v2.69l.72-.72a.75.75 0 1 1 1.06 1.06l-2 2a.75.75 0 0 1-1.06 0l-2-2a.75.75 0 0 1 1.06-1.06l.72.72V6.25A.75.75 0 0 1 8 5.5Z"
clip-rule="evenodd"
/>
</svg>
</div>
<div class=" self-center text-sm font-medium">{$i18n.t('Export Chats')}</div>
</button>
{#if $user?.role === 'admin' || ($user.permissions?.chat?.export ?? true)}
<button
class=" flex rounded-md py-2 px-3.5 w-full hover:bg-gray-200 dark:hover:bg-gray-800 transition"
on:click={() => {
exportChats();
}}
>
<div class=" self-center mr-3">
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 16 16"
fill="currentColor"
class="w-4 h-4"
>
<path
fill-rule="evenodd"
d="M4 2a1.5 1.5 0 0 0-1.5 1.5v9A1.5 1.5 0 0 0 4 14h8a1.5 1.5 0 0 0 1.5-1.5V6.621a1.5 1.5 0 0 0-.44-1.06L9.94 2.439A1.5 1.5 0 0 0 8.878 2H4Zm4 3.5a.75.75 0 0 1 .75.75v2.69l.72-.72a.75.75 0 1 1 1.06 1.06l-2 2a.75.75 0 0 1-1.06 0l-2-2a.75.75 0 0 1 1.06-1.06l.72.72V6.25A.75.75 0 0 1 8 5.5Z"
clip-rule="evenodd"
/>
</svg>
</div>
<div class=" self-center text-sm font-medium">{$i18n.t('Export Chats')}</div>
</button>
{/if}
</div>
<hr class=" border-gray-100 dark:border-gray-850" />

View file

@ -30,7 +30,9 @@
// Interface
let defaultModelId = '';
let showUsername = false;
let notificationSound = true;
let notificationSoundAlways = false;
let detectArtifacts = true;
@ -117,6 +119,11 @@
saveSettings({ notificationSound: notificationSound });
};
const toggleNotificationSoundAlways = async () => {
notificationSoundAlways = !notificationSoundAlways;
saveSettings({ notificationSoundAlways: notificationSoundAlways });
};
const toggleShowChangelog = async () => {
showChangelog = !showChangelog;
saveSettings({ showChangelog: showChangelog });
@ -294,7 +301,8 @@
chatDirection = $settings.chatDirection ?? 'auto';
userLocation = $settings.userLocation ?? false;
notificationSound = $settings.notificationSound ?? true;
notificationSound = $settings?.notificationSound ?? true;
notificationSoundAlways = $settings?.notificationSoundAlways ?? false;
hapticFeedback = $settings.hapticFeedback ?? false;
ctrlEnterToSend = $settings.ctrlEnterToSend ?? false;
@ -477,6 +485,30 @@
</div>
</div>
{#if notificationSound}
<div>
<div class=" py-0.5 flex w-full justify-between">
<div class=" self-center text-xs">
{$i18n.t('Always Play Notification Sound')}
</div>
<button
class="p-1 px-3 text-xs flex rounded-sm transition"
on:click={() => {
toggleNotificationSoundAlways();
}}
type="button"
>
{#if notificationSoundAlways === true}
<span class="ml-2 self-center">{$i18n.t('On')}</span>
{:else}
<span class="ml-2 self-center">{$i18n.t('Off')}</span>
{/if}
</button>
</div>
</div>
{/if}
{#if $user?.role === 'admin'}
<div>
<div class=" py-0.5 flex w-full justify-between">
@ -855,7 +887,7 @@
<div>
<div class=" py-0.5 flex w-full justify-between">
<div class=" self-center text-xs">
{$i18n.t('Scroll to bottom when switching between branches')}
{$i18n.t('Scroll On Branch Change')}
</div>
<button

View file

@ -1,13 +1,12 @@
<script lang="ts">
import { onDestroy, onMount, createEventDispatcher } from 'svelte';
import { onDestroy, onMount } from 'svelte';
import { flyAndScale } from '$lib/utils/transitions';
import { fade, fly, slide } from 'svelte/transition';
import { isApp } from '$lib/stores';
const dispatch = createEventDispatcher();
export let show = false;
export let className = '';
export let onClose = () => {};
let modalElement = null;
let mounted = false;
@ -33,7 +32,7 @@
window.addEventListener('keydown', handleKeyDown);
document.body.style.overflow = 'hidden';
} else if (modalElement) {
dispatch('close');
onClose();
window.removeEventListener('keydown', handleKeyDown);
if (document.body.contains(modalElement)) {

View file

@ -4,6 +4,7 @@
export let value = '';
export let placeholder = '';
export let rows = 1;
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';
@ -29,7 +30,9 @@
const resize = () => {
if (textareaElement) {
textareaElement.style.height = '';
textareaElement.style.height = `${textareaElement.scrollHeight}px`;
textareaElement.style.height = minSize
? `${Math.max(textareaElement.scrollHeight, minSize)}px`
: `${textareaElement.scrollHeight}px`;
}
};
</script>

View file

@ -18,7 +18,8 @@
showArtifacts,
mobile,
temporaryChatEnabled,
theme
theme,
user
} from '$lib/stores';
import { flyAndScale } from '$lib/utils/transitions';
@ -212,7 +213,7 @@
</DropdownMenu.Item>
{/if}
{#if !$temporaryChatEnabled}
{#if !$temporaryChatEnabled && ($user?.role === 'admin' || ($user.permissions?.chat?.share ?? true))}
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
id="chat-share-button"
@ -288,14 +289,16 @@
transition={flyAndScale}
sideOffset={8}
>
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
on:click={() => {
downloadJSONExport();
}}
>
<div class="flex items-center line-clamp-1">{$i18n.t('Export chat (.json)')}</div>
</DropdownMenu.Item>
{#if $user?.role === 'admin' || ($user.permissions?.chat?.export ?? true)}
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
on:click={() => {
downloadJSONExport();
}}
>
<div class="flex items-center line-clamp-1">{$i18n.t('Export chat (.json)')}</div>
</DropdownMenu.Item>
{/if}
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
on:click={() => {

View file

@ -26,7 +26,7 @@
getChatPinnedStatusById,
toggleChatPinnedStatusById
} from '$lib/apis/chats';
import { chats, theme } from '$lib/stores';
import { chats, theme, user } from '$lib/stores';
import { createMessagesList } from '$lib/utils';
import { downloadChatAsPDF } from '$lib/apis/utils';
import Download from '$lib/components/icons/Download.svelte';
@ -233,15 +233,17 @@
<div class="flex items-center">{$i18n.t('Archive')}</div>
</DropdownMenu.Item>
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-1.5 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
on:click={() => {
shareHandler();
}}
>
<Share />
<div class="flex items-center">{$i18n.t('Share')}</div>
</DropdownMenu.Item>
{#if $user?.role === 'admin' || ($user.permissions?.chat?.share ?? true)}
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-1.5 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
on:click={() => {
shareHandler();
}}
>
<Share />
<div class="flex items-center">{$i18n.t('Share')}</div>
</DropdownMenu.Item>
{/if}
<DropdownMenu.Sub>
<DropdownMenu.SubTrigger
@ -256,14 +258,17 @@
transition={flyAndScale}
sideOffset={8}
>
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
on:click={() => {
downloadJSONExport();
}}
>
<div class="flex items-center line-clamp-1">{$i18n.t('Export chat (.json)')}</div>
</DropdownMenu.Item>
{#if $user?.role === 'admin' || ($user.permissions?.chat?.export ?? true)}
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
on:click={() => {
downloadJSONExport();
}}
>
<div class="flex items-center line-clamp-1">{$i18n.t('Export chat (.json)')}</div>
</DropdownMenu.Item>
{/if}
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
on:click={() => {

View file

@ -11,7 +11,12 @@
import { page } from '$app/stores';
import { mobile, showSidebar, knowledge as _knowledge, config, user } from '$lib/stores';
import { updateFileDataContentById, uploadFile, deleteFileById } from '$lib/apis/files';
import {
updateFileDataContentById,
uploadFile,
deleteFileById,
getFileById
} from '$lib/apis/files';
import {
addFileToKnowledgeById,
getKnowledgeById,
@ -84,12 +89,15 @@
let selectedFile = null;
let selectedFileId = null;
let selectedFileContent = '';
// Add cache object
let fileContentCache = new Map();
$: if (selectedFileId) {
const file = (knowledge?.files ?? []).find((file) => file.id === selectedFileId);
if (file) {
file.data = file.data ?? { content: '' };
selectedFile = file;
fileSelectHandler(file);
} else {
selectedFile = null;
}
@ -394,7 +402,10 @@
const updateFileContentHandler = async () => {
const fileId = selectedFile.id;
const content = selectedFile.data.content;
const content = selectedFileContent;
// Clear the cache for this file since we're updating it
fileContentCache.delete(fileId);
const res = updateFileDataContentById(localStorage.token, fileId, content).catch((e) => {
toast.error(`${e}`);
@ -450,6 +461,29 @@
}
};
const fileSelectHandler = async (file) => {
try {
selectedFile = file;
// Check cache first
if (fileContentCache.has(file.id)) {
selectedFileContent = fileContentCache.get(file.id);
return;
}
const response = await getFileById(localStorage.token, file.id);
if (response) {
selectedFileContent = response.data.content;
// Cache the content
fileContentCache.set(file.id, response.data.content);
} else {
toast.error($i18n.t('No content found in file.'));
}
} catch (e) {
toast.error($i18n.t('Failed to load file content.'));
}
};
const onDragOver = (e) => {
e.preventDefault();
@ -728,7 +762,7 @@
{#key selectedFile.id}
<RichTextInput
className="input-prose-sm"
bind:value={selectedFile.data.content}
bind:value={selectedFileContent}
placeholder={$i18n.t('Add content here')}
preserveBreaks={true}
/>
@ -747,7 +781,7 @@
<Drawer
className="h-full"
show={selectedFileId !== null}
on:close={() => {
onClose={() => {
selectedFileId = null;
}}
>
@ -786,7 +820,7 @@
{#key selectedFile.id}
<RichTextInput
className="input-prose-sm"
bind:value={selectedFile.data.content}
bind:value={selectedFileContent}
placeholder={$i18n.t('Add content here')}
preserveBreaks={true}
/>

View file

@ -56,6 +56,7 @@
}
}
let system = '';
let info = {
id: '',
base_model_id: null,
@ -155,6 +156,7 @@
}
}
info.params.system = system.trim() === '' ? null : system;
info.params.stop = params.stop ? params.stop.split(',').filter((s) => s.trim()) : null;
Object.keys(info.params).forEach((key) => {
if (info.params[key] === '' || info.params[key] === null) {
@ -201,6 +203,8 @@
}
}
system = model?.params?.system ?? '';
params = { ...params, ...model?.params };
params.stop = params?.stop
? (typeof params.stop === 'string' ? params.stop.split(',') : (params?.stop ?? [])).join(
@ -553,7 +557,7 @@
className=" text-sm w-full bg-transparent outline-hidden resize-none overflow-y-hidden "
placeholder={`Write your model system prompt content here\ne.g.) You are Mario from Super Mario Bros, acting as an assistant.`}
rows={4}
bind:value={info.params.system}
bind:value={system}
/>
</div>
</div>

View file

@ -8,6 +8,7 @@
import LockClosed from '$lib/components/icons/LockClosed.svelte';
import AccessControlModal from '../common/AccessControlModal.svelte';
import { user } from '$lib/stores';
import { slugify } from '$lib/utils';
export let onSubmit: Function;
export let edit = false;
@ -25,8 +26,15 @@
let showAccessControlModal = false;
$: if (!edit) {
command = title !== '' ? `${title.replace(/\s+/g, '-').toLowerCase()}` : '';
let hasManualEdit = false;
$: if (!edit && !hasManualEdit) {
command = title !== '' ? slugify(title) : '';
}
// Track manual edits
function handleCommandInput(e: Event) {
hasManualEdit = true;
}
const submitHandler = async () => {
@ -64,7 +72,7 @@
command = prompt.command.at(0) === '/' ? prompt.command.slice(1) : prompt.command;
content = prompt.content;
accessControl = prompt?.access_control ?? null;
accessControl = prompt?.access_control ?? {};
}
});
</script>
@ -125,6 +133,7 @@
class=" w-full bg-transparent outline-hidden"
placeholder={$i18n.t('Command')}
bind:value={command}
on:input={handleCommandInput}
required
disabled={edit}
/>

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "",
"Allow Chat Deletion": "يستطيع حذف المحادثات",
"Allow Chat Edit": "",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "",
@ -76,6 +78,7 @@
"Always": "",
"Always Collapse Code Blocks": "",
"Always Expand Details": "",
"Always Play Notification Sound": "",
"Amazing": "",
"an assistant": "مساعد",
"Analyzed": "",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "",
"Enter domains separated by commas (e.g., example.com,site.org)": "",
"Enter Exa API Key": "",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "أدخل عنوان URL ل Github Raw",
@ -511,10 +518,15 @@
"Export Tools": "",
"External": "",
"External Models": "",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to create API Key.": "فشل في إنشاء مفتاح API.",
"Failed to fetch models": "",
"Failed to load file content.": "",
"Failed to read clipboard contents": "فشل في قراءة محتويات الحافظة",
"Failed to save connections": "",
"Failed to save models configuration": "",
@ -718,8 +730,12 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Merge Responses": "",
"Merged Response": "نتيجة الردود المدمجة",
"Message rating should be enabled to use this feature": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "لن تتم مشاركة الرسائل التي ترسلها بعد إنشاء الرابط الخاص بك. سيتمكن المستخدمون الذين لديهم عنوان URL من عرض الدردشة المشتركة",
"Microsoft OneDrive": "",
"Microsoft OneDrive (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -761,6 +777,7 @@
"New Password": "كلمة المرور الجديدة",
"new-channel": "",
"No content found": "",
"No content found in file.": "",
"No content to speak": "",
"No distance available": "",
"No feedbacks found": "",
@ -939,7 +956,7 @@
"Save Tag": "",
"Saved": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "لم يعد حفظ سجلات الدردشة مباشرة في مساحة تخزين متصفحك مدعومًا. يرجى تخصيص بعض الوقت لتنزيل وحذف سجلات الدردشة الخاصة بك عن طريق النقر على الزر أدناه. لا تقلق، يمكنك بسهولة إعادة استيراد سجلات الدردشة الخاصة بك إلى الواجهة الخلفية من خلاله",
"Scroll to bottom when switching between branches": "",
"Scroll On Branch Change": "",
"Search": "البحث",
"Search a model": "البحث عن موديل",
"Search Base": "",

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "السماح بحذف المحادثة",
"Allow Chat Deletion": "السماح بحذف المحادثة",
"Allow Chat Edit": "السماح بتعديل المحادثة",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "السماح بتحميل الملفات",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "السماح بالأصوات غير المحلية",
@ -76,6 +78,7 @@
"Always": "دائمًا",
"Always Collapse Code Blocks": "",
"Always Expand Details": "",
"Always Play Notification Sound": "",
"Amazing": "رائع",
"an assistant": "مساعد",
"Analyzed": "تم التحليل",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "أدخل مفتاح تحليل المستندات",
"Enter domains separated by commas (e.g., example.com,site.org)": "أدخل النطاقات مفصولة بفواصل (مثال: example.com,site.org)",
"Enter Exa API Key": "أدخل مفتاح API لـ Exa",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "أدخل عنوان URL ل Github Raw",
@ -511,10 +518,15 @@
"Export Tools": "تصدير الأدوات",
"External": "",
"External Models": "نماذج خارجية",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "فشل في إضافة الملف.",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to create API Key.": "فشل في إنشاء مفتاح API.",
"Failed to fetch models": "فشل في جلب النماذج",
"Failed to load file content.": "",
"Failed to read clipboard contents": "فشل في قراءة محتويات الحافظة",
"Failed to save connections": "",
"Failed to save models configuration": "فشل في حفظ إعدادات النماذج",
@ -718,8 +730,12 @@
"Memory deleted successfully": "تم حذف الذاكرة بنجاح",
"Memory updated successfully": "تم تحديث الذاكرة بنجاح",
"Merge Responses": "دمج الردود",
"Merged Response": "نتيجة الردود المدمجة",
"Message rating should be enabled to use this feature": "يجب تفعيل تقييم الرسائل لاستخدام هذه الميزة",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "لن تتم مشاركة الرسائل التي ترسلها بعد إنشاء الرابط الخاص بك. سيتمكن المستخدمون الذين لديهم عنوان URL من عرض الدردشة المشتركة",
"Microsoft OneDrive": "",
"Microsoft OneDrive (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "الحد الأدنى P",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -761,6 +777,7 @@
"New Password": "كلمة المرور الجديدة",
"new-channel": "قناة جديدة",
"No content found": "لم يتم العثور على محتوى",
"No content found in file.": "",
"No content to speak": "لا يوجد محتوى للتحدث عنه",
"No distance available": "لا توجد مسافة متاحة",
"No feedbacks found": "لم يتم العثور على ملاحظات",
@ -939,7 +956,7 @@
"Save Tag": "حفظ الوسم",
"Saved": "تم الحفظ",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "لم يعد حفظ سجلات الدردشة مباشرة في مساحة تخزين متصفحك مدعومًا. يرجى تخصيص بعض الوقت لتنزيل وحذف سجلات الدردشة الخاصة بك عن طريق النقر على الزر أدناه. لا تقلق، يمكنك بسهولة إعادة استيراد سجلات الدردشة الخاصة بك إلى الواجهة الخلفية من خلاله",
"Scroll to bottom when switching between branches": "التمرير للأسفل عند التبديل بين الفروع",
"Scroll On Branch Change": "",
"Search": "البحث",
"Search a model": "البحث عن موديل",
"Search Base": "قاعدة البحث",

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "Разреши изтриване на чат",
"Allow Chat Deletion": "Позволи Изтриване на Чат",
"Allow Chat Edit": "Разреши редактиране на чат",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "Разреши качване на файлове",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "Разреши нелокални гласове",
@ -76,6 +78,7 @@
"Always": "Винаги",
"Always Collapse Code Blocks": "",
"Always Expand Details": "",
"Always Play Notification Sound": "",
"Amazing": "Невероятно",
"an assistant": "асистент",
"Analyzed": "Анализирано",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "",
"Enter domains separated by commas (e.g., example.com,site.org)": "Въведете домейни, разделени със запетаи (напр. example.com,site.org)",
"Enter Exa API Key": "Въведете API ключ за Exa",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "Въведете URL адрес на Github Raw",
@ -511,10 +518,15 @@
"Export Tools": "Експортиране на инструменти",
"External": "",
"External Models": "Външни модели",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "Неуспешно добавяне на файл.",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to create API Key.": "Неуспешно създаване на API ключ.",
"Failed to fetch models": "Неуспешно извличане на модели",
"Failed to load file content.": "",
"Failed to read clipboard contents": "Грешка при четене на съдържанието от клипборда",
"Failed to save connections": "",
"Failed to save models configuration": "Неуспешно запазване на конфигурацията на моделите",
@ -718,8 +730,12 @@
"Memory deleted successfully": "Паметта е изтрита успешно",
"Memory updated successfully": "Паметта е актуализирана успешно",
"Merge Responses": "Обединяване на отговори",
"Merged Response": "Обединен отговор",
"Message rating should be enabled to use this feature": "Оценяването на съобщения трябва да бъде активирано, за да използвате тази функция",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Съобщенията, които изпращате след създаването на връзката, няма да бъдат споделяни. Потребителите с URL адреса ще могат да видят споделения чат.",
"Microsoft OneDrive": "",
"Microsoft OneDrive (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "Мин P",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -761,6 +777,7 @@
"New Password": "Нова парола",
"new-channel": "нов-канал",
"No content found": "Не е намерено съдържание",
"No content found in file.": "",
"No content to speak": "Няма съдържание за изговаряне",
"No distance available": "Няма налично разстояние",
"No feedbacks found": "Не са намерени обратни връзки",
@ -939,7 +956,7 @@
"Save Tag": "Запиши таг",
"Saved": "Запазено",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Запазването на чат логове директно в хранилището на вашия браузър вече не се поддържа. Моля, отделете малко време, за да изтеглите и изтриете чат логовете си, като щракнете върху бутона по-долу. Не се притеснявайте, можете лесно да импортирате отново чат логовете си в бекенда чрез",
"Scroll to bottom when switching between branches": "Превъртане до дъното при превключване между клонове",
"Scroll On Branch Change": "",
"Search": "Търси",
"Search a model": "Търси модел",
"Search Base": "База за търсене",

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "",
"Allow Chat Deletion": "চ্যাট ডিলিট করতে দিন",
"Allow Chat Edit": "",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "",
@ -76,6 +78,7 @@
"Always": "",
"Always Collapse Code Blocks": "",
"Always Expand Details": "",
"Always Play Notification Sound": "",
"Amazing": "",
"an assistant": "একটা এসিস্ট্যান্ট",
"Analyzed": "",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "",
"Enter domains separated by commas (e.g., example.com,site.org)": "",
"Enter Exa API Key": "",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "গিটহাব কাঁচা URL লিখুন",
@ -511,10 +518,15 @@
"Export Tools": "",
"External": "",
"External Models": "",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to create API Key.": "API Key তৈরি করা যায়নি।",
"Failed to fetch models": "",
"Failed to load file content.": "",
"Failed to read clipboard contents": "ক্লিপবোর্ডের বিষয়বস্তু পড়া সম্ভব হয়নি",
"Failed to save connections": "",
"Failed to save models configuration": "",
@ -718,8 +730,12 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Merge Responses": "",
"Merged Response": "একত্রিত প্রতিক্রিয়া ফলাফল",
"Message rating should be enabled to use this feature": "",
"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 (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -761,6 +777,7 @@
"New Password": "নতুন পাসওয়ার্ড",
"new-channel": "",
"No content found": "",
"No content found in file.": "",
"No content to speak": "",
"No distance available": "",
"No feedbacks found": "",
@ -939,7 +956,7 @@
"Save Tag": "",
"Saved": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "মাধ্যমে",
"Scroll to bottom when switching between branches": "",
"Scroll On Branch Change": "",
"Search": "অনুসন্ধান",
"Search a model": "মডেল অনুসন্ধান করুন",
"Search Base": "",

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "ཁ་བརྡ་བསུབ་པར་གནང་བ་སྤྲོད་པ།",
"Allow Chat Deletion": "ཁ་བརྡ་བསུབ་པར་གནང་བ་སྤྲོད་པ།",
"Allow Chat Edit": "ཁ་བརྡ་ཞུ་དག་ལ་གནང་བ་སྤྲོད་པ།",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "ཡིག་ཆ་སྤར་བར་གནང་བ་སྤྲོད་པ།",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "ས་གནས་མིན་པའི་སྐད་གདངས་ལ་གནང་བ་སྤྲོད་པ།",
@ -76,6 +78,7 @@
"Always": "རྟག་ཏུ།",
"Always Collapse Code Blocks": "རྟག་ཏུ་ཀོཌ་གཏོགས་ཁོངས་བསྐུམ་པ།",
"Always Expand Details": "རྟག་ཏུ་ཞིབ་ཕྲ་རྒྱ་བསྐྱེད་པ།",
"Always Play Notification Sound": "",
"Amazing": "ངོ་མཚར་ཆེན།",
"an assistant": "ལག་རོགས་པ།",
"Analyzed": "དབྱེ་ཞིབ་བྱས་པ།",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "ཡིག་ཆའི་རིག་ནུས་ལྡེ་མིག་འཇུག་པ།",
"Enter domains separated by commas (e.g., example.com,site.org)": "ཚེག་བསྐུངས་ཀྱིས་ལོགས་སུ་བཀར་བའི་ཁྱབ་ཁོངས་འཇུག་པ། (དཔེར་ན། example.com,site.org)",
"Enter Exa API Key": "Exa API ལྡེ་མིག་འཇུག་པ།",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "Github Raw URL འཇུག་པ།",
@ -511,10 +518,15 @@
"Export Tools": "ལག་ཆ་ཕྱིར་གཏོང་།",
"External": "ཕྱི་རོལ།",
"External Models": "ཕྱི་རོལ་གྱི་དཔེ་དབྱིབས།",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "ཡིག་ཆ་སྣོན་པར་མ་ཐུབ།",
"Failed to connect to {{URL}} OpenAPI tool server": "{{URL}} OpenAPI ལག་ཆའི་སར་བར་ལ་སྦྲེལ་མཐུད་བྱེད་མ་ཐུབ།",
"Failed to create API Key.": "API ལྡེ་མིག་བཟོ་མ་ཐུབ།",
"Failed to fetch models": "དཔེ་དབྱིབས་ལེན་པར་མ་ཐུབ།",
"Failed to load file content.": "",
"Failed to read clipboard contents": "སྦྱར་སྡེར་གྱི་ནང་དོན་ཀློག་མ་ཐུབ།",
"Failed to save connections": "",
"Failed to save models configuration": "དཔེ་དབྱིབས་སྒྲིག་འགོད་ཉར་ཚགས་བྱེད་མ་ཐུབ།",
@ -718,8 +730,12 @@
"Memory deleted successfully": "དྲན་ཤེས་ལེགས་པར་བསུབས་ཟིན།",
"Memory updated successfully": "དྲན་ཤེས་ལེགས་པར་གསར་སྒྱུར་བྱས་ཟིན།",
"Merge Responses": "ལན་ཟླ་སྒྲིལ།",
"Merged Response": "བསྡུར་མཐུན་གྱི་ལན་གསལ་གནས་ཡོད།",
"Message rating should be enabled to use this feature": "ཁྱད་ཆོས་འདི་བེད་སྤྱོད་གཏོང་བར་འཕྲིན་ལ་སྐར་མ་སྤྲོད་པ་སྒུལ་བསྐྱོད་བྱེད་དགོས།",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "ཁྱེད་ཀྱི་སྦྲེལ་ཐག་བཟོས་རྗེས་ཁྱེད་ཀྱིས་བསྐུར་བའི་འཕྲིན་དག་མཉམ་སྤྱོད་བྱེད་མི་འགྱུར། URL ཡོད་པའི་བེད་སྤྱོད་མཁན་ཚོས་མཉམ་སྤྱོད་ཁ་བརྡ་ལྟ་ཐུབ་ངེས།",
"Microsoft OneDrive": "",
"Microsoft OneDrive (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "P ཉུང་ཤོས།",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -761,6 +777,7 @@
"New Password": "གསང་གྲངས་གསར་པ།",
"new-channel": "བགྲོ་གླེང་གསར་པ།",
"No content found": "ནང་དོན་མ་རྙེད།",
"No content found in file.": "",
"No content to speak": "བཤད་རྒྱུའི་ནང་དོན་མེད།",
"No distance available": "ཐག་རིང་ཚད་མེད།",
"No feedbacks found": "བསམ་འཆར་མ་རྙེད།",
@ -939,7 +956,7 @@
"Save Tag": "རྟགས་ཉར་ཚགས།",
"Saved": "ཉར་ཚགས་བྱས།",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "ཁ་བརྡའི་ཟིན་ཐོ་ཐད་ཀར་ཁྱེད་ཀྱི་བརྡ་འཚོལ་ཆས་ཀྱི་གསོག་ཆས་སུ་ཉར་ཚགས་བྱེད་པར་ད་ནས་བཟུང་རྒྱབ་སྐྱོར་མེད། གཤམ་གྱི་མཐེབ་གནོན་མནན་ནས་ཁྱེད་ཀྱི་ཁ་བརྡའི་ཟིན་ཐོ་ཕབ་ལེན་དང་བསུབ་པར་དུས་ཚོད་ཅུང་ཟད་བླང་རོགས། སེམས་ཁྲལ་མེད། ཁྱེད་ཀྱིས་སྟབས་བདེ་པོར་ཁྱེད་ཀྱི་ཁ་བརྡའི་ཟིན་ཐོ་རྒྱབ་སྣེ་ལ་བསྐྱར་དུ་ནང་འདྲེན་བྱེད་ཐུབ།",
"Scroll to bottom when switching between branches": "ཡན་ལག་བརྗེ་སྐབས་མཐིལ་དུ་འགྲིལ་བ།",
"Scroll On Branch Change": "",
"Search": "འཚོལ་བཤེར།",
"Search a model": "དཔེ་དབྱིབས་ཤིག་འཚོལ་བ།",
"Search Base": "འཚོལ་བཤེར་གཞི་རྩ།",

View file

@ -57,17 +57,19 @@
"All": "Tots",
"All Documents": "Tots els documents",
"All models deleted successfully": "Tots els models s'han eliminat correctament",
"Allow Call": "",
"Allow Call": "Permetre la trucada",
"Allow Chat Controls": "Permetre els controls de xat",
"Allow Chat Delete": "Permetre eliminar el xat",
"Allow Chat Deletion": "Permetre la supressió del xat",
"Allow Chat Edit": "Permetre editar el xat",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "Permetre la pujada d'arxius",
"Allow Multiple Models in Chat": "",
"Allow Multiple Models in Chat": "Permetre múltiple models al xat",
"Allow non-local voices": "Permetre veus no locals",
"Allow Speech to Text": "",
"Allow Speech to Text": "Permetre Parla a Text",
"Allow Temporary Chat": "Permetre el xat temporal",
"Allow Text to Speech": "",
"Allow Text to Speech": "Permetre Text a Parla",
"Allow User Location": "Permetre la ubicació de l'usuari",
"Allow Voice Interruption in Call": "Permetre la interrupció de la veu en una trucada",
"Allowed Endpoints": "Punts d'accés permesos",
@ -76,6 +78,7 @@
"Always": "Sempre",
"Always Collapse Code Blocks": "Reduir sempre els blocs de codi",
"Always Expand Details": "Expandir sempre els detalls",
"Always Play Notification Sound": "",
"Amazing": "Al·lucinant",
"an assistant": "un assistent",
"Analyzed": "Analitzat",
@ -83,7 +86,7 @@
"and": "i",
"and {{COUNT}} more": "i {{COUNT}} més",
"and create a new shared link.": "i crear un nou enllaç compartit.",
"Android": "",
"Android": "Android",
"API Base URL": "URL Base de l'API",
"API Key": "clau API",
"API Key created.": "clau API creada.",
@ -245,7 +248,7 @@
"Copied shared chat URL to clipboard!": "S'ha copiat l'URL compartida al porta-retalls!",
"Copied to clipboard": "Copiat al porta-retalls",
"Copy": "Copiar",
"Copy Formatted Text": "",
"Copy Formatted Text": "Copiar el text formatat",
"Copy last code block": "Copiar l'últim bloc de codi",
"Copy last response": "Copiar l'última resposta",
"Copy Link": "Copiar l'enllaç",
@ -308,7 +311,7 @@
"Deleted User": "Usuari eliminat",
"Describe your knowledge base and objectives": "Descriu la teva base de coneixement i objectius",
"Description": "Descripció",
"Detect Artifacts Automatically": "",
"Detect Artifacts Automatically": "Detectar automàticament els artefactes",
"Didn't fully follow instructions": "No s'han seguit les instruccions completament",
"Direct": "Directe",
"Direct Connections": "Connexions directes",
@ -364,7 +367,7 @@
"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., en-US,ja-JP (leave blank for auto-detect)": "",
"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)",
"Edit": "Editar",
"Edit Arena Model": "Editar model de l'Arena",
"Edit Channel": "Editar el canal",
@ -414,8 +417,12 @@
"Enter Document Intelligence Key": "Introdueix la clau de Document Intelligence",
"Enter domains separated by commas (e.g., example.com,site.org)": "Introdueix els dominis separats per comes (p. ex. example.com,site.org)",
"Enter Exa API Key": "Introdueix la clau API de d'EXA",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "Introdueix la URL base de Firecrawl API",
"Enter Firecrawl API Key": "Introdueix la clau API de Firecrawl",
"Enter Github Raw URL": "Introdueix l'URL en brut de Github",
"Enter Google PSE API Key": "Introdueix la clau API de Google PSE",
"Enter Google PSE Engine Id": "Introdueix l'identificador del motor PSE de Google",
@ -433,8 +440,8 @@
"Enter Mojeek Search API Key": "Introdueix la clau API de Mojeek Search",
"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": "",
"Enter Playwright WebSocket URL": "",
"Enter Playwright Timeout": "Introdueix el timeout de Playwright",
"Enter Playwright WebSocket URL": "Introdueix la URL de Playwright WebSocket",
"Enter proxy URL (e.g. https://user:password@host:port)": "Entra l'URL (p. ex. https://user:password@host:port)",
"Enter reasoning effort": "Introdueix l'esforç de raonament",
"Enter Sampler (e.g. Euler a)": "Introdueix el mostrejador (p.ex. Euler a)",
@ -452,13 +459,13 @@
"Enter server host": "Introdueix el servidor",
"Enter server label": "Introdueix l'etiqueta del servidor",
"Enter server port": "Introdueix el port del servidor",
"Enter Sougou Search API sID": "",
"Enter Sougou Search API SK": "",
"Enter Sougou Search API sID": "Introdueix el sID de l'API de Sougou Search",
"Enter Sougou Search API SK": "Introdueix l'SK de l'API de Sougou Search",
"Enter stop sequence": "Introdueix la seqüència de parada",
"Enter system prompt": "Introdueix la indicació de sistema",
"Enter system prompt here": "Entra la indicació de sistema aquí",
"Enter Tavily API Key": "Introdueix la clau API de Tavily",
"Enter Tavily Extract Depth": "",
"Enter Tavily Extract Depth": "Introdueix la profunditat d'extracció de Tavily",
"Enter the public URL of your WebUI. This URL will be used to generate links in the notifications.": "Entra la URL pública de WebUI. Aquesta URL s'utilitzarà per generar els enllaços en les notificacions.",
"Enter Tika Server URL": "Introdueix l'URL del servidor Tika",
"Enter timeout in seconds": "Entra el temps màxim en segons",
@ -511,10 +518,15 @@
"Export Tools": "Exportar les eines",
"External": "Extern",
"External Models": "Models externs",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"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 fetch models": "No s'han pogut obtenir els models",
"Failed to load file content.": "",
"Failed to read clipboard contents": "No s'ha pogut llegir el contingut del porta-retalls",
"Failed to save connections": "No s'han pogut desar les connexions",
"Failed to save models configuration": "No s'ha pogut desar la configuració dels models",
@ -539,8 +551,8 @@
"Filter is now globally enabled": "El filtre ha estat activat globalment",
"Filters": "Filtres",
"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "S'ha detectat la suplantació d'identitat de l'empremta digital: no es poden utilitzar les inicials com a avatar. S'estableix la imatge de perfil predeterminada.",
"Firecrawl API Base URL": "",
"Firecrawl API Key": "",
"Firecrawl API Base URL": "URL de l'API de base de Firecrawl",
"Firecrawl API Key": "Clau API de Firecrawl",
"Fluidly stream large external response chunks": "Transmetre amb fluïdesa grans trossos de resposta externa",
"Focus chat input": "Estableix el focus a l'entrada del xat",
"Folder deleted successfully": "Carpeta eliminada correctament",
@ -605,8 +617,8 @@
"Hybrid Search": "Cerca híbrida",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Afirmo que he llegit i entenc les implicacions de la meva acció. Soc conscient dels riscos associats a l'execució de codi arbitrari i he verificat la fiabilitat de la font.",
"ID": "ID",
"iframe Sandbox Allow Forms": "",
"iframe Sandbox Allow Same Origin": "",
"iframe Sandbox Allow Forms": "Permetre formularis sandbox iframe",
"iframe Sandbox Allow Same Origin": "Permetre same-origin sandbox iframe",
"Ignite curiosity": "Despertar la curiositat",
"Image": "Imatge",
"Image Compression": "Compressió d'imatges",
@ -667,7 +679,7 @@
"Label": "Etiqueta",
"Landing Page Mode": "Mode de la pàgina d'entrada",
"Language": "Idioma",
"Language Locales": "",
"Language Locales": "Localització d'idiomes",
"Last Active": "Activitat recent",
"Last Modified": "Modificació",
"Last reply": "Darrera resposta",
@ -718,8 +730,12 @@
"Memory deleted successfully": "Memòria eliminada correctament",
"Memory updated successfully": "Memòria actualitzada correctament",
"Merge Responses": "Fusionar les respostes",
"Merged Response": "Resposta combinada",
"Message rating should be enabled to use this feature": "La classificació dels missatges s'hauria d'activar per utilitzar aquesta funció",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Els missatges enviats després de crear el teu enllaç no es compartiran. Els usuaris amb l'URL podran veure el xat compartit.",
"Microsoft OneDrive": "",
"Microsoft OneDrive (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "Min P",
"Mirostat": "Mirostat",
"Mirostat Eta": "Eta de Mirostat",
@ -761,6 +777,7 @@
"New Password": "Nova contrasenya",
"new-channel": "nou-canal",
"No content found": "No s'ha trobat contingut",
"No content found in file.": "",
"No content to speak": "No hi ha contingut per parlar",
"No distance available": "No hi ha distància disponible",
"No feedbacks found": "No s'han trobat comentaris",
@ -851,8 +868,8 @@
"Pipelines Valves": "Vàlvules de les Pipelines",
"Plain text (.txt)": "Text pla (.txt)",
"Playground": "Zona de jocs",
"Playwright Timeout (ms)": "",
"Playwright WebSocket URL": "",
"Playwright Timeout (ms)": "Temps d'espera (ms) de Playwright",
"Playwright WebSocket URL": "URL del WebSocket de Playwright",
"Please carefully review the following warnings:": "Si us plau, revisa els següents avisos amb cura:",
"Please do not close the settings page while loading the model.": "No tanquis la pàgina de configuració mentre carregues el model.",
"Please enter a prompt": "Si us plau, entra una indicació",
@ -898,11 +915,11 @@
"References from": "Referències de",
"Refused when it shouldn't have": "Refusat quan no hauria d'haver estat",
"Regenerate": "Regenerar",
"Reindex": "",
"Reindex Knowledge Base Vectors": "",
"Reindex": "Reindexar",
"Reindex Knowledge Base Vectors": "Reindexar els vector base del Coneixement",
"Release Notes": "Notes de la versió",
"Relevance": "Rellevància",
"Relevance Threshold": "",
"Relevance Threshold": "Límit de rellevància",
"Remove": "Eliminar",
"Remove Model": "Eliminar el model",
"Rename": "Canviar el nom",
@ -939,7 +956,7 @@
"Save Tag": "Desar l'etiqueta",
"Saved": "Desat",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Desar els registres de xat directament a l'emmagatzematge del teu navegador ja no està suportat. Si us plau, descarregr i elimina els registres de xat fent clic al botó de sota. No et preocupis, pots tornar a importar fàcilment els teus registres de xat al backend a través de",
"Scroll to bottom when switching between branches": "Desplaçar a la part inferior quan es canviï de branca",
"Scroll On Branch Change": "",
"Search": "Cercar",
"Search a model": "Cercar un model",
"Search Base": "Base de cerca",
@ -1032,8 +1049,8 @@
"Sign up to {{WEBUI_NAME}}": "Registrar-se a {{WEBUI_NAME}}",
"Signing in to {{WEBUI_NAME}}": "Iniciant sessió a {{WEBUI_NAME}}",
"sk-1234": "sk-1234",
"Sougou Search API sID": "",
"Sougou Search API SK": "",
"Sougou Search API sID": "sID de l'API de Sougou Search",
"Sougou Search API SK": "SK de l'API de Sougou Search",
"Source": "Font",
"Speech Playback Speed": "Velocitat de la parla",
"Speech recognition error: {{error}}": "Error de reconeixement de veu: {{error}}",
@ -1061,7 +1078,7 @@
"Tap to interrupt": "Prem per interrompre",
"Tasks": "Tasques",
"Tavily API Key": "Clau API de Tavily",
"Tavily Extract Depth": "",
"Tavily Extract Depth": "Profunditat d'extracció de Tavily",
"Tell us more:": "Dona'ns més informació:",
"Temperature": "Temperatura",
"Template": "Plantilla",
@ -1184,8 +1201,8 @@
"Use Gravatar": "Utilitzar Gravatar",
"Use groups to group your users and assign permissions.": "Utilitza grups per agrupar els usuaris i assignar permisos.",
"Use Initials": "Utilitzar inicials",
"Use no proxy to fetch page contents.": "",
"Use proxy designated by http_proxy and https_proxy environment variables to fetch page contents.": "",
"Use no proxy to fetch page contents.": "No utilitzis un proxy per obtenir contingut de la pàgina.",
"Use proxy designated by http_proxy and https_proxy environment variables to fetch page contents.": "Utilitza el proxy designat per les variables d'entorn http_proxy i https_proxy per obtenir el contingut de la pàgina.",
"use_mlock (Ollama)": "use_mlock (Ollama)",
"use_mmap (Ollama)": "use_mmap (Ollama)",
"user": "usuari",
@ -1203,7 +1220,7 @@
"variable": "variable",
"variable to have them replaced with clipboard content.": "variable per tenir-les reemplaçades amb el contingut del porta-retalls.",
"Verify Connection": "Verificar la connexió",
"Verify SSL Certificate": "",
"Verify SSL Certificate": "Verificar el certificat SSL",
"Version": "Versió",
"Version {{selectedVersion}} of {{totalVersions}}": "Versió {{selectedVersion}} de {{totalVersions}}",
"View Replies": "Veure les respostes",
@ -1218,7 +1235,7 @@
"Warning: Jupyter execution enables arbitrary code execution, posing severe security risks—proceed with extreme caution.": "Avís: l'execució de Jupyter permet l'execució de codi arbitrari, la qual cosa comporta greus riscos de seguretat; procediu amb extrema precaució.",
"Web": "Web",
"Web API": "Web API",
"Web Loader Engine": "",
"Web Loader Engine": "Motor de càrrega Web",
"Web Search": "Cerca la web",
"Web Search Engine": "Motor de cerca de la web",
"Web Search in Chat": "Cerca a internet al xat",

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "",
"Allow Chat Deletion": "Tugoti nga mapapas ang mga chat",
"Allow Chat Edit": "",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "",
@ -76,6 +78,7 @@
"Always": "",
"Always Collapse Code Blocks": "",
"Always Expand Details": "",
"Always Play Notification Sound": "",
"Amazing": "",
"an assistant": "usa ka katabang",
"Analyzed": "",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "",
"Enter domains separated by commas (e.g., example.com,site.org)": "",
"Enter Exa API Key": "",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "",
@ -511,10 +518,15 @@
"Export Tools": "",
"External": "",
"External Models": "",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to create API Key.": "",
"Failed to fetch models": "",
"Failed to load file content.": "",
"Failed to read clipboard contents": "Napakyas sa pagbasa sa sulod sa clipboard",
"Failed to save connections": "",
"Failed to save models configuration": "",
@ -718,8 +730,12 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Merge Responses": "",
"Merged Response": "Gihiusa nga Resulta sa Tubag",
"Message rating should be enabled to use this feature": "",
"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 (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -761,6 +777,7 @@
"New Password": "Bag-ong Password",
"new-channel": "",
"No content found": "",
"No content found in file.": "",
"No content to speak": "",
"No distance available": "",
"No feedbacks found": "",
@ -939,7 +956,7 @@
"Save Tag": "",
"Saved": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Ang pag-save sa mga chat log direkta sa imong browser storage dili na suportado. ",
"Scroll to bottom when switching between branches": "",
"Scroll On Branch Change": "",
"Search": "Pagpanukiduki",
"Search a model": "",
"Search Base": "",

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "Povolit odstranění chatu",
"Allow Chat Deletion": "Povolit odstranění chatu",
"Allow Chat Edit": "Povolit úpravu chatu",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "Povolit nahrávat soubory",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "Povolit ne-místní hlasy",
@ -76,6 +78,7 @@
"Always": "",
"Always Collapse Code Blocks": "",
"Always Expand Details": "",
"Always Play Notification Sound": "",
"Amazing": "",
"an assistant": "asistent",
"Analyzed": "",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "",
"Enter domains separated by commas (e.g., example.com,site.org)": "",
"Enter Exa API Key": "",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "Zadejte URL adresu Github Raw",
@ -511,10 +518,15 @@
"Export Tools": "Exportní nástroje",
"External": "",
"External Models": "Externí modely",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "Nepodařilo se přidat soubor.",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to create API Key.": "Nepodařilo se vytvořit API klíč.",
"Failed to fetch models": "",
"Failed to load file content.": "",
"Failed to read clipboard contents": "Nepodařilo se přečíst obsah schránky",
"Failed to save connections": "",
"Failed to save models configuration": "",
@ -718,8 +730,12 @@
"Memory deleted successfully": "Paměť byla úspěšně smazána",
"Memory updated successfully": "Paměť úspěšně aktualizována",
"Merge Responses": "Sloučit odpovědi",
"Merged Response": "Sloučená odpověď",
"Message rating should be enabled to use this feature": "Hodnocení zpráv musí být povoleno, aby bylo možné tuto funkci používat.",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Zprávy, které odešlete po vytvoření odkazu, nebudou sdíleny. Uživatelé s URL budou moci zobrazit sdílený chat.",
"Microsoft OneDrive": "",
"Microsoft OneDrive (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "Min P",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -761,6 +777,7 @@
"New Password": "Nové heslo",
"new-channel": "",
"No content found": "Nebyly nalezeny žádné obsahové informace.",
"No content found in file.": "",
"No content to speak": "Žádný obsah k diskusi.",
"No distance available": "Není dostupná žádná vzdálenost",
"No feedbacks found": "Žádná zpětná vazba nenalezena",
@ -939,7 +956,7 @@
"Save Tag": "Uložit štítek",
"Saved": "Uloženo",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Ukládání záznamů chatu přímo do úložiště vašeho prohlížeče již není podporováno. Věnujte prosím chvíli stažení a smazání svých záznamů chatu kliknutím na tlačítko níže. Nemějte obavy, můžete snadno znovu importovat své záznamy chatu na backend prostřednictvím",
"Scroll to bottom when switching between branches": "Přejít na konec při přepínání mezi větvemi.",
"Scroll On Branch Change": "",
"Search": "Vyhledávání",
"Search a model": "Vyhledat model",
"Search Base": "",

View file

@ -4,11 +4,11 @@
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(f.eks. `sh webui.sh --api --api-auth username_password`)",
"(e.g. `sh webui.sh --api`)": "(f.eks. `sh webui.sh --api`)",
"(latest)": "(seneste)",
"(Ollama)": "",
"(Ollama)": "(Ollama)",
"{{ models }}": "{{ modeller }}",
"{{COUNT}} Available Tools": "",
"{{COUNT}} hidden lines": "",
"{{COUNT}} Replies": "",
"{{COUNT}} Available Tools": "{{COUNT}} Tilgængelige Værktøj",
"{{COUNT}} hidden lines": "{{COUNT}} skjulte linjer",
"{{COUNT}} Replies": "{{COUNT}} Svar",
"{{user}}'s Chats": "{{user}}s chats",
"{{webUIName}} Backend Required": "{{webUIName}} Backend kræves",
"*Prompt node ID(s) are required for image generation": "*Prompt node ID(s) er påkrævet for at kunne generere billeder",
@ -16,28 +16,28 @@
"A task model is used when performing tasks such as generating titles for chats and web search queries": "En 'task model' bliver brugt til at opgaver såsom at generere overskrifter til chats eller internetsøgninger",
"a user": "en bruger",
"About": "Information",
"Accept autocomplete generation / Jump to prompt variable": "",
"Access": "",
"Access Control": "",
"Accessible to all users": "",
"Accept autocomplete generation / Jump to prompt variable": "Accepter generede autofuldførsel / Spring til prompt variabel",
"Access": "Adgang",
"Access Control": "Adgangskontrol",
"Accessible to all users": "Tilgængelig for alle brugere",
"Account": "Profil",
"Account Activation Pending": "Aktivering af profil afventer",
"Accurate information": "Profilinformation",
"Actions": "Handlinger",
"Activate": "",
"Activate": "Aktiver",
"Activate this command by typing \"/{{COMMAND}}\" to chat input.": "",
"Active Users": "Aktive brugere",
"Add": "Tilføj",
"Add a model ID": "",
"Add a model ID": "Tilføj en model-ID",
"Add a short description about what this model does": "En kort beskrivelse af hvad denne model gør",
"Add a tag": "Tilføj et tag",
"Add Arena Model": "",
"Add Connection": "",
"Add Arena Model": "Tilføj Area Model",
"Add Connection": "Tilføj forbindelser",
"Add Content": "Tilføj indhold",
"Add content here": "Tilføj indhold her",
"Add custom prompt": "Tilføj en special-prompt",
"Add Files": "Tilføj filer",
"Add Group": "",
"Add Group": "Tilføj gruppe",
"Add Memory": "Tilføj hukommelse",
"Add Model": "Tilføj model",
"Add Reaction": "",
@ -45,7 +45,7 @@
"Add Tags": "Tilføj tags",
"Add text content": "Tilføj tekst",
"Add User": "Tilføj bruger",
"Add User Group": "",
"Add User Group": "Tilføj Brugergruppe",
"Adjusting these settings will apply changes universally to all users.": "Ændringer af disse indstillinger har konsekvenser for alle brugere.",
"admin": "administrator",
"Admin": "Administrator",
@ -54,81 +54,81 @@
"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Administratorer har adgang til alle værktøjer altid; brugere skal tilføjes værktøjer pr. model i hvert workspace.",
"Advanced Parameters": "Advancerede indstillinger",
"Advanced Params": "Advancerede indstillinger",
"All": "",
"All": "Alle",
"All Documents": "Alle dokumenter",
"All models deleted successfully": "",
"Allow Call": "",
"Allow Chat Controls": "",
"Allow Chat Delete": "",
"All models deleted successfully": "Alle modeller slettet uden fejl",
"Allow Call": "Tillad kald",
"Allow Chat Controls": "Tillad kontrol af chats",
"Allow Chat Delete": "Tillad sletning af chats",
"Allow Chat Deletion": "Tillad sletning af chats",
"Allow Chat Edit": "",
"Allow File Upload": "",
"Allow Multiple Models in Chat": "",
"Allow Chat Edit": "Tillad redigering af chats",
"Allow File Upload": "Tillad upload af fil",
"Allow Multiple Models in Chat": "Tillad flere modeller i chats",
"Allow non-local voices": "Tillad ikke-lokale stemmer",
"Allow Speech to Text": "",
"Allow Speech to Text": "Tillad tale til tekst",
"Allow Temporary Chat": "Tillad midlertidig chat",
"Allow Text to Speech": "",
"Allow Text to Speech": "Tillad tekst til take",
"Allow User Location": "Tillad bruger-lokation",
"Allow Voice Interruption in Call": "Tillad afbrydelser i stemme i opkald",
"Allowed Endpoints": "",
"Allowed Endpoints": "Tilladte endpoints",
"Already have an account?": "Har du allerede en profil?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out.": "",
"Always": "",
"Always Collapse Code Blocks": "",
"Always Expand Details": "",
"Amazing": "",
"Always": "Altid",
"Always Collapse Code Blocks": "Altid kollapsere kodeblokke",
"Always Expand Details": "Altid udvide detaljer",
"Amazing": "Fantastisk",
"an assistant": "en assistent",
"Analyzed": "",
"Analyzing...": "",
"Analyzed": "Analyseret",
"Analyzing...": "Analyserer...",
"and": "og",
"and {{COUNT}} more": "",
"and {{COUNT}} more": "og {{COUNT}} mere",
"and create a new shared link.": "og lav et nyt link til deling",
"Android": "",
"Android": "Android",
"API Base URL": "API Base URL",
"API Key": "API nøgle",
"API Key created.": "API nøgle lavet",
"API Key Endpoint Restrictions": "",
"API Key Endpoint Restrictions": "API nøgler endpoint forbehold",
"API keys": "API nøgler",
"Application DN": "",
"Application DN Password": "",
"applies to all users with the \"user\" role": "",
"April": "april",
"April": "April",
"Archive": "Arkiv",
"Archive All Chats": "Arkiver alle chats",
"Archived Chats": "Arkiverede chats",
"archived-chat-export": "",
"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?": "",
"archived-chat-export": "arkiveret-chat-eksport",
"Are you sure you want to clear all memories? This action cannot be undone.": "Er du sikker på du vil rydde hele hukommelsen? Dette kan ikke gøres om.",
"Are you sure you want to delete this channel?": "Er du sikker på du vil slette denne kanal?",
"Are you sure you want to delete this message?": "Er du sikker på du vil slette denne besked?",
"Are you sure you want to unarchive all archived chats?": "Er du sikker på du vil fjerne alle arkiverede chats?",
"Are you sure?": "Er du sikker?",
"Arena Models": "",
"Arena Models": "Arena Modeller",
"Artifacts": "Artifakter",
"Ask": "",
"Ask": "Spørg",
"Ask a question": "Stil et spørgsmål",
"Assistant": "",
"Attach file from knowledge": "",
"Assistant": "Assistent",
"Attach file from knowledge": "Vedhæft fil fra viden",
"Attention to detail": "Detajleorientering",
"Attribute for Mail": "",
"Attribute for Username": "",
"Attribute for Mail": "Attribut for Mail",
"Attribute for Username": "Attribut for brugernavn",
"Audio": "Lyd",
"August": "august",
"Auth": "",
"Authenticate": "",
"Authentication": "",
"Auto": "",
"Auth": "Auth",
"Authenticate": "Autentificer",
"Authentication": "Autentikation",
"Auto": "Auto",
"Auto-Copy Response to Clipboard": "Automatisk kopiering af svar til udklipsholder",
"Auto-playback response": "Automatisk afspil svar",
"Autocomplete Generation": "",
"Autocomplete Generation": "Genere automatisk fuldførsel",
"Autocomplete Generation Input Max Length": "",
"Automatic1111": "Automatic1111",
"AUTOMATIC1111 Api Auth String": "AUTOMATIC1111 Api Auth String",
"AUTOMATIC1111 Base URL": "AUTOMATIC1111 Base URL",
"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 Base URL er påkrævet.",
"Available list": "Tilgængelige lister",
"Available Tools": "",
"Available Tools": "Tilgængelige værktøj",
"available!": "tilgængelig!",
"Awful": "",
"Awful": "Forfærdeligt",
"Azure AI Speech": "Azure AI Speech",
"Azure Region": "Azure Region",
"Back": "Tilbage",
@ -138,26 +138,26 @@
"Batch Size (num_batch)": "Batch størrelse (num_batch)",
"before": "før",
"Being lazy": "At være doven",
"Beta": "",
"Beta": "Beta",
"Bing Search V7 Endpoint": "",
"Bing Search V7 Subscription Key": "",
"Bocha Search API Key": "",
"Boosting or penalizing specific tokens for constrained responses. Bias values will be clamped between -100 and 100 (inclusive). (Default: none)": "",
"Brave Search API Key": "Brave Search API nøgle",
"By {{name}}": "",
"By {{name}}": "Af {{name}}",
"Bypass Embedding and Retrieval": "",
"Calendar": "",
"Calendar": "Kalender",
"Call": "Opkald",
"Call feature is not supported when using Web STT engine": "Opkaldsfunktion er ikke understøttet for Web STT engine",
"Camera": "Kamera",
"Cancel": "Afbryd",
"Capabilities": "Funktioner",
"Capture": "",
"Certificate Path": "",
"Capture": "Indfang",
"Certificate Path": "Certifikat sti",
"Change Password": "Skift password",
"Channel Name": "",
"Channels": "",
"Character": "",
"Channel Name": "Kanalnavn",
"Channels": "Kanaler",
"Character": "Karakterer",
"Character limit for autocomplete generation input": "",
"Chart new frontiers": "",
"Chat": "Chat",
@ -414,6 +414,10 @@
"Enter Document Intelligence Key": "",
"Enter domains separated by commas (e.g., example.com,site.org)": "",
"Enter Exa API Key": "",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "Indtast Github Raw URL",
@ -511,10 +515,15 @@
"Export Tools": "Eksportér værktøjer",
"External": "",
"External Models": "Eksterne modeller",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to create API Key.": "Kunne ikke oprette API-nøgle.",
"Failed to fetch models": "",
"Failed to load file content.": "",
"Failed to read clipboard contents": "Kunne ikke læse indholdet af udklipsholderen",
"Failed to save connections": "",
"Failed to save models configuration": "",
@ -718,8 +727,12 @@
"Memory deleted successfully": "Hukommelse slettet.",
"Memory updated successfully": "Hukommelse opdateret.",
"Merge Responses": "Flet svar",
"Merged Response": "Sammensat svar",
"Message rating should be enabled to use this feature": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Beskeder, du sender efter at have oprettet dit link, deles ikke. Brugere med URL'en vil kunne se den delte chat.",
"Microsoft OneDrive": "",
"Microsoft OneDrive (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "Min P",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -761,6 +774,7 @@
"New Password": "Ny adgangskode",
"new-channel": "",
"No content found": "",
"No content found in file.": "",
"No content to speak": "Intet indhold at tale",
"No distance available": "",
"No feedbacks found": "",
@ -869,7 +883,7 @@
"Presence Penalty": "",
"Previous 30 days": "Seneste 30 dage",
"Previous 7 days": "Seneste 7 dage",
"Private": "",
"Private": "Privat",
"Profile Image": "Profilbillede",
"Prompt": "",
"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Prompt (f.eks. Fortæl mig en sjov kendsgerning om Romerriget)",
@ -888,7 +902,7 @@
"RAG Template": "RAG-skabelon",
"Rating": "",
"Re-rank models by topic similarity": "",
"Read": "",
"Read": "Læs",
"Read Aloud": "Læs højt",
"Reasoning Effort": "",
"Record voice": "Optag stemme",
@ -939,7 +953,7 @@
"Save Tag": "Gem tag",
"Saved": "Gemt",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Lagring af chatlogs direkte i din browsers lager understøttes ikke længere. Download og slet dine chatlogs ved at klikke på knappen nedenfor. Du kan nemt importere dine chatlogs til backend igennem",
"Scroll to bottom when switching between branches": "Rul til bunden, når du skifter mellem grene",
"Scroll On Branch Change": "",
"Search": "Søg",
"Search a model": "Søg efter en model",
"Search Base": "",
@ -953,7 +967,7 @@
"Search options": "",
"Search Prompts": "Søg i prompts",
"Search Result Count": "Antal søgeresultater",
"Search the internet": "",
"Search the internet": "Søg internettet",
"Search Tools": "Søg i værktøjer",
"SearchApi API Key": "SearchApi API-nøgle",
"SearchApi Engine": "SearchApi-engine",
@ -967,7 +981,7 @@
"Select a base model": "Vælg en basemodel",
"Select a engine": "Vælg en engine",
"Select a function": "Vælg en funktion",
"Select a group": "",
"Select a group": "Vælg en gruppe",
"Select a model": "Vælg en model",
"Select a pipeline": "Vælg en pipeline",
"Select a pipeline url": "Vælg en pipeline-URL",
@ -1031,7 +1045,7 @@
"Sign up": "Tilmeld dig",
"Sign up to {{WEBUI_NAME}}": "Tilmeld dig {{WEBUI_NAME}}",
"Signing in to {{WEBUI_NAME}}": "Logger ind på {{WEBUI_NAME}}",
"sk-1234": "",
"sk-1234": "sk-1234",
"Sougou Search API sID": "",
"Sougou Search API SK": "",
"Source": "Kilde",
@ -1099,8 +1113,8 @@
"This will delete all models including custom models and cannot be undone.": "",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "Dette vil nulstille vidensbasen og synkronisere alle filer. Vil du fortsætte?",
"Thorough explanation": "Grundig forklaring",
"Thought for {{DURATION}}": "",
"Thought for {{DURATION}} seconds": "",
"Thought for {{DURATION}}": "Tanker for {{DURATION}}",
"Thought for {{DURATION}} seconds": "Tanker for {{DURATION}} sekunder",
"Tika": "Tika",
"Tika Server URL required.": "Tika-server-URL påkrævet.",
"Tiktoken": "",
@ -1109,9 +1123,9 @@
"Title (e.g. Tell me a fun fact)": "Titel (f.eks. Fortæl mig en sjov kendsgerning)",
"Title Auto-Generation": "Automatisk titelgenerering",
"Title cannot be an empty string.": "Titel kan ikke være en tom streng.",
"Title Generation": "",
"Title Generation": "Titel Generation",
"Title Generation Prompt": "Prompt til titelgenerering",
"TLS": "",
"TLS": "TLS",
"To access the available model names for downloading,": "For at få adgang til de tilgængelige modelnavne til download,",
"To access the GGUF models available for downloading,": "For at få adgang til de GGUF-modeller, der er tilgængelige til download,",
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "For at få adgang til WebUI skal du kontakte administratoren. Administratorer kan administrere brugerstatus fra administrationspanelet.",
@ -1127,49 +1141,49 @@
"Toggle sidebar": "Skift sidebjælke",
"Token": "",
"Tokens To Keep On Context Refresh (num_keep)": "Tokens, der skal beholdes ved kontekstopdatering (num_keep)",
"Too verbose": "",
"Too verbose": "For ordrigt",
"Tool created successfully": "Værktøj oprettet.",
"Tool deleted successfully": "Værktøj slettet.",
"Tool Description": "",
"Tool ID": "",
"Tool Description": "Værktøjsbeskrivelse",
"Tool ID": "Værktøj-ID",
"Tool imported successfully": "Værktøj importeret.",
"Tool Name": "",
"Tool Servers": "",
"Tool Name": "Værktøjsnavn",
"Tool Servers": "Værktøjsserverer",
"Tool updated successfully": "Værktøj opdateret.",
"Tools": "Værktøjer",
"Tools Access": "",
"Tools Access": "Værktøjs Adgang",
"Tools are a function calling system with arbitrary code execution": "Værktøjer er et funktionkaldssystem med vilkårlig kodeudførelse",
"Tools Function Calling Prompt": "",
"Tools Function Calling Prompt": "Værktøjs Funktionkaldprompt",
"Tools have a function calling system that allows arbitrary code execution": "Værktøjer har et funktionkaldssystem, der tillader vilkårlig kodeudførelse",
"Tools have a function calling system that allows arbitrary code execution.": "Værktøjer har et funktionkaldssystem, der tillader vilkårlig kodeudførelse.",
"Tools Public Sharing": "",
"Tools Public Sharing": "Værktøjer Offentlig Deling",
"Top K": "Top K",
"Top K Reranker": "",
"Top P": "Top P",
"Transformers": "",
"Transformers": "Transformers",
"Trouble accessing Ollama?": "Problemer med at få adgang til Ollama?",
"Trust Proxy Environment": "",
"Trust Proxy Environment": "Stol på Proxymiljø",
"TTS Model": "TTS-model",
"TTS Settings": "TTS-indstillinger",
"TTS Voice": "TTS-stemme",
"Type": "Type",
"Type Hugging Face Resolve (Download) URL": "Indtast Hugging Face Resolve (Download) URL",
"Uh-oh! There was an issue with the response.": "",
"Uh-oh! There was an issue with the response.": "Uh-oh! Der var et problem det det svar.",
"UI": "UI",
"Unarchive All": "",
"Unarchive All Archived Chats": "",
"Unarchive Chat": "",
"Unlock mysteries": "",
"Unarchive All": "Udpak alle arkiver",
"Unarchive All Archived Chats": "Udpak alle arkiverede chats",
"Unarchive Chat": "Fjern chat fra arkiv",
"Unlock mysteries": "Lås op for mysterier",
"Unpin": "Frigør",
"Unravel secrets": "",
"Untagged": "",
"Unravel secrets": "Afslør hemmeligheder",
"Untagged": "Uden mærker",
"Update": "Opdater",
"Update and Copy Link": "Opdater og kopier link",
"Update for the latest features and improvements.": "Opdater for at få de nyeste funktioner og forbedringer.",
"Update password": "Opdater adgangskode",
"Updated": "",
"Updated": "Opdateret",
"Updated at": "Opdateret kl.",
"Updated At": "",
"Updated At": "Opdateret Klokken.",
"Upgrade to a licensed plan for enhanced capabilities, including custom theming and branding, and dedicated support.": "",
"Upload": "Upload",
"Upload a GGUF model": "Upload en GGUF-model",
@ -1178,7 +1192,7 @@
"Upload Files": "Upload filer",
"Upload Pipeline": "Upload pipeline",
"Upload Progress": "Uploadfremdrift",
"URL": "",
"URL": "URL",
"URL Mode": "URL-tilstand",
"Use '#' in the prompt input to load and include your knowledge.": "Brug '#' i promptinput for at indlæse og inkludere din viden.",
"Use Gravatar": "Brug Gravatar",
@ -1189,10 +1203,10 @@
"use_mlock (Ollama)": "use_mlock (Ollama)",
"use_mmap (Ollama)": "use_mmap (Ollama)",
"user": "bruger",
"User": "",
"User": "Bruger:",
"User location successfully retrieved.": "Brugerplacering hentet.",
"User Webhooks": "",
"Username": "",
"User Webhooks": "Bruger Webhooks",
"Username": "Brugernavn",
"Users": "Brugere",
"Using the default arena model with all models. Click the plus button to add custom models.": "",
"Utilize": "Anvend",
@ -1208,9 +1222,9 @@
"Version {{selectedVersion}} of {{totalVersions}}": "Version {{selectedVersion}} af {{totalVersions}}",
"View Replies": "",
"View Result from **{{NAME}}**": "",
"Visibility": "",
"Visibility": "Synlighed",
"Voice": "Stemme",
"Voice Input": "",
"Voice Input": "Stemme Input",
"Warning": "Advarsel",
"Warning:": "Advarsel:",
"Warning: Enabling this will allow users to upload arbitrary code on the server.": "",
@ -1229,31 +1243,31 @@
"WebUI will make requests to \"{{url}}\"": "",
"WebUI will make requests to \"{{url}}/api/chat\"": "",
"WebUI will make requests to \"{{url}}/chat/completions\"": "",
"What are you trying to achieve?": "",
"What are you working on?": "",
"What are you trying to achieve?": "Hvad prøver du at opnå?",
"What are you working on?": "Hvad arbejder du på?",
"Whats New in": "Nyheder i",
"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": "",
"wherever you are": "hvad end du er",
"Whisper (Local)": "Whisper (lokal)",
"Why?": "",
"Why?": "Hvorfor?",
"Widescreen Mode": "Widescreen-tilstand",
"Won": "",
"Won": "Vandt",
"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.": "",
"Workspace": "Arbejdsområde",
"Workspace Permissions": "",
"Write": "",
"Workspace Permissions": "Arbejdsområde rettigheder",
"Write": "Skriv",
"Write a prompt suggestion (e.g. Who are you?)": "Skriv et promptforslag (f.eks. Hvem er du?)",
"Write a summary in 50 words that summarizes [topic or keyword].": "Skriv en opsummering på 50 ord, der opsummerer [emne eller søgeord].",
"Write something...": "",
"Write your model template content here": "",
"Write something...": "Skriv noget...",
"Write your model template content here": "Skriv den model-skabelons indhold her",
"Yesterday": "I går",
"You": "Du",
"You are currently using a trial license. Please contact support to upgrade your license.": "",
"You can only chat with a maximum of {{maxCount}} file(s) at a time.": "Du kan kun chatte med maksimalt {{maxCount}} fil(er) ad gangen.",
"You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "Du kan personliggøre dine interaktioner med LLM'er ved at tilføje minder via knappen 'Administrer' nedenfor, hvilket gør dem mere nyttige og skræddersyet til dig.",
"You cannot upload an empty file.": "",
"You do not have permission to upload files": "",
"You do not have permission to upload files.": "",
"You cannot upload an empty file.": "Du kan ikke uploade en tom fil",
"You do not have permission to upload files": "Du har ikke rettighed til at uploade filer",
"You do not have permission to upload files.": "Du har ikke rettighed til at uploade filer.",
"You have no archived conversations.": "Du har ingen arkiverede samtaler.",
"You have shared this chat": "Du har delt denne chat",
"You're a helpful assistant.": "Du er en hjælpsom assistent.",
@ -1261,6 +1275,6 @@
"Your account status is currently pending activation.": "Din kontostatus afventer i øjeblikket aktivering.",
"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.": "Hele dit bidrag går direkte til plugin-udvikleren; Open WebUI tager ikke nogen procentdel. Den valgte finansieringsplatform kan dog have sine egne gebyrer.",
"Youtube": "Youtube",
"Youtube Language": "",
"Youtube Proxy URL": ""
"Youtube Language": "Youtube sprog",
"Youtube Proxy URL": "Youtube Proxy URL"
}

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "Löschen von Chats erlauben",
"Allow Chat Deletion": "Löschen von Chats erlauben",
"Allow Chat Edit": "Bearbeiten von Chats erlauben",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "Hochladen von Dateien erlauben",
"Allow Multiple Models in Chat": "Multiple Modelle in Chat erlauben",
"Allow non-local voices": "Nicht-lokale Stimmen erlauben",
@ -76,6 +78,7 @@
"Always": "Immer",
"Always Collapse Code Blocks": "Code-Blöcke immer zuklappen",
"Always Expand Details": "Details immer aufklappen",
"Always Play Notification Sound": "",
"Amazing": "Fantastisch",
"an assistant": "ein Assistent",
"Analyzed": "Analysiert",
@ -346,7 +349,7 @@
"Don't have an account?": "Haben Sie noch kein Benutzerkonto?",
"don't install random functions from sources you don't trust.": "installieren Sie keine Funktionen aus Quellen, denen Sie nicht vertrauen.",
"don't install random tools from sources you don't trust.": "installieren Sie keine Werkzeuge aus Quellen, denen Sie nicht vertrauen.",
"Don't like the style": "schlechter Schreibstil",
"Don't like the style": "Schlechter Schreibstil",
"Done": "Erledigt",
"Download": "Exportieren",
"Download as SVG": "Exportieren als SVG",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "",
"Enter domains separated by commas (e.g., example.com,site.org)": "Geben Sie die Domains durch Kommas separiert ein (z.B. example.com,site.org)",
"Enter Exa API Key": "Geben Sie den Exa-API-Schlüssel ein",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "Geben Sie die Firecrawl Basis-URL ein",
"Enter Firecrawl API Key": "Geben Sie den Firecrawl API-Schlüssel ein",
"Enter Github Raw URL": "Geben Sie die Github Raw-URL ein",
@ -511,10 +518,15 @@
"Export Tools": "Werkzeuge exportieren",
"External": "Extern",
"External Models": "Externe Modelle",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "Fehler beim Hinzufügen der Datei.",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to create API Key.": "Fehler beim Erstellen des API-Schlüssels.",
"Failed to fetch models": "Fehler beim Abrufen der Modelle",
"Failed to load file content.": "",
"Failed to read clipboard contents": "Fehler beim Abruf der Zwischenablage",
"Failed to save connections": "",
"Failed to save models configuration": "Fehler beim Speichern der Modellkonfiguration",
@ -718,8 +730,12 @@
"Memory deleted successfully": "Erinnerung erfolgreich gelöscht",
"Memory updated successfully": "Erinnerung erfolgreich aktualisiert",
"Merge Responses": "Antworten zusammenführen",
"Merged Response": "Zusammengeführte Antwort",
"Message rating should be enabled to use this feature": "Antwortbewertung muss aktiviert sein, um diese Funktion zu verwenden",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Nachrichten, die Sie nach der Erstellung Ihres Links senden, werden nicht geteilt. Nutzer mit der URL können den freigegebenen Chat einsehen.",
"Microsoft OneDrive": "",
"Microsoft OneDrive (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "Min P",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -761,6 +777,7 @@
"New Password": "Neues Passwort",
"new-channel": "neuer-kanal",
"No content found": "Kein Inhalt gefunden",
"No content found in file.": "",
"No content to speak": "Kein Inhalt zum Vorlesen",
"No distance available": "Keine Distanz verfügbar",
"No feedbacks found": "Kein Feedback gefunden",
@ -939,7 +956,7 @@
"Save Tag": "Tag speichern",
"Saved": "Gespeichert",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Das direkte Speichern von Chats im Browser-Speicher wird nicht mehr unterstützt. Bitte nehmen Sie einen Moment Zeit, um Ihre Chats zu exportieren und zu löschen, indem Sie auf die Schaltfläche unten klicken. Keine Sorge, Sie können Ihre Chats problemlos über das Backend wieder importieren.",
"Scroll to bottom when switching between branches": "Beim Wechsel zwischen Branches nach unten scrollen",
"Scroll On Branch Change": "",
"Search": "Suchen",
"Search a model": "Modell suchen",
"Search Base": "Suchbasis",

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "",
"Allow Chat Deletion": "Allow Delete Chats",
"Allow Chat Edit": "",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "",
@ -76,6 +78,7 @@
"Always": "",
"Always Collapse Code Blocks": "",
"Always Expand Details": "",
"Always Play Notification Sound": "",
"Amazing": "",
"an assistant": "such assistant",
"Analyzed": "",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "",
"Enter domains separated by commas (e.g., example.com,site.org)": "",
"Enter Exa API Key": "",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "",
@ -511,10 +518,15 @@
"Export Tools": "",
"External": "",
"External Models": "",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to create API Key.": "",
"Failed to fetch models": "",
"Failed to load file content.": "",
"Failed to read clipboard contents": "Failed to read clipboard borks",
"Failed to save connections": "",
"Failed to save models configuration": "",
@ -718,8 +730,12 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Merge Responses": "",
"Merged Response": "",
"Message rating should be enabled to use this feature": "",
"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 (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -761,6 +777,7 @@
"New Password": "New Barkword",
"new-channel": "",
"No content found": "",
"No content found in file.": "",
"No content to speak": "",
"No distance available": "",
"No feedbacks found": "",
@ -939,7 +956,7 @@
"Save Tag": "",
"Saved": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Saving chat logs in browser storage not support anymore. Pls download and delete your chat logs by click button below. Much easy re-import to backend through",
"Scroll to bottom when switching between branches": "",
"Scroll On Branch Change": "",
"Search": "Search very search",
"Search a model": "",
"Search Base": "",

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "Επιτρέπεται η διαγραφή συνομιλίας",
"Allow Chat Deletion": "Επιτρέπεται η Διαγραφή Συνομιλίας",
"Allow Chat Edit": "Επιτρέπεται η Επεξεργασία Συνομιλίας",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "Επιτρέπεται η Αποστολή Αρχείων",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "Επιτρέπονται μη τοπικές φωνές",
@ -76,6 +78,7 @@
"Always": "",
"Always Collapse Code Blocks": "",
"Always Expand Details": "",
"Always Play Notification Sound": "",
"Amazing": "Καταπληκτικό",
"an assistant": "ένας βοηθός",
"Analyzed": "",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "",
"Enter domains separated by commas (e.g., example.com,site.org)": "",
"Enter Exa API Key": "",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "Εισάγετε το Github Raw URL",
@ -511,10 +518,15 @@
"Export Tools": "Εξαγωγή Εργαλείων",
"External": "",
"External Models": "Εξωτερικά Μοντέλα",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "Αποτυχία προσθήκης αρχείου.",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to create API Key.": "Αποτυχία δημιουργίας Κλειδιού API.",
"Failed to fetch models": "",
"Failed to load file content.": "",
"Failed to read clipboard contents": "Αποτυχία ανάγνωσης περιεχομένων πρόχειρου",
"Failed to save connections": "",
"Failed to save models configuration": "Αποτυχία αποθήκευσης ρυθμίσεων μοντέλων",
@ -718,8 +730,12 @@
"Memory deleted successfully": "Η μνήμη διαγράφηκε με επιτυχία",
"Memory updated successfully": "Η μνήμη ενημερώθηκε με επιτυχία",
"Merge Responses": "Συγχώνευση Απαντήσεων",
"Merged Response": "Συγχωνευμένη απάντηση",
"Message rating should be enabled to use this feature": "Η αξιολόγηση μηνυμάτων πρέπει να είναι ενεργοποιημένη για να χρησιμοποιήσετε αυτή τη λειτουργία",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Τα μηνύματα που στέλνετε μετά τη δημιουργία του συνδέσμου σας δεν θα κοινοποιηθούν. Οι χρήστες με το URL θα μπορούν να δουν τη συνομιλία που μοιραστήκατε.",
"Microsoft OneDrive": "",
"Microsoft OneDrive (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "Min P",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -761,6 +777,7 @@
"New Password": "Νέος Κωδικός",
"new-channel": "",
"No content found": "Δεν βρέθηκε περιεχόμενο",
"No content found in file.": "",
"No content to speak": "Δεν υπάρχει περιεχόμενο για ανάγνωση",
"No distance available": "Δεν υπάρχει διαθέσιμη απόσταση",
"No feedbacks found": "Δεν βρέθηκαν ανατροφοδοτήσεις",
@ -939,7 +956,7 @@
"Save Tag": "Αποθήκευση Ετικέτας",
"Saved": "Αποθηκευμένο",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Η αποθήκευση των αρχείων συνομιλίας απευθείας στη μνήμη αποθήκευσης του προγράμματος περιήγησής σας δεν υποστηρίζεται πλέον. Παρακαλώ αφιερώστε λίγο χρόνο να κατεβάσετε και να διαγράψετε τα αρχεία συνομιλίας σας κάνοντας κλικ στο κουμπί παρακάτω. Μην ανησυχείτε, μπορείτε εύκολα να επαναφέρετε τα αρχεία συνομιλιών σας στο backend μέσω",
"Scroll to bottom when switching between branches": "Κύλιση προς τα κάτω όταν αλλάζετε μεταξύ κλάδων",
"Scroll On Branch Change": "",
"Search": "Αναζήτηση",
"Search a model": "Αναζήτηση μοντέλου",
"Search Base": "Βάση Αναζήτησης",

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "",
"Allow Chat Deletion": "",
"Allow Chat Edit": "",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "",
@ -76,6 +78,7 @@
"Always": "",
"Always Collapse Code Blocks": "",
"Always Expand Details": "",
"Always Play Notification Sound": "",
"Amazing": "",
"an assistant": "",
"Analyzed": "",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "",
"Enter domains separated by commas (e.g., example.com,site.org)": "",
"Enter Exa API Key": "",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "",
@ -511,10 +518,15 @@
"Export Tools": "",
"External": "",
"External Models": "",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to create API Key.": "",
"Failed to fetch models": "",
"Failed to load file content.": "",
"Failed to read clipboard contents": "",
"Failed to save connections": "",
"Failed to save models configuration": "",
@ -718,8 +730,12 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Merge Responses": "",
"Merged Response": "",
"Message rating should be enabled to use this feature": "",
"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 (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "",
"Mirostat": "",
"Mirostat Eta": "",
@ -761,6 +777,7 @@
"New Password": "",
"new-channel": "",
"No content found": "",
"No content found in file.": "",
"No content to speak": "",
"No distance available": "",
"No feedbacks found": "",
@ -939,7 +956,7 @@
"Save Tag": "",
"Saved": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "",
"Scroll to bottom when switching between branches": "",
"Scroll On Branch Change": "",
"Search": "",
"Search a model": "",
"Search Base": "",

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "",
"Allow Chat Deletion": "",
"Allow Chat Edit": "",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "",
@ -76,6 +78,7 @@
"Always": "",
"Always Collapse Code Blocks": "",
"Always Expand Details": "",
"Always Play Notification Sound": "",
"Amazing": "",
"an assistant": "",
"Analyzed": "",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "",
"Enter domains separated by commas (e.g., example.com,site.org)": "",
"Enter Exa API Key": "",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "",
@ -511,10 +518,15 @@
"Export Tools": "",
"External": "",
"External Models": "",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to create API Key.": "",
"Failed to fetch models": "",
"Failed to load file content.": "",
"Failed to read clipboard contents": "",
"Failed to save connections": "",
"Failed to save models configuration": "",
@ -718,8 +730,12 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Merge Responses": "",
"Merged Response": "",
"Message rating should be enabled to use this feature": "",
"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 (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "",
"Mirostat": "",
"Mirostat Eta": "",
@ -761,6 +777,7 @@
"New Password": "",
"new-channel": "",
"No content found": "",
"No content found in file.": "",
"No content to speak": "",
"No distance available": "",
"No feedbacks found": "",
@ -939,7 +956,7 @@
"Save Tag": "",
"Saved": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "",
"Scroll to bottom when switching between branches": "",
"Scroll On Branch Change": "",
"Search": "",
"Search a model": "",
"Search Base": "",

View file

@ -14,29 +14,29 @@
"*Prompt node ID(s) are required for image generation": "Los ID de nodo son requeridos para la generación de imágenes",
"A new version (v{{LATEST_VERSION}}) is now available.": "Nueva versión (v{{LATEST_VERSION}}) disponible.",
"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/a usuari@",
"a user": "un usuario",
"About": "Acerca de",
"Accept autocomplete generation / Jump to prompt variable": "Aceptar generación de autocompletado / Saltar a indicador variable",
"Access": "Acceso",
"Access Control": "Control de Acceso",
"Accessible to all users": "Accesible para todos l@s usuari@s",
"Accessible to all users": "Accesible para todos los usuarios",
"Account": "Cuenta",
"Account Activation Pending": "Activación de cuenta Pendiente",
"Accurate information": "Información precisa",
"Actions": "Acciones",
"Activate": "Activar",
"Activate this command by typing \"/{{COMMAND}}\" to chat input.": "Activar este comando escribiendo \"/{{COMMAND}}\" en el chat",
"Active Users": "Usuari@s activos",
"Active Users": "Usuarios activos",
"Add": "Añadir",
"Add a model ID": "Añadir un ID de modelo",
"Add a short description about what this model does": "Añadir una breve descripción sobre lo que hace este modelo",
"Add a tag": "Añadir una etiqueta",
"Add Arena Model": "Añadir un modelo a la Arena",
"Add Arena Model": "Añadir modelo a la Arena",
"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 Files": "Añadir Ficheros",
"Add Files": "Añadir Archivos",
"Add Group": "Añadir Grupo",
"Add Memory": "Añadir Memoria",
"Add Model": "Añadir Modelo",
@ -44,31 +44,33 @@
"Add Tag": "Añadir etiqueta",
"Add Tags": "Añadir etiquetas",
"Add text content": "Añade contenido de texto",
"Add User": "Añadir Usuari@",
"Add User Group": "Añadir Grupo de Usuari@",
"Adjusting these settings will apply changes universally to all users.": "El ajuste de estas opciones se aplicará globalmente a todos l@s usuari@s.",
"Add User": "Añadir Usuario",
"Add User Group": "Añadir grupo de usuarios",
"Adjusting these settings will apply changes universally to all users.": "El ajuste de estas opciones se aplicará globalmente a todos los usuarios.",
"admin": "admin",
"Admin": "Admin",
"Admin Panel": "Administración",
"Admin Settings": "Ajustes de Admin",
"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Los Admins tienen acceso a todas las herramientas en todo momento; l@s usuari@s necesitan, en el área de trabajo, que los modelos tengan asignadas las herramentas.",
"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Los administradores tienen acceso a todas las herramientas en todo momento; los usuarios necesitan que los modelos tengan asignadas las herramientas en el area de trabajo.",
"Advanced Parameters": "Parámetros Avanzados",
"Advanced Params": "Param. Avanz.",
"Advanced Params": "Parámetros Avanzados",
"All": "Todos",
"All Documents": "Todos los Documentos",
"All models deleted successfully": "Todos los modelos borrados correctamnete",
"Allow Call": "",
"Allow Call": "Permitir Llamada",
"Allow Chat Controls": "Permitir Controles del Chat",
"Allow Chat Delete": "Permitir Borrar Chat",
"Allow Chat Deletion": "Permitir Borrado de Chat",
"Allow Chat Edit": "Pemritir Editar Chat",
"Allow File Upload": "Permitir Subida de Ficheros",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "Permitir Subida de Archivos",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "Permitir voces no locales",
"Allow Speech to Text": "",
"Allow Temporary Chat": "Permitir Chat Temporal",
"Allow Text to Speech": "",
"Allow User Location": "Permitir Ubicación de Usuari@",
"Allow User Location": "Permitir Ubicación de Usuario",
"Allow Voice Interruption in Call": "Permitir Interrupción de Voz en Llamada",
"Allowed Endpoints": "Endpoints Permitidos",
"Already have an account?": "¿Ya tienes una cuenta?",
@ -76,6 +78,7 @@
"Always": "Siempre",
"Always Collapse Code Blocks": "Plegar Siempre los Bloques de Código",
"Always Expand Details": "Expandir Siempre Detalles",
"Always Play Notification Sound": "",
"Amazing": "Emocionante",
"an assistant": "un asistente",
"Analyzed": "Analizado",
@ -91,34 +94,34 @@
"API keys": "Claves API",
"Application DN": "Aplicacion DN",
"Application DN Password": "Contraseña Aplicacion DN",
"applies to all users with the \"user\" role": "se aplica a todos l@s usuari@s con el rol \"user\" ",
"applies to all users with the \"user\" role": "se aplica a todos los usuarios con el rol \"user\" ",
"April": "Abril",
"Archive": "Archivar",
"Archive All Chats": "Archivar Todos los Chats",
"Archived Chats": "Chats archivados",
"archived-chat-export": "exportar chats archivados",
"Are you sure you want to clear all memories? This action cannot be undone.": "¿estas segur@ que quieres borrar todas las memorias? (¡esta acción NO se puede deshacer!)",
"Are you sure you want to delete this channel?": "¿Estás segur@ de que quieres eliminar este canal?",
"Are you sure you want to delete this message?": "¿Estás segur@ de que quieres eliminar este mensaje? ",
"Are you sure you want to unarchive all archived chats?": "¿Estás segur@ de que quieres desarchivar todos los chats archivados?",
"Are you sure?": "¿Está segur@?",
"Are you sure you want to clear all memories? This action cannot be undone.": "¿Seguro que quieres borrar todas las memorias? (¡esta acción NO se puede deshacer!)",
"Are you sure you want to delete this channel?": "¿Seguro de que quieres eliminar este canal?",
"Are you sure you want to delete this message?": "¿Seguro de que quieres eliminar este mensaje? ",
"Are you sure you want to unarchive all archived chats?": "¿Seguro de que quieres desarchivar todos los chats archivados?",
"Are you sure?": "¿Estás seguro?",
"Arena Models": "Arena de Modelos",
"Artifacts": "Artefactos",
"Ask": "Preguntar",
"Ask a question": "Haz una pregunta",
"Assistant": "Asistente",
"Attach file from knowledge": "Adjuntar fichero desde el conocimiento",
"Attach file from knowledge": "Adjuntar archivo desde conocimiento",
"Attention to detail": "Atención al detalle",
"Attribute for Mail": "Atributo para Correo",
"Attribute for Username": "Atributo para Nombre de Usuari@",
"Attribute for Username": "Atributo para Nombre de Usuario",
"Audio": "Audio",
"August": "Agosto",
"Auth": "Autorización",
"Authenticate": "Autentificar",
"Authentication": "Autentificación",
"Authentication": "Autenticación",
"Auto": "Auto",
"Auto-Copy Response to Clipboard": "AutoCopiado de respuesta al Portapapeles",
"Auto-playback response": "AutoReproducir Respuesta",
"Auto-playback response": "Reproducir Respuesta automáticamente",
"Autocomplete Generation": "Generación de Autocompletado",
"Autocomplete Generation Input Max Length": "Max. Longitud de Entrada en Generación de Autocompletado",
"Automatic1111": "AUTOMATIC1111",
@ -126,7 +129,7 @@
"AUTOMATIC1111 Base URL": "URL Base de AUTOMATIC1111",
"AUTOMATIC1111 Base URL is required.": "la URL Base de AUTOMATIC1111 es necesaria.",
"Available list": "Lista disponible",
"Available Tools": "",
"Available Tools": "Herramientas Disponibles",
"available!": "¡disponible!",
"Awful": "Horrible",
"Azure AI Speech": "Voz Azure AI",
@ -148,23 +151,23 @@
"Bypass Embedding and Retrieval": "Evitar Incrustración y Recuperación",
"Calendar": "Calendario",
"Call": "Llamada",
"Call feature is not supported when using Web STT engine": "La característica Llamada no está soportada cuando se usa el motor Web STT",
"Call feature is not supported when using Web STT engine": "La funcionalidad de Llamada no está soportada cuando se usa el motor Web STT",
"Camera": "Cámara",
"Cancel": "Cancelar",
"Capabilities": "Capacidades",
"Capture": "Captura",
"Certificate Path": "Ruta a Certificado",
"Change Password": "Cambia la Contraseña",
"Channel Name": "Nombre de Canal",
"Change Password": "Cambiar Contraseña",
"Channel Name": "Nombre del Canal",
"Channels": "Canal",
"Character": "Carácter",
"Character limit for autocomplete generation input": "Límite de caracteres de entrada de la generación de autocompletado",
"Chart new frontiers": "Trazar nuevas fronteras",
"Chat": "Chat",
"Chat Background Image": "Imágen de Fondo del Chat",
"Chat Bubble UI": "Interface del Chat tipo Burbuja",
"Chat Controls": "Controles del chat",
"Chat direction": "Dirección del Chat",
"Chat Bubble UI": "Interface de Chat tipo Burbuja",
"Chat Controls": "Controles de chat",
"Chat direction": "Dirección de Chat",
"Chat Overview": "Vista General del Chat",
"Chat Permissions": "Permisos del Chat",
"Chat Tags Auto-Generation": "AutoGeneración de Etiquetas de Chat",
@ -183,15 +186,15 @@
"Click here for filter guides.": "Pulsar aquí para guías de filtros",
"Click here for help.": "Pulsar aquí para Ayuda.",
"Click here to": "Pulsa aquí para",
"Click here to download user import template file.": "Pulsa aquí para descargar la plantilla de importación de usuari@.",
"Click here to learn more about faster-whisper and see the available models.": "Pulsa aquí para saber más sobre faster-whisper y ver modelos disponibles.",
"Click here to download user import template file.": "Pulsa aquí para descargar la plantilla para importar usuarios.",
"Click here to learn more about faster-whisper and see the available models.": "Pulsa aquí para saber más sobre faster-whisper y ver los modelos disponibles.",
"Click here to see available models.": "Pulsa aquí para ver modelos disponibles.",
"Click here to select": "Pulsa aquí para seleccionar",
"Click here to select a csv file.": "Pulsa aquí para seleccionar un fichero de Valores Separados por Comas (.csv)",
"Click here to select a py file.": "Pulsa aquí para seleccionar un fichero Python (.py)",
"Click here to upload a workflow.json file.": "Pulsa aquí para subir un fichero workflow.json",
"click here.": "Pulsa aquí.",
"Click on the user role button to change a user's role.": "Pulsa en el botón rol de usuari@ para cambiar su rol.",
"Click on the user role button to change a user's role.": "Pulsa en el botón rol de usuario para cambiar su rol.",
"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Permisos de escritura del portapapeles denegado. Por favor, comprueba la configuración de tu navegador para otorgar el permiso necesario.",
"Clone": "Clonar",
"Clone Chat": "Clonar Chat",
@ -200,8 +203,8 @@
"Code execution": "Ejecución de Código",
"Code Execution": "Ejecución de Código",
"Code Execution Engine": "Motor de Ejecución de Código",
"Code Execution Timeout": "Tiempo",
"Code formatted successfully": "Se ha formateado correctamente el código.",
"Code Execution Timeout": "Tiempo límite de espera para Ejecución de Código",
"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",
@ -287,7 +290,7 @@
"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.",
"Default User Role": "Rol Predeterminado de l@s Usuari@s Nuev@s",
"Default User Role": "Rol predeterminado de los nuevos usuarios",
"Delete": "Borrar",
"Delete a model": "Borrar un modelo",
"Delete All Chats": "Borrar todos los chats",
@ -302,17 +305,17 @@
"Delete prompt?": "¿Borrar el indicador?",
"delete this link": "Borrar este enlace",
"Delete tool?": "¿Borrar la herramienta?",
"Delete User": "Borrar Usuari@",
"Delete User": "Borrar Usuario",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} Borrado",
"Deleted {{name}}": "{{nombre}} Borrado",
"Deleted User": "Usuari@ Borrado",
"Deleted User": "Usuario Borrado",
"Describe your knowledge base and objectives": "Describe tu Base de Conocimientos y sus objetivos",
"Description": "Descripción",
"Detect Artifacts Automatically": "",
"Detect Artifacts Automatically": "Detectar Artefactos Automáticamente",
"Didn't fully follow instructions": "No seguiste completamente las instrucciones",
"Direct": "Directo",
"Direct Connections": "Conexiones Directas",
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Las Conexiones Directas permiten a l@s usuari@s conectar a sus propios endpoints compatibles API OpenAI.",
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Las Conexiones Directas permiten a los usuarios conectar a sus propios endpoints compatibles API OpenAI.",
"Direct Connections settings updated": "Se actualizaron las configuraciones de las Conexiones Directas",
"Direct Tool Servers": "Servidores de Herramientas Directos",
"Disabled": "Deshabilitado",
@ -328,8 +331,8 @@
"Discover, download, and explore model presets": "Descubre, descarga y explora modelos con preajustados",
"Dismissible": "Desestimable",
"Display": "Mostrar",
"Display Emoji in Call": "Muestra chirimbolitos(Emojis) en Llamada",
"Display the username instead of You in the Chat": "Mostrar en el chat el nombre de usuari@ en lugar del genérico Tu/Usted",
"Display Emoji in Call": "Muestra Emojis en Llamada",
"Display the username instead of You in the Chat": "Mostrar en el chat el nombre de usuario en lugar del genérico Tu",
"Displays citations in the response": "Mostrar citas en la respuesta",
"Dive into knowledge": "Sumérgete en el conocimiento",
"Do not install functions from sources you do not fully trust.": "¡No instalar funciones de fuentes en las que que no se confíe totalmente!",
@ -344,8 +347,8 @@
"does not make any external connections, and your data stays securely on your locally hosted server.": "no se realiza ninguna conexión externa y tus datos permanecen seguros alojados localmente en tu servidor.",
"Domain Filter List": "Lista de Filtrado de Dominio",
"Don't have an account?": "¿No tienes una cuenta?",
"don't install random functions from sources you don't trust.": "¡no instalar funciones aleatorias de fuentes en las que no se confíe!",
"don't install random tools from sources you don't trust.": "¡no instalar herramientas aleatorias de fuentes en las que no se confíe!",
"don't install random functions from sources you don't trust.": "¡no instalar funciones desconocidas de fuentes en las que no se confíe!",
"don't install random tools from sources you don't trust.": "¡no instalar herramientas desconocidas de fuentes en las que no se confíe!",
"Don't like the style": "¿No te gusta el estilo?",
"Done": "Hecho",
"Download": "Descargar",
@ -358,21 +361,21 @@
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p.ej. '30s','10m'. Unidades de tiempo válidas son 's', 'm', 'h'.",
"e.g. \"json\" or a JSON schema": "p.ej. \"json\" o un esquema JSON",
"e.g. 60": "p.ej. 60",
"e.g. A filter to remove profanity from text": "p.ej. Un filtro para eliminar 'blasfemia' del texto",
"e.g. A filter to remove profanity from text": "p.ej. Un filtro para eliminar malas palabras del texto",
"e.g. My Filter": "p.ej. Mi Filtro",
"e.g. My Tools": "p.ej. Mis Herramientas",
"e.g. my_filter": "p.ej. mi_filtro",
"e.g. my_tools": "p.ej. mis_herramientas",
"e.g. Tools for performing various operations": "p.ej. Herramientas para realizar varias operaciones",
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
"e.g., en-US,ja-JP (leave blank for auto-detect)": "p. ej., en-US,ja-JP (dejar en blanco para detectar automáticamente)",
"Edit": "Editar",
"Edit Arena Model": "Editar Modelo en Arena",
"Edit Channel": "Editar Canal",
"Edit Connection": "Editar Conexión",
"Edit Default Permissions": "Editar Permisos Predeterminados",
"Edit Memory": "Editar Memoria",
"Edit User": "Editar Usuari@",
"Edit User Group": "Editar Grupo de Usuari@",
"Edit User": "Editar Usuario",
"Edit User Group": "Editar Grupo de Usuarios",
"ElevenLabs": "ElevenLabs",
"Email": "Email",
"Embark on adventures": "Embarcate en aventuras",
@ -390,13 +393,13 @@
"Enable Memory Mapping (mmap) to load model data. This option allows the system to use disk storage as an extension of RAM by treating disk files as if they were in RAM. This can improve model performance by allowing for faster data access. However, it may not work correctly with all systems and can consume a significant amount of disk space.": "Habilitar Mapeado de Memoria (mmap) para cargar datos del modelo. Esta opción permite al sistema usar el almacenamiento del disco como una extensión de la RAM al tratar los archivos en disco como si estuvieran en la RAM. Esto puede mejorar el rendimiento del modelo al permitir un acceso más rápido a los datos. Sin embargo, puede no funcionar correctamente con todos los sistemas y puede consumir una cantidad significativa de espacio en disco.",
"Enable Message Rating": "Habilitar Calificación de los Mensajes",
"Enable Mirostat sampling for controlling perplexity.": "Algoritmo de decodificación de texto neuronal que controla activamente el proceso generativo para mantener la perplejidad del texto generado en un valor deseado. Previene las trampas de aburrimiento (por excesivas repeticiones) y de incoherencia (por generación de excesivo texto).",
"Enable New Sign Ups": "Habilitar Registros de Nuev@s Usuari@s",
"Enable New Sign Ups": "Habilitar Registros de Nuevos Usuarios",
"Enabled": "Habilitado",
"Enforce Temporary Chat": "",
"Enforce Temporary Chat": "Forzar el uso de Chat Temporal",
"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 api auth string (e.g. username:password)": "Ingresar cadena de autorización de la api (p.ej. nombre:contraseña)",
"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",
"Enter Bing Search V7 Endpoint": "Ingresar el Endpoint de Bing Search V7",
@ -414,8 +417,12 @@
"Enter Document Intelligence Key": "Ingresar Clave de Azure Document Intelligence",
"Enter domains separated by commas (e.g., example.com,site.org)": "Ingresar dominios separados por comas (p.ej., ejemplo.com,sitio.org)",
"Enter Exa API Key": "Ingresar Clave API de Exa",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "Ingresar URL Base del API de Firecrawl",
"Enter Firecrawl API Key": "Ingresar Clave del API de Firecrawl",
"Enter Github Raw URL": "Ingresar URL Github en Bruto(raw)",
"Enter Google PSE API Key": "Ingresar Clave API de Google PSE",
"Enter Google PSE Engine Id": "Ingresa ID del Motor PSE de Google",
@ -433,8 +440,8 @@
"Enter Mojeek Search API Key": "Ingresar Clave API de Mojeek Search",
"Enter Number of Steps (e.g. 50)": "Ingresar Número de Pasos (p.ej., 50)",
"Enter Perplexity API Key": "Ingresar Clave API de Perplexity",
"Enter Playwright Timeout": "",
"Enter Playwright WebSocket URL": "",
"Enter Playwright Timeout": "Ingresar límite de tiempo de espera de Playwright",
"Enter Playwright WebSocket URL": "Ingresar URL de WebSocket de Playwright",
"Enter proxy URL (e.g. https://user:password@host:port)": "Ingresar URL del proxy (p.ej. https://user:password@host:port)",
"Enter reasoning effort": "Ingresar esfuerzo de razonamiento",
"Enter Sampler (e.g. Euler a)": "Ingresar Muestreador (p.ej., Euler a)",
@ -452,16 +459,16 @@
"Enter server host": "Ingresar host del servidor",
"Enter server label": "Ingresar etiqueta del servidor",
"Enter server port": "Ingresar puerto del servidor",
"Enter Sougou Search API sID": "",
"Enter Sougou Search API SK": "",
"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 Tavily API Key": "Ingresar Clave API de Tavily",
"Enter Tavily Extract Depth": "",
"Enter the public URL of your WebUI. This URL will be used to generate links in the notifications.": "Ingresar URL pública de su WebUI. Esta URL se usará para generar enlaces en las notificaciones.",
"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.",
"Enter Tika Server URL": "Ingresar URL del servidor Tika",
"Enter timeout in seconds": "Ingresar timeout en segundos",
"Enter timeout in seconds": "Ingresar tiempo límite de espera en segundos",
"Enter to Send": "'Enter' para Enviar",
"Enter Top K": "Ingresar Top K",
"Enter Top K Reranker": "Ingresar Top K Reclasificador",
@ -475,8 +482,8 @@
"Enter your new password": "Ingresa tu contraseña nueva",
"Enter Your Password": "Ingresa tu contraseña",
"Enter Your Role": "Ingresa tu rol",
"Enter Your Username": "Ingresa tu nombre de usuari@",
"Enter your webhook URL": "Ingresa tu URL de enganchesWeb(webhook)",
"Enter Your Username": "Ingresa tu nombre de usuario",
"Enter your webhook URL": "Ingresa tu URL de webhook",
"Error": "Error",
"ERROR": "ERROR",
"Error accessing Google Drive: {{error}}": "Error accediendo a Google Drive: {{error}}",
@ -488,18 +495,18 @@
"Example: mail": "Ejemplo: correo",
"Example: ou=users,dc=foo,dc=example": "Ejemplo: ou=usuarios,dc=foo,dc=ejemplo",
"Example: sAMAccountName or uid or userPrincipalName": "Ejemplo: sAMNombreCuenta o uid o userNombrePrincipal",
"Exceeded the number of seats in your license. Please contact support to increase the number of seats.": "Excedido el número de accesos en su licencia. Por favor, contacte con soporte para aumentar el número de accesos.",
"Exceeded the number of seats in your license. Please contact support to increase the number of seats.": "Excedido el número de accesos de usuarios en tu licencia. Por favor, contacta con soporte para aumentar el número de accesos.",
"Exclude": "Excluir",
"Execute code for analysis": "Ejecutar código para análisis",
"Executing **{{NAME}}**...": "",
"Executing **{{NAME}}**...": "Ejecutando **{{NAME}}**...",
"Expand": "Expandir",
"Experimental": "Experimental",
"Explain": "Explicar",
"Explain this section to me in more detail": "Explicame esta sección con más detalle",
"Explain this section to me in more detail": "Explícame esta sección con más detalle",
"Explore the cosmos": "Explora el cosmos",
"Export": "Exportar",
"Export All Archived Chats": "Exportar Todos los Chats Archivados",
"Export All Chats (All Users)": "Exportar Todos los Chats (Todos l@s Usuari@s)",
"Export All Chats (All Users)": "Exportar Todos los Chats (Todos los Usuarios)",
"Export chat (.json)": "Exportar chat (.json)",
"Export Chats": "Exportar Chats",
"Export Config to JSON File": "Exportar Configuración a archivo JSON",
@ -511,10 +518,15 @@
"Export Tools": "Exportar Herramientas",
"External": "Externo",
"External Models": "Modelos Externos",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "Fallo al añadir el archivo.",
"Failed to connect to {{URL}} OpenAPI tool server": "Fallo al conectar al servidor de herramientas {{URL}}",
"Failed to create API Key.": "Fallo al crear la Clave API.",
"Failed to fetch models": "Fallo al obtener los modelos",
"Failed to load file content.": "",
"Failed to read clipboard contents": "Fallo al leer el contenido del portapapeles",
"Failed to save connections": "Fallo al grabar las conexiones",
"Failed to save models configuration": "Fallo al guardar la configuración de los modelos",
@ -523,8 +535,8 @@
"Features": "Características",
"Features Permissions": "Permisos de las Características",
"February": "Febrero",
"Feedback History": "Historial de realimentación",
"Feedbacks": "Realimentaciones",
"Feedback History": "Historial de Opiniones",
"Feedbacks": "Opiniones",
"Feel free to add specific details": "Añade libremente detalles específicos",
"File": "Archivo",
"File added successfully.": "Archivo añadido correctamente.",
@ -539,11 +551,11 @@
"Filter is now globally enabled": "El filtro ahora está habilitado globalmente",
"Filters": "Filtros",
"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Se detectó suplantación de huellas: No se pueden usar las iniciales como avatar. Se establece la imagen de perfil predeterminada.",
"Firecrawl API Base URL": "",
"Firecrawl API Key": "",
"Firecrawl API Base URL": "URL Base de API de Firecrawl",
"Firecrawl API Key": "Clave de API de Firecrawl",
"Fluidly stream large external response chunks": "Transmisión fluida de fragmentos de grandes respuestas externas",
"Focus chat input": "Enfoque entrada del chat",
"Folder deleted successfully": "Carpeta bollada correctamente",
"Focus chat input": "Enfocar campo de chat",
"Folder deleted successfully": "Carpeta eliminada correctamente",
"Folder name cannot be empty": "El nombre de la carpeta no puede estar vacío",
"Folder name cannot be empty.": "El nombre de la carpeta no puede estar vacío",
"Folder name updated successfully": "Nombre de la carpeta actualizado correctamente",
@ -718,8 +730,12 @@
"Memory deleted successfully": "Memoria borrada correctamente",
"Memory updated successfully": "Memoria actualizada correctamente",
"Merge Responses": "Fusionar Respuestas",
"Merged Response": "Respuesta combinada",
"Message rating should be enabled to use this feature": "Para usar esta función debe estar habilitada la calificación de mensajes",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Los mensajes que envíe después de la creación del enlace no se compartirán. L@s usuari@s con la URL del enlace podrán ver el chat compartido.",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Los mensajes que envíe después de la creación del enlace no se compartirán. Los usuarios con la URL del enlace podrán ver el chat compartido.",
"Microsoft OneDrive": "",
"Microsoft OneDrive (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "Min P",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -761,6 +777,7 @@
"New Password": "Nueva Contraseña",
"new-channel": "nuevo-canal",
"No content found": "No se encontró contenido",
"No content found in file.": "",
"No content to speak": "No hay contenido para hablar",
"No distance available": "No hay distancia disponible",
"No feedbacks found": "No se encontraron realimentaciones",
@ -777,7 +794,7 @@
"No results found": "No se encontraron resultados",
"No search query generated": "No se generó ninguna consulta de búsqueda",
"No source available": "No hay fuente disponible",
"No users were found.": "No se encontraron usuari@s.",
"No users were found.": "No se encontraron usuarios.",
"No valves to update": "No hay válvulas para actualizar",
"None": "Ninguno",
"Not factually correct": "No es correcto en todos los aspectos",
@ -804,7 +821,7 @@
"Only alphanumeric characters and hyphens are allowed": "Sólo están permitidos caracteres alfanuméricos y guiones",
"Only alphanumeric characters and hyphens are allowed in the command string.": "Sólo están permitidos en la cadena de comandos caracteres alfanuméricos y guiones.",
"Only collections can be edited, create a new knowledge base to edit/add documents.": "Solo se pueden editar las colecciones, para añadir/editar documentos hay que crear una nueva base de conocimientos",
"Only select users and groups with permission can access": "Solo pueden acceder l@s usuari@s y grupos con permiso",
"Only select users and groups with permission can access": "Solo pueden acceder los usuarios y grupos con permiso",
"Oops! Looks like the URL is invalid. Please double-check and try again.": "¡vaya! Parece que la URL es inválida. Por favor, revisala y reintenta de nuevo.",
"Oops! There are files still uploading. Please wait for the upload to complete.": "¡vaya! Todavía hay archivos subiendose. Por favor, espera a que se complete la subida.",
"Oops! There was an error in the previous response.": "¡vaya! Hubo un error en la respuesta previa.",
@ -824,7 +841,7 @@
"OpenAI URL/Key required.": "URL/Clave de OpenAI requerida.",
"openapi.json Path": "Ruta a openapi.json",
"or": "o",
"Organize your users": "Organiza tus usuari@s",
"Organize your users": "Organiza tus usuarios",
"Other": "Otro",
"OUTPUT": "SALIDA",
"Output format": "Formato de salida",
@ -851,8 +868,8 @@
"Pipelines Valves": "Válvulas de Tuberías",
"Plain text (.txt)": "Texto plano (.txt)",
"Playground": "Zona de Pruebas",
"Playwright Timeout (ms)": "",
"Playwright WebSocket URL": "",
"Playwright Timeout (ms)": "Tiempo Límite de Espera (ms) de Playwright",
"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",
@ -894,7 +911,7 @@
"Record voice": "Grabar voz",
"Redirecting you to Open WebUI Community": "Redireccionando a la Comunidad 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.": "Reduce la probabilidad de generación sin sentido. Un valor más alto (p.ej. 100) dará respuestas más diversas, mientras que un valor más bajo (p.ej. 10) será más conservador.",
"Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Referir a ti mismo como \"Usuari@\" (p.ej. \"Usuari@ está aprendiendo Español\")",
"Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Referir a ti mismo como \"Usuario\" (p.ej. \"Usuario está aprendiendo Español\")",
"References from": "Referencias desde",
"Refused when it shouldn't have": "Rechazado cuando no debería haberlo hecho",
"Regenerate": "Regenerar",
@ -902,7 +919,7 @@
"Reindex Knowledge Base Vectors": "Reindexar Base Vectorial de Conocimiento",
"Release Notes": "Notas de la Versión",
"Relevance": "Relevancia",
"Relevance Threshold": "",
"Relevance Threshold": "Umbral de Relevancia",
"Remove": "Eliminar",
"Remove Model": "Eliminar Modelo",
"Rename": "Renombrar",
@ -939,7 +956,7 @@
"Save Tag": "Guardar Etiqueta",
"Saved": "Guardado",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Ya no está soportado guardar registros de chat directamente en el almacenamiento del navegador. Por favor, dedica un momento a descargar y eliminar tus registros de chat pulsando en el botón de abajo. No te preocupes, puedes re-importar fácilmente tus registros desde las opciones de configuración",
"Scroll to bottom when switching between branches": "Desplazar hacia abajo cuando se cambia de rama",
"Scroll On Branch Change": "",
"Search": "Buscar",
"Search a model": "Buscar un Modelo",
"Search Base": "Busqueda Base",
@ -1020,7 +1037,7 @@
"Show": "Mostrar",
"Show \"What's New\" modal on login": "Mostrar modal \"Qué hay de Nuevo\" al iniciar sesión",
"Show Admin Details in Account Pending Overlay": "Mostrar Detalles Admin en la sobrecapa de 'Cuenta Pendiente'",
"Show Model": "",
"Show Model": "Mostrar Modelo",
"Show shortcuts": "Mostrar Atajos",
"Show your support!": "¡Muestra tu apoyo!",
"Showcased creativity": "Creatividad exhibida",
@ -1061,7 +1078,7 @@
"Tap to interrupt": "Toca para interrumpir",
"Tasks": "Tareas",
"Tavily API Key": "Clave API de Tavily",
"Tavily Extract Depth": "",
"Tavily Extract Depth": "Parámetro Extract Depth de Taviliy",
"Tell us more:": "Dinos algo más:",
"Temperature": "Temperatura",
"Template": "Plantilla",
@ -1069,14 +1086,14 @@
"Text Splitter": "Divisor de Texto",
"Text-to-Speech Engine": "Motor Texto a Voz(TTS)",
"Tfs Z": "TFS Z",
"Thanks for your feedback!": "¡Gracias por tu realimentación!",
"Thanks for your feedback!": "¡Gracias por tu comentario!",
"The Application Account DN you bind with for search": "Cuenta DN de la aplicación vinculada para búsqueda",
"The base to search for users": "La base para buscar usuari@s",
"The base to search for users": "Base para buscar usuarios",
"The batch size determines how many text requests are processed together at once. A higher batch size can increase the performance and speed of the model, but it also requires more memory.": "El tamaño de lote determina cuántas solicitudes de texto se procesan juntas de una vez. Un tamaño de lote más alto puede aumentar el rendimiento y la velocidad del modelo, pero también requiere más memoria.",
"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "L@s desarrolladores de este complemento son apasionad@s voluntari@s de la comunidad. Si este complemento te es útil, por favor considera contribuir a su desarrollo.",
"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "Quienes desarollaron este complemento son apasionados voluntarios/as de la comunidad. Si este complemento te es útil, por favor considera contribuir a su desarrollo.",
"The evaluation leaderboard is based on the Elo rating system and is updated in real-time.": "La tabla clasificatoria de evaluación se basa en el sistema de clasificación Elo y se actualiza en tiempo real.",
"The LDAP attribute that maps to the mail that users use to sign in.": "El atributo LDAP que mapea el correo que l@s usuari@s utilizan para iniciar sesión.",
"The LDAP attribute that maps to the username that users use to sign in.": "El atributo LDAP que mapea el nombre de usuari@ que l@s usuari@s utilizan para iniciar sesión.",
"The LDAP attribute that maps to the mail that users use to sign in.": "El atributo LDAP que mapea el correo que los usuarios utilizan para iniciar sesión.",
"The LDAP attribute that maps to the username that users use to sign in.": "El atributo LDAP que mapea el nombre de usuario que los usuarios utilizan para iniciar sesión.",
"The leaderboard is currently in beta, and we may adjust the rating calculations as we refine the algorithm.": "La tabla clasificatoria está actualmente en beta, por lo que los cálculos de clasificación pueden reajustarse a medida que se refina el algoritmo.",
"The maximum file size in MB. If the file size exceeds this limit, the file will not be uploaded.": "El tamaño máximo del archivo en MB. Si el tamaño del archivo supera este límite, el archivo no se subirá.",
"The maximum number of files that can be used at once in chat. If the number of files exceeds this limit, the files will not be uploaded.": "El número máximo de archivos que se pueden utilizar a la vez en el chat. Si se supera este límite, los archivos no se subirán.",
@ -1114,7 +1131,7 @@
"TLS": "TLS",
"To access the available model names for downloading,": "Para acceder a los nombres de modelos disponibles para descargar,",
"To access the GGUF models available for downloading,": "Para acceder a los modelos GGUF disponibles para descargar,",
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Para acceder a WebUI, por favor contacte con Admins. L@s administradores pueden gestionar los estados de l@s usuari@s esde el panel de administración.",
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Para acceder a WebUI, por favor contacte con Admins. Los administradores pueden gestionar los estados de los usuarios esde el panel de administración.",
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "Para adjuntar la base de conocimientos aquí, primero añadirla a \"Conocimiento\" en el área de trabajo.",
"To learn more about available endpoints, visit our documentation.": "Para aprender más sobre los endpoints disponibles, visite nuestra documentación.",
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "Para proteger tu privacidad, de tu realimentación solo se comparten las calificaciones, IDs de modelo, etiquetas y metadatos; tus chat registrados permanecen privados y no se incluyen.",
@ -1182,18 +1199,18 @@
"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 Gravatar": "Usar Gravatar",
"Use groups to group your users and assign permissions.": "Usar grupos para agrupar a usuari@s y asignar permisos.",
"Use groups to group your users and assign permissions.": "Usar grupos para agrupar a usuarios y asignar permisos.",
"Use Initials": "Usar Iniciales",
"Use no proxy to fetch page contents.": "No usar proxy para extraer contenidos",
"Use proxy designated by http_proxy and https_proxy environment variables to fetch page contents.": "Usar el proxy asignado en las variables del entorno http_proxy y/o https_proxy para extraer contenido",
"use_mlock (Ollama)": "use_mlock (Ollama)",
"use_mmap (Ollama)": "use_mmap (Ollama)",
"user": "usuari@",
"User": "Usuari@",
"User location successfully retrieved.": "Ubicación de usuari@ obtenida correctamente.",
"User Webhooks": "Usuari@ EnganchesWeb(webhooks)",
"Username": "Nombre de Usuari@",
"Users": "Usuari@s",
"user": "usuario",
"User": "Usuario",
"User location successfully retrieved.": "Ubicación de usuario obtenida correctamente.",
"User Webhooks": "Usuario Webhooks",
"Username": "Nombre de Usuario",
"Users": "Usuarios",
"Using the default arena model with all models. Click the plus button to add custom models.": "Usando el modelo de arena predeterminado con todos los modelos. Pulsar en el botón + para agregar modelos personalizados.",
"Utilize": "Utilizar",
"Valid time units:": "Unidades de tiempo válidas:",
@ -1213,7 +1230,7 @@
"Voice Input": "Entrada de Voz",
"Warning": "Aviso",
"Warning:": "Aviso:",
"Warning: Enabling this will allow users to upload arbitrary code on the server.": "Aviso: Habilitar esto permitirá a l@s usuari@s subir código arbitrario al servidor.",
"Warning: Enabling this will allow users to upload arbitrary code on the server.": "Aviso: Habilitar esto permitirá a los usuarios subir código arbitrario al servidor.",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Aviso: Si actualizas o cambias el modelo de incrustacción, necesitarás re-importar todos los documentos.",
"Warning: Jupyter execution enables arbitrary code execution, posing severe security risks—proceed with extreme caution.": "Aviso: La ejecución Jupyter habilita la ejecución de código arbitrario, planteando graves riesgos de seguridad; Proceder con extrema precaución.",
"Web": "Web",

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "Luba vestluse kustutamine",
"Allow Chat Deletion": "Luba vestluse kustutamine",
"Allow Chat Edit": "Luba vestluse muutmine",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "Luba failide üleslaadimine",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "Luba mitte-lokaalsed hääled",
@ -76,6 +78,7 @@
"Always": "Alati",
"Always Collapse Code Blocks": "",
"Always Expand Details": "",
"Always Play Notification Sound": "",
"Amazing": "Suurepärane",
"an assistant": "assistent",
"Analyzed": "Analüüsitud",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "Sisestage dokumendi intelligentsuse võti",
"Enter domains separated by commas (e.g., example.com,site.org)": "Sisestage domeenid komadega eraldatult (nt example.com,site.org)",
"Enter Exa API Key": "Sisestage Exa API võti",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "Sisestage Github toorURL",
@ -511,10 +518,15 @@
"Export Tools": "Ekspordi tööriistad",
"External": "",
"External Models": "Välised mudelid",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "Faili lisamine ebaõnnestus.",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to create API Key.": "API võtme loomine ebaõnnestus.",
"Failed to fetch models": "Mudelite toomine ebaõnnestus",
"Failed to load file content.": "",
"Failed to read clipboard contents": "Lõikelaua sisu lugemine ebaõnnestus",
"Failed to save connections": "",
"Failed to save models configuration": "Mudelite konfiguratsiooni salvestamine ebaõnnestus",
@ -718,8 +730,12 @@
"Memory deleted successfully": "Mälu edukalt kustutatud",
"Memory updated successfully": "Mälu edukalt uuendatud",
"Merge Responses": "Ühenda vastused",
"Merged Response": "Kombineeritud vastus",
"Message rating should be enabled to use this feature": "Selle funktsiooni kasutamiseks peaks sõnumite hindamine olema lubatud",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Teie saadetud sõnumeid pärast lingi loomist ei jagata. Kasutajad, kellel on URL, saavad vaadata jagatud vestlust.",
"Microsoft OneDrive": "",
"Microsoft OneDrive (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "Min P",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -761,6 +777,7 @@
"New Password": "Uus parool",
"new-channel": "uus-kanal",
"No content found": "Sisu ei leitud",
"No content found in file.": "",
"No content to speak": "Pole mida rääkida",
"No distance available": "Kaugus pole saadaval",
"No feedbacks found": "Tagasisidet ei leitud",
@ -939,7 +956,7 @@
"Save Tag": "Salvesta silt",
"Saved": "Salvestatud",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Vestluslogi salvestamine otse teie brauseri mällu pole enam toetatud. Palun võtke hetk, et alla laadida ja kustutada oma vestluslogi, klõpsates allpool olevat nuppu. Ärge muretsege, saate hõlpsasti oma vestluslogi tagarakendusse uuesti importida, kasutades",
"Scroll to bottom when switching between branches": "Keri alla harus liikumisel",
"Scroll On Branch Change": "",
"Search": "Otsing",
"Search a model": "Otsi mudelit",
"Search Base": "Otsingu baas",

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "Baimendu Txata Ezabatzea",
"Allow Chat Deletion": "Baimendu Txata Ezabatzea",
"Allow Chat Edit": "Baimendu Txata Editatzea",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "Baimendu Fitxategiak Igotzea",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "Baimendu urruneko ahotsak",
@ -76,6 +78,7 @@
"Always": "",
"Always Collapse Code Blocks": "",
"Always Expand Details": "",
"Always Play Notification Sound": "",
"Amazing": "Harrigarria",
"an assistant": "laguntzaile bat",
"Analyzed": "",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "",
"Enter domains separated by commas (e.g., example.com,site.org)": "",
"Enter Exa API Key": "",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "Sartu Github Raw URLa",
@ -511,10 +518,15 @@
"Export Tools": "Esportatu Tresnak",
"External": "",
"External Models": "Kanpoko Ereduak",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "Huts egin du fitxategia gehitzean.",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to create API Key.": "Huts egin du API Gakoa sortzean.",
"Failed to fetch models": "",
"Failed to load file content.": "",
"Failed to read clipboard contents": "Huts egin du arbelaren edukia irakurtzean",
"Failed to save connections": "",
"Failed to save models configuration": "Huts egin du ereduen konfigurazioa gordetzean",
@ -718,8 +730,12 @@
"Memory deleted successfully": "Memoria ongi ezabatu da",
"Memory updated successfully": "Memoria ongi eguneratu da",
"Merge Responses": "Batu erantzunak",
"Merged Response": "Erantzun bateratua",
"Message rating should be enabled to use this feature": "Mezuen balorazioa gaitu behar da funtzionalitate hau erabiltzeko",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Esteka sortu ondoren bidaltzen dituzun mezuak ez dira partekatuko. URLa duten erabiltzaileek partekatutako txata ikusi ahal izango dute.",
"Microsoft OneDrive": "",
"Microsoft OneDrive (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "Min P",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -761,6 +777,7 @@
"New Password": "Pasahitz berria",
"new-channel": "",
"No content found": "Ez da edukirik aurkitu",
"No content found in file.": "",
"No content to speak": "Ez dago hitz egiteko edukirik",
"No distance available": "Ez dago distantziarik eskuragarri",
"No feedbacks found": "Ez da iritzirik aurkitu",
@ -939,7 +956,7 @@
"Save Tag": "Gorde etiketa",
"Saved": "Gordeta",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Txat erregistroak zuzenean zure nabigatzailearen biltegian gordetzea ez da jadanik onartzen. Mesedez, hartu une bat zure txat erregistroak deskargatu eta ezabatzeko beheko botoia sakatuz. Ez kezkatu, zure txat erregistroak erraz inportatu ditzakezu berriro backendera honen bidez",
"Scroll to bottom when switching between branches": "Joan behera adarren artean aldatzean",
"Scroll On Branch Change": "",
"Search": "Bilatu",
"Search a model": "Bilatu modelo bat",
"Search Base": "Bilaketa oinarria",

File diff suppressed because it is too large Load diff

View file

@ -57,17 +57,19 @@
"All": "Kaikki",
"All Documents": "Kaikki asiakirjat",
"All models deleted successfully": "Kaikki mallit poistettu onnistuneesti",
"Allow Call": "",
"Allow Call": "Salli puhelut",
"Allow Chat Controls": "Salli keskustelujen hallinta",
"Allow Chat Delete": "Salli keskustelujen poisto",
"Allow Chat Deletion": "Salli keskustelujen poisto",
"Allow Chat Edit": "Salli keskustelujen muokkaus",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "Salli tiedostojen lataus",
"Allow Multiple Models in Chat": "",
"Allow Multiple Models in Chat": "Salli useampi malli keskustelussa",
"Allow non-local voices": "Salli ei-paikalliset äänet",
"Allow Speech to Text": "",
"Allow Speech to Text": "Salli puhe tekstiksi",
"Allow Temporary Chat": "Salli väliaikaiset keskustelut",
"Allow Text to Speech": "",
"Allow Text to Speech": "Salli teksti puheeksi",
"Allow User Location": "Salli käyttäjän sijainti",
"Allow Voice Interruption in Call": "Salli äänen keskeytys puhelussa",
"Allowed Endpoints": "Hyväksytyt päätepisteet",
@ -76,6 +78,7 @@
"Always": "Aina",
"Always Collapse Code Blocks": "Pienennä aina koodilohkot",
"Always Expand Details": "Laajenna aina tiedot",
"Always Play Notification Sound": "",
"Amazing": "Hämmästyttävä",
"an assistant": "avustaja",
"Analyzed": "Analysoitu",
@ -83,7 +86,7 @@
"and": "ja",
"and {{COUNT}} more": "ja {{COUNT}} muuta",
"and create a new shared link.": "ja luo uusi jaettu linkki.",
"Android": "",
"Android": "Android",
"API Base URL": "API:n verkko-osoite",
"API Key": "API-avain",
"API Key created.": "API-avain luotu.",
@ -116,7 +119,7 @@
"Auth": "Todennus",
"Authenticate": "Todentaa",
"Authentication": "Todennus",
"Auto": "",
"Auto": "Automaattinen",
"Auto-Copy Response to Clipboard": "Kopioi vastaus automaattisesti leikepöydälle",
"Auto-playback response": "Soita vastaus automaattisesti",
"Autocomplete Generation": "Automaattisen täydennyksen luonti",
@ -157,7 +160,7 @@
"Change Password": "Vaihda salasana",
"Channel Name": "Kanavan nimi",
"Channels": "Kanavat",
"Character": "Hahmo",
"Character": "Kirjain",
"Character limit for autocomplete generation input": "Automaattisen täydennyksen syötteen merkkiraja",
"Chart new frontiers": "Kartoita uusia rajapintoja",
"Chat": "Keskustelu",
@ -224,10 +227,10 @@
"Confirm your new password": "Vahvista uusi salasanasi",
"Connect to your own OpenAI compatible API endpoints.": "Yhdistä omat OpenAI yhteensopivat API päätepisteet.",
"Connect to your own OpenAPI compatible external tool servers.": "Yhdistä omat ulkopuoliset OpenAPI yhteensopivat työkalu palvelimet.",
"Connection failed": "",
"Connection successful": "",
"Connection failed": "Yhteys epäonnistui",
"Connection successful": "Yhteys onnistui",
"Connections": "Yhteydet",
"Connections saved successfully": "",
"Connections saved successfully": "Yhteyksien tallentaminen onnistui",
"Constrains effort on reasoning for reasoning models. Only applicable to reasoning models from specific providers that support reasoning effort.": "",
"Contact Admin for WebUI Access": "Ota yhteyttä ylläpitäjään WebUI-käyttöä varten",
"Content": "Sisältö",
@ -245,7 +248,7 @@
"Copied shared chat URL to clipboard!": "Jaettu keskustelulinkki kopioitu leikepöydälle!",
"Copied to clipboard": "Kopioitu leikepöydälle",
"Copy": "Kopioi",
"Copy Formatted Text": "",
"Copy Formatted Text": "Kopioi muotoiltu teksti",
"Copy last code block": "Kopioi viimeisin koodilohko",
"Copy last response": "Kopioi viimeisin vastaus",
"Copy Link": "Kopioi linkki",
@ -308,7 +311,7 @@
"Deleted User": "Käyttäjä poistettu",
"Describe your knowledge base and objectives": "Kuvaa tietokantasi ja tavoitteesi",
"Description": "Kuvaus",
"Detect Artifacts Automatically": "",
"Detect Artifacts Automatically": "Tunnista artefaktit automaattisesti",
"Didn't fully follow instructions": "Ei noudattanut ohjeita täysin",
"Direct": "Suora",
"Direct Connections": "Suorat yhteydet",
@ -364,7 +367,7 @@
"e.g. my_filter": "esim. oma_suodatin",
"e.g. my_tools": "esim. omat_työkalut",
"e.g. Tools for performing various operations": "esim. työkaluja erilaisten toimenpiteiden suorittamiseen",
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
"e.g., en-US,ja-JP (leave blank for auto-detect)": "esim. en-US,ja-JP (Tyhjäksi jättämällä, automaattinen tunnistus)",
"Edit": "Muokkaa",
"Edit Arena Model": "Muokkaa Arena-mallia",
"Edit Channel": "Muokkaa kanavaa",
@ -407,15 +410,19 @@
"Enter CFG Scale (e.g. 7.0)": "Kirjoita CFG-mitta (esim. 7.0)",
"Enter Chunk Overlap": "Syötä osien päällekkäisyys",
"Enter Chunk Size": "Syötä osien koko",
"Enter comma-seperated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter comma-seperated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "Syötä pilkulla erottaen \"token:bias_value\" parit (esim. 5432:100, 413:-100)",
"Enter description": "Kirjoita kuvaus",
"Enter Docling Server URL": "Kirjoita Docling palvelimen verkko-osoite",
"Enter Document Intelligence Endpoint": "Kirjoita asiakirja tiedustelun päätepiste",
"Enter Document Intelligence Key": "Kirjoiuta asiakirja tiedustelun avain",
"Enter domains separated by commas (e.g., example.com,site.org)": "Verkko-osoitteet erotetaan pilkulla (esim. esimerkki.com,sivu.org)",
"Enter Exa API Key": "Kirjoita Exa API -avain",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "Kirjoita Firecrawl API -verkko-osoite",
"Enter Firecrawl API Key": "Kirjoita Firecrawl API-avain",
"Enter Github Raw URL": "Kirjoita Github Raw -verkko-osoite",
"Enter Google PSE API Key": "Kirjoita Google PSE API -avain",
"Enter Google PSE Engine Id": "Kirjoita Google PSE -moottorin tunnus",
@ -433,8 +440,8 @@
"Enter Mojeek Search API Key": "Kirjoita Mojeek Search API -avain",
"Enter Number of Steps (e.g. 50)": "Kirjoita askelten määrä (esim. 50)",
"Enter Perplexity API Key": "Aseta Perplexity API-avain",
"Enter Playwright Timeout": "",
"Enter Playwright WebSocket URL": "",
"Enter Playwright Timeout": "Aseta Playwright aikakatkaisu",
"Enter Playwright WebSocket URL": "Aseta Playwright WebSocket-aikakatkaisu",
"Enter proxy URL (e.g. https://user:password@host:port)": "Kirjoita välityspalvelimen verkko-osoite (esim. https://käyttäjä:salasana@host:portti)",
"Enter reasoning effort": "",
"Enter Sampler (e.g. Euler a)": "Kirjoita näytteistäjä (esim. Euler a)",
@ -511,12 +518,17 @@
"Export Tools": "Vie työkalut",
"External": "Ulkoiset",
"External Models": "Ulkoiset mallit",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "Tiedoston lisääminen epäonnistui.",
"Failed to connect to {{URL}} OpenAPI tool server": "Yhdistäminen {{URL}} OpenAPI työkalu palvelimeen epäonnistui",
"Failed to create API Key.": "API-avaimen luonti epäonnistui.",
"Failed to fetch models": "Mallien hakeminen epäonnistui",
"Failed to load file content.": "",
"Failed to read clipboard contents": "Leikepöydän sisällön lukeminen epäonnistui",
"Failed to save connections": "",
"Failed to save connections": "Yhteyksien tallentaminen epäonnistui",
"Failed to save models configuration": "Mallien määrityksen tallentaminen epäonnistui",
"Failed to update settings": "Asetusten päivittäminen epäonnistui",
"Failed to upload file.": "Tiedoston lataaminen epäonnistui.",
@ -539,8 +551,8 @@
"Filter is now globally enabled": "Suodatin on nyt otettu käyttöön globaalisti",
"Filters": "Suodattimet",
"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Sormenjäljen väärentäminen havaittu: Alkukirjaimia ei voi käyttää avatarina. Käytetään oletusprofiilikuvaa.",
"Firecrawl API Base URL": "",
"Firecrawl API Key": "",
"Firecrawl API Base URL": "Firecrawl API -verkko-osoite",
"Firecrawl API Key": "Firecrawl API-avain",
"Fluidly stream large external response chunks": "Virtaa suuria ulkoisia vastausosia joustavasti",
"Focus chat input": "Fokusoi syöttökenttään",
"Folder deleted successfully": "Kansio poistettu onnistuneesti",
@ -605,8 +617,8 @@
"Hybrid Search": "Hybridihaku",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Vahvistan, että olen lukenut ja ymmärrän toimintani seuraukset. Olen tietoinen mielivaltaisen koodin suorittamiseen liittyvistä riskeistä ja olen varmistanut lähteen luotettavuuden.",
"ID": "Tunnus",
"iframe Sandbox Allow Forms": "",
"iframe Sandbox Allow Same Origin": "",
"iframe Sandbox Allow Forms": "Salli lomakkeet iframe hiekkalaatikossa",
"iframe Sandbox Allow Same Origin": "Salli iframe hiekkalaatikko samasta alkuperästä",
"Ignite curiosity": "Sytytä uteliaisuus",
"Image": "Kuva",
"Image Compression": "Kuvan pakkaus",
@ -667,14 +679,14 @@
"Label": "Tunniste",
"Landing Page Mode": "Etusivun tila",
"Language": "Kieli",
"Language Locales": "",
"Language Locales": "Kielialueet",
"Last Active": "Viimeksi aktiivinen",
"Last Modified": "Viimeksi muokattu",
"Last reply": "Viimeksi vastattu",
"LDAP": "LDAP",
"LDAP server updated": "LDAP-palvelin päivitetty",
"Leaderboard": "Tulosluettelo",
"Learn more about OpenAPI tool servers.": "",
"Learn more about OpenAPI tool servers.": "Lue lisää OpenAPI työkalu palvelimista.",
"Leave empty for unlimited": "Rajaton tyhjäksi jättämällä",
"Leave empty to include all models from \"{{url}}/api/tags\" endpoint": "Jätä tyhjäksi sisällyttääksesi \"{{url}}/api/tags\" päätepisteen mallit",
"Leave empty to include all models from \"{{url}}/models\" endpoint": "Jätä tyhjäksi sisällyttääksesi \"{{url}}/models\" päätepisteen mallit",
@ -718,8 +730,12 @@
"Memory deleted successfully": "Muisti poistettu onnistuneesti",
"Memory updated successfully": "Muisti päivitetty onnistuneesti",
"Merge Responses": "Yhdistä vastaukset",
"Merged Response": "Yhdistetty vastaus",
"Message rating should be enabled to use this feature": "Tämän toiminnon käyttämiseksi viestiarviointi on otettava käyttöön",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Linkin luomisen jälkeen lähettämäsi viestit eivät ole jaettuja. Käyttäjät, joilla on verkko-osoite, voivat tarkastella jaettua keskustelua.",
"Microsoft OneDrive": "",
"Microsoft OneDrive (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "Min P",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -761,6 +777,7 @@
"New Password": "Uusi salasana",
"new-channel": "uusi-kanava",
"No content found": "Sisältöä ei löytynyt",
"No content found in file.": "",
"No content to speak": "Ei puhuttavaa sisältöä",
"No distance available": "Etäisyyttä ei saatavilla",
"No feedbacks found": "Palautteita ei löytynyt",
@ -812,7 +829,7 @@
"Open file": "Avaa tiedosto",
"Open in full screen": "Avaa koko näytön tilaan",
"Open new chat": "Avaa uusi keskustelu",
"Open WebUI can use tools provided by any OpenAPI server.": "",
"Open WebUI can use tools provided by any OpenAPI server.": "Open WebUI voi käyttää minkä tahansa OpenAPI-palvelimen tarjoamia työkaluja.",
"Open WebUI uses faster-whisper internally.": "Open WebUI käyttää faster-whisperia sisäisesti.",
"Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI käyttää SpeechT5:tä ja CMU Arctic -kaiuttimen upotuksia.",
"Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Open WebUI -versio (v{{OPEN_WEBUI_VERSION}}) on alempi kuin vaadittu versio (v{{REQUIRED_VERSION}})",
@ -851,13 +868,13 @@
"Pipelines Valves": "Putkistojen venttiilit",
"Plain text (.txt)": "Pelkkä teksti (.txt)",
"Playground": "Leikkipaikka",
"Playwright Timeout (ms)": "",
"Playwright WebSocket URL": "",
"Playwright Timeout (ms)": "Playwright aikakatkaisu (ms)",
"Playwright WebSocket URL": "Playwright WebSocket verkko-osoite",
"Please carefully review the following warnings:": "Tarkista huolellisesti seuraavat varoitukset:",
"Please do not close the settings page while loading the model.": "Älä sulje asetussivua mallin latautuessa.",
"Please enter a prompt": "Kirjoita kehote",
"Please enter a valid path": "",
"Please enter a valid URL": "",
"Please enter a valid path": "Kirjoita kelvollinen polku",
"Please enter a valid URL": "Kirjoita kelvollinen verkko-osoite",
"Please fill in all fields.": "Täytä kaikki kentät.",
"Please select a model first.": "Valitse ensin malli.",
"Please select a model.": "Valitse malli.",
@ -885,7 +902,7 @@
"Pull \"{{searchValue}}\" from Ollama.com": "Lataa \"{{searchValue}}\" Ollama.comista",
"Pull a model from Ollama.com": "Lataa malli Ollama.comista",
"Query Generation Prompt": "Kyselytulosten luontikehote",
"RAG Template": "RAG-malline",
"RAG Template": "RAG-kehote",
"Rating": "Arviointi",
"Re-rank models by topic similarity": "Uudelleenjärjestä mallit aiheyhteyden mukaan",
"Read": "Lue",
@ -898,11 +915,11 @@
"References from": "Viitteet lähteistä",
"Refused when it shouldn't have": "Kieltäytyi, vaikka ei olisi pitänyt",
"Regenerate": "Uudelleentuota",
"Reindex": "",
"Reindex Knowledge Base Vectors": "",
"Reindex": "Indeksoi uudelleen",
"Reindex Knowledge Base Vectors": "Indeksoi tietämyksen vektorit uudelleen",
"Release Notes": "Julkaisutiedot",
"Relevance": "Relevanssi",
"Relevance Threshold": "",
"Relevance Threshold": "Relevanssikynnys",
"Remove": "Poista",
"Remove Model": "Poista malli",
"Rename": "Nimeä uudelleen",
@ -939,7 +956,7 @@
"Save Tag": "Tallenna tagi",
"Saved": "Tallennettu",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Keskustelulokien tallentaminen suoraan selaimen tallennustilaan ei ole enää tuettu. Lataa ja poista keskustelulokit napsauttamalla alla olevaa painiketta. Älä huoli, voit helposti tuoda keskustelulokit takaisin backendiin",
"Scroll to bottom when switching between branches": "Vierittää alaspäin vaihdettaessa haarojen välillä",
"Scroll On Branch Change": "",
"Search": "Haku",
"Search a model": "Hae mallia",
"Search Base": "Hakupohja",
@ -1085,7 +1102,7 @@
"Theme": "Teema",
"Thinking...": "Ajattelee...",
"This action cannot be undone. Do you wish to continue?": "Tätä toimintoa ei voi peruuttaa. Haluatko jatkaa?",
"This channel was created on {{createdAt}}. This is the very beginning of the {{channelName}} channel.": "",
"This channel was created on {{createdAt}}. This is the very beginning of the {{channelName}} channel.": "Tämä kanava on luotiin {{createdAt}}. Tämä on {{channelName}} kanavan alku.",
"This chat wont appear in history and your messages will not be saved.": "Tämä keskustelu ei näy historiassa, eikä viestejäsi tallenneta.",
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Tämä varmistaa, että arvokkaat keskustelusi tallennetaan turvallisesti backend-tietokantaasi. Kiitos!",
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Tämä on kokeellinen ominaisuus, se ei välttämättä toimi odotetulla tavalla ja se voi muuttua milloin tahansa.",
@ -1144,7 +1161,7 @@
"Tools have a function calling system that allows arbitrary code execution.": "Työkalut sallivat mielivaltaisen koodin suorittamisen toimintokutsuilla.",
"Tools Public Sharing": "Työkalujen julkinen jakaminen",
"Top K": "Top K",
"Top K Reranker": "",
"Top K Reranker": "Top K uudelleen sijoittaja",
"Top P": "Top P",
"Transformers": "Muunnokset",
"Trouble accessing Ollama?": "Ongelmia Ollama-yhteydessä?",
@ -1170,7 +1187,7 @@
"Updated": "Päivitetty",
"Updated at": "Päivitetty",
"Updated At": "Päivitetty",
"Upgrade to a licensed plan for enhanced capabilities, including custom theming and branding, and dedicated support.": "",
"Upgrade to a licensed plan for enhanced capabilities, including custom theming and branding, and dedicated support.": "Päivitä lisenssi saadaksesi parempia ominaisuuksia, mukaan lukien mukautetun teeman ja brändäyksen sekä yksilöllistä tukea.",
"Upload": "Lataa",
"Upload a GGUF model": "Lataa GGUF-malli",
"Upload directory": "Latauksen hakemisto",
@ -1184,8 +1201,8 @@
"Use Gravatar": "Käytä Gravataria",
"Use groups to group your users and assign permissions.": "Käytä ryhmiä jäsentääksesi käyttäjiä ja antaaksesi käyttöoikeuksia.",
"Use Initials": "Käytä alkukirjaimia",
"Use no proxy to fetch page contents.": "",
"Use proxy designated by http_proxy and https_proxy environment variables to fetch page contents.": "",
"Use no proxy to fetch page contents.": "Älä käytä välityspalvelinta sivun tietoja haettaessa.",
"Use proxy designated by http_proxy and https_proxy environment variables to fetch page contents.": "Käytä http_proxy- ja https_proxy-ympäristömuuttujien määrittämää välityspalvelinta sivun sisällön hakemiseen.",
"use_mlock (Ollama)": "use_mlock (Ollama)",
"use_mmap (Ollama)": "use_mmap (Ollama)",
"user": "käyttäjä",
@ -1203,7 +1220,7 @@
"variable": "muuttuja",
"variable to have them replaced with clipboard content.": "muuttuja korvataan leikepöydän sisällöllä.",
"Verify Connection": "Tarkista yhteys",
"Verify SSL Certificate": "",
"Verify SSL Certificate": "Tarkista SSL-varmenne",
"Version": "Versio",
"Version {{selectedVersion}} of {{totalVersions}}": "Versio {{selectedVersion}} / {{totalVersions}}",
"View Replies": "Näytä vastaukset",
@ -1218,7 +1235,7 @@
"Warning: Jupyter execution enables arbitrary code execution, posing severe security risks—proceed with extreme caution.": "Varoitus: Jupyter käyttö voi mahdollistaa mielivaltaiseen koodin suorittamiseen, mikä voi aiheuttaa tietoturvariskejä - käytä äärimmäisen varoen.",
"Web": "Web",
"Web API": "Web-API",
"Web Loader Engine": "",
"Web Loader Engine": "Verkko lataaja moottori",
"Web Search": "Verkkohaku",
"Web Search Engine": "Hakukoneet",
"Web Search in Chat": "Verkkohaku keskustelussa",
@ -1248,7 +1265,7 @@
"Write your model template content here": "Kirjoita mallisi mallinnesisältö tähän",
"Yesterday": "Eilen",
"You": "Sinä",
"You are currently using a trial license. Please contact support to upgrade your license.": "",
"You are currently using a trial license. Please contact support to upgrade your license.": "Käytät tällä hetkellä kokeiluversiota. Ota yhteyttä tukeen lisenssin päivittämiseksi.",
"You can only chat with a maximum of {{maxCount}} file(s) at a time.": "Voit keskustella enintään {{maxCount}} tiedoston kanssa kerralla.",
"You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "Voit personoida vuorovaikutustasi LLM-ohjelmien kanssa lisäämällä muistoja 'Hallitse'-painikkeen kautta, jolloin ne ovat hyödyllisempiä ja räätälöityjä sinua varten.",
"You cannot upload an empty file.": "Et voi ladata tyhjää tiedostoa.",

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "",
"Allow Chat Deletion": "Autoriser la suppression de l'historique de chat",
"Allow Chat Edit": "",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "Autoriser les voix non locales",
@ -76,6 +78,7 @@
"Always": "",
"Always Collapse Code Blocks": "",
"Always Expand Details": "",
"Always Play Notification Sound": "",
"Amazing": "",
"an assistant": "un assistant",
"Analyzed": "",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "",
"Enter domains separated by commas (e.g., example.com,site.org)": "",
"Enter Exa API Key": "",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "Entrez l'URL brute de GitHub",
@ -511,10 +518,15 @@
"Export Tools": "Outils d'exportation",
"External": "",
"External Models": "Modèles externes",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to create API Key.": "Échec de la création de la clé API.",
"Failed to fetch models": "",
"Failed to load file content.": "",
"Failed to read clipboard contents": "Échec de la lecture du contenu du presse-papiers",
"Failed to save connections": "",
"Failed to save models configuration": "",
@ -718,8 +730,12 @@
"Memory deleted successfully": "La mémoire a été supprimée avec succès",
"Memory updated successfully": "La mémoire a été mise à jour avec succès",
"Merge Responses": "",
"Merged Response": "Réponse fusionnée",
"Message rating should be enabled to use this feature": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Les messages que vous envoyez après avoir créé votre lien ne seront pas partagés. Les utilisateurs disposant de l'URL pourront voir le chat partagé.",
"Microsoft OneDrive": "",
"Microsoft OneDrive (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -761,6 +777,7 @@
"New Password": "Nouveau mot de passe",
"new-channel": "",
"No content found": "",
"No content found in file.": "",
"No content to speak": "Rien à signaler",
"No distance available": "",
"No feedbacks found": "",
@ -939,7 +956,7 @@
"Save Tag": "",
"Saved": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "La sauvegarde des journaux de discussion directement dans le stockage de votre navigateur n'est plus prise en charge. Veuillez prendre un instant pour télécharger et supprimer vos journaux de discussion en cliquant sur le bouton ci-dessous. Pas de soucis, vous pouvez facilement les réimporter depuis le backend via l'interface ci-dessous",
"Scroll to bottom when switching between branches": "",
"Scroll On Branch Change": "",
"Search": "Recherche",
"Search a model": "Rechercher un modèle",
"Search Base": "",

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "Autoriser la suppression de la conversation",
"Allow Chat Deletion": "Autoriser la suppression de l'historique de chat",
"Allow Chat Edit": "Autoriser la modification de la conversation",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "Autoriser le téléchargement de fichiers",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "Autoriser les voix non locales",
@ -76,6 +78,7 @@
"Always": "",
"Always Collapse Code Blocks": "",
"Always Expand Details": "",
"Always Play Notification Sound": "",
"Amazing": "Incroyable",
"an assistant": "un assistant",
"Analyzed": "",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "",
"Enter domains separated by commas (e.g., example.com,site.org)": "",
"Enter Exa API Key": "",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "Entrez l'URL brute de GitHub",
@ -511,10 +518,15 @@
"Export Tools": "Exporter des outils",
"External": "",
"External Models": "Modèles externes",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "Échec de l'ajout du fichier.",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to create API Key.": "Échec de la création de la clé API.",
"Failed to fetch models": "Échec de la récupération des modèles",
"Failed to load file content.": "",
"Failed to read clipboard contents": "Échec de la lecture du contenu du presse-papiers",
"Failed to save connections": "",
"Failed to save models configuration": "Échec de la sauvegarde de la configuration des modèles",
@ -718,8 +730,12 @@
"Memory deleted successfully": "Le souvenir a été supprimé avec succès",
"Memory updated successfully": "Le souvenir a été mis à jour avec succès",
"Merge Responses": "Fusionner les réponses",
"Merged Response": "Réponse fusionnée",
"Message rating should be enabled to use this feature": "L'évaluation des messages doit être activée pour pouvoir utiliser cette fonctionnalité",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Les messages que vous envoyez après avoir créé votre lien ne seront pas partagés. Les utilisateurs disposant de l'URL pourront voir la conversation partagée.",
"Microsoft OneDrive": "",
"Microsoft OneDrive (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "P min",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -761,6 +777,7 @@
"New Password": "Nouveau mot de passe",
"new-channel": "nouveau-canal",
"No content found": "Aucun contenu trouvé",
"No content found in file.": "",
"No content to speak": "Rien à signaler",
"No distance available": "Aucune distance disponible",
"No feedbacks found": "Aucun avis trouvé",
@ -939,7 +956,7 @@
"Save Tag": "Enregistrer le tag",
"Saved": "Enregistré",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "La sauvegarde des journaux de conversation directement dans le stockage de votre navigateur n'est plus prise en charge. Veuillez prendre un instant pour télécharger et supprimer vos journaux de conversation en cliquant sur le bouton ci-dessous. Ne vous inquiétez pas, vous pouvez facilement réimporter vos journaux de conversation dans le backend via",
"Scroll to bottom when switching between branches": "Défiler vers le bas lors du passage d'une branche à l'autre",
"Scroll On Branch Change": "",
"Search": "Recherche",
"Search a model": "Rechercher un modèle",
"Search Base": "Base de recherche",

View file

@ -665,6 +665,7 @@
"Memory deleted successfully": "Memoria borrada correctamente",
"Memory updated successfully": "Memoria actualizada correctamente",
"Merge Responses": "Fusionar Respuestas",
"Merged Response": "Resposta combinada",
"Message rating should be enabled to use this feature": "a calificación de mensaxes debe estar habilitada para usar esta función",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Os mensaxes que envíe despois de xerar su enlace no compartiránse. os usuarios co enlace podrán ver o chat compartido.",
"Min P": "Min P",

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "",
"Allow Chat Deletion": "אפשר מחיקת צ'אט",
"Allow Chat Edit": "",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "",
@ -76,6 +78,7 @@
"Always": "",
"Always Collapse Code Blocks": "",
"Always Expand Details": "",
"Always Play Notification Sound": "",
"Amazing": "",
"an assistant": "עוזר",
"Analyzed": "",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "",
"Enter domains separated by commas (e.g., example.com,site.org)": "",
"Enter Exa API Key": "",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "הזן כתובת URL של Github Raw",
@ -511,10 +518,15 @@
"Export Tools": "",
"External": "",
"External Models": "",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to create API Key.": "יצירת מפתח API נכשלה.",
"Failed to fetch models": "",
"Failed to load file content.": "",
"Failed to read clipboard contents": "קריאת תוכן הלוח נכשלה",
"Failed to save connections": "",
"Failed to save models configuration": "",
@ -718,8 +730,12 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Merge Responses": "",
"Merged Response": "תגובה ממוזגת",
"Message rating should be enabled to use this feature": "",
"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 (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -761,6 +777,7 @@
"New Password": "סיסמה חדשה",
"new-channel": "",
"No content found": "",
"No content found in file.": "",
"No content to speak": "",
"No distance available": "",
"No feedbacks found": "",
@ -939,7 +956,7 @@
"Save Tag": "",
"Saved": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "שמירת יומני צ'אט ישירות באחסון הדפדפן שלך אינה נתמכת יותר. אנא הקדש רגע להוריד ולמחוק את יומני הצ'אט שלך על ידי לחיצה על הכפתור למטה. אל דאגה, באפשרותך לייבא מחדש בקלות את יומני הצ'אט שלך לשרת האחורי דרך",
"Scroll to bottom when switching between branches": "",
"Scroll On Branch Change": "",
"Search": "חפש",
"Search a model": "חפש מודל",
"Search Base": "",

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "",
"Allow Chat Deletion": "चैट हटाने की अनुमति दें",
"Allow Chat Edit": "",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "",
@ -76,6 +78,7 @@
"Always": "",
"Always Collapse Code Blocks": "",
"Always Expand Details": "",
"Always Play Notification Sound": "",
"Amazing": "",
"an assistant": "एक सहायक",
"Analyzed": "",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "",
"Enter domains separated by commas (e.g., example.com,site.org)": "",
"Enter Exa API Key": "",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "Github Raw URL दर्ज करें",
@ -511,10 +518,15 @@
"Export Tools": "",
"External": "",
"External Models": "",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to create API Key.": "एपीआई कुंजी बनाने में विफल.",
"Failed to fetch models": "",
"Failed to load file content.": "",
"Failed to read clipboard contents": "क्लिपबोर्ड सामग्री पढ़ने में विफल",
"Failed to save connections": "",
"Failed to save models configuration": "",
@ -718,8 +730,12 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Merge Responses": "",
"Merged Response": "मिली-जुली प्रतिक्रिया",
"Message rating should be enabled to use this feature": "",
"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 (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "",
"Mirostat": "मिरोस्टा",
"Mirostat Eta": "मिरोस्टा ईटा",
@ -761,6 +777,7 @@
"New Password": "नया पासवर्ड",
"new-channel": "",
"No content found": "",
"No content found in file.": "",
"No content to speak": "",
"No distance available": "",
"No feedbacks found": "",
@ -939,7 +956,7 @@
"Save Tag": "",
"Saved": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "चैट लॉग को सीधे आपके ब्राउज़र के स्टोरेज में सहेजना अब समर्थित नहीं है। कृपया नीचे दिए गए बटन पर क्लिक करके डाउनलोड करने और अपने चैट लॉग को हटाने के लिए कुछ समय दें। चिंता न करें, आप आसानी से अपने चैट लॉग को बैकएंड पर पुनः आयात कर सकते हैं",
"Scroll to bottom when switching between branches": "",
"Scroll On Branch Change": "",
"Search": "खोजें",
"Search a model": "एक मॉडल खोजें",
"Search Base": "",

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "",
"Allow Chat Deletion": "Dopusti brisanje razgovora",
"Allow Chat Edit": "",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "Dopusti nelokalne glasove",
@ -76,6 +78,7 @@
"Always": "",
"Always Collapse Code Blocks": "",
"Always Expand Details": "",
"Always Play Notification Sound": "",
"Amazing": "",
"an assistant": "asistent",
"Analyzed": "",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "",
"Enter domains separated by commas (e.g., example.com,site.org)": "",
"Enter Exa API Key": "",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "Unesite Github sirovi URL",
@ -511,10 +518,15 @@
"Export Tools": "Izvoz alata",
"External": "",
"External Models": "Vanjski modeli",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to create API Key.": "Neuspješno stvaranje API ključa.",
"Failed to fetch models": "",
"Failed to load file content.": "",
"Failed to read clipboard contents": "Neuspješno čitanje sadržaja međuspremnika",
"Failed to save connections": "",
"Failed to save models configuration": "",
@ -718,8 +730,12 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Merge Responses": "",
"Merged Response": "Spojeni odgovor",
"Message rating should be enabled to use this feature": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Poruke koje pošaljete nakon stvaranja veze neće se dijeliti. Korisnici s URL-om moći će vidjeti zajednički chat.",
"Microsoft OneDrive": "",
"Microsoft OneDrive (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -761,6 +777,7 @@
"New Password": "Nova lozinka",
"new-channel": "",
"No content found": "",
"No content found in file.": "",
"No content to speak": "",
"No distance available": "",
"No feedbacks found": "",
@ -939,7 +956,7 @@
"Save Tag": "",
"Saved": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Spremanje zapisnika razgovora izravno u pohranu vašeg preglednika više nije podržano. Molimo vas da odvojite trenutak za preuzimanje i brisanje zapisnika razgovora klikom na gumb ispod. Ne brinite, možete lako ponovno uvesti zapisnike razgovora u backend putem",
"Scroll to bottom when switching between branches": "",
"Scroll On Branch Change": "",
"Search": "Pretraga",
"Search a model": "Pretraži model",
"Search Base": "",

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "Csevegés törlésének engedélyezése",
"Allow Chat Deletion": "Beszélgetések törlésének engedélyezése",
"Allow Chat Edit": "Csevegés szerkesztésének engedélyezése",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "Fájlfeltöltés engedélyezése",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "Nem helyi hangok engedélyezése",
@ -76,6 +78,7 @@
"Always": "Mindig",
"Always Collapse Code Blocks": "Kódblokkok mindig összecsukása",
"Always Expand Details": "Részletek mindig kibontása",
"Always Play Notification Sound": "",
"Amazing": "Csodálatos",
"an assistant": "egy asszisztens",
"Analyzed": "Elemezve",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "Add meg a dokumentum intelligencia kulcsot",
"Enter domains separated by commas (e.g., example.com,site.org)": "Add meg a domaineket vesszővel elválasztva (pl. example.com,site.org)",
"Enter Exa API Key": "Add meg az Exa API kulcsot",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "Add meg a Github Raw URL-t",
@ -511,10 +518,15 @@
"Export Tools": "Eszközök exportálása",
"External": "Külső",
"External Models": "Külső modellek",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "Nem sikerült hozzáadni a fájlt.",
"Failed to connect to {{URL}} OpenAPI tool server": "Nem sikerült csatlakozni a {{URL}} OpenAPI eszköszerverhez",
"Failed to create API Key.": "Nem sikerült létrehozni az API kulcsot.",
"Failed to fetch models": "Nem sikerült lekérni a modelleket",
"Failed to load file content.": "",
"Failed to read clipboard contents": "Nem sikerült olvasni a vágólap tartalmát",
"Failed to save connections": "Nem sikerült menteni a kapcsolatokat",
"Failed to save models configuration": "Nem sikerült menteni a modellek konfigurációját",
@ -718,8 +730,12 @@
"Memory deleted successfully": "Memória sikeresen törölve",
"Memory updated successfully": "Memória sikeresen frissítve",
"Merge Responses": "Válaszok egyesítése",
"Merged Response": "Összevont válasz",
"Message rating should be enabled to use this feature": "Az üzenetértékelésnek engedélyezve kell lennie ehhez a funkcióhoz",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "A link létrehozása után küldött üzenetei nem lesznek megosztva. A URL-lel rendelkező felhasználók megtekinthetik a megosztott beszélgetést.",
"Microsoft OneDrive": "",
"Microsoft OneDrive (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "Min P",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -761,6 +777,7 @@
"New Password": "Új jelszó",
"new-channel": "új csatorna",
"No content found": "Nem található tartalom",
"No content found in file.": "",
"No content to speak": "Nincs felolvasható tartalom",
"No distance available": "Nincs elérhető távolság",
"No feedbacks found": "Nem található visszajelzés",
@ -939,7 +956,7 @@
"Save Tag": "Címke mentése",
"Saved": "Mentve",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "A csevegési naplók közvetlen mentése a böngésző tárolójába már nem támogatott. Kérjük, szánjon egy percet a csevegési naplók letöltésére és törlésére az alábbi gomb megnyomásával. Ne aggódjon, könnyen újra importálhatja a csevegési naplókat a backend-be",
"Scroll to bottom when switching between branches": "Görgetés az aljára ágak közötti váltáskor",
"Scroll On Branch Change": "",
"Search": "Keresés",
"Search a model": "Modell keresése",
"Search Base": "Keresési alap",

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "",
"Allow Chat Deletion": "Izinkan Penghapusan Obrolan",
"Allow Chat Edit": "",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "Izinkan suara non-lokal",
@ -76,6 +78,7 @@
"Always": "",
"Always Collapse Code Blocks": "",
"Always Expand Details": "",
"Always Play Notification Sound": "",
"Amazing": "",
"an assistant": "asisten",
"Analyzed": "",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "",
"Enter domains separated by commas (e.g., example.com,site.org)": "",
"Enter Exa API Key": "",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "Masukkan URL Mentah Github",
@ -511,10 +518,15 @@
"Export Tools": "Alat Ekspor",
"External": "",
"External Models": "Model Eksternal",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to create API Key.": "Gagal membuat API Key.",
"Failed to fetch models": "",
"Failed to load file content.": "",
"Failed to read clipboard contents": "Gagal membaca konten papan klip",
"Failed to save connections": "",
"Failed to save models configuration": "",
@ -718,8 +730,12 @@
"Memory deleted successfully": "Memori berhasil dihapus",
"Memory updated successfully": "Memori berhasil diperbarui",
"Merge Responses": "",
"Merged Response": "Tanggapan yang Digabungkan",
"Message rating should be enabled to use this feature": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Pesan yang Anda kirim setelah membuat tautan tidak akan dibagikan. Pengguna yang memiliki URL tersebut akan dapat melihat obrolan yang dibagikan.",
"Microsoft OneDrive": "",
"Microsoft OneDrive (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -761,6 +777,7 @@
"New Password": "Kata Sandi Baru",
"new-channel": "",
"No content found": "",
"No content found in file.": "",
"No content to speak": "Tidak ada konten untuk dibicarakan",
"No distance available": "",
"No feedbacks found": "",
@ -939,7 +956,7 @@
"Save Tag": "",
"Saved": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Menyimpan log obrolan secara langsung ke penyimpanan browser Anda tidak lagi didukung. Mohon luangkan waktu sejenak untuk mengunduh dan menghapus log obrolan Anda dengan mengeklik tombol di bawah ini. Jangan khawatir, Anda dapat dengan mudah mengimpor kembali log obrolan Anda ke backend melalui",
"Scroll to bottom when switching between branches": "",
"Scroll On Branch Change": "",
"Search": "Cari",
"Search a model": "Mencari model",
"Search Base": "",

View file

@ -4,10 +4,10 @@
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(m.sh. `sh webui.sh --api --api-auth username_password `)",
"(e.g. `sh webui.sh --api`)": "(m.sh. `sh webui.sh --api`)",
"(latest)": "(is déanaí)",
"(Ollama)": "",
"(Ollama)": "(Ollama)",
"{{ models }}": "{{ models }}",
"{{COUNT}} Available Tools": "",
"{{COUNT}} hidden lines": "",
"{{COUNT}} Available Tools": "{{COUNT}} Uirlisí ar Fáil",
"{{COUNT}} hidden lines": "{{COUNT}} línte folaithe",
"{{COUNT}} Replies": "{{COUNT}} Freagra",
"{{user}}'s Chats": "Comhráite {{user}}",
"{{webUIName}} Backend Required": "{{webUIName}} Ceoldeireadh Riachtanach",
@ -54,28 +54,31 @@
"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Tá rochtain ag riarthóirí ar gach uirlis i gcónaí; teastaíonn ó úsáideoirí uirlisí a shanntar in aghaidh an mhúnla sa spás oibre.",
"Advanced Parameters": "Paraiméadair Casta",
"Advanced Params": "Paraiméid Casta",
"All": "",
"All": "Gach",
"All Documents": "Gach Doiciméad",
"All models deleted successfully": "Scriosadh na múnlaí go léir go rathúil",
"Allow Call": "",
"Allow Call": "Ceadaigh Glao",
"Allow Chat Controls": "Ceadaigh Rialuithe Comhrá",
"Allow Chat Delete": "Ceadaigh Comhrá a Scriosadh",
"Allow Chat Deletion": "Cead Scriosadh Comhrá",
"Allow Chat Edit": "Ceadaigh Eagarthóireacht Comhrá",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "Ceadaigh Uaslódáil Comhad",
"Allow Multiple Models in Chat": "",
"Allow Multiple Models in Chat": "Ceadaigh Múnlaí Il sa Chomhrá",
"Allow non-local voices": "Lig guthanna neamh-áitiúla",
"Allow Speech to Text": "",
"Allow Speech to Text": "Ceadaigh Óráid go Téacs",
"Allow Temporary Chat": "Cead Comhrá Sealadach",
"Allow Text to Speech": "",
"Allow Text to Speech": "Ceadaigh Téacs a Chaint",
"Allow User Location": "Ceadaigh Suíomh Úsáideora",
"Allow Voice Interruption in Call": "Ceadaigh Briseadh Guth i nGlao",
"Allowed Endpoints": "Críochphointí Ceadaithe",
"Already have an account?": "Tá cuntas agat cheana féin?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out.": "",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out.": "Rogha eile seachas an top_p, agus tá sé mar aidhm aige cothromaíocht cáilíochta agus éagsúlachta a chinntiú. Léiríonn an paraiméadar p an dóchúlacht íosta go mbreithneofar comhartha, i gcoibhneas le dóchúlacht an chomhartha is dóichí. Mar shampla, le p=0.05 agus dóchúlacht 0.9 ag an comhartha is dóichí, déantar logits le luach níos lú ná 0.045 a scagadh amach.",
"Always": "I gcónaí",
"Always Collapse Code Blocks": "",
"Always Expand Details": "",
"Always Collapse Code Blocks": "Laghdaigh Bloic Chóid i gcónaí",
"Always Expand Details": "Leathnaigh Sonraí i gcónaí",
"Always Play Notification Sound": "",
"Amazing": "Iontach",
"an assistant": "cúntóir",
"Analyzed": "Anailísithe",
@ -83,7 +86,7 @@
"and": "agus",
"and {{COUNT}} more": "agus {{COUNT}} eile",
"and create a new shared link.": "agus cruthaigh nasc nua roinnte.",
"Android": "",
"Android": "Android",
"API Base URL": "URL Bonn API",
"API Key": "Eochair API",
"API Key created.": "Cruthaíodh Eochair API.",
@ -104,7 +107,7 @@
"Are you sure?": "An bhfuil tú cinnte?",
"Arena Models": "Múnlaí Airéine",
"Artifacts": "Déantáin",
"Ask": "",
"Ask": "Fiafraigh",
"Ask a question": "Cuir ceist",
"Assistant": "Cúntóir",
"Attach file from knowledge": "Ceangail comhad ó eolas",
@ -113,10 +116,10 @@
"Attribute for Username": "Tréith don Ainm Úsáideora",
"Audio": "Fuaim",
"August": "Lúnasa",
"Auth": "",
"Auth": "Údarú",
"Authenticate": "Fíordheimhnigh",
"Authentication": "Fíordheimhniú",
"Auto": "",
"Auto": "Uath",
"Auto-Copy Response to Clipboard": "Freagra AutoCopy go Gearrthaisce",
"Auto-playback response": "Freagra uathsheinm",
"Autocomplete Generation": "Giniúint Uathchríochnaithe",
@ -126,7 +129,7 @@
"AUTOMATIC1111 Base URL": "UATHOIBRÍOCH1111 Bun URL",
"AUTOMATIC1111 Base URL is required.": "Tá URL bonn UATHOIBRÍOCH1111 ag teastáil.",
"Available list": "Liosta atá ar fáil",
"Available Tools": "",
"Available Tools": "Uirlisí ar Fáil",
"available!": "ar fáil!",
"Awful": "Uafásach",
"Azure AI Speech": "Óráid Azure AI",
@ -142,7 +145,7 @@
"Bing Search V7 Endpoint": "Cuardach Bing V7 Críochphointe",
"Bing Search V7 Subscription Key": "Eochair Síntiúis Bing Cuardach V7",
"Bocha Search API Key": "Eochair API Cuardach Bocha",
"Boosting or penalizing specific tokens for constrained responses. Bias values will be clamped between -100 and 100 (inclusive). (Default: none)": "",
"Boosting or penalizing specific tokens for constrained responses. Bias values will be clamped between -100 and 100 (inclusive). (Default: none)": "Treisiú nó pionós a ghearradh ar chomharthaí sonracha as freagraí srianta. Déanfar luachanna laofachta a chlampáil idir -100 agus 100 (san áireamh). (Réamhshocrú: ceann ar bith)",
"Brave Search API Key": "Eochair API Cuardaigh Brave",
"By {{name}}": "Le {{name}}",
"Bypass Embedding and Retrieval": "Seachbhóthar Leabú agus Aisghabháil",
@ -205,7 +208,7 @@
"Code Interpreter": "Ateangaire Cód",
"Code Interpreter Engine": "Inneall Ateangaire Cóid",
"Code Interpreter Prompt Template": "Teimpléad Pras Ateangaire Cód",
"Collapse": "",
"Collapse": "Laghdaigh",
"Collection": "Bailiúchán",
"Color": "Dath",
"ComfyUI": "ComfyUI",
@ -223,12 +226,12 @@
"Confirm your action": "Deimhnigh do ghníomh",
"Confirm your new password": "Deimhnigh do phasfhocal nua",
"Connect to your own OpenAI compatible API endpoints.": "Ceangail le do chríochphointí API atá comhoiriúnach le OpenAI.",
"Connect to your own OpenAPI compatible external tool servers.": "",
"Connection failed": "",
"Connection successful": "",
"Connect to your own OpenAPI compatible external tool servers.": "Ceangail le do fhreastalaithe uirlisí seachtracha atá comhoiriúnach le OpenAPI.",
"Connection failed": "Theip ar an gceangal",
"Connection successful": "Ceangal rathúil",
"Connections": "Naisc",
"Connections saved successfully": "",
"Constrains effort on reasoning for reasoning models. Only applicable to reasoning models from specific providers that support reasoning effort.": "",
"Connections saved successfully": "D'éirigh le naisc a shábháil",
"Constrains effort on reasoning for reasoning models. Only applicable to reasoning models from specific providers that support reasoning effort.": "Srianann iarracht ar réasúnaíocht a dhéanamh ar shamhlacha réasúnaíochta. Ní bhaineann ach le samhlacha réasúnaíochta ó sholáthraithe sonracha a thacaíonn le hiarracht réasúnaíochta.",
"Contact Admin for WebUI Access": "Déan teagmháil le Riarachán le haghaidh Rochtana WebUI",
"Content": "Ábhar",
"Content Extraction Engine": "Inneall Eastóscadh Ábhar",
@ -240,12 +243,12 @@
"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.": "Rialú conas a roinntear téacs teachtaireachta d'iarratais TTS. Roinneann 'poncaíocht' ina abairtí, scoilteann 'míreanna' i míreanna, agus coinníonn 'aon' an teachtaireacht mar shreang amháin.",
"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.": "Rialú a dhéanamh ar athrá seichimh chomharthaí sa téacs ginte. Cuirfidh luach níos airde (m.sh., 1.5) pionós níos láidre ar athrá, agus beidh luach níos ísle (m.sh., 1.1) níos boige. Ag 1, tá sé díchumasaithe. (Réamhshocrú: 1.1)",
"Controls": "Rialuithe",
"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.": "Rialaíonn sé an chothromaíocht idir comhleanúnachas agus éagsúlacht an aschuir. Beidh téacs níos dírithe agus níos soiléire mar thoradh ar luach níos ísle.",
"Copied": "Cóipeáladh",
"Copied shared chat URL to clipboard!": "Cóipeáladh URL an chomhrá roinnte chuig an ngearrthaisce!",
"Copied to clipboard": "Cóipeáilte go gear",
"Copy": "Cóipeáil",
"Copy Formatted Text": "",
"Copy Formatted Text": "Cóipeáil Téacs Formáidithe",
"Copy last code block": "Cóipeáil bloc cód deireanach",
"Copy last response": "Cóipeáil an fhreagairt",
"Copy Link": "Cóipeáil Nasc",
@ -266,7 +269,7 @@
"Created At": "Cruthaithe Ag",
"Created by": "Cruthaithe ag",
"CSV Import": "Iompórtáil CSV",
"Ctrl+Enter to Send": "",
"Ctrl+Enter to Send": "Ctrl+Iontráil chun Seol",
"Current Model": "Múnla Reatha",
"Current Password": "Pasfhocal Reatha",
"Custom": "Saincheaptha",
@ -286,7 +289,7 @@
"Default Prompt Suggestions": "Moltaí Leid Réamhshocraithe",
"Default to 389 or 636 if TLS is enabled": "Réamhshocrú go 389 nó 636 má tá TLS cumasaithe",
"Default to ALL": "Réamhshocrú do GACH",
"Default to segmented retrieval for focused and relevant content extraction, this is recommended for most cases.": "",
"Default to segmented retrieval for focused and relevant content extraction, this is recommended for most cases.": "Réamhshocrú maidir le haisghabháil deighilte deastóscadh ábhar dírithe agus ábhartha, moltar é seo i bhformhór na gcásanna.",
"Default User Role": "Ról Úsáideora Réamhshocraithe",
"Delete": "Scrios",
"Delete a model": "Scrios múnla",
@ -308,13 +311,13 @@
"Deleted User": "Úsáideoir Scriosta",
"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": "",
"Detect Artifacts Automatically": "Déan Déantáin a bhrath go huathoibríoch",
"Didn't fully follow instructions": "Níor lean sé treoracha go hiomlán",
"Direct": "",
"Direct": "Díreach",
"Direct Connections": "Naisc Dhíreacha",
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Ligeann Connections Direct dúsáideoirí ceangal lena gcríochphointí API féin atá comhoiriúnach le OpenAI.",
"Direct Connections settings updated": "Nuashonraíodh socruithe Connections Direct",
"Direct Tool Servers": "",
"Direct Tool Servers": "Freastalaithe Uirlisí Díreacha",
"Disabled": "Díchumasaithe",
"Discover a function": "Faigh amach feidhm",
"Discover a model": "Faigh amach múnla",
@ -334,8 +337,8 @@
"Dive into knowledge": "Léim isteach eolas",
"Do not install functions from sources you do not fully trust.": "Ná suiteáil feidhmeanna ó fhoinsí nach bhfuil muinín iomlán agat.",
"Do not install tools from sources you do not fully trust.": "Ná suiteáil uirlisí ó fhoinsí nach bhfuil muinín iomlán agat.",
"Docling": "",
"Docling Server URL required.": "",
"Docling": "Docling",
"Docling Server URL required.": "URL Freastalaí Doling ag teastáil.",
"Document": "Doiciméad",
"Document Intelligence": "Faisnéise Doiciméad",
"Document Intelligence endpoint and key required.": "Críochphointe Faisnéise Doiciméad agus eochair ag teastáil.",
@ -356,15 +359,15 @@
"Draw": "Tarraing",
"Drop any files here to add to the conversation": "Scaoil aon chomhaid anseo le cur leis an gcomhrá",
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "m.sh. '30s', '10m'. Is iad aonaid ama bailí ná 's', 'm', 'h'.",
"e.g. \"json\" or a JSON schema": "",
"e.g. \"json\" or a JSON schema": "m.sh. \"json\" nó scéimre JSON",
"e.g. 60": "m.sh. 60",
"e.g. A filter to remove profanity from text": "m.h. Scagaire chun profanity a bhaint as téacs",
"e.g. My Filter": "m.sh. Mo Scagaire",
"e.g. My Tools": "e.g. Mo Uirlisí",
"e.g. My Tools": "m.sh. Mo Uirlisí",
"e.g. my_filter": "m.sh. mo_scagaire",
"e.g. my_tools": "m.sh. mo_uirlisí",
"e.g. Tools for performing various operations": "m.sh. Uirlisí chun oibríochtaí éagsúla a dhéanamh",
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
"e.g., en-US,ja-JP (leave blank for auto-detect)": "m.sh., en-US, ja-JP (fág bán le haghaidh uathbhraite)",
"Edit": "Cuir in eagar",
"Edit Arena Model": "Cuir Samhail Airéine in Eagar",
"Edit Channel": "Cuir Cainéal in Eagar",
@ -383,16 +386,16 @@
"Embedding model set to \"{{embedding_model}}\"": "Múnla leabaithe socraithe go \"{{embedding_model}}\"",
"Enable API Key": "Cumasaigh Eochair API",
"Enable autocomplete generation for chat messages": "Cumasaigh giniúint uathchríochnaithe le haghaidh teachtaireachtaí comhrá",
"Enable Code Execution": "",
"Enable Code Execution": "Cumasaigh Forghníomhú Cód",
"Enable Code Interpreter": "Cumasaigh Ateangaire Cóid",
"Enable Community Sharing": "Cumasaigh Comhroinnt Pobail",
"Enable Memory Locking (mlock) to prevent model data from being swapped out of RAM. This option locks the model's working set of pages into RAM, ensuring that they will not be swapped out to disk. This can help maintain performance by avoiding page faults and ensuring fast data access.": "Cumasaigh Glasáil Cuimhne (mlock) chun sonraí samhaltaithe a chosc ó RAM. Glasálann an rogha seo sraith oibre leathanaigh an mhúnla isteach i RAM, ag cinntiú nach ndéanfar iad a mhalartú go diosca. Is féidir leis seo cabhrú le feidhmíocht a choinneáil trí lochtanna leathanaigh a sheachaint agus rochtain tapa ar shonraí a chinntiú.",
"Enable Memory Mapping (mmap) to load model data. This option allows the system to use disk storage as an extension of RAM by treating disk files as if they were in RAM. This can improve model performance by allowing for faster data access. However, it may not work correctly with all systems and can consume a significant amount of disk space.": "Cumasaigh Mapáil Cuimhne (mmap) chun sonraí samhla a lódáil. Ligeann an rogha seo don chóras stóráil diosca a úsáid mar leathnú ar RAM trí chomhaid diosca a chóireáil amhail is dá mba i RAM iad. Is féidir leis seo feidhmíocht na samhla a fheabhsú trí rochtain níos tapúla ar shonraí a cheadú. Mar sin féin, d'fhéadfadh sé nach n-oibreoidh sé i gceart le gach córas agus féadfaidh sé méid suntasach spáis diosca a ithe.",
"Enable Message Rating": "Cumasaigh Rátáil Teachtai",
"Enable Mirostat sampling for controlling perplexity.": "",
"Enable Mirostat sampling for controlling perplexity.": "Cumasaigh sampláil Mirostat chun seachrán a rialú.",
"Enable New Sign Ups": "Cumasaigh Clárúcháin Nua",
"Enabled": "Cumasaithe",
"Enforce Temporary Chat": "",
"Enforce Temporary Chat": "Cuir Comhrá Sealadach i bhfeidhm",
"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ú",
@ -407,15 +410,19 @@
"Enter CFG Scale (e.g. 7.0)": "Cuir isteach Scála CFG (m.sh. 7.0)",
"Enter Chunk Overlap": "Cuir isteach Chunk Forluí",
"Enter Chunk Size": "Cuir isteach Méid an Smután",
"Enter comma-seperated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "",
"Enter comma-seperated \"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 description": "Iontráil cur síos",
"Enter Docling Server URL": "",
"Enter Docling Server URL": "Cuir isteach URL Freastalaí Doling",
"Enter Document Intelligence Endpoint": "Iontráil Críochphointe Faisnéise Doiciméid",
"Enter Document Intelligence Key": "Iontráil Eochair Faisnéise Doiciméad",
"Enter domains separated by commas (e.g., example.com,site.org)": "Cuir isteach fearainn atá scartha le camóga (m.sh., example.com,site.org)",
"Enter Exa API Key": "Cuir isteach Eochair Exa API",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "Cuir isteach URL Bonn API Firecrawl",
"Enter Firecrawl API Key": "Cuir isteach Eochair API Firecrawl",
"Enter Github Raw URL": "Cuir isteach URL Github Raw",
"Enter Google PSE API Key": "Cuir isteach Eochair API Google PSE",
"Enter Google PSE Engine Id": "Cuir isteach ID Inneall Google PSE",
@ -425,16 +432,16 @@
"Enter Jupyter Token": "Cuir isteach Jupyter Chomhartha",
"Enter Jupyter URL": "Cuir isteach URL Jupyter",
"Enter Kagi Search API Key": "Cuir isteach Eochair Kagi Cuardach API",
"Enter Key Behavior": "",
"Enter Key Behavior": "Iontráil Iompar Eochair",
"Enter language codes": "Cuir isteach cóid teanga",
"Enter Mistral API Key": "",
"Enter Mistral API Key": "Cuir isteach Eochair API Mistral",
"Enter Model ID": "Iontráil ID Mhúnla",
"Enter model tag (e.g. {{modelTag}})": "Cuir isteach chlib samhail (m.sh. {{modelTag}})",
"Enter Mojeek Search API Key": "Cuir isteach Eochair API Cuardach Mojeek",
"Enter Number of Steps (e.g. 50)": "Iontráil Líon na gCéimeanna (m.sh. 50)",
"Enter Perplexity API Key": "",
"Enter Playwright Timeout": "",
"Enter Playwright WebSocket URL": "",
"Enter Perplexity API Key": "Cuir isteach Eochair API Perplexity",
"Enter Playwright Timeout": "Iontráil Teorainn Ama na nDrámadóir",
"Enter Playwright WebSocket URL": "Cuir isteach URL WebSocket Seinmeora",
"Enter proxy URL (e.g. https://user:password@host:port)": "Cuir isteach URL seachfhreastalaí (m.sh. https://user:password@host:port)",
"Enter reasoning effort": "Cuir isteach iarracht réasúnaíochta",
"Enter Sampler (e.g. Euler a)": "Cuir isteach Sampler (m.sh. Euler a)",
@ -452,26 +459,26 @@
"Enter server host": "Cuir isteach óstach freastalaí",
"Enter server label": "Cuir isteach lipéad freastalaí",
"Enter server port": "Cuir isteach port freastalaí",
"Enter Sougou Search API sID": "",
"Enter Sougou Search API SK": "",
"Enter Sougou Search API sID": "Cuir isteach sID Sougou Search API",
"Enter Sougou Search API SK": "Cuir isteach Sougou Search API SK",
"Enter stop sequence": "Cuir isteach seicheamh stad",
"Enter system prompt": "Cuir isteach an chóras leid",
"Enter system prompt here": "",
"Enter system prompt here": "Cuir leid córais isteach anseo",
"Enter Tavily API Key": "Cuir isteach eochair API Tavily",
"Enter Tavily Extract Depth": "",
"Enter Tavily Extract Depth": "Cuir isteach Doimhneacht Sliocht Tavily",
"Enter the public URL of your WebUI. This URL will be used to generate links in the notifications.": "Cuir isteach URL poiblí do WebUI. Bainfear úsáid as an URL seo chun naisc a ghiniúint sna fógraí.",
"Enter Tika Server URL": "Cuir isteach URL freastalaí Tika",
"Enter timeout in seconds": "Cuir isteach an t-am istigh i soicindí",
"Enter to Send": "",
"Enter to Send": "Iontráil chun Seol",
"Enter Top K": "Cuir isteach Barr K",
"Enter Top K Reranker": "",
"Enter Top K Reranker": "Cuir isteach Barr K Reranker",
"Enter URL (e.g. http://127.0.0.1:7860/)": "Iontráil URL (m.sh. http://127.0.0.1:7860/)",
"Enter URL (e.g. http://localhost:11434)": "Iontráil URL (m.sh. http://localhost:11434)",
"Enter your current password": "Cuir isteach do phasfhocal reatha",
"Enter Your Email": "Cuir isteach do Ríomhphost",
"Enter Your Full Name": "Cuir isteach d'Ainm Iomlán",
"Enter your message": "Cuir isteach do theachtaireacht",
"Enter your name": "",
"Enter your name": "Cuir isteach d'ainm",
"Enter your new password": "Cuir isteach do phasfhocal nua",
"Enter Your Password": "Cuir isteach do phasfhocal",
"Enter Your Role": "Cuir isteach do Ról",
@ -488,14 +495,14 @@
"Example: mail": "Sampla: ríomhphost",
"Example: ou=users,dc=foo,dc=example": "Sampla: ou=úsáideoirí,dc=foo,dc=sampla",
"Example: sAMAccountName or uid or userPrincipalName": "Sampla: sAMAaccountName nó uid nó userPrincipalName",
"Exceeded the number of seats in your license. Please contact support to increase the number of seats.": "",
"Exceeded the number of seats in your license. Please contact support to increase the number of seats.": "Níos mó ná líon na suíochán i do cheadúnas. Déan teagmháil le do thoil le tacaíocht chun líon na suíochán a mhéadú.",
"Exclude": "Eisigh",
"Execute code for analysis": "Íosluchtaigh cód le haghaidh anailíse",
"Executing **{{NAME}}**...": "",
"Expand": "",
"Executing **{{NAME}}**...": "**{{NAME}}** á rith...",
"Expand": "Leathnaigh",
"Experimental": "Turgnamhach",
"Explain": "",
"Explain this section to me in more detail": "",
"Explain": "Mínigh",
"Explain this section to me in more detail": "Mínigh an chuid seo dom níos mine",
"Explore the cosmos": "Déan iniúchadh ar an cosmos",
"Export": "Easpórtáil",
"Export All Archived Chats": "Easpórtáil Gach Comhrá Cartlainne",
@ -509,14 +516,19 @@
"Export Prompts": "Leideanna Easpórtála",
"Export to CSV": "Easpórtáil go CSV",
"Export Tools": "Uirlisí Easpór",
"External": "",
"External": "Seachtrach",
"External Models": "Múnlaí Seachtracha",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "Theip ar an gcomhad a chur leis.",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to connect to {{URL}} OpenAPI tool server": "Theip ar nascadh le {{URL}} freastalaí uirlisí OpenAPI",
"Failed to create API Key.": "Theip ar an eochair API a chruthú.",
"Failed to fetch models": "Theip ar shamhlacha a fháil",
"Failed to load file content.": "",
"Failed to read clipboard contents": "Theip ar ábhar gearrthaisce a lé",
"Failed to save connections": "",
"Failed to save connections": "Theip ar na naisc a shábháil",
"Failed to save models configuration": "Theip ar chumraíocht na múnlaí a shábháil",
"Failed to update settings": "Theip ar shocruithe a nuashonrú",
"Failed to upload file.": "Theip ar uaslódáil an chomhaid.",
@ -539,8 +551,8 @@
"Filter is now globally enabled": "Tá an scagaire cumasaithe go domhanda anois",
"Filters": "Scagairí",
"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Braithíodh spoofing méarloirg: Ní féidir teachlitreacha a úsáid mar avatar. Réamhshocrú ar íomhá próifíle réamhshocraithe.",
"Firecrawl API Base URL": "",
"Firecrawl API Key": "",
"Firecrawl API Base URL": "URL Bunús API Firecrawl",
"Firecrawl API Key": "Eochair API Firecrawl",
"Fluidly stream large external response chunks": "Sruthaigh codanna móra freagartha seachtracha go sreabhach",
"Focus chat input": "Ionchur comhrá fócas",
"Folder deleted successfully": "Scriosadh an fillteán go rathúil",
@ -551,7 +563,7 @@
"Forge new paths": "Déan cosáin nua a chruthú",
"Form": "Foirm",
"Format your variables using brackets like this:": "Formáidigh na hathróga ag baint úsáide as lúibíní mar seo:",
"Forwards system user session credentials to authenticate": "",
"Forwards system user session credentials to authenticate": "Cuir dintiúir seisiúin úsáideora córais ar aghaidh lena bhfíordheimhniú",
"Frequency Penalty": "Pionós Minicíochta",
"Full Context Mode": "Mód Comhthéacs Iomlán",
"Function": "Feidhm",
@ -573,7 +585,7 @@
"Gemini API Key is required.": "Tá Eochair Gemini API ag teastáil.",
"General": "Ginearálta",
"Generate an image": "Gin íomhá",
"Generate Image": "Ginigh Íomhá",
"Generate Image": "Gin Íomhá",
"Generate prompt pair": "Gin péire pras",
"Generating search query": "Giniúint ceist cuardaigh",
"Get started": "Cuir tús leis",
@ -597,7 +609,7 @@
"Hex Color": "Dath Heics",
"Hex Color - Leave empty for default color": "Dath Heics - Fág folamh don dath réamhshocraithe",
"Hide": "Folaigh",
"Hide Model": "",
"Hide Model": "Folaigh Múnla",
"Home": "Baile",
"Host": "Óstach",
"How can I help you today?": "Conas is féidir liom cabhrú leat inniu?",
@ -605,8 +617,8 @@
"Hybrid Search": "Cuardach Hibrideach",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Admhaím gur léigh mé agus tuigim impleachtaí mo ghníomhaíochta. Táim ar an eolas faoi na rioscaí a bhaineann le cód treallach a fhorghníomhú agus tá iontaofacht na foinse fíoraithe agam.",
"ID": "ID",
"iframe Sandbox Allow Forms": "",
"iframe Sandbox Allow Same Origin": "",
"iframe Sandbox Allow Forms": "iframe Bosca Gainimh Foirmeacha Ceadaithe",
"iframe Sandbox Allow Same Origin": "Bosca Gainimh iframe Ceadaigh an Bunús Céanna",
"Ignite curiosity": "Las fiosracht",
"Image": "Íomhá",
"Image Compression": "Comhbhrú Íomhá",
@ -628,16 +640,16 @@
"Include": "Cuir san áireamh",
"Include `--api-auth` flag when running stable-diffusion-webui": "Cuir bratach `--api-auth` san áireamh agus webui stable-diffusion-reatha á rith",
"Include `--api` flag when running stable-diffusion-webui": "Cuir bratach `--api` san áireamh agus webui cobhsaí-scaipthe á rith",
"Influences how quickly the algorithm responds to feedback from the generated text. A lower learning rate will result in slower adjustments, while a higher learning rate will make the algorithm more responsive.": "",
"Influences how quickly the algorithm responds to feedback from the generated text. A lower learning rate will result in slower adjustments, while a higher learning rate will make the algorithm more responsive.": "Bíonn tionchar aige ar chomh tapa agus a fhreagraíonn an t-algartam daiseolas ón téacs ginte. Beidh coigeartuithe níos moille mar thoradh ar ráta foghlama níos ísle, agus déanfaidh ráta foghlama níos airde an t-algartam níos freagraí.",
"Info": "Eolas",
"Inject the entire content as context for comprehensive processing, this is recommended for complex queries.": "",
"Inject the entire content as context for comprehensive processing, this is recommended for complex queries.": "Instealladh an t-ábhar ar fad mar chomhthéacs do phróiseáil chuimsitheach, moltar é seo le haghaidh ceisteanna casta.",
"Input commands": "Orduithe ionchuir",
"Install from Github URL": "Suiteáil ó Github URL",
"Instant Auto-Send After Voice Transcription": "Seoladh Uathoibríoch Láithreach Tar éis",
"Integration": "Comhtháthú",
"Interface": "Comhéadan",
"Invalid file format.": "Formáid comhaid neamhbhailí.",
"Invalid JSON schema": "",
"Invalid JSON schema": "Scéimre JSON neamhbhailí",
"Invalid Tag": "Clib neamhbhailí",
"is typing...": "ag clóscríobh...",
"January": "Eanáir",
@ -645,7 +657,7 @@
"join our Discord for help.": "bí inár Discord chun cabhair a fháil.",
"JSON": "JSON",
"JSON Preview": "Réamhamharc JSON",
"July": "Lúil",
"July": "Iúil",
"June": "Meitheamh",
"Jupyter Auth": "Fíordheimhniú Jupyter",
"Jupyter URL": "URL Jupyter",
@ -659,7 +671,7 @@
"Knowledge Access": "Rochtain Eolais",
"Knowledge created successfully.": "Eolas cruthaithe go rathúil.",
"Knowledge deleted successfully.": "D'éirigh leis an eolas a scriosadh.",
"Knowledge Public Sharing": "",
"Knowledge Public Sharing": "Roinnt Faisnéise Poiblí",
"Knowledge reset successfully.": "D'éirigh le hathshocrú eolais.",
"Knowledge updated successfully": "D'éirigh leis an eolas a nuashonrú",
"Kokoro.js (Browser)": "Kokoro.js (Brabhsálaí)",
@ -667,17 +679,17 @@
"Label": "Lipéad",
"Landing Page Mode": "Mód Leathanach Tuirlingthe",
"Language": "Teanga",
"Language Locales": "",
"Language Locales": "Logánta Teanga",
"Last Active": "Gníomhach Deiridh",
"Last Modified": "Athraithe Deiridh",
"Last reply": "Freagra deiridh",
"LDAP": "LDAP",
"LDAP server updated": "Nuashonraíodh freastalaí LDAP",
"Leaderboard": "An Clár Ceannairí",
"Learn more about OpenAPI tool servers.": "",
"Learn more about OpenAPI tool servers.": "Foghlaim tuilleadh faoi fhreastalaithe uirlisí OpenAPI.",
"Leave empty for unlimited": "Fág folamh le haghaidh neamhtheoranta",
"Leave empty to include all models from \"{{url}}/api/tags\" endpoint": "",
"Leave empty to include all models from \"{{url}}/models\" endpoint": "",
"Leave empty to include all models from \"{{url}}/api/tags\" endpoint": "Fág folamh chun gach múnla ó chríochphointe \"{{url}}/api/tags\" a chur san áireamh",
"Leave empty to include all models from \"{{url}}/models\" endpoint": "Fág folamh chun gach múnla ón gcríochphointe \"{{url}}/models\" a chur san áireamh",
"Leave empty to include all models or select specific models": "Fág folamh chun gach múnla a chur san áireamh nó roghnaigh múnlaí sonracha",
"Leave empty to use the default prompt, or enter a custom prompt": "Fág folamh chun an leid réamhshocraithe a úsáid, nó cuir isteach leid saincheaptha",
"Leave model field empty to use the default model.": "Fág réimse an mhúnla folamh chun an tsamhail réamhshocraithe a úsáid.",
@ -691,7 +703,7 @@
"Local": "Áitiúil",
"Local Models": "Múnlaí Áitiúla",
"Location access not allowed": "Ní cheadaítear rochtain suímh",
"Logit Bias": "",
"Logit Bias": "Bias Logit",
"Lost": "Cailleadh",
"LTR": "LTR",
"Made by Open WebUI Community": "Déanta ag OpenWebUI Community",
@ -704,7 +716,7 @@
"Manage Ollama API Connections": "Bainistigh Naisc API Ollama",
"Manage OpenAI API Connections": "Bainistigh Naisc API OpenAI",
"Manage Pipelines": "Bainistigh píblín",
"Manage Tool Servers": "",
"Manage Tool Servers": "Bainistigh Freastalaithe Uirlisí",
"March": "Márta",
"Max Tokens (num_predict)": "Comharthaí Uasta (num_predicate)",
"Max Upload Count": "Líon Uaslódála Max",
@ -718,22 +730,26 @@
"Memory deleted successfully": "Cuimhne scriosta go rathúil",
"Memory updated successfully": "Cuimhne nuashonraithe",
"Merge Responses": "Cumaisc Freagraí",
"Merged Response": "Freagra Cumaiscthe",
"Message rating should be enabled to use this feature": "Ba cheart rátáil teachtaireachta a chumasú chun an ghné seo a úsáid",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Ní roinnfear teachtaireachtaí a sheolann tú tar éis do nasc a chruthú. Beidh úsáideoirí leis an URL in ann féachaint ar an gcomhrá roinnte.",
"Microsoft OneDrive": "",
"Microsoft OneDrive (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "Min P",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
"Mirostat Tau": "Mirostat Tau",
"Mistral OCR": "",
"Mistral OCR API Key required.": "",
"Mistral OCR": "OCR Mistral",
"Mistral OCR API Key required.": "Mistral OCR API Eochair ag teastáil.",
"Model": "Múnla",
"Model '{{modelName}}' has been successfully downloaded.": "Rinneadh an tsamhail '{{modelName}}' a íoslódáil go rathúil.",
"Model '{{modelTag}}' is already in queue for downloading.": "Tá múnla {{modelTag}} sa scuaine cheana féin le híoslódáil.",
"Model {{modelId}} not found": "Múnla {{modelId}} gan aimsiú",
"Model {{modelName}} is not vision capable": "Níl samhail {{modelName}} in ann amharc",
"Model {{name}} is now {{status}}": "Tá samhail {{name}} {{status}} anois",
"Model {{name}} is now hidden": "",
"Model {{name}} is now visible": "",
"Model {{name}} is now hidden": "Tá múnla {{name}} i bhfolach anois",
"Model {{name}} is now visible": "Tá múnla {{name}} le feiceáil anois",
"Model accepts image inputs": "Glacann múnla le hionchuir",
"Model created successfully!": "Cruthaíodh múnla go rathúil!",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Fuarthas cosán an múnla. Teastaíonn ainm gearr an mhúnla le haghaidh nuashonraithe, ní féidir leanúint ar aghaidh.",
@ -749,7 +765,7 @@
"Models": "Múnlaí",
"Models Access": "Rochtain Múnlaí",
"Models configuration saved successfully": "Sábháladh cumraíocht na múnlaí go rathúil",
"Models Public Sharing": "",
"Models Public Sharing": "Múnlaí Comhroinnte Poiblí",
"Mojeek Search API Key": "Eochair API Cuardach Mojeek",
"more": "níos mó",
"More": "Tuilleadh",
@ -761,6 +777,7 @@
"New Password": "Pasfhocal Nua",
"new-channel": "nua-chainéil",
"No content found": "Níor aimsíodh aon ábhar",
"No content found in file.": "",
"No content to speak": "Níl aon ábhar le labhairt",
"No distance available": "Níl achar ar fáil",
"No feedbacks found": "Níor aimsíodh aon aiseolas",
@ -812,7 +829,7 @@
"Open file": "Oscail comhad",
"Open in full screen": "Oscail i scáileán iomlán",
"Open new chat": "Oscail comhrá nua",
"Open WebUI can use tools provided by any OpenAPI server.": "",
"Open WebUI can use tools provided by any OpenAPI server.": "Is féidir le WebUI Oscailte uirlisí a úsáid a sholáthraíonn aon fhreastalaí OpenAPI.",
"Open WebUI uses faster-whisper internally.": "Úsáideann Open WebUI cogar níos tapúla go hinmheánach.",
"Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Úsáideann Open WebUI úsáidí SpeechT5 agus CMU leabaithe cainteoir Artach.",
"Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Tá leagan WebUI oscailte (v{{OPEN_WEBUI_VERSION}}) níos ísle ná an leagan riachtanach (v{{REQUIRED_VERSION}})",
@ -822,7 +839,7 @@
"OpenAI API Key is required.": "Tá Eochair API OpenAI ag teastáil.",
"OpenAI API settings updated": "Nuashonraíodh socruithe OpenAI API",
"OpenAI URL/Key required.": "Teastaíonn URL/eochair OpenAI.",
"openapi.json Path": "",
"openapi.json Path": "Conair openapi.json",
"or": "nó",
"Organize your users": "Eagraigh do chuid úsáideoirí",
"Other": "Eile",
@ -839,7 +856,7 @@
"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}}",
"Permissions": "Ceadanna",
"Perplexity API Key": "",
"Perplexity API Key": "Eochair API Perplexity",
"Personalization": "Pearsantú",
"Pin": "Bioráin",
"Pinned": "Pinneáilte",
@ -851,13 +868,13 @@
"Pipelines Valves": "Comhlaí Píblíne",
"Plain text (.txt)": "Téacs simplí (.txt)",
"Playground": "Clós súgartha",
"Playwright Timeout (ms)": "",
"Playwright WebSocket URL": "",
"Playwright Timeout (ms)": "Teorainn Ama drámadóra (ms)",
"Playwright WebSocket URL": "URL drámadóir WebSocket",
"Please carefully review the following warnings:": "Déan athbhreithniú cúramach ar na rabhaidh seo a leanas le do thoil:",
"Please do not close the settings page while loading the model.": "Ná dún leathanach na socruithe agus an tsamhail á luchtú.",
"Please enter a prompt": "Cuir isteach leid",
"Please enter a valid path": "",
"Please enter a valid URL": "",
"Please enter a valid path": "Cuir isteach cosán bailí",
"Please enter a valid URL": "Cuir isteach URL bailí",
"Please fill in all fields.": "Líon isteach gach réimse le do thoil.",
"Please select a model first.": "Roghnaigh munla ar dtús le do thoil.",
"Please select a model.": "Roghnaigh múnla le do thoil.",
@ -869,19 +886,19 @@
"Presence Penalty": "Pionós Láithreacht",
"Previous 30 days": "30 lá roimhe seo",
"Previous 7 days": "7 lá roimhe seo",
"Private": "",
"Private": "Príobháideach",
"Profile Image": "Íomhá Próifíl",
"Prompt": "Leid",
"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Leid (m.sh. inis dom fíric spraíúil faoin Impireacht Rómhánach)",
"Prompt Autocompletion": "",
"Prompt Autocompletion": "Uathchríochnú Pras",
"Prompt Content": "Ábhar Leid",
"Prompt created successfully": "Leid cruthaithe go rathúil",
"Prompt suggestions": "Moltaí leid",
"Prompt updated successfully": "D'éirigh leis an leid a nuashonrú",
"Prompts": "Leabhair",
"Prompts Access": "Rochtain ar Chuirí",
"Prompts Public Sharing": "",
"Public": "",
"Prompts Public Sharing": "Spreagann Roinnt Phoiblí",
"Public": "Poiblí",
"Pull \"{{searchValue}}\" from Ollama.com": "Tarraing \"{{searchValue}}\" ó Ollama.com",
"Pull a model from Ollama.com": "Tarraing múnla ó Ollama.com",
"Query Generation Prompt": "Cuirí Ginearáil Ceisteanna",
@ -893,16 +910,16 @@
"Reasoning Effort": "Iarracht Réasúnúcháin",
"Record voice": "Taifead guth",
"Redirecting you to Open WebUI Community": "Tú a atreorú chuig OpenWebUI Community",
"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.": "",
"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.": "Laghdaíonn sé an dóchúlacht go giniúint nonsense. Tabharfaidh luach níos airde (m.sh. 100) freagraí níos éagsúla, agus beidh luach níos ísle (m.sh. 10) níos coimeádaí.",
"Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Tagairt duit féin mar \"Úsáideoir\" (m.sh., \"Tá an úsáideoir ag foghlaim Spáinnis\")",
"References from": "Tagairtí ó",
"Refused when it shouldn't have": "Diúltaíodh nuair nár chóir dó",
"Regenerate": "Athghiniúint",
"Reindex": "",
"Reindex Knowledge Base Vectors": "",
"Reindex": "Reindex",
"Reindex Knowledge Base Vectors": "Veicteoirí Bonn Eolais a ath-innéacsú",
"Release Notes": "Nótaí Scaoilte",
"Relevance": "Ábharthacht",
"Relevance Threshold": "",
"Relevance Threshold": "Tairseach Ábharthaíochta",
"Remove": "Bain",
"Remove Model": "Bain Múnla",
"Rename": "Athainmnigh",
@ -939,7 +956,7 @@
"Save Tag": "Sábháil Clib",
"Saved": "Shábháil",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Ní thacaítear le logaí comhrá a shábháil go díreach chuig stóráil do bhrabhsálaí Tóg nóiméad chun do logaí comhrá a íoslódáil agus a scriosadh trí chliceáil an cnaipe thíos. Ná bíodh imní ort, is féidir leat do logaí comhrá a athiompórtáil go héasca chuig an gcúltaca trí",
"Scroll to bottom when switching between branches": "Scrollaigh go bun agus tú ag athrú idir brainsí",
"Scroll On Branch Change": "",
"Search": "Cuardaigh",
"Search a model": "Cuardaigh múnla",
"Search Base": "Bonn Cuardaigh",
@ -1005,22 +1022,22 @@
"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.": "Socraigh líon na snáitheanna oibrithe a úsáidtear le haghaidh ríomh. Rialaíonn an rogha seo cé mhéad snáithe a úsáidtear chun iarratais a thagann isteach a phróiseáil i gcomhthráth. D'fhéadfadh méadú ar an luach seo feidhmíocht a fheabhsú faoi ualaí oibre comhairgeadra ard ach féadfaidh sé níos mó acmhainní LAP a úsáid freisin.",
"Set Voice": "Socraigh Guth",
"Set whisper model": "Socraigh múnla cogar",
"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.": "",
"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.": "",
"Sets how far back for the model to look back to prevent repetition.": "",
"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.": "",
"Sets the size of the context window used to generate the next token.": "",
"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.": "Socraíonn sé claonadh cothrom i gcoinne comharthaí a tháinig chun solais uair amháin ar a laghad. Cuirfidh luach níos airde (m.sh., 1.5) pionós níos láidre ar athrá, agus beidh luach níos ísle (m.sh., 0.9) níos boige. Ag 0, tá sé díchumasaithe.",
"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.": "Socraíonn sé laofacht scálaithe i gcoinne comharthaí chun pionós a ghearradh ar athrá, bunaithe ar cé mhéad uair a tháinig siad chun solais. Cuirfidh luach níos airde (m.sh., 1.5) pionós níos láidre ar athrá, agus beidh luach níos ísle (m.sh., 0.9) níos boige. Ag 0, tá sé díchumasaithe.",
"Sets how far back for the model to look back to prevent repetition.": "Socraíonn sé cé chomh fada siar is atá an tsamhail le breathnú siar chun athrá a chosc.",
"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.": "Socraíonn sé an síol uimhir randamach a úsáid le haghaidh giniúna. Má shocraítear é seo ar uimhir shainiúil, ginfidh an tsamhail an téacs céanna don leid céanna.",
"Sets the size of the context window used to generate the next token.": "Socraíonn sé méid na fuinneoige comhthéacs a úsáidtear chun an chéad chomhartha eile a ghiniúint.",
"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.": "Socraíonn sé na stadanna le húsáid. Nuair a thagtar ar an bpatrún seo, stopfaidh an LLM ag giniúint téacs agus ag filleadh. Is féidir patrúin stad iolracha a shocrú trí pharaiméadair stadanna iolracha a shonrú i gcomhad samhail.",
"Settings": "Socruithe",
"Settings saved successfully!": "Socruithe sábhálta go rathúil!",
"Share": "Comhroinn",
"Share Chat": "Comhroinn Comhrá",
"Share to Open WebUI Community": "Comhroinn le Pobal OpenWebUI",
"Sharing Permissions": "",
"Sharing Permissions": "Ceadanna a Roinnt",
"Show": "Taispeáin",
"Show \"What's New\" modal on login": "Taispeáin módúil \"Cad atá Nua\" ar logáil isteach",
"Show Admin Details in Account Pending Overlay": "Taispeáin Sonraí Riaracháin sa Chuntas ar Feitheamh Forleagan",
"Show Model": "",
"Show Model": "Taispeáin Múnla",
"Show shortcuts": "Taispeáin aicearraí",
"Show your support!": "Taispeáin do thacaíocht!",
"Showcased creativity": "Cruthaitheacht léirithe",
@ -1032,8 +1049,8 @@
"Sign up to {{WEBUI_NAME}}": "Cláraigh le {{WEBUI_NAME}}",
"Signing in to {{WEBUI_NAME}}": "Ag síniú isteach ar {{WEBUI_NAME}}",
"sk-1234": "sk-1234",
"Sougou Search API sID": "",
"Sougou Search API SK": "",
"Sougou Search API sID": "Sougou Search API sID",
"Sougou Search API SK": "Sougou Search API SK",
"Source": "Foinse",
"Speech Playback Speed": "Luas Athsheinm Urlabhra",
"Speech recognition error: {{error}}": "Earráid aitheantais cainte: {{error}}",
@ -1053,7 +1070,7 @@
"System": "Córas",
"System Instructions": "Treoracha Córas",
"System Prompt": "Córas Leid",
"Tags": "",
"Tags": "Clibeanna",
"Tags Generation": "Giniúint Clibeanna",
"Tags Generation Prompt": "Clibeanna Giniúint Leid",
"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.": "Úsáidtear sampláil saor ó eireabaill chun tionchar na n-chomharthaí ón aschur nach bhfuil chomh dóchúil céanna a laghdú. Laghdóidh luach níos airde (m.sh., 2.0) an tionchar níos mó, agus díchumasaíonn luach 1.0 an socrú seo. (réamhshocraithe: 1)",
@ -1061,7 +1078,7 @@
"Tap to interrupt": "Tapáil chun cur isteach",
"Tasks": "Tascanna",
"Tavily API Key": "Eochair API Tavily",
"Tavily Extract Depth": "",
"Tavily Extract Depth": "Doimhneacht Sliocht Tavily",
"Tell us more:": "Inis dúinn níos mó:",
"Temperature": "Teocht",
"Template": "Teimpléad",
@ -1072,7 +1089,7 @@
"Thanks for your feedback!": "Go raibh maith agat as do chuid aiseolas!",
"The Application Account DN you bind with for search": "An Cuntas Feidhmchláir DN a nascann tú leis le haghaidh cuardaigh",
"The base to search for users": "An bonn chun cuardach a dhéanamh ar úsáideoirí",
"The batch size determines how many text requests are processed together at once. A higher batch size can increase the performance and speed of the model, but it also requires more memory.": "",
"The batch size determines how many text requests are processed together at once. A higher batch size can increase the performance and speed of the model, but it also requires more memory.": "Cinneann méid an bhaisc cé mhéad iarratas téacs a phróiseáiltear le chéile ag an am céanna. Is féidir le méid baisc níos airde feidhmíocht agus luas an mhúnla a mhéadú, ach éilíonn sé níos mó cuimhne freisin.",
"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "Is deonacha paiseanta ón bpobal iad na forbróirí taobh thiar den bhreiseán seo. Má aimsíonn an breiseán seo cabhrach leat, smaoinigh ar rannchuidiú lena fhorbairt.",
"The evaluation leaderboard is based on the Elo rating system and is updated in real-time.": "Tá an clár ceannairí meastóireachta bunaithe ar chóras rátála Elo agus déantar é a nuashonrú i bhfíor-am.",
"The LDAP attribute that maps to the mail that users use to sign in.": "An tréith LDAP a mhapálann don ríomhphost a úsáideann úsáideoirí chun síniú isteach.",
@ -1081,16 +1098,16 @@
"The maximum file size in MB. If the file size exceeds this limit, the file will not be uploaded.": "Uasmhéid an chomhaid i MB. Má sháraíonn méid an chomhaid an teorainn seo, ní uaslódófar an comhad.",
"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.": "An líon uasta na gcomhaid is féidir a úsáid ag an am céanna i gcomhrá. Má sháraíonn líon na gcomhaid an teorainn seo, ní uaslódófar na comhaid.",
"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Ba chóir go mbeadh an scór ina luach idir 0.0 (0%) agus 1.0 (100%).",
"The temperature of the model. Increasing the temperature will make the model answer more creatively.": "",
"The temperature of the model. Increasing the temperature will make the model answer more creatively.": "Teocht an mhúnla. Déanfaidh méadú ar an teocht an freagra múnla níos cruthaithí.",
"Theme": "Téama",
"Thinking...": "Ag smaoineamh...",
"This action cannot be undone. Do you wish to continue?": "Ní féidir an gníomh seo a chur ar ais. Ar mhaith leat leanúint ar aghaidh?",
"This channel was created on {{createdAt}}. This is the very beginning of the {{channelName}} channel.": "",
"This chat wont appear in history and your messages will not be saved.": "",
"This channel was created on {{createdAt}}. This is the very beginning of the {{channelName}} channel.": "Cruthaíodh an cainéal seo ar {{createdAt}}. Seo tús an chainéil {{channelName}}.",
"This chat wont appear in history and your messages will not be saved.": "Ní bheidh an comhrá seo le feiceáil sa stair agus ní shábhálfar do theachtaireachtaí.",
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Cinntíonn sé seo go sábhálfar do chomhráite luachmhara go daingean i do bhunachar sonraí cúltaca Go raibh maith agat!",
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Is gné turgnamhach í seo, b'fhéidir nach bhfeidhmeoidh sé mar a bhíothas ag súil leis agus tá sé faoi réir athraithe ag am ar bith.",
"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.": "",
"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.": "",
"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.": "Rialaíonn an rogha seo cé mhéad comhartha a chaomhnaítear agus an comhthéacs á athnuachan. Mar shampla, má shocraítear go 2 é, coinneofar an 2 chomhartha dheireanacha de chomhthéacs an chomhrá. Is féidir le comhthéacs a chaomhnú cabhrú le leanúnachas comhrá a choinneáil, ach dfhéadfadh sé laghdú a dhéanamh ar an gcumas freagairt do thopaicí nua.",
"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.": "Socraíonn an rogha seo an t-uaslíon comharthaí is féidir leis an tsamhail a ghiniúint ina fhreagra. Tríd an teorainn seo a mhéadú is féidir leis an tsamhail freagraí níos faide a sholáthar, ach dfhéadfadh go méadódh sé an dóchúlacht go nginfear ábhar neamhchabhrach nó nach mbaineann le hábhar.",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Scriosfaidh an rogha seo gach comhad atá sa bhailiúchán agus cuirfear comhaid nua-uaslódála ina n-ionad.",
"This response was generated by \"{{model}}\"": "Gin an freagra seo ag \"{{model}}\"",
"This will delete": "Scriosfaidh sé seo",
@ -1103,7 +1120,7 @@
"Thought for {{DURATION}} seconds": "Smaoineamh ar feadh {{DURATION}} soicind",
"Tika": "Tika",
"Tika Server URL required.": "Teastaíonn URL Freastalaí Tika.",
"Tiktoken": "Tictoken",
"Tiktoken": "Tiktoken",
"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Leid: Nuashonraigh sliotáin iolracha athróg as a chéile trí bhrú ar an eochair cluaisín san ionchur comhrá tar éis gach athsholáthair.",
"Title": "Teideal",
"Title (e.g. Tell me a fun fact)": "Teideal (m.sh. inis dom fíric spraíúil)",
@ -1134,7 +1151,7 @@
"Tool ID": "ID Uirlis",
"Tool imported successfully": "Uirlis iompórtáilte",
"Tool Name": "Ainm Uirlis",
"Tool Servers": "",
"Tool Servers": "Freastalaithe Uirlisí",
"Tool updated successfully": "An uirlis nuashonraithe",
"Tools": "Uirlisí",
"Tools Access": "Rochtain Uirlisí",
@ -1142,9 +1159,9 @@
"Tools Function Calling Prompt": "Leid Glaonna Feidhm Uirlisí",
"Tools have a function calling system that allows arbitrary code execution": "Tá córas glaonna feidhme ag uirlisí a cheadaíonn forghníomhú cód treallach",
"Tools have a function calling system that allows arbitrary code execution.": "Tá córas glaonna feidhme ag uirlisí a cheadaíonn forghníomhú cód treallach.",
"Tools Public Sharing": "",
"Tools Public Sharing": "Uirlisí Roinnte Poiblí",
"Top K": "Barr K",
"Top K Reranker": "",
"Top K Reranker": "Barr K Reranker",
"Top P": "Barr P",
"Transformers": "Claochladáin",
"Trouble accessing Ollama?": "Deacracht teacht ar Ollama?",
@ -1184,14 +1201,14 @@
"Use Gravatar": "Úsáid Gravatar",
"Use groups to group your users and assign permissions.": "Úsáid grúpaí chun d'úsáideoirí a ghrúpáil agus ceadanna a shannadh",
"Use Initials": "Úsáid ceannlitreacha",
"Use no proxy to fetch page contents.": "",
"Use proxy designated by http_proxy and https_proxy environment variables to fetch page contents.": "",
"Use no proxy to fetch page contents.": "Ná húsáid seachfhreastalaí chun inneachar an leathanaigh a fháil.",
"Use proxy designated by http_proxy and https_proxy environment variables to fetch page contents.": "Úsáid seachfhreastalaí ainmnithe ag athróga timpeallachta http_proxy agus https_proxy chun inneachar an leathanaigh a fháil.",
"use_mlock (Ollama)": "use_mlock (Ollama)",
"use_mmap (Ollama)": "use_mmap (Ollama)",
"user": "úsáideoir",
"User": "Úsáideoir",
"User location successfully retrieved.": "Fuarthas suíomh an úsáideora go rathúil.",
"User Webhooks": "",
"User Webhooks": "Crúcaí Gréasáin Úsáideoir",
"Username": "Ainm Úsáideora",
"Users": "Úsáideoirí",
"Using the default arena model with all models. Click the plus button to add custom models.": "Ag baint úsáide as an múnla réimse réamhshocraithe le gach múnlaí. Cliceáil ar an gcnaipe móide chun múnlaí saincheaptha a chur leis.",
@ -1202,12 +1219,12 @@
"Valves updated successfully": "Comhlaí nuashonraíodh",
"variable": "athraitheach",
"variable to have them replaced with clipboard content.": "athróg chun ábhar gearrthaisce a chur in ionad iad.",
"Verify Connection": "",
"Verify SSL Certificate": "",
"Verify Connection": "Fíoraigh Ceangal",
"Verify SSL Certificate": "Fíoraigh Deimhniú SSL",
"Version": "Leagan",
"Version {{selectedVersion}} of {{totalVersions}}": "Leagan {{selectedVersion}} de {{totalVersions}}",
"View Replies": "Féach ar Fhreagraí",
"View Result from **{{NAME}}**": "",
"View Result from **{{NAME}}**": "Féach ar Thoradh ó **{{NAME}}**",
"Visibility": "Infheictheacht",
"Voice": "Guth",
"Voice Input": "Ionchur Gutha",
@ -1218,7 +1235,7 @@
"Warning: Jupyter execution enables arbitrary code execution, posing severe security risks—proceed with extreme caution.": "Rabhadh: Trí fhorghníomhú Jupyter is féidir cód a fhorghníomhú go treallach, rud a chruthaíonn mór-rioscaí slándála - bí fíorchúramach.",
"Web": "Gréasán",
"Web API": "API Gréasáin",
"Web Loader Engine": "",
"Web Loader Engine": "Inneall Luchtaithe Gréasáin",
"Web Search": "Cuardach Gréasáin",
"Web Search Engine": "Inneall Cuardaigh Gréasáin",
"Web Search in Chat": "Cuardach Gréasáin i gComhrá",
@ -1226,7 +1243,7 @@
"Webhook URL": "URL Webhook",
"WebUI Settings": "Socruithe WebUI",
"WebUI URL": "URL WebUI",
"WebUI will make requests to \"{{url}}\"": "",
"WebUI will make requests to \"{{url}}\"": "Déanfaidh WebUI iarratais ar \"{{url}}\"",
"WebUI will make requests to \"{{url}}/api/chat\"": "Déanfaidh WebUI iarratais ar \"{{url}}/api/chat\"",
"WebUI will make requests to \"{{url}}/chat/completions\"": "Déanfaidh WebUI iarratais ar \"{{url}}/chat/completions\"",
"What are you trying to achieve?": "Cad atá tú ag iarraidh a bhaint amach?",
@ -1238,7 +1255,7 @@
"Why?": "Cén fáth?",
"Widescreen Mode": "Mód Leathanscáileán",
"Won": "Bhuaigh",
"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.": "",
"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.": "Oibríonn sé le barr-k. Beidh téacs níos éagsúla mar thoradh ar luach níos airde (m.sh., 0.95), agus ginfidh luach níos ísle (m.sh., 0.5) téacs níos dírithe agus níos coimeádaí.",
"Workspace": "Spás oibre",
"Workspace Permissions": "Ceadanna Spás Oibre",
"Write": "Scríobh",
@ -1248,7 +1265,7 @@
"Write your model template content here": "Scríobh do mhúnla ábhar teimpléad anseo",
"Yesterday": "Inné",
"You": "Tú",
"You are currently using a trial license. Please contact support to upgrade your license.": "",
"You are currently using a trial license. Please contact support to upgrade your license.": "Tá ceadúnas trialach á úsáid agat faoi láthair. Déan teagmháil leis an bhfoireann tacaíochta chun do cheadúnas a uasghrádú.",
"You can only chat with a maximum of {{maxCount}} file(s) at a time.": "Ní féidir leat comhrá a dhéanamh ach le comhad {{maxCount}} ar a mhéad ag an am.",
"You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "Is féidir leat do chuid idirghníomhaíochtaí le LLManna a phearsantú ach cuimhní cinn a chur leis tríd an gcnaipe 'Bainistigh' thíos, rud a fhágann go mbeidh siad níos cabhrach agus níos oiriúnaí duit.",
"You cannot upload an empty file.": "Ní féidir leat comhad folamh a uaslódáil.",

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "",
"Allow Chat Deletion": "Consenti l'eliminazione della chat",
"Allow Chat Edit": "",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "",
@ -76,6 +78,7 @@
"Always": "",
"Always Collapse Code Blocks": "",
"Always Expand Details": "",
"Always Play Notification Sound": "",
"Amazing": "",
"an assistant": "un assistente",
"Analyzed": "",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "",
"Enter domains separated by commas (e.g., example.com,site.org)": "",
"Enter Exa API Key": "",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "Immettere l'URL grezzo di Github",
@ -511,10 +518,15 @@
"Export Tools": "",
"External": "",
"External Models": "",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to create API Key.": "Impossibile creare la chiave API.",
"Failed to fetch models": "",
"Failed to load file content.": "",
"Failed to read clipboard contents": "Impossibile leggere il contenuto degli appunti",
"Failed to save connections": "",
"Failed to save models configuration": "",
@ -718,8 +730,12 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Merge Responses": "",
"Merged Response": "Risposta Unita",
"Message rating should be enabled to use this feature": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "I messaggi inviati dopo la creazione del link non verranno condivisi. Gli utenti con l'URL saranno in grado di visualizzare la chat condivisa.",
"Microsoft OneDrive": "",
"Microsoft OneDrive (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -761,6 +777,7 @@
"New Password": "Nuova password",
"new-channel": "",
"No content found": "",
"No content found in file.": "",
"No content to speak": "",
"No distance available": "",
"No feedbacks found": "",
@ -939,7 +956,7 @@
"Save Tag": "",
"Saved": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Il salvataggio dei registri della chat direttamente nell'archivio del browser non è più supportato. Si prega di dedicare un momento per scaricare ed eliminare i registri della chat facendo clic sul pulsante in basso. Non preoccuparti, puoi facilmente reimportare i registri della chat nel backend tramite",
"Scroll to bottom when switching between branches": "",
"Scroll On Branch Change": "",
"Search": "Cerca",
"Search a model": "Cerca un modello",
"Search Base": "",

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "",
"Allow Chat Deletion": "チャットの削除を許可",
"Allow Chat Edit": "",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "ローカル以外のボイスを許可",
@ -76,6 +78,7 @@
"Always": "",
"Always Collapse Code Blocks": "",
"Always Expand Details": "",
"Always Play Notification Sound": "",
"Amazing": "",
"an assistant": "アシスタント",
"Analyzed": "",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "",
"Enter domains separated by commas (e.g., example.com,site.org)": "",
"Enter Exa API Key": "",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "Github Raw URLを入力",
@ -511,10 +518,15 @@
"Export Tools": "ツールのエクスポート",
"External": "",
"External Models": "外部モデル",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to create API Key.": "APIキーの作成に失敗しました。",
"Failed to fetch models": "",
"Failed to load file content.": "",
"Failed to read clipboard contents": "クリップボードの内容を読み取れませんでした",
"Failed to save connections": "",
"Failed to save models configuration": "",
@ -718,8 +730,12 @@
"Memory deleted successfully": "メモリを削除しました。",
"Memory updated successfully": "メモリアップデート成功",
"Merge Responses": "",
"Merged Response": "統合された応答",
"Message rating should be enabled to use this feature": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "リンクを作成した後、送信したメッセージは共有されません。URL を持つユーザーは共有チャットを閲覧できます。",
"Microsoft OneDrive": "",
"Microsoft OneDrive (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "",
"Mirostat": "ミロスタット",
"Mirostat Eta": "ミロスタット Eta",
@ -761,6 +777,7 @@
"New Password": "新しいパスワード",
"new-channel": "",
"No content found": "",
"No content found in file.": "",
"No content to speak": "",
"No distance available": "",
"No feedbacks found": "",
@ -939,7 +956,7 @@
"Save Tag": "",
"Saved": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "チャットログをブラウザのストレージに直接保存する機能はサポートされなくなりました。下のボタンをクリックして、チャットログをダウンロードして削除してください。ご心配なく。チャットログは、次の方法でバックエンドに簡単に再インポートできます。",
"Scroll to bottom when switching between branches": "ブランチの切り替え時にボタンをスクロールする",
"Scroll On Branch Change": "",
"Search": "検索",
"Search a model": "モデルを検索",
"Search Base": "",

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "ჩატის წაშლის დაშვება",
"Allow Chat Deletion": "ჩატის წაშლის დაშვება",
"Allow Chat Edit": "ჩატის ჩასწორების დაშვება",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "ფაილის ატვირთვის დაშვება",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "არალოკალური ხმების დაშვება",
@ -76,6 +78,7 @@
"Always": "ყოველთვის",
"Always Collapse Code Blocks": "",
"Always Expand Details": "",
"Always Play Notification Sound": "",
"Amazing": "გადასარევია",
"an assistant": "დამხმარე",
"Analyzed": "გაანაზლიებულია",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "",
"Enter domains separated by commas (e.g., example.com,site.org)": "",
"Enter Exa API Key": "",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "შეიყვანეთ Github Raw URL",
@ -511,10 +518,15 @@
"Export Tools": "",
"External": "",
"External Models": "",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "ფაილის დამატების შეცდომა.",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to create API Key.": "API-ის გასაღების შექმნა ჩავარდა.",
"Failed to fetch models": "",
"Failed to load file content.": "",
"Failed to read clipboard contents": "ბუფერის შემცველობის წაკითხვა ჩავარდა",
"Failed to save connections": "",
"Failed to save models configuration": "",
@ -718,8 +730,12 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Merge Responses": "პასუხების შერწყმა",
"Merged Response": "შერწყმული პასუხი",
"Message rating should be enabled to use this feature": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "შეტყობინებები, რომელსაც თქვენ აგზავნით თქვენი ბმულის შექმნის შემდეგ, არ იქნება გაზიარებული. URL ის მქონე მომხმარებლებს შეეძლებათ ნახონ საერთო ჩატი.",
"Microsoft OneDrive": "",
"Microsoft OneDrive (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -761,6 +777,7 @@
"New Password": "ახალი პაროლი",
"new-channel": "new-channel",
"No content found": "შემცველობა აღმოჩენილი არაა",
"No content found in file.": "",
"No content to speak": "წარმოსათქმელი შემცველობის გარეშე",
"No distance available": "მანძილი ხელმისაწვდომი არაა",
"No feedbacks found": "",
@ -939,7 +956,7 @@
"Save Tag": "ჭდის შენახვა",
"Saved": "შენახულია",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "ჩეთის ისტორიის შენახვა პირდაპირ თქვენი ბრაუზერის საცავში აღარ არის მხარდაჭერილი. გთხოვთ, დაუთმოთ და წაშალოთ თქვენი ჩატის ჟურნალები ქვემოთ მოცემულ ღილაკზე დაწკაპუნებით. არ ინერვიულოთ, თქვენ შეგიძლიათ მარტივად ხელახლა შემოიტანოთ თქვენი ჩეთის ისტორია ბექენდში",
"Scroll to bottom when switching between branches": "",
"Scroll On Branch Change": "",
"Search": "ძებნა",
"Search a model": "მოდელის ძებნა",
"Search Base": "ბაზის ძებნა",

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "채팅 삭제 허용",
"Allow Chat Deletion": "채팅 삭제 허용",
"Allow Chat Edit": "채팅 수정 허용",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "파일 업로드 허용",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "외부 음성 허용",
@ -76,6 +78,7 @@
"Always": "",
"Always Collapse Code Blocks": "",
"Always Expand Details": "",
"Always Play Notification Sound": "",
"Amazing": "놀라움",
"an assistant": "어시스턴트",
"Analyzed": "",
@ -128,7 +131,7 @@
"Available list": "가능한 목록",
"Available Tools": "",
"available!": "사용 가능!",
"Awful": "끔찍함",
"Awful": "형편없음",
"Azure AI Speech": "Azure AI 음성",
"Azure Region": "Azure 지역",
"Back": "뒤로가기",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "",
"Enter domains separated by commas (e.g., example.com,site.org)": "",
"Enter Exa API Key": "",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "Github Raw URL 입력",
@ -511,10 +518,15 @@
"Export Tools": "도구 내보내기",
"External": "",
"External Models": "외부 모델",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "파일추가에 실패했습니다",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to create API Key.": "API 키 생성에 실패했습니다.",
"Failed to fetch models": "",
"Failed to load file content.": "",
"Failed to read clipboard contents": "클립보드 내용 가져오기를 실패하였습니다.",
"Failed to save connections": "",
"Failed to save models configuration": "",
@ -718,8 +730,12 @@
"Memory deleted successfully": "성공적으로 메모리가 삭제되었습니다",
"Memory updated successfully": "성공적으로 메모리가 업데이트되었습니다",
"Merge Responses": "응답들 결합하기",
"Merged Response": "결합된 응답",
"Message rating should be enabled to use this feature": "이 기능을 사용하려면 메시지 평가가 활성화되어야합니다",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "링크 생성 후에 보낸 메시지는 공유되지 않습니다. URL이 있는 사용자는 공유된 채팅을 볼 수 있습니다.",
"Microsoft OneDrive": "",
"Microsoft OneDrive (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "최소 P",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -761,6 +777,7 @@
"New Password": "새 비밀번호",
"new-channel": "",
"No content found": "내용을 찾을 수 없음",
"No content found in file.": "",
"No content to speak": "음성 출력할 내용을 찾을 수 없음",
"No distance available": "거리 불가능",
"No feedbacks found": "피드백 없음",
@ -939,7 +956,7 @@
"Save Tag": "태그 저장",
"Saved": "저장됨",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "브라우저의 저장소에 채팅 로그를 직접 저장하는 것은 더 이상 지원되지 않습니다. 아래 버튼을 클릭하여 채팅 로그를 다운로드하고 삭제하세요. 걱정 마세요. 백엔드를 통해 채팅 로그를 쉽게 다시 가져올 수 있습니다.",
"Scroll to bottom when switching between branches": "브랜치 간 전환시 밑으로 스크롤 하세요",
"Scroll On Branch Change": "",
"Search": "검색",
"Search a model": "모델 검색",
"Search Base": "",

View file

@ -62,6 +62,8 @@
"Allow Chat Delete": "",
"Allow Chat Deletion": "Leisti pokalbių ištrynimą",
"Allow Chat Edit": "",
"Allow Chat Export": "",
"Allow Chat Share": "",
"Allow File Upload": "",
"Allow Multiple Models in Chat": "",
"Allow non-local voices": "Leisti nelokalius balsus",
@ -76,6 +78,7 @@
"Always": "",
"Always Collapse Code Blocks": "",
"Always Expand Details": "",
"Always Play Notification Sound": "",
"Amazing": "",
"an assistant": "assistentas",
"Analyzed": "",
@ -234,7 +237,7 @@
"Content Extraction Engine": "",
"Context Length": "Konteksto ilgis",
"Continue Response": "Tęsti atsakymą",
"Continue with {{provider}}": "Tęstti su {{tiekėju}}",
"Continue with {{provider}}": "Tęsti su {{tiekėju}}",
"Continue with Email": "",
"Continue with LDAP": "",
"Control how message text is split for TTS requests. 'Punctuation' splits into sentences, 'paragraphs' splits into paragraphs, and 'none' keeps the message as a single string.": "",
@ -414,6 +417,10 @@
"Enter Document Intelligence Key": "",
"Enter domains separated by commas (e.g., example.com,site.org)": "",
"Enter Exa API Key": "",
"Enter External Web Loader API Key": "",
"Enter External Web Loader URL": "",
"Enter External Web Search API Key": "",
"Enter External Web Search URL": "",
"Enter Firecrawl API Base URL": "",
"Enter Firecrawl API Key": "",
"Enter Github Raw URL": "Įveskite GitHub Raw nuorodą",
@ -511,10 +518,15 @@
"Export Tools": "Eksportuoti įrankius",
"External": "",
"External Models": "Išoriniai modeliai",
"External Web Loader API Key": "",
"External Web Loader URL": "",
"External Web Search API Key": "",
"External Web Search URL": "",
"Failed to add file.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to create API Key.": "Nepavyko sukurti API rakto",
"Failed to fetch models": "",
"Failed to load file content.": "",
"Failed to read clipboard contents": "Nepavyko perskaityti kopijuoklės",
"Failed to save connections": "",
"Failed to save models configuration": "",
@ -718,8 +730,12 @@
"Memory deleted successfully": "Atmintis ištrinta sėkmingai",
"Memory updated successfully": "Atmintis atnaujinta sėkmingai",
"Merge Responses": "",
"Merged Response": "Sujungtas atsakymas",
"Message rating should be enabled to use this feature": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Žinutės, kurias siunčiate po nuorodos sukūrimo nebus matomos nuorodos turėtojams. Naudotojai su nuoroda matys žinutes iki nuorodos sukūrimo.",
"Microsoft OneDrive": "",
"Microsoft OneDrive (personal)": "",
"Microsoft OneDrive (work/school)": "",
"Min P": "Mažiausias p",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -761,6 +777,7 @@
"New Password": "Naujas slaptažodis",
"new-channel": "",
"No content found": "",
"No content found in file.": "",
"No content to speak": "Nėra turinio kalbėjimui",
"No distance available": "",
"No feedbacks found": "",
@ -939,7 +956,7 @@
"Save Tag": "Išsaugoti žymą",
"Saved": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Pokalbių saugojimas naršyklėje nebegalimas.",
"Scroll to bottom when switching between branches": "Slikite link apačios norėdami pakeisti šakas",
"Scroll On Branch Change": "",
"Search": "Ieškoti",
"Search a model": "Ieškoti modelio",
"Search Base": "",

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