Merge pull request #4273 from open-webui/dev

0.3.11
This commit is contained in:
Timothy Jaeryang Baek 2024-08-03 00:03:15 +02:00 committed by GitHub
commit a58dfccb7d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
100 changed files with 4243 additions and 1600 deletions

View File

@ -5,6 +5,37 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.3.11] - 2024-08-02
### Added
- **📊 Model Information Display**: Added visuals for model selection, including images next to model names for more intuitive navigation.
- **🗣 ElevenLabs Voice Adaptations**: Voice enhancements including support for ElevenLabs voice ID by name for personalized vocal interactions.
- **⌨️ Arrow Keys Model Selection**: Users can now use arrow keys for quicker model selection, enhancing accessibility.
- **🔍 Fuzzy Search in Model Selector**: Enhanced model selector with fuzzy search to locate models swiftly, including descriptions.
- **🕹️ ComfyUI Flux Image Generation**: Added support for the new Flux image gen model; introduces environment controls like weight precision and CLIP model options in Settings.
- **💾 Display File Size for Uploads**: Enhanced file interface now displays file size, preparing for upcoming upload restrictions.
- **🎚️ Advanced Params "Min P"**: Added 'Min P' parameter in the advanced settings for customized model precision control.
- **🔒 Enhanced OAuth**: Introduced custom redirect URI support for OAuth behind reverse proxies, enabling safer authentication processes.
- **🖥 Enhanced Latex Rendering**: Adjustments made to latex rendering processes, now accurately detecting and presenting latex inputs from text.
- **🌐 Internationalization**: Enhanced with new Romanian and updated Vietnamese and Ukrainian translations, helping broaden accessibility for international users.
### Fixed
- **🔧 Tags Handling in Document Upload**: Tags are now properly sent to the upload document handler, resolving issues with missing metadata.
- **🖥️ Sensitive Input Fields**: Corrected browser misinterpretation of secure input fields, preventing misclassification as password fields.
- **📂 Static Path Resolution in PDF Generation**: Fixed static paths that adjust dynamically to prevent issues across various environments.
### Changed
- **🎨 UI/UX Styling Enhancements**: Multiple minor styling updates for a cleaner and more intuitive user interface.
- **🚧 Refactoring Various Components**: Numerous refactoring changes across styling, file handling, and function simplifications for clarity and performance.
- **🎛️ User Valves Management**: Moved user valves from settings to direct chat controls for more user-friendly access during interactions.
### Removed
- **⚙️ Health Check Logging**: Removed verbose logging from the health checking processes to declutter logs and improve backend performance.
## [0.3.10] - 2024-07-17
### Fixed

View File

@ -151,7 +151,7 @@ COPY --chown=$UID:$GID ./backend .
EXPOSE 8080
HEALTHCHECK CMD curl --silent --fail http://localhost:8080/health | jq -e '.status == true' || exit 1
HEALTHCHECK CMD curl --silent --fail http://localhost:${PORT:-8080}/health | jq -ne 'input.status == true' || exit 1
USER $UID:$GID

View File

@ -10,12 +10,12 @@ from fastapi import (
File,
Form,
)
from fastapi.responses import StreamingResponse, JSONResponse, FileResponse
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from typing import List
import uuid
import requests
import hashlib
@ -31,6 +31,7 @@ from utils.utils import (
)
from utils.misc import calculate_sha256
from config import (
SRC_LOG_LEVELS,
CACHE_DIR,
@ -43,6 +44,7 @@ from config import (
AUDIO_STT_OPENAI_API_KEY,
AUDIO_TTS_OPENAI_API_BASE_URL,
AUDIO_TTS_OPENAI_API_KEY,
AUDIO_TTS_API_KEY,
AUDIO_STT_ENGINE,
AUDIO_STT_MODEL,
AUDIO_TTS_ENGINE,
@ -75,6 +77,7 @@ app.state.config.TTS_OPENAI_API_KEY = AUDIO_TTS_OPENAI_API_KEY
app.state.config.TTS_ENGINE = AUDIO_TTS_ENGINE
app.state.config.TTS_MODEL = AUDIO_TTS_MODEL
app.state.config.TTS_VOICE = AUDIO_TTS_VOICE
app.state.config.TTS_API_KEY = AUDIO_TTS_API_KEY
# setting device type for whisper model
whisper_device_type = DEVICE_TYPE if DEVICE_TYPE and DEVICE_TYPE == "cuda" else "cpu"
@ -87,6 +90,7 @@ SPEECH_CACHE_DIR.mkdir(parents=True, exist_ok=True)
class TTSConfigForm(BaseModel):
OPENAI_API_BASE_URL: str
OPENAI_API_KEY: str
API_KEY: str
ENGINE: str
MODEL: str
VOICE: str
@ -137,6 +141,7 @@ async def get_audio_config(user=Depends(get_admin_user)):
"tts": {
"OPENAI_API_BASE_URL": app.state.config.TTS_OPENAI_API_BASE_URL,
"OPENAI_API_KEY": app.state.config.TTS_OPENAI_API_KEY,
"API_KEY": app.state.config.TTS_API_KEY,
"ENGINE": app.state.config.TTS_ENGINE,
"MODEL": app.state.config.TTS_MODEL,
"VOICE": app.state.config.TTS_VOICE,
@ -156,6 +161,7 @@ async def update_audio_config(
):
app.state.config.TTS_OPENAI_API_BASE_URL = form_data.tts.OPENAI_API_BASE_URL
app.state.config.TTS_OPENAI_API_KEY = form_data.tts.OPENAI_API_KEY
app.state.config.TTS_API_KEY = form_data.tts.API_KEY
app.state.config.TTS_ENGINE = form_data.tts.ENGINE
app.state.config.TTS_MODEL = form_data.tts.MODEL
app.state.config.TTS_VOICE = form_data.tts.VOICE
@ -169,6 +175,7 @@ async def update_audio_config(
"tts": {
"OPENAI_API_BASE_URL": app.state.config.TTS_OPENAI_API_BASE_URL,
"OPENAI_API_KEY": app.state.config.TTS_OPENAI_API_KEY,
"API_KEY": app.state.config.TTS_API_KEY,
"ENGINE": app.state.config.TTS_ENGINE,
"MODEL": app.state.config.TTS_MODEL,
"VOICE": app.state.config.TTS_VOICE,
@ -194,55 +201,111 @@ async def speech(request: Request, user=Depends(get_verified_user)):
if file_path.is_file():
return FileResponse(file_path)
headers = {}
headers["Authorization"] = f"Bearer {app.state.config.TTS_OPENAI_API_KEY}"
headers["Content-Type"] = "application/json"
if app.state.config.TTS_ENGINE == "openai":
headers = {}
headers["Authorization"] = f"Bearer {app.state.config.TTS_OPENAI_API_KEY}"
headers["Content-Type"] = "application/json"
try:
body = body.decode("utf-8")
body = json.loads(body)
body["model"] = app.state.config.TTS_MODEL
body = json.dumps(body).encode("utf-8")
except Exception as e:
pass
try:
body = body.decode("utf-8")
body = json.loads(body)
body["model"] = app.state.config.TTS_MODEL
body = json.dumps(body).encode("utf-8")
except Exception as e:
pass
r = None
try:
r = requests.post(
url=f"{app.state.config.TTS_OPENAI_API_BASE_URL}/audio/speech",
data=body,
headers=headers,
stream=True,
)
r = None
try:
r = requests.post(
url=f"{app.state.config.TTS_OPENAI_API_BASE_URL}/audio/speech",
data=body,
headers=headers,
stream=True,
)
r.raise_for_status()
r.raise_for_status()
# Save the streaming content to a file
with open(file_path, "wb") as f:
for chunk in r.iter_content(chunk_size=8192):
f.write(chunk)
# Save the streaming content to a file
with open(file_path, "wb") as f:
for chunk in r.iter_content(chunk_size=8192):
f.write(chunk)
with open(file_body_path, "w") as f:
json.dump(json.loads(body.decode("utf-8")), f)
with open(file_body_path, "w") as f:
json.dump(json.loads(body.decode("utf-8")), f)
# Return the saved file
return FileResponse(file_path)
# Return the saved file
return FileResponse(file_path)
except Exception as e:
log.exception(e)
error_detail = "Open WebUI: Server Connection Error"
if r is not None:
try:
res = r.json()
if "error" in res:
error_detail = f"External: {res['error']['message']}"
except:
error_detail = f"External: {e}"
except Exception as e:
log.exception(e)
error_detail = "Open WebUI: Server Connection Error"
if r is not None:
try:
res = r.json()
if "error" in res:
error_detail = f"External: {res['error']['message']}"
except:
error_detail = f"External: {e}"
raise HTTPException(
status_code=r.status_code if r != None else 500,
detail=error_detail,
)
raise HTTPException(
status_code=r.status_code if r != None else 500,
detail=error_detail,
)
elif app.state.config.TTS_ENGINE == "elevenlabs":
payload = None
try:
payload = json.loads(body.decode("utf-8"))
except Exception as e:
log.exception(e)
raise HTTPException(status_code=400, detail="Invalid JSON payload")
voice_id = payload.get("voice", "")
url = f"https://api.elevenlabs.io/v1/text-to-speech/{voice_id}"
headers = {
"Accept": "audio/mpeg",
"Content-Type": "application/json",
"xi-api-key": app.state.config.TTS_API_KEY,
}
data = {
"text": payload["input"],
"model_id": app.state.config.TTS_MODEL,
"voice_settings": {"stability": 0.5, "similarity_boost": 0.5},
}
try:
r = requests.post(url, json=data, headers=headers)
r.raise_for_status()
# Save the streaming content to a file
with open(file_path, "wb") as f:
for chunk in r.iter_content(chunk_size=8192):
f.write(chunk)
with open(file_body_path, "w") as f:
json.dump(json.loads(body.decode("utf-8")), f)
# Return the saved file
return FileResponse(file_path)
except Exception as e:
log.exception(e)
error_detail = "Open WebUI: Server Connection Error"
if r is not None:
try:
res = r.json()
if "error" in res:
error_detail = f"External: {res['error']['message']}"
except:
error_detail = f"External: {e}"
raise HTTPException(
status_code=r.status_code if r != None else 500,
detail=error_detail,
)
@app.post("/transcriptions")
@ -373,3 +436,69 @@ def transcribe(
status_code=status.HTTP_400_BAD_REQUEST,
detail=ERROR_MESSAGES.DEFAULT(e),
)
def get_available_models() -> List[dict]:
if app.state.config.TTS_ENGINE == "openai":
return [{"id": "tts-1"}, {"id": "tts-1-hd"}]
elif app.state.config.TTS_ENGINE == "elevenlabs":
headers = {
"xi-api-key": app.state.config.TTS_API_KEY,
"Content-Type": "application/json",
}
try:
response = requests.get(
"https://api.elevenlabs.io/v1/models", headers=headers
)
response.raise_for_status()
models = response.json()
return [
{"name": model["name"], "id": model["model_id"]} for model in models
]
except requests.RequestException as e:
log.error(f"Error fetching voices: {str(e)}")
return []
@app.get("/models")
async def get_models(user=Depends(get_verified_user)):
return {"models": get_available_models()}
def get_available_voices() -> List[dict]:
if app.state.config.TTS_ENGINE == "openai":
return [
{"name": "alloy", "id": "alloy"},
{"name": "echo", "id": "echo"},
{"name": "fable", "id": "fable"},
{"name": "onyx", "id": "onyx"},
{"name": "nova", "id": "nova"},
{"name": "shimmer", "id": "shimmer"},
]
elif app.state.config.TTS_ENGINE == "elevenlabs":
headers = {
"xi-api-key": app.state.config.TTS_API_KEY,
"Content-Type": "application/json",
}
try:
response = requests.get(
"https://api.elevenlabs.io/v1/voices", headers=headers
)
response.raise_for_status()
voices_data = response.json()
voices = []
for voice in voices_data.get("voices", []):
voices.append({"name": voice["name"], "id": voice["voice_id"]})
return voices
except requests.RequestException as e:
log.error(f"Error fetching voices: {str(e)}")
return []
@app.get("/voices")
async def get_voices(user=Depends(get_verified_user)):
return {"voices": get_available_voices()}

View File

@ -42,6 +42,9 @@ from config import (
COMFYUI_SAMPLER,
COMFYUI_SCHEDULER,
COMFYUI_SD3,
COMFYUI_FLUX,
COMFYUI_FLUX_WEIGHT_DTYPE,
COMFYUI_FLUX_FP8_CLIP,
IMAGES_OPENAI_API_BASE_URL,
IMAGES_OPENAI_API_KEY,
IMAGE_GENERATION_MODEL,
@ -85,6 +88,9 @@ app.state.config.COMFYUI_CFG_SCALE = COMFYUI_CFG_SCALE
app.state.config.COMFYUI_SAMPLER = COMFYUI_SAMPLER
app.state.config.COMFYUI_SCHEDULER = COMFYUI_SCHEDULER
app.state.config.COMFYUI_SD3 = COMFYUI_SD3
app.state.config.COMFYUI_FLUX = COMFYUI_FLUX
app.state.config.COMFYUI_FLUX_WEIGHT_DTYPE = COMFYUI_FLUX_WEIGHT_DTYPE
app.state.config.COMFYUI_FLUX_FP8_CLIP = COMFYUI_FLUX_FP8_CLIP
def get_automatic1111_api_auth():
@ -497,6 +503,15 @@ async def image_generations(
if app.state.config.COMFYUI_SD3 is not None:
data["sd3"] = app.state.config.COMFYUI_SD3
if app.state.config.COMFYUI_FLUX is not None:
data["flux"] = app.state.config.COMFYUI_FLUX
if app.state.config.COMFYUI_FLUX_WEIGHT_DTYPE is not None:
data["flux_weight_dtype"] = app.state.config.COMFYUI_FLUX_WEIGHT_DTYPE
if app.state.config.COMFYUI_FLUX_FP8_CLIP is not None:
data["flux_fp8_clip"] = app.state.config.COMFYUI_FLUX_FP8_CLIP
data = ImageGenerationPayload(**data)
res = comfyui_generate_image(

View File

@ -125,6 +125,135 @@ COMFYUI_DEFAULT_PROMPT = """
}
"""
FLUX_DEFAULT_PROMPT = """
{
"5": {
"inputs": {
"width": 1024,
"height": 1024,
"batch_size": 1
},
"class_type": "EmptyLatentImage"
},
"6": {
"inputs": {
"text": "Input Text Here",
"clip": [
"11",
0
]
},
"class_type": "CLIPTextEncode"
},
"8": {
"inputs": {
"samples": [
"13",
0
],
"vae": [
"10",
0
]
},
"class_type": "VAEDecode"
},
"9": {
"inputs": {
"filename_prefix": "ComfyUI",
"images": [
"8",
0
]
},
"class_type": "SaveImage"
},
"10": {
"inputs": {
"vae_name": "ae.sft"
},
"class_type": "VAELoader"
},
"11": {
"inputs": {
"clip_name1": "clip_l.safetensors",
"clip_name2": "t5xxl_fp16.safetensors",
"type": "flux"
},
"class_type": "DualCLIPLoader"
},
"12": {
"inputs": {
"unet_name": "flux1-dev.sft",
"weight_dtype": "default"
},
"class_type": "UNETLoader"
},
"13": {
"inputs": {
"noise": [
"25",
0
],
"guider": [
"22",
0
],
"sampler": [
"16",
0
],
"sigmas": [
"17",
0
],
"latent_image": [
"5",
0
]
},
"class_type": "SamplerCustomAdvanced"
},
"16": {
"inputs": {
"sampler_name": "euler"
},
"class_type": "KSamplerSelect"
},
"17": {
"inputs": {
"scheduler": "simple",
"steps": 20,
"denoise": 1,
"model": [
"12",
0
]
},
"class_type": "BasicScheduler"
},
"22": {
"inputs": {
"model": [
"12",
0
],
"conditioning": [
"6",
0
]
},
"class_type": "BasicGuider"
},
"25": {
"inputs": {
"noise_seed": 778937779713005
},
"class_type": "RandomNoise"
}
}
"""
def queue_prompt(prompt, client_id, base_url):
log.info("queue_prompt")
@ -194,6 +323,9 @@ class ImageGenerationPayload(BaseModel):
sampler: Optional[str] = None
scheduler: Optional[str] = None
sd3: Optional[bool] = None
flux: Optional[bool] = None
flux_weight_dtype: Optional[str] = None
flux_fp8_clip: Optional[bool] = None
def comfyui_generate_image(
@ -215,21 +347,46 @@ def comfyui_generate_image(
if payload.sd3:
comfyui_prompt["5"]["class_type"] = "EmptySD3LatentImage"
if payload.steps:
comfyui_prompt["3"]["inputs"]["steps"] = payload.steps
comfyui_prompt["4"]["inputs"]["ckpt_name"] = model
comfyui_prompt["7"]["inputs"]["text"] = payload.negative_prompt
comfyui_prompt["3"]["inputs"]["seed"] = (
payload.seed if payload.seed else random.randint(0, 18446744073709551614)
)
# as Flux uses a completely different workflow, we must treat it specially
if payload.flux:
comfyui_prompt = json.loads(FLUX_DEFAULT_PROMPT)
comfyui_prompt["12"]["inputs"]["unet_name"] = model
comfyui_prompt["25"]["inputs"]["noise_seed"] = (
payload.seed if payload.seed else random.randint(0, 18446744073709551614)
)
if payload.sampler:
comfyui_prompt["16"]["inputs"]["sampler_name"] = payload.sampler
if payload.steps:
comfyui_prompt["17"]["inputs"]["steps"] = payload.steps
if payload.scheduler:
comfyui_prompt["17"]["inputs"]["scheduler"] = payload.scheduler
if payload.flux_weight_dtype:
comfyui_prompt["12"]["inputs"]["weight_dtype"] = payload.flux_weight_dtype
if payload.flux_fp8_clip:
comfyui_prompt["11"]["inputs"][
"clip_name2"
] = "t5xxl_fp8_e4m3fn.safetensors"
comfyui_prompt["5"]["inputs"]["batch_size"] = payload.n
comfyui_prompt["5"]["inputs"]["width"] = payload.width
comfyui_prompt["5"]["inputs"]["height"] = payload.height
# set the text prompt for our positive CLIPTextEncode
comfyui_prompt["6"]["inputs"]["text"] = payload.prompt
comfyui_prompt["7"]["inputs"]["text"] = payload.negative_prompt
if payload.steps:
comfyui_prompt["3"]["inputs"]["steps"] = payload.steps
comfyui_prompt["3"]["inputs"]["seed"] = (
payload.seed if payload.seed else random.randint(0, 18446744073709551614)
)
try:
ws = websocket.WebSocket()

View File

@ -805,7 +805,7 @@ async def generate_chat_completion(
)
if (
model_info.params.get("temperature", None)
model_info.params.get("temperature", None) is not None
and payload["options"].get("temperature") is None
):
payload["options"]["temperature"] = model_info.params.get(
@ -813,7 +813,7 @@ async def generate_chat_completion(
)
if (
model_info.params.get("seed", None)
model_info.params.get("seed", None) is not None
and payload["options"].get("seed") is None
):
payload["options"]["seed"] = model_info.params.get("seed", None)
@ -857,6 +857,12 @@ async def generate_chat_completion(
):
payload["options"]["top_p"] = model_info.params.get("top_p", None)
if (
model_info.params.get("min_p", None)
and payload["options"].get("min_p") is None
):
payload["options"]["min_p"] = model_info.params.get("min_p", None)
if (
model_info.params.get("use_mmap", None)
and payload["options"].get("use_mmap") is None

View File

@ -372,7 +372,7 @@ async def generate_chat_completion(
if model_info.params:
if (
model_info.params.get("temperature", None)
model_info.params.get("temperature", None) is not None
and payload.get("temperature") is None
):
payload["temperature"] = float(model_info.params.get("temperature"))
@ -394,7 +394,10 @@ async def generate_chat_completion(
model_info.params.get("frequency_penalty", None)
)
if model_info.params.get("seed", None) and payload.get("seed") is None:
if (
model_info.params.get("seed", None) is not None
and payload.get("seed") is None
):
payload["seed"] = model_info.params.get("seed", None)
if model_info.params.get("stop", None) and payload.get("stop") is None:
@ -459,6 +462,9 @@ async def generate_chat_completion(
headers = {}
headers["Authorization"] = f"Bearer {key}"
headers["Content-Type"] = "application/json"
if "openrouter.ai" in app.state.config.OPENAI_API_BASE_URLS[idx]:
headers["HTTP-Referer"] = "https://openwebui.com/"
headers["X-Title"] = "Open WebUI"
r = None
session = None

View File

@ -1099,6 +1099,13 @@ def get_loader(filename: str, file_content_type: str, file_path: str):
"vue",
"svelte",
"msg",
"ex",
"exs",
"erl",
"tsx",
"jsx",
"hs",
"lhs",
]
if (

View File

@ -52,7 +52,6 @@ async def user_join(sid, data):
user = Users.get_user_by_id(data["id"])
if user:
SESSION_POOL[sid] = user.id
if user.id in USER_POOL:
USER_POOL[user.id].append(sid)
@ -80,7 +79,6 @@ def get_models_in_use():
@sio.on("usage")
async def usage(sid, data):
model_id = data["model"]
# Cancel previous callback if there is one
@ -139,7 +137,7 @@ async def disconnect(sid):
print(f"Unknown session ID {sid} disconnected")
async def get_event_emitter(request_info):
def get_event_emitter(request_info):
async def __event_emitter__(event_data):
await sio.emit(
"chat-events",
@ -154,7 +152,7 @@ async def get_event_emitter(request_info):
return __event_emitter__
async def get_event_call(request_info):
def get_event_call(request_info):
async def __event_call__(event_data):
response = await sio.call(
"chat-events",

View File

@ -1,9 +1,6 @@
from fastapi import FastAPI, Depends
from fastapi.routing import APIRoute
from fastapi import FastAPI
from fastapi.responses import StreamingResponse
from fastapi.middleware.cors import CORSMiddleware
from starlette.middleware.sessions import SessionMiddleware
from sqlalchemy.orm import Session
from apps.webui.routers import (
auths,
users,
@ -22,12 +19,15 @@ from apps.webui.models.functions import Functions
from apps.webui.models.models import Models
from apps.webui.utils import load_function_module_by_id
from utils.misc import stream_message_template
from utils.misc import (
openai_chat_chunk_message_template,
openai_chat_completion_message_template,
add_or_update_system_message,
)
from utils.task import prompt_template
from config import (
WEBUI_BUILD_HASH,
SHOW_ADMIN_DETAILS,
ADMIN_EMAIL,
WEBUI_AUTH,
@ -35,6 +35,7 @@ from config import (
DEFAULT_PROMPT_SUGGESTIONS,
DEFAULT_USER_ROLE,
ENABLE_SIGNUP,
ENABLE_LOGIN_FORM,
USER_PERMISSIONS,
WEBHOOK_URL,
WEBUI_AUTH_TRUSTED_EMAIL_HEADER,
@ -50,11 +51,9 @@ from config import (
from apps.socket.main import get_event_call, get_event_emitter
import inspect
import uuid
import time
import json
from typing import Iterator, Generator, Optional
from typing import Iterator, Generator, AsyncGenerator
from pydantic import BaseModel
app = FastAPI()
@ -64,6 +63,7 @@ origins = ["*"]
app.state.config = AppConfig()
app.state.config.ENABLE_SIGNUP = ENABLE_SIGNUP
app.state.config.ENABLE_LOGIN_FORM = ENABLE_LOGIN_FORM
app.state.config.JWT_EXPIRES_IN = JWT_EXPIRES_IN
app.state.AUTH_TRUSTED_EMAIL_HEADER = WEBUI_AUTH_TRUSTED_EMAIL_HEADER
app.state.AUTH_TRUSTED_NAME_HEADER = WEBUI_AUTH_TRUSTED_NAME_HEADER
@ -125,60 +125,58 @@ async def get_status():
}
def get_function_module(pipe_id: str):
# Check if function is already loaded
if pipe_id not in app.state.FUNCTIONS:
function_module, _, _ = load_function_module_by_id(pipe_id)
app.state.FUNCTIONS[pipe_id] = function_module
else:
function_module = app.state.FUNCTIONS[pipe_id]
if hasattr(function_module, "valves") and hasattr(function_module, "Valves"):
valves = Functions.get_function_valves_by_id(pipe_id)
function_module.valves = function_module.Valves(**(valves if valves else {}))
return function_module
async def get_pipe_models():
pipes = Functions.get_functions_by_type("pipe", active_only=True)
pipe_models = []
for pipe in pipes:
# Check if function is already loaded
if pipe.id not in app.state.FUNCTIONS:
function_module, function_type, frontmatter = load_function_module_by_id(
pipe.id
)
app.state.FUNCTIONS[pipe.id] = function_module
else:
function_module = app.state.FUNCTIONS[pipe.id]
if hasattr(function_module, "valves") and hasattr(function_module, "Valves"):
valves = Functions.get_function_valves_by_id(pipe.id)
function_module.valves = function_module.Valves(
**(valves if valves else {})
)
function_module = get_function_module(pipe.id)
# Check if function is a manifold
if hasattr(function_module, "type"):
if function_module.type == "manifold":
manifold_pipes = []
if hasattr(function_module, "pipes"):
manifold_pipes = []
# Check if pipes is a function or a list
if callable(function_module.pipes):
manifold_pipes = function_module.pipes()
else:
manifold_pipes = function_module.pipes
# Check if pipes is a function or a list
if callable(function_module.pipes):
manifold_pipes = function_module.pipes()
else:
manifold_pipes = function_module.pipes
for p in manifold_pipes:
manifold_pipe_id = f'{pipe.id}.{p["id"]}'
manifold_pipe_name = p["name"]
for p in manifold_pipes:
manifold_pipe_id = f'{pipe.id}.{p["id"]}'
manifold_pipe_name = p["name"]
if hasattr(function_module, "name"):
manifold_pipe_name = (
f"{function_module.name}{manifold_pipe_name}"
)
if hasattr(function_module, "name"):
manifold_pipe_name = f"{function_module.name}{manifold_pipe_name}"
pipe_flag = {"type": pipe.type}
if hasattr(function_module, "ChatValves"):
pipe_flag["valves_spec"] = function_module.ChatValves.schema()
pipe_flag = {"type": pipe.type}
if hasattr(function_module, "ChatValves"):
pipe_flag["valves_spec"] = function_module.ChatValves.schema()
pipe_models.append(
{
"id": manifold_pipe_id,
"name": manifold_pipe_name,
"object": "model",
"created": pipe.created_at,
"owned_by": "openai",
"pipe": pipe_flag,
}
)
pipe_models.append(
{
"id": manifold_pipe_id,
"name": manifold_pipe_name,
"object": "model",
"created": pipe.created_at,
"owned_by": "openai",
"pipe": pipe_flag,
}
)
else:
pipe_flag = {"type": "pipe"}
if hasattr(function_module, "ChatValves"):
@ -198,262 +196,211 @@ async def get_pipe_models():
return pipe_models
async def execute_pipe(pipe, params):
if inspect.iscoroutinefunction(pipe):
return await pipe(**params)
else:
return pipe(**params)
async def get_message_content(res: str | Generator | AsyncGenerator) -> str:
if isinstance(res, str):
return res
if isinstance(res, Generator):
return "".join(map(str, res))
if isinstance(res, AsyncGenerator):
return "".join([str(stream) async for stream in res])
def process_line(form_data: dict, line):
if isinstance(line, BaseModel):
line = line.model_dump_json()
line = f"data: {line}"
if isinstance(line, dict):
line = f"data: {json.dumps(line)}"
try:
line = line.decode("utf-8")
except Exception:
pass
if line.startswith("data:"):
return f"{line}\n\n"
else:
line = openai_chat_chunk_message_template(form_data["model"], line)
return f"data: {json.dumps(line)}\n\n"
def get_pipe_id(form_data: dict) -> str:
pipe_id = form_data["model"]
if "." in pipe_id:
pipe_id, _ = pipe_id.split(".", 1)
print(pipe_id)
return pipe_id
def get_function_params(function_module, form_data, user, extra_params={}):
pipe_id = get_pipe_id(form_data)
# Get the signature of the function
sig = inspect.signature(function_module.pipe)
params = {"body": form_data}
for key, value in extra_params.items():
if key in sig.parameters:
params[key] = value
if "__user__" in sig.parameters:
__user__ = {
"id": user.id,
"email": user.email,
"name": user.name,
"role": user.role,
}
try:
if hasattr(function_module, "UserValves"):
__user__["valves"] = function_module.UserValves(
**Functions.get_user_valves_by_id_and_user_id(pipe_id, user.id)
)
except Exception as e:
print(e)
params["__user__"] = __user__
return params
# inplace function: form_data is modified
def apply_model_params_to_body(params: dict, form_data: dict) -> dict:
if not params:
return form_data
mappings = {
"temperature": float,
"top_p": int,
"max_tokens": int,
"frequency_penalty": int,
"seed": lambda x: x,
"stop": lambda x: [bytes(s, "utf-8").decode("unicode_escape") for s in x],
}
for key, cast_func in mappings.items():
if (value := params.get(key)) is not None:
form_data[key] = cast_func(value)
return form_data
# inplace function: form_data is modified
def apply_model_system_prompt_to_body(params: dict, form_data: dict, user) -> dict:
system = params.get("system", None)
if not system:
return form_data
if user:
template_params = {
"user_name": user.name,
"user_location": user.info.get("location") if user.info else None,
}
else:
template_params = {}
system = prompt_template(system, **template_params)
form_data["messages"] = add_or_update_system_message(
system, form_data.get("messages", [])
)
return form_data
async def generate_function_chat_completion(form_data, user):
model_id = form_data.get("model")
model_info = Models.get_model_by_id(model_id)
metadata = None
if "metadata" in form_data:
metadata = form_data["metadata"]
del form_data["metadata"]
metadata = form_data.pop("metadata", None)
__event_emitter__ = None
__event_call__ = None
__task__ = None
if metadata:
if (
metadata.get("session_id")
and metadata.get("chat_id")
and metadata.get("message_id")
):
__event_emitter__ = await get_event_emitter(metadata)
__event_call__ = await get_event_call(metadata)
if metadata.get("task"):
__task__ = metadata.get("task")
if all(k in metadata for k in ("session_id", "chat_id", "message_id")):
__event_emitter__ = get_event_emitter(metadata)
__event_call__ = get_event_call(metadata)
__task__ = metadata.get("task", None)
if model_info:
if model_info.base_model_id:
form_data["model"] = model_info.base_model_id
model_info.params = model_info.params.model_dump()
params = model_info.params.model_dump()
form_data = apply_model_params_to_body(params, form_data)
form_data = apply_model_system_prompt_to_body(params, form_data, user)
if model_info.params:
if model_info.params.get("temperature", None) is not None:
form_data["temperature"] = float(model_info.params.get("temperature"))
pipe_id = get_pipe_id(form_data)
function_module = get_function_module(pipe_id)
if model_info.params.get("top_p", None):
form_data["top_p"] = int(model_info.params.get("top_p", None))
pipe = function_module.pipe
params = get_function_params(
function_module,
form_data,
user,
{
"__event_emitter__": __event_emitter__,
"__event_call__": __event_call__,
"__task__": __task__,
},
)
if model_info.params.get("max_tokens", None):
form_data["max_tokens"] = int(model_info.params.get("max_tokens", None))
if model_info.params.get("frequency_penalty", None):
form_data["frequency_penalty"] = int(
model_info.params.get("frequency_penalty", None)
)
if model_info.params.get("seed", None):
form_data["seed"] = model_info.params.get("seed", None)
if model_info.params.get("stop", None):
form_data["stop"] = (
[
bytes(stop, "utf-8").decode("unicode_escape")
for stop in model_info.params["stop"]
]
if model_info.params.get("stop", None)
else None
)
system = model_info.params.get("system", None)
if system:
system = prompt_template(
system,
**(
{
"user_name": user.name,
"user_location": (
user.info.get("location") if user.info else None
),
}
if user
else {}
),
)
# Check if the payload already has a system message
# If not, add a system message to the payload
if form_data.get("messages"):
for message in form_data["messages"]:
if message.get("role") == "system":
message["content"] = system + message["content"]
break
else:
form_data["messages"].insert(
0,
{
"role": "system",
"content": system,
},
)
else:
pass
async def job():
pipe_id = form_data["model"]
if "." in pipe_id:
pipe_id, sub_pipe_id = pipe_id.split(".", 1)
print(pipe_id)
# Check if function is already loaded
if pipe_id not in app.state.FUNCTIONS:
function_module, function_type, frontmatter = load_function_module_by_id(
pipe_id
)
app.state.FUNCTIONS[pipe_id] = function_module
else:
function_module = app.state.FUNCTIONS[pipe_id]
if hasattr(function_module, "valves") and hasattr(function_module, "Valves"):
valves = Functions.get_function_valves_by_id(pipe_id)
function_module.valves = function_module.Valves(
**(valves if valves else {})
)
pipe = function_module.pipe
# Get the signature of the function
sig = inspect.signature(pipe)
params = {"body": form_data}
if "__user__" in sig.parameters:
__user__ = {
"id": user.id,
"email": user.email,
"name": user.name,
"role": user.role,
}
if form_data["stream"]:
async def stream_content():
try:
if hasattr(function_module, "UserValves"):
__user__["valves"] = function_module.UserValves(
**Functions.get_user_valves_by_id_and_user_id(pipe_id, user.id)
)
except Exception as e:
print(e)
res = await execute_pipe(pipe, params)
params = {**params, "__user__": __user__}
if "__event_emitter__" in sig.parameters:
params = {**params, "__event_emitter__": __event_emitter__}
if "__event_call__" in sig.parameters:
params = {**params, "__event_call__": __event_call__}
if "__task__" in sig.parameters:
params = {**params, "__task__": __task__}
if form_data["stream"]:
async def stream_content():
try:
if inspect.iscoroutinefunction(pipe):
res = await pipe(**params)
else:
res = pipe(**params)
# Directly return if the response is a StreamingResponse
if isinstance(res, StreamingResponse):
async for data in res.body_iterator:
yield data
return
if isinstance(res, dict):
yield f"data: {json.dumps(res)}\n\n"
return
except Exception as e:
print(f"Error: {e}")
yield f"data: {json.dumps({'error': {'detail':str(e)}})}\n\n"
# Directly return if the response is a StreamingResponse
if isinstance(res, StreamingResponse):
async for data in res.body_iterator:
yield data
return
if isinstance(res, dict):
yield f"data: {json.dumps(res)}\n\n"
return
if isinstance(res, str):
message = stream_message_template(form_data["model"], res)
yield f"data: {json.dumps(message)}\n\n"
if isinstance(res, Iterator):
for line in res:
if isinstance(line, BaseModel):
line = line.model_dump_json()
line = f"data: {line}"
if isinstance(line, dict):
line = f"data: {json.dumps(line)}"
try:
line = line.decode("utf-8")
except:
pass
if line.startswith("data:"):
yield f"{line}\n\n"
else:
line = stream_message_template(form_data["model"], line)
yield f"data: {json.dumps(line)}\n\n"
if isinstance(res, str) or isinstance(res, Generator):
finish_message = {
"id": f"{form_data['model']}-{str(uuid.uuid4())}",
"object": "chat.completion.chunk",
"created": int(time.time()),
"model": form_data["model"],
"choices": [
{
"index": 0,
"delta": {},
"logprobs": None,
"finish_reason": "stop",
}
],
}
yield f"data: {json.dumps(finish_message)}\n\n"
yield f"data: [DONE]"
return StreamingResponse(stream_content(), media_type="text/event-stream")
else:
try:
if inspect.iscoroutinefunction(pipe):
res = await pipe(**params)
else:
res = pipe(**params)
if isinstance(res, StreamingResponse):
return res
except Exception as e:
print(f"Error: {e}")
return {"error": {"detail": str(e)}}
yield f"data: {json.dumps({'error': {'detail':str(e)}})}\n\n"
return
if isinstance(res, dict):
return res
elif isinstance(res, BaseModel):
return res.model_dump()
else:
message = ""
if isinstance(res, str):
message = res
if isinstance(res, Generator):
for stream in res:
message = f"{message}{stream}"
if isinstance(res, str):
message = openai_chat_chunk_message_template(form_data["model"], res)
yield f"data: {json.dumps(message)}\n\n"
return {
"id": f"{form_data['model']}-{str(uuid.uuid4())}",
"object": "chat.completion",
"created": int(time.time()),
"model": form_data["model"],
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": message,
},
"logprobs": None,
"finish_reason": "stop",
}
],
}
if isinstance(res, Iterator):
for line in res:
yield process_line(form_data, line)
return await job()
if isinstance(res, AsyncGenerator):
async for line in res:
yield process_line(form_data, line)
if isinstance(res, str) or isinstance(res, Generator):
finish_message = openai_chat_chunk_message_template(
form_data["model"], ""
)
finish_message["choices"][0]["finish_reason"] = "stop"
yield f"data: {json.dumps(finish_message)}\n\n"
yield "data: [DONE]"
return StreamingResponse(stream_content(), media_type="text/event-stream")
else:
try:
res = await execute_pipe(pipe, params)
except Exception as e:
print(f"Error: {e}")
return {"error": {"detail": str(e)}}
if isinstance(res, StreamingResponse) or isinstance(res, dict):
return res
if isinstance(res, BaseModel):
return res.model_dump()
message = await get_message_content(res)
return openai_chat_completion_message_template(form_data["model"], message)

View File

@ -245,6 +245,38 @@ class ChatTable:
)
return [ChatModel.model_validate(chat) for chat in all_chats]
def get_chat_title_id_list_by_user_id(
self,
user_id: str,
include_archived: bool = False,
skip: int = 0,
limit: int = 50,
) -> List[ChatTitleIdResponse]:
with get_db() as db:
query = db.query(Chat).filter_by(user_id=user_id)
if not include_archived:
query = query.filter_by(archived=False)
all_chats = (
query.order_by(Chat.updated_at.desc())
# limit cols
.with_entities(
Chat.id, Chat.title, Chat.updated_at, Chat.created_at
).all()
)
# result has to be destrctured from sqlalchemy `row` and mapped to a dict since the `ChatModel`is not the returned dataclass.
return [
ChatTitleIdResponse.model_validate(
{
"id": chat[0],
"title": chat[1],
"updated_at": chat[2],
"created_at": chat[3],
}
)
for chat in all_chats
]
def get_chat_list_by_chat_ids(
self, chat_ids: List[str], skip: int = 0, limit: int = 50
) -> List[ChatModel]:

View File

@ -1,13 +1,11 @@
import json
import logging
from typing import Optional
from typing import Optional, List
from pydantic import BaseModel, ConfigDict
from sqlalchemy import String, Column, BigInteger, Text
from sqlalchemy import Column, BigInteger, Text
from apps.webui.internal.db import Base, JSONField, get_db
from typing import List, Union, Optional
from config import SRC_LOG_LEVELS
import time
@ -113,7 +111,6 @@ class ModelForm(BaseModel):
class ModelsTable:
def insert_new_model(
self, form_data: ModelForm, user_id: str
) -> Optional[ModelModel]:
@ -126,9 +123,7 @@ class ModelsTable:
}
)
try:
with get_db() as db:
result = Model(**model.model_dump())
db.add(result)
db.commit()
@ -144,13 +139,11 @@ class ModelsTable:
def get_all_models(self) -> List[ModelModel]:
with get_db() as db:
return [ModelModel.model_validate(model) for model in db.query(Model).all()]
def get_model_by_id(self, id: str) -> Optional[ModelModel]:
try:
with get_db() as db:
model = db.get(Model, id)
return ModelModel.model_validate(model)
except:
@ -178,7 +171,6 @@ class ModelsTable:
def delete_model_by_id(self, id: str) -> bool:
try:
with get_db() as db:
db.query(Model).filter_by(id=id).delete()
db.commit()

View File

@ -45,7 +45,7 @@ router = APIRouter()
async def get_session_user_chat_list(
user=Depends(get_verified_user), skip: int = 0, limit: int = 50
):
return Chats.get_chat_list_by_user_id(user.id, skip, limit)
return Chats.get_chat_title_id_list_by_user_id(user.id, skip=skip, limit=limit)
############################

View File

@ -1,3 +1,6 @@
from pathlib import Path
import site
from fastapi import APIRouter, UploadFile, File, Response
from fastapi import Depends, HTTPException, status
from starlette.responses import StreamingResponse, FileResponse
@ -64,8 +67,18 @@ async def download_chat_as_pdf(
pdf = FPDF()
pdf.add_page()
STATIC_DIR = "./static"
FONTS_DIR = f"{STATIC_DIR}/fonts"
# When running in docker, workdir is /app/backend, so fonts is in /app/backend/static/fonts
FONTS_DIR = Path("./static/fonts")
# Non Docker Installation
# When running using `pip install` the static directory is in the site packages.
if not FONTS_DIR.exists():
FONTS_DIR = Path(site.getsitepackages()[0]) / "static/fonts"
# When running using `pip install -e .` the static directory is in the site packages.
# This path only works if `open-webui serve` is run from the root of this project.
if not FONTS_DIR.exists():
FONTS_DIR = Path("./backend/static/fonts")
pdf.add_font("NotoSans", "", f"{FONTS_DIR}/NotoSans-Regular.ttf")
pdf.add_font("NotoSans", "b", f"{FONTS_DIR}/NotoSans-Bold.ttf")

View File

@ -77,6 +77,16 @@ for source in log_sources:
log.setLevel(SRC_LOG_LEVELS["CONFIG"])
class EndpointFilter(logging.Filter):
def filter(self, record: logging.LogRecord) -> bool:
return record.getMessage().find("/health") == -1
# Filter out /endpoint
logging.getLogger("uvicorn.access").addFilter(EndpointFilter())
WEBUI_NAME = os.environ.get("WEBUI_NAME", "Open WebUI")
if WEBUI_NAME != "Open WebUI":
WEBUI_NAME += " (Open WebUI)"
@ -339,6 +349,12 @@ GOOGLE_OAUTH_SCOPE = PersistentConfig(
os.environ.get("GOOGLE_OAUTH_SCOPE", "openid email profile"),
)
GOOGLE_REDIRECT_URI = PersistentConfig(
"GOOGLE_REDIRECT_URI",
"oauth.google.redirect_uri",
os.environ.get("GOOGLE_REDIRECT_URI", ""),
)
MICROSOFT_CLIENT_ID = PersistentConfig(
"MICROSOFT_CLIENT_ID",
"oauth.microsoft.client_id",
@ -363,6 +379,12 @@ MICROSOFT_OAUTH_SCOPE = PersistentConfig(
os.environ.get("MICROSOFT_OAUTH_SCOPE", "openid email profile"),
)
MICROSOFT_REDIRECT_URI = PersistentConfig(
"MICROSOFT_REDIRECT_URI",
"oauth.microsoft.redirect_uri",
os.environ.get("MICROSOFT_REDIRECT_URI", ""),
)
OAUTH_CLIENT_ID = PersistentConfig(
"OAUTH_CLIENT_ID",
"oauth.oidc.client_id",
@ -381,6 +403,12 @@ OPENID_PROVIDER_URL = PersistentConfig(
os.environ.get("OPENID_PROVIDER_URL", ""),
)
OPENID_REDIRECT_URI = PersistentConfig(
"OPENID_REDIRECT_URI",
"oauth.oidc.redirect_uri",
os.environ.get("OPENID_REDIRECT_URI", ""),
)
OAUTH_SCOPES = PersistentConfig(
"OAUTH_SCOPES",
"oauth.oidc.scopes",
@ -414,6 +442,7 @@ def load_oauth_providers():
"client_secret": GOOGLE_CLIENT_SECRET.value,
"server_metadata_url": "https://accounts.google.com/.well-known/openid-configuration",
"scope": GOOGLE_OAUTH_SCOPE.value,
"redirect_uri": GOOGLE_REDIRECT_URI.value,
}
if (
@ -426,6 +455,7 @@ def load_oauth_providers():
"client_secret": MICROSOFT_CLIENT_SECRET.value,
"server_metadata_url": f"https://login.microsoftonline.com/{MICROSOFT_CLIENT_TENANT_ID.value}/v2.0/.well-known/openid-configuration",
"scope": MICROSOFT_OAUTH_SCOPE.value,
"redirect_uri": MICROSOFT_REDIRECT_URI.value,
}
if (
@ -439,6 +469,7 @@ def load_oauth_providers():
"server_metadata_url": OPENID_PROVIDER_URL.value,
"scope": OAUTH_SCOPES.value,
"name": OAUTH_PROVIDER_NAME.value,
"redirect_uri": OPENID_REDIRECT_URI.value,
}
@ -709,6 +740,12 @@ ENABLE_SIGNUP = PersistentConfig(
),
)
ENABLE_LOGIN_FORM = PersistentConfig(
"ENABLE_LOGIN_FORM",
"ui.ENABLE_LOGIN_FORM",
os.environ.get("ENABLE_LOGIN_FORM", "True").lower() == "true",
)
DEFAULT_LOCALE = PersistentConfig(
"DEFAULT_LOCALE",
"ui.default_locale",
@ -1265,6 +1302,24 @@ COMFYUI_SD3 = PersistentConfig(
os.environ.get("COMFYUI_SD3", "").lower() == "true",
)
COMFYUI_FLUX = PersistentConfig(
"COMFYUI_FLUX",
"image_generation.comfyui.flux",
os.environ.get("COMFYUI_FLUX", "").lower() == "true",
)
COMFYUI_FLUX_WEIGHT_DTYPE = PersistentConfig(
"COMFYUI_FLUX_WEIGHT_DTYPE",
"image_generation.comfyui.flux_weight_dtype",
os.getenv("COMFYUI_FLUX_WEIGHT_DTYPE", ""),
)
COMFYUI_FLUX_FP8_CLIP = PersistentConfig(
"COMFYUI_FLUX_FP8_CLIP",
"image_generation.comfyui.flux_fp8_clip",
os.getenv("COMFYUI_FLUX_FP8_CLIP", ""),
)
IMAGES_OPENAI_API_BASE_URL = PersistentConfig(
"IMAGES_OPENAI_API_BASE_URL",
"image_generation.openai.api_base_url",
@ -1329,6 +1384,11 @@ AUDIO_TTS_OPENAI_API_KEY = PersistentConfig(
os.getenv("AUDIO_TTS_OPENAI_API_KEY", OPENAI_API_KEY),
)
AUDIO_TTS_API_KEY = PersistentConfig(
"AUDIO_TTS_API_KEY",
"audio.tts.api_key",
os.getenv("AUDIO_TTS_API_KEY", ""),
)
AUDIO_TTS_ENGINE = PersistentConfig(
"AUDIO_TTS_ENGINE",

View File

@ -13,8 +13,6 @@ import aiohttp
import requests
import mimetypes
import shutil
import os
import uuid
import inspect
from fastapi import FastAPI, Request, Depends, status, UploadFile, File, Form
@ -29,7 +27,7 @@ from starlette.middleware.sessions import SessionMiddleware
from starlette.responses import StreamingResponse, Response, RedirectResponse
from apps.socket.main import sio, app as socket_app, get_event_emitter, get_event_call
from apps.socket.main import app as socket_app, get_event_emitter, get_event_call
from apps.ollama.main import (
app as ollama_app,
get_all_models as get_ollama_models,
@ -79,6 +77,7 @@ from utils.task import (
from utils.misc import (
get_last_user_message,
add_or_update_system_message,
prepend_to_first_user_message_content,
parse_duration,
)
@ -618,32 +617,15 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware):
content={"detail": str(e)},
)
# Extract valves from the request body
valves = None
if "valves" in body:
valves = body["valves"]
del body["valves"]
metadata = {
"chat_id": body.pop("chat_id", None),
"message_id": body.pop("id", None),
"session_id": body.pop("session_id", None),
"valves": body.pop("valves", None),
}
# Extract session_id, chat_id and message_id from the request body
session_id = None
if "session_id" in body:
session_id = body["session_id"]
del body["session_id"]
chat_id = None
if "chat_id" in body:
chat_id = body["chat_id"]
del body["chat_id"]
message_id = None
if "id" in body:
message_id = body["id"]
del body["id"]
__event_emitter__ = await get_event_emitter(
{"chat_id": chat_id, "message_id": message_id, "session_id": session_id}
)
__event_call__ = await get_event_call(
{"chat_id": chat_id, "message_id": message_id, "session_id": session_id}
)
__event_emitter__ = get_event_emitter(metadata)
__event_call__ = get_event_call(metadata)
# Initialize data_items to store additional data to be sent to the client
data_items = []
@ -686,24 +668,29 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware):
if len(contexts) > 0:
context_string = "/n".join(contexts).strip()
prompt = get_last_user_message(body["messages"])
body["messages"] = add_or_update_system_message(
rag_template(
rag_app.state.config.RAG_TEMPLATE, context_string, prompt
),
body["messages"],
)
# Workaround for Ollama 2.0+ system prompt issue
# TODO: replace with add_or_update_system_message
if model["owned_by"] == "ollama":
body["messages"] = prepend_to_first_user_message_content(
rag_template(
rag_app.state.config.RAG_TEMPLATE, context_string, prompt
),
body["messages"],
)
else:
body["messages"] = add_or_update_system_message(
rag_template(
rag_app.state.config.RAG_TEMPLATE, context_string, prompt
),
body["messages"],
)
# If there are citations, add them to the data_items
if len(citations) > 0:
data_items.append({"citations": citations})
body["metadata"] = {
"session_id": session_id,
"chat_id": chat_id,
"message_id": message_id,
"valves": valves,
}
body["metadata"] = metadata
modified_body_bytes = json.dumps(body).encode("utf-8")
# Replace the request body with the modified one
request._body = modified_body_bytes
@ -979,32 +966,15 @@ async def get_all_models():
model["name"] = custom_model.name
model["info"] = custom_model.model_dump()
action_ids = [] + global_action_ids
action_ids = []
if "info" in model and "meta" in model["info"]:
action_ids.extend(model["info"]["meta"].get("actionIds", []))
action_ids = list(set(action_ids))
action_ids = [
action_id
for action_id in action_ids
if action_id in enabled_action_ids
]
model["actions"] = []
for action_id in action_ids:
action = Functions.get_function_by_id(action_id)
model["actions"].append(
{
"id": action_id,
"name": action.name,
"description": action.meta.description,
"icon_url": action.meta.manifest.get("icon_url", None),
}
)
model["action_ids"] = action_ids
else:
owned_by = "openai"
pipe = None
actions = []
action_ids = []
for model in models:
if (
@ -1015,26 +985,8 @@ async def get_all_models():
if "pipe" in model:
pipe = model["pipe"]
action_ids = [] + global_action_ids
if "info" in model and "meta" in model["info"]:
action_ids.extend(model["info"]["meta"].get("actionIds", []))
action_ids = list(set(action_ids))
action_ids = [
action_id
for action_id in action_ids
if action_id in enabled_action_ids
]
actions = [
{
"id": action_id,
"name": Functions.get_function_by_id(action_id).name,
"description": Functions.get_function_by_id(
action_id
).meta.description,
}
for action_id in action_ids
]
break
models.append(
@ -1047,10 +999,59 @@ async def get_all_models():
"info": custom_model.model_dump(),
"preset": True,
**({"pipe": pipe} if pipe is not None else {}),
"actions": actions,
"action_ids": action_ids,
}
)
for model in models:
action_ids = []
if "action_ids" in model:
action_ids = model["action_ids"]
del model["action_ids"]
action_ids = action_ids + global_action_ids
action_ids = list(set(action_ids))
action_ids = [
action_id for action_id in action_ids if action_id in enabled_action_ids
]
model["actions"] = []
for action_id in action_ids:
action = Functions.get_function_by_id(action_id)
if action_id in webui_app.state.FUNCTIONS:
function_module = webui_app.state.FUNCTIONS[action_id]
else:
function_module, _, _ = load_function_module_by_id(action_id)
webui_app.state.FUNCTIONS[action_id] = function_module
if hasattr(function_module, "actions"):
actions = function_module.actions
model["actions"].extend(
[
{
"id": f"{action_id}.{_action['id']}",
"name": _action.get(
"name", f"{action.name} ({_action['id']})"
),
"description": action.meta.description,
"icon_url": _action.get(
"icon_url", action.meta.manifest.get("icon_url", None)
),
}
for _action in actions
]
)
else:
model["actions"].append(
{
"id": action_id,
"name": action.name,
"description": action.meta.description,
"icon_url": action.meta.manifest.get("icon_url", None),
}
)
app.state.MODELS = {model["id"]: model for model in models}
webui_app.state.MODELS = app.state.MODELS
@ -1165,13 +1166,13 @@ async def chat_completed(form_data: dict, user=Depends(get_verified_user)):
status_code=r.status_code,
content=res,
)
except:
except Exception:
pass
else:
pass
__event_emitter__ = await get_event_emitter(
__event_emitter__ = get_event_emitter(
{
"chat_id": data["chat_id"],
"message_id": data["id"],
@ -1179,7 +1180,7 @@ async def chat_completed(form_data: dict, user=Depends(get_verified_user)):
}
)
__event_call__ = await get_event_call(
__event_call__ = get_event_call(
{
"chat_id": data["chat_id"],
"message_id": data["id"],
@ -1284,9 +1285,12 @@ async def chat_completed(form_data: dict, user=Depends(get_verified_user)):
@app.post("/api/chat/actions/{action_id}")
async def chat_completed(
action_id: str, form_data: dict, user=Depends(get_verified_user)
):
async def chat_action(action_id: str, form_data: dict, user=Depends(get_verified_user)):
if "." in action_id:
action_id, sub_action_id = action_id.split(".")
else:
sub_action_id = None
action = Functions.get_function_by_id(action_id)
if not action:
raise HTTPException(
@ -1303,14 +1307,14 @@ async def chat_completed(
)
model = app.state.MODELS[model_id]
__event_emitter__ = await get_event_emitter(
__event_emitter__ = get_event_emitter(
{
"chat_id": data["chat_id"],
"message_id": data["id"],
"session_id": data["session_id"],
}
)
__event_call__ = await get_event_call(
__event_call__ = get_event_call(
{
"chat_id": data["chat_id"],
"message_id": data["id"],
@ -1339,7 +1343,7 @@ async def chat_completed(
# Extra parameters to be passed to the function
extra_params = {
"__model__": model,
"__id__": action_id,
"__id__": sub_action_id if sub_action_id is not None else action_id,
"__event_emitter__": __event_emitter__,
"__event_call__": __event_call__,
}
@ -1739,7 +1743,6 @@ class AddPipelineForm(BaseModel):
@app.post("/api/pipelines/add")
async def add_pipeline(form_data: AddPipelineForm, user=Depends(get_admin_user)):
r = None
try:
urlIdx = form_data.urlIdx
@ -1782,7 +1785,6 @@ class DeletePipelineForm(BaseModel):
@app.delete("/api/pipelines/delete")
async def delete_pipeline(form_data: DeletePipelineForm, user=Depends(get_admin_user)):
r = None
try:
urlIdx = form_data.urlIdx
@ -1860,7 +1862,6 @@ async def get_pipeline_valves(
models = await get_all_models()
r = None
try:
url = openai_app.state.config.OPENAI_API_BASE_URLS[urlIdx]
key = openai_app.state.config.OPENAI_API_KEYS[urlIdx]
@ -1995,6 +1996,7 @@ async def get_app_config():
"auth": WEBUI_AUTH,
"auth_trusted_header": bool(webui_app.state.AUTH_TRUSTED_EMAIL_HEADER),
"enable_signup": webui_app.state.config.ENABLE_SIGNUP,
"enable_login_form": webui_app.state.config.ENABLE_LOGIN_FORM,
"enable_web_search": rag_app.state.config.ENABLE_RAG_WEB_SEARCH,
"enable_image_generation": images_app.state.config.ENABLED,
"enable_community_sharing": webui_app.state.config.ENABLE_COMMUNITY_SHARING,
@ -2111,6 +2113,7 @@ for provider_name, provider_config in OAUTH_PROVIDERS.items():
client_kwargs={
"scope": provider_config["scope"],
},
redirect_uri=provider_config["redirect_uri"],
)
# SessionMiddleware is used by authlib for oauth
@ -2128,7 +2131,10 @@ if len(OAUTH_PROVIDERS) > 0:
async def oauth_login(provider: str, request: Request):
if provider not in OAUTH_PROVIDERS:
raise HTTPException(404)
redirect_uri = request.url_for("oauth_callback", provider=provider)
# If the provider has a custom redirect URL, use that, otherwise automatically generate one
redirect_uri = OAUTH_PROVIDERS[provider].get("redirect_uri") or request.url_for(
"oauth_callback", provider=provider
)
return await oauth.create_client(provider).authorize_redirect(request, redirect_uri)

View File

@ -30,11 +30,11 @@ APScheduler==3.10.4
# AI libraries
openai
anthropic
google-generativeai==0.5.4
google-generativeai==0.7.2
tiktoken
langchain==0.2.6
langchain-community==0.2.6
langchain==0.2.11
langchain-community==0.2.10
langchain-chroma==0.1.2
fake-useragent==1.5.1
@ -43,7 +43,7 @@ sentence-transformers==3.0.1
pypdf==4.2.0
docx2txt==0.8
python-pptx==0.6.23
unstructured==0.14.10
unstructured==0.15.0
Markdown==3.6
pypandoc==1.13
pandas==2.2.2
@ -54,7 +54,7 @@ validators==0.28.1
psutil
opencv-python-headless==4.10.0.84
rapidocr-onnxruntime==1.3.22
rapidocr-onnxruntime==1.3.24
fpdf2==2.7.9
rank-bm25==0.2.2
@ -65,13 +65,13 @@ PyJWT[crypto]==2.8.0
authlib==1.3.1
black==24.4.2
langfuse==2.38.0
langfuse==2.39.2
youtube-transcript-api==0.6.2
pytube==15.0.0
extract_msg
pydub
duckduckgo-search~=6.1.12
duckduckgo-search~=6.2.1
## Tests
docker~=7.1.0

View File

@ -1,6 +1,5 @@
from pathlib import Path
import hashlib
import json
import re
from datetime import timedelta
from typing import Optional, List, Tuple
@ -8,37 +7,39 @@ import uuid
import time
def get_last_user_message_item(messages: List[dict]) -> str:
def get_last_user_message_item(messages: List[dict]) -> Optional[dict]:
for message in reversed(messages):
if message["role"] == "user":
return message
return None
def get_last_user_message(messages: List[dict]) -> str:
message = get_last_user_message_item(messages)
if message is not None:
if isinstance(message["content"], list):
for item in message["content"]:
if item["type"] == "text":
return item["text"]
def get_content_from_message(message: dict) -> Optional[str]:
if isinstance(message["content"], list):
for item in message["content"]:
if item["type"] == "text":
return item["text"]
else:
return message["content"]
return None
def get_last_assistant_message(messages: List[dict]) -> str:
def get_last_user_message(messages: List[dict]) -> Optional[str]:
message = get_last_user_message_item(messages)
if message is None:
return None
return get_content_from_message(message)
def get_last_assistant_message(messages: List[dict]) -> Optional[str]:
for message in reversed(messages):
if message["role"] == "assistant":
if isinstance(message["content"], list):
for item in message["content"]:
if item["type"] == "text":
return item["text"]
return message["content"]
return get_content_from_message(message)
return None
def get_system_message(messages: List[dict]) -> dict:
def get_system_message(messages: List[dict]) -> Optional[dict]:
for message in messages:
if message["role"] == "system":
return message
@ -49,10 +50,25 @@ def remove_system_message(messages: List[dict]) -> List[dict]:
return [message for message in messages if message["role"] != "system"]
def pop_system_message(messages: List[dict]) -> Tuple[dict, List[dict]]:
def pop_system_message(messages: List[dict]) -> Tuple[Optional[dict], List[dict]]:
return get_system_message(messages), remove_system_message(messages)
def prepend_to_first_user_message_content(
content: str, messages: List[dict]
) -> List[dict]:
for message in messages:
if message["role"] == "user":
if isinstance(message["content"], list):
for item in message["content"]:
if item["type"] == "text":
item["text"] = f"{content}\n{item['text']}"
else:
message["content"] = f"{content}\n{message['content']}"
break
return messages
def add_or_update_system_message(content: str, messages: List[dict]):
"""
Adds a new system message at the beginning of the messages list
@ -72,23 +88,29 @@ def add_or_update_system_message(content: str, messages: List[dict]):
return messages
def stream_message_template(model: str, message: str):
def openai_chat_message_template(model: str):
return {
"id": f"{model}-{str(uuid.uuid4())}",
"object": "chat.completion.chunk",
"created": int(time.time()),
"model": model,
"choices": [
{
"index": 0,
"delta": {"content": message},
"logprobs": None,
"finish_reason": None,
}
],
"choices": [{"index": 0, "logprobs": None, "finish_reason": None}],
}
def openai_chat_chunk_message_template(model: str, message: str):
template = openai_chat_message_template(model)
template["object"] = "chat.completion.chunk"
template["choices"][0]["delta"] = {"content": message}
return template
def openai_chat_completion_message_template(model: str, message: str):
template = openai_chat_message_template(model)
template["object"] = "chat.completion"
template["choices"][0]["message"] = {"content": message, "role": "assistant"}
template["choices"][0]["finish_reason"] = "stop"
def get_gravatar_url(email):
# Trim leading and trailing whitespace from
# an email address and force all characters
@ -159,7 +181,7 @@ def extract_folders_after_data_docs(path):
tags = []
folders = parts[index_docs:-1]
for idx, part in enumerate(folders):
for idx, _ in enumerate(folders):
tags.append("/".join(folders[: idx + 1]))
return tags
@ -255,11 +277,11 @@ def parse_ollama_modelfile(model_text):
value = param_match.group(1)
try:
if param_type == int:
if param_type is int:
value = int(value)
elif param_type == float:
elif param_type is float:
value = float(value)
elif param_type == bool:
elif param_type is bool:
value = value.lower() == "true"
except Exception as e:
print(e)

View File

@ -0,0 +1,9 @@
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Pellentesque elit eget gravida cum sociis natoque. Morbi tristique senectus et netus et malesuada. Sapien nec sagittis aliquam malesuada bibendum. Amet consectetur adipiscing elit duis tristique sollicitudin. Non pulvinar neque laoreet suspendisse interdum consectetur libero. Arcu cursus vitae congue mauris rhoncus aenean vel elit scelerisque. Nec feugiat nisl pretium fusce id velit. Imperdiet proin fermentum leo vel. Arcu dui vivamus arcu felis bibendum ut tristique et egestas. Pellentesque sit amet porttitor eget dolor morbi non arcu risus. Egestas tellus rutrum tellus pellentesque eu tincidunt tortor aliquam. Et ultrices neque ornare aenean euismod.
Enim nulla aliquet porttitor lacus luctus accumsan tortor posuere ac. Viverra nibh cras pulvinar mattis nunc. Lacinia at quis risus sed vulputate. Ac tortor vitae purus faucibus ornare suspendisse sed nisi lacus. Bibendum arcu vitae elementum curabitur vitae nunc. Consectetur adipiscing elit duis tristique sollicitudin nibh sit amet commodo. Velit egestas dui id ornare arcu odio ut. Et malesuada fames ac turpis egestas integer eget aliquet. Lacus suspendisse faucibus interdum posuere lorem ipsum dolor sit. Morbi tristique senectus et netus. Pretium viverra suspendisse potenti nullam ac tortor vitae. Parturient montes nascetur ridiculus mus mauris vitae. Quis viverra nibh cras pulvinar mattis nunc sed blandit libero. Euismod nisi porta lorem mollis aliquam ut porttitor leo. Mauris in aliquam sem fringilla ut morbi. Faucibus pulvinar elementum integer enim neque. Neque sodales ut etiam sit. Consectetur a erat nam at.
Sed nisi lacus sed viverra tellus in hac habitasse. Proin sagittis nisl rhoncus mattis rhoncus. Risus commodo viverra maecenas accumsan lacus. Morbi quis commodo odio aenean sed adipiscing. Mollis nunc sed id semper risus in. Ultricies mi eget mauris pharetra et ultrices neque. Amet luctus venenatis lectus magna fringilla urna porttitor rhoncus. Eget magna fermentum iaculis eu non diam phasellus. Id diam maecenas ultricies mi eget mauris pharetra et ultrices. Id donec ultrices tincidunt arcu non sodales. Sed cras ornare arcu dui vivamus arcu felis bibendum ut. Urna duis convallis convallis tellus id interdum velit. Rhoncus mattis rhoncus urna neque viverra justo nec. Purus semper eget duis at tellus at urna condimentum. Et odio pellentesque diam volutpat commodo sed egestas. Blandit volutpat maecenas volutpat blandit. In egestas erat imperdiet sed euismod nisi porta lorem mollis. Est ullamcorper eget nulla facilisi etiam dignissim.
Justo nec ultrices dui sapien eget mi proin sed. Purus gravida quis blandit turpis cursus in hac. Placerat orci nulla pellentesque dignissim enim sit. Morbi tristique senectus et netus et malesuada fames ac. Consequat mauris nunc congue nisi. Eu lobortis elementum nibh tellus molestie nunc non blandit. Viverra justo nec ultrices dui. Morbi non arcu risus quis. Elementum sagittis vitae et leo duis. Lectus mauris ultrices eros in cursus. Neque laoreet suspendisse interdum consectetur.
Facilisis gravida neque convallis a cras. Nisl rhoncus mattis rhoncus urna neque viverra justo. Faucibus purus in massa tempor. Lacus laoreet non curabitur gravida arcu ac tortor. Tincidunt eget nullam non nisi est sit amet. Ornare lectus sit amet est placerat in egestas. Sollicitudin tempor id eu nisl nunc mi. Scelerisque viverra mauris in aliquam sem fringilla ut. Ullamcorper sit amet risus nullam. Mauris rhoncus aenean vel elit scelerisque mauris pellentesque pulvinar. Velit euismod in pellentesque massa placerat duis ultricies lacus. Pharetra magna ac placerat vestibulum lectus mauris ultrices eros in. Lorem ipsum dolor sit amet. Sit amet mauris commodo quis imperdiet. Quam pellentesque nec nam aliquam sem et tortor. Amet nisl purus in mollis nunc. Sed risus pretium quam vulputate dignissim suspendisse in est. Nisl condimentum id venenatis a condimentum. Velit euismod in pellentesque massa. Quam id leo in vitae turpis massa sed.

View File

@ -0,0 +1,46 @@
// eslint-disable-next-line @typescript-eslint/triple-slash-reference
/// <reference path="../support/index.d.ts" />
describe('Documents', () => {
const timestamp = Date.now();
before(() => {
cy.uploadTestDocument(timestamp);
});
after(() => {
cy.deleteTestDocument(timestamp);
});
context('Admin', () => {
beforeEach(() => {
// Login as the admin user
cy.loginAdmin();
// Visit the home page
cy.visit('/workspace/documents');
cy.get('button').contains('#cypress-test').click();
});
it('can see documents', () => {
cy.get('div').contains(`document-test-initial-${timestamp}.txt`).should('have.length', 1);
});
it('can see edit button', () => {
cy.get('div')
.contains(`document-test-initial-${timestamp}.txt`)
.get("button[aria-label='Edit Doc']")
.should('exist');
});
it('can see delete button', () => {
cy.get('div')
.contains(`document-test-initial-${timestamp}.txt`)
.get("button[aria-label='Delete Doc']")
.should('exist');
});
it('can see upload button', () => {
cy.get("button[aria-label='Add Docs']").should('exist');
});
});
});

View File

@ -1,4 +1,6 @@
/// <reference types="cypress" />
// eslint-disable-next-line @typescript-eslint/triple-slash-reference
/// <reference path="../support/index.d.ts" />
export const adminUser = {
name: 'Admin User',
@ -10,6 +12,9 @@ const login = (email: string, password: string) => {
return cy.session(
email,
() => {
// Make sure to test against us english to have stable tests,
// regardless on local language preferences
localStorage.setItem('locale', 'en-US');
// Visit auth page
cy.visit('/auth');
// Fill out the form
@ -68,6 +73,50 @@ Cypress.Commands.add('register', (name, email, password) => register(name, email
Cypress.Commands.add('registerAdmin', () => registerAdmin());
Cypress.Commands.add('loginAdmin', () => loginAdmin());
Cypress.Commands.add('uploadTestDocument', (suffix: any) => {
// Login as admin
cy.loginAdmin();
// upload example document
cy.visit('/workspace/documents');
// Create a document
cy.get("button[aria-label='Add Docs']").click();
cy.readFile('cypress/data/example-doc.txt').then((text) => {
// select file
cy.get('#upload-doc-input').selectFile(
{
contents: Cypress.Buffer.from(text + Date.now()),
fileName: `document-test-initial-${suffix}.txt`,
mimeType: 'text/plain',
lastModified: Date.now()
},
{
force: true
}
);
// open tag input
cy.get("button[aria-label='Add Tag']").click();
cy.get("input[placeholder='Add a tag']").type('cypress-test');
cy.get("button[aria-label='Save Tag']").click();
// submit to upload
cy.get("button[type='submit']").click();
// wait for upload to finish
cy.get('button').contains('#cypress-test').should('exist');
cy.get('div').contains(`document-test-initial-${suffix}.txt`).should('exist');
});
});
Cypress.Commands.add('deleteTestDocument', (suffix: any) => {
cy.loginAdmin();
cy.visit('/workspace/documents');
// clean up uploaded documents
cy.get('div')
.contains(`document-test-initial-${suffix}.txt`)
.find("button[aria-label='Delete Doc']")
.click();
});
before(() => {
cy.registerAdmin();
});

View File

@ -7,5 +7,7 @@ declare namespace Cypress {
register(name: string, email: string, password: string): Chainable<Element>;
registerAdmin(): Chainable<Element>;
loginAdmin(): Chainable<Element>;
uploadTestDocument(suffix: any): Chainable<Element>;
deleteTestDocument(suffix: any): Chainable<Element>;
}
}

13
package-lock.json generated
View File

@ -1,12 +1,12 @@
{
"name": "open-webui",
"version": "0.3.10",
"version": "0.3.11",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "open-webui",
"version": "0.3.10",
"version": "0.3.11",
"dependencies": {
"@codemirror/lang-javascript": "^6.2.2",
"@codemirror/lang-python": "^6.1.6",
@ -20,6 +20,7 @@
"dayjs": "^1.11.10",
"eventsource-parser": "^1.1.2",
"file-saver": "^2.0.5",
"fuse.js": "^7.0.0",
"highlight.js": "^11.9.0",
"i18next": "^23.10.0",
"i18next-browser-languagedetector": "^7.2.0",
@ -4820,6 +4821,14 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/fuse.js": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.0.0.tgz",
"integrity": "sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q==",
"engines": {
"node": ">=10"
}
},
"node_modules/gc-hook": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/gc-hook/-/gc-hook-0.3.1.tgz",

View File

@ -1,6 +1,6 @@
{
"name": "open-webui",
"version": "0.3.10",
"version": "0.3.11",
"private": true,
"scripts": {
"dev": "npm run pyodide:fetch && vite dev --host",
@ -60,6 +60,7 @@
"dayjs": "^1.11.10",
"eventsource-parser": "^1.1.2",
"file-saver": "^2.0.5",
"fuse.js": "^7.0.0",
"highlight.js": "^11.9.0",
"i18next": "^23.10.0",
"i18next-browser-languagedetector": "^7.2.0",

View File

@ -23,7 +23,7 @@ dependencies = [
"peewee==3.17.5",
"peewee-migrate==1.12.2",
"psycopg2-binary==2.9.9",
"PyMySQL==1.1.0",
"PyMySQL==1.1.1",
"bcrypt==4.1.3",
"boto3==1.34.110",
@ -33,7 +33,7 @@ dependencies = [
"google-generativeai==0.5.4",
"langchain==0.2.0",
"langchain-community==0.2.0",
"langchain-community==0.2.9",
"langchain-chroma==0.1.1",
"fake-useragent==1.5.1",

View File

@ -154,3 +154,7 @@ input[type='number'] {
.tippy-box[data-theme~='dark'] {
@apply rounded-lg bg-gray-950 text-xs border border-gray-900 shadow-xl;
}
.password {
-webkit-text-security: disc;
}

View File

@ -131,3 +131,59 @@ export const synthesizeOpenAISpeech = async (
return res;
};
export const getModels = async (token: string = '') => {
let error = null;
const res = await fetch(`${AUDIO_API_BASE_URL}/models`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`
}
})
.then(async (res) => {
if (!res.ok) throw await res.json();
return res.json();
})
.catch((err) => {
error = err.detail;
console.log(err);
return null;
});
if (error) {
throw error;
}
return res;
};
export const getVoices = async (token: string = '') => {
let error = null;
const res = await fetch(`${AUDIO_API_BASE_URL}/voices`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`
}
})
.then(async (res) => {
if (!res.ok) throw await res.json();
return res.json();
})
.catch((err) => {
error = err.detail;
console.log(err);
return null;
});
if (error) {
throw error;
}
return res;
};

View File

@ -1,13 +1,19 @@
<script lang="ts">
import { getAudioConfig, updateAudioConfig } from '$lib/apis/audio';
import { user, settings, config } from '$lib/stores';
import { createEventDispatcher, onMount, getContext } from 'svelte';
import { toast } from 'svelte-sonner';
import Switch from '$lib/components/common/Switch.svelte';
import { getBackendConfig } from '$lib/apis';
import SensitiveInput from '$lib/components/common/SensitiveInput.svelte';
import { createEventDispatcher, onMount, getContext } from 'svelte';
const dispatch = createEventDispatcher();
import { getBackendConfig } from '$lib/apis';
import {
getAudioConfig,
updateAudioConfig,
getModels as _getModels,
getVoices as _getVoices
} from '$lib/apis/audio';
import { user, settings, config } from '$lib/stores';
import SensitiveInput from '$lib/components/common/SensitiveInput.svelte';
const i18n = getContext('i18n');
export let saveHandler: Function;
@ -16,6 +22,7 @@
let TTS_OPENAI_API_BASE_URL = '';
let TTS_OPENAI_API_KEY = '';
let TTS_API_KEY = '';
let TTS_ENGINE = '';
let TTS_MODEL = '';
let TTS_VOICE = '';
@ -29,30 +36,41 @@
let models = [];
let nonLocalVoices = false;
const getOpenAIVoices = () => {
voices = [
{ name: 'alloy' },
{ name: 'echo' },
{ name: 'fable' },
{ name: 'onyx' },
{ name: 'nova' },
{ name: 'shimmer' }
];
};
const getModels = async () => {
if (TTS_ENGINE === '') {
models = [];
} else {
const res = await _getModels(localStorage.token).catch((e) => {
toast.error(e);
});
const getOpenAIModels = () => {
models = [{ name: 'tts-1' }, { name: 'tts-1-hd' }];
};
const getWebAPIVoices = () => {
const getVoicesLoop = setInterval(async () => {
voices = await speechSynthesis.getVoices();
// do your loop
if (voices.length > 0) {
clearInterval(getVoicesLoop);
if (res) {
console.log(res);
models = res.models;
}
}, 100);
}
};
const getVoices = async () => {
if (TTS_ENGINE === '') {
const getVoicesLoop = setInterval(async () => {
voices = await speechSynthesis.getVoices();
// do your loop
if (voices.length > 0) {
clearInterval(getVoicesLoop);
}
}, 100);
} else {
const res = await _getVoices(localStorage.token).catch((e) => {
toast.error(e);
});
if (res) {
console.log(res);
voices = res.voices;
}
}
};
const updateConfigHandler = async () => {
@ -60,6 +78,7 @@
tts: {
OPENAI_API_BASE_URL: TTS_OPENAI_API_BASE_URL,
OPENAI_API_KEY: TTS_OPENAI_API_KEY,
API_KEY: TTS_API_KEY,
ENGINE: TTS_ENGINE,
MODEL: TTS_MODEL,
VOICE: TTS_VOICE
@ -86,6 +105,7 @@
console.log(res);
TTS_OPENAI_API_BASE_URL = res.tts.OPENAI_API_BASE_URL;
TTS_OPENAI_API_KEY = res.tts.OPENAI_API_KEY;
TTS_API_KEY = res.tts.API_KEY;
TTS_ENGINE = res.tts.ENGINE;
TTS_MODEL = res.tts.MODEL;
@ -98,12 +118,8 @@
STT_MODEL = res.stt.MODEL;
}
if (TTS_ENGINE === 'openai') {
getOpenAIVoices();
getOpenAIModels();
} else {
getWebAPIVoices();
}
await getVoices();
await getModels();
});
</script>
@ -138,7 +154,7 @@
<div>
<div class="mt-1 flex gap-2 mb-1">
<input
class="flex-1 w-full rounded-l-lg py-2 pl-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-none"
class="flex-1 w-full rounded-lg py-2 pl-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-none"
placeholder={$i18n.t('API Base URL')}
bind:value={STT_OPENAI_API_BASE_URL}
required
@ -182,19 +198,23 @@
class=" dark:bg-gray-900 w-fit pr-8 rounded px-2 p-1 text-xs bg-transparent outline-none text-right"
bind:value={TTS_ENGINE}
placeholder="Select a mode"
on:change={(e) => {
on:change={async (e) => {
await updateConfigHandler();
await getVoices();
await getModels();
if (e.target.value === 'openai') {
getOpenAIVoices();
TTS_VOICE = 'alloy';
TTS_MODEL = 'tts-1';
} else {
getWebAPIVoices();
TTS_VOICE = '';
TTS_MODEL = '';
}
}}
>
<option value="">{$i18n.t('Web API')}</option>
<option value="openai">{$i18n.t('OpenAI')}</option>
<option value="elevenlabs">{$i18n.t('ElevenLabs')}</option>
</select>
</div>
</div>
@ -203,7 +223,7 @@
<div>
<div class="mt-1 flex gap-2 mb-1">
<input
class="flex-1 w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-none"
class="flex-1 w-full rounded-lg py-2 pl-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-none"
placeholder={$i18n.t('API Base URL')}
bind:value={TTS_OPENAI_API_BASE_URL}
required
@ -212,6 +232,17 @@
<SensitiveInput placeholder={$i18n.t('API Key')} bind:value={TTS_OPENAI_API_KEY} />
</div>
</div>
{:else if TTS_ENGINE === 'elevenlabs'}
<div>
<div class="mt-1 flex gap-2 mb-1">
<input
class="flex-1 w-full rounded-lg py-2 pl-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-none"
placeholder={$i18n.t('API Key')}
bind:value={TTS_API_KEY}
required
/>
</div>
</div>
{/if}
<hr class=" dark:border-gray-850 my-2" />
@ -252,7 +283,7 @@
<datalist id="voice-list">
{#each voices as voice}
<option value={voice.name} />
<option value={voice.id}>{voice.name}</option>
{/each}
</datalist>
</div>
@ -263,15 +294,56 @@
<div class="flex w-full">
<div class="flex-1">
<input
list="model-list"
list="tts-model-list"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-none"
bind:value={TTS_MODEL}
placeholder="Select a model"
/>
<datalist id="model-list">
<datalist id="tts-model-list">
{#each models as model}
<option value={model.name} />
<option value={model.id} />
{/each}
</datalist>
</div>
</div>
</div>
</div>
{:else if TTS_ENGINE === 'elevenlabs'}
<div class=" flex gap-2">
<div class="w-full">
<div class=" mb-1.5 text-sm font-medium">{$i18n.t('TTS Voice')}</div>
<div class="flex w-full">
<div class="flex-1">
<input
list="voice-list"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-none"
bind:value={TTS_VOICE}
placeholder="Select a voice"
/>
<datalist id="voice-list">
{#each voices as voice}
<option value={voice.id}>{voice.name}</option>
{/each}
</datalist>
</div>
</div>
</div>
<div class="w-full">
<div class=" mb-1.5 text-sm font-medium">{$i18n.t('TTS Model')}</div>
<div class="flex w-full">
<div class="flex-1">
<input
list="tts-model-list"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-none"
bind:value={TTS_MODEL}
placeholder="Select a model"
/>
<datalist id="tts-model-list">
{#each models as model}
<option value={model.id} />
{/each}
</datalist>
</div>

View File

@ -269,7 +269,7 @@
saveHandler();
}}
>
<div class=" space-y-2.5 overflow-y-scroll scrollbar-hidden h-full">
<div class=" space-y-2.5 overflow-y-scroll scrollbar-hidden h-full pr-1.5">
<div class="flex flex-col gap-0.5">
<div class=" mb-0.5 text-sm font-medium">{$i18n.t('General Settings')}</div>
@ -615,7 +615,7 @@
<div class=" ">
<div class=" text-sm font-medium">{$i18n.t('Query Params')}</div>
<div class=" flex">
<div class=" flex gap-1">
<div class=" flex w-full justify-between">
<div class="self-center text-xs font-medium min-w-fit">{$i18n.t('Top K')}</div>
@ -632,7 +632,7 @@
</div>
{#if querySettings.hybrid === true}
<div class="flex w-full">
<div class=" flex w-full justify-between">
<div class=" self-center text-xs font-medium min-w-fit">
{$i18n.t('Minimum Score')}
</div>

View File

@ -80,6 +80,7 @@
let eventConfirmationMessage = '';
let eventConfirmationInput = false;
let eventConfirmationInputPlaceholder = '';
let eventConfirmationInputValue = '';
let eventCallback = null;
let showModelSelector = true;
@ -108,7 +109,6 @@
};
let params = {};
let valves = {};
$: if (history.currentId !== null) {
let _messages = [];
@ -182,6 +182,7 @@
eventConfirmationTitle = data.title;
eventConfirmationMessage = data.message;
eventConfirmationInputPlaceholder = data.placeholder;
eventConfirmationInputValue = data?.value ?? '';
} else {
console.log('Unknown message type', data);
}
@ -281,6 +282,10 @@
if ($page.url.searchParams.get('q')) {
prompt = $page.url.searchParams.get('q') ?? '';
selectedToolIds = ($page.url.searchParams.get('tool_ids') ?? '')
.split(',')
.map((id) => id.trim())
.filter((id) => id);
if (prompt) {
await tick();
@ -706,6 +711,7 @@
let _response = null;
const responseMessage = history.messages[responseMessageId];
const userMessage = history.messages[responseMessage.parentId];
// Wait until history/message have been updated
await tick();
@ -772,11 +778,12 @@
if (model?.info?.meta?.knowledge ?? false) {
files.push(...model.info.meta.knowledge);
}
if (responseMessage?.files) {
files.push(
...responseMessage?.files.filter((item) => ['web_search_results'].includes(item.type))
);
}
files.push(
...(userMessage?.files ?? []).filter((item) =>
['doc', 'file', 'collection'].includes(item.type)
),
...(responseMessage?.files ?? []).filter((item) => ['web_search_results'].includes(item.type))
);
eventTarget.dispatchEvent(
new CustomEvent('chat:start', {
@ -808,7 +815,6 @@
keep_alive: $settings.keepAlive ?? undefined,
tool_ids: selectedToolIds.length > 0 ? selectedToolIds : undefined,
files: files.length > 0 ? files : undefined,
...(Object.keys(valves).length ? { valves } : {}),
session_id: $socket?.id,
chat_id: $chatId,
id: responseMessageId
@ -1006,17 +1012,20 @@
const sendPromptOpenAI = async (model, userPrompt, responseMessageId, _chatId) => {
let _response = null;
const responseMessage = history.messages[responseMessageId];
const userMessage = history.messages[responseMessage.parentId];
let files = JSON.parse(JSON.stringify(chatFiles));
if (model?.info?.meta?.knowledge ?? false) {
files.push(...model.info.meta.knowledge);
}
if (responseMessage?.files) {
files.push(
...responseMessage?.files.filter((item) => ['web_search_results'].includes(item.type))
);
}
files.push(
...(userMessage?.files ?? []).filter((item) =>
['doc', 'file', 'collection'].includes(item.type)
),
...(responseMessage?.files ?? []).filter((item) => ['web_search_results'].includes(item.type))
);
scrollToBottom();
@ -1105,7 +1114,6 @@
max_tokens: params?.max_tokens ?? $settings?.params?.max_tokens ?? undefined,
tool_ids: selectedToolIds.length > 0 ? selectedToolIds : undefined,
files: files.length > 0 ? files : undefined,
...(Object.keys(valves).length ? { valves } : {}),
session_id: $socket?.id,
chat_id: $chatId,
id: responseMessageId
@ -1484,6 +1492,7 @@
message={eventConfirmationMessage}
input={eventConfirmationInput}
inputPlaceholder={eventConfirmationInputPlaceholder}
inputValue={eventConfirmationInputValue}
on:confirm={(e) => {
if (e.detail) {
eventCallback(e.detail);
@ -1631,7 +1640,6 @@
bind:show={showControls}
bind:chatFiles
bind:params
bind:valves
/>
</div>
{/if}

View File

@ -9,9 +9,7 @@
export let models = [];
export let chatId = null;
export let chatFiles = [];
export let valves = {};
export let params = {};
let largeScreen = false;
@ -50,7 +48,6 @@
}}
{models}
bind:chatFiles
bind:valves
bind:params
/>
</div>
@ -66,7 +63,6 @@
}}
{models}
bind:chatFiles
bind:valves
bind:params
/>
</div>

View File

@ -5,13 +5,13 @@
import XMark from '$lib/components/icons/XMark.svelte';
import AdvancedParams from '../Settings/Advanced/AdvancedParams.svelte';
import Valves from '$lib/components/common/Valves.svelte';
import Valves from '$lib/components/chat/Controls/Valves.svelte';
import FileItem from '$lib/components/common/FileItem.svelte';
import Collapsible from '$lib/components/common/Collapsible.svelte';
export let models = [];
export let chatFiles = [];
export let valves = {};
export let params = {};
</script>
@ -28,18 +28,17 @@
</button>
</div>
<div class=" dark:text-gray-200 text-sm font-primary">
<div class=" dark:text-gray-200 text-sm font-primary py-0.5">
{#if chatFiles.length > 0}
<div>
<div class="mb-1.5 font-medium">{$i18n.t('Files')}</div>
<div class="flex flex-col gap-1">
<Collapsible title={$i18n.t('Files')} open={true}>
<div class="flex flex-col gap-1 mt-1.5" slot="content">
{#each chatFiles as file, fileIdx}
<FileItem
className="w-full"
url={`${file?.url}`}
name={file.name}
type={file.type}
size={file?.size}
dismissible={true}
on:dismiss={() => {
// Remove the file from the chatFiles array
@ -50,44 +49,38 @@
/>
{/each}
</div>
</div>
</Collapsible>
<hr class="my-2 border-gray-100 dark:border-gray-800" />
{/if}
{#if models.length === 1 && models[0]?.pipe?.valves_spec}
<div>
<div class=" font-medium">{$i18n.t('Valves')}</div>
<div>
<Valves valvesSpec={models[0]?.pipe?.valves_spec} bind:valves />
</div>
<Collapsible title={$i18n.t('Valves')}>
<div class="text-sm mt-1.5" slot="content">
<Valves />
</div>
<hr class="my-2 border-gray-100 dark:border-gray-800" />
{/if}
<div>
<div class="mb-1.5 font-medium">{$i18n.t('System Prompt')}</div>
<div>
<textarea
bind:value={params.system}
class="w-full rounded-lg px-4 py-3 text-sm dark:text-gray-300 dark:bg-gray-850 border border-gray-100 dark:border-gray-800 outline-none resize-none"
rows="3"
placeholder={$i18n.t('Enter system prompt')}
/>
</div>
</div>
</Collapsible>
<hr class="my-2 border-gray-100 dark:border-gray-800" />
<div>
<div class="mb-1.5 font-medium">{$i18n.t('Advanced Params')}</div>
<div>
<AdvancedParams bind:params />
<Collapsible title={$i18n.t('System Prompt')} open={true}>
<div class=" mt-1.5" slot="content">
<textarea
bind:value={params.system}
class="w-full rounded-lg px-3.5 py-2.5 text-sm dark:text-gray-300 dark:bg-gray-850 border border-gray-100 dark:border-gray-800 outline-none resize-none"
rows="4"
placeholder={$i18n.t('Enter system prompt')}
/>
</div>
</div>
</Collapsible>
<hr class="my-2 border-gray-100 dark:border-gray-800" />
<Collapsible title={$i18n.t('Advanced Params')} open={true}>
<div class="text-sm mt-1.5" slot="content">
<div>
<AdvancedParams bind:params />
</div>
</div>
</Collapsible>
</div>
</div>

View File

@ -15,18 +15,14 @@
updateUserValvesById as updateFunctionUserValvesById
} from '$lib/apis/functions';
import ManageModal from './Personalization/ManageModal.svelte';
import Tooltip from '$lib/components/common/Tooltip.svelte';
import Spinner from '$lib/components/common/Spinner.svelte';
import Switch from '$lib/components/common/Switch.svelte';
import Valves from '$lib/components/common/Valves.svelte';
const dispatch = createEventDispatcher();
const i18n = getContext('i18n');
export let saveSettings: Function;
let tab = 'tools';
let selectedId = '';
@ -35,6 +31,19 @@
let valvesSpec = null;
let valves = {};
let debounceTimer;
const debounceSubmitHandler = async () => {
if (debounceTimer) {
clearTimeout(debounceTimer);
}
// Set a new timer
debounceTimer = setTimeout(() => {
submitHandler();
}, 500); // 0.5 second debounce
};
const getUserValves = async () => {
loading = true;
if (tab === 'tools') {
@ -112,53 +121,45 @@
dispatch('save');
}}
>
<div class="flex flex-col pr-1.5 overflow-y-scroll max-h-[25rem]">
<div>
<div class="flex items-center justify-between mb-2">
<Tooltip content="">
<div class="text-sm font-medium">
{$i18n.t('Manage Valves')}
</div>
</Tooltip>
<div class=" self-end">
<select
class=" dark:bg-gray-900 w-fit pr-8 rounded text-xs bg-transparent outline-none text-right"
bind:value={tab}
placeholder="Select"
>
<option value="tools">{$i18n.t('Tools')}</option>
<option value="functions">{$i18n.t('Functions')}</option>
</select>
</div>
</div>
</div>
<div class="flex flex-col">
<div class="space-y-1">
<div class="flex gap-2">
<div class="flex-1">
<select
class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
class=" w-full rounded text-xs py-2 px-1 bg-transparent outline-none"
bind:value={tab}
placeholder="Select"
>
<option value="tools" class="bg-gray-100 dark:bg-gray-800">{$i18n.t('Tools')}</option>
<option value="functions" class="bg-gray-100 dark:bg-gray-800"
>{$i18n.t('Functions')}</option
>
</select>
</div>
<div class="flex-1">
<select
class="w-full rounded py-2 px-1 text-xs bg-transparent outline-none"
bind:value={selectedId}
on:change={async () => {
await tick();
}}
>
{#if tab === 'tools'}
<option value="" selected disabled class="bg-gray-100 dark:bg-gray-700"
<option value="" selected disabled class="bg-gray-100 dark:bg-gray-800"
>{$i18n.t('Select a tool')}</option
>
{#each $tools as tool, toolIdx}
<option value={tool.id} class="bg-gray-100 dark:bg-gray-700">{tool.name}</option>
<option value={tool.id} class="bg-gray-100 dark:bg-gray-800">{tool.name}</option>
{/each}
{:else if tab === 'functions'}
<option value="" selected disabled class="bg-gray-100 dark:bg-gray-700"
<option value="" selected disabled class="bg-gray-100 dark:bg-gray-800"
>{$i18n.t('Select a function')}</option
>
{#each $functions as func, funcIdx}
<option value={func.id} class="bg-gray-100 dark:bg-700">{func.name}</option>
<option value={func.id} class="bg-gray-100 dark:bg-gray-800">{func.name}</option>
{/each}
{/if}
</select>
@ -167,24 +168,21 @@
</div>
{#if selectedId}
<hr class="dark:border-gray-800 my-3 w-full" />
<hr class="dark:border-gray-800 my-1 w-full" />
<div>
<div class="my-2 text-xs">
{#if !loading}
<Valves {valvesSpec} bind:valves />
<Valves
{valvesSpec}
bind:valves
on:change={() => {
debounceSubmitHandler();
}}
/>
{:else}
<Spinner className="size-5" />
{/if}
</div>
{/if}
</div>
<div class="flex justify-end text-sm font-medium">
<button
class=" px-4 py-2 bg-emerald-700 hover:bg-emerald-800 text-gray-100 transition rounded-lg"
type="submit"
>
{$i18n.t('Save')}
</button>
</div>
</form>

View File

@ -98,6 +98,7 @@
const uploadFileHandler = async (file) => {
console.log(file);
// Check if the file is an audio file and transcribe/convert it to text file
if (['audio/mpeg', 'audio/wav'].includes(file['type'])) {
const res = await transcribeAudio(localStorage.token, file).catch((error) => {
@ -112,40 +113,49 @@
}
}
// Upload the file to the server
const uploadedFile = await uploadFile(localStorage.token, file).catch((error) => {
toast.error(error);
return null;
});
const fileItem = {
type: 'file',
file: '',
id: null,
url: '',
name: file.name,
collection_name: '',
status: '',
size: file.size,
error: ''
};
files = [...files, fileItem];
if (uploadedFile) {
const fileItem = {
type: 'file',
file: uploadedFile,
id: uploadedFile.id,
url: `${WEBUI_API_BASE_URL}/files/${uploadedFile.id}`,
name: file.name,
collection_name: '',
status: 'uploaded',
error: ''
};
files = [...files, fileItem];
try {
const uploadedFile = await uploadFile(localStorage.token, file);
// TODO: Check if tools & functions have files support to skip this step to delegate file processing
// Default Upload to VectorDB
if (
SUPPORTED_FILE_TYPE.includes(file['type']) ||
SUPPORTED_FILE_EXTENSIONS.includes(file.name.split('.').at(-1))
) {
processFileItem(fileItem);
if (uploadedFile) {
fileItem.status = 'uploaded';
fileItem.file = uploadedFile;
fileItem.id = uploadedFile.id;
fileItem.url = `${WEBUI_API_BASE_URL}/files/${uploadedFile.id}`;
// TODO: Check if tools & functions have files support to skip this step to delegate file processing
// Default Upload to VectorDB
if (
SUPPORTED_FILE_TYPE.includes(file['type']) ||
SUPPORTED_FILE_EXTENSIONS.includes(file.name.split('.').at(-1))
) {
processFileItem(fileItem);
} else {
toast.error(
$i18n.t(`Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.`, {
file_type: file['type']
})
);
processFileItem(fileItem);
}
} else {
toast.error(
$i18n.t(`Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.`, {
file_type: file['type']
})
);
processFileItem(fileItem);
files = files.filter((item) => item.status !== null);
}
} catch (e) {
toast.error(e);
files = files.filter((item) => item.status !== null);
}
};
@ -162,7 +172,6 @@
// Remove the failed doc from the files array
// files = files.filter((f) => f.id !== fileItem.id);
toast.error(e);
fileItem.status = 'processed';
files = files;
}
@ -545,6 +554,7 @@
<FileItem
name={file.name}
type={file.type}
size={file?.size}
status={file.status}
dismissible={true}
on:dismiss={() => {

View File

@ -175,7 +175,10 @@
delimiters: [
{ left: '$$', right: '$$', display: false },
{ left: '$ ', right: ' $', display: false },
{ left: '\\pu{', right: '}', display: false },
{ left: '\\ce{', right: '}', display: false },
{ left: '\\(', right: '\\)', display: false },
{ left: '( ', right: ' )', display: false },
{ left: '\\[', right: '\\]', display: false },
{ left: '[ ', right: ' ]', display: false }
],
@ -218,7 +221,7 @@
if ((message?.content ?? '').trim() !== '') {
speaking = true;
if ($config.audio.tts.engine === 'openai') {
if ($config.audio.tts.engine !== '') {
loadingSpeech = true;
const sentences = extractSentences(message.content).reduce((mergedTexts, currentText) => {
@ -250,7 +253,9 @@
for (const [idx, sentence] of sentences.entries()) {
const res = await synthesizeOpenAISpeech(
localStorage.token,
$settings?.audio?.tts?.voice ?? $config?.audio?.tts?.voice,
$settings?.audio?.tts?.defaultVoice === $config.audio.tts.voice
? $settings?.audio?.tts?.voice ?? $config?.audio?.tts?.voice
: $config?.audio?.tts?.voice,
sentence
).catch((error) => {
toast.error(error);
@ -433,7 +438,7 @@
{@const status = (
message?.statusHistory ?? [...(message?.status ? [message?.status] : [])]
).at(-1)}
<div class="flex items-center gap-2 pt-1 pb-1">
<div class="flex items-center gap-2 pt-0.5 pb-1">
{#if status.done === false}
<div class="">
<Spinner className="size-4" />

View File

@ -20,7 +20,10 @@
<ChevronDown strokeWidth="3.5" className="size-3.5 " />
{/if}
</div>
<div class="text-sm border border-gray-300/30 dark:border-gray-700/50 rounded-xl" slot="content">
<div
class="text-sm border border-gray-300/30 dark:border-gray-700/50 rounded-xl mb-1.5"
slot="content"
>
{#if status?.query}
<a
href="https://www.google.com/search?q={status.query}"

View File

@ -100,7 +100,13 @@
{#if file.type === 'image'}
<img src={file.url} alt="input" class=" max-h-96 rounded-lg" draggable="false" />
{:else}
<FileItem url={file.url} name={file.name} type={file.type} />
<FileItem
url={file.url}
name={file.name}
type={file.type}
size={file?.size}
colorClassName="bg-white dark:bg-gray-850 "
/>
{/if}
</div>
{/each}

View File

@ -1,6 +1,7 @@
<script lang="ts">
import { DropdownMenu } from 'bits-ui';
import { marked } from 'marked';
import Fuse from 'fuse.js';
import { flyAndScale } from '$lib/utils/transitions';
import { createEventDispatcher, onMount, getContext, tick } from 'svelte';
@ -33,7 +34,7 @@
[key: string]: any;
} = [];
export let className = 'w-[30rem]';
export let className = 'w-[32rem]';
let show = false;
@ -43,17 +44,31 @@
let searchValue = '';
let ollamaVersion = null;
$: filteredItems = items.filter(
(item) =>
(searchValue
? item.value.toLowerCase().includes(searchValue.toLowerCase()) ||
item.label.toLowerCase().includes(searchValue.toLowerCase()) ||
(item.model?.info?.meta?.tags ?? []).some((tag) =>
tag.name.toLowerCase().includes(searchValue.toLowerCase())
)
: true) && !(item.model?.info?.meta?.hidden ?? false)
let selectedModelIdx = 0;
const fuse = new Fuse(
items
.filter((item) => !item.model?.info?.meta?.hidden)
.map((item) => {
const _item = {
...item,
modelName: item.model?.name,
tags: item.model?.info?.meta?.tags?.map((tag) => tag.name).join(' '),
desc: item.model?.info?.meta?.description
};
return _item;
}),
{
keys: ['value', 'label', 'tags', 'desc', 'modelName']
}
);
$: filteredItems = searchValue
? fuse.search(searchValue).map((e) => {
return e.item;
})
: items.filter((item) => !item.model?.info?.meta?.hidden);
const pullModelHandler = async () => {
const sanitizedModelTag = searchValue.trim().replace(/^ollama\s+(run|pull)\s+/, '');
@ -202,6 +217,7 @@
bind:open={show}
onOpenChange={async () => {
searchValue = '';
selectedModelIdx = 0;
window.setTimeout(() => document.getElementById('model-search-input')?.focus(), 0);
}}
closeFocus={false}
@ -238,19 +254,41 @@
class="w-full text-sm bg-transparent outline-none"
placeholder={searchPlaceholder}
autocomplete="off"
on:keydown={(e) => {
if (e.code === 'Enter' && filteredItems.length > 0) {
value = filteredItems[selectedModelIdx].value;
show = false;
return; // dont need to scroll on selection
} else if (e.code === 'ArrowDown') {
selectedModelIdx = Math.min(selectedModelIdx + 1, filteredItems.length - 1);
} else if (e.code === 'ArrowUp') {
selectedModelIdx = Math.max(selectedModelIdx - 1, 0);
} else {
// if the user types something, reset to the top selection.
selectedModelIdx = 0;
}
const item = document.querySelector(`[data-arrow-selected="true"]`);
item?.scrollIntoView({ block: 'center', inline: 'nearest', behavior: 'instant' });
}}
/>
</div>
<hr class="border-gray-100 dark:border-gray-800" />
{/if}
<div class="px-3 my-2 max-h-64 overflow-y-auto scrollbar-hidden">
{#each filteredItems as item}
<div class="px-3 my-2 max-h-64 overflow-y-auto scrollbar-hidden group">
{#each filteredItems as item, index}
<button
aria-label="model-item"
class="flex w-full text-left font-medium line-clamp-1 select-none items-center rounded-button py-2 pl-3 pr-1.5 text-sm text-gray-700 dark:text-gray-100 outline-none transition-all duration-75 hover:bg-gray-100 dark:hover:bg-gray-800 rounded-lg cursor-pointer data-[highlighted]:bg-muted"
class="flex w-full text-left font-medium line-clamp-1 select-none items-center rounded-button py-2 pl-3 pr-1.5 text-sm text-gray-700 dark:text-gray-100 outline-none transition-all duration-75 hover:bg-gray-100 dark:hover:bg-gray-800 rounded-lg cursor-pointer data-[highlighted]:bg-muted {index ===
selectedModelIdx
? 'bg-gray-100 dark:bg-gray-800 group-hover:bg-transparent'
: ''}"
data-arrow-selected={index === selectedModelIdx}
on:click={() => {
value = item.value;
selectedModelIdx = index;
show = false;
}}
@ -270,7 +308,14 @@
<div class="flex items-center gap-2">
<div class="flex items-center min-w-fit">
<div class="line-clamp-1">
{item.label}
<div class="flex items-center min-w-fit">
<img
src={item.model?.info?.meta?.profile_image_url ?? '/static/favicon.png'}
alt="Model"
class="rounded-full size-5 flex items-center mr-2"
/>
{item.label}
</div>
</div>
{#if item.model.owned_by === 'ollama' && (item.model.ollama?.details?.parameter_size ?? '') !== ''}
<div class="flex ml-1 items-center translate-y-[0.5px]">
@ -295,23 +340,11 @@
{/if}
</div>
{#if !$mobile && (item?.model?.info?.meta?.tags ?? []).length > 0}
<div class="flex gap-0.5 self-center items-center h-full translate-y-[0.5px]">
{#each item.model?.info?.meta.tags as tag}
<div
class=" text-xs font-bold px-1 rounded uppercase line-clamp-1 bg-gray-500/20 text-gray-700 dark:text-gray-200"
>
{tag.name}
</div>
{/each}
</div>
{/if}
<!-- {JSON.stringify(item.info)} -->
{#if item.model.owned_by === 'openai'}
<Tooltip content={`${'External'}`}>
<div class="">
<div class="translate-y-[1px]">
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 16 16"
@ -342,7 +375,7 @@
)
)}`}
>
<div class="">
<div class=" translate-y-[1px]">
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
@ -360,6 +393,20 @@
</div>
</Tooltip>
{/if}
{#if !$mobile && (item?.model?.info?.meta?.tags ?? []).length > 0}
<div class="flex gap-0.5 self-center items-center h-full translate-y-[0.5px]">
{#each item.model?.info?.meta.tags as tag}
<Tooltip content={tag.name}>
<div
class=" text-xs font-bold px-1 rounded uppercase line-clamp-1 bg-gray-500/20 text-gray-700 dark:text-gray-200"
>
{tag.name}
</div>
</Tooltip>
{/each}
</div>
{/if}
</div>
</div>

View File

@ -20,6 +20,7 @@
mirostat_tau: null,
top_k: null,
top_p: null,
min_p: null,
tfs_z: null,
num_ctx: null,
num_batch: null,
@ -385,6 +386,52 @@
{/if}
</div>
<div class=" py-0.5 w-full justify-between">
<div class="flex w-full justify-between">
<div class=" self-center text-xs font-medium">{$i18n.t('Min P')}</div>
<button
class="p-1 px-3 text-xs flex rounded transition flex-shrink-0 outline-none"
type="button"
on:click={() => {
params.min_p = (params?.min_p ?? null) === null ? 0.0 : null;
}}
>
{#if (params?.min_p ?? null) === null}
<span class="ml-2 self-center">{$i18n.t('Default')}</span>
{:else}
<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
{/if}
</button>
</div>
{#if (params?.min_p ?? null) !== null}
<div class="flex mt-0.5 space-x-2">
<div class=" flex-1">
<input
id="steps-range"
type="range"
min="0"
max="1"
step="0.05"
bind:value={params.min_p}
class="w-full h-2 rounded-lg appearance-none cursor-pointer dark:bg-gray-700"
/>
</div>
<div>
<input
bind:value={params.min_p}
type="number"
class=" bg-transparent text-center w-14"
min="0"
max="1"
step="any"
/>
</div>
</div>
{/if}
</div>
<div class=" py-0.5 w-full justify-between">
<div class="flex w-full justify-between">
<div class=" self-center text-xs font-medium">{$i18n.t('Frequency Penalty')}</div>

View File

@ -1,7 +1,10 @@
<script lang="ts">
import { user, settings, config } from '$lib/stores';
import { createEventDispatcher, onMount, getContext } from 'svelte';
import { toast } from 'svelte-sonner';
import { createEventDispatcher, onMount, getContext } from 'svelte';
import { user, settings, config } from '$lib/stores';
import { getVoices as _getVoices } from '$lib/apis/audio';
import Switch from '$lib/components/common/Switch.svelte';
const dispatch = createEventDispatcher();
@ -20,26 +23,26 @@
let voices = [];
let voice = '';
const getOpenAIVoices = () => {
voices = [
{ name: 'alloy' },
{ name: 'echo' },
{ name: 'fable' },
{ name: 'onyx' },
{ name: 'nova' },
{ name: 'shimmer' }
];
};
const getVoices = async () => {
if ($config.audio.tts.engine === '') {
const getVoicesLoop = setInterval(async () => {
voices = await speechSynthesis.getVoices();
const getWebAPIVoices = () => {
const getVoicesLoop = setInterval(async () => {
voices = await speechSynthesis.getVoices();
// do your loop
if (voices.length > 0) {
clearInterval(getVoicesLoop);
}
}, 100);
} else {
const res = await _getVoices(localStorage.token).catch((e) => {
toast.error(e);
});
// do your loop
if (voices.length > 0) {
clearInterval(getVoicesLoop);
if (res) {
console.log(res);
voices = res.voices;
}
}, 100);
}
};
const toggleResponseAutoPlayback = async () => {
@ -58,14 +61,16 @@
responseAutoPlayback = $settings.responseAutoPlayback ?? false;
STTEngine = $settings?.audio?.stt?.engine ?? '';
voice = $settings?.audio?.tts?.voice ?? $config.audio.tts.voice ?? '';
if ($settings?.audio?.tts?.defaultVoice === $config.audio.tts.voice) {
voice = $settings?.audio?.tts?.voice ?? $config.audio.tts.voice ?? '';
} else {
voice = $config.audio.tts.voice ?? '';
}
nonLocalVoices = $settings.audio?.tts?.nonLocalVoices ?? false;
if ($config.audio.tts.engine === 'openai') {
getOpenAIVoices();
} else {
getWebAPIVoices();
}
await getVoices();
});
</script>
@ -79,6 +84,7 @@
},
tts: {
voice: voice !== '' ? voice : undefined,
defaultVoice: $config?.audio?.tts?.voice ?? '',
nonLocalVoices: $config.audio.tts.engine === '' ? nonLocalVoices : undefined
}
}
@ -181,7 +187,7 @@
</div>
</div>
</div>
{:else if $config.audio.tts.engine === 'openai'}
{:else if $config.audio.tts.engine !== ''}
<div>
<div class=" mb-2.5 text-sm font-medium">{$i18n.t('Set Voice')}</div>
<div class="flex w-full">
@ -195,7 +201,7 @@
<datalist id="voice-list">
{#each voices as voice}
<option value={voice.name} />
<option value={voice.id}>{voice.name}</option>
{/each}
</datalist>
</div>

View File

@ -15,7 +15,6 @@
import Chats from './Settings/Chats.svelte';
import User from '../icons/User.svelte';
import Personalization from './Settings/Personalization.svelte';
import Valves from './Settings/Valves.svelte';
const i18n = getContext('i18n');
@ -188,30 +187,6 @@
<div class=" self-center">{$i18n.t('Audio')}</div>
</button>
<button
class="px-2.5 py-2.5 min-w-fit rounded-lg flex-1 md:flex-none flex text-right transition {selectedTab ===
'valves'
? 'bg-gray-200 dark:bg-gray-800'
: ' hover:bg-gray-100 dark:hover:bg-gray-850'}"
on:click={() => {
selectedTab = 'valves';
}}
>
<div class=" self-center mr-2">
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
fill="currentColor"
class="size-4"
>
<path
d="M18.75 12.75h1.5a.75.75 0 0 0 0-1.5h-1.5a.75.75 0 0 0 0 1.5ZM12 6a.75.75 0 0 1 .75-.75h7.5a.75.75 0 0 1 0 1.5h-7.5A.75.75 0 0 1 12 6ZM12 18a.75.75 0 0 1 .75-.75h7.5a.75.75 0 0 1 0 1.5h-7.5A.75.75 0 0 1 12 18ZM3.75 6.75h1.5a.75.75 0 1 0 0-1.5h-1.5a.75.75 0 0 0 0 1.5ZM5.25 18.75h-1.5a.75.75 0 0 1 0-1.5h1.5a.75.75 0 0 1 0 1.5ZM3 12a.75.75 0 0 1 .75-.75h7.5a.75.75 0 0 1 0 1.5h-7.5A.75.75 0 0 1 3 12ZM9 3.75a2.25 2.25 0 1 0 0 4.5 2.25 2.25 0 0 0 0-4.5ZM12.75 12a2.25 2.25 0 1 1 4.5 0 2.25 2.25 0 0 1-4.5 0ZM9 15.75a2.25 2.25 0 1 0 0 4.5 2.25 2.25 0 0 0 0-4.5Z"
/>
</svg>
</div>
<div class=" self-center">{$i18n.t('Valves')}</div>
</button>
<button
class="px-2.5 py-2.5 min-w-fit rounded-lg flex-1 md:flex-none flex text-right transition {selectedTab ===
'chats'
@ -349,13 +324,6 @@
toast.success($i18n.t('Settings saved successfully!'));
}}
/>
{:else if selectedTab === 'valves'}
<Valves
{saveSettings}
on:save={() => {
toast.success($i18n.t('Settings saved successfully!'));
}}
/>
{:else if selectedTab === 'chats'}
<Chats {saveSettings} />
{:else if selectedTab === 'account'}

View File

@ -1,14 +1,41 @@
<script lang="ts">
import { slide } from 'svelte/transition';
import { quintOut } from 'svelte/easing';
import ChevronUp from '../icons/ChevronUp.svelte';
import ChevronDown from '../icons/ChevronDown.svelte';
export let open = false;
export let className = '';
export let title = null;
</script>
<div class={className}>
<button on:click={() => (open = !open)}>
<slot />
</button>
{#if title !== null}
<button class="w-full" on:click={() => (open = !open)}>
<div class=" w-full font-medium transition flex items-center justify-between gap-2">
<div>
{title}
</div>
<div>
{#if open}
<ChevronUp strokeWidth="3.5" className="size-3.5 " />
{:else}
<ChevronDown strokeWidth="3.5" className="size-3.5 " />
{/if}
</div>
</div>
</button>
{:else}
<button on:click={() => (open = !open)}>
<div
class="flex items-center gap-2 text-gray-500 hover:text-gray-700 dark:hover:text-gray-300 transition"
>
<slot />
</div>
</button>
{/if}
{#if open}
<div transition:slide={{ duration: 300, easing: quintOut, axis: 'y' }}>

View File

@ -15,12 +15,12 @@
export let input = false;
export let inputPlaceholder = '';
export let inputValue = '';
export let show = false;
let modalElement = null;
let mounted = false;
let inputValue = '';
const handleKeyDown = (event: KeyboardEvent) => {
if (event.key === 'Escape') {

View File

@ -5,6 +5,7 @@
const dispatch = createEventDispatcher();
export let className = 'w-72';
export let colorClassName = 'bg-white dark:bg-gray-800';
export let url: string | null = null;
export let clickHandler: Function | null = null;
@ -14,11 +15,26 @@
export let name: string;
export let type: string;
export let size: number;
function formatSize(size) {
if (size == null) return 'Unknown size';
if (typeof size !== 'number' || size < 0) return 'Invalid size';
if (size === 0) return '0 B';
const units = ['B', 'KB', 'MB', 'GB', 'TB'];
let unitIndex = 0;
while (size >= 1024 && unitIndex < units.length - 1) {
size /= 1024;
unitIndex++;
}
return `${size.toFixed(1)} ${units[unitIndex]}`;
}
</script>
<div class="relative group">
<button
class="h-14 {className} flex items-center space-x-3 bg-white dark:bg-gray-800 rounded-xl border border-gray-100 dark:border-gray-800 text-left"
class="h-14 {className} flex items-center space-x-3 {colorClassName} rounded-xl border border-gray-100 dark:border-gray-800 text-left"
type="button"
on:click={async () => {
if (clickHandler === null) {
@ -92,11 +108,11 @@
</div>
<div class="flex flex-col justify-center -space-y-0.5 pl-1.5 pr-4 w-full">
<div class=" dark:text-gray-100 text-sm font-medium line-clamp-1">
<div class=" dark:text-gray-100 text-sm font-medium line-clamp-1 mb-1">
{name}
</div>
<div class=" text-gray-500 text-xs">
<div class=" flex justify-between text-gray-500 text-xs">
{#if type === 'file'}
{$i18n.t('File')}
{:else if type === 'doc'}
@ -106,6 +122,9 @@
{:else}
<span class=" capitalize">{type}</span>
{/if}
{#if size}
<span class="capitalize">{formatSize(size)}</span>
{/if}
</div>
</div>
</button>

View File

@ -13,13 +13,13 @@
<div class={outerClassName}>
<input
class={inputClassName}
class={`${inputClassName} ${show ? '' : 'password'}`}
{placeholder}
bind:value
required={required && !readOnly}
disabled={readOnly}
autocomplete="off"
{...{ type: show ? 'text' : 'password' }}
type="text"
/>
<button
class={showButtonClassName}

View File

@ -42,7 +42,7 @@
{/each}
</datalist>
<button type="button" on:click={addTagHandler}>
<button type="button" aria-label={$i18n.t('Save Tag')} on:click={addTagHandler}>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 16 16"
@ -63,6 +63,7 @@
<button
class=" cursor-pointer self-center p-0.5 flex h-fit items-center dark:hover:bg-gray-700 rounded-full transition border dark:border-gray-600 border-dashed"
type="button"
aria-label={$i18n.t('Add Tag')}
on:click={() => {
showTagInput = !showTagInput;
}}

View File

@ -1,5 +1,6 @@
<script>
import { onMount, getContext } from 'svelte';
import { onMount, getContext, createEventDispatcher } from 'svelte';
const dispatch = createEventDispatcher();
const i18n = getContext('i18n');
import Switch from './Switch.svelte';
@ -8,7 +9,7 @@
export let valves = {};
</script>
{#if valvesSpec}
{#if valvesSpec && Object.keys(valvesSpec?.properties ?? {}).length}
{#each Object.keys(valvesSpec.properties) as property, idx}
<div class=" py-0.5 w-full justify-between">
<div class="flex w-full justify-between">
@ -28,6 +29,8 @@
(valves[property] ?? null) === null
? valvesSpec.properties[property]?.default ?? ''
: null;
dispatch('change');
}}
>
{#if (valves[property] ?? null) === null}
@ -52,6 +55,9 @@
<select
class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none border border-gray-100 dark:border-gray-800"
bind:value={valves[property]}
on:change={() => {
dispatch('change');
}}
>
{#each valvesSpec.properties[property].enum as option}
<option value={option} selected={option === valves[property]}>
@ -66,7 +72,12 @@
</div>
<div class=" pr-2">
<Switch bind:state={valves[property]} />
<Switch
bind:state={valves[property]}
on:change={() => {
dispatch('change');
}}
/>
</div>
</div>
{:else}
@ -77,6 +88,9 @@
bind:value={valves[property]}
autocomplete="off"
required
on:change={() => {
dispatch('change');
}}
/>
{/if}
</div>
@ -91,5 +105,5 @@
</div>
{/each}
{:else}
<div class="text-sm">No valves</div>
<div class="text-xs">No valves</div>
{/if}

View File

@ -35,12 +35,12 @@
SUPPORTED_FILE_TYPE.includes(file['type']) ||
SUPPORTED_FILE_EXTENSIONS.includes(file.name.split('.').at(-1))
) {
uploadDoc(file);
uploadDoc(file, tags);
} else {
toast.error(
`Unknown File Type '${file['type']}', but accepting and treating as plain text`
);
uploadDoc(file);
uploadDoc(file, tags);
}
}

View File

@ -238,7 +238,7 @@
<div class="px-2.5 flex justify-between space-x-1 text-gray-600 dark:text-gray-400">
<a
id="sidebar-new-chat-button"
class="flex flex-1 justify-between rounded-xl px-2 py-2 hover:bg-gray-100 dark:hover:bg-gray-850 transition"
class="flex flex-1 justify-between rounded-xl px-2 py-2 hover:bg-gray-100 dark:hover:bg-gray-900 transition"
href="/"
draggable="false"
on:click={async () => {
@ -282,7 +282,7 @@
</a>
<button
class=" cursor-pointer px-2 py-2 flex rounded-xl hover:bg-gray-100 dark:hover:bg-gray-850 transition"
class=" cursor-pointer px-2 py-2 flex rounded-xl hover:bg-gray-100 dark:hover:bg-gray-900 transition"
on:click={() => {
showSidebar.set(!$showSidebar);
}}

View File

@ -51,7 +51,7 @@
await documents.set(await getDocs(localStorage.token));
};
const uploadDoc = async (file) => {
const uploadDoc = async (file, tags?: object) => {
console.log(file);
// Check if the file is an audio file and transcribe/convert it to text file
if (['audio/mpeg', 'audio/wav'].includes(file['type'])) {
@ -84,7 +84,12 @@
res.collection_name,
res.filename,
transformFileName(res.filename),
res.filename
res.filename,
tags?.length > 0
? {
tags: tags
}
: null
).catch((error) => {
toast.error(error);
return null;
@ -239,6 +244,7 @@
<div>
<button
class=" px-2 py-2 rounded-xl border border-gray-200 dark:border-gray-600 dark:border-0 hover:bg-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700 transition font-medium text-sm flex items-center space-x-1"
aria-label={$i18n.t('Add Docs')}
on:click={() => {
showAddDocModal = true;
}}
@ -441,6 +447,7 @@
<button
class="self-center w-fit text-sm z-20 px-2 py-2 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
type="button"
aria-label={$i18n.t('Edit Doc')}
on:click={async (e) => {
e.stopPropagation();
showEditDocModal = !showEditDocModal;
@ -488,6 +495,7 @@
<button
class="self-center w-fit text-sm px-2 py-2 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
type="button"
aria-label={$i18n.t('Delete Doc')}
on:click={(e) => {
e.stopPropagation();
@ -541,7 +549,8 @@
doc.collection_name,
doc.filename,
doc.name,
doc.title
doc.title,
doc.content
).catch((error) => {
toast.error(error);
return null;

View File

@ -0,0 +1,59 @@
<script lang="ts">
import { getContext, onMount } from 'svelte';
import Checkbox from '$lib/components/common/Checkbox.svelte';
import Tooltip from '$lib/components/common/Tooltip.svelte';
const i18n = getContext('i18n');
export let actions = [];
export let selectedActionIds = [];
let _actions = {};
onMount(() => {
_actions = actions.reduce((acc, action) => {
acc[action.id] = {
...action,
selected: selectedActionIds.includes(action.id)
};
return acc;
}, {});
});
</script>
<div>
<div class="flex w-full justify-between mb-1">
<div class=" self-center text-sm font-semibold">{$i18n.t('Actions')}</div>
</div>
<div class=" text-xs dark:text-gray-500">
{$i18n.t('To select actions here, add them to the "Functions" workspace first.')}
</div>
<div class="flex flex-col">
{#if actions.length > 0}
<div class=" flex items-center mt-2 flex-wrap">
{#each Object.keys(_actions) as action, actionIdx}
<div class=" flex items-center gap-2 mr-3">
<div class="self-center flex items-center">
<Checkbox
state={_actions[action].selected ? 'checked' : 'unchecked'}
on:change={(e) => {
_actions[action].selected = e.detail === 'checked';
selectedActionIds = Object.keys(_actions).filter((t) => _actions[t].selected);
}}
/>
</div>
<div class=" py-0.5 text-sm w-full capitalize font-medium">
<Tooltip content={_actions[action].meta.description}>
{_actions[action].name}
</Tooltip>
</div>
</div>
{/each}
</div>
{/if}
</div>
</div>

View File

@ -15,6 +15,7 @@
"Account": "الحساب",
"Account Activation Pending": "",
"Accurate information": "معلومات دقيقة",
"Actions": "",
"Active Users": "",
"Add": "أضف",
"Add a model id": "إضافة معرف نموذج",
@ -27,6 +28,7 @@
"Add Memory": "إضافة ذكرايات",
"Add message": "اضافة رسالة",
"Add Model": "اضافة موديل",
"Add Tag": "",
"Add Tags": "اضافة تاق",
"Add User": "اضافة مستخدم",
"Adjusting these settings will apply changes universally to all users.": "سيؤدي ضبط هذه الإعدادات إلى تطبيق التغييرات بشكل عام على كافة المستخدمين",
@ -168,6 +170,7 @@
"Delete chat": "حذف المحادثه",
"Delete Chat": "حذف المحادثه.",
"Delete chat?": "",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "أحذف هذا الرابط",
@ -211,6 +214,7 @@
"Edit Doc": "تعديل الملف",
"Edit Memory": "",
"Edit User": "تعديل المستخدم",
"ElevenLabs": "",
"Email": "البريد",
"Embedding Batch Size": "",
"Embedding Model": "نموذج التضمين",
@ -360,7 +364,6 @@
"Manage Models": "إدارة النماذج",
"Manage Ollama Models": "Ollama إدارة موديلات ",
"Manage Pipelines": "إدارة خطوط الأنابيب",
"Manage Valves": "",
"March": "مارس",
"Max Tokens (num_predict)": "ماكس توكنز (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "يمكن تنزيل 3 نماذج كحد أقصى في وقت واحد. الرجاء معاودة المحاولة في وقت لاحق.",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "لن تتم مشاركة الرسائل التي ترسلها بعد إنشاء الرابط الخاص بك. سيتمكن المستخدمون الذين لديهم عنوان URL من عرض الدردشة المشتركة",
"Min P": "",
"Minimum Score": "الحد الأدنى من النقاط",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -500,6 +504,7 @@
"Save": "حفظ",
"Save & Create": "حفظ وإنشاء",
"Save & Update": "حفظ وتحديث",
"Save Tag": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "لم يعد حفظ سجلات الدردشة مباشرة في مساحة تخزين متصفحك مدعومًا. يرجى تخصيص بعض الوقت لتنزيل وحذف سجلات الدردشة الخاصة بك عن طريق النقر على الزر أدناه. لا تقلق، يمكنك بسهولة إعادة استيراد سجلات الدردشة الخاصة بك إلى الواجهة الخلفية من خلاله",
"Scan": "مسح",
"Scan complete!": "تم المسح",
@ -621,6 +626,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
"To add documents here, upload them to the \"Documents\" workspace first.": "",
"to chat input.": "الى كتابة المحادثه",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "اليوم",

View File

@ -15,6 +15,7 @@
"Account": "Акаунт",
"Account Activation Pending": "",
"Accurate information": "Точни информация",
"Actions": "",
"Active Users": "",
"Add": "Добавяне",
"Add a model id": "Добавяне на ИД на модел",
@ -27,6 +28,7 @@
"Add Memory": "Добавяне на Памет",
"Add message": "Добавяне на съобщение",
"Add Model": "Добавяне на Модел",
"Add Tag": "",
"Add Tags": "добавяне на тагове",
"Add User": "Добавяне на потребител",
"Adjusting these settings will apply changes universally to all users.": "При промяна на тези настройки промените се прилагат за всички потребители.",
@ -168,6 +170,7 @@
"Delete chat": "Изтриване на чат",
"Delete Chat": "Изтриване на Чат",
"Delete chat?": "",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "Изтриване на този линк",
@ -211,6 +214,7 @@
"Edit Doc": "Редактиране на документ",
"Edit Memory": "",
"Edit User": "Редактиране на потребител",
"ElevenLabs": "",
"Email": "Имейл",
"Embedding Batch Size": "",
"Embedding Model": "Модел за вграждане",
@ -360,7 +364,6 @@
"Manage Models": "Управление на Моделите",
"Manage Ollama Models": "Управление на Ollama Моделите",
"Manage Pipelines": "Управление на тръбопроводи",
"Manage Valves": "",
"March": "Март",
"Max Tokens (num_predict)": "Макс токени (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Максимум 3 модели могат да бъдат сваляни едновременно. Моля, опитайте отново по-късно.",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Съобщенията, които изпращате след създаването на връзката, няма да бъдат споделяни. Потребителите с URL адреса ще могат да видят споделения чат.",
"Min P": "",
"Minimum Score": "Минимална оценка",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -500,6 +504,7 @@
"Save": "Запис",
"Save & Create": "Запис & Създаване",
"Save & Update": "Запис & Актуализиране",
"Save Tag": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Запазването на чат логове директно в хранилището на вашия браузър вече не се поддържа. Моля, отделете малко време, за да изтеглите и изтриете чат логовете си, като щракнете върху бутона по-долу. Не се притеснявайте, можете лесно да импортирате отново чат логовете си в бекенда чрез",
"Scan": "Сканиране",
"Scan complete!": "Сканиране завършено!",
@ -617,6 +622,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
"To add documents here, upload them to the \"Documents\" workspace first.": "",
"to chat input.": "към чат входа.",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "днес",

View File

@ -15,6 +15,7 @@
"Account": "একাউন্ট",
"Account Activation Pending": "",
"Accurate information": "সঠিক তথ্য",
"Actions": "",
"Active Users": "",
"Add": "যোগ করুন",
"Add a model id": "একটি মডেল ID যোগ করুন",
@ -27,6 +28,7 @@
"Add Memory": "মেমোরি যোগ করুন",
"Add message": "মেসেজ যোগ করুন",
"Add Model": "মডেল যোগ করুন",
"Add Tag": "",
"Add Tags": "ট্যাগ যোগ করুন",
"Add User": "ইউজার যোগ করুন",
"Adjusting these settings will apply changes universally to all users.": "এই সেটিংগুলো পরিবর্তন করলে তা সব ইউজারের উপরেই প্রয়োগ করা হবে",
@ -168,6 +170,7 @@
"Delete chat": "চ্যাট মুছে ফেলুন",
"Delete Chat": "চ্যাট মুছে ফেলুন",
"Delete chat?": "",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "এই লিংক মুছে ফেলুন",
@ -211,6 +214,7 @@
"Edit Doc": "ডকুমেন্ট এডিট করুন",
"Edit Memory": "",
"Edit User": "ইউজার এডিট করুন",
"ElevenLabs": "",
"Email": "ইমেইল",
"Embedding Batch Size": "",
"Embedding Model": "ইমেজ ইমেবডিং মডেল",
@ -360,7 +364,6 @@
"Manage Models": "মডেলসমূহ ব্যবস্থাপনা করুন",
"Manage Ollama Models": "Ollama মডেলসূহ ব্যবস্থাপনা করুন",
"Manage Pipelines": "পাইপলাইন পরিচালনা করুন",
"Manage Valves": "",
"March": "মার্চ",
"Max Tokens (num_predict)": "সর্বোচ্চ টোকেন (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "একসঙ্গে সর্বোচ্চ তিনটি মডেল ডাউনলোড করা যায়। দয়া করে পরে আবার চেষ্টা করুন।",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "আপনার লিঙ্ক তৈরি করার পরে আপনার পাঠানো বার্তাগুলি শেয়ার করা হবে না। ইউআরএল ব্যবহারকারীরা শেয়ার করা চ্যাট দেখতে পারবেন।",
"Min P": "",
"Minimum Score": "Minimum Score",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -500,6 +504,7 @@
"Save": "সংরক্ষণ",
"Save & Create": "সংরক্ষণ এবং তৈরি করুন",
"Save & Update": "সংরক্ষণ এবং আপডেট করুন",
"Save Tag": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "মাধ্যমে",
"Scan": "স্ক্যান",
"Scan complete!": "স্ক্যান সম্পন্ন হয়েছে!",
@ -617,6 +622,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
"To add documents here, upload them to the \"Documents\" workspace first.": "",
"to chat input.": "চ্যাট ইনপুটে",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "আজ",

View File

@ -15,6 +15,7 @@
"Account": "Compte",
"Account Activation Pending": "Activació del compte pendent",
"Accurate information": "Informació precisa",
"Actions": "",
"Active Users": "Usuaris actius",
"Add": "Afegir",
"Add a model id": "Afegeix un identificador de model",
@ -27,6 +28,7 @@
"Add Memory": "Afegir memòria",
"Add message": "Afegir un missatge",
"Add Model": "Afegir un model",
"Add Tag": "",
"Add Tags": "Afegir etiquetes",
"Add User": "Afegir un usuari",
"Adjusting these settings will apply changes universally to all users.": "Si ajustes aquesta preferència, els canvis s'aplicaran de manera universal a tots els usuaris.",
@ -168,6 +170,7 @@
"Delete chat": "Eliminar xat",
"Delete Chat": "Eliminar xat",
"Delete chat?": "Eliminar el xat?",
"Delete Doc": "",
"Delete function?": "Eliminar funció?",
"Delete prompt?": "Eliminar indicació?",
"delete this link": "Eliminar aquest enllaç",
@ -211,6 +214,7 @@
"Edit Doc": "Editar el document",
"Edit Memory": "Editar la memòria",
"Edit User": "Editar l'usuari",
"ElevenLabs": "",
"Email": "Correu electrònic",
"Embedding Batch Size": "Mida del lot d'incrustació",
"Embedding Model": "Model d'incrustació",
@ -360,7 +364,6 @@
"Manage Models": "Gestionar els models",
"Manage Ollama Models": "Gestionar els models Ollama",
"Manage Pipelines": "Gestionar les Pipelines",
"Manage Valves": "Gestionar les Valves",
"March": "Març",
"Max Tokens (num_predict)": "Nombre màxim de Tokens (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Es poden descarregar un màxim de 3 models simultàniament. Si us plau, prova-ho més tard.",
@ -372,6 +375,7 @@
"Memory deleted successfully": "Memòria eliminada correctament",
"Memory updated successfully": "Memòria actualitzada correctament",
"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.",
"Min P": "",
"Minimum Score": "Puntuació mínima",
"Mirostat": "Mirostat",
"Mirostat Eta": "Eta de Mirostat",
@ -500,6 +504,7 @@
"Save": "Desar",
"Save & Create": "Desar i crear",
"Save & Update": "Desar i actualitzar",
"Save Tag": "",
"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",
"Scan": "Escanejar",
"Scan complete!": "Escaneigr completat!",
@ -618,6 +623,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Per accedir a la WebUI, poseu-vos en contacte amb l'administrador. Els administradors poden gestionar els estats dels usuaris des del tauler d'administració.",
"To add documents here, upload them to the \"Documents\" workspace first.": "Per afegir documents aquí, puja-ls primer a l'espai de treball \"Documents\".",
"to chat input.": "a l'entrada del xat.",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "Per seleccionar filtres aquí, afegeix-los primer a l'espai de treball \"Funcions\".",
"To select toolkits here, add them to the \"Tools\" workspace first.": "Per seleccionar kits d'eines aquí, afegeix-los primer a l'espai de treball \"Eines\".",
"Today": "Avui",

View File

@ -15,6 +15,7 @@
"Account": "Account",
"Account Activation Pending": "",
"Accurate information": "",
"Actions": "",
"Active Users": "",
"Add": "",
"Add a model id": "",
@ -27,6 +28,7 @@
"Add Memory": "",
"Add message": "Pagdugang og mensahe",
"Add Model": "",
"Add Tag": "",
"Add Tags": "idugang ang mga tag",
"Add User": "",
"Adjusting these settings will apply changes universally to all users.": "Ang pag-adjust niini nga mga setting magamit ang mga pagbag-o sa tanan nga tiggamit.",
@ -168,6 +170,7 @@
"Delete chat": "Pagtangtang sa panaghisgot",
"Delete Chat": "",
"Delete chat?": "",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "",
@ -211,6 +214,7 @@
"Edit Doc": "I-edit ang dokumento",
"Edit Memory": "",
"Edit User": "I-edit ang tiggamit",
"ElevenLabs": "",
"Email": "E-mail",
"Embedding Batch Size": "",
"Embedding Model": "",
@ -360,7 +364,6 @@
"Manage Models": "Pagdumala sa mga templates",
"Manage Ollama Models": "Pagdumala sa mga modelo sa Ollama",
"Manage Pipelines": "",
"Manage Valves": "",
"March": "",
"Max Tokens (num_predict)": "",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Ang labing taas nga 3 nga mga disenyo mahimong ma-download nga dungan. ",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "",
"Min P": "",
"Minimum Score": "",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -500,6 +504,7 @@
"Save": "Tipigi",
"Save & Create": "I-save ug Paghimo",
"Save & Update": "I-save ug I-update",
"Save Tag": "",
"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. ",
"Scan": "Aron ma-scan",
"Scan complete!": "Nakompleto ang pag-scan!",
@ -617,6 +622,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
"To add documents here, upload them to the \"Documents\" workspace first.": "",
"to chat input.": "sa entrada sa iring.",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "",

View File

@ -15,6 +15,7 @@
"Account": "Konto",
"Account Activation Pending": "Kontoaktivierung ausstehend",
"Accurate information": "Präzise Information(en)",
"Actions": "",
"Active Users": "Aktive Benutzer",
"Add": "Hinzufügen",
"Add a model id": "Modell-ID hinzufügen",
@ -27,6 +28,7 @@
"Add Memory": "Erinnerung hinzufügen",
"Add message": "Nachricht hinzufügen",
"Add Model": "Modell hinzufügen",
"Add Tag": "Tag hinzufügen",
"Add Tags": "Tags hinzufügen",
"Add User": "Benutzer hinzufügen",
"Adjusting these settings will apply changes universally to all users.": "Das Anpassen dieser Einstellungen wird Änderungen universell auf alle Benutzer anwenden.",
@ -168,6 +170,7 @@
"Delete chat": "Unterhaltung löschen",
"Delete Chat": "Unterhaltung löschen",
"Delete chat?": "Unterhaltung löschen?",
"Delete Doc": "Dokument löschen",
"Delete function?": "Funktion löschen?",
"Delete prompt?": "Prompt löschen?",
"delete this link": "diesen Link löschen",
@ -211,6 +214,7 @@
"Edit Doc": "Dokument bearbeiten",
"Edit Memory": "Erinnerungen bearbeiten",
"Edit User": "Benutzer bearbeiten",
"ElevenLabs": "",
"Email": "E-Mail",
"Embedding Batch Size": "Embedding-Stapelgröße",
"Embedding Model": "Embedding-Modell",
@ -360,7 +364,6 @@
"Manage Models": "Modelle verwalten",
"Manage Ollama Models": "Ollama-Modelle verwalten",
"Manage Pipelines": "Pipelines verwalten",
"Manage Valves": "Valves verwalten",
"March": "März",
"Max Tokens (num_predict)": "Maximale Tokenanzahl (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Es können maximal 3 Modelle gleichzeitig heruntergeladen werden. Bitte versuchen Sie es später erneut.",
@ -372,6 +375,7 @@
"Memory deleted successfully": "Erinnerung erfolgreich gelöscht",
"Memory updated successfully": "Erinnerung erfolgreich aktualisiert",
"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 die freigegebene Unterhaltung einsehen.",
"Min P": "",
"Minimum Score": "Mindestpunktzahl",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -500,6 +504,7 @@
"Save": "Speichern",
"Save & Create": "Erstellen",
"Save & Update": "Aktualisieren",
"Save Tag": "Tag speichern",
"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 Unterhaltungen im Browser-Speicher wird nicht mehr unterstützt. Bitte nehmen Sie einen Moment Zeit, um Ihre Unterhaltungen zu exportieren und zu löschen, indem Sie auf die Schaltfläche unten klicken. Keine Sorge, Sie können Ihre Unterhaltungen problemlos über das Backend wieder importieren.",
"Scan": "Scannen",
"Scan complete!": "Scan abgeschlossen!",
@ -617,6 +622,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Um auf das WebUI zugreifen zu können, wenden Sie sich bitte an einen Administrator. Administratoren können den Benutzerstatus über das Admin-Panel verwalten.",
"To add documents here, upload them to the \"Documents\" workspace first.": "Um Dokumente hinzuzufügen, laden Sie sie zuerst im Arbeitsbereich „Dokumente“ hoch.",
"to chat input.": "zum Eingabefeld der Unterhaltung.",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "Um Filter auszuwählen, fügen Sie diese zunächst dem Arbeitsbereich „Funktionen“ hinzu.",
"To select toolkits here, add them to the \"Tools\" workspace first.": "Um Toolkits auszuwählen, fügen Sie sie zunächst dem Arbeitsbereich „Werkzeuge“ hinzu.",
"Today": "Heute",

View File

@ -15,6 +15,7 @@
"Account": "Account",
"Account Activation Pending": "",
"Accurate information": "",
"Actions": "",
"Active Users": "",
"Add": "",
"Add a model id": "",
@ -27,6 +28,7 @@
"Add Memory": "",
"Add message": "Add Prompt",
"Add Model": "",
"Add Tag": "",
"Add Tags": "",
"Add User": "",
"Adjusting these settings will apply changes universally to all users.": "Adjusting these settings will apply changes to all users. Such universal, very wow.",
@ -168,6 +170,7 @@
"Delete chat": "Delete chat",
"Delete Chat": "",
"Delete chat?": "",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "",
@ -211,6 +214,7 @@
"Edit Doc": "Edit Doge",
"Edit Memory": "",
"Edit User": "Edit Wowser",
"ElevenLabs": "",
"Email": "Email",
"Embedding Batch Size": "",
"Embedding Model": "",
@ -360,7 +364,6 @@
"Manage Models": "Manage Wowdels",
"Manage Ollama Models": "Manage Ollama Wowdels",
"Manage Pipelines": "",
"Manage Valves": "",
"March": "",
"Max Tokens (num_predict)": "",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maximum of 3 models can be downloaded simultaneously. Please try again later.",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "",
"Min P": "",
"Minimum Score": "",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -500,6 +504,7 @@
"Save": "Save much wow",
"Save & Create": "Save & Create much create",
"Save & Update": "Save & Update much update",
"Save Tag": "",
"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",
"Scan": "Scan much scan",
"Scan complete!": "Scan complete! Very wow!",
@ -619,6 +624,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
"To add documents here, upload them to the \"Documents\" workspace first.": "",
"to chat input.": "to chat input. Very chat.",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "",

View File

@ -15,6 +15,7 @@
"Account": "",
"Account Activation Pending": "",
"Accurate information": "",
"Actions": "",
"Active Users": "",
"Add": "",
"Add a model id": "",
@ -27,6 +28,7 @@
"Add Memory": "",
"Add message": "",
"Add Model": "",
"Add Tag": "",
"Add Tags": "",
"Add User": "",
"Adjusting these settings will apply changes universally to all users.": "",
@ -168,6 +170,7 @@
"Delete chat": "",
"Delete Chat": "",
"Delete chat?": "",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "",
@ -211,6 +214,7 @@
"Edit Doc": "",
"Edit Memory": "",
"Edit User": "",
"ElevenLabs": "",
"Email": "",
"Embedding Batch Size": "",
"Embedding Model": "",
@ -360,7 +364,6 @@
"Manage Models": "",
"Manage Ollama Models": "",
"Manage Pipelines": "",
"Manage Valves": "",
"March": "",
"Max Tokens (num_predict)": "",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "",
"Min P": "",
"Minimum Score": "",
"Mirostat": "",
"Mirostat Eta": "",
@ -500,6 +504,7 @@
"Save": "",
"Save & Create": "",
"Save & Update": "",
"Save Tag": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "",
"Scan": "",
"Scan complete!": "",
@ -617,6 +622,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
"To add documents here, upload them to the \"Documents\" workspace first.": "",
"to chat input.": "",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "",

View File

@ -15,6 +15,7 @@
"Account": "",
"Account Activation Pending": "",
"Accurate information": "",
"Actions": "",
"Active Users": "",
"Add": "",
"Add a model id": "",
@ -27,6 +28,7 @@
"Add Memory": "",
"Add message": "",
"Add Model": "",
"Add Tag": "",
"Add Tags": "",
"Add User": "",
"Adjusting these settings will apply changes universally to all users.": "",
@ -168,6 +170,7 @@
"Delete chat": "",
"Delete Chat": "",
"Delete chat?": "",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "",
@ -211,6 +214,7 @@
"Edit Doc": "",
"Edit Memory": "",
"Edit User": "",
"ElevenLabs": "",
"Email": "",
"Embedding Batch Size": "",
"Embedding Model": "",
@ -360,7 +364,6 @@
"Manage Models": "",
"Manage Ollama Models": "",
"Manage Pipelines": "",
"Manage Valves": "",
"March": "",
"Max Tokens (num_predict)": "",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "",
"Min P": "",
"Minimum Score": "",
"Mirostat": "",
"Mirostat Eta": "",
@ -500,6 +504,7 @@
"Save": "",
"Save & Create": "",
"Save & Update": "",
"Save Tag": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "",
"Scan": "",
"Scan complete!": "",
@ -617,6 +622,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
"To add documents here, upload them to the \"Documents\" workspace first.": "",
"to chat input.": "",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "",

View File

@ -15,6 +15,7 @@
"Account": "Cuenta",
"Account Activation Pending": "Activación de cuenta pendiente",
"Accurate information": "Información precisa",
"Actions": "",
"Active Users": "Usuarios activos",
"Add": "Agregar",
"Add a model id": "Adición de un identificador de modelo",
@ -27,6 +28,7 @@
"Add Memory": "Agregar Memoria",
"Add message": "Agregar Prompt",
"Add Model": "Agregar Modelo",
"Add Tag": "",
"Add Tags": "agregar etiquetas",
"Add User": "Agregar Usuario",
"Adjusting these settings will apply changes universally to all users.": "Ajustar estas opciones aplicará los cambios universalmente a todos los usuarios.",
@ -168,6 +170,7 @@
"Delete chat": "Borrar chat",
"Delete Chat": "Borrar Chat",
"Delete chat?": "Borrar el chat?",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "Borrar este enlace",
@ -211,6 +214,7 @@
"Edit Doc": "Editar Documento",
"Edit Memory": "Editar Memoria",
"Edit User": "Editar Usuario",
"ElevenLabs": "",
"Email": "Email",
"Embedding Batch Size": "Tamaño de Embedding",
"Embedding Model": "Modelo de Embedding",
@ -360,7 +364,6 @@
"Manage Models": "Administrar Modelos",
"Manage Ollama Models": "Administrar Modelos Ollama",
"Manage Pipelines": "Administrar Pipelines",
"Manage Valves": "Gestionar Valves",
"March": "Marzo",
"Max Tokens (num_predict)": "Máximo de fichas (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Se pueden descargar un máximo de 3 modelos simultáneamente. Por favor, inténtelo de nuevo más tarde.",
@ -372,6 +375,7 @@
"Memory deleted successfully": "Memoria borrada correctamente",
"Memory updated successfully": "Memoria actualizada correctamente",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Los mensajes que envíe después de crear su enlace no se compartirán. Los usuarios con el enlace podrán ver el chat compartido.",
"Min P": "",
"Minimum Score": "Puntuación mínima",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -500,6 +504,7 @@
"Save": "Guardar",
"Save & Create": "Guardar y Crear",
"Save & Update": "Guardar y Actualizar",
"Save Tag": "",
"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 se admite guardar registros de chat directamente en el almacenamiento de su navegador. Tómese un momento para descargar y eliminar sus registros de chat haciendo clic en el botón a continuación. No te preocupes, puedes volver a importar fácilmente tus registros de chat al backend a través de",
"Scan": "Escanear",
"Scan complete!": "¡Escaneo completado!",
@ -618,6 +623,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Para acceder al interfaz de usuario web, por favor contacte al administrador. Los administradores pueden administrar los estados de los usuarios desde el panel de administración.",
"To add documents here, upload them to the \"Documents\" workspace first.": "Para agregar documentos aquí, subalos al área de trabajo \"Documentos\" primero.",
"to chat input.": "a la entrada del chat.",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "Para seleccionar filtros aquí, agreguelos al área de trabajo \"Funciones\" primero.",
"To select toolkits here, add them to the \"Tools\" workspace first.": "Para seleccionar herramientas aquí, agreguelas al área de trabajo \"Herramientas\" primero.",
"Today": "Hoy",

View File

@ -15,6 +15,7 @@
"Account": "حساب کاربری",
"Account Activation Pending": "",
"Accurate information": "اطلاعات دقیق",
"Actions": "",
"Active Users": "",
"Add": "اضافه کردن",
"Add a model id": "افزودن شناسه مدل",
@ -27,6 +28,7 @@
"Add Memory": "اضافه کردن یادگیری",
"Add message": "اضافه کردن پیغام",
"Add Model": "اضافه کردن مدل",
"Add Tag": "",
"Add Tags": "اضافه کردن تگ\u200cها",
"Add User": "اضافه کردن کاربر",
"Adjusting these settings will apply changes universally to all users.": "با تنظیم این تنظیمات، تغییرات به طور کلی برای همه کاربران اعمال می شود.",
@ -168,6 +170,7 @@
"Delete chat": "حذف گپ",
"Delete Chat": "حذف گپ",
"Delete chat?": "",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "حذف این لینک",
@ -211,6 +214,7 @@
"Edit Doc": "ویرایش سند",
"Edit Memory": "",
"Edit User": "ویرایش کاربر",
"ElevenLabs": "",
"Email": "ایمیل",
"Embedding Batch Size": "",
"Embedding Model": "مدل پیدائش",
@ -360,7 +364,6 @@
"Manage Models": "مدیریت مدل\u200cها",
"Manage Ollama Models": "مدیریت مدل\u200cهای اولاما",
"Manage Pipelines": "مدیریت خطوط لوله",
"Manage Valves": "",
"March": "مارچ",
"Max Tokens (num_predict)": "توکنهای بیشینه (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "حداکثر 3 مدل را می توان به طور همزمان دانلود کرد. لطفاً بعداً دوباره امتحان کنید.",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "پیام های شما بعد از ایجاد لینک شما به اشتراک نمی گردد. کاربران با لینک URL می توانند چت اشتراک را مشاهده کنند.",
"Min P": "",
"Minimum Score": "نماد کمینه",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -500,6 +504,7 @@
"Save": "ذخیره",
"Save & Create": "ذخیره و ایجاد",
"Save & Update": "ذخیره و به\u200cروزرسانی",
"Save Tag": "",
"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": "ذخیره گزارش\u200cهای چت مستقیماً در حافظه مرورگر شما دیگر پشتیبانی نمی\u200cشود. لطفاً با کلیک بر روی دکمه زیر، چند لحظه برای دانلود و حذف گزارش های چت خود وقت بگذارید. نگران نباشید، شما به راحتی می توانید گزارش های چت خود را از طریق بکند دوباره وارد کنید",
"Scan": "اسکن",
"Scan complete!": "اسکن کامل شد!",
@ -617,6 +622,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
"To add documents here, upload them to the \"Documents\" workspace first.": "",
"to chat input.": "در ورودی گپ.",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "امروز",

View File

@ -15,6 +15,7 @@
"Account": "Tili",
"Account Activation Pending": "",
"Accurate information": "Tarkkaa tietoa",
"Actions": "",
"Active Users": "",
"Add": "Lisää",
"Add a model id": "Mallitunnuksen lisääminen",
@ -27,6 +28,7 @@
"Add Memory": "Lisää muistia",
"Add message": "Lisää viesti",
"Add Model": "Lisää malli",
"Add Tag": "",
"Add Tags": "Lisää tageja",
"Add User": "Lisää käyttäjä",
"Adjusting these settings will apply changes universally to all users.": "Näiden asetusten säätäminen vaikuttaa kaikkiin käyttäjiin.",
@ -168,6 +170,7 @@
"Delete chat": "Poista keskustelu",
"Delete Chat": "Poista keskustelu",
"Delete chat?": "",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "poista tämä linkki",
@ -211,6 +214,7 @@
"Edit Doc": "Muokkaa asiakirjaa",
"Edit Memory": "",
"Edit User": "Muokkaa käyttäjää",
"ElevenLabs": "",
"Email": "Sähköposti",
"Embedding Batch Size": "",
"Embedding Model": "Upotusmalli",
@ -360,7 +364,6 @@
"Manage Models": "Hallitse malleja",
"Manage Ollama Models": "Hallitse Ollama-malleja",
"Manage Pipelines": "Hallitse putkia",
"Manage Valves": "",
"March": "maaliskuu",
"Max Tokens (num_predict)": "Tokenien enimmäismäärä (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Enintään 3 mallia voidaan ladata samanaikaisesti. Yritä myöhemmin uudelleen.",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"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ämiäsi viestejä ei jaeta. Käyttäjät, joilla on URL-osoite, voivat tarkastella jaettua keskustelua.",
"Min P": "",
"Minimum Score": "Vähimmäispisteet",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -500,6 +504,7 @@
"Save": "Tallenna",
"Save & Create": "Tallenna ja luo",
"Save & Update": "Tallenna ja päivitä",
"Save Tag": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Keskustelulokien tallentaminen suoraan selaimen tallennustilaan ei ole enää tuettua. Lataa ja poista keskustelulokit napsauttamalla alla olevaa painiketta. Älä huoli, voit helposti tuoda keskustelulokit takaisin backendiin",
"Scan": "Skannaa",
"Scan complete!": "Skannaus valmis!",
@ -617,6 +622,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
"To add documents here, upload them to the \"Documents\" workspace first.": "",
"to chat input.": "keskustelusyötteeseen.",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "Tänään",

View File

@ -15,6 +15,7 @@
"Account": "Compte",
"Account Activation Pending": "Activation du compte en attente",
"Accurate information": "Information exacte",
"Actions": "",
"Active Users": "Utilisateurs actifs",
"Add": "Ajouter",
"Add a model id": "Ajouter un identifiant de modèle",
@ -27,6 +28,7 @@
"Add Memory": "Ajouter de la mémoire",
"Add message": "Ajouter un message",
"Add Model": "Ajouter un modèle",
"Add Tag": "",
"Add Tags": "Ajouter des balises",
"Add User": "Ajouter un Utilisateur",
"Adjusting these settings will apply changes universally to all users.": "L'ajustement de ces paramètres appliquera universellement les changements à tous les utilisateurs.",
@ -168,6 +170,7 @@
"Delete chat": "Supprimer la conversation",
"Delete Chat": "Supprimer la Conversation",
"Delete chat?": "Supprimer la conversation ?",
"Delete Doc": "",
"Delete function?": "Supprimer la fonction ?",
"Delete prompt?": "Supprimer la prompt ?",
"delete this link": "supprimer ce lien",
@ -211,6 +214,7 @@
"Edit Doc": "Modifier le document",
"Edit Memory": "Modifier la mémoire",
"Edit User": "Modifier l'utilisateur",
"ElevenLabs": "",
"Email": "E-mail",
"Embedding Batch Size": "Taille du lot d'encodage",
"Embedding Model": "Modèle d'embedding",
@ -360,7 +364,6 @@
"Manage Models": "Gérer les Modèles",
"Manage Ollama Models": "Gérer les modèles Ollama",
"Manage Pipelines": "Gérer les pipelines",
"Manage Valves": "Gérer les vannes",
"March": "Mars",
"Max Tokens (num_predict)": "Tokens maximaux (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Un maximum de 3 modèles peut être téléchargé en même temps. Veuillez réessayer ultérieurement.",
@ -372,6 +375,7 @@
"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",
"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é.",
"Min P": "",
"Minimum Score": "Score minimal",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -500,6 +504,7 @@
"Save": "Enregistrer",
"Save & Create": "Enregistrer & Créer",
"Save & Update": "Enregistrer & Mettre à jour",
"Save Tag": "",
"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",
"Scan": "Scanner",
"Scan complete!": "Scan terminé !",
@ -618,6 +623,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Pour accéder à l'interface Web, veuillez contacter l'administrateur. Les administrateurs peuvent gérer les statuts des utilisateurs depuis le panneau d'administration.",
"To add documents here, upload them to the \"Documents\" workspace first.": "Pour ajouter des documents ici, téléchargez-les d'abord dans l'espace de travail « Documents ». ",
"to chat input.": "à l'entrée de discussion.",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "Pour sélectionner des filtres ici, ajoutez-les d'abord à l'espace de travail « Fonctions ». ",
"To select toolkits here, add them to the \"Tools\" workspace first.": "Pour sélectionner des toolkits ici, ajoutez-les d'abord à l'espace de travail « Outils ». ",
"Today": "Aujourd'hui",

View File

@ -15,6 +15,7 @@
"Account": "Compte",
"Account Activation Pending": "Activation du compte en attente",
"Accurate information": "Information exacte",
"Actions": "",
"Active Users": "Utilisateurs actifs",
"Add": "Ajouter",
"Add a model id": "Ajouter un identifiant de modèle",
@ -27,6 +28,7 @@
"Add Memory": "Ajouter de la mémoire",
"Add message": "Ajouter un message",
"Add Model": "Ajouter un modèle",
"Add Tag": "",
"Add Tags": "Ajouter des balises",
"Add User": "Ajouter un Utilisateur",
"Adjusting these settings will apply changes universally to all users.": "L'ajustement de ces paramètres appliquera universellement les changements à tous les utilisateurs.",
@ -168,6 +170,7 @@
"Delete chat": "Supprimer la conversation",
"Delete Chat": "Supprimer la Conversation",
"Delete chat?": "Supprimer la conversation ?",
"Delete Doc": "",
"Delete function?": "Supprimer la fonction ?",
"Delete prompt?": "Supprimer la prompt ?",
"delete this link": "supprimer ce lien",
@ -211,6 +214,7 @@
"Edit Doc": "Modifier le document",
"Edit Memory": "Modifier la mémoire",
"Edit User": "Modifier l'utilisateur",
"ElevenLabs": "",
"Email": "E-mail",
"Embedding Batch Size": "Taille du lot d'encodage",
"Embedding Model": "Modèle d'embedding",
@ -360,7 +364,6 @@
"Manage Models": "Gérer les Modèles",
"Manage Ollama Models": "Gérer les modèles Ollama",
"Manage Pipelines": "Gérer les pipelines",
"Manage Valves": "Gérer les vannes",
"March": "Mars",
"Max Tokens (num_predict)": "Tokens maximaux (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Un maximum de 3 modèles peut être téléchargé en même temps. Veuillez réessayer ultérieurement.",
@ -372,6 +375,7 @@
"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",
"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é.",
"Min P": "",
"Minimum Score": "Score minimal",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -500,6 +504,7 @@
"Save": "Enregistrer",
"Save & Create": "Enregistrer & Créer",
"Save & Update": "Enregistrer & Mettre à jour",
"Save Tag": "",
"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",
"Scan": "Scanner",
"Scan complete!": "Scan terminé !",
@ -618,6 +623,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Pour accéder à l'interface Web, veuillez contacter l'administrateur. Les administrateurs peuvent gérer les statuts des utilisateurs depuis le panneau d'administration.",
"To add documents here, upload them to the \"Documents\" workspace first.": "Pour ajouter des documents ici, téléchargez-les d'abord dans l'espace de travail « Documents ». ",
"to chat input.": "à l'entrée de discussion.",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "Pour sélectionner des filtres ici, ajoutez-les d'abord à l'espace de travail « Fonctions ». ",
"To select toolkits here, add them to the \"Tools\" workspace first.": "Pour sélectionner des toolkits ici, ajoutez-les d'abord à l'espace de travail « Outils ». ",
"Today": "Aujourd'hui",

View File

@ -15,6 +15,7 @@
"Account": "חשבון",
"Account Activation Pending": "",
"Accurate information": "מידע מדויק",
"Actions": "",
"Active Users": "",
"Add": "הוסף",
"Add a model id": "הוספת מזהה דגם",
@ -27,6 +28,7 @@
"Add Memory": "הוסף זיכרון",
"Add message": "הוסף הודעה",
"Add Model": "הוסף מודל",
"Add Tag": "",
"Add Tags": "הוסף תגים",
"Add User": "הוסף משתמש",
"Adjusting these settings will apply changes universally to all users.": "התאמת הגדרות אלו תחול על כל המשתמשים.",
@ -168,6 +170,7 @@
"Delete chat": "מחק צ'אט",
"Delete Chat": "מחק צ'אט",
"Delete chat?": "",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "מחק את הקישור הזה",
@ -211,6 +214,7 @@
"Edit Doc": "ערוך מסמך",
"Edit Memory": "",
"Edit User": "ערוך משתמש",
"ElevenLabs": "",
"Email": "דוא\"ל",
"Embedding Batch Size": "",
"Embedding Model": "מודל הטמעה",
@ -360,7 +364,6 @@
"Manage Models": "נהל מודלים",
"Manage Ollama Models": "נהל מודלים של Ollama",
"Manage Pipelines": "ניהול צינורות",
"Manage Valves": "",
"March": "מרץ",
"Max Tokens (num_predict)": "מקסימום אסימונים (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "ניתן להוריד מקסימום 3 מודלים בו זמנית. אנא נסה שוב מאוחר יותר.",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "הודעות שתשלח לאחר יצירת הקישור לא ישותפו. משתמשים עם כתובת האתר יוכלו לצפות בצ'אט המשותף.",
"Min P": "",
"Minimum Score": "ציון מינימלי",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -500,6 +504,7 @@
"Save": "שמור",
"Save & Create": "שמור וצור",
"Save & Update": "שמור ועדכן",
"Save Tag": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "שמירת יומני צ'אט ישירות באחסון הדפדפן שלך אינה נתמכת יותר. אנא הקדש רגע להוריד ולמחוק את יומני הצ'אט שלך על ידי לחיצה על הכפתור למטה. אל דאגה, באפשרותך לייבא מחדש בקלות את יומני הצ'אט שלך לשרת האחורי דרך",
"Scan": "סרוק",
"Scan complete!": "הסריקה הושלמה!",
@ -618,6 +623,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
"To add documents here, upload them to the \"Documents\" workspace first.": "",
"to chat input.": "לקלטת שיחה.",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "היום",

View File

@ -15,6 +15,7 @@
"Account": "खाता",
"Account Activation Pending": "",
"Accurate information": "सटीक जानकारी",
"Actions": "",
"Active Users": "",
"Add": "जोड़ें",
"Add a model id": "मॉडल आईडी जोड़ना",
@ -27,6 +28,7 @@
"Add Memory": "मेमोरी जोड़ें",
"Add message": "संदेश डालें",
"Add Model": "मॉडल जोड़ें",
"Add Tag": "",
"Add Tags": "टैगों को जोड़ें",
"Add User": "उपयोगकर्ता जोड़ें",
"Adjusting these settings will apply changes universally to all users.": "इन सेटिंग्स को समायोजित करने से परिवर्तन सभी उपयोगकर्ताओं पर सार्वभौमिक रूप से लागू होंगे।",
@ -168,6 +170,7 @@
"Delete chat": "चैट हटाएं",
"Delete Chat": "चैट हटाएं",
"Delete chat?": "",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "इस लिंक को हटाएं",
@ -211,6 +214,7 @@
"Edit Doc": "दस्तावेज़ संपादित करें",
"Edit Memory": "",
"Edit User": "यूजर को संपादित करो",
"ElevenLabs": "",
"Email": "ईमेल",
"Embedding Batch Size": "",
"Embedding Model": "मॉडेल अनुकूलन",
@ -360,7 +364,6 @@
"Manage Models": "मॉडल प्रबंधित करें",
"Manage Ollama Models": "Ollama मॉडल प्रबंधित करें",
"Manage Pipelines": "पाइपलाइनों का प्रबंधन करें",
"Manage Valves": "",
"March": "मार्च",
"Max Tokens (num_predict)": "अधिकतम टोकन (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "अधिकतम 3 मॉडल एक साथ डाउनलोड किये जा सकते हैं। कृपया बाद में पुन: प्रयास करें।",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "अपना लिंक बनाने के बाद आपके द्वारा भेजे गए संदेश साझा नहीं किए जाएंगे। यूआरएल वाले यूजर्स शेयर की गई चैट देख पाएंगे।",
"Min P": "",
"Minimum Score": "न्यूनतम स्कोर",
"Mirostat": "मिरोस्टा",
"Mirostat Eta": "मिरोस्टा ईटा",
@ -500,6 +504,7 @@
"Save": "सहेजें",
"Save & Create": "सहेजें और बनाएं",
"Save & Update": "सहेजें और अपडेट करें",
"Save Tag": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "चैट लॉग को सीधे आपके ब्राउज़र के स्टोरेज में सहेजना अब समर्थित नहीं है। कृपया नीचे दिए गए बटन पर क्लिक करके डाउनलोड करने और अपने चैट लॉग को हटाने के लिए कुछ समय दें। चिंता न करें, आप आसानी से अपने चैट लॉग को बैकएंड पर पुनः आयात कर सकते हैं",
"Scan": "स्कैन",
"Scan complete!": "स्कैन पूरा हुआ!",
@ -617,6 +622,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
"To add documents here, upload them to the \"Documents\" workspace first.": "",
"to chat input.": "इनपुट चैट करने के लिए.",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "आज",

View File

@ -15,6 +15,7 @@
"Account": "Račun",
"Account Activation Pending": "",
"Accurate information": "Točne informacije",
"Actions": "",
"Active Users": "Aktivni korisnici",
"Add": "Dodaj",
"Add a model id": "Dodavanje ID-a modela",
@ -27,6 +28,7 @@
"Add Memory": "Dodaj memoriju",
"Add message": "Dodaj poruku",
"Add Model": "Dodaj model",
"Add Tag": "",
"Add Tags": "Dodaj oznake",
"Add User": "Dodaj korisnika",
"Adjusting these settings will apply changes universally to all users.": "Podešavanje će se primijeniti univerzalno na sve korisnike.",
@ -168,6 +170,7 @@
"Delete chat": "Izbriši razgovor",
"Delete Chat": "Izbriši razgovor",
"Delete chat?": "",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "izbriši ovu vezu",
@ -211,6 +214,7 @@
"Edit Doc": "Uredi dokument",
"Edit Memory": "",
"Edit User": "Uredi korisnika",
"ElevenLabs": "",
"Email": "Email",
"Embedding Batch Size": "Embedding - Veličina batch-a",
"Embedding Model": "Embedding model",
@ -360,7 +364,6 @@
"Manage Models": "Upravljanje modelima",
"Manage Ollama Models": "Upravljanje Ollama modelima",
"Manage Pipelines": "Upravljanje cjevovodima",
"Manage Valves": "",
"March": "Ožujak",
"Max Tokens (num_predict)": "Maksimalan broj tokena (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maksimalno 3 modela se mogu preuzeti istovremeno. Pokušajte ponovo kasnije.",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"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.",
"Min P": "",
"Minimum Score": "Minimalna ocjena",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -500,6 +504,7 @@
"Save": "Spremi",
"Save & Create": "Spremi i stvori",
"Save & Update": "Spremi i ažuriraj",
"Save Tag": "",
"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",
"Scan": "Skeniraj",
"Scan complete!": "Skeniranje dovršeno!",
@ -618,6 +623,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Za pristup WebUI-u obratite se administratoru. Administratori mogu upravljati statusima korisnika s Admin panela.",
"To add documents here, upload them to the \"Documents\" workspace first.": "Da biste ovdje dodali dokumente, prvo ih prenesite u radni prostor \"Dokumenti\".",
"to chat input.": "u unos razgovora.",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "Danas",

View File

@ -15,6 +15,7 @@
"Account": "Akun",
"Account Activation Pending": "Aktivasi Akun Tertunda",
"Accurate information": "Informasi yang akurat",
"Actions": "",
"Active Users": "Pengguna Aktif",
"Add": "Tambah",
"Add a model id": "Tambahkan id model",
@ -27,6 +28,7 @@
"Add Memory": "Menambahkan Memori",
"Add message": "Tambahkan pesan",
"Add Model": "Tambahkan Model",
"Add Tag": "",
"Add Tags": "Tambahkan Tag",
"Add User": "Tambah Pengguna",
"Adjusting these settings will apply changes universally to all users.": "Menyesuaikan pengaturan ini akan menerapkan perubahan secara universal ke semua pengguna.",
@ -168,6 +170,7 @@
"Delete chat": "Menghapus obrolan",
"Delete Chat": "Menghapus Obrolan",
"Delete chat?": "Menghapus obrolan?",
"Delete Doc": "",
"Delete function?": "Fungsi hapus?",
"Delete prompt?": "Perintah hapus?",
"delete this link": "hapus tautan ini",
@ -211,6 +214,7 @@
"Edit Doc": "Edit Dokumen",
"Edit Memory": "Edit Memori",
"Edit User": "Edit Pengguna",
"ElevenLabs": "",
"Email": "Email",
"Embedding Batch Size": "Menyematkan Ukuran Batch",
"Embedding Model": "Model Penyematan",
@ -360,7 +364,6 @@
"Manage Models": "Kelola Model",
"Manage Ollama Models": "Mengelola Model Ollama",
"Manage Pipelines": "Mengelola Saluran Pipa",
"Manage Valves": "Kelola Katup",
"March": "Maret",
"Max Tokens (num_predict)": "Token Maksimal (num_prediksi)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maksimal 3 model dapat diunduh secara bersamaan. Silakan coba lagi nanti.",
@ -372,6 +375,7 @@
"Memory deleted successfully": "Memori berhasil dihapus",
"Memory updated successfully": "Memori berhasil diperbarui",
"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.",
"Min P": "",
"Minimum Score": "Skor Minimum",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -500,6 +504,7 @@
"Save": "Simpan",
"Save & Create": "Simpan & Buat",
"Save & Update": "Simpan & Perbarui",
"Save Tag": "",
"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",
"Scan": "Pindai",
"Scan complete!": "Pindai selesai!",
@ -617,6 +622,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Untuk mengakses WebUI, hubungi administrator. Admin dapat mengelola status pengguna dari Panel Admin.",
"To add documents here, upload them to the \"Documents\" workspace first.": "Untuk menambahkan dokumen di sini, unggah dokumen ke ruang kerja \"Dokumen\" terlebih dahulu.",
"to chat input.": "Untuk memasukkan input obrolan.",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "Untuk memilih filter di sini, tambahkan filter ke ruang kerja \"Fungsi\" terlebih dahulu.",
"To select toolkits here, add them to the \"Tools\" workspace first.": "Untuk memilih perangkat di sini, tambahkan ke ruang kerja \"Alat\" terlebih dahulu.",
"Today": "Hari ini",

View File

@ -15,6 +15,7 @@
"Account": "Account",
"Account Activation Pending": "",
"Accurate information": "Informazioni accurate",
"Actions": "",
"Active Users": "",
"Add": "Aggiungi",
"Add a model id": "Aggiungere un ID modello",
@ -27,6 +28,7 @@
"Add Memory": "Aggiungi memoria",
"Add message": "Aggiungi messaggio",
"Add Model": "Aggiungi modello",
"Add Tag": "",
"Add Tags": "Aggiungi tag",
"Add User": "Aggiungi utente",
"Adjusting these settings will apply changes universally to all users.": "La modifica di queste impostazioni applicherà le modifiche universalmente a tutti gli utenti.",
@ -168,6 +170,7 @@
"Delete chat": "Elimina chat",
"Delete Chat": "Elimina chat",
"Delete chat?": "",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "elimina questo link",
@ -211,6 +214,7 @@
"Edit Doc": "Modifica documento",
"Edit Memory": "",
"Edit User": "Modifica utente",
"ElevenLabs": "",
"Email": "Email",
"Embedding Batch Size": "",
"Embedding Model": "Modello di embedding",
@ -360,7 +364,6 @@
"Manage Models": "Gestisci modelli",
"Manage Ollama Models": "Gestisci modelli Ollama",
"Manage Pipelines": "Gestire le pipeline",
"Manage Valves": "",
"March": "Marzo",
"Max Tokens (num_predict)": "Numero massimo di gettoni (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "È possibile scaricare un massimo di 3 modelli contemporaneamente. Riprova più tardi.",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"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.",
"Min P": "",
"Minimum Score": "Punteggio minimo",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -500,6 +504,7 @@
"Save": "Salva",
"Save & Create": "Salva e crea",
"Save & Update": "Salva e aggiorna",
"Save Tag": "",
"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",
"Scan": "Scansione",
"Scan complete!": "Scansione completata!",
@ -618,6 +623,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
"To add documents here, upload them to the \"Documents\" workspace first.": "",
"to chat input.": "all'input della chat.",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "Oggi",

View File

@ -15,6 +15,7 @@
"Account": "アカウント",
"Account Activation Pending": "",
"Accurate information": "情報の正確性",
"Actions": "",
"Active Users": "",
"Add": "追加",
"Add a model id": "モデル ID を追加する",
@ -27,6 +28,7 @@
"Add Memory": "メモリを追加",
"Add message": "メッセージを追加",
"Add Model": "モデルを追加",
"Add Tag": "",
"Add Tags": "タグを追加",
"Add User": "ユーザーを追加",
"Adjusting these settings will apply changes universally to all users.": "これらの設定を調整すると、すべてのユーザーに普遍的に変更が適用されます。",
@ -168,6 +170,7 @@
"Delete chat": "チャットを削除",
"Delete Chat": "チャットを削除",
"Delete chat?": "",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "このリンクを削除します",
@ -211,6 +214,7 @@
"Edit Doc": "ドキュメントを編集",
"Edit Memory": "",
"Edit User": "ユーザーを編集",
"ElevenLabs": "",
"Email": "メールアドレス",
"Embedding Batch Size": "",
"Embedding Model": "埋め込みモデル",
@ -360,7 +364,6 @@
"Manage Models": "モデルを管理",
"Manage Ollama Models": "Ollama モデルを管理",
"Manage Pipelines": "パイプラインの管理",
"Manage Valves": "",
"March": "3月",
"Max Tokens (num_predict)": "最大トークン数 (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "同時にダウンロードできるモデルは最大 3 つです。後でもう一度お試しください。",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "リンクを作成した後、送信したメッセージは共有されません。URL を持つユーザーは共有チャットを閲覧できます。",
"Min P": "",
"Minimum Score": "最低スコア",
"Mirostat": "ミロスタット",
"Mirostat Eta": "ミロスタット Eta",
@ -500,6 +504,7 @@
"Save": "保存",
"Save & Create": "保存して作成",
"Save & Update": "保存して更新",
"Save Tag": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "チャットログをブラウザのストレージに直接保存する機能はサポートされなくなりました。下のボタンをクリックして、チャットログをダウンロードして削除してください。ご心配なく。チャットログは、次の方法でバックエンドに簡単に再インポートできます。",
"Scan": "スキャン",
"Scan complete!": "スキャン完了!",
@ -616,6 +621,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
"To add documents here, upload them to the \"Documents\" workspace first.": "",
"to chat input.": "チャット入力へ。",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "今日",

View File

@ -15,6 +15,7 @@
"Account": "ანგარიში",
"Account Activation Pending": "",
"Accurate information": "დიდი ინფორმაცია",
"Actions": "",
"Active Users": "",
"Add": "დამატება",
"Add a model id": "დაამატეთ მოდელის ID",
@ -27,6 +28,7 @@
"Add Memory": "მემორიის დამატება",
"Add message": "შეტყობინების დამატება",
"Add Model": "მოდელის დამატება",
"Add Tag": "",
"Add Tags": "ტეგების დამატება",
"Add User": "მომხმარებლის დამატება",
"Adjusting these settings will apply changes universally to all users.": "ამ პარამეტრების რეგულირება ცვლილებებს უნივერსალურად გამოიყენებს ყველა მომხმარებლისთვის",
@ -168,6 +170,7 @@
"Delete chat": "შეტყობინების წაშლა",
"Delete Chat": "შეტყობინების წაშლა",
"Delete chat?": "",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "ბმულის წაშლა",
@ -211,6 +214,7 @@
"Edit Doc": "დოკუმენტის ედიტირება",
"Edit Memory": "",
"Edit User": "მომხმარებლის ედიტირება",
"ElevenLabs": "",
"Email": "ელ-ფოსტა",
"Embedding Batch Size": "",
"Embedding Model": "ჩასმის ძირითადი პროგრამა",
@ -360,7 +364,6 @@
"Manage Models": "მოდელების მართვა",
"Manage Ollama Models": "Ollama მოდელების მართვა",
"Manage Pipelines": "მილსადენების მართვა",
"Manage Valves": "",
"March": "მარტივი",
"Max Tokens (num_predict)": "მაქს ტოკენსი (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "მაქსიმუმ 3 მოდელის ჩამოტვირთვა შესაძლებელია ერთდროულად. Გთხოვთ სცადოთ მოგვიანებით.",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "შეტყობინებები, რომელსაც თქვენ აგზავნით თქვენი ბმულის შექმნის შემდეგ, არ იქნება გაზიარებული. URL ის მქონე მომხმარებლებს შეეძლებათ ნახონ საერთო ჩატი.",
"Min P": "",
"Minimum Score": "მინიმალური ქულა",
"Mirostat": "მიროსტატი",
"Mirostat Eta": "მიროსტატი ეტა",
@ -500,6 +504,7 @@
"Save": "შენახვა",
"Save & Create": "დამახსოვრება და შექმნა",
"Save & Update": "დამახსოვრება და განახლება",
"Save Tag": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "ჩეთის ისტორიის შენახვა პირდაპირ თქვენი ბრაუზერის საცავში აღარ არის მხარდაჭერილი. გთხოვთ, დაუთმოთ და წაშალოთ თქვენი ჩატის ჟურნალები ქვემოთ მოცემულ ღილაკზე დაწკაპუნებით. არ ინერვიულოთ, თქვენ შეგიძლიათ მარტივად ხელახლა შემოიტანოთ თქვენი ჩეთის ისტორია ბექენდში",
"Scan": "სკანირება",
"Scan complete!": "სკანირება დასრულდა!",
@ -617,6 +622,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
"To add documents here, upload them to the \"Documents\" workspace first.": "",
"to chat input.": "ჩატში",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "დღეს",

View File

@ -15,6 +15,7 @@
"Account": "계정",
"Account Activation Pending": "계정 활성화 보류",
"Accurate information": "정확한 정보",
"Actions": "",
"Active Users": "활성 사용자",
"Add": "추가",
"Add a model id": "모델 ID 추가",
@ -27,6 +28,7 @@
"Add Memory": "메모리 추가",
"Add message": "메시지 추가",
"Add Model": "모델 추가",
"Add Tag": "",
"Add Tags": "태그 추가",
"Add User": "사용자 추가",
"Adjusting these settings will apply changes universally to all users.": "이 설정을 조정하면 모든 사용자에게 적용됩니다.",
@ -168,6 +170,7 @@
"Delete chat": "채팅 삭제",
"Delete Chat": "채팅 삭제",
"Delete chat?": "채팅을 삭제하겠습니까?",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "이 링크를 삭제합니다.",
@ -211,6 +214,7 @@
"Edit Doc": "문서 편집",
"Edit Memory": "메모리 편집",
"Edit User": "사용자 편집",
"ElevenLabs": "",
"Email": "이메일",
"Embedding Batch Size": "임베딩 배치 크기",
"Embedding Model": "임베딩 모델",
@ -360,7 +364,6 @@
"Manage Models": "모델 관리",
"Manage Ollama Models": "Ollama 모델 관리",
"Manage Pipelines": "파이프라인 관리",
"Manage Valves": "",
"March": "3월",
"Max Tokens (num_predict)": "최대 토큰(num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "최대 3개의 모델을 동시에 다운로드할 수 있습니다. 나중에 다시 시도하세요.",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "링크 생성 후에 보낸 메시지는 공유되지 않습니다. URL이 있는 사용자는 공유된 채팅을 볼 수 있습니다.",
"Min P": "",
"Minimum Score": "최소 점수",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -500,6 +504,7 @@
"Save": "저장",
"Save & Create": "저장 및 생성",
"Save & Update": "저장 및 업데이트",
"Save Tag": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "브라우저의 저장소에 채팅 로그를 직접 저장하는 것은 더 이상 지원되지 않습니다. 아래 버튼을 클릭하여 채팅 로그를 다운로드하고 삭제하세요. 걱정 마세요. 백엔드를 통해 채팅 로그를 쉽게 다시 가져올 수 있습니다.",
"Scan": "스캔",
"Scan complete!": "스캔 완료!",
@ -617,6 +622,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "WebUI에 접속하려면 관리자에게 문의하십시오. 관리자는 관리자 패널에서 사용자 상태를 관리할 수 있습니다.",
"To add documents here, upload them to the \"Documents\" workspace first.": "여기에 문서를 추가하려면, \"문서\" 워크스페이스에 먼저 업로드하세요.",
"to chat input.": "채팅 입력으로.",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "여기서 도구를 선택하려면, \"도구\" 워크스페이스에 먼저 추가하세요.",
"Today": "오늘",

View File

@ -111,6 +111,10 @@
"code": "pt-PT",
"title": "Portuguese (Portugal)"
},
{
"code": "ro-RO",
"title": "Romanian (Romania)"
},
{
"code": "ru-RU",
"title": "Russian (Russia)"
@ -123,6 +127,10 @@
"code": "sr-RS",
"title": "Serbian (Српски)"
},
{
"code": "th-TH",
"title": "Thailand (ไทย)"
},
{
"code": "tr-TR",
"title": "Turkish (Türkçe)"

View File

@ -15,6 +15,7 @@
"Account": "Paskyra",
"Account Activation Pending": "",
"Accurate information": "Tiksli informacija",
"Actions": "",
"Active Users": "",
"Add": "",
"Add a model id": "",
@ -27,6 +28,7 @@
"Add Memory": "",
"Add message": "Pridėti žinutę",
"Add Model": "Pridėti modelį",
"Add Tag": "",
"Add Tags": "Pridėti žymas",
"Add User": "Pridėti naudotoją",
"Adjusting these settings will apply changes universally to all users.": "Šių nustatymų pakeitimas bus pritakytas visiems naudotojams.",
@ -168,6 +170,7 @@
"Delete chat": "Išrinti pokalbį",
"Delete Chat": "Ištrinti pokalbį",
"Delete chat?": "",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "Ištrinti nuorodą",
@ -211,6 +214,7 @@
"Edit Doc": "Redaguoti dokumentą",
"Edit Memory": "",
"Edit User": "Redaguoti naudotoją",
"ElevenLabs": "",
"Email": "El. paštas",
"Embedding Batch Size": "",
"Embedding Model": "Embedding modelis",
@ -360,7 +364,6 @@
"Manage Models": "Tvarkyti modelius",
"Manage Ollama Models": "Tvarkyti Ollama modelius",
"Manage Pipelines": "",
"Manage Valves": "",
"March": "Kovas",
"Max Tokens (num_predict)": "",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Daugiausiai trys modeliai gali būti parsisiunčiami vienu metu.",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "",
"Min P": "",
"Minimum Score": "Minimalus rezultatas",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -500,6 +504,7 @@
"Save": "Išsaugoti",
"Save & Create": "Išsaugoti ir sukurti",
"Save & Update": "Išsaugoti ir atnaujinti",
"Save Tag": "",
"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.",
"Scan": "Skenuoti",
"Scan complete!": "Skenavimas baigtas!",
@ -619,6 +624,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
"To add documents here, upload them to the \"Documents\" workspace first.": "",
"to chat input.": "į pokalbio įvestį",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "Šiandien",

View File

@ -1,21 +1,22 @@
{
"'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 't', 'd', 'u' eller '-1' for ingen utløp.",
"(Beta)": "(Beta)",
"(e.g. `sh webui.sh --api --api-auth username_password`)": "",
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(f.eks. `sh webui.sh --api --api-auth brukernavn_passord`)",
"(e.g. `sh webui.sh --api`)": "(f.eks. `sh webui.sh --api`)",
"(latest)": "(siste)",
"{{ models }}": "{{ modeller }}",
"{{ owner }}: You cannot delete a base model": "{{ eier }}: Du kan ikke slette en grunnmodell",
"{{modelName}} is thinking...": "{{modelName}} tenker...",
"{{user}}'s Chats": "{{user}}'s chatter",
"{{user}}'s Chats": "{{user}}s samtaler",
"{{webUIName}} Backend Required": "{{webUIName}} Backend kreves",
"A task model is used when performing tasks such as generating titles for chats and web search queries": "En oppgavemodell brukes når du utfører oppgaver som å generere titler for chatter og websøkeforespørsler",
"A task model is used when performing tasks such as generating titles for chats and web search queries": "En oppgavemodell brukes når du utfører oppgaver som å generere titler for samtaler og websøkeforespørsler",
"a user": "en bruker",
"About": "Om",
"Account": "Konto",
"Account Activation Pending": "",
"Account Activation Pending": "Venter på kontoaktivering",
"Accurate information": "Nøyaktig informasjon",
"Active Users": "",
"Actions": "Handlinger",
"Active Users": "Aktive brukere",
"Add": "Legg til",
"Add a model id": "Legg til en modell-ID",
"Add a short description about what this model does": "Legg til en kort beskrivelse av hva denne modellen gjør",
@ -27,14 +28,15 @@
"Add Memory": "Legg til minne",
"Add message": "Legg til melding",
"Add Model": "Legg til modell",
"Add Tag": "Legg til tag",
"Add Tags": "Legg til tagger",
"Add User": "Legg til bruker",
"Adjusting these settings will apply changes universally to all users.": "Justering av disse innstillingene vil gjelde universelt for alle brukere.",
"Adjusting these settings will apply changes universally to all users.": "Endringer i disse innstillingene vil gjelde for alle brukere uten unntak.",
"admin": "administrator",
"Admin": "",
"Admin": "Administrator",
"Admin Panel": "Administrasjonspanel",
"Admin Settings": "Administrasjonsinnstillinger",
"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Administratorer har alltid tilgang til alle verktøy, mens brukere må få tildelt verktøy for hver enkelt modell i arbeidsområdet.",
"Advanced Parameters": "Avanserte parametere",
"Advanced Params": "Avanserte parametere",
"all": "alle",
@ -43,8 +45,8 @@
"Allow": "Tillat",
"Allow Chat Deletion": "Tillat sletting av chatter",
"Allow non-local voices": "Tillat ikke-lokale stemmer",
"Allow User Location": "",
"Allow Voice Interruption in Call": "",
"Allow User Location": "Aktiver stedstjenester",
"Allow Voice Interruption in Call": "Muliggjør stemmeavbrytelse i samtale",
"alphanumeric characters and hyphens": "alfanumeriske tegn og bindestreker",
"Already have an account?": "Har du allerede en konto?",
"an assistant": "en assistent",
@ -54,19 +56,19 @@
"API Key": "API-nøkkel",
"API Key created.": "API-nøkkel opprettet.",
"API keys": "API-nøkler",
"April": "April",
"April": "april",
"Archive": "Arkiv",
"Archive All Chats": "Arkiver alle chatter",
"Archived Chats": "Arkiverte chatter",
"are allowed - Activate this command by typing": "er tillatt - Aktiver denne kommandoen ved å skrive",
"Are you sure?": "Er du sikker?",
"Attach file": "Legg ved fil",
"Attention to detail": "Oppmerksomhet på detaljer",
"Attention to detail": "Sans for detaljer",
"Audio": "Lyd",
"Audio settings updated successfully": "",
"August": "August",
"Audio settings updated successfully": "Lydinnstillingene ble oppdatert",
"August": "august",
"Auto-playback response": "Automatisk avspilling av svar",
"AUTOMATIC1111 Api Auth String": "",
"AUTOMATIC1111 Api Auth String": "AUTOMATIC1111 Api Autentiseringsstreng",
"AUTOMATIC1111 Base URL": "AUTOMATIC1111 Grunn-URL",
"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 Grunn-URL kreves.",
"available!": "tilgjengelig!",
@ -74,21 +76,21 @@
"Bad Response": "Dårlig svar",
"Banners": "Bannere",
"Base Model (From)": "Grunnmodell (Fra)",
"Batch Size (num_batch)": "",
"Batch Size (num_batch)": "Batchstørrelse (num_batch)",
"before": "før",
"Being lazy": "Er lat",
"Brave Search API Key": "Brave Search API-nøkkel",
"Bypass SSL verification for Websites": "Omgå SSL-verifisering for nettsteder",
"Call": "",
"Call feature is not supported when using Web STT engine": "",
"Camera": "",
"Call": "Ring",
"Call feature is not supported when using Web STT engine": "Ringefunksjonen støttes ikke når du bruker Web STT-motoren",
"Camera": "Kamera",
"Cancel": "Avbryt",
"Capabilities": "Muligheter",
"Change Password": "Endre passord",
"Chat": "Chat",
"Chat Background Image": "",
"Chat Background Image": "Bakgrunnsbilde for chat",
"Chat Bubble UI": "Chat-boble UI",
"Chat Controls": "",
"Chat Controls": "Chat-kontroller",
"Chat direction": "Chat-retning",
"Chat History": "Chat-historikk",
"Chat History is off for this browser.": "Chat-historikk er av for denne nettleseren.",
@ -101,37 +103,37 @@
"Chunk Params": "Chunk-parametere",
"Chunk Size": "Chunk-størrelse",
"Citation": "Sitering",
"Clear memory": "",
"Clear memory": "Tøm minnet",
"Click here for help.": "Klikk her for hjelp.",
"Click here to": "Klikk her for å",
"Click here to download user import template file.": "",
"Click here to download user import template file.": "Klikk her for å hente ned importmal for brukere.",
"Click here to select": "Klikk her for å velge",
"Click here to select a csv file.": "Klikk her for å velge en csv-fil.",
"Click here to select a py file.": "",
"Click here to select a py file.": "Klikk her for å velge en py-fil.",
"Click here to select documents.": "Klikk her for å velge dokumenter.",
"click here.": "klikk her.",
"Click on the user role button to change a user's role.": "Klikk på brukerrolle-knappen for å endre en brukers rolle.",
"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "",
"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Skrivetilgang til utklippstavlen ble avslått. Kontroller nettleserinnstillingene for å gi nødvendig tillatelse.",
"Clone": "Klon",
"Close": "Lukk",
"Code formatted successfully": "",
"Code formatted successfully": "Koden ble formatert",
"Collection": "Samling",
"ComfyUI": "ComfyUI",
"ComfyUI Base URL": "ComfyUI Grunn-URL",
"ComfyUI Base URL is required.": "ComfyUI Grunn-URL kreves.",
"Command": "Kommando",
"Concurrent Requests": "Samtidige forespørsler",
"Confirm": "",
"Confirm": "Bekreft",
"Confirm Password": "Bekreft passord",
"Confirm your action": "",
"Confirm your action": "Bekreft din handling",
"Connections": "Tilkoblinger",
"Contact Admin for WebUI Access": "",
"Contact Admin for WebUI Access": "Kontakt administrator for WebUI-tilgang",
"Content": "Innhold",
"Content Extraction": "",
"Content Extraction": "Uthenting av innhold",
"Context Length": "Kontekstlengde",
"Continue Response": "Fortsett svar",
"Continue with {{provider}}": "",
"Controls": "",
"Continue with {{provider}}": "Fortsett med {{provider}}",
"Controls": "Kontroller",
"Copied shared chat URL to clipboard!": "Kopiert delt chat-URL til utklippstavlen!",
"Copy": "Kopier",
"Copy last code block": "Kopier siste kodeblokk",
@ -144,16 +146,16 @@
"Create new secret key": "Lag ny hemmelig nøkkel",
"Created at": "Opprettet",
"Created At": "Opprettet",
"Created by": "",
"CSV Import": "",
"Created by": "Opprettet av",
"CSV Import": "CSV-import",
"Current Model": "Nåværende modell",
"Current Password": "Nåværende passord",
"Custom": "Tilpasset",
"Customize models for a specific purpose": "Tilpass modeller for et spesifikt formål",
"Dark": "Mørk",
"Dashboard": "",
"Dashboard": "Instrumentbord",
"Database": "Database",
"December": "Desember",
"December": "desember",
"Default": "Standard",
"Default (Automatic1111)": "Standard (Automatic1111)",
"Default (SentenceTransformers)": "Standard (SentenceTransformers)",
@ -167,41 +169,42 @@
"Delete All Chats": "Slett alle chatter",
"Delete chat": "Slett chat",
"Delete Chat": "Slett chat",
"Delete chat?": "",
"Delete function?": "",
"Delete prompt?": "",
"Delete chat?": "Slett chat?",
"Delete Doc": "Slett dokument",
"Delete function?": "Slett funksjon?",
"Delete prompt?": "Slett prompt?",
"delete this link": "slett denne lenken",
"Delete tool?": "",
"Delete tool?": "Slett verktøy?",
"Delete User": "Slett bruker",
"Deleted {{deleteModelTag}}": "Slettet {{deleteModelTag}}",
"Deleted {{name}}": "Slettet {{name}}",
"Description": "Beskrivelse",
"Didn't fully follow instructions": "Fulgte ikke instruksjonene fullt ut",
"Disabled": "",
"Discover a function": "",
"Disabled": "Deaktivert",
"Discover a function": "Oppdag en funksjon",
"Discover a model": "Oppdag en modell",
"Discover a prompt": "Oppdag en prompt",
"Discover a tool": "",
"Discover, download, and explore custom functions": "",
"Discover a tool": "Oppdag et verktøy",
"Discover, download, and explore custom functions": "Oppdag, last ned og utforsk egendefinerte funksjoner",
"Discover, download, and explore custom prompts": "Oppdag, last ned og utforsk egendefinerte prompts",
"Discover, download, and explore custom tools": "",
"Discover, download, and explore custom tools": "Oppdag, last ned og utforsk egendefinerte verktøy",
"Discover, download, and explore model presets": "Oppdag, last ned og utforsk modellforhåndsinnstillinger",
"Dismissible": "",
"Display Emoji in Call": "",
"Dismissible": "Kan lukkes",
"Display Emoji in Call": "Vis emoji i samtale",
"Display the username instead of You in the Chat": "Vis brukernavnet i stedet for Du i chatten",
"Do not install functions from sources you do not fully trust.": "",
"Do not install tools from sources you do not fully trust.": "",
"Do not install functions from sources you do not fully trust.": "Ikke installer funksjoner fra kilder du ikke fullt ut stoler på.",
"Do not install tools from sources you do not fully trust.": "Ikke installer verktøy fra kilder du ikke fullt ut stoler på.",
"Document": "Dokument",
"Document Settings": "Dokumentinnstillinger",
"Documentation": "Dokumentasjon",
"Documents": "Dokumenter",
"does not make any external connections, and your data stays securely on your locally hosted server.": "lager ingen eksterne tilkoblinger, og dataene dine forblir trygt på din lokalt hostede server.",
"does not make any external connections, and your data stays securely on your locally hosted server.": "har ingen tilkobling til eksterne tjenester, og dataene dine blir værende sikkert på din lokale tjener.",
"Don't Allow": "Ikke tillat",
"Don't have an account?": "Har du ikke en konto?",
"don't install random functions from sources you don't trust.": "",
"don't install random tools from sources you don't trust.": "",
"don't install random functions from sources you don't trust.": "ikke installer tilfeldige funksjoner fra kilder du ikke stoler på.",
"don't install random tools from sources you don't trust.": "ikke installer tilfeldige verktøy fra kilder du ikke stoler på.",
"Don't like the style": "Liker ikke stilen",
"Done": "",
"Done": "Ferdig",
"Download": "Last ned",
"Download canceled": "Nedlasting avbrutt",
"Download Database": "Last ned database",
@ -209,8 +212,9 @@
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "f.eks. '30s','10m'. Gyldige tidsenheter er 's', 'm', 't'.",
"Edit": "Rediger",
"Edit Doc": "Rediger dokument",
"Edit Memory": "",
"Edit Memory": "Rediger minne",
"Edit User": "Rediger bruker",
"ElevenLabs": "ElevenLabs",
"Email": "E-post",
"Embedding Batch Size": "Batch-størrelse for embedding",
"Embedding Model": "Embedding-modell",
@ -220,12 +224,12 @@
"Enable Community Sharing": "Aktiver deling i fellesskap",
"Enable New Sign Ups": "Aktiver nye registreringer",
"Enable Web Search": "Aktiver websøk",
"Enabled": "",
"Engine": "",
"Enabled": "Aktivert",
"Engine": "Motor",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Sørg for at CSV-filen din inkluderer 4 kolonner i denne rekkefølgen: Navn, E-post, Passord, Rolle.",
"Enter {{role}} message here": "Skriv inn {{role}} melding her",
"Enter a detail about yourself for your LLMs to recall": "Skriv inn en detalj om deg selv som LLM-ene dine kan huske",
"Enter api auth string (e.g. username:password)": "",
"Enter a detail about yourself for your LLMs to recall": "Skriv inn en detalj om deg selv som språkmodellene dine kan huske",
"Enter api auth string (e.g. username:password)": "Skriv inn api-autentiseringsstreng (f.eks. brukernavn:passord)",
"Enter Brave Search API Key": "Skriv inn Brave Search API-nøkkel",
"Enter Chunk Overlap": "Skriv inn Chunk Overlap",
"Enter Chunk Size": "Skriv inn Chunk-størrelse",
@ -239,18 +243,18 @@
"Enter Score": "Skriv inn poengsum",
"Enter Searxng Query URL": "Skriv inn Searxng forespørsels-URL",
"Enter Serper API Key": "Skriv inn Serper API-nøkkel",
"Enter Serply API Key": "",
"Enter Serply API Key": "Skriv inn Serply API-nøkkel",
"Enter Serpstack API Key": "Skriv inn Serpstack API-nøkkel",
"Enter stop sequence": "Skriv inn stoppsekvens",
"Enter system prompt": "",
"Enter Tavily API Key": "",
"Enter Tika Server URL": "",
"Enter system prompt": "Skriv inn systemprompt",
"Enter Tavily API Key": "Skriv inn Tavily API-nøkkel",
"Enter Tika Server URL": "Skriv inn Tika Server-URL",
"Enter Top K": "Skriv inn Top K",
"Enter URL (e.g. http://127.0.0.1:7860/)": "Skriv inn URL (f.eks. http://127.0.0.1:7860/)",
"Enter URL (e.g. http://localhost:11434)": "Skriv inn URL (f.eks. http://localhost:11434)",
"Enter Your Email": "Skriv inn din e-post",
"Enter Your Full Name": "Skriv inn ditt fulle navn",
"Enter your message": "",
"Enter your message": "Skriv inn meldingen din",
"Enter Your Password": "Skriv inn ditt passord",
"Enter Your Role": "Skriv inn din rolle",
"Error": "Feil",
@ -260,50 +264,50 @@
"Export chat (.json)": "Eksporter chat (.json)",
"Export Chats": "Eksporter chatter",
"Export Documents Mapping": "Eksporter dokumentkartlegging",
"Export Functions": "",
"Export LiteLLM config.yaml": "",
"Export Functions": "Eksporter funksjoner",
"Export LiteLLM config.yaml": "Eksporter LiteLLM config.yaml",
"Export Models": "Eksporter modeller",
"Export Prompts": "Eksporter prompts",
"Export Tools": "",
"External Models": "",
"Export Tools": "Eksporter verktøy",
"External Models": "Eksterne modeller",
"Failed to create API Key.": "Kunne ikke opprette API-nøkkel.",
"Failed to read clipboard contents": "Kunne ikke lese utklippstavleinnhold",
"Failed to update settings": "Kunne ikke oppdatere innstillinger",
"February": "Februar",
"Feel free to add specific details": "Føl deg fri til å legge til spesifikke detaljer",
"File": "",
"February": "februar",
"Feel free to add specific details": "Legg gjerne til spesifikke detaljer",
"File": "Fil",
"File Mode": "Filmodus",
"File not found.": "Fil ikke funnet.",
"Files": "",
"Filter is now globally disabled": "",
"Filter is now globally enabled": "",
"Filters": "",
"Files": "Filer",
"Filter is now globally disabled": "Filteret er nå deaktivert på systemnivå",
"Filter is now globally enabled": "Filteret er nå aktivert på systemnivå",
"Filters": "Filtere",
"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Fingeravtrykk-spoofing oppdaget: Kan ikke bruke initialer som avatar. Bruker standard profilbilde.",
"Fluidly stream large external response chunks": "Strøm store eksterne svarchunks flytende",
"Fluidly stream large external response chunks": "Flytende strømming av store eksterne responsbiter",
"Focus chat input": "Fokuser chatinput",
"Followed instructions perfectly": "Fulgte instruksjonene perfekt",
"Form": "",
"Form": "Form",
"Format your variables using square brackets like this:": "Formatér variablene dine med hakeparenteser som dette:",
"Frequency Penalty": "Frekvensstraff",
"Function created successfully": "",
"Function deleted successfully": "",
"Function Description (e.g. A filter to remove profanity from text)": "",
"Function ID (e.g. my_filter)": "",
"Function is now globally disabled": "",
"Function is now globally enabled": "",
"Function Name (e.g. My Filter)": "",
"Function updated successfully": "",
"Functions": "",
"Functions allow arbitrary code execution": "",
"Functions allow arbitrary code execution.": "",
"Functions imported successfully": "",
"Function created successfully": "Funksjonen ble opprettet",
"Function deleted successfully": "Funksjonen ble slettet",
"Function Description (e.g. A filter to remove profanity from text)": "Funksjonsbeskrivelse (f.eks. Et filter for å fjerne banning fra tekst)",
"Function ID (e.g. my_filter)": "Funksjons-id (f.eks. my_filter)",
"Function is now globally disabled": "Funksjonen er nå deaktivert på systemnivå",
"Function is now globally enabled": "Funksjonen er nå aktivert på systemnivå",
"Function Name (e.g. My Filter)": "Funksjonsnavn (f.eks. Mitt Filter)",
"Function updated successfully": "Funksjonen ble oppdatert",
"Functions": "Funksjoner",
"Functions allow arbitrary code execution": "Funksjoner tillater vilkårlig kodeeksekvering",
"Functions allow arbitrary code execution.": "Funksjoner tillater vilkårlig kodeeksekvering.",
"Functions imported successfully": "Funksjoner importert",
"General": "Generelt",
"General Settings": "Generelle innstillinger",
"Generate Image": "",
"Generate Image": "Generer bilde",
"Generating search query": "Genererer søkeforespørsel",
"Generation Info": "Generasjonsinfo",
"Get up and running with": "",
"Global": "",
"Get up and running with": "Kom i gang med",
"Global": "Systemnivå",
"Good Response": "Godt svar",
"Google PSE API Key": "Google PSE API-nøkkel",
"Google PSE Engine Id": "Google PSE Motor-ID",
@ -312,84 +316,84 @@
"Hello, {{name}}": "Hei, {{name}}",
"Help": "Hjelp",
"Hide": "Skjul",
"Hide Model": "",
"Hide Model": "Skjul modell",
"How can I help you today?": "Hvordan kan jeg hjelpe deg i dag?",
"Hybrid Search": "Hybrid-søk",
"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.": "",
"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.": "Jeg bekrefter at jeg har lest og forstår konsekvensene av min handling. Jeg er klar over risikoen forbundet med å kjøre vilkårlig kode, og jeg har verifisert kildens pålitelighet.",
"Image Generation (Experimental)": "Bildegenerering (Eksperimentell)",
"Image Generation Engine": "Bildegenereringsmotor",
"Image Settings": "Bildeinnstillinger",
"Images": "Bilder",
"Import Chats": "Importer chatter",
"Import Documents Mapping": "Importer dokumentkartlegging",
"Import Functions": "",
"Import Functions": "Funksjoner",
"Import Models": "Importer modeller",
"Import Prompts": "Importer prompts",
"Import Tools": "",
"Include `--api-auth` flag when running stable-diffusion-webui": "",
"Import Tools": "Importer verktøy",
"Include `--api-auth` flag when running stable-diffusion-webui": "Inkluder `--api-auth`-flagget når du kjører stable-diffusion-webui",
"Include `--api` flag when running stable-diffusion-webui": "Inkluder `--api`-flagget når du kjører stable-diffusion-webui",
"Info": "Info",
"Input commands": "Inntast kommandoer",
"Install from Github URL": "Installer fra Github-URL",
"Instant Auto-Send After Voice Transcription": "",
"Instant Auto-Send After Voice Transcription": "Direkte autosending etter stemmegjenkjenning",
"Interface": "Grensesnitt",
"Invalid Tag": "Ugyldig tag",
"January": "Januar",
"January": "januar",
"join our Discord for help.": "bli med i vår Discord for hjelp.",
"JSON": "JSON",
"JSON Preview": "JSON-forhåndsvisning",
"July": "Juli",
"June": "Juni",
"July": "juli",
"June": "juni",
"JWT Expiration": "JWT-utløp",
"JWT Token": "JWT-token",
"Keep Alive": "Hold i live",
"Keyboard shortcuts": "Hurtigtaster",
"Knowledge": "",
"Knowledge": "Kunnskap",
"Language": "Språk",
"large language models, locally.": "",
"large language models, locally.": "Store språkmodeller, lokalt.",
"Last Active": "Sist aktiv",
"Last Modified": "",
"Last Modified": "Sist endret",
"Light": "Lys",
"Listening...": "",
"LLMs can make mistakes. Verify important information.": "LLM-er kan gjøre feil. Verifiser viktig informasjon.",
"Local Models": "",
"Listening...": "Lytter ...",
"LLMs can make mistakes. Verify important information.": "Språkmodeller kan gjøre feil. Verifiser viktige opplysninger.",
"Local Models": "Lokale modeller",
"LTR": "LTR",
"Made by OpenWebUI Community": "Laget av OpenWebUI-fellesskapet",
"Make sure to enclose them with": "Sørg for å omslutte dem med",
"Manage": "",
"Manage": "Administrer",
"Manage Models": "Administrer modeller",
"Manage Ollama Models": "Administrer Ollama-modeller",
"Manage Pipelines": "Administrer pipelines",
"Manage Valves": "",
"March": "Mars",
"March": "mars",
"Max Tokens (num_predict)": "Maks antall tokens (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maksimalt 3 modeller kan lastes ned samtidig. Vennligst prøv igjen senere.",
"May": "Mai",
"Memories accessible by LLMs will be shown here.": "Minner tilgjengelige for LLM-er vil vises her.",
"May": "mai",
"Memories accessible by LLMs will be shown here.": "Minner tilgjengelige for språkmodeller vil vises her.",
"Memory": "Minne",
"Memory added successfully": "",
"Memory cleared successfully": "",
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Memory added successfully": "Minne lagt til",
"Memory cleared successfully": "Minne tømt",
"Memory deleted successfully": "Minne slettet",
"Memory updated successfully": "Minne oppdatert",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Meldinger du sender etter at du har opprettet lenken din vil ikke bli delt. Brukere med URL-en vil kunne se den delte chatten.",
"Min P": "",
"Minimum Score": "Minimum poengsum",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
"Mirostat Tau": "Mirostat Tau",
"MMMM DD, YYYY": "MMMM DD, YYYY",
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
"MMMM DD, YYYY hh:mm:ss A": "",
"MMMM DD, YYYY hh:mm:ss A": "MMMM DD, YYYY hh:mm:ss A",
"Model '{{modelName}}' has been successfully downloaded.": "Modellen '{{modelName}}' er lastet ned.",
"Model '{{modelTag}}' is already in queue for downloading.": "Modellen '{{modelTag}}' er allerede i nedlastingskøen.",
"Model {{modelId}} not found": "Modellen {{modelId}} ble ikke funnet",
"Model {{modelName}} is not vision capable": "Modellen {{modelName}} er ikke visjonsdyktig",
"Model {{name}} is now {{status}}": "Modellen {{name}} er nå {{status}}",
"Model created successfully!": "",
"Model created successfully!": "Modellen ble opprettet!",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Modellens filsystemsti oppdaget. Modellens kortnavn er påkrevd for oppdatering, kan ikke fortsette.",
"Model ID": "Modell-ID",
"Model not selected": "Modell ikke valgt",
"Model Params": "Modellparametere",
"Model updated successfully": "",
"Model updated successfully": "Modell oppdatert",
"Model Whitelisting": "Modell hvitlisting",
"Model(s) Whitelisted": "Modell(er) hvitlistet",
"Modelfile Content": "Modellfilinnhold",
@ -400,39 +404,39 @@
"Name your model": "Gi modellen din et navn",
"New Chat": "Ny chat",
"New Password": "Nytt passord",
"No content to speak": "",
"No documents found": "",
"No file selected": "",
"No content to speak": "Mangler innhold for tale",
"No documents found": "Ingen dokumenter funnet",
"No file selected": "Ingen fil valgt",
"No results found": "Ingen resultater funnet",
"No search query generated": "Ingen søkeforespørsel generert",
"No source available": "Ingen kilde tilgjengelig",
"No valves to update": "",
"No valves to update": "Ingen ventiler å oppdatere",
"None": "Ingen",
"Not factually correct": "Ikke faktuelt korrekt",
"Not factually correct": "Uriktig informasjon",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Merk: Hvis du setter en minimums poengsum, vil søket kun returnere dokumenter med en poengsum som er større enn eller lik minimums poengsummen.",
"Notifications": "Varsler",
"November": "November",
"November": "november",
"num_thread (Ollama)": "num_thread (Ollama)",
"OAuth ID": "",
"October": "Oktober",
"OAuth ID": "OAuth-ID",
"October": "oktober",
"Off": "Av",
"Okay, Let's Go!": "Ok, la oss gå!",
"OLED Dark": "OLED mørk",
"Ollama": "Ollama",
"Ollama API": "Ollama API",
"Ollama API disabled": "Ollama API deaktivert",
"Ollama API is disabled": "",
"Ollama API is disabled": "Ollama API er deaktivert",
"Ollama Version": "Ollama versjon",
"On": "På",
"Only": "Kun",
"Only alphanumeric characters and hyphens are allowed in the command string.": "Kun alfanumeriske tegn og bindestreker er tillatt i kommandostrengen.",
"Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Oops! Hold deg fast! Filene dine er fortsatt i prosesseringsovnen. Vi tilbereder dem til perfeksjon. Vennligst vær tålmodig, vi gir beskjed når de er klare.",
"Oops! Looks like the URL is invalid. Please double-check and try again.": "Oops! Ser ut som URL-en er ugyldig. Vennligst dobbeltsjekk og prøv igjen.",
"Oops! There was an error in the previous response. Please try again or contact admin.": "",
"Oops! There was an error in the previous response. Please try again or contact admin.": "Oops! Det oppstod en feil i forrige svar. Prøv igjen eller kontakt administrator",
"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oops! Du bruker en ikke-støttet metode (kun frontend). Vennligst server WebUI fra backend.",
"Open AI (Dall-E)": "Open AI (Dall-E)",
"Open new chat": "Åpne ny chat",
"Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "",
"Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Open WebUI-versjon (v{{OPEN_WEBUI_VERSION}}) er lavere enn nødvendig versjon (v{{REQUIRED_VERSION}})",
"OpenAI": "OpenAI",
"OpenAI API": "OpenAI API",
"OpenAI API Config": "OpenAI API-konfigurasjon",
@ -444,20 +448,20 @@
"PDF document (.pdf)": "PDF-dokument (.pdf)",
"PDF Extract Images (OCR)": "PDF-ekstraktbilder (OCR)",
"pending": "avventer",
"Permission denied when accessing media devices": "",
"Permission denied when accessing microphone": "",
"Permission denied when accessing media devices": "Tillatelse nektet ved tilgang til medieenheter",
"Permission denied when accessing microphone": "Tillatelse nektet ved tilgang til mikrofon",
"Permission denied when accessing microphone: {{error}}": "Tillatelse nektet ved tilgang til mikrofon: {{error}}",
"Personalization": "Personalisering",
"Pin": "",
"Pinned": "",
"Pipeline deleted successfully": "",
"Pipeline downloaded successfully": "",
"Pin": "Fest",
"Pinned": "Festet",
"Pipeline deleted successfully": "Pipeline slettet",
"Pipeline downloaded successfully": "Pipeline lastet ned",
"Pipelines": "Pipelines",
"Pipelines Not Detected": "",
"Pipelines Not Detected": "Pipelines ikke oppdaget",
"Pipelines Valves": "Pipeline-ventiler",
"Plain text (.txt)": "Ren tekst (.txt)",
"Playground": "Lekeplass",
"Please carefully review the following warnings:": "",
"Please carefully review the following warnings:": "Vær vennlig å lese gjennom følgende advarsler grundig:",
"Positive attitude": "Positiv holdning",
"Previous 30 days": "Forrige 30 dager",
"Previous 7 days": "Forrige 7 dager",
@ -474,7 +478,7 @@
"Read Aloud": "Les høyt",
"Record voice": "Ta opp stemme",
"Redirecting you to OpenWebUI Community": "Omdirigerer deg til OpenWebUI-fellesskapet",
"Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "",
"Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Omtal deg selv som \"Bruker\" (f.eks. \"Bruker lærer spansk\")",
"Refused when it shouldn't have": "Avvist når det ikke skulle ha vært det",
"Regenerate": "Regenerer",
"Release Notes": "Utgivelsesnotater",
@ -486,20 +490,21 @@
"Reranking Model": "Reranking-modell",
"Reranking model disabled": "Reranking-modell deaktivert",
"Reranking model set to \"{{reranking_model}}\"": "Reranking-modell satt til \"{{reranking_model}}\"",
"Reset": "",
"Reset Upload Directory": "",
"Reset": "Tilbakestill",
"Reset Upload Directory": "Tilbakestill opplastingskatalog",
"Reset Vector Storage": "Tilbakestill vektorlagring",
"Response AutoCopy to Clipboard": "Respons auto-kopi til utklippstavle",
"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Respons-varsler kan ikke aktiveres da nettstedsrettighetene er nektet. Vennligst se nettleserinnstillingene dine for å gi nødvendig tilgang.",
"Role": "Rolle",
"Rosé Pine": "Rosé Pine",
"Rosé Pine Dawn": "Rosé Pine Dawn",
"RTL": "RTL",
"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
"Running": "",
"Run Llama 2, Code Llama, and other models. Customize and create your own.": "Kjør Llama 2, Code Llama og andre modeller. Tilpass og lag egne versjoner.",
"Running": "Kjører",
"Save": "Lagre",
"Save & Create": "Lagre og opprett",
"Save & Update": "Lagre og oppdater",
"Save Tag": "Lagre tag",
"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 av chatlogger direkte til nettleserens lagring støttes ikke lenger. Vennligst ta et øyeblikk for å laste ned og slette chatloggene dine ved å klikke på knappen nedenfor. Ikke bekymre deg, du kan enkelt re-importere chatloggene dine til backend via",
"Scan": "Skann",
"Scan complete!": "Skanning fullført!",
@ -508,39 +513,39 @@
"Search a model": "Søk en modell",
"Search Chats": "Søk chatter",
"Search Documents": "Søk dokumenter",
"Search Functions": "",
"Search Functions": "Søk funksjoner",
"Search Models": "Søk modeller",
"Search Prompts": "Søk prompter",
"Search Query Generation Prompt": "",
"Search Query Generation Prompt Length Threshold": "",
"Search Query Generation Prompt": "Instruksjon for å lage søkeord",
"Search Query Generation Prompt Length Threshold": "Lengdegrense for prompt til generering av søkeforespørsel",
"Search Result Count": "Antall søkeresultater",
"Search Tools": "",
"Search Tools": "Søkeverktøy",
"Searched {{count}} sites_one": "Søkte på {{count}} side",
"Searched {{count}} sites_other": "Søkte på {{count}} sider",
"Searching \"{{searchQuery}}\"": "",
"Searching \"{{searchQuery}}\"": "Søker etter \"{{searchQuery}}\"",
"Searxng Query URL": "Searxng forespørsels-URL",
"See readme.md for instructions": "Se readme.md for instruksjoner",
"See what's new": "Se hva som er nytt",
"Seed": "Seed",
"Select a base model": "Velg en grunnmodell",
"Select a engine": "",
"Select a function": "",
"Select a engine": "Velg en motor",
"Select a function": "Velg en funksjon",
"Select a mode": "Velg en modus",
"Select a model": "Velg en modell",
"Select a pipeline": "Velg en pipeline",
"Select a pipeline url": "Velg en pipeline-URL",
"Select a tool": "",
"Select a tool": "Velg et verktøy",
"Select an Ollama instance": "Velg en Ollama-instans",
"Select Documents": "",
"Select Documents": "Velg dokumenter",
"Select model": "Velg modell",
"Select only one model to call": "",
"Select only one model to call": "Velg kun én modell å kalle",
"Selected model(s) do not support image inputs": "Valgte modell(er) støtter ikke bildeforslag",
"Send": "Send",
"Send a Message": "Send en melding",
"Send message": "Send melding",
"September": "September",
"September": "september",
"Serper API Key": "Serper API-nøkkel",
"Serply API Key": "",
"Serply API Key": "Serply API-nøkkel",
"Serpstack API Key": "Serpstack API-nøkkel",
"Server connection verified": "Servertilkobling bekreftet",
"Set as default": "Sett som standard",
@ -560,9 +565,9 @@
"short-summary": "kort sammendrag",
"Show": "Vis",
"Show Admin Details in Account Pending Overlay": "Vis administratordetaljer i ventende kontooverlay",
"Show Model": "",
"Show Model": "Vis modell",
"Show shortcuts": "Vis snarveier",
"Show your support!": "",
"Show your support!": "Vis din støtte!",
"Showcased creativity": "Vist frem kreativitet",
"Sign in": "Logg inn",
"Sign Out": "Logg ut",
@ -572,20 +577,20 @@
"Speech recognition error: {{error}}": "Feil ved talegjenkjenning: {{error}}",
"Speech-to-Text Engine": "Tale-til-tekst-motor",
"Stop Sequence": "Stoppsekvens",
"STT Model": "",
"STT Model": "STT-modell",
"STT Settings": "STT-innstillinger",
"Submit": "Send inn",
"Subtitle (e.g. about the Roman Empire)": "Undertittel (f.eks. om Romerriket)",
"Success": "Suksess",
"Successfully updated.": "Oppdatert.",
"Suggested": "Foreslått",
"Support": "",
"Support this plugin:": "",
"Support": "Bidra",
"Support this plugin:": "Bidra til denne utvidelsen:",
"System": "System",
"System Prompt": "Systemprompt",
"Tags": "Tagger",
"Tap to interrupt": "",
"Tavily API Key": "",
"Tap to interrupt": "Berør for å avbryte",
"Tavily API Key": "Tavily API-nøkkel",
"Tell us more:": "Fortell oss mer:",
"Temperature": "Temperatur",
"Template": "Mal",
@ -593,67 +598,68 @@
"Text-to-Speech Engine": "Tekst-til-tale-motor",
"Tfs Z": "Tfs Z",
"Thanks for your feedback!": "Takk for tilbakemeldingen!",
"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "Utviklerne bak denne utvidelsen er lidenskapelige frivillige fra fellesskapet. Hvis du finner denne utvidelsen nyttig, vennligst vurder å bidra til utviklingen.",
"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Poengsummen skal være en verdi mellom 0,0 (0%) og 1,0 (100%).",
"Theme": "Tema",
"Thinking...": "",
"This action cannot be undone. Do you wish to continue?": "",
"Thinking...": "Tenker ...",
"This action cannot be undone. Do you wish to continue?": "Denne handlingen kan ikke angres. Ønsker du å fortsette?",
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Dette sikrer at dine verdifulle samtaler er trygt lagret i backend-databasen din. Takk!",
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Dette er en eksperimentell funksjon, det er mulig den ikke fungerer som forventet og kan endres når som helst.",
"This setting does not sync across browsers or devices.": "Denne innstillingen synkroniseres ikke mellom nettlesere eller enheter.",
"This will delete": "",
"This will delete": "Dette vil slette",
"Thorough explanation": "Grundig forklaring",
"Tika": "",
"Tika Server URL required.": "",
"Tika": "Tika",
"Tika Server URL required.": "Tika Server-URL kreves.",
"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Tips: Oppdater flere variabelplasser etter hverandre ved å trykke på tab-tasten i chatinputen etter hver erstatning.",
"Title": "Tittel",
"Title (e.g. Tell me a fun fact)": "Tittel (f.eks. Fortell meg en morsom fakta)",
"Title (e.g. Tell me a fun fact)": "Tittel (f.eks. Fortell meg et morsomt faktum)",
"Title Auto-Generation": "Automatisk tittelgenerering",
"Title cannot be an empty string.": "Tittelen kan ikke være en tom streng.",
"Title Generation Prompt": "Tittelgenereringsprompt",
"to": "til",
"To access the available model names for downloading,": "For å få tilgang til tilgjengelige modelnavn for nedlasting,",
"To access the GGUF models available for downloading,": "For å få tilgang til GGUF-modellene som er tilgjengelige for nedlasting,",
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
"To add documents here, upload them to the \"Documents\" workspace first.": "",
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "For å få tilgang til WebUI, vennligst kontakt administratoren. Administratorer kan administrere brukerstatus fra Admin-panelet.",
"To add documents here, upload them to the \"Documents\" workspace first.": "For å legge til dokumenter her, last dem opp til \"Dokumenter\"-arbeidsområdet først.",
"to chat input.": "til chatinput.",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"To select actions here, add them to the \"Functions\" workspace first.": "For å velge handlinger her, legg dem til i \"Funksjoner\"-arbeidsområdet først.",
"To select filters here, add them to the \"Functions\" workspace first.": "For å velge filtre her, legg dem til i \"Funksjoner\"-arbeidsområdet først.",
"To select toolkits here, add them to the \"Tools\" workspace first.": "For å velge verktøysett her, legg dem til i \"Verktøy\"-arbeidsområdet først.",
"Today": "I dag",
"Toggle settings": "Veksle innstillinger",
"Toggle sidebar": "Veksle sidefelt",
"Tokens To Keep On Context Refresh (num_keep)": "",
"Tool created successfully": "",
"Tool deleted successfully": "",
"Tool imported successfully": "",
"Tool updated successfully": "",
"Toolkit Description (e.g. A toolkit for performing various operations)": "",
"Toolkit ID (e.g. my_toolkit)": "",
"Toolkit Name (e.g. My ToolKit)": "",
"Tools": "",
"Tools are a function calling system with arbitrary code execution": "",
"Tools have a function calling system that allows arbitrary code execution": "",
"Tools have a function calling system that allows arbitrary code execution.": "",
"Tokens To Keep On Context Refresh (num_keep)": "Tokens å beholde ved kontekstoppdatering (num_keep)",
"Tool created successfully": "Verktøy opprettet",
"Tool deleted successfully": "Verktøy slettet",
"Tool imported successfully": "Verktøy importert",
"Tool updated successfully": "Verktøy oppdatert",
"Toolkit Description (e.g. A toolkit for performing various operations)": "Verktøysettbeskrivelse (f.eks. Et verktøysett for å utføre ulike operasjoner)",
"Toolkit ID (e.g. my_toolkit)": "Verktøysett-ID (f.eks. my_toolkit)",
"Toolkit Name (e.g. My ToolKit)": "Verktøysett-navn (f.eks. Mitt verktøysett)",
"Tools": "Verktøy",
"Tools are a function calling system with arbitrary code execution": "Vertkøy er et funksjonskallssystem med vilkårlig kodeeksekvering",
"Tools have a function calling system that allows arbitrary code execution": "Verktøy har et funksjonskallssystem som tillater vilkårlig kodeeksekvering",
"Tools have a function calling system that allows arbitrary code execution.": "Verktøy har et funksjonskallssystem som tillater vilkårlig kodeeksekvering.",
"Top K": "Top K",
"Top P": "Top P",
"Trouble accessing Ollama?": "Problemer med tilgang til Ollama?",
"TTS Model": "",
"TTS Model": "TTS-modell",
"TTS Settings": "TTS-innstillinger",
"TTS Voice": "",
"TTS Voice": "TTS-stemme",
"Type": "Type",
"Type Hugging Face Resolve (Download) URL": "Skriv inn Hugging Face Resolve (nedlasting) URL",
"Uh-oh! There was an issue connecting to {{provider}}.": "Oops! Det oppsto et problem med tilkoblingen til {{provider}}.",
"UI": "",
"Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "",
"Unpin": "",
"Update": "",
"UI": "UI",
"Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "Ukjent filtype '{{file_type}}'. Fortsetter likevel med filopplastingen.",
"Unpin": "Løsne",
"Update": "Oppdater",
"Update and Copy Link": "Oppdater og kopier lenke",
"Update password": "Oppdater passord",
"Updated at": "",
"Upload": "",
"Updated at": "Oppdatert",
"Upload": "Last opp",
"Upload a GGUF model": "Last opp en GGUF-modell",
"Upload Files": "Last opp filer",
"Upload Pipeline": "",
"Upload Pipeline": "Last opp pipeline",
"Upload Progress": "Opplastingsfremdrift",
"URL Mode": "URL-modus",
"Use '#' in the prompt input to load and select your documents.": "Bruk '#' i prompt-input for å laste og velge dokumentene dine.",
@ -662,23 +668,23 @@
"use_mlock (Ollama)": "use_mlock (Ollama)",
"use_mmap (Ollama)": "use_mmap (Ollama)",
"user": "bruker",
"User location successfully retrieved.": "",
"User location successfully retrieved.": "Brukerlokasjon hentet",
"User Permissions": "Brukertillatelser",
"Users": "Brukere",
"Utilize": "Utnytt",
"Valid time units:": "Gyldige tidsenheter:",
"Valves": "",
"Valves updated": "",
"Valves updated successfully": "",
"Valves": "Ventiler",
"Valves updated": "Ventiler oppdatert",
"Valves updated successfully": "Ventiler oppdatert",
"variable": "variabel",
"variable to have them replaced with clipboard content.": "variabel for å få dem erstattet med utklippstavleinnhold.",
"Version": "Versjon",
"Voice": "",
"Voice": "Stemme",
"Warning": "Advarsel",
"Warning:": "",
"Warning:": "Advarsel:",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Advarsel: Hvis du oppdaterer eller endrer embedding-modellen din, må du re-importere alle dokumenter.",
"Web": "Web",
"Web API": "",
"Web API": "Web-API",
"Web Loader Settings": "Web-lasterinnstillinger",
"Web Params": "Web-parametere",
"Web Search": "Websøk",
@ -688,21 +694,21 @@
"WebUI will make requests to": "WebUI vil gjøre forespørsler til",
"Whats New in": "Hva er nytt i",
"When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Når historikken er slått av, vil nye chatter på denne nettleseren ikke vises i historikken din på noen av enhetene dine.",
"Whisper (Local)": "",
"Widescreen Mode": "",
"Whisper (Local)": "Whisper (Lokal)",
"Widescreen Mode": "Bredskjermmodus",
"Workspace": "Arbeidsområde",
"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 et sammendrag på 50 ord som oppsummerer [emne eller nøkkelord].",
"Yesterday": "I går",
"You": "Du",
"You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "",
"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 tilpasse interaksjonene dine med språkmodeller ved å legge til minner gjennom 'Administrer'-knappen nedenfor, slik at de blir mer hjelpsomme og tilpasset deg.",
"You cannot clone a base model": "Du kan ikke klone en grunnmodell",
"You have no archived conversations.": "Du har ingen arkiverte samtaler.",
"You have shared this chat": "Du har delt denne chatten",
"You're a helpful assistant.": "Du er en hjelpsom assistent.",
"You're now logged in.": "Du er nå logget inn.",
"Your account status is currently pending activation.": "",
"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
"Your account status is currently pending activation.": "Din konto venter for øyeblikket på 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 beløpet du gir går uavkortet til utvikleren av tillegget; Open WebUI tar ikke noe av dette. Den valgte finansieringsplattformen kan derimot ha egne gebyrer.",
"Youtube": "Youtube",
"Youtube Loader Settings": "Youtube-lasterinnstillinger"
"Youtube Loader Settings": "Innstillinger for YouTube-laster"
}

View File

@ -15,6 +15,7 @@
"Account": "Account",
"Account Activation Pending": "",
"Accurate information": "Accurate informatie",
"Actions": "",
"Active Users": "",
"Add": "Toevoegen",
"Add a model id": "Een model-id toevoegen",
@ -27,6 +28,7 @@
"Add Memory": "Voeg Geheugen toe",
"Add message": "Voeg bericht toe",
"Add Model": "Voeg Model toe",
"Add Tag": "",
"Add Tags": "voeg tags toe",
"Add User": "Voeg Gebruiker toe",
"Adjusting these settings will apply changes universally to all users.": "Het aanpassen van deze instellingen zal universeel worden toegepast op alle gebruikers.",
@ -168,6 +170,7 @@
"Delete chat": "Verwijder chat",
"Delete Chat": "Verwijder Chat",
"Delete chat?": "",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "verwijder deze link",
@ -211,6 +214,7 @@
"Edit Doc": "Wijzig Doc",
"Edit Memory": "",
"Edit User": "Wijzig Gebruiker",
"ElevenLabs": "",
"Email": "Email",
"Embedding Batch Size": "",
"Embedding Model": "Embedding Model",
@ -360,7 +364,6 @@
"Manage Models": "Beheer Modellen",
"Manage Ollama Models": "Beheer Ollama Modellen",
"Manage Pipelines": "Pijplijnen beheren",
"Manage Valves": "",
"March": "Maart",
"Max Tokens (num_predict)": "Max Tokens (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maximaal 3 modellen kunnen tegelijkertijd worden gedownload. Probeer het later opnieuw.",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Berichten die u verzendt nadat u uw link hebt gemaakt, worden niet gedeeld. Gebruikers met de URL kunnen de gedeelde chat bekijken.",
"Min P": "",
"Minimum Score": "Minimale Score",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -500,6 +504,7 @@
"Save": "Opslaan",
"Save & Create": "Opslaan & Creëren",
"Save & Update": "Opslaan & Bijwerken",
"Save Tag": "",
"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": "Chat logs direct opslaan in de opslag van je browser wordt niet langer ondersteund. Neem even de tijd om je chat logs te downloaden en te verwijderen door op de knop hieronder te klikken. Maak je geen zorgen, je kunt je chat logs eenvoudig opnieuw importeren naar de backend via",
"Scan": "Scan",
"Scan complete!": "Scan voltooid!",
@ -617,6 +622,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
"To add documents here, upload them to the \"Documents\" workspace first.": "",
"to chat input.": "naar chat input.",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "Vandaag",

View File

@ -15,6 +15,7 @@
"Account": "ਖਾਤਾ",
"Account Activation Pending": "",
"Accurate information": "ਸਹੀ ਜਾਣਕਾਰੀ",
"Actions": "",
"Active Users": "",
"Add": "ਸ਼ਾਮਲ ਕਰੋ",
"Add a model id": "ਇੱਕ ਮਾਡਲ ID ਸ਼ਾਮਲ ਕਰੋ",
@ -27,6 +28,7 @@
"Add Memory": "ਮਿਹਾਨ ਸ਼ਾਮਲ ਕਰੋ",
"Add message": "ਸੁਨੇਹਾ ਸ਼ਾਮਲ ਕਰੋ",
"Add Model": "ਮਾਡਲ ਸ਼ਾਮਲ ਕਰੋ",
"Add Tag": "",
"Add Tags": "ਟੈਗ ਸ਼ਾਮਲ ਕਰੋ",
"Add User": "ਉਪਭੋਗਤਾ ਸ਼ਾਮਲ ਕਰੋ",
"Adjusting these settings will apply changes universally to all users.": "ਇਹ ਸੈਟਿੰਗਾਂ ਨੂੰ ਠੀਕ ਕਰਨ ਨਾਲ ਸਾਰੇ ਉਪਭੋਗਤਾਵਾਂ ਲਈ ਬਦਲਾਅ ਲਾਗੂ ਹੋਣਗੇ।",
@ -168,6 +170,7 @@
"Delete chat": "ਗੱਲਬਾਤ ਮਿਟਾਓ",
"Delete Chat": "ਗੱਲਬਾਤ ਮਿਟਾਓ",
"Delete chat?": "",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "ਇਸ ਲਿੰਕ ਨੂੰ ਮਿਟਾਓ",
@ -211,6 +214,7 @@
"Edit Doc": "ਡਾਕੂਮੈਂਟ ਸੰਪਾਦਨ ਕਰੋ",
"Edit Memory": "",
"Edit User": "ਉਪਭੋਗਤਾ ਸੰਪਾਦਨ ਕਰੋ",
"ElevenLabs": "",
"Email": "ਈਮੇਲ",
"Embedding Batch Size": "",
"Embedding Model": "ਐਮਬੈੱਡਿੰਗ ਮਾਡਲ",
@ -360,7 +364,6 @@
"Manage Models": "ਮਾਡਲਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ",
"Manage Ollama Models": "ਓਲਾਮਾ ਮਾਡਲਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ",
"Manage Pipelines": "ਪਾਈਪਲਾਈਨਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ",
"Manage Valves": "",
"March": "ਮਾਰਚ",
"Max Tokens (num_predict)": "ਮੈਕਸ ਟੋਕਨ (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "ਇੱਕ ਸਮੇਂ ਵਿੱਚ ਵੱਧ ਤੋਂ ਵੱਧ 3 ਮਾਡਲ ਡਾਊਨਲੋਡ ਕੀਤੇ ਜਾ ਸਕਦੇ ਹਨ। ਕਿਰਪਾ ਕਰਕੇ ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "ਤੁਹਾਡਾ ਲਿੰਕ ਬਣਾਉਣ ਤੋਂ ਬਾਅਦ ਤੁਹਾਡੇ ਵੱਲੋਂ ਭੇਜੇ ਗਏ ਸੁਨੇਹੇ ਸਾਂਝੇ ਨਹੀਂ ਕੀਤੇ ਜਾਣਗੇ। URL ਵਾਲੇ ਉਪਭੋਗਤਾ ਸਾਂਝੀ ਚੈਟ ਨੂੰ ਵੇਖ ਸਕਣਗੇ।",
"Min P": "",
"Minimum Score": "ਘੱਟੋ-ਘੱਟ ਸਕੋਰ",
"Mirostat": "ਮਿਰੋਸਟੈਟ",
"Mirostat Eta": "ਮਿਰੋਸਟੈਟ ਈਟਾ",
@ -500,6 +504,7 @@
"Save": "ਸੰਭਾਲੋ",
"Save & Create": "ਸੰਭਾਲੋ ਅਤੇ ਬਣਾਓ",
"Save & Update": "ਸੰਭਾਲੋ ਅਤੇ ਅੱਪਡੇਟ ਕਰੋ",
"Save Tag": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "ਤੁਹਾਡੇ ਬ੍ਰਾਊਜ਼ਰ ਦੇ ਸਟੋਰੇਜ ਵਿੱਚ ਸਿੱਧੇ ਗੱਲਬਾਤ ਲੌਗ ਸੰਭਾਲਣਾ ਹੁਣ ਸਮਰਥਿਤ ਨਹੀਂ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਹੇਠਾਂ ਦਿੱਤੇ ਬਟਨ 'ਤੇ ਕਲਿੱਕ ਕਰਕੇ ਆਪਣੇ ਗੱਲਬਾਤ ਲੌਗ ਡਾਊਨਲੋਡ ਅਤੇ ਮਿਟਾਉਣ ਲਈ ਕੁਝ ਸਮਾਂ ਲਓ। ਚਿੰਤਾ ਨਾ ਕਰੋ, ਤੁਸੀਂ ਆਪਣੇ ਗੱਲਬਾਤ ਲੌਗ ਨੂੰ ਬੈਕਐਂਡ ਵਿੱਚ ਆਸਾਨੀ ਨਾਲ ਮੁੜ ਆਯਾਤ ਕਰ ਸਕਦੇ ਹੋ",
"Scan": "ਸਕੈਨ ਕਰੋ",
"Scan complete!": "ਸਕੈਨ ਪੂਰਾ!",
@ -617,6 +622,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
"To add documents here, upload them to the \"Documents\" workspace first.": "",
"to chat input.": "ਗੱਲਬਾਤ ਇਨਪੁਟ ਲਈ।",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "ਅੱਜ",

View File

@ -15,6 +15,7 @@
"Account": "Konto",
"Account Activation Pending": "",
"Accurate information": "Dokładna informacja",
"Actions": "",
"Active Users": "",
"Add": "Dodaj",
"Add a model id": "Dodawanie identyfikatora modelu",
@ -27,6 +28,7 @@
"Add Memory": "Dodaj pamięć",
"Add message": "Dodaj wiadomość",
"Add Model": "Dodaj model",
"Add Tag": "",
"Add Tags": "Dodaj tagi",
"Add User": "Dodaj użytkownika",
"Adjusting these settings will apply changes universally to all users.": "Dostosowanie tych ustawień spowoduje zastosowanie zmian uniwersalnie do wszystkich użytkowników.",
@ -168,6 +170,7 @@
"Delete chat": "Usuń czat",
"Delete Chat": "Usuń czat",
"Delete chat?": "",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "usuń ten link",
@ -211,6 +214,7 @@
"Edit Doc": "Edytuj dokument",
"Edit Memory": "",
"Edit User": "Edytuj użytkownika",
"ElevenLabs": "",
"Email": "Email",
"Embedding Batch Size": "",
"Embedding Model": "Model osadzania",
@ -360,7 +364,6 @@
"Manage Models": "Zarządzaj modelami",
"Manage Ollama Models": "Zarządzaj modelami Ollama",
"Manage Pipelines": "Zarządzanie potokami",
"Manage Valves": "",
"March": "Marzec",
"Max Tokens (num_predict)": "Maksymalna liczba żetonów (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maksymalnie 3 modele można pobierać jednocześnie. Spróbuj ponownie później.",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Wiadomości wysyłane po utworzeniu linku nie będą udostępniane. Użytkownicy z adresem URL będą mogli wyświetlić udostępniony czat.",
"Min P": "",
"Minimum Score": "Minimalny wynik",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -500,6 +504,7 @@
"Save": "Zapisz",
"Save & Create": "Zapisz i utwórz",
"Save & Update": "Zapisz i zaktualizuj",
"Save Tag": "",
"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": "Bezpośrednie zapisywanie dzienników czatu w pamięci przeglądarki nie jest już obsługiwane. Prosimy o pobranie i usunięcie dzienników czatu, klikając poniższy przycisk. Nie martw się, możesz łatwo ponownie zaimportować dzienniki czatu do backendu za pomocą",
"Scan": "Skanuj",
"Scan complete!": "Skanowanie zakończone!",
@ -619,6 +624,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
"To add documents here, upload them to the \"Documents\" workspace first.": "",
"to chat input.": "do pola wprowadzania czatu.",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "Dzisiaj",

View File

@ -1,24 +1,25 @@
{
"'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' ou '-1' para não expirar.",
"'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' ou '-1' para sem expiração.",
"(Beta)": "(Beta)",
"(e.g. `sh webui.sh --api --api-auth username_password`)": "",
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(por exemplo, `sh webui.sh --api --api-auth username_password`)",
"(e.g. `sh webui.sh --api`)": "(por exemplo, `sh webui.sh --api`)",
"(latest)": "(mais recente)",
"{{ models }}": "{{ modelos }}",
"{{ owner }}: You cannot delete a base model": "{{ owner }}: Não é possível excluir um modelo base",
"(latest)": "(último)",
"{{ models }}": "{{ models }}",
"{{ owner }}: You cannot delete a base model": "{{ owner }}: Você não pode deletar um modelo base",
"{{modelName}} is thinking...": "{{modelName}} está pensando...",
"{{user}}'s Chats": "{{user}}'s Chats",
"{{webUIName}} Backend Required": "{{webUIName}} Backend Necessário",
"A task model is used when performing tasks such as generating titles for chats and web search queries": "Um modelo de tarefa é usado ao executar tarefas como a geração de títulos para bate-papos e consultas de pesquisa na Web",
"{{user}}'s Chats": "Chats de {{user}}",
"{{webUIName}} Backend Required": "Backend {{webUIName}} necessário",
"A task model is used when performing tasks such as generating titles for chats and web search queries": "Um modelo de tarefa é usado ao realizar tarefas como gerar títulos para chats e consultas de pesquisa na web",
"a user": "um usuário",
"About": "Sobre",
"Account": "Conta",
"Account Activation Pending": "Ativação de Conta Pendente",
"Accurate information": "Informações precisas",
"Account Activation Pending": "Ativação da Conta Pendente",
"Accurate information": "Informação precisa",
"Actions": "",
"Active Users": "Usuários Ativos",
"Add": "Adicionar",
"Add a model id": "Adicionar um ID de modelo",
"Add a short description about what this model does": "Adicione uma breve descrição sobre o que este modelo faz",
"Add a short description about what this model does": "Adicione uma descrição curta sobre o que este modelo faz",
"Add a short title for this prompt": "Adicione um título curto para este prompt",
"Add a tag": "Adicionar uma tag",
"Add custom prompt": "Adicionar prompt personalizado",
@ -27,21 +28,22 @@
"Add Memory": "Adicionar Memória",
"Add message": "Adicionar mensagem",
"Add Model": "Adicionar Modelo",
"Add Tags": "adicionar Tags",
"Add Tag": "Adicionar Tag",
"Add Tags": "Adicionar Tags",
"Add User": "Adicionar Usuário",
"Adjusting these settings will apply changes universally to all users.": "Ajustar essas configurações aplicará alterações universalmente a todos os usuários.",
"admin": "administrador",
"Admin": "Administrador",
"Admin Panel": "Painel do Administrador",
"Admin Settings": "Configurações do Administrador",
"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Adminstradores têm acesso a todas as ferramentas o tempo todo; os usuários precisam de ferramentas atribuídas por modelo no espaço de trabalho.",
"Adjusting these settings will apply changes universally to all users.": "Ajustar essas configurações aplicará mudanças universalmente a todos os usuários.",
"admin": "admin",
"Admin": "Admin",
"Admin Panel": "Painel do Admin",
"Admin Settings": "Configurações do Admin",
"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Os admins têm acesso a todas as ferramentas o tempo todo; os usuários precisam de ferramentas atribuídas por modelo no workspace.",
"Advanced Parameters": "Parâmetros Avançados",
"Advanced Params": "Parâmetros Avançados",
"all": "todos",
"All Documents": "Todos os Documentos",
"All Users": "Todos os Usuários",
"Allow": "Permitir",
"Allow Chat Deletion": "Permitir Exclusão de Bate-papo",
"Allow Chat Deletion": "Permitir Exclusão de Chats",
"Allow non-local voices": "Permitir vozes não locais",
"Allow User Location": "Permitir Localização do Usuário",
"Allow Voice Interruption in Call": "Permitir Interrupção de Voz na Chamada",
@ -51,92 +53,92 @@
"and": "e",
"and create a new shared link.": "e criar um novo link compartilhado.",
"API Base URL": "URL Base da API",
"API Key": "Chave da API",
"API Key created.": "Chave da API criada.",
"API keys": "Chaves da API",
"API Key": "Chave API",
"API Key created.": "Chave API criada.",
"API keys": "Chaves API",
"April": "Abril",
"Archive": "Arquivo",
"Archive All Chats": "Arquivar todos os bate-papos",
"Archived Chats": "Bate-papos arquivados",
"Archive": "Arquivar",
"Archive All Chats": "Arquivar Todos os Chats",
"Archived Chats": "Chats Arquivados",
"are allowed - Activate this command by typing": "são permitidos - Ative este comando digitando",
"Are you sure?": "Tem certeza?",
"Are you sure?": "Você tem certeza?",
"Attach file": "Anexar arquivo",
"Attention to detail": "Detalhado",
"Attention to detail": "Atenção aos detalhes",
"Audio": "Áudio",
"Audio settings updated successfully": "Configurações de áudio atualizadas com sucesso",
"August": "Agosto",
"Auto-playback response": "Reprodução automática da resposta",
"AUTOMATIC1111 Api Auth String": "",
"AUTOMATIC1111 Base URL": "URL Base do AUTOMATIC1111",
"AUTOMATIC1111 Base URL is required.": "A URL Base do AUTOMATIC1111 é obrigatória.",
"Auto-playback response": "Resposta de reprodução automática",
"AUTOMATIC1111 Api Auth String": "String de Autenticação da API AUTOMATIC1111",
"AUTOMATIC1111 Base URL": "URL Base AUTOMATIC1111",
"AUTOMATIC1111 Base URL is required.": "URL Base AUTOMATIC1111 é necessária.",
"available!": "disponível!",
"Back": "Voltar",
"Bad Response": "Resposta ruim",
"Bad Response": "Resposta Ruim",
"Banners": "Banners",
"Base Model (From)": "Modelo Base (De)",
"Base Model (From)": "Modelo Base (From)",
"Batch Size (num_batch)": "Tamanho do Lote (num_batch)",
"before": "antes",
"Being lazy": "Ser preguiçoso",
"Brave Search API Key": "Chave da API de pesquisa do Brave",
"Bypass SSL verification for Websites": "Ignorar verificação SSL para sites",
"Being lazy": "Sendo preguiçoso",
"Brave Search API Key": "Chave API do Brave Search",
"Bypass SSL verification for Websites": "Ignorar verificação SSL para Sites",
"Call": "Chamada",
"Call feature is not supported when using Web STT engine": "Chamada não é suportada ao usar o mecanismo Web STT",
"Camera": "Camera",
"Call feature is not supported when using Web STT engine": "O recurso de chamada não é suportado ao usar o mecanismo Web STT",
"Camera": "Câmera",
"Cancel": "Cancelar",
"Capabilities": "Capacidades",
"Change Password": "Alterar Senha",
"Chat": "Bate-papo",
"Chat Background Image": "Image de Fundo do Bate-papo",
"Chat Bubble UI": "UI de Bala de Bate-papo",
"Chat Controls": "Controles de Bate-papo",
"Chat direction": "Direção do Bate-papo",
"Chat History": "Histórico de Bate-papo",
"Chat History is off for this browser.": "O histórico de bate-papo está desativado para este navegador.",
"Chats": "Bate-papos",
"Check Again": "Verifique novamente",
"Change Password": "Mudar Senha",
"Chat": "Chat",
"Chat Background Image": "Imagem de Fundo do Chat",
"Chat Bubble UI": "Interface de Bolha de Chat",
"Chat Controls": "Controles de Chat",
"Chat direction": "Direção do Chat",
"Chat History": "Histórico de Chat",
"Chat History is off for this browser.": "O Histórico de Chat está desativado para este navegador.",
"Chats": "Chats",
"Check Again": "Verificar Novamente",
"Check for updates": "Verificar atualizações",
"Checking for updates...": "Verificando atualizações...",
"Choose a model before saving...": "Escolha um modelo antes de salvar...",
"Chunk Overlap": "Sobreposição de Fragmento",
"Chunk Params": "Parâmetros de Fragmento",
"Chunk Size": "Tamanho do Fragmento",
"Chunk Overlap": "Sobreposição de Chunk",
"Chunk Params": "Parâmetros de Chunk",
"Chunk Size": "Tamanho do Chunk",
"Citation": "Citação",
"Clear memory": "Limpar memória",
"Click here for help.": "Clique aqui para obter ajuda.",
"Click here to": "Clique aqui para",
"Click here to download user import template file.": "Clique aqui para baixar o arquivo de modelo de importação de usuário.",
"Click here to select": "Clique aqui para selecionar",
"Click here to select a csv file.": "Clique aqui para selecionar um arquivo csv.",
"Click here to select a py file.": "Clique aqui para selecionar um arquivo py.",
"Click here to select documents.": "Clique aqui para selecionar documentos.",
"Click here to download user import template file.": "Clique aqui para baixar o arquivo de modelo de importação de usuários.",
"Click here to select": "Clique aqui para enviar",
"Click here to select a csv file.": "Clique aqui para enviar um arquivo csv.",
"Click here to select a py file.": "Clique aqui para enviar um arquivo py.",
"Click here to select documents.": "Clique aqui para enviar documentos.",
"click here.": "clique aqui.",
"Click on the user role button to change a user's role.": "Clique no botão de função do usuário para alterar a função de um usuário.",
"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Permissão de gravação da área de transferência negada. Verifique as configurações do seu navegador para conceder o acesso necessário.",
"Clone": "Clone",
"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Permissão de escrita na área de transferência negada. Verifique as configurações do seu navegador para conceder o acesso necessário.",
"Clone": "Clonar",
"Close": "Fechar",
"Code formatted successfully": "Código formatado com sucesso",
"Collection": "Coleção",
"ComfyUI": "ComfyUI",
"ComfyUI Base URL": "URL Base do ComfyUI",
"ComfyUI Base URL is required.": "A URL Base do ComfyUI é obrigatória.",
"ComfyUI Base URL is required.": "URL Base do ComfyUI é necessária.",
"Command": "Comando",
"Concurrent Requests": "Solicitações simultâneas",
"Concurrent Requests": "Solicitações Concomitantes",
"Confirm": "Confirmar",
"Confirm Password": "Confirmar Senha",
"Confirm your action": "Confirmar sua ação",
"Confirm your action": "Confirme sua ação",
"Connections": "Conexões",
"Contact Admin for WebUI Access": "Contate o Administrador para Acesso ao WebUI",
"Contact Admin for WebUI Access": "Contate o Admin para Acesso ao WebUI",
"Content": "Conteúdo",
"Content Extraction": "Extração de Conteúdo",
"Context Length": "Comprimento do Contexto",
"Continue Response": "Continuar resposta",
"Context Length": "Context Length",
"Continue Response": "Continuar Resposta",
"Continue with {{provider}}": "Continuar com {{provider}}",
"Controls": "Controles",
"Copied shared chat URL to clipboard!": "URL de bate-papo compartilhado copiada com sucesso!",
"Copied shared chat URL to clipboard!": "URL de chat compartilhado copiado para a área de transferência!",
"Copy": "Copiar",
"Copy last code block": "Copiar último bloco de código",
"Copy last response": "Copiar última resposta",
"Copy Link": "Copiar link",
"Copy Link": "Copiar Link",
"Copying to clipboard was successful!": "Cópia para a área de transferência bem-sucedida!",
"Create a model": "Criar um modelo",
"Create Account": "Criar Conta",
@ -149,124 +151,126 @@
"Current Model": "Modelo Atual",
"Current Password": "Senha Atual",
"Custom": "Personalizado",
"Customize models for a specific purpose": "Personalizar modelos para uma finalidade específica",
"Customize models for a specific purpose": "Personalize modelos para um propósito específico",
"Dark": "Escuro",
"Dashboard": "Dashboard",
"Database": "Banco de dados",
"Database": "Banco de Dados",
"December": "Dezembro",
"Default": "Padrão",
"Default (Automatic1111)": "Padrão (Automatic1111)",
"Default (SentenceTransformers)": "Padrão (SentenceTransformers)",
"Default Model": "Modelo padrão",
"Default Model": "Modelo Padrão",
"Default model updated": "Modelo padrão atualizado",
"Default Prompt Suggestions": "Sugestões de Prompt Padrão",
"Default User Role": "Função de Usuário Padrão",
"delete": "excluir",
"Delete": "Excluir",
"Delete a model": "Excluir um modelo",
"Delete All Chats": "Excluir todos os bate-papos",
"Delete chat": "Excluir bate-papo",
"Delete Chat": "Excluir Bate-papo",
"Delete chat?": "Excluir bate-papo?",
"Delete function?": "Excluir função?",
"Delete prompt?": "Excluir prompt?",
"delete this link": "excluir este link",
"delete": "deletar",
"Delete": "Deletar",
"Delete a model": "Deletar um modelo",
"Delete All Chats": "Deletar Todos os Chats",
"Delete chat": "Deletar chat",
"Delete Chat": "Deletar Chat",
"Delete chat?": "Deletar chat?",
"Delete Doc": "Deletar Documento",
"Delete function?": "Deletar função?",
"Delete prompt?": "Deletar prompt?",
"delete this link": "deletar este link",
"Delete tool?": "Deletar ferramenta?",
"Delete User": "Excluir Usuário",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} excluído",
"Deleted {{name}}": "Excluído {{nome}}",
"Delete User": "Deletar Usuário",
"Deleted {{deleteModelTag}}": "Deletado {{deleteModelTag}}",
"Deleted {{name}}": "Deletado {{name}}",
"Description": "Descrição",
"Didn't fully follow instructions": "Não seguiu instruções com precisão",
"Didn't fully follow instructions": "Não seguiu completamente as instruções",
"Disabled": "Desativado",
"Discover a function": "Descobrir uma função",
"Discover a function": "Descubra uma função",
"Discover a model": "Descubra um modelo",
"Discover a prompt": "Descobrir um prompt",
"Discover a tool": "Descobrir uma ferramenta",
"Discover, download, and explore custom functions": "Descobrir, baixar e explorar funções personalizadas",
"Discover, download, and explore custom prompts": "Descobrir, baixar e explorar prompts personalizados",
"Discover, download, and explore custom tools": "Descobrir, baixar e explorar ferramentas personalizadas",
"Discover, download, and explore model presets": "Descobrir, baixar e explorar predefinições de modelo",
"Dismissible": "Dismissível",
"Discover a prompt": "Descubra um prompt",
"Discover a tool": "Descubra uma ferramenta",
"Discover, download, and explore custom functions": "Descubra, baixe e explore funções personalizadas",
"Discover, download, and explore custom prompts": "Descubra, baixe e explore prompts personalizados",
"Discover, download, and explore custom tools": "Descubra, baixe e explore ferramentas personalizadas",
"Discover, download, and explore model presets": "Descubra, baixe e explore predefinições de modelos",
"Dismissible": "Descartável",
"Display Emoji in Call": "Exibir Emoji na Chamada",
"Display the username instead of You in the Chat": "Exibir o nome de usuário em vez de Você no Bate-papo",
"Display the username instead of You in the Chat": "Exibir o nome de usuário em vez de Você no Chat",
"Do not install functions from sources you do not fully trust.": "Não instale funções de fontes que você não confia totalmente.",
"Do not install tools from sources you do not fully trust.": "Não instale ferramentas de fontes que você não confia totalmente.",
"Document": "Documento",
"Document Settings": "Configurações de Documento",
"Documentation": "Documentação",
"Documents": "Documentos",
"does not make any external connections, and your data stays securely on your locally hosted server.": "não faz conexões externas e seus dados permanecem seguros em seu servidor hospedado localmente.",
"does not make any external connections, and your data stays securely on your locally hosted server.": "não faz nenhuma conexão externa, e seus dados permanecem seguros no seu servidor local.",
"Don't Allow": "Não Permitir",
"Don't have an account?": "Não tem uma conta?",
"don't install random functions from sources you don't trust.": "não instale funções aleatórias de fontes que você não confia.",
"don't install random tools from sources you don't trust.": "não instale ferramentas aleatórias de fontes que você não confia.",
"Don't like the style": "Não gosta do estilo",
"Done": "Feito",
"Done": "Concluído",
"Download": "Baixar",
"Download canceled": "Download cancelado",
"Download Database": "Baixar Banco de Dados",
"Drop any files here to add to the conversation": "Solte os arquivos aqui para adicionar à conversa",
"Drop any files here to add to the conversation": "Solte qualquer arquivo aqui para adicionar à conversa",
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "por exemplo, '30s', '10m'. Unidades de tempo válidas são 's', 'm', 'h'.",
"Edit": "Editar",
"Edit Doc": "Editar Documento",
"Edit Memory": "Editar Memória",
"Edit User": "Editar Usuário",
"Email": "E-mail",
"ElevenLabs": "",
"Email": "Email",
"Embedding Batch Size": "Tamanho do Lote de Embedding",
"Embedding Model": "Modelo de Embedding",
"Embedding Model Engine": "Motor de Modelo de Embedding",
"Embedding model set to \"{{embedding_model}}\"": "Modelo de Embedding definido como \"{{embedding_model}}\"",
"Enable Chat History": "Ativar Histórico de Bate-papo",
"Enable Community Sharing": "Habilitar o compartilhamento da comunidade",
"Enable New Sign Ups": "Ativar Novas Inscrições",
"Enable Web Search": "Habilitar a Pesquisa na Web",
"Enabled": "Habilitado",
"Embedding Model Engine": "Motor do Modelo de Embedding",
"Embedding model set to \"{{embedding_model}}\"": "Modelo de embedding definido para \"{{embedding_model}}\"",
"Enable Chat History": "Ativar Histórico de Chat",
"Enable Community Sharing": "Ativar Compartilhamento Comunitário",
"Enable New Sign Ups": "Ativar Novos Cadastros",
"Enable Web Search": "Ativar Pesquisa na Web",
"Enabled": "Ativado",
"Engine": "Motor",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Garanta que seu arquivo CSV inclua 4 colunas nesta ordem: Nome, E-mail, Senha, Função.",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Certifique-se de que seu arquivo CSV inclua 4 colunas nesta ordem: Nome, Email, Senha, Função.",
"Enter {{role}} message here": "Digite a mensagem de {{role}} aqui",
"Enter a detail about yourself for your LLMs to recall": "Digite um detalhe sobre você para que seus LLMs possam lembrar",
"Enter api auth string (e.g. username:password)": "Digite a string de autenticação da API (por exemplo, nome de usuário:senha)",
"Enter Brave Search API Key": "Insira a chave da API do Brave Search",
"Enter Chunk Overlap": "Digite a Sobreposição de Fragmento",
"Enter Chunk Size": "Digite o Tamanho do Fragmento",
"Enter Github Raw URL": "Insira a URL bruta do Github",
"Enter Google PSE API Key": "Insira a chave da API PSE do Google",
"Enter Google PSE Engine Id": "Digite o ID do mecanismo PSE do Google",
"Enter a detail about yourself for your LLMs to recall": "Digite um detalhe sobre você para seus LLMs lembrarem",
"Enter api auth string (e.g. username:password)": "Digite a string de autenticação da API (por exemplo, username:password)",
"Enter Brave Search API Key": "Digite a Chave API do Brave Search",
"Enter Chunk Overlap": "Digite a Sobreposição de Chunk",
"Enter Chunk Size": "Digite o Tamanho do Chunk",
"Enter Github Raw URL": "Digite a URL bruta do Github",
"Enter Google PSE API Key": "Digite a Chave API do Google PSE",
"Enter Google PSE Engine Id": "Digite o ID do Motor do Google PSE",
"Enter Image Size (e.g. 512x512)": "Digite o Tamanho da Imagem (por exemplo, 512x512)",
"Enter language codes": "Digite os códigos de idioma",
"Enter model tag (e.g. {{modelTag}})": "Digite a tag do modelo (por exemplo, {{modelTag}})",
"Enter Number of Steps (e.g. 50)": "Digite o Número de Etapas (por exemplo, 50)",
"Enter Number of Steps (e.g. 50)": "Digite o Número de Passos (por exemplo, 50)",
"Enter Score": "Digite a Pontuação",
"Enter Searxng Query URL": "Insira a URL de consulta do Searxng",
"Enter Serper API Key": "Digite a chave da API do Serper",
"Enter Serply API Key": "Digite a chave da API do Serply",
"Enter Serpstack API Key": "Digite a chave da API Serpstack",
"Enter Searxng Query URL": "Digite a URL de Consulta do Searxng",
"Enter Serper API Key": "Digite a Chave API do Serper",
"Enter Serply API Key": "Digite a Chave API do Serply",
"Enter Serpstack API Key": "Digite a Chave API do Serpstack",
"Enter stop sequence": "Digite a sequência de parada",
"Enter system prompt": "Digite o prompt do sistema",
"Enter Tavily API Key": "Digite a chave da API Tavily",
"Enter Tavily API Key": "Digite a Chave API do Tavily",
"Enter Tika Server URL": "Digite a URL do Servidor Tika",
"Enter Top K": "Digite o Top K",
"Enter URL (e.g. http://127.0.0.1:7860/)": "Digite a URL (por exemplo, http://127.0.0.1:7860/)",
"Enter URL (e.g. http://localhost:11434)": "Digite a URL (por exemplo, http://localhost:11434)",
"Enter Your Email": "Digite seu E-mail",
"Enter Your Full Name": "Digite seu Nome Completo",
"Enter Your Email": "Digite Seu Email",
"Enter Your Full Name": "Digite Seu Nome Completo",
"Enter your message": "Digite sua mensagem",
"Enter Your Password": "Digite sua Senha",
"Enter Your Role": "Digite sua Função",
"Enter Your Password": "Digite Sua Senha",
"Enter Your Role": "Digite Sua Função",
"Error": "Erro",
"Experimental": "Experimental",
"Export": "Exportação",
"Export All Chats (All Users)": "Exportar Todos os Bate-papos (Todos os Usuários)",
"Export": "Exportar",
"Export All Chats (All Users)": "Exportar Todos os Chats (Todos os Usuários)",
"Export chat (.json)": "Exportar chat (.json)",
"Export Chats": "Exportar Bate-papos",
"Export Chats": "Exportar Chats",
"Export Documents Mapping": "Exportar Mapeamento de Documentos",
"Export Functions": "Exportar Funções",
"Export LiteLLM config.yaml": "Exportar config.yaml do LiteLLM",
"Export Models": "Modelos de Exportação",
"Export Models": "Exportar Modelos",
"Export Prompts": "Exportar Prompts",
"Export Tools": "Exportar Ferramentas",
"External Models": "Modelos Externos",
"Failed to create API Key.": "Falha ao criar a Chave da API.",
"Failed to create API Key.": "Falha ao criar a Chave API.",
"Failed to read clipboard contents": "Falha ao ler o conteúdo da área de transferência",
"Failed to update settings": "Falha ao atualizar as configurações",
"February": "Fevereiro",
@ -274,96 +278,95 @@
"File": "Arquivo",
"File Mode": "Modo de Arquivo",
"File not found.": "Arquivo não encontrado.",
"Files": "",
"Filter is now globally disabled": "O filtro agora está globalmente desativado",
"Filter is now globally enabled": "O filtro agora está globalmente ativado",
"Files": "Arquivos",
"Filter is now globally disabled": "O filtro está agora desativado globalmente",
"Filter is now globally enabled": "O filtro está agora ativado globalmente",
"Filters": "Filtros",
"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Impostação de impressão digital detectada: Não é possível usar iniciais como avatar. Padronizando para imagem de perfil padrão.",
"Fluidly stream large external response chunks": "Transmita com fluidez grandes blocos de resposta externa",
"Focus chat input": "Focar entrada de bate-papo",
"Followed instructions perfectly": "Seguiu instruções perfeitamente",
"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Falsificação de impressão digital detectada: Não foi possível usar as iniciais como avatar. Usando a imagem de perfil padrão.",
"Fluidly stream large external response chunks": "Transmitir fluentemente grandes blocos de respostas externas",
"Focus chat input": "Focar entrada de chat",
"Followed instructions perfectly": "Seguiu as instruções perfeitamente",
"Form": "Formulário",
"Format your variables using square brackets like this:": "Formate suas variáveis usando colchetes como este:",
"Frequency Penalty": "Penalidade de Frequência",
"Format your variables using square brackets like this:": "Formate suas variáveis usando colchetes assim:",
"Frequency Penalty": "Frequency Penalty",
"Function created successfully": "Função criada com sucesso",
"Function deleted successfully": "Função deletada com sucesso",
"Function Description (e.g. A filter to remove profanity from text)": "Descrição da Função (por exemplo, Um filtro para remover palavrões do texto)",
"Function ID (e.g. my_filter)": "ID da Função (por exemplo, meu_filtro)",
"Function is now globally disabled": "A função agora está globalmente desativada",
"Function is now globally enabled": "A função agora está globalmente ativada",
"Function Name (e.g. My Filter)": "Nome da Função (por exemplo, Meu Filtro)",
"Function ID (e.g. my_filter)": "ID da Função (por exemplo, my_filter)",
"Function is now globally disabled": "A função está agora desativada globalmente",
"Function is now globally enabled": "A função está agora ativada globalmente",
"Function Name (e.g. My Filter)": "Nome da Função (por exemplo, My Filter)",
"Function updated successfully": "Função atualizada com sucesso",
"Functions": "Funções",
"Functions allow arbitrary code execution": "Funções permitem a execução de código arbitrário",
"Functions allow arbitrary code execution.": "Funções permitem a execução de código arbitrário.",
"Functions allow arbitrary code execution": "Funções permitem a execução arbitrária de código",
"Functions allow arbitrary code execution.": "Funções permitem a execução arbitrária de código.",
"Functions imported successfully": "Funções importadas com sucesso",
"General": "Geral",
"General Settings": "Configurações Gerais",
"Generate Image": "Gerar imagem",
"Generate Image": "Gerar Imagem",
"Generating search query": "Gerando consulta de pesquisa",
"Generation Info": "Informações de Geração",
"Get up and running with": "Comece a trabalhar com",
"Get up and running with": "Comece e esteja em funcionamento com",
"Global": "Global",
"Good Response": "Boa Resposta",
"Google PSE API Key": "Chave de API PSE do Google",
"Google PSE Engine Id": "ID do mecanismo PSE do Google",
"Google PSE API Key": "Chave API do Google PSE",
"Google PSE Engine Id": "ID do Motor do Google PSE",
"h:mm a": "h:mm a",
"has no conversations.": "não possui bate-papos.",
"has no conversations.": "não tem conversas.",
"Hello, {{name}}": "Olá, {{name}}",
"Help": "Ajuda",
"Hide": "Ocultar",
"Hide Model": "Esconder modelo",
"How can I help you today?": "Como posso ajudá-lo hoje?",
"Hide Model": "Ocultar Modelo",
"How can I help you today?": "Como posso ajudar você hoje?",
"Hybrid Search": "Pesquisa 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.": "",
"Image Generation (Experimental)": "Geração de Imagens (Experimental)",
"Image Generation Engine": "Mecanismo de Geração de Imagens",
"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.": "Eu reconheço que li e entendi as implicações da minha ação. Estou ciente dos riscos associados à execução de código arbitrário e verifiquei a confiabilidade da fonte.",
"Image Generation (Experimental)": "Geração de Imagem (Experimental)",
"Image Generation Engine": "Motor de Geração de Imagem",
"Image Settings": "Configurações de Imagem",
"Images": "Imagens",
"Import Chats": "Importar Bate-papos",
"Import Chats": "Importar Chats",
"Import Documents Mapping": "Importar Mapeamento de Documentos",
"Import Functions": "Importar Funções",
"Import Models": "Modelos de Importação",
"Import Models": "Importar Modelos",
"Import Prompts": "Importar Prompts",
"Import Tools": "Importar Ferramentas",
"Include `--api-auth` flag when running stable-diffusion-webui": "Inclua a flag `--api-auth` ao executar stable-diffusion-webui",
"Include `--api` flag when running stable-diffusion-webui": "Inclua a flag `--api` ao executar stable-diffusion-webui",
"Include `--api-auth` flag when running stable-diffusion-webui": "Incluir a flag `--api-auth` ao executar stable-diffusion-webui",
"Include `--api` flag when running stable-diffusion-webui": "Incluir a flag `--api` ao executar stable-diffusion-webui",
"Info": "Informação",
"Input commands": "Comandos de entrada",
"Install from Github URL": "Instalar a partir do URL do Github",
"Instant Auto-Send After Voice Transcription": "Autoenvio Instantâneo Após Transcrição de Voz",
"Install from Github URL": "Instalar da URL do Github",
"Instant Auto-Send After Voice Transcription": "Envio Automático Instantâneo Após Transcrição de Voz",
"Interface": "Interface",
"Invalid Tag": "Etiqueta Inválida",
"Invalid Tag": "Tag Inválida",
"January": "Janeiro",
"join our Discord for help.": "junte-se ao nosso Discord para obter ajuda.",
"join our Discord for help.": "junte-se ao nosso Discord para ajuda.",
"JSON": "JSON",
"JSON Preview": "Visualização JSON",
"JSON Preview": "Pré-visualização JSON",
"July": "Julho",
"June": "Junho",
"JWT Expiration": "Expiração JWT",
"JWT Expiration": "Expiração do JWT",
"JWT Token": "Token JWT",
"Keep Alive": "Manter Vivo",
"Keyboard shortcuts": "Atalhos de teclado",
"Keyboard shortcuts": "Atalhos de Teclado",
"Knowledge": "Conhecimento",
"Language": "Idioma",
"large language models, locally.": "modelos largos de linguagem, localmente",
"Last Active": "Ativo por último",
"Last Modified": "Ultima Modificação",
"large language models, locally.": "grandes modelos de linguagem, localmente.",
"Last Active": "Última Atividade",
"Last Modified": "Última Modificação",
"Light": "Claro",
"Listening...": "Escutando...",
"LLMs can make mistakes. Verify important information.": "LLMs podem cometer erros. Verifique informações importantes.",
"Local Models": "Modelos Locais",
"LTR": "LTR",
"Made by OpenWebUI Community": "Feito pela Comunidade OpenWebUI",
"Make sure to enclose them with": "Certifique-se de colocá-los entre",
"Make sure to enclose them with": "Certifique-se de encerrá-los com",
"Manage": "Gerenciar",
"Manage Models": "Gerenciar Modelos",
"Manage Ollama Models": "Gerenciar Modelos Ollama",
"Manage Pipelines": "Gerenciar Pipelines",
"Manage Valves": "Gerenciar Válvulas",
"March": "Março",
"Max Tokens (num_predict)": "Fichas máximas (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Máximo de 3 modelos podem ser baixados simultaneamente. Tente novamente mais tarde.",
"Max Tokens (num_predict)": "Máximo de Tokens (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Máximo de 3 modelos podem ser baixados simultaneamente. Por favor, tente novamente mais tarde.",
"May": "Maio",
"Memories accessible by LLMs will be shown here.": "Memórias acessíveis por LLMs serão mostradas aqui.",
"Memory": "Memória",
@ -371,46 +374,47 @@
"Memory cleared successfully": "Memória limpa com sucesso",
"Memory deleted successfully": "Memória excluída com sucesso",
"Memory updated successfully": "Memória atualizada com sucesso",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Mensagens que você enviar após criar seu link não serão compartilhadas. Os usuários com o URL poderão visualizar o bate-papo compartilhado.",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Mensagens enviadas após criar seu link não serão compartilhadas. Usuários com o URL poderão visualizar o chat compartilhado.",
"Min P": "",
"Minimum Score": "Pontuação Mínima",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
"Mirostat Tau": "Mirostat Tau",
"MMMM DD, YYYY": "DD/MM/YYYY",
"MMMM DD, YYYY HH:mm": "DD/MM/YYYY HH:mm",
"MMMM DD, YYYY hh:mm:ss A": "DD/MM/YYYY hh:mm:ss A",
"Model '{{modelName}}' has been successfully downloaded.": "O modelo '{{modelName}}' foi baixado com sucesso.",
"Model '{{modelTag}}' is already in queue for downloading.": "O modelo '{{modelTag}}' já está na fila para download.",
"MMMM DD, YYYY": "MMMM DD, YYYY",
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
"MMMM DD, YYYY hh:mm:ss A": "MMMM DD, YYYY hh:mm:ss A",
"Model '{{modelName}}' has been successfully downloaded.": "Modelo '{{modelName}}' foi baixado com sucesso.",
"Model '{{modelTag}}' is already in queue for downloading.": "Modelo '{{modelTag}}' já está na fila para download.",
"Model {{modelId}} not found": "Modelo {{modelId}} não encontrado",
"Model {{modelName}} is not vision capable": "O modelo {{modelName}} não é capaz de visão",
"Model {{name}} is now {{status}}": "O modelo {{name}} agora é {{status}}",
"Model {{modelName}} is not vision capable": "Modelo {{modelName}} não é capaz de visão",
"Model {{name}} is now {{status}}": "Modelo {{name}} está agora {{status}}",
"Model created successfully!": "Modelo criado com sucesso!",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Otkrivena putanja datoteke modela. Skraćeno ime modela je potrebno za ažuriranje, ne može se nastaviti.",
"Model ID": "ID do modelo",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Caminho do sistema de arquivos do modelo detectado. Nome curto do modelo é necessário para atualização, não é possível continuar.",
"Model ID": "ID do Modelo",
"Model not selected": "Modelo não selecionado",
"Model Params": "Params Modelo",
"Model Params": "Parâmetros do Modelo",
"Model updated successfully": "Modelo atualizado com sucesso",
"Model Whitelisting": "Lista de Permissões de Modelo",
"Model(s) Whitelisted": "Modelo(s) na Lista de Permissões",
"Modelfile Content": "Conteúdo do Arquivo de Modelo",
"Model Whitelisting": "Lista Branca de Modelos",
"Model(s) Whitelisted": "Modelo(s) na Lista Branca",
"Modelfile Content": "Conteúdo do Arquivo do Modelo",
"Models": "Modelos",
"More": "Mais",
"Name": "Nome",
"Name Tag": "Nome da Tag",
"Name your model": "Nomeie seu modelo",
"New Chat": "Novo Bate-papo",
"New Chat": "Novo Chat",
"New Password": "Nova Senha",
"No content to speak": "Nenhum conteudo para falar",
"No documents found": "Nenhuma documento encontrado",
"No content to speak": "Sem conteúdo para falar",
"No documents found": "Nenhum documento encontrado",
"No file selected": "Nenhum arquivo selecionado",
"No results found": "Nenhum resultado encontrado",
"No search query generated": "Nenhuma consulta de pesquisa gerada",
"No source available": "Nenhuma fonte disponível",
"No valves to update": "Nenhuma válvula para atualizar",
"None": "Nenhum",
"Not factually correct": "Não é correto em termos factuais",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Nota: Se você definir uma pontuação mínima, a pesquisa só retornará documentos com uma pontuação maior ou igual à pontuação mínima.",
"Notifications": "Notificações da Área de Trabalho",
"Not factually correct": "Não está factualmente correto",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Nota: Se você definir uma pontuação mínima, a pesquisa retornará apenas documentos com pontuação igual ou superior à pontuação mínima.",
"Notifications": "Notificações",
"November": "Novembro",
"num_thread (Ollama)": "num_thread (Ollama)",
"OAuth ID": "OAuth ID",
@ -419,110 +423,111 @@
"Okay, Let's Go!": "Ok, Vamos Lá!",
"OLED Dark": "OLED Escuro",
"Ollama": "Ollama",
"Ollama API": "Ollama API",
"Ollama API": "API Ollama",
"Ollama API disabled": "API Ollama desativada",
"Ollama API is disabled": "",
"Ollama Version": "Versão do Ollama",
"Ollama API is disabled": "API Ollama está desativada",
"Ollama Version": "Versão Ollama",
"On": "Ligado",
"Only": "Somente",
"Only alphanumeric characters and hyphens are allowed in the command string.": "Somente caracteres alfanuméricos e hífens são permitidos na string de comando.",
"Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Opa! Aguente firme! Seus arquivos ainda estão no forno de processamento. Estamos cozinhando-os com perfeição. Por favor, seja paciente e avisaremos quando estiverem prontos.",
"Oops! Looks like the URL is invalid. Please double-check and try again.": "Opa! Parece que a URL é inválida. Verifique novamente e tente outra vez.",
"Oops! There was an error in the previous response. Please try again or contact admin.": "",
"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Opa! Você está usando um método não suportado (somente frontend). Por favor, sirva o WebUI a partir do backend.",
"Open AI (Dall-E)": "OpenAI (Dall-E)",
"Open new chat": "Abrir novo bate-papo",
"Only": "Apenas",
"Only alphanumeric characters and hyphens are allowed in the command string.": "Apenas caracteres alfanuméricos e hífens são permitidos na string de comando.",
"Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Ops! Aguarde! Seus arquivos ainda estão no forno de processamento. Estamos preparando-os com perfeição. Por favor, seja paciente e avisaremos quando estiverem prontos.",
"Oops! Looks like the URL is invalid. Please double-check and try again.": "Ops! Parece que a URL é inválida. Por favor, verifique novamente e tente de novo.",
"Oops! There was an error in the previous response. Please try again or contact admin.": "Ops! Houve um erro na resposta anterior. Por favor, tente novamente ou entre em contato com o administrador.",
"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Ops! Você está usando um método não suportado (somente frontend). Por favor, sirva a WebUI a partir do backend.",
"Open AI (Dall-E)": "Open AI (Dall-E)",
"Open new chat": "Abrir novo chat",
"Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "A versão do Open WebUI (v{{OPEN_WEBUI_VERSION}}) é inferior à versão necessária (v{{REQUIRED_VERSION}})",
"OpenAI": "OpenAI",
"OpenAI API": "API OpenAI",
"OpenAI API Config": "Configuração da API OpenAI",
"OpenAI API Key is required.": "A Chave da API OpenAI é obrigatória.",
"OpenAI URL/Key required.": "URL/Chave da API OpenAI é necessária.",
"OpenAI API Key is required.": "Chave API OpenAI é necessária.",
"OpenAI URL/Key required.": "URL/Chave OpenAI necessária.",
"or": "ou",
"Other": "Outro",
"Password": "Senha",
"PDF document (.pdf)": "Documento PDF (.pdf)",
"PDF Extract Images (OCR)": "Extrair Imagens de PDF (OCR)",
"PDF Extract Images (OCR)": "Extrair Imagens do PDF (OCR)",
"pending": "pendente",
"Permission denied when accessing media devices": "Permissão negada ao acessar dispositivos de mídia",
"Permission denied when accessing microphone": "Permissão negada ao acessar o microfone",
"Permission denied when accessing microphone: {{error}}": "Permissão negada ao acessar o microfone: {{error}}",
"Personalization": "Personalização",
"Pin": "Fixar",
"Pinned": "Fixada",
"Pipeline deleted successfully": "Pipeline excluída com sucesso",
"Pipeline downloaded successfully": "Pipeline baixada com sucesso",
"Pinned": "Fixado",
"Pipeline deleted successfully": "Pipeline excluído com sucesso",
"Pipeline downloaded successfully": "Pipeline baixado com sucesso",
"Pipelines": "Pipelines",
"Pipelines Not Detected": "Pipelines não detectado",
"Pipelines Valves": "Válvulas de Dutos",
"Plain text (.txt)": "Texto sem formatação (.txt)",
"Playground": "Parque infantil",
"Pipelines Not Detected": "Pipelines Não Detectados",
"Pipelines Valves": "Válvulas de Pipelines",
"Plain text (.txt)": "Texto simples (.txt)",
"Playground": "Playground",
"Please carefully review the following warnings:": "Por favor, revise cuidadosamente os seguintes avisos:",
"Positive attitude": "Atitude Positiva",
"Positive attitude": "Atitude positiva",
"Previous 30 days": "Últimos 30 dias",
"Previous 7 days": "Últimos 7 dias",
"Profile Image": "Imagem de Perfil",
"Prompt": "Prompt",
"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Prompt (ex.: Dê-me um fatídico sobre o Império Romano)",
"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Prompt (por exemplo, Diga-me um fato divertido sobre o Império Romano)",
"Prompt Content": "Conteúdo do Prompt",
"Prompt suggestions": "Sugestões de Prompt",
"Prompts": "Prompts",
"Pull \"{{searchValue}}\" from Ollama.com": "Extrair \"{{searchValue}}\" do Ollama.com",
"Pull a model from Ollama.com": "Extrair um modelo do Ollama.com",
"Pull \"{{searchValue}}\" from Ollama.com": "Obter \"{{searchValue}}\" de Ollama.com",
"Pull a model from Ollama.com": "Obter um modelo de Ollama.com",
"Query Params": "Parâmetros de Consulta",
"RAG Template": "Modelo RAG",
"Read Aloud": "Ler em Voz Alta",
"Record voice": "Gravar voz",
"Redirecting you to OpenWebUI Community": "Redirecionando você para a Comunidade OpenWebUI",
"Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "",
"Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Refira-se como \"Usuário\" (por exemplo, \"Usuário está aprendendo espanhol\")",
"Refused when it shouldn't have": "Recusado quando não deveria",
"Regenerate": "Regenerar",
"Release Notes": "Notas de Lançamento",
"Remove": "Remover",
"Remove Model": "Remover Modelo",
"Rename": "Renomear",
"Repeat Last N": "Repetir Últimos N",
"Repeat Last N": "Repetir Último N",
"Request Mode": "Modo de Solicitação",
"Reranking Model": "Modelo de Reranking",
"Reranking model disabled": "Modelo de Reranking desativado",
"Reranking model set to \"{{reranking_model}}\"": "Modelo de Reranking definido como \"{{reranking_model}}\"",
"Reset": "Resetar",
"Reset Upload Directory": "Resetar Diretório de Upload",
"Reset Vector Storage": "Redefinir Armazenamento de Vetor",
"Reranking Model": "Modelo de Reclassificação",
"Reranking model disabled": "Modelo de Reclassificação desativado",
"Reranking model set to \"{{reranking_model}}\"": "Modelo de Reclassificação definido como \"{{reranking_model}}\"",
"Reset": "Redefinir",
"Reset Upload Directory": "Redefinir Diretório de Upload",
"Reset Vector Storage": "Redefinir Armazenamento de Vetores",
"Response AutoCopy to Clipboard": "Cópia Automática da Resposta para a Área de Transferência",
"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Notificações de resposta não podem ser ativadas, pois as permissões do site foram negadas. Visite as configurações do seu navegador para conceder o acesso necessário.",
"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Notificações de resposta não podem ser ativadas pois as permissões do site foram negadas. Por favor, visite as configurações do seu navegador para conceder o acesso necessário.",
"Role": "Função",
"Rosé Pine": "Rosé Pine",
"Rosé Pine Dawn": "Rosé Pine Dawn",
"RTL": "RTL",
"Run Llama 2, Code Llama, and other models. Customize and create your own.": "Execute Llama 2, Code Llama e outros modelos. Personalize e crie o seu próprio.",
"Run Llama 2, Code Llama, and other models. Customize and create your own.": "Execute Llama 2, Code Llama e outros modelos. Personalize e crie os seus próprios.",
"Running": "Executando",
"Save": "Salvar",
"Save & Create": "Salvar e Criar",
"Save & Update": "Salvar e Atualizar",
"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": "Salvar logs de bate-papo diretamente no armazenamento do seu navegador não é mais suportado. Reserve um momento para baixar e excluir seus logs de bate-papo clicando no botão abaixo. Não se preocupe, você pode facilmente reimportar seus logs de bate-papo para o backend através de",
"Scan": "Digitalizar",
"Scan complete!": "Digitalização concluída!",
"Scan for documents from {{path}}": "Digitalizar documentos de {{path}}",
"Save Tag": "Salvar Tag",
"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": "Salvar registros de chat diretamente no armazenamento do seu navegador não é mais suportado. Por favor, reserve um momento para baixar e excluir seus registros de chat clicando no botão abaixo. Não se preocupe, você pode facilmente reimportar seus registros de chat para o backend através de",
"Scan": "Escanear",
"Scan complete!": "Escaneamento concluído!",
"Scan for documents from {{path}}": "Escanear documentos de {{path}}",
"Search": "Pesquisar",
"Search a model": "Pesquisar um modelo",
"Search Chats": "Pesquisar bate-papos",
"Search Chats": "Pesquisar Chats",
"Search Documents": "Pesquisar Documentos",
"Search Functions": "Pesquisar Funções",
"Search Models": "Pesquisar Modelos",
"Search Prompts": "Pesquisar Prompts",
"Search Query Generation Prompt": "",
"Search Query Generation Prompt Length Threshold": "Limite de comprimento do prompt de geração de consulta de pesquisa",
"Search Result Count": "Contagem de resultados de pesquisa",
"Search Tools": "Ferramentas de Pesquisa",
"Searched {{count}} sites_one": "Pesquisado {{count}} sites_one",
"Searched {{count}} sites_many": "Pesquisado {{count}} sites_many",
"Searched {{count}} sites_other": "Pesquisado {{count}} sites_other",
"Search Query Generation Prompt": "Prompt de Geração de Consulta de Pesquisa",
"Search Query Generation Prompt Length Threshold": "Limiar de Comprimento do Prompt de Geração de Consulta de Pesquisa",
"Search Result Count": "Contagem de Resultados da Pesquisa",
"Search Tools": "Pesquisar Ferramentas",
"Searched {{count}} sites_one": "Pesquisou {{count}} sites_one",
"Searched {{count}} sites_many": "Pesquisou {{count}} sites_many",
"Searched {{count}} sites_other": "Pesquisou {{count}} sites_other",
"Searching \"{{searchQuery}}\"": "Pesquisando \"{{searchQuery}}\"",
"Searxng Query URL": "URL de consulta Searxng",
"See readme.md for instructions": "Consulte readme.md para obter instruções",
"Searxng Query URL": "URL da Consulta Searxng",
"See readme.md for instructions": "Veja readme.md para instruções",
"See what's new": "Veja o que há de novo",
"Seed": "Semente",
"Seed": "Seed",
"Select a base model": "Selecione um modelo base",
"Select a engine": "Selecione um motor",
"Select a function": "Selecione uma função",
@ -532,109 +537,110 @@
"Select a pipeline url": "Selecione uma URL de pipeline",
"Select a tool": "Selecione uma ferramenta",
"Select an Ollama instance": "Selecione uma instância Ollama",
"Select Documents": "Selecione Documentos",
"Select model": "Selecione um modelo",
"Select Documents": "Selecionar Documentos",
"Select model": "Selecionar modelo",
"Select only one model to call": "Selecione apenas um modelo para chamar",
"Selected model(s) do not support image inputs": "O(s) modelo(s) selecionado(s) não suporta(m) entrada(s) de imagem",
"Selected model(s) do not support image inputs": "Modelo(s) selecionado(s) não suportam entradas de imagem",
"Send": "Enviar",
"Send a Message": "Enviar uma Mensagem",
"Send message": "Enviar mensagem",
"September": "Setembro",
"Serper API Key": "Chave de API Serper",
"Serply API Key": "Chave de API Serply",
"Serpstack API Key": "Chave de API Serpstack",
"Serper API Key": "Chave da API Serper",
"Serply API Key": "Chave da API Serply",
"Serpstack API Key": "Chave da API Serpstack",
"Server connection verified": "Conexão com o servidor verificada",
"Set as default": "Definir como padrão",
"Set Default Model": "Definir Modelo Padrão",
"Set embedding model (e.g. {{model}})": "Definir modelo de vetorização (ex.: {{model}})",
"Set embedding model (e.g. {{model}})": "Definir modelo de embedding (por exemplo, {{model}})",
"Set Image Size": "Definir Tamanho da Imagem",
"Set reranking model (e.g. {{model}})": "Definir modelo de reranking (ex.: {{model}})",
"Set reranking model (e.g. {{model}})": "Definir modelo de reclassificação (por exemplo, {{model}})",
"Set Steps": "Definir Etapas",
"Set Task Model": "Definir modelo de tarefa",
"Set Task Model": "Definir Modelo de Tarefa",
"Set Voice": "Definir Voz",
"Settings": "Configurações",
"Settings saved successfully!": "Configurações salvas com sucesso!",
"Settings updated successfully": "Configurações atualizadas com sucesso",
"Share": "Compartilhar",
"Share Chat": "Compartilhar Bate-papo",
"Share Chat": "Compartilhar Chat",
"Share to OpenWebUI Community": "Compartilhar com a Comunidade OpenWebUI",
"short-summary": "resumo-curto",
"Show": "Mostrar",
"Show Admin Details in Account Pending Overlay": "Mostrar Detalhes do Administrador na Sobreposição de Conta Pendente",
"Show Admin Details in Account Pending Overlay": "Mostrar Detalhes do Administrador na Sobreposição de Conta Pendentes",
"Show Model": "Mostrar Modelo",
"Show shortcuts": "Mostrar",
"Show shortcuts": "Mostrar atalhos",
"Show your support!": "Mostre seu apoio!",
"Showcased creativity": "Criatividade Exibida",
"Showcased creativity": "Criatividade exibida",
"Sign in": "Entrar",
"Sign Out": "Sair",
"Sign up": "Inscrever-se",
"Signing in": "Entrando",
"Source": "Fonte",
"Speech recognition error: {{error}}": "Erro de reconhecimento de fala: {{error}}",
"Speech-to-Text Engine": "Mecanismo de Fala para Texto",
"Speech-to-Text Engine": "Motor de Transcrição de Fala",
"Stop Sequence": "Sequência de Parada",
"STT Model": "Modelo STT",
"STT Settings": "Configurações STT",
"Submit": "Enviar",
"Subtitle (e.g. about the Roman Empire)": "Subtítulo (ex.: sobre o Império Romano)",
"Subtitle (e.g. about the Roman Empire)": "Legenda (por exemplo, sobre o Império Romano)",
"Success": "Sucesso",
"Successfully updated.": "Atualizado com sucesso.",
"Suggested": "Sugerido",
"Support": "Suporte",
"Support this plugin:": "Suporte esse plugin:",
"Support this plugin:": "Apoie este plugin:",
"System": "Sistema",
"System Prompt": "Prompt do Sistema",
"Tags": "Tags",
"Tap to interrupt": "Toque para interromper",
"Tavily API Key": "Chave da API Tavily",
"Tell us more:": "-nos mais:",
"Tell us more:": "Conte-nos mais:",
"Temperature": "Temperatura",
"Template": "Modelo",
"Text Completion": "Complemento de Texto",
"Text-to-Speech Engine": "Mecanismo de Texto para Fala",
"Text Completion": "Conclusão de Texto",
"Text-to-Speech Engine": "Motor de Texto para Fala",
"Tfs Z": "Tfs Z",
"Thanks for your feedback!": "Obrigado pelo seu feedback!",
"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "Os desenvolvedores por trás deste plugin são voluntários apaixonados da comunidade. Se você achar este plugin útil, considere contribuir para o seu desenvolvimento.",
"The score should be a value between 0.0 (0%) and 1.0 (100%).": "O score deve ser um valor entre 0.0 (0%) e 1.0 (100%).",
"The score should be a value between 0.0 (0%) and 1.0 (100%).": "A pontuação deve ser um valor entre 0.0 (0%) e 1.0 (100%).",
"Theme": "Tema",
"Thinking...": "Pensando...",
"This action cannot be undone. Do you wish to continue?": "Essa ação não pode ser desfeita. Deseja continuar?",
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Isso garante que suas conversas valiosas sejam salvas com segurança em seu banco de dados de backend. Obrigado!",
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Essa é uma funcionalidade experimental, pode não funcionar como esperado e está sujeita a alterações a qualquer momento.",
"This action cannot be undone. Do you wish to continue?": "Esta ação não pode ser desfeita. Você deseja continuar?",
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Isso garante que suas conversas valiosas sejam salvas com segurança no banco de dados do backend. Obrigado!",
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Esta é uma funcionalidade experimental, pode não funcionar como esperado e está sujeita a alterações a qualquer momento.",
"This setting does not sync across browsers or devices.": "Esta configuração não sincroniza entre navegadores ou dispositivos.",
"This will delete": "Isso irá apagar",
"Thorough explanation": "Explicação Completa",
"This will delete": "Isso vai excluir",
"Thorough explanation": "Explicação detalhada",
"Tika": "Tika",
"Tika Server URL required.": "Url do Servidor Tika é obrigatória.",
"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Dica: Atualize vários slots de variáveis consecutivamente pressionando a tecla Tab na entrada de bate-papo após cada substituição.",
"Tika Server URL required.": "URL do servidor Tika necessária.",
"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Dica: Atualize vários slots de variáveis consecutivamente pressionando a tecla Tab na entrada de chat após cada substituição.",
"Title": "Título",
"Title (e.g. Tell me a fun fact)": "Título (ex.: Dê-me uma curiosidade)",
"Title (e.g. Tell me a fun fact)": "Título (por exemplo, Conte-me um fato divertido)",
"Title Auto-Generation": "Geração Automática de Título",
"Title cannot be an empty string.": "Título não pode ser uma string vazia.",
"Title cannot be an empty string.": "O Título não pode ser uma string vazia.",
"Title Generation Prompt": "Prompt de Geração de Título",
"to": "para",
"To access the available model names for downloading,": "Para acessar os nomes de modelo disponíveis para download,",
"To access the available model names for downloading,": "Para acessar os nomes de modelos disponíveis para download,",
"To access the GGUF models available for downloading,": "Para acessar os modelos GGUF disponíveis para download,",
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Para acessar o WebUI, entre em contato com o administrador. Os administradores podem gerenciar os status dos usuários no Painel de Administração.",
"To add documents here, upload them to the \"Documents\" workspace first.": "Para adicionar documentos aqui, carregue-os primeiro para o espaço de trabalho \"Documentos\".",
"to chat input.": "para a entrada de bate-papo.",
"To select filters here, add them to the \"Functions\" workspace first.": "Para selecionar filtros aqui, adicione-os primeiro ao espaço de trabalho \"Funções\".",
"To select toolkits here, add them to the \"Tools\" workspace first.": "Para selecionar toolkits aqui, adicione-os primeiro ao espaço de trabalho \"Ferramentas\".",
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Para acessar a WebUI, entre em contato com o administrador. Os administradores podem gerenciar os status dos usuários no Painel de Administração.",
"To add documents here, upload them to the \"Documents\" workspace first.": "Para adicionar documentos aqui, faça o upload para o espaço de trabalho \"Documentos\" primeiro.",
"to chat input.": "para entrada de chat.",
"To select actions here, add them to the \"Functions\" workspace first.": "Para selecionar ações aqui, adicione-os ao espaço de trabalho \"Ações\" primeiro.",
"To select filters here, add them to the \"Functions\" workspace first.": "Para selecionar filtros aqui, adicione-os ao espaço de trabalho \"Funções\" primeiro.",
"To select toolkits here, add them to the \"Tools\" workspace first.": "Para selecionar kits de ferramentas aqui, adicione-os ao espaço de trabalho \"Ferramentas\" primeiro.",
"Today": "Hoje",
"Toggle settings": "Alternar configurações",
"Toggle sidebar": "Alternar barra lateral",
"Tokens To Keep On Context Refresh (num_keep)": "Tokens a Manter na Atualização de Contexto (num_keep)",
"Tokens To Keep On Context Refresh (num_keep)": "Tokens a Manter na Atualização do Contexto (num_keep)",
"Tool created successfully": "Ferramenta criada com sucesso",
"Tool deleted successfully": "Ferramenta excluída com sucesso",
"Tool imported successfully": "Ferramenta importada com sucesso",
"Tool updated successfully": "Ferramenta atualizada com sucesso",
"Toolkit Description (e.g. A toolkit for performing various operations)": "Descrição do Toolkit (por exemplo, Um toolkit para realizar várias operações)",
"Toolkit ID (e.g. my_toolkit)": "Identificação do Toolkit (por exemplo, meu_toolkit)",
"Toolkit Name (e.g. My ToolKit)": "Nome do Toolkit (por exemplo, Meu Toolkit)",
"Toolkit Description (e.g. A toolkit for performing various operations)": "Descrição do Kit de Ferramentas (por exemplo, Um kit de ferramentas para realizar várias operações)",
"Toolkit ID (e.g. my_toolkit)": "ID do Kit de Ferramentas (por exemplo, my_toolkit)",
"Toolkit Name (e.g. My ToolKit)": "Nome do Kit de Ferramentas (por exemplo, Meu Kit de Ferramentas)",
"Tools": "Ferramentas",
"Tools are a function calling system with arbitrary code execution": "Ferramentas são um sistema de chamada de função com execução de código arbitrário",
"Tools have a function calling system that allows arbitrary code execution": "Ferramentas têm um sistema de chamada de função que permite a execução de código arbitrário",
"Tools have a function calling system that allows arbitrary code execution.": "Ferramentas têm um sistema de chamada de função que permite a execução de código arbitrário.",
"Tools are a function calling system with arbitrary code execution": "Ferramentas são um sistema de chamada de funções com execução de código arbitrário",
"Tools have a function calling system that allows arbitrary code execution": "Ferramentas possuem um sistema de chamada de funções que permite a execução de código arbitrário",
"Tools have a function calling system that allows arbitrary code execution.": "Ferramentas possuem um sistema de chamada de funções que permite a execução de código arbitrário.",
"Top K": "Top K",
"Top P": "Top P",
"Trouble accessing Ollama?": "Problemas para acessar o Ollama?",
@ -642,22 +648,22 @@
"TTS Settings": "Configurações TTS",
"TTS Voice": "Voz TTS",
"Type": "Tipo",
"Type Hugging Face Resolve (Download) URL": "Digite a URL do Hugging Face Resolve (Download)",
"Uh-oh! There was an issue connecting to {{provider}}.": "Opa! Houve um problema ao conectar-se a {{provider}}.",
"UI": "UI",
"Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "tipo de arquivo desconhecido '{{file_type}}'. Prosseguindo com o upload do arquivo de qualquer maneira.",
"Type Hugging Face Resolve (Download) URL": "Digite o URL de download do Hugging Face",
"Uh-oh! There was an issue connecting to {{provider}}.": "Ops! Houve um problema ao conectar-se ao {{provider}}.",
"UI": "Interface",
"Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "Tipo de arquivo desconhecido '{{file_type}}'. Prosseguindo com o upload do arquivo de qualquer maneira.",
"Unpin": "Desfixar",
"Update": "Atualizar",
"Update and Copy Link": "Atualizar e Copiar Link",
"Update password": "Atualizar senha",
"Updated at": "Atualizado em",
"Upload": "Upload",
"Upload a GGUF model": "Upload de modelo GGUF",
"Upload Files": "Upload de Arquivos",
"Upload Pipeline": "Upload de Pipeline",
"Upload Progress": "Progresso de Upload",
"URL Mode": "Modo de URL",
"Use '#' in the prompt input to load and select your documents.": "Use '#' na entrada do prompt para carregar e selecionar seus documentos.",
"Upload": "Fazer upload",
"Upload a GGUF model": "Fazer upload de um modelo GGUF",
"Upload Files": "Fazer upload de Arquivos",
"Upload Pipeline": "Fazer upload de Pipeline",
"Upload Progress": "Progresso do Upload",
"URL Mode": "Modo URL",
"Use '#' in the prompt input to load and select your documents.": "Use '#' na entrada de prompt para carregar e selecionar seus documentos.",
"Use Gravatar": "Usar Gravatar",
"Use Initials": "Usar Iniciais",
"use_mlock (Ollama)": "use_mlock (Ollama)",
@ -672,38 +678,38 @@
"Valves updated": "Válvulas atualizadas",
"Valves updated successfully": "Válvulas atualizadas com sucesso",
"variable": "variável",
"variable to have them replaced with clipboard content.": "variável para que sejam substituídos pelo conteúdo da área de transferência.",
"variable to have them replaced with clipboard content.": "variável para ser substituída pelo conteúdo da área de transferência.",
"Version": "Versão",
"Voice": "Voz",
"Warning": "Aviso",
"Warning:": "Aviso:",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Aviso: Se você atualizar ou alterar seu modelo de incorporação, você precisará reimportar todos os documentos.",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Aviso: Se você atualizar ou alterar seu modelo de incorporação, será necessário reimportar todos os documentos.",
"Web": "Web",
"Web API": "Web API",
"Web Loader Settings": "Configurações do Carregador da Web",
"Web Params": "Parâmetros da Web",
"Web API": "API Web",
"Web Loader Settings": "Configurações do Carregador Web",
"Web Params": "Parâmetros Web",
"Web Search": "Pesquisa na Web",
"Web Search Engine": "Mecanismo de Busca na Web",
"Webhook URL": "URL do Webhook",
"WebUI Settings": "Configurações WebUI",
"WebUI will make requests to": "WebUI fará solicitações para",
"WebUI Settings": "Configurações da WebUI",
"WebUI will make requests to": "A WebUI fará solicitações para",
"Whats New in": "O que há de novo em",
"When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Quando o histórico está desativado, novos bate-papos neste navegador não aparecerão em seu histórico em nenhum dos seus dispositivos.",
"When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Quando o histórico está desativado, novos chats neste navegador não aparecerão no seu histórico em nenhum dos seus dispositivos.",
"Whisper (Local)": "Whisper (Local)",
"Widescreen Mode": "Modo de Tela Larga",
"Workspace": "Espaço de trabalho",
"Widescreen Mode": "Modo Tela Cheia",
"Workspace": "Espaço de Trabalho",
"Write a prompt suggestion (e.g. Who are you?)": "Escreva uma sugestão de prompt (por exemplo, Quem é você?)",
"Write a summary in 50 words that summarizes [topic or keyword].": "Escreva um resumo em 50 palavras que resuma [tópico ou palavra-chave].",
"Yesterday": "Ontem",
"You": "Você",
"You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "Você pode personalizar suas interações com LLMs adicionando memórias através do botão 'Gerenciar' abaixo, tornando-as mais úteis e adaptadas a você.",
"You cannot clone a base model": "Não é possível clonar um modelo base",
"You cannot clone a base model": "Você não pode clonar um modelo base",
"You have no archived conversations.": "Você não tem conversas arquivadas.",
"You have shared this chat": "Você compartilhou esta conversa",
"You have shared this chat": "Você compartilhou este chat",
"You're a helpful assistant.": "Você é um assistente útil.",
"You're now logged in.": "Você está conectado agora.",
"Your account status is currently pending activation.": "Sua conta está atualmente pendente de ativação.",
"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.": "Sua contribuição inteira irá diretamente para o desenvolvedor do plugin; Open WebUI não cobra nenhuma porcentagem. No entanto, a plataforma de financiamento escolhida pode ter suas próprias taxas.",
"You're now logged in.": "Você agora está logado.",
"Your account status is currently pending activation.": "O status da sua conta está atualmente aguardando ativação.",
"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.": "Toda a sua contribuição irá diretamente para o desenvolvedor do plugin; o Open WebUI não retém nenhuma porcentagem. No entanto, a plataforma de financiamento escolhida pode ter suas próprias taxas.",
"Youtube": "Youtube",
"Youtube Loader Settings": "Configurações do carregador do Youtube"
"Youtube Loader Settings": "Configurações do Carregador Youtube"
}

View File

@ -15,6 +15,7 @@
"Account": "Conta",
"Account Activation Pending": "Ativação da Conta Pendente",
"Accurate information": "Informações precisas",
"Actions": "",
"Active Users": "Utilizadores Ativos",
"Add": "Adicionar",
"Add a model id": "Adicionar um ID de modelo",
@ -27,6 +28,7 @@
"Add Memory": "Adicionar memória",
"Add message": "Adicionar mensagem",
"Add Model": "Adicionar modelo",
"Add Tag": "",
"Add Tags": "adicionar tags",
"Add User": "Adicionar Utilizador",
"Adjusting these settings will apply changes universally to all users.": "Ajustar essas configurações aplicará alterações universalmente a todos os utilizadores.",
@ -168,6 +170,7 @@
"Delete chat": "Apagar conversa",
"Delete Chat": "Apagar Conversa",
"Delete chat?": "",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "apagar este link",
@ -211,6 +214,7 @@
"Edit Doc": "Editar Documento",
"Edit Memory": "",
"Edit User": "Editar Utilizador",
"ElevenLabs": "",
"Email": "E-mail",
"Embedding Batch Size": "Tamanho do Lote do Embedding",
"Embedding Model": "Modelo de Embedding",
@ -360,7 +364,6 @@
"Manage Models": "Gerir Modelos",
"Manage Ollama Models": "Gerir Modelos Ollama",
"Manage Pipelines": "Gerir pipelines",
"Manage Valves": "",
"March": "Março",
"Max Tokens (num_predict)": "Máx Tokens (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "O máximo de 3 modelos podem ser descarregados simultaneamente. Tente novamente mais tarde.",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Mensagens que você enviar após criar o seu link não serão partilhadas. Os utilizadores com o URL poderão visualizar a conversa partilhada.",
"Min P": "",
"Minimum Score": "Mínimo de Pontuação",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -500,6 +504,7 @@
"Save": "Guardar",
"Save & Create": "Guardar e Criar",
"Save & Update": "Guardar e Atualizar",
"Save Tag": "",
"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": "Guardar o registo das conversas diretamente no armazenamento do seu navegador já não é suportado. Reserve um momento para descarregar e eliminar os seus registos de conversas clicando no botão abaixo. Não se preocupe, você pode facilmente reimportar os seus registos de conversas para o backend através de",
"Scan": "Digitalizar",
"Scan complete!": "Digitalização concluída!",
@ -618,6 +623,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Para aceder ao WebUI, entre em contato com o administrador. Os administradores podem gerir o status dos utilizadores no Painel de Administração.",
"To add documents here, upload them to the \"Documents\" workspace first.": "",
"to chat input.": "para a entrada da conversa.",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "Hoje",

View File

@ -0,0 +1,715 @@
{
"'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' sau '-1' fără expirare.",
"(Beta)": "(Beta)",
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(de ex. `sh webui.sh --api --api-auth username_password`)",
"(e.g. `sh webui.sh --api`)": "(de ex. `sh webui.sh --api`)",
"(latest)": "(ultimul)",
"{{ models }}": "{{ modele }}",
"{{ owner }}: You cannot delete a base model": "{{ owner }}: Nu puteți șterge un model de bază",
"{{modelName}} is thinking...": "{{modelName}} gândește...",
"{{user}}'s Chats": "Conversațiile lui {{user}}",
"{{webUIName}} Backend Required": "Este necesar backend-ul {{webUIName}}",
"A task model is used when performing tasks such as generating titles for chats and web search queries": "Un model de sarcină este utilizat pentru realizarea unor sarcini precum generarea de titluri pentru conversații și interogări de căutare pe web",
"a user": "un utilizator",
"About": "Despre",
"Account": "Cont",
"Account Activation Pending": "Activarea contului în așteptare",
"Accurate information": "Informații precise",
"Actions": "Acțiuni",
"Active Users": "Utilizatori activi",
"Add": "Adaugă",
"Add a model id": "Adaugă un id de model",
"Add a short description about what this model does": "Adaugă o scurtă descriere despre ce face acest model",
"Add a short title for this prompt": "Adaugă un titlu scurt pentru acest prompt",
"Add a tag": "Adaugă o etichetă",
"Add custom prompt": "Adaugă prompt personalizat",
"Add Docs": "Adaugă Documente",
"Add Files": "Adaugă Fișiere",
"Add Memory": "Adaugă Memorie",
"Add message": "Adaugă mesaj",
"Add Model": "Adaugă Model",
"Add Tag": "Adaugă Etichetă",
"Add Tags": "Adaugă Etichete",
"Add User": "Adaugă Utilizator",
"Adjusting these settings will apply changes universally to all users.": "Ajustarea acestor setări va aplica modificările universal pentru toți utilizatorii.",
"admin": "administrator",
"Admin": "Administrator",
"Admin Panel": "Panoul de Administrare",
"Admin Settings": "Setări de Administrator",
"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Administratorii au acces la toate instrumentele în orice moment; utilizatorii au nevoie de instrumente asignate pe model în spațiul de lucru.",
"Advanced Parameters": "Parametri Avansați",
"Advanced Params": "Parametri Avansați",
"all": "toate",
"All Documents": "Toate Documentele",
"All Users": "Toți Utilizatorii",
"Allow": "Permite",
"Allow Chat Deletion": "Permite Ștergerea Conversațiilor",
"Allow non-local voices": "Permite voci non-locale",
"Allow User Location": "Permite Localizarea Utilizatorului",
"Allow Voice Interruption in Call": "Permite Întreruperea Vocii în Apel",
"alphanumeric characters and hyphens": "caractere alfanumerice și cratime",
"Already have an account?": "Deja ai un cont?",
"an assistant": "un asistent",
"and": "și",
"and create a new shared link.": "și creează un nou link partajat.",
"API Base URL": "URL Bază API",
"API Key": "Cheie API",
"API Key created.": "Cheie API creată.",
"API keys": "Chei API",
"April": "Aprilie",
"Archive": "Arhivează",
"Archive All Chats": "Arhivează Toate Conversațiile",
"Archived Chats": "Conversații Arhivate",
"are allowed - Activate this command by typing": "sunt permise - Activează această comandă tastând",
"Are you sure?": "Ești sigur?",
"Attach file": "Atașează fișier",
"Attention to detail": "Atenție la detalii",
"Audio": "Audio",
"Audio settings updated successfully": "Setările audio au fost actualizate cu succes",
"August": "August",
"Auto-playback response": "Redare automată a răspunsului",
"AUTOMATIC1111 Api Auth String": "Șir de Autentificare API AUTOMATIC1111",
"AUTOMATIC1111 Base URL": "URL Bază AUTOMATIC1111",
"AUTOMATIC1111 Base URL is required.": "Este necesar URL-ul Bază AUTOMATIC1111.",
"available!": "disponibil!",
"Back": "Înapoi",
"Bad Response": "Răspuns Greșit",
"Banners": "Bannere",
"Base Model (From)": "Model de Bază (De la)",
"Batch Size (num_batch)": "Dimensiune Lot (num_batch)",
"before": "înainte",
"Being lazy": "Fiind leneș",
"Brave Search API Key": "Cheie API Brave Search",
"Bypass SSL verification for Websites": "Ocolește verificarea SSL pentru site-uri web",
"Call": "Apel",
"Call feature is not supported when using Web STT engine": "Funcția de apel nu este suportată când se utilizează motorul Web STT",
"Camera": "Cameră",
"Cancel": "Anulează",
"Capabilities": "Capabilități",
"Change Password": "Schimbă Parola",
"Chat": "Conversație",
"Chat Background Image": "Imagine de Fundal pentru Conversație",
"Chat Bubble UI": "Interfață cu Bule de Conversație",
"Chat Controls": "Controale pentru Conversație",
"Chat direction": "Direcția conversației",
"Chat History": "Istoricul conversațiilor",
"Chat History is off for this browser.": "Istoricul conversațiilor este dezactivat pentru acest browser.",
"Chats": "Conversații",
"Check Again": "Verifică din Nou",
"Check for updates": "Verifică actualizări",
"Checking for updates...": "Se verifică actualizările...",
"Choose a model before saving...": "Alege un model înainte de a salva...",
"Chunk Overlap": "Suprapunere Bloc",
"Chunk Params": "Parametri Bloc",
"Chunk Size": "Dimensiune Bloc",
"Citation": "Citație",
"Clear memory": "Șterge memoria",
"Click here for help.": "Apasă aici pentru ajutor.",
"Click here to": "Apasă aici pentru",
"Click here to download user import template file.": "Apasă aici pentru a descărca fișierul șablon de import utilizator.",
"Click here to select": "Apasă aici pentru a selecta",
"Click here to select a csv file.": "Apasă aici pentru a selecta un fișier csv.",
"Click here to select a py file.": "Apasă aici pentru a selecta un fișier py.",
"Click here to select documents.": "Apasă aici pentru a selecta documente.",
"click here.": "apasă aici.",
"Click on the user role button to change a user's role.": "Apasă pe butonul rolului utilizatorului pentru a schimba rolul unui utilizator.",
"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Permisiunea de scriere în clipboard a fost refuzată. Vă rugăm să verificați setările browserului pentru a acorda accesul necesar.",
"Clone": "Clonează",
"Close": "Închide",
"Code formatted successfully": "Cod formatat cu succes",
"Collection": "Colecție",
"ComfyUI": "ComfyUI",
"ComfyUI Base URL": "URL De Bază ComfyUI",
"ComfyUI Base URL is required.": "Este necesar URL-ul De Bază ComfyUI.",
"Command": "Comandă",
"Concurrent Requests": "Cereri Concurente",
"Confirm": "Confirmă",
"Confirm Password": "Confirmă Parola",
"Confirm your action": "Confirmă acțiunea ta",
"Connections": "Conexiuni",
"Contact Admin for WebUI Access": "Contactează administratorul pentru acces WebUI",
"Content": "Conținut",
"Content Extraction": "Extragere Conținut",
"Context Length": "Lungime Context",
"Continue Response": "Continuă Răspunsul",
"Continue with {{provider}}": "Continuă cu {{provider}}",
"Controls": "Controale",
"Copied shared chat URL to clipboard!": "URL-ul conversației partajate a fost copiat în clipboard!",
"Copy": "Copiază",
"Copy last code block": "Copiază ultimul bloc de cod",
"Copy last response": "Copiază ultimul răspuns",
"Copy Link": "Copiază Link",
"Copying to clipboard was successful!": "Copierea în clipboard a fost realizată cu succes!",
"Create a model": "Creează un model",
"Create Account": "Creează Cont",
"Create new key": "Creează cheie nouă",
"Create new secret key": "Creează cheie secretă nouă",
"Created at": "Creat la",
"Created At": "Creat La",
"Created by": "Creat de",
"CSV Import": "Import CSV",
"Current Model": "Model Curent",
"Current Password": "Parola Curentă",
"Custom": "Personalizat",
"Customize models for a specific purpose": "Personalizează modele pentru un scop specific",
"Dark": "Întunecat",
"Dashboard": "Tablou de Bord",
"Database": "Bază de Date",
"December": "Decembrie",
"Default": "Implicit",
"Default (Automatic1111)": "Implicit (Automatic1111)",
"Default (SentenceTransformers)": "Implicit (SentenceTransformers)",
"Default Model": "Model Implicit",
"Default model updated": "Modelul implicit a fost actualizat",
"Default Prompt Suggestions": "Sugestii de Prompt Implicite",
"Default User Role": "Rolul Implicit al Utilizatorului",
"delete": "șterge",
"Delete": "Șterge",
"Delete a model": "Șterge un model",
"Delete All Chats": "Șterge Toate Conversațiile",
"Delete chat": "Șterge conversația",
"Delete Chat": "Șterge Conversația",
"Delete chat?": "Șterge conversația?",
"Delete Doc": "Șterge document",
"Delete function?": "Șterge funcția?",
"Delete prompt?": "Șterge promptul?",
"delete this link": "șterge acest link",
"Delete tool?": "Șterge instrumentul?",
"Delete User": "Șterge Utilizatorul",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} șters",
"Deleted {{name}}": "{{name}} șters",
"Description": "Descriere",
"Didn't fully follow instructions": "Nu a urmat complet instrucțiunile",
"Disabled": "Dezactivat",
"Discover a function": "Descoperă o funcție",
"Discover a model": "Descoperă un model",
"Discover a prompt": "Descoperă un prompt",
"Discover a tool": "Descoperă un instrument",
"Discover, download, and explore custom functions": "Descoperă, descarcă și explorează funcții personalizate",
"Discover, download, and explore custom prompts": "Descoperă, descarcă și explorează prompturi personalizate",
"Discover, download, and explore custom tools": "Descoperă, descarcă și explorează instrumente personalizate",
"Discover, download, and explore model presets": "Descoperă, descarcă și explorează presetări de model",
"Dismissible": "Ignorabil",
"Display Emoji in Call": "Afișează Emoji în Apel",
"Display the username instead of You in the Chat": "Afișează numele utilizatorului în loc de Tu în Conversație",
"Do not install functions from sources you do not fully trust.": "Nu instalați funcții din surse în care nu aveți încredere completă.",
"Do not install tools from sources you do not fully trust.": "Nu instalați instrumente din surse în care nu aveți încredere completă.",
"Document": "Document",
"Document Settings": "Setări Document",
"Documentation": "Documentație",
"Documents": "Documente",
"does not make any external connections, and your data stays securely on your locally hosted server.": "nu face nicio conexiune externă, iar datele tale rămân în siguranță pe serverul găzduit local.",
"Don't Allow": "Nu Permite",
"Don't have an account?": "Nu ai un cont?",
"don't install random functions from sources you don't trust.": "nu instala funcții aleatorii din surse în care nu ai încredere.",
"don't install random tools from sources you don't trust.": "nu instala instrumente aleatorii din surse în care nu ai încredere.",
"Don't like the style": "Nu îți place stilul",
"Done": "Gata",
"Download": "Descarcă",
"Download canceled": "Descărcare anulată",
"Download Database": "Descarcă Baza de Date",
"Drop any files here to add to the conversation": "Plasează orice fișiere aici pentru a le adăuga la conversație",
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "de ex. '30s', '10m'. Unitățile de timp valide sunt 's', 'm', 'h'.",
"Edit": "Editează",
"Edit Doc": "Editează Document",
"Edit Memory": "Editează Memorie",
"Edit User": "Editează Utilizator",
"ElevenLabs": "ElevenLabs",
"Email": "Email",
"Embedding Batch Size": "Dimensiune Lot de Încapsulare",
"Embedding Model": "Model de Încapsulare",
"Embedding Model Engine": "Motor de Model de Încapsulare",
"Embedding model set to \"{{embedding_model}}\"": "Modelul de încapsulare setat la \"{{embedding_model}}\"",
"Enable Chat History": "Activează Istoricul Conversațiilor",
"Enable Community Sharing": "Activează Partajarea Comunitară",
"Enable New Sign Ups": "Activează Înscrierile Noi",
"Enable Web Search": "Activează Căutarea pe Web",
"Enabled": "Activat",
"Engine": "Motor",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Asigurați-vă că fișierul CSV include 4 coloane în această ordine: Nume, Email, Parolă, Rol.",
"Enter {{role}} message here": "Introduceți mesajul pentru {{role}} aici",
"Enter a detail about yourself for your LLMs to recall": "Introduceți un detaliu despre dvs. pe care LLM-urile să-l rețină",
"Enter api auth string (e.g. username:password)": "Introduceți șirul de autentificare API (de ex. username:password)",
"Enter Brave Search API Key": "Introduceți Cheia API Brave Search",
"Enter Chunk Overlap": "Introduceți Suprapunerea Blocului",
"Enter Chunk Size": "Introduceți Dimensiunea Blocului",
"Enter Github Raw URL": "Introduceți URL-ul Raw de pe Github",
"Enter Google PSE API Key": "Introduceți Cheia API Google PSE",
"Enter Google PSE Engine Id": "Introduceți ID-ul Motorului Google PSE",
"Enter Image Size (e.g. 512x512)": "Introduceți Dimensiunea Imaginii (de ex. 512x512)",
"Enter language codes": "Introduceți codurile limbilor",
"Enter model tag (e.g. {{modelTag}})": "Introduceți eticheta modelului (de ex. {{modelTag}})",
"Enter Number of Steps (e.g. 50)": "Introduceți Numărul de Pași (de ex. 50)",
"Enter Score": "Introduceți Scorul",
"Enter Searxng Query URL": "Introduceți URL-ul Interogării Searxng",
"Enter Serper API Key": "Introduceți Cheia API Serper",
"Enter Serply API Key": "Introduceți Cheia API Serply",
"Enter Serpstack API Key": "Introduceți Cheia API Serpstack",
"Enter stop sequence": "Introduceți secvența de oprire",
"Enter system prompt": "Introduceți promptul de sistem",
"Enter Tavily API Key": "Introduceți Cheia API Tavily",
"Enter Tika Server URL": "Introduceți URL-ul Serverului Tika",
"Enter Top K": "Introduceți Top K",
"Enter URL (e.g. http://127.0.0.1:7860/)": "Introduceți URL-ul (de ex. http://127.0.0.1:7860/)",
"Enter URL (e.g. http://localhost:11434)": "Introduceți URL-ul (de ex. http://localhost:11434)",
"Enter Your Email": "Introduceți Email-ul Dvs.",
"Enter Your Full Name": "Introduceți Numele Dvs. Complet",
"Enter your message": "Introduceți mesajul dvs.",
"Enter Your Password": "Introduceți Parola Dvs.",
"Enter Your Role": "Introduceți Rolul Dvs.",
"Error": "Eroare",
"Experimental": "Experimental",
"Export": "Exportă",
"Export All Chats (All Users)": "Exportă Toate Conversațiile (Toți Utilizatorii)",
"Export chat (.json)": "Exportă conversația (.json)",
"Export Chats": "Exportă Conversațiile",
"Export Documents Mapping": "Exportă Maparea Documentelor",
"Export Functions": "Exportă Funcțiile",
"Export LiteLLM config.yaml": "Exportă Configurația LiteLLM config.yaml",
"Export Models": "Exportă Modelele",
"Export Prompts": "Exportă Prompturile",
"Export Tools": "Exportă Instrumentele",
"External Models": "Modele Externe",
"Failed to create API Key.": "Crearea cheii API a eșuat.",
"Failed to read clipboard contents": "Citirea conținutului clipboard-ului a eșuat",
"Failed to update settings": "Actualizarea setărilor a eșuat",
"February": "Februarie",
"Feel free to add specific details": "Adăugați detalii specifice fără nicio ezitare",
"File": "Fișier",
"File Mode": "Mod Fișier",
"File not found.": "Fișierul nu a fost găsit.",
"Files": "Fișiere",
"Filter is now globally disabled": "Filtrul este acum dezactivat global",
"Filter is now globally enabled": "Filtrul este acum activat global",
"Filters": "Filtre",
"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Detectată falsificarea amprentelor: Nu se pot folosi inițialele ca avatar. Se utilizează imaginea de profil implicită.",
"Fluidly stream large external response chunks": "Transmite fluent blocuri mari de răspuns extern",
"Focus chat input": "Focalizează câmpul de intrare pentru conversație",
"Followed instructions perfectly": "A urmat instrucțiunile perfect",
"Form": "Formular",
"Format your variables using square brackets like this:": "Formatează variabilele folosind paranteze pătrate astfel:",
"Frequency Penalty": "Penalizare de Frecvență",
"Function created successfully": "Funcția a fost creată cu succes",
"Function deleted successfully": "Funcția a fost ștearsă cu succes",
"Function Description (e.g. A filter to remove profanity from text)": "Descrierea Funcției (de ex. Un filtru pentru a elimina profanitatea din text)",
"Function ID (e.g. my_filter)": "ID Funcție (de ex. my_filter)",
"Function is now globally disabled": "Funcția este acum dezactivată global",
"Function is now globally enabled": "Funcția este acum activată global",
"Function Name (e.g. My Filter)": "Nume Funcție (de ex. My Filter)",
"Function updated successfully": "Funcția a fost actualizată cu succes",
"Functions": "Funcții",
"Functions allow arbitrary code execution": "Funcțiile permit executarea arbitrară a codului",
"Functions allow arbitrary code execution.": "Funcțiile permit executarea arbitrară a codului.",
"Functions imported successfully": "Funcțiile au fost importate cu succes",
"General": "General",
"General Settings": "Setări Generale",
"Generate Image": "Generează Imagine",
"Generating search query": "Se generează interogarea de căutare",
"Generation Info": "Informații Generare",
"Get up and running with": "Începeți și rulați cu",
"Global": "Global",
"Good Response": "Răspuns Bun",
"Google PSE API Key": "Cheie API Google PSE",
"Google PSE Engine Id": "ID Motor Google PSE",
"h:mm a": "h:mm a",
"has no conversations.": "nu are conversații.",
"Hello, {{name}}": "Salut, {{name}}",
"Help": "Ajutor",
"Hide": "Ascunde",
"Hide Model": "Ascunde Modelul",
"How can I help you today?": "Cum te pot ajuta astăzi?",
"Hybrid Search": "Căutare Hibridă",
"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.": "Recunosc că am citit și înțeleg implicațiile acțiunii mele. Sunt conștient de riscurile asociate cu executarea codului arbitrar și am verificat fiabilitatea sursei.",
"Image Generation (Experimental)": "Generare Imagine (Experimental)",
"Image Generation Engine": "Motor de Generare a Imaginilor",
"Image Settings": "Setări Imagine",
"Images": "Imagini",
"Import Chats": "Importă Conversațiile",
"Import Documents Mapping": "Importă Maparea Documentelor",
"Import Functions": "Importă Funcțiile",
"Import Models": "Importă Modelele",
"Import Prompts": "Importă Prompturile",
"Import Tools": "Importă Instrumentele",
"Include `--api-auth` flag when running stable-diffusion-webui": "Includeți flag-ul `--api-auth` când rulați stable-diffusion-webui",
"Include `--api` flag when running stable-diffusion-webui": "Includeți flag-ul `--api` când rulați stable-diffusion-webui",
"Info": "Informații",
"Input commands": "Comenzi de intrare",
"Install from Github URL": "Instalează de la URL-ul Github",
"Instant Auto-Send After Voice Transcription": "Trimitere Automată Instantanee După Transcrierea Vocii",
"Interface": "Interfață",
"Invalid Tag": "Etichetă Invalidă",
"January": "Ianuarie",
"join our Discord for help.": "alătură-te Discord-ului nostru pentru ajutor.",
"JSON": "JSON",
"JSON Preview": "Previzualizare JSON",
"July": "Iulie",
"June": "Iunie",
"JWT Expiration": "Expirarea JWT",
"JWT Token": "Token JWT",
"Keep Alive": "Menține Activ",
"Keyboard shortcuts": "Scurtături de la Tastatură",
"Knowledge": "Cunoștințe",
"Language": "Limbă",
"large language models, locally.": "modele mari de limbaj, local.",
"Last Active": "Ultima Activitate",
"Last Modified": "Ultima Modificare",
"Light": "Luminos",
"Listening...": "Ascult...",
"LLMs can make mistakes. Verify important information.": "LLM-urile pot face greșeli. Verificați informațiile importante.",
"Local Models": "Modele Locale",
"LTR": "LTR",
"Made by OpenWebUI Community": "Realizat de Comunitatea OpenWebUI",
"Make sure to enclose them with": "Asigurați-vă că le închideți cu",
"Manage": "Gestionează",
"Manage Models": "Gestionează Modelele",
"Manage Ollama Models": "Gestionează Modelele Ollama",
"Manage Pipelines": "Gestionează Conductele",
"March": "Martie",
"Max Tokens (num_predict)": "Număr Maxim de Tokeni (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maxim 3 modele pot fi descărcate simultan. Vă rugăm să încercați din nou mai târziu.",
"May": "Mai",
"Memories accessible by LLMs will be shown here.": "Memoriile accesibile de LLM-uri vor fi afișate aici.",
"Memory": "Memorie",
"Memory added successfully": "Memoria a fost adăugată cu succes",
"Memory cleared successfully": "Memoria a fost ștearsă cu succes",
"Memory deleted successfully": "Memoria a fost ștearsă cu succes",
"Memory updated successfully": "Memoria a fost actualizată cu succes",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Mesajele pe care le trimiteți după crearea link-ului dvs. nu vor fi partajate. Utilizatorii cu URL-ul vor putea vizualiza conversația partajată.",
"Min P": "",
"Minimum Score": "Scor Minim",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
"Mirostat Tau": "Mirostat Tau",
"MMMM DD, YYYY": "MMMM DD, YYYY",
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
"MMMM DD, YYYY hh:mm:ss A": "MMMM DD, YYYY hh:mm:ss A",
"Model '{{modelName}}' has been successfully downloaded.": "Modelul '{{modelName}}' a fost descărcat cu succes.",
"Model '{{modelTag}}' is already in queue for downloading.": "Modelul '{{modelTag}}' este deja în coada de descărcare.",
"Model {{modelId}} not found": "Modelul {{modelId}} nu a fost găsit",
"Model {{modelName}} is not vision capable": "Modelul {{modelName}} nu are capacități de viziune",
"Model {{name}} is now {{status}}": "Modelul {{name}} este acum {{status}}",
"Model created successfully!": "Modelul a fost creat cu succes!",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Calea sistemului de fișiere al modelului detectată. Este necesar numele scurt al modelului pentru actualizare, nu se poate continua.",
"Model ID": "ID Model",
"Model not selected": "Modelul nu a fost selectat",
"Model Params": "Parametri Model",
"Model updated successfully": "Modelul a fost actualizat cu succes",
"Model Whitelisting": "Model pe Lista Albă",
"Model(s) Whitelisted": "Model(e) pe Lista Albă",
"Modelfile Content": "Conținutul Fișierului Model",
"Models": "Modele",
"More": "Mai multe",
"Name": "Nume",
"Name Tag": "Etichetă Nume",
"Name your model": "Denumirea modelului",
"New Chat": "Conversație Nouă",
"New Password": "Parolă Nouă",
"No content to speak": "Nu există conținut de vorbit",
"No documents found": "Nu au fost găsite documente",
"No file selected": "Nu a fost selectat niciun fișier",
"No results found": "Nu au fost găsite rezultate",
"No search query generated": "Nu a fost generată nicio interogare de căutare",
"No source available": "Nicio sursă disponibilă",
"No valves to update": "Nu există valve de actualizat",
"None": "Niciunul",
"Not factually correct": "Nu este corect din punct de vedere factual",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Notă: Dacă setați un scor minim, căutarea va returna doar documente cu un scor mai mare sau egal cu scorul minim.",
"Notifications": "Notificări",
"November": "Noiembrie",
"num_thread (Ollama)": "num_thread (Ollama)",
"OAuth ID": "ID OAuth",
"October": "Octombrie",
"Off": "Dezactivat",
"Okay, Let's Go!": "Ok, Să Începem!",
"OLED Dark": "Întunecat OLED",
"Ollama": "Ollama",
"Ollama API": "API Ollama",
"Ollama API disabled": "API Ollama dezactivat",
"Ollama API is disabled": "API Ollama este dezactivat",
"Ollama Version": "Versiune Ollama",
"On": "Activat",
"Only": "Doar",
"Only alphanumeric characters and hyphens are allowed in the command string.": "Doar caracterele alfanumerice și cratimele sunt permise în șirul de comandă.",
"Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Oops! Țineți-vă bine! Fișierele dvs. sunt încă în cuptorul de procesare. Le pregătim la perfecțiune. Vă rugăm să aveți răbdare și vă vom anunța odată ce sunt gata.",
"Oops! Looks like the URL is invalid. Please double-check and try again.": "Oops! Se pare că URL-ul este invalid. Vă rugăm să verificați din nou și să încercați din nou.",
"Oops! There was an error in the previous response. Please try again or contact admin.": "Oops! A apărut o eroare în răspunsul anterior. Vă rugăm să încercați din nou sau să contactați administratorul.",
"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oops! Utilizați o metodă nesuportată (doar frontend). Vă rugăm să serviți WebUI din backend.",
"Open AI (Dall-E)": "Open AI (Dall-E)",
"Open new chat": "Deschide conversație nouă",
"Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Versiunea Open WebUI (v{{OPEN_WEBUI_VERSION}}) este mai mică decât versiunea necesară (v{{REQUIRED_VERSION}})",
"OpenAI": "OpenAI",
"OpenAI API": "API OpenAI",
"OpenAI API Config": "Configurația API OpenAI",
"OpenAI API Key is required.": "Este necesară cheia API OpenAI.",
"OpenAI URL/Key required.": "Este necesar URL-ul/Cheia OpenAI.",
"or": "sau",
"Other": "Altele",
"Password": "Parolă",
"PDF document (.pdf)": "Document PDF (.pdf)",
"PDF Extract Images (OCR)": "Extrage Imagini PDF (OCR)",
"pending": "în așteptare",
"Permission denied when accessing media devices": "Permisiunea refuzată la accesarea dispozitivelor media",
"Permission denied when accessing microphone": "Permisiunea refuzată la accesarea microfonului",
"Permission denied when accessing microphone: {{error}}": "Permisiunea refuzată la accesarea microfonului: {{error}}",
"Personalization": "Personalizare",
"Pin": "Fixează",
"Pinned": "Fixat",
"Pipeline deleted successfully": "Conducta a fost ștearsă cu succes",
"Pipeline downloaded successfully": "Conducta a fost descărcată cu succes",
"Pipelines": "Conducte",
"Pipelines Not Detected": "Conducte Nedetectate",
"Pipelines Valves": "Valvele Conductelor",
"Plain text (.txt)": "Text simplu (.txt)",
"Playground": "Teren de Joacă",
"Please carefully review the following warnings:": "Vă rugăm să revizuiți cu atenție următoarele avertismente:",
"Positive attitude": "Atitudine pozitivă",
"Previous 30 days": "Ultimele 30 de zile",
"Previous 7 days": "Ultimele 7 zile",
"Profile Image": "Imagine de Profil",
"Prompt": "Prompt",
"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Prompt (de ex. Spune-mi un fapt amuzant despre Imperiul Roman)",
"Prompt Content": "Conținut Prompt",
"Prompt suggestions": "Sugestii de Prompt",
"Prompts": "Prompturi",
"Pull \"{{searchValue}}\" from Ollama.com": "Extrage \"{{searchValue}}\" de pe Ollama.com",
"Pull a model from Ollama.com": "Extrage un model de pe Ollama.com",
"Query Params": "Parametri Interogare",
"RAG Template": "Șablon RAG",
"Read Aloud": "Citește cu Voce Tare",
"Record voice": "Înregistrează vocea",
"Redirecting you to OpenWebUI Community": "Vă redirecționăm către Comunitatea OpenWebUI",
"Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Referiți-vă la dvs. ca \"Utilizator\" (de ex., \"Utilizatorul învață spaniolă\")",
"Refused when it shouldn't have": "Refuzat când nu ar fi trebuit",
"Regenerate": "Regenerare",
"Release Notes": "Note de Lansare",
"Remove": "Înlătură",
"Remove Model": "Înlătură Modelul",
"Rename": "Redenumește",
"Repeat Last N": "Repetă Ultimele N",
"Request Mode": "Mod de Cerere",
"Reranking Model": "Model de Rearanjare",
"Reranking model disabled": "Modelul de Rearanjare este dezactivat",
"Reranking model set to \"{{reranking_model}}\"": "Modelul de Rearanjare setat la \"{{reranking_model}}\"",
"Reset": "Resetează",
"Reset Upload Directory": "Resetează Directorul de Încărcare",
"Reset Vector Storage": "Resetează Stocarea Vectorilor",
"Response AutoCopy to Clipboard": "Copiere Automată a Răspunsului în Clipboard",
"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Notificările de răspuns nu pot fi activate deoarece permisiunile site-ului au fost refuzate. Vă rugăm să vizitați setările browserului pentru a acorda accesul necesar.",
"Role": "Rol",
"Rosé Pine": "Rosé Pine",
"Rosé Pine Dawn": "Rosé Pine Dawn",
"RTL": "RTL",
"Run Llama 2, Code Llama, and other models. Customize and create your own.": "Rulați Llama 2, Code Llama și alte modele. Personalizați și creați-vă propriile modele.",
"Running": "Rulare",
"Save": "Salvează",
"Save & Create": "Salvează & Creează",
"Save & Update": "Salvează & Actualizează",
"Save Tag": "Salvează Eticheta",
"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": "Salvarea jurnalelor de conversație direct în stocarea browserului dvs. nu mai este suportată. Vă rugăm să luați un moment pentru a descărca și a șterge jurnalele de conversație făcând clic pe butonul de mai jos. Nu vă faceți griji, puteți reimporta ușor jurnalele de conversație în backend prin",
"Scan": "Scanează",
"Scan complete!": "Scanare completă!",
"Scan for documents from {{path}}": "Scanează pentru documente din {{path}}",
"Search": "Caută",
"Search a model": "Caută un model",
"Search Chats": "Caută în Conversații",
"Search Documents": "Caută în Documente",
"Search Functions": "Caută Funcții",
"Search Models": "Caută Modele",
"Search Prompts": "Caută Prompturi",
"Search Query Generation Prompt": "Prompt de Generare Interogare de Căutare",
"Search Query Generation Prompt Length Threshold": "Prag Lungime Prompt de Generare Interogare de Căutare",
"Search Result Count": "Număr Rezultate Căutare",
"Search Tools": "Caută Instrumente",
"Searched {{count}} sites_one": "{{count}} site căutat",
"Searched {{count}} sites_few": "",
"Searched {{count}} sites_other": "{{count}} alte site-uri căutate",
"Searching \"{{searchQuery}}\"": "Căutare \"{{searchQuery}}\"",
"Searxng Query URL": "URL Interogare Searxng",
"See readme.md for instructions": "Consultați readme.md pentru instrucțiuni",
"See what's new": "Vezi ce e nou",
"Seed": "Sămânță",
"Select a base model": "Selectează un model de bază",
"Select a engine": "Selectează un motor",
"Select a function": "Selectează o funcție",
"Select a mode": "Selectează un mod",
"Select a model": "Selectează un model",
"Select a pipeline": "Selectează o conductă",
"Select a pipeline url": "Selectează un URL de conductă",
"Select a tool": "Selectează un instrument",
"Select an Ollama instance": "Selectează o instanță Ollama",
"Select Documents": "Selectează Documente",
"Select model": "Selectează model",
"Select only one model to call": "Selectează doar un singur model pentru apel",
"Selected model(s) do not support image inputs": "Modelul(e) selectat(e) nu suportă intrări de imagine",
"Send": "Trimite",
"Send a Message": "Trimite un Mesaj",
"Send message": "Trimite mesajul",
"September": "Septembrie",
"Serper API Key": "Cheie API Serper",
"Serply API Key": "Cheie API Serply",
"Serpstack API Key": "Cheie API Serpstack",
"Server connection verified": "Conexiunea la server a fost verificată",
"Set as default": "Setează ca implicit",
"Set Default Model": "Setează Modelul Implicit",
"Set embedding model (e.g. {{model}})": "Setează modelul de încapsulare (de ex. {{model}})",
"Set Image Size": "Setează Dimensiunea Imaginilor",
"Set reranking model (e.g. {{model}})": "Setează modelul de rearanjare (de ex. {{model}})",
"Set Steps": "Setează Pași",
"Set Task Model": "Setează Model de Sarcină",
"Set Voice": "Setează Voce",
"Settings": "Setări",
"Settings saved successfully!": "Setările au fost salvate cu succes!",
"Settings updated successfully": "Setările au fost actualizate cu succes",
"Share": "Partajează",
"Share Chat": "Partajează Conversația",
"Share to OpenWebUI Community": "Partajează cu Comunitatea OpenWebUI",
"short-summary": "scurt-sumar",
"Show": "Afișează",
"Show Admin Details in Account Pending Overlay": "Afișează Detaliile Administratorului în Suprapunerea Contului În Așteptare",
"Show Model": "Afișează Modelul",
"Show shortcuts": "Afișează scurtături",
"Show your support!": "Arată-ți susținerea!",
"Showcased creativity": "Creativitate expusă",
"Sign in": "Autentificare",
"Sign Out": "Deconectare",
"Sign up": "Înregistrare",
"Signing in": "Autentificare",
"Source": "Sursă",
"Speech recognition error: {{error}}": "Eroare de recunoaștere vocală: {{error}}",
"Speech-to-Text Engine": "Motor de Conversie a Vocii în Text",
"Stop Sequence": "Oprește Secvența",
"STT Model": "Model STT",
"STT Settings": "Setări STT",
"Submit": "Trimite",
"Subtitle (e.g. about the Roman Empire)": "Subtitlu (de ex. despre Imperiul Roman)",
"Success": "Succes",
"Successfully updated.": "Actualizat cu succes.",
"Suggested": "Sugerat",
"Support": "Suport",
"Support this plugin:": "Susține acest plugin:",
"System": "Sistem",
"System Prompt": "Prompt de Sistem",
"Tags": "Etichete",
"Tap to interrupt": "Apasă pentru a întrerupe",
"Tavily API Key": "Cheie API Tavily",
"Tell us more:": "Spune-ne mai multe:",
"Temperature": "Temperatură",
"Template": "Șablon",
"Text Completion": "Completare Text",
"Text-to-Speech Engine": "Motor de Conversie a Textului în Vorbire",
"Tfs Z": "Tfs Z",
"Thanks for your feedback!": "Mulțumim pentru feedback!",
"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "Dezvoltatorii din spatele acestui plugin sunt voluntari pasionați din comunitate. Dacă considerați acest plugin util, vă rugăm să luați în considerare contribuția la dezvoltarea sa.",
"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Scorul ar trebui să fie o valoare între 0.0 (0%) și 1.0 (100%).",
"Theme": "Temă",
"Thinking...": "Gândește...",
"This action cannot be undone. Do you wish to continue?": "Această acțiune nu poate fi anulată. Doriți să continuați?",
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Acest lucru asigură că conversațiile dvs. valoroase sunt salvate în siguranță în baza de date a backend-ului dvs. Mulțumim!",
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Aceasta este o funcție experimentală, poate să nu funcționeze așa cum vă așteptați și este supusă schimbării în orice moment.",
"This setting does not sync across browsers or devices.": "Această setare nu se sincronizează între browsere sau dispozitive.",
"This will delete": "Aceasta va șterge",
"Thorough explanation": "Explicație detaliată",
"Tika": "Tika",
"Tika Server URL required.": "Este necesar URL-ul serverului Tika.",
"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Sfat: Actualizați mai multe sloturi de variabile consecutiv apăsând tasta tab în câmpul de intrare al conversației după fiecare înlocuire.",
"Title": "Titlu",
"Title (e.g. Tell me a fun fact)": "Titlu (de ex. Spune-mi un fapt amuzant)",
"Title Auto-Generation": "Generare Automată a Titlului",
"Title cannot be an empty string.": "Titlul nu poate fi un șir gol.",
"Title Generation Prompt": "Prompt de Generare a Titlului",
"to": "către",
"To access the available model names for downloading,": "Pentru a accesa numele modelelor disponibile pentru descărcare,",
"To access the GGUF models available for downloading,": "Pentru a accesa modelele GGUF disponibile pentru descărcare,",
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Pentru a accesa WebUI, vă rugăm să contactați administratorul. Administratorii pot gestiona statusurile utilizatorilor din Panoul de Administrare.",
"To add documents here, upload them to the \"Documents\" workspace first.": "Pentru a adăuga documente aici, încărcați-le mai întâi în spațiul de lucru \"Documente\".",
"to chat input.": "către câmpul de intrare al conversației.",
"To select actions here, add them to the \"Functions\" workspace first.": "Pentru a selecta acțiuni aici, adăugați-le mai întâi în spațiul de lucru \"Funcții\".",
"To select filters here, add them to the \"Functions\" workspace first.": "Pentru a selecta filtrele aici, adăugați-le mai întâi în spațiul de lucru \"Funcții\".",
"To select toolkits here, add them to the \"Tools\" workspace first.": "Pentru a selecta kiturile de instrumente aici, adăugați-le mai întâi în spațiul de lucru \"Instrumente\".",
"Today": "Astăzi",
"Toggle settings": "Comută setările",
"Toggle sidebar": "Comută bara laterală",
"Tokens To Keep On Context Refresh (num_keep)": "Tokeni de Păstrat la Reîmprospătarea Contextului (num_keep)",
"Tool created successfully": "Instrumentul a fost creat cu succes",
"Tool deleted successfully": "Instrumentul a fost șters cu succes",
"Tool imported successfully": "Instrumentul a fost importat cu succes",
"Tool updated successfully": "Instrumentul a fost actualizat cu succes",
"Toolkit Description (e.g. A toolkit for performing various operations)": "Descrierea Kiturilor de Instrumente (de ex. Un kit de instrumente pentru efectuarea diferitelor operațiuni)",
"Toolkit ID (e.g. my_toolkit)": "ID Kit de Instrumente (de ex. my_toolkit)",
"Toolkit Name (e.g. My ToolKit)": "Nume Kit de Instrumente (de ex. My ToolKit)",
"Tools": "Instrumente",
"Tools are a function calling system with arbitrary code execution": "Instrumentele sunt un sistem de apelare a funcțiilor cu executare arbitrară a codului",
"Tools have a function calling system that allows arbitrary code execution": "Instrumentele au un sistem de apelare a funcțiilor care permite executarea arbitrară a codului",
"Tools have a function calling system that allows arbitrary code execution.": "Instrumentele au un sistem de apelare a funcțiilor care permite executarea arbitrară a codului.",
"Top K": "Top K",
"Top P": "Top P",
"Trouble accessing Ollama?": "Probleme la accesarea Ollama?",
"TTS Model": "Model TTS",
"TTS Settings": "Setări TTS",
"TTS Voice": "Voce TTS",
"Type": "Tip",
"Type Hugging Face Resolve (Download) URL": "Introduceți URL-ul de Rezolvare (Descărcare) Hugging Face",
"Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh! A apărut o problemă la conectarea la {{provider}}.",
"UI": "Interfață Utilizator",
"Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "Tip de fișier necunoscut '{{file_type}}'. Se continuă totuși cu încărcarea fișierului.",
"Unpin": "Anulează Fixarea",
"Update": "Actualizează",
"Update and Copy Link": "Actualizează și Copiază Link-ul",
"Update password": "Actualizează parola",
"Updated at": "Actualizat la",
"Upload": "Încărcare",
"Upload a GGUF model": "Încarcă un model GGUF",
"Upload Files": "Încarcă Fișiere",
"Upload Pipeline": "Încarcă Conducta",
"Upload Progress": "Progres Încărcare",
"URL Mode": "Mod URL",
"Use '#' in the prompt input to load and select your documents.": "Folosiți '#' în câmpul de intrare al promptului pentru a încărca și selecta documentele dvs.",
"Use Gravatar": "Folosește Gravatar",
"Use Initials": "Folosește Inițialele",
"use_mlock (Ollama)": "use_mlock (Ollama)",
"use_mmap (Ollama)": "use_mmap (Ollama)",
"user": "utilizator",
"User location successfully retrieved.": "Localizarea utilizatorului a fost preluată cu succes.",
"User Permissions": "Permisiuni Utilizator",
"Users": "Utilizatori",
"Utilize": "Utilizează",
"Valid time units:": "Unități de timp valide:",
"Valves": "Valve",
"Valves updated": "Valve actualizate",
"Valves updated successfully": "Valve actualizate cu succes",
"variable": "variabilă",
"variable to have them replaced with clipboard content.": "variabilă pentru a fi înlocuite cu conținutul clipboard-ului.",
"Version": "Versiune",
"Voice": "Voce",
"Warning": "Avertisment",
"Warning:": "Avertisment:",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Avertisment: Dacă actualizați sau schimbați modelul de încapsulare, va trebui să reimportați toate documentele.",
"Web": "Web",
"Web API": "API Web",
"Web Loader Settings": "Setări Încărcător Web",
"Web Params": "Parametri Web",
"Web Search": "Căutare Web",
"Web Search Engine": "Motor de Căutare Web",
"Webhook URL": "URL Webhook",
"WebUI Settings": "Setări WebUI",
"WebUI will make requests to": "WebUI va face cereri către",
"Whats New in": "Ce e Nou în",
"When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Când istoricul este dezactivat, conversațiile noi din acest browser nu vor apărea în istoricul dvs. pe niciunul dintre dispozitivele dvs.",
"Whisper (Local)": "Whisper (Local)",
"Widescreen Mode": "Mod Ecran Larg",
"Workspace": "Spațiu de Lucru",
"Write a prompt suggestion (e.g. Who are you?)": "Scrieți o sugestie de prompt (de ex. Cine ești?)",
"Write a summary in 50 words that summarizes [topic or keyword].": "Scrieți un rezumat în 50 de cuvinte care rezumă [subiect sau cuvânt cheie].",
"Yesterday": "Ieri",
"You": "Tu",
"You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "Puteți personaliza interacțiunile dvs. cu LLM-urile adăugând amintiri prin butonul 'Gestionează' de mai jos, făcându-le mai utile și adaptate la dvs.",
"You cannot clone a base model": "Nu puteți clona un model de bază",
"You have no archived conversations.": "Nu aveți conversații arhivate.",
"You have shared this chat": "Ați partajat această conversație",
"You're a helpful assistant.": "Ești un asistent util.",
"You're now logged in.": "Acum ești autentificat.",
"Your account status is currently pending activation.": "Statusul contului dvs. este în așteptare pentru activare.",
"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.": "Întreaga dvs. contribuție va merge direct la dezvoltatorul plugin-ului; Open WebUI nu ia niciun procent. Cu toate acestea, platforma de finanțare aleasă ar putea avea propriile taxe.",
"Youtube": "Youtube",
"Youtube Loader Settings": "Setări Încărcător Youtube"
}

View File

@ -15,6 +15,7 @@
"Account": "Аккаунт",
"Account Activation Pending": "",
"Accurate information": "Точная информация",
"Actions": "",
"Active Users": "",
"Add": "Добавить",
"Add a model id": "Добавление идентификатора модели",
@ -27,6 +28,7 @@
"Add Memory": "Добавьте память",
"Add message": "Добавьте сообщение",
"Add Model": "Добавьте модель",
"Add Tag": "",
"Add Tags": "Добавьте тэгы",
"Add User": "Добавьте пользователя",
"Adjusting these settings will apply changes universally to all users.": "Регулирующий этих настроек приведет к изменениям для все пользователей.",
@ -168,6 +170,7 @@
"Delete chat": "Удалить чат",
"Delete Chat": "Удалить чат",
"Delete chat?": "",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "удалить эту ссылку",
@ -211,6 +214,7 @@
"Edit Doc": "Редактировать документ",
"Edit Memory": "",
"Edit User": "Редактировать пользователя",
"ElevenLabs": "",
"Email": "Электронная почта",
"Embedding Batch Size": "",
"Embedding Model": "Модель эмбеддинга",
@ -360,7 +364,6 @@
"Manage Models": "Управление моделями",
"Manage Ollama Models": "Управление моделями Ollama",
"Manage Pipelines": "Управление конвейерами",
"Manage Valves": "",
"March": "Март",
"Max Tokens (num_predict)": "Максимальное количество жетонов (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Максимальное количество моделей для загрузки одновременно - 3. Пожалуйста, попробуйте позже.",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Сообщения, которые вы отправляете после создания ссылки, не будут распространяться. Пользователи с URL смогут просматривать общий чат.",
"Min P": "",
"Minimum Score": "Минимальный балл",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -500,6 +504,7 @@
"Save": "Сохранить",
"Save & Create": "Сохранить и создать",
"Save & Update": "Сохранить и обновить",
"Save Tag": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Прямое сохранение журналов чата в хранилище вашего браузера больше не поддерживается. Пожалуйста, потратьте минуту, чтобы скачать и удалить ваши журналы чата, нажав на кнопку ниже. Не волнуйтесь, вы легко сможете повторно импортировать свои журналы чата в бэкенд через",
"Scan": "Сканировать",
"Scan complete!": "Сканирование завершено!",
@ -619,6 +624,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
"To add documents here, upload them to the \"Documents\" workspace first.": "",
"to chat input.": "в чате.",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "Сегодня",

View File

@ -15,6 +15,7 @@
"Account": "Налог",
"Account Activation Pending": "",
"Accurate information": "Прецизне информације",
"Actions": "",
"Active Users": "",
"Add": "Додај",
"Add a model id": "Додавање ИД-а модела",
@ -27,6 +28,7 @@
"Add Memory": "Додај меморију",
"Add message": "Додај поруку",
"Add Model": "Додај модел",
"Add Tag": "",
"Add Tags": "Додај ознаке",
"Add User": "Додај корисника",
"Adjusting these settings will apply changes universally to all users.": "Прилагођавање ових подешавања ће применити промене на све кориснике.",
@ -168,6 +170,7 @@
"Delete chat": "Обриши ћаскање",
"Delete Chat": "Обриши ћаскање",
"Delete chat?": "",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "обриши ову везу",
@ -211,6 +214,7 @@
"Edit Doc": "Уреди документ",
"Edit Memory": "",
"Edit User": "Уреди корисника",
"ElevenLabs": "",
"Email": "Е-пошта",
"Embedding Batch Size": "",
"Embedding Model": "Модел уградње",
@ -360,7 +364,6 @@
"Manage Models": "Управљај моделима",
"Manage Ollama Models": "Управљај Ollama моделима",
"Manage Pipelines": "Управљање цевоводима",
"Manage Valves": "",
"March": "Март",
"Max Tokens (num_predict)": "Маx Токенс (нум_предицт)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Највише 3 модела могу бити преузета истовремено. Покушајте поново касније.",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Поруке које пошаљете након стварања ваше везе неће бити подељене. Корисници са URL-ом ће моћи да виде дељено ћаскање.",
"Min P": "",
"Minimum Score": "Најмањи резултат",
"Mirostat": "Миростат",
"Mirostat Eta": "Миростат Ета",
@ -500,6 +504,7 @@
"Save": "Сачувај",
"Save & Create": "Сачувај и направи",
"Save & Update": "Сачувај и ажурирај",
"Save Tag": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Чување ћаскања директно у складиште вашег прегледача више није подржано. Одвојите тренутак да преузмете и избришете ваша ћаскања кликом на дугме испод. Не брините, можете лако поново увезти ваша ћаскања у бекенд кроз",
"Scan": "Скенирај",
"Scan complete!": "Скенирање завршено!",
@ -618,6 +623,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
"To add documents here, upload them to the \"Documents\" workspace first.": "",
"to chat input.": "у унос ћаскања.",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "Данас",

View File

@ -15,6 +15,7 @@
"Account": "Konto",
"Account Activation Pending": "Kontoaktivering väntar",
"Accurate information": "Exakt information",
"Actions": "",
"Active Users": "Aktiva användare",
"Add": "Lägg till",
"Add a model id": "Lägga till ett modell-ID",
@ -27,6 +28,7 @@
"Add Memory": "Lägg till minne",
"Add message": "Lägg till meddelande",
"Add Model": "Lägg till modell",
"Add Tag": "",
"Add Tags": "Lägg till taggar",
"Add User": "Lägg till användare",
"Adjusting these settings will apply changes universally to all users.": "Justering av dessa inställningar kommer att tillämpa ändringar universellt för alla användare.",
@ -168,6 +170,7 @@
"Delete chat": "Radera chatt",
"Delete Chat": "Radera chatt",
"Delete chat?": "",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "radera denna länk",
@ -211,6 +214,7 @@
"Edit Doc": "Redigera dokument",
"Edit Memory": "",
"Edit User": "Redigera användare",
"ElevenLabs": "",
"Email": "E-post",
"Embedding Batch Size": "Batchstorlek för inbäddning",
"Embedding Model": "Inbäddningsmodell",
@ -360,7 +364,6 @@
"Manage Models": "Hantera modeller",
"Manage Ollama Models": "Hantera Ollama-modeller",
"Manage Pipelines": "Hantera rörledningar",
"Manage Valves": "",
"March": "mars",
"Max Tokens (num_predict)": "Maximalt antal tokens (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Högst 3 modeller kan laddas ner samtidigt. Vänligen försök igen senare.",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Meddelanden du skickar efter att ha skapat din länk kommer inte att delas. Användare med URL:en kommer att kunna se delad chatt.",
"Min P": "",
"Minimum Score": "Tröskel",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -500,6 +504,7 @@
"Save": "Spara",
"Save & Create": "Spara och skapa",
"Save & Update": "Spara och uppdatera",
"Save Tag": "",
"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": "Att spara chatloggar direkt till din webbläsares lagring stöds inte längre. Ta en stund och ladda ner och radera dina chattloggar genom att klicka på knappen nedan. Oroa dig inte, du kan enkelt importera dina chattloggar till backend genom",
"Scan": "Skanna",
"Scan complete!": "Skanning klar!",
@ -617,6 +622,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "För att få tillgång till WebUI, kontakta administratören. Administratörer kan hantera behörigheter från administrationspanelen.",
"To add documents here, upload them to the \"Documents\" workspace first.": "Om du vill lägga till dokument här ska du först ladda upp dem till arbetsytan \"Dokument\".",
"to chat input.": "till chattinmatning.",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "Om du vill välja verktygslådor här måste du först lägga till dem i arbetsytan \"Verktyg\".",
"Today": "Idag",

View File

@ -0,0 +1,714 @@
{
"'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' หรือ '-1' สำหรับไม่มีการหมดอายุ",
"(Beta)": "(เบต้า)",
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(เช่น `sh webui.sh --api --api-auth username_password`)",
"(e.g. `sh webui.sh --api`)": "(เช่น `sh webui.sh --api`)",
"(latest)": "(ล่าสุด)",
"{{ models }}": "{{ models }}",
"{{ owner }}: You cannot delete a base model": "{{ owner }}: คุณไม่สามารถลบโมเดลพื้นฐานได้",
"{{modelName}} is thinking...": "{{modelName}} กำลังคิด...",
"{{user}}'s Chats": "การสนทนาของ {{user}}",
"{{webUIName}} Backend Required": "ต้องการ Backend ของ {{webUIName}}",
"A task model is used when performing tasks such as generating titles for chats and web search queries": "ใช้โมเดลงานเมื่อทำงานเช่นการสร้างหัวข้อสำหรับการสนทนาและการค้นหาเว็บ",
"a user": "ผู้ใช้",
"About": "เกี่ยวกับ",
"Account": "บัญชี",
"Account Activation Pending": "การเปิดใช้งานบัญชีอยู่ระหว่างดำเนินการ",
"Accurate information": "ข้อมูลที่ถูกต้อง",
"Actions": "",
"Active Users": "ผู้ใช้ที่ใช้งานอยู่",
"Add": "เพิ่ม",
"Add a model id": "เพิ่มรหัสโมเดล",
"Add a short description about what this model does": "เพิ่มคำอธิบายสั้นๆ เกี่ยวกับสิ่งที่โมเดลนี้ทำ",
"Add a short title for this prompt": "เพิ่มหัวข้อสั้นๆ สำหรับพรอมต์นี้",
"Add a tag": "เพิ่มแท็ก",
"Add custom prompt": "เพิ่มพรอมต์ที่กำหนดเอง",
"Add Docs": "เพิ่มเอกสาร",
"Add Files": "เพิ่มไฟล์",
"Add Memory": "เพิ่มความจำ",
"Add message": "เพิ่มข้อความ",
"Add Model": "เพิ่มโมเดล",
"Add Tag": "",
"Add Tags": "เพิ่มแท็ก",
"Add User": "เพิ่มผู้ใช้",
"Adjusting these settings will apply changes universally to all users.": "การปรับการตั้งค่าเหล่านี้จะนำไปใช้กับผู้ใช้ทั้งหมด",
"admin": "ผู้ดูแลระบบ",
"Admin": "ผู้ดูแลระบบ",
"Admin Panel": "แผงผู้ดูแลระบบ",
"Admin Settings": "การตั้งค่าผู้ดูแลระบบ",
"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "ผู้ดูแลระบบสามารถเข้าถึงเครื่องมือทั้งหมดได้ตลอดเวลา; ผู้ใช้ต้องการเครื่องมือที่กำหนดต่อโมเดลในพื้นที่ทำงาน",
"Advanced Parameters": "พารามิเตอร์ขั้นสูง",
"Advanced Params": "พารามิเตอร์ขั้นสูง",
"all": "ทั้งหมด",
"All Documents": "เอกสารทั้งหมด",
"All Users": "ผู้ใช้ทั้งหมด",
"Allow": "อนุญาต",
"Allow Chat Deletion": "อนุญาตการลบการสนทนา",
"Allow non-local voices": "อนุญาตเสียงที่ไม่ใช่ท้องถิ่น",
"Allow User Location": "อนุญาตตำแหน่งผู้ใช้",
"Allow Voice Interruption in Call": "อนุญาตการแทรกเสียงในสาย",
"alphanumeric characters and hyphens": "อักขระตัวเลขและขีดกลาง",
"Already have an account?": "มีบัญชีอยู่แล้ว?",
"an assistant": "ผู้ช่วย",
"and": "และ",
"and create a new shared link.": "และสร้างลิงก์ที่แชร์ใหม่",
"API Base URL": "URL ฐานของ API",
"API Key": "คีย์ API",
"API Key created.": "สร้างคีย์ API แล้ว",
"API keys": "คีย์ API",
"April": "เมษายน",
"Archive": "เก็บถาวร",
"Archive All Chats": "เก็บถาวรการสนทนาทั้งหมด",
"Archived Chats": "การสนทนาที่เก็บถาวร",
"are allowed - Activate this command by typing": "ได้รับอนุญาต - เปิดใช้งานคำสั่งนี้โดยการพิมพ์",
"Are you sure?": "คุณแน่ใจหรือ?",
"Attach file": "แนบไฟล์",
"Attention to detail": "ใส่ใจในรายละเอียด",
"Audio": "เสียง",
"Audio settings updated successfully": "อัปเดตการตั้งค่าเสียงสำเร็จแล้ว",
"August": "สิงหาคม",
"Auto-playback response": "ตอบสนองการเล่นอัตโนมัติ",
"AUTOMATIC1111 Api Auth String": "สตริงการตรวจสอบ API ของ AUTOMATIC1111",
"AUTOMATIC1111 Base URL": "URL ฐานของ AUTOMATIC1111",
"AUTOMATIC1111 Base URL is required.": "ต้องการ URL ฐานของ AUTOMATIC1111",
"available!": "พร้อมใช้งาน!",
"Back": "กลับ",
"Bad Response": "การตอบสนองที่ไม่ดี",
"Banners": "แบนเนอร์",
"Base Model (From)": "โมเดลพื้นฐาน (จาก)",
"Batch Size (num_batch)": "ขนาดชุด (num_batch)",
"before": "ก่อน",
"Being lazy": "ขี้เกียจ",
"Brave Search API Key": "คีย์ API ของ Brave Search",
"Bypass SSL verification for Websites": "ข้ามการตรวจสอบ SSL สำหรับเว็บไซต์",
"Call": "โทร",
"Call feature is not supported when using Web STT engine": "ไม่รองรับฟีเจอร์การโทรเมื่อใช้เครื่องยนต์ Web STT",
"Camera": "กล้อง",
"Cancel": "ยกเลิก",
"Capabilities": "ความสามารถ",
"Change Password": "เปลี่ยนรหัสผ่าน",
"Chat": "แชท",
"Chat Background Image": "ภาพพื้นหลังแชท",
"Chat Bubble UI": "UI ฟองแชท",
"Chat Controls": "การควบคุมแชท",
"Chat direction": "ทิศทางการแชท",
"Chat History": "ประวัติการแชท",
"Chat History is off for this browser.": "ประวัติการแชทปิดอยู่สำหรับเบราว์เซอร์นี้",
"Chats": "แชท",
"Check Again": "ตรวจสอบอีกครั้ง",
"Check for updates": "ตรวจสอบการอัปเดต",
"Checking for updates...": "กำลังตรวจสอบการอัปเดต...",
"Choose a model before saving...": "เลือกโมเดลก่อนบันทึก...",
"Chunk Overlap": "ทับซ้อนส่วนข้อมูล",
"Chunk Params": "พารามิเตอร์ส่วนข้อมูล",
"Chunk Size": "ขนาดส่วนข้อมูล",
"Citation": "การอ้างอิง",
"Clear memory": "ล้างความจำ",
"Click here for help.": "คลิกที่นี่เพื่อขอความช่วยเหลือ",
"Click here to": "คลิกที่นี่เพื่อ",
"Click here to download user import template file.": "คลิกที่นี่เพื่อดาวน์โหลดไฟล์แม่แบบนำเข้าผู้ใช้",
"Click here to select": "คลิกที่นี่เพื่อเลือก",
"Click here to select a csv file.": "คลิกที่นี่เพื่อเลือกไฟล์ csv",
"Click here to select a py file.": "คลิกที่นี่เพื่อเลือกไฟล์ py",
"Click here to select documents.": "คลิกที่นี่เพื่อเลือกเอกสาร",
"click here.": "คลิกที่นี่",
"Click on the user role button to change a user's role.": "คลิกที่ปุ่มบทบาทผู้ใช้เพื่อเปลี่ยนบทบาทของผู้ใช้",
"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "การอนุญาตเขียนคลิปบอร์ดถูกปฏิเสธ โปรดตรวจสอบการตั้งค่าเบราว์เซอร์ของคุณเพื่อให้สิทธิ์ที่จำเป็น",
"Clone": "โคลน",
"Close": "ปิด",
"Code formatted successfully": "จัดรูปแบบโค้ดสำเร็จแล้ว",
"Collection": "คอลเลคชัน",
"ComfyUI": "ComfyUI",
"ComfyUI Base URL": "URL ฐานของ ComfyUI",
"ComfyUI Base URL is required.": "ต้องการ URL ฐานของ ComfyUI",
"Command": "คำสั่ง",
"Concurrent Requests": "คำขอพร้อมกัน",
"Confirm": "ยืนยัน",
"Confirm Password": "ยืนยันรหัสผ่าน",
"Confirm your action": "ยืนยันการดำเนินการของคุณ",
"Connections": "การเชื่อมต่อ",
"Contact Admin for WebUI Access": "ติดต่อผู้ดูแลระบบสำหรับการเข้าถึง WebUI",
"Content": "เนื้อหา",
"Content Extraction": "การสกัดเนื้อหา",
"Context Length": "ความยาวของบริบท",
"Continue Response": "ตอบสนองต่อไป",
"Continue with {{provider}}": "ดำเนินการต่อด้วย {{provider}}",
"Controls": "การควบคุม",
"Copied shared chat URL to clipboard!": "คัดลอก URL แชทที่แชร์ไปยังคลิปบอร์ดแล้ว!",
"Copy": "คัดลอก",
"Copy last code block": "คัดลอกบล็อกโค้ดสุดท้าย",
"Copy last response": "คัดลอกการตอบสนองล่าสุด",
"Copy Link": "คัดลอกลิงก์",
"Copying to clipboard was successful!": "คัดลอกไปยังคลิปบอร์ดสำเร็จแล้ว!",
"Create a model": "สร้างโมเดล",
"Create Account": "สร้างบัญชี",
"Create new key": "สร้างคีย์ใหม่",
"Create new secret key": "สร้างคีย์ลับใหม่",
"Created at": "สร้างเมื่อ",
"Created At": "สร้างเมื่อ",
"Created by": "สร้างโดย",
"CSV Import": "นำเข้า CSV",
"Current Model": "โมเดลปัจจุบัน",
"Current Password": "รหัสผ่านปัจจุบัน",
"Custom": "กำหนดเอง",
"Customize models for a specific purpose": "ปรับแต่งโมเดลสำหรับวัตถุประสงค์เฉพาะ",
"Dark": "มืด",
"Dashboard": "แดชบอร์ด",
"Database": "ฐานข้อมูล",
"December": "ธันวาคม",
"Default": "ค่าเริ่มต้น",
"Default (Automatic1111)": "ค่าเริ่มต้น (Automatic1111)",
"Default (SentenceTransformers)": "ค่าเริ่มต้น (SentenceTransformers)",
"Default Model": "โมเดลค่าเริ่มต้น",
"Default model updated": "อัปเดตโมเดลค่าเริ่มต้นแล้ว",
"Default Prompt Suggestions": "คำแนะนำพรอมต์ค่าเริ่มต้น",
"Default User Role": "บทบาทผู้ใช้ค่าเริ่มต้น",
"delete": "ลบ",
"Delete": "ลบ",
"Delete a model": "ลบโมเดล",
"Delete All Chats": "ลบการสนทนาทั้งหมด",
"Delete chat": "ลบแชท",
"Delete Chat": "ลบแชท",
"Delete chat?": "ลบแชท?",
"Delete Doc": "",
"Delete function?": "ลบฟังก์ชัน?",
"Delete prompt?": "ลบพรอมต์?",
"delete this link": "ลบลิงก์นี้",
"Delete tool?": "ลบเครื่องมือ?",
"Delete User": "ลบผู้ใช้",
"Deleted {{deleteModelTag}}": "ลบ {{deleteModelTag}}",
"Deleted {{name}}": "ลบ {{name}}",
"Description": "คำอธิบาย",
"Didn't fully follow instructions": "ไม่ได้ปฏิบัติตามคำแนะนำทั้งหมด",
"Disabled": "ปิดใช้งาน",
"Discover a function": "ค้นหาฟังก์ชัน",
"Discover a model": "ค้นหาโมเดล",
"Discover a prompt": "ค้นหาพรอมต์",
"Discover a tool": "ค้นหาเครื่องมือ",
"Discover, download, and explore custom functions": "ค้นหา ดาวน์โหลด และสำรวจฟังก์ชันที่กำหนดเอง",
"Discover, download, and explore custom prompts": "ค้นหา ดาวน์โหลด และสำรวจพรอมต์ที่กำหนดเอง",
"Discover, download, and explore custom tools": "ค้นหา ดาวน์โหลด และสำรวจเครื่องมือที่กำหนดเอง",
"Discover, download, and explore model presets": "ค้นหา ดาวน์โหลด และสำรวจพรีเซ็ตโมเดล",
"Dismissible": "ยกเลิกได้",
"Display Emoji in Call": "แสดงอิโมจิในการโทร",
"Display the username instead of You in the Chat": "แสดงชื่อผู้ใช้แทนคุณในการแชท",
"Do not install functions from sources you do not fully trust.": "อย่าติดตั้งฟังก์ชันจากแหล่งที่คุณไม่ไว้วางใจอย่างเต็มที่",
"Do not install tools from sources you do not fully trust.": "อย่าติดตั้งเครื่องมือจากแหล่งที่คุณไม่ไว้วางใจอย่างเต็มที่",
"Document": "เอกสาร",
"Document Settings": "การตั้งค่าเอกสาร",
"Documentation": "เอกสารประกอบ",
"Documents": "เอกสาร",
"does not make any external connections, and your data stays securely on your locally hosted server.": "ไม่เชื่อมต่อภายนอกใดๆ และข้อมูลของคุณจะอยู่บนเซิร์ฟเวอร์ที่โฮสต์ในท้องถิ่นของคุณอย่างปลอดภัย",
"Don't Allow": "ไม่อนุญาต",
"Don't have an account?": "ยังไม่มีบัญชี?",
"don't install random functions from sources you don't trust.": "อย่าติดตั้งฟังก์ชันแบบสุ่มจากแหล่งที่คุณไม่ไว้วางใจ",
"don't install random tools from sources you don't trust.": "อย่าติดตั้งเครื่องมือแบบสุ่มจากแหล่งที่คุณไม่ไว้วางใจ",
"Don't like the style": "ไม่ชอบสไตล์นี้",
"Done": "เสร็จสิ้น",
"Download": "ดาวน์โหลด",
"Download canceled": "ยกเลิกการดาวน์โหลด",
"Download Database": "ดาวน์โหลดฐานข้อมูล",
"Drop any files here to add to the conversation": "วางไฟล์ใดๆ ที่นี่เพื่อเพิ่มในการสนทนา",
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "เช่น '30s', '10m' หน่วยเวลาที่ถูกต้องคือ 's', 'm', 'h'",
"Edit": "แก้ไข",
"Edit Doc": "แก้ไขเอกสาร",
"Edit Memory": "แก้ไขความจำ",
"Edit User": "แก้ไขผู้ใช้",
"ElevenLabs": "",
"Email": "อีเมล",
"Embedding Batch Size": "ขนาดชุดการฝัง",
"Embedding Model": "โมเดลการฝัง",
"Embedding Model Engine": "เครื่องยนต์โมเดลการฝัง",
"Embedding model set to \"{{embedding_model}}\"": "ตั้งค่าโมเดลการฝังเป็น \"{{embedding_model}}\"",
"Enable Chat History": "เปิดใช้งานประวัติการแชท",
"Enable Community Sharing": "เปิดใช้งานการแชร์ในชุมชน",
"Enable New Sign Ups": "เปิดใช้งานการสมัครใหม่",
"Enable Web Search": "เปิดใช้งานการค้นหาเว็บ",
"Enabled": "เปิดใช้งาน",
"Engine": "เครื่องยนต์",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "ตรวจสอบว่าไฟล์ CSV ของคุณมี 4 คอลัมน์ในลำดับนี้: ชื่อ, อีเมล, รหัสผ่าน, บทบาท",
"Enter {{role}} message here": "ใส่ข้อความ {{role}} ที่นี่",
"Enter a detail about yourself for your LLMs to recall": "ใส่รายละเอียดเกี่ยวกับตัวคุณสำหรับ LLMs ของคุณให้จดจำ",
"Enter api auth string (e.g. username:password)": "ใส่สตริงการตรวจสอบ API (เช่น username:password)",
"Enter Brave Search API Key": "ใส่คีย์ API ของ Brave Search",
"Enter Chunk Overlap": "ใส่การทับซ้อนส่วนข้อมูล",
"Enter Chunk Size": "ใส่ขนาดส่วนข้อมูล",
"Enter Github Raw URL": "ใส่ URL ดิบของ Github",
"Enter Google PSE API Key": "ใส่คีย์ API ของ Google PSE",
"Enter Google PSE Engine Id": "ใส่รหัสเครื่องยนต์ของ Google PSE",
"Enter Image Size (e.g. 512x512)": "ใส่ขนาดภาพ (เช่น 512x512)",
"Enter language codes": "ใส่รหัสภาษา",
"Enter model tag (e.g. {{modelTag}})": "ใส่แท็กโมเดล (เช่น {{modelTag}})",
"Enter Number of Steps (e.g. 50)": "ใส่จำนวนขั้นตอน (เช่น 50)",
"Enter Score": "ใส่คะแนน",
"Enter Searxng Query URL": "ใส URL การค้นหาของ Searxng",
"Enter Serper API Key": "ใส่คีย์ API ของ Serper",
"Enter Serply API Key": "ใส่คีย์ API ของ Serply",
"Enter Serpstack API Key": "ใส่คีย์ API ของ Serpstack",
"Enter stop sequence": "ใส่ลำดับหยุด",
"Enter system prompt": "ใส่พรอมต์ระบบ",
"Enter Tavily API Key": "ใส่คีย์ API ของ Tavily",
"Enter Tika Server URL": "ใส่ URL เซิร์ฟเวอร์ของ Tika",
"Enter Top K": "ใส่ Top K",
"Enter URL (e.g. http://127.0.0.1:7860/)": "ใส่ URL (เช่น http://127.0.0.1:7860/)",
"Enter URL (e.g. http://localhost:11434)": "ใส่ URL (เช่น http://localhost:11434)",
"Enter Your Email": "ใส่อีเมลของคุณ",
"Enter Your Full Name": "ใส่ชื่อเต็มของคุณ",
"Enter your message": "ใส่ข้อความของคุณ",
"Enter Your Password": "ใส่รหัสผ่านของคุณ",
"Enter Your Role": "ใส่บทบาทของคุณ",
"Error": "ข้อผิดพลาด",
"Experimental": "การทดลอง",
"Export": "ส่งออก",
"Export All Chats (All Users)": "ส่งออกการสนทนาทั้งหมด (ผู้ใช้ทั้งหมด)",
"Export chat (.json)": "ส่งออกการสนทนา (.json)",
"Export Chats": "ส่งออกการสนทนา",
"Export Documents Mapping": "ส่งออกการแมปเอกสาร",
"Export Functions": "ส่งออกฟังก์ชัน",
"Export LiteLLM config.yaml": "ส่งออกการตั้งค่า LiteLLM config.yaml",
"Export Models": "ส่งออกโมเดล",
"Export Prompts": "ส่งออกพรอมต์",
"Export Tools": "ส่งออกเครื่องมือ",
"External Models": "โมเดลภายนอก",
"Failed to create API Key.": "สร้างคีย์ API ล้มเหลว",
"Failed to read clipboard contents": "อ่านเนื้อหาคลิปบอร์ดล้มเหลว",
"Failed to update settings": "อัปเดตการตั้งค่าล้มเหลว",
"February": "กุมภาพันธ์",
"Feel free to add specific details": "สามารถเพิ่มรายละเอียดเฉพาะได้",
"File": "ไฟล์",
"File Mode": "โหมดไฟล์",
"File not found.": "ไม่พบไฟล์",
"Files": "ไฟล์",
"Filter is now globally disabled": "การกรองถูกปิดใช้งานทั่วโลกแล้ว",
"Filter is now globally enabled": "การกรองถูกเปิดใช้งานทั่วโลกแล้ว",
"Filters": "ตัวกรอง",
"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "ตรวจพบการปลอมแปลงลายนิ้วมือ: ไม่สามารถใช้ชื่อย่อเป็นอวตารได้ ใช้รูปโปรไฟล์เริ่มต้น",
"Fluidly stream large external response chunks": "สตรีมชิ้นส่วนการตอบสนองขนาดใหญ่จากภายนอกอย่างลื่นไหล",
"Focus chat input": "โฟกัสการป้อนแชท",
"Followed instructions perfectly": "ปฏิบัติตามคำแนะนำอย่างสมบูรณ์แบบ",
"Form": "ฟอร์ม",
"Format your variables using square brackets like this:": "จัดรูปแบบตัวแปรของคุณโดยใช้วงเล็บสี่เหลี่ยมเช่นนี้:",
"Frequency Penalty": "การลงโทษความถี่",
"Function created successfully": "สร้างฟังก์ชันสำเร็จ",
"Function deleted successfully": "ลบฟังก์ชันสำเร็จ",
"Function Description (e.g. A filter to remove profanity from text)": "คำอธิบายฟังก์ชัน (เช่น ตัวกรองเพื่อเอาคำหยาบออกจากข้อความ)",
"Function ID (e.g. my_filter)": "รหัสฟังก์ชัน (เช่น my_filter)",
"Function is now globally disabled": "ฟังก์ชันถูกปิดใช้งานทั่วโลกแล้ว",
"Function is now globally enabled": "ฟังก์ชันถูกเปิดใช้งานทั่วโลกแล้ว",
"Function Name (e.g. My Filter)": "ชื่อฟังก์ชัน (เช่น My Filter)",
"Function updated successfully": "อัปเดตฟังก์ชันสำเร็จ",
"Functions": "ฟังก์ชัน",
"Functions allow arbitrary code execution": "ฟังก์ชันอนุญาตการเรียกใช้โค้ดโดยพลการ",
"Functions allow arbitrary code execution.": "ฟังก์ชันอนุญาตการเรียกใช้โค้ดโดยพลการ",
"Functions imported successfully": "นำเข้าฟังก์ชันสำเร็จ",
"General": "ทั่วไป",
"General Settings": "การตั้งค่าทั่วไป",
"Generate Image": "สร้างภาพ",
"Generating search query": "สร้างคำค้นหา",
"Generation Info": "ข้อมูลการสร้าง",
"Get up and running with": "เริ่มต้นใช้งานด้วย",
"Global": "ทั่วโลก",
"Good Response": "การตอบสนองที่ดี",
"Google PSE API Key": "คีย์ API ของ Google PSE",
"Google PSE Engine Id": "รหัสเครื่องยนต์ของ Google PSE",
"h:mm a": "h:mm a",
"has no conversations.": "ไม่มีการสนทนา",
"Hello, {{name}}": "สวัสดี, {{name}}",
"Help": "ช่วยเหลือ",
"Hide": "ซ่อน",
"Hide Model": "ซ่อนโมเดล",
"How can I help you today?": "วันนี้ฉันจะช่วยอะไรคุณได้บ้าง?",
"Hybrid Search": "การค้นหาแบบไฮบริด",
"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.": "ฉันรับทราบว่าฉันได้อ่านและเข้าใจผลกระทบของการกระทำของฉัน ฉันทราบถึงความเสี่ยงที่เกี่ยวข้องกับการเรียกใช้โค้ดโดยพลการและฉันได้ตรวจสอบความน่าเชื่อถือของแหล่งที่มาแล้ว",
"Image Generation (Experimental)": "การสร้างภาพ (การทดลอง)",
"Image Generation Engine": "เครื่องยนต์การสร้างภาพ",
"Image Settings": "การตั้งค่าภาพ",
"Images": "ภาพ",
"Import Chats": "นำเข้าการสนทนา",
"Import Documents Mapping": "นำเข้าการแมปเอกสาร",
"Import Functions": "นำเข้าฟังก์ชัน",
"Import Models": "นำเข้าโมเดล",
"Import Prompts": "นำเข้าพรอมต์",
"Import Tools": "นำเข้าเครื่องมือ",
"Include `--api-auth` flag when running stable-diffusion-webui": "รวมแฟลก `--api-auth` เมื่อเรียกใช้ stable-diffusion-webui",
"Include `--api` flag when running stable-diffusion-webui": "รวมแฟลก `--api` เมื่อเรียกใช้ stable-diffusion-webui",
"Info": "ข้อมูล",
"Input commands": "คำสั่งป้อนข้อมูล",
"Install from Github URL": "ติดตั้งจาก URL ของ Github",
"Instant Auto-Send After Voice Transcription": "ส่งอัตโนมัติทันทีหลังจากการถอดเสียง",
"Interface": "อินเทอร์เฟซ",
"Invalid Tag": "แท็กไม่ถูกต้อง",
"January": "มกราคม",
"join our Discord for help.": "เข้าร่วม Discord ของเราเพื่อขอความช่วยเหลือ",
"JSON": "JSON",
"JSON Preview": "ดูตัวอย่าง JSON",
"July": "กรกฎาคม",
"June": "มิถุนายน",
"JWT Expiration": "การหมดอายุของ JWT",
"JWT Token": "โทเค็น JWT",
"Keep Alive": "คงอยู่",
"Keyboard shortcuts": "ทางลัดแป้นพิมพ์",
"Knowledge": "ความรู้",
"Language": "ภาษา",
"large language models, locally.": "โมเดลภาษาขนาดใหญ่ในเครื่อง",
"Last Active": "ใช้งานล่าสุด",
"Last Modified": "แก้ไขล่าสุด",
"Light": "แสง",
"Listening...": "กำลังฟัง...",
"LLMs can make mistakes. Verify important information.": "LLMs สามารถทำผิดพลาดได้ ตรวจสอบข้อมูลสำคัญ",
"Local Models": "โมเดลท้องถิ่น",
"LTR": "LTR",
"Made by OpenWebUI Community": "สร้างโดยชุมชน OpenWebUI",
"Make sure to enclose them with": "",
"Manage": "จัดการ",
"Manage Models": "จัดการโมเดล",
"Manage Ollama Models": "จัดการโมเดล Ollama",
"Manage Pipelines": "จัดการไปป์ไลน์",
"March": "มีนาคม",
"Max Tokens (num_predict)": "โทเค็นสูงสุด (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "สามารถดาวน์โหลดโมเดลได้สูงสุด 3 โมเดลในเวลาเดียวกัน โปรดลองอีกครั้งในภายหลัง",
"May": "พฤษภาคม",
"Memories accessible by LLMs will be shown here.": "",
"Memory": "ความจำ",
"Memory added successfully": "เพิ่มโมเดลสำเร็จ",
"Memory cleared successfully": "ล้าง",
"Memory deleted successfully": "ลบโมเดลสำเร็จ",
"Memory updated successfully": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "ข้อความที่คุณส่งหลังจากสร้างลิงก์ของคุณแล้วจะไม่ถูกแชร์ ผู้ใช้ที่มี URL จะสามารถดูแชทที่แชร์ได้",
"Min P": "",
"Minimum Score": "คะแนนขั้นต่ำ",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
"Mirostat Tau": "Mirostat Tau",
"MMMM DD, YYYY": "MMMM DD, YYYY",
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
"MMMM DD, YYYY hh:mm:ss A": "MMMM DD, YYYY hh:mm:ss A",
"Model '{{modelName}}' has been successfully downloaded.": "โมเดล '{{modelName}}' ถูกดาวน์โหลดเรียบร้อยแล้ว",
"Model '{{modelTag}}' is already in queue for downloading.": "โมเดล '{{modelTag}}' กำลังอยู่ในคิวสำหรับการดาวน์โหลด",
"Model {{modelId}} not found": "ไม่พบโมเดล {{modelId}}",
"Model {{modelName}} is not vision capable": "โมเดล {{modelName}} ไม่มีคุณสมบัติวิสชั่น",
"Model {{name}} is now {{status}}": "โมเดล {{name}} ขณะนี้ {{status}}",
"Model created successfully!": "สร้างโมเดลสำเร็จ!",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "ตรวจพบเส้นทางระบบไฟล์ของโมเดล ต้องการชื่อย่อของโมเดลสำหรับการอัปเดต ไม่สามารถดำเนินการต่อได้",
"Model ID": "รหัสโมเดล",
"Model not selected": "ยังไม่ได้เลือกโมเดล",
"Model Params": "พารามิเตอร์ของโมเดล",
"Model updated successfully": "อัปเดตโมเดลเรียบร้อยแล้ว",
"Model Whitelisting": "การอนุญาตโมเดล",
"Model(s) Whitelisted": "โมเดลที่ได้รับอนุญาต",
"Modelfile Content": "เนื้อหาของไฟล์โมเดล",
"Models": "โมเดล",
"More": "เพิ่มเติม",
"Name": "ชื่อ",
"Name Tag": "ป้ายชื่อ",
"Name your model": "ตั้งชื่อโมเดลของคุณ",
"New Chat": "แชทใหม่",
"New Password": "รหัสผ่านใหม่",
"No content to speak": "ไม่มีเนื้อหาที่จะพูด",
"No documents found": "ไม่พบเอกสาร",
"No file selected": "ไม่ได้เลือกไฟล์",
"No results found": "ไม่มีผลลัพธ์",
"No search query generated": "ไม่มีการสร้างคำค้นหา",
"No source available": "ไม่มีแหล่งข้อมูล",
"No valves to update": "ไม่มีวาล์วที่จะอัปเดต",
"None": "ไม่มี",
"Not factually correct": "ไม่ถูกต้องตามข้อเท็จจริง",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "หมายเหตุ: หากคุณตั้งค่าคะแนนขั้นต่ำ การค้นหาจะคืนเอกสารที่มีคะแนนมากกว่าหรือเท่ากับคะแนนขั้นต่ำเท่านั้น",
"Notifications": "การแจ้งเตือน",
"November": "พฤศจิกายน",
"num_thread (Ollama)": "num_thread (Ollama)",
"OAuth ID": "OAuth ID",
"October": "ตุลาคม",
"Off": "ปิด",
"Okay, Let's Go!": "ตกลง ไปกัน!",
"OLED Dark": "OLED โหมดมื",
"Ollama": "Ollama",
"Ollama API": "Ollama API",
"Ollama API disabled": "ปิด Ollama API",
"Ollama API is disabled": "Ollama API ถูกปิดใช้งาน",
"Ollama Version": "เวอร์ชั่น Ollama",
"On": "เปิด",
"Only": "เท่านั้น",
"Only alphanumeric characters and hyphens are allowed in the command string.": "อนุญาตให้ใช้เฉพาะอักขระตัวอักษรและตัวเลข รวมถึงเครื่องหมายขีดกลางในสตริงคำสั่งเท่านั้น",
"Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "อุ๊บส์! ช้าก่อน! ไฟล์ของคุณยังอยู่ในขั้นตอนการประมวลผล เรากำลังจัดการให้สมบูรณ์แบบ โปรดอดทนสักครู่ แล้วเราจะแจ้งให้คุณทราบเมื่อไฟล์พร้อมแล้ว",
"Oops! Looks like the URL is invalid. Please double-check and try again.": "อุ๊บส์! ดูเหมือนว่า URL ไม่ถูกต้อง กรุณาตรวจสอบและลองใหม่อีกครั้ง",
"Oops! There was an error in the previous response. Please try again or contact admin.": "อุ๊บส์! มีข้อผิดพลาดในคำตอบก่อนหน้า กรุณาลองใหม่อีกครั้งหรือติดต่อผู้ดูแลระบบ",
"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "อุ๊บส์! คุณกำลังใช้วิธีที่ไม่รองรับ (เฉพาะเว็บส่วนหน้า) กรุณาให้บริการ WebUI จากเว็บส่วนแบ็กเอนด์",
"Open AI (Dall-E)": "Open AI (Dall-E)",
"Open new chat": "เปิดแชทใหม่",
"Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "เวอร์ชั่น Open WebUI (v{{OPEN_WEBUI_VERSION}}) ต่ำกว่าเวอร์ชั่นที่ต้องการ (v{{REQUIRED_VERSION}})",
"OpenAI": "OpenAI",
"OpenAI API": "OpenAI API",
"OpenAI API Config": "การตั้งค่า OpenAI API",
"OpenAI API Key is required.": "จำเป็นต้องใช้คีย์ OpenAI API",
"OpenAI URL/Key required.": "จำเป็นต้องใช้ URL/คีย์ OpenAI",
"or": "หรือ",
"Other": "อื่น ๆ",
"Password": "รหัสผ่าน",
"PDF document (.pdf)": "เอกสาร PDF (.pdf)",
"PDF Extract Images (OCR)": "การแยกรูปภาพจาก PDF (OCR)",
"pending": "รอดำเนินการ",
"Permission denied when accessing media devices": "ถูกปฏิเสธเมื่อเข้าถึงอุปกรณ์",
"Permission denied when accessing microphone": "ถูกปฏิเสธเมื่อเข้าถึงไมโครโฟน",
"Permission denied when accessing microphone: {{error}}": "การอนุญาตถูกปฏิเสธเมื่อเข้าถึงไมโครโฟน: {{error}}",
"Personalization": "การปรับแต่ง",
"Pin": "ปักหมุด",
"Pinned": "ปักหมุดแล้ว",
"Pipeline deleted successfully": "ลบไปป์ไลน์เรียบร้อยแล้ว",
"Pipeline downloaded successfully": "ดาวน์โหลดไปป์ไลน์เรียบร้อยแล้ว",
"Pipelines": "ไปป์ไลน์",
"Pipelines Not Detected": "ไม่พบไปป์ไลน์",
"Pipelines Valves": "วาล์วของไปป์ไลน์",
"Plain text (.txt)": "ไฟล์ข้อความ (.txt)",
"Playground": "สนามทดสอบ",
"Please carefully review the following warnings:": "โปรดตรวจสอบคำเตือนต่อไปนี้อย่างละเอียด:",
"Positive attitude": "ทัศนคติด้านบวก",
"Previous 30 days": "30 วันที่ผ่านมา",
"Previous 7 days": "7 วันที่ผ่านมา",
"Profile Image": "รูปโปรไฟล์",
"Prompt": "พรอมต์",
"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "พรอมต์ (เช่น บอกข้อเท็จจริงที่น่าสนุกเกี่ยวกับจักรวรรดิโรมัน)",
"Prompt Content": "เนื้อหาพรอมต์",
"Prompt suggestions": "",
"Prompts": "พรอมต์",
"Pull \"{{searchValue}}\" from Ollama.com": "",
"Pull a model from Ollama.com": "",
"Query Params": "พารามิเตอร์การค้นหา",
"RAG Template": "แม่แบบ RAG",
"Read Aloud": "อ่านออกเสียง",
"Record voice": "บันทึกเสียง",
"Redirecting you to OpenWebUI Community": "กำลังเปลี่ยนเส้นทางคุณไปยังชุมชน OpenWebUI",
"Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "เรียกตัวเองว่า \"ผู้ใช้\" (เช่น \"ผู้ใช้กำลังเรียนภาษาสเปน\")",
"Refused when it shouldn't have": "ปฏิเสธเมื่อไม่ควรทำ",
"Regenerate": "สร้างใหม่",
"Release Notes": "บันทึกรุ่น",
"Remove": "ลบ",
"Remove Model": "ลบโมเดล",
"Rename": "เปลี่ยนชื่อ",
"Repeat Last N": "ทำซ้ำครั้งล่าสุด N",
"Request Mode": "โหมดคำขอ",
"Reranking Model": "จัดอันดับใหม่โมเดล",
"Reranking model disabled": "ปิดการใช้งานโมเดลการจัดอันดับใหม่",
"Reranking model set to \"{{reranking_model}}\"": "ตั้งค่าโมเดลการจัดอันดับใหม่เป็น \"{{reranking_model}}\"",
"Reset": "รีเซ็ต",
"Reset Upload Directory": "รีเซ็ตไดเร็กทอรีการอัปโหลด",
"Reset Vector Storage": "รีเซ็ตการจัดเก็บเวกเตอร์",
"Response AutoCopy to Clipboard": "ตอบสนองการคัดลอกอัตโนมัติไปยังคลิปบอร์ด",
"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "ไม่สามารถเปิดการแจ้งเตือนการตอบสนองได้เนื่องจากเว็บไซต์ปฏิเสธ กรุณาเข้าการตั้งค่าเบราว์เซอร์ของคุณเพื่อให้สิทธิ์การเข้าถึงที่จำเป็น",
"Role": "บทบาท",
"Rosé Pine": "Rosé Pine",
"Rosé Pine Dawn": "Rosé Pine Dawn",
"RTL": "RTL",
"Run Llama 2, Code Llama, and other models. Customize and create your own.": "รัน Llama 2, Code Llama และโมเดลอื่นๆ ปรับแต่งและสร้างของคุณเอง",
"Running": "กำลังทำงาน",
"Save": "บันทึก",
"Save & Create": "บันทึกและสร้าง",
"Save & Update": "บันทึกและอัปเดต",
"Save Tag": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "การบันทึกบันทึกการสนทนาโดยตรงไปยังที่จัดเก็บในเบราว์เซอร์ของคุณไม่ได้รับการสนับสนุนอีกต่อไป โปรดสละเวลาสักครู่เพื่อดาวน์โหลดและลบบันทึกการสนทนาของคุณโดยคลิกที่ปุ่มด้านล่าง ไม่ต้องกังวล คุณสามารถนำเข้าบันทึกการสนทนาของคุณกลับไปยังส่วนแบ็กเอนด์ได้อย่างง่ายดายผ่าน",
"Scan": "สแกน",
"Scan complete!": "การสแกนเสร็จสมบูรณ์!",
"Scan for documents from {{path}}": "สแกนหาเอกสารจาก {{path}}",
"Search": "ค้นหา",
"Search a model": "ค้นหาโมเดล",
"Search Chats": "ค้นหาแชท",
"Search Documents": "ค้นหาเอกสาร",
"Search Functions": "ค้นหาฟังก์ชัน",
"Search Models": "ค้นหาโมเดล",
"Search Prompts": "ค้นหาพรอมต์",
"Search Query Generation Prompt": "พรอมต์การสร้างคำค้นหา",
"Search Query Generation Prompt Length Threshold": "เกณฑ์ความยาวของพรอมต์การสร้างคำค้นหา",
"Search Result Count": "จำนวนผลลัพธ์การค้นหา",
"Search Tools": "เครื่องมือค้นหา",
"Searched {{count}} sites_one": "ค้นหา {{count}} เว็บไซต์",
"Searched {{count}} sites_other": "ค้นหา {{count}} เว็บไซต์",
"Searching \"{{searchQuery}}\"": "กำลังค้นหา \"{{searchQuery}}\"",
"Searxng Query URL": "URL คำค้นหา",
"See readme.md for instructions": "ดู readme.md สำหรับคำแนะนำ",
"See what's new": "ดูสิ่งที่ใหม่",
"Seed": "Seed",
"Select a base model": "เลือกโมเดลฐาน",
"Select a engine": "เลือกเอนจิน",
"Select a function": "เลือกฟังก์ชัน",
"Select a mode": "เลือกโหมด",
"Select a model": "เลือกโมเดล",
"Select a pipeline": "เลือกไปป์ไลน์",
"Select a pipeline url": "เลือก URL ไปป์ไลน์",
"Select a tool": "เลือกเครื่องมือ",
"Select an Ollama instance": "เลือกอินสแตนซ์ Ollama",
"Select Documents": "เลือกเอกสาร",
"Select model": "เลือกโมเดล",
"Select only one model to call": "เลือกเพียงโมเดลเดียวที่จะใช้",
"Selected model(s) do not support image inputs": "โมเดลที่เลือกไม่รองรับภาพ",
"Send": "ส่ง",
"Send a Message": "ส่งข้อความ",
"Send message": "ส่งข้อความ",
"September": "กันยายน",
"Serper API Key": "คีย์ API ของ Serper",
"Serply API Key": "คีย์ API ของ Serply",
"Serpstack API Key": "คีย์ API ของ Serpstack",
"Server connection verified": "ยืนยันการเชื่อมต่อเซิร์ฟเวอร์แล้ว",
"Set as default": "ตั้งเป็นค่าเริ่มต้น",
"Set Default Model": "ตั้งโมเดลเริ่มต้น",
"Set embedding model (e.g. {{model}})": "ตั้งค่าโมเดลการฝัง (เช่น {{model}})",
"Set Image Size": "ตั้งค่าขนาดภาพ",
"Set reranking model (e.g. {{model}})": "ตั้งค่าโมเดลการจัดอันดับใหม่ (เช่น {{model}})",
"Set Steps": "ตั้งค่าขั้นตอน",
"Set Task Model": "ตั้งค่าโมเดลงาน",
"Set Voice": "ตั้งค่าเสียง",
"Settings": "การตั้งค่า",
"Settings saved successfully!": "บันทึกการตั้งค่าเรียบร้อยแล้ว!",
"Settings updated successfully": "อัปเดตการตั้งค่าเรียบร้อยแล้ว",
"Share": "แชร์",
"Share Chat": "แชร์แชท",
"Share to OpenWebUI Community": "แชร์ไปยังชุมชน OpenWebUI",
"short-summary": "สรุปสั้นๆ",
"Show": "แสดง",
"Show Admin Details in Account Pending Overlay": "แสดงรายละเอียดผู้ดูแลระบบในหน้าจอรอการอนุมัติบัญชี",
"Show Model": "แสดงโมเดล",
"Show shortcuts": "แสดงทางลัด",
"Show your support!": "แสดงการสนับสนุนของคุณ!",
"Showcased creativity": "แสดงความคิดสร้างสรรค์",
"Sign in": "ลงชื่อเข้าใช้",
"Sign Out": "ลงชื่อออก",
"Sign up": "สมัครสมาชิก",
"Signing in": "กำลังลงชื่อเข้าใช้",
"Source": "แหล่งที่มา",
"Speech recognition error: {{error}}": "ข้อผิดพลาดในการรู้จำเสียง: {{error}}",
"Speech-to-Text Engine": "เครื่องมือแปลงเสียงเป็นข้อความ",
"Stop Sequence": "หยุดลำดับ",
"STT Model": "โมเดลแปลงเสียงเป็นข้อความ",
"STT Settings": "การตั้งค่าแปลงเสียงเป็นข้อความ",
"Submit": "ส่ง",
"Subtitle (e.g. about the Roman Empire)": "คำบรรยาย (เช่น เกี่ยวกับจักรวรรดิโรมัน)",
"Success": "สำเร็จ",
"Successfully updated.": "อัปเดตเรียบร้อยแล้ว",
"Suggested": "แนะนำ",
"Support": "สนับสนุน",
"Support this plugin:": "สนับสนุนปลั๊กอินนี้:",
"System": "ระบบ",
"System Prompt": "ระบบพรอมต์",
"Tags": "ป้ายชื่อ",
"Tap to interrupt": "แตะเพื่อขัดจังหวะ",
"Tavily API Key": "คีย์ API ของ Tavily",
"Tell us more:": "บอกเรามากขึ้น:",
"Temperature": "อุณหภูมิ",
"Template": "แม่แบบ",
"Text Completion": "การเติมข้อความ",
"Text-to-Speech Engine": "เครื่องมือแปลงข้อความเป็นเสียง",
"Tfs Z": "Tfs Z",
"Thanks for your feedback!": "ขอบคุณสำหรับความคิดเห็นของคุณ!",
"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "นักพัฒนาที่อยู่เบื้องหลังปลั๊กอินนี้เป็นอาสาสมัครที่มีชื่นชอบการแบ่งบัน หากคุณพบว่าปลั๊กอินนี้มีประโยชน์ โปรดพิจารณาสนับสนุนการพัฒนาของเขา",
"The score should be a value between 0.0 (0%) and 1.0 (100%).": "คะแนนควรอยู่ระหว่าง 0.0 (0%) ถึง 1.0 (100%)",
"Theme": "ธีม",
"Thinking...": "กำลังคิด...",
"This action cannot be undone. Do you wish to continue?": "การกระทำนี้ไม่สามารถย้อนกลับได้ คุณต้องการดำเนินการต่อหรือไม่?",
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "สิ่งนี้ทำให้มั่นใจได้ว่าการสนทนาที่มีค่าของคุณจะถูกบันทึกอย่างปลอดภัยในฐานข้อมูลแบ็กเอนด์ของคุณ ขอบคุณ!",
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "นี่เป็นฟีเจอร์ทดลอง อาจไม่ทำงานตามที่คาดไว้และอาจมีการเปลี่ยนแปลงได้ตลอดเวลา",
"This setting does not sync across browsers or devices.": "การตั้งค่านี้ไม่ซิงค์ข้ามเบราว์เซอร์หรืออุปกรณ์",
"This will delete": "สิ่งนี้จะลบ",
"Thorough explanation": "คำอธิบายอย่างละเอียด",
"Tika": "Tika",
"Tika Server URL required.": "จำเป็นต้องมี URL ของเซิร์ฟเวอร์ Tika",
"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "เคล็ดลับ: อัปเดตช่องตัวแปรหลายช่องติดต่อกันโดยการกดปุ่มแท็บในช่องใส่ข้อความแชทหลังจากแต่ละการแทนที่",
"Title": "ชื่อเรื่อง",
"Title (e.g. Tell me a fun fact)": "ชื่อเรื่อง (เช่น บอกข้อเท็จจริงที่น่าสนุก)",
"Title Auto-Generation": "การสร้างชื่ออัตโนมัติ",
"Title cannot be an empty string.": "ชื่อเรื่องไม่สามารถเป็นสตริงว่างได้",
"Title Generation Prompt": "พรอมต์การสร้างชื่อเรื่อง",
"to": " ",
"To access the available model names for downloading,": "ในการเข้าถึงชื่อโมเดลที่มีให้ดาวน์โหลด",
"To access the GGUF models available for downloading,": "ในการเข้าถึงโมเดล GGUF ที่มีให้ดาวน์โหลด",
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "ในการเข้าถึง WebUI โปรดติดต่อผู้ดูแลระบบ ผู้ดูแลระบบสามารถจัดการสถานะผู้ใช้จากแผงควบคุมผู้ดูแลระบบ",
"To add documents here, upload them to the \"Documents\" workspace first.": "ในการเพิ่มเอกสารที่นี่ อัปโหลดไปยังพื้นที่ทำงาน \"เอกสาร\" ก่อน",
"to chat input.": "ไปยังช่องใส่ข้อความแชท",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "ในการเลือกฟิลเตอร์ที่นี่ ให้เพิ่มไปยังพื้นที่ทำงาน \"ฟังก์ชัน\" ก่อน",
"To select toolkits here, add them to the \"Tools\" workspace first.": "ในการเลือกชุดเครื่องมือที่นี่ ให้เพิ่มไปยังพื้นที่ทำงาน \"เครื่องมือ\" ก่อน",
"Today": "วันนี้",
"Toggle settings": "สลับการตั้งค่า",
"Toggle sidebar": "สลับแถบด้านข้าง",
"Tokens To Keep On Context Refresh (num_keep)": "โทเค็นที่เก็บไว้เมื่อรีเฟรชบริบท (num_keep)",
"Tool created successfully": "สร้างเครื่องมือเรียบร้อยแล้ว",
"Tool deleted successfully": "ลบเครื่องมือเรียบร้อยแล้ว",
"Tool imported successfully": "นำเข้าเครื่องมือเรียบร้อยแล้ว",
"Tool updated successfully": "อัปเดตเครื่องมือเรียบร้อยแล้ว",
"Toolkit Description (e.g. A toolkit for performing various operations)": "คำอธิบายชุดเครื่องมือ (เช่น ชุดเครื่องมือสำหรับการดำเนินการต่างๆ)",
"Toolkit ID (e.g. my_toolkit)": "ID ชุดเครื่องมือ (เช่น my_toolkit)",
"Toolkit Name (e.g. My ToolKit)": "ชื่อชุดเครื่องมือ (เช่น My ToolKit)",
"Tools": "เครื่องมือ",
"Tools are a function calling system with arbitrary code execution": "เครื่องมือคือระบบการเรียกใช้ฟังก์ชันที่สามารถดำเนินการโค้ดใดๆ ได้",
"Tools have a function calling system that allows arbitrary code execution": "เครื่องมือมีระบบการเรียกใช้ฟังก์ชันที่สามารถดำเนินการโค้ดใดๆ ได้",
"Tools have a function calling system that allows arbitrary code execution.": "เครื่องมือมีระบบการเรียกใช้ฟังก์ชันที่สามารถดำเนินการโค้ดใดๆ ได้",
"Top K": "Top K",
"Top P": "Top P",
"Trouble accessing Ollama?": "มีปัญหาในการเข้าถึง Ollama?",
"TTS Model": "โมเดลแปลงข้อความเป็นเสียง",
"TTS Settings": "การตั้งค่าแปลงข้อความเป็นเสียง",
"TTS Voice": "เสียงแปลงข้อความเป็นเสียง",
"Type": "ประเภท",
"Type Hugging Face Resolve (Download) URL": "พิมพ์ URL ของ Hugging Face Resolve (Download)",
"Uh-oh! There was an issue connecting to {{provider}}.": "อุ๊ย! มีปัญหาในการเชื่อมต่อกับ {{provider}}",
"UI": "ส่วนติดต่อผู้ใช้",
"Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "ไม่ทราบประเภทไฟล์ '{{file_type}}' ดำเนินการอัปโหลดไฟล์ต่อไป",
"Unpin": "ยกเลิกการปักหมุด",
"Update": "อัปเดต",
"Update and Copy Link": "อัปเดตและคัดลอกลิงก์",
"Update password": "อัปเดตรหัสผ่าน",
"Updated at": "อัปเดตเมื่อ",
"Upload": "อัปโหลด",
"Upload a GGUF model": "อัปโหลดโมเดล GGUF",
"Upload Files": "อัปโหลดไฟล์",
"Upload Pipeline": "อัปโหลดพายป์ไลน์",
"Upload Progress": "ความคืบหน้าการอัปโหลด",
"URL Mode": "โหมด URL",
"Use '#' in the prompt input to load and select your documents.": "ใช้ '#' ในการใส่พรอมต์เพื่อโหลดและเลือกเอกสารของคุณ",
"Use Gravatar": "ใช้ Gravatar",
"Use Initials": "ใช้ตัวย่อ",
"use_mlock (Ollama)": "use_mlock (Ollama)",
"use_mmap (Ollama)": "use_mmap (Ollama)",
"user": "ผู้ใช้",
"User location successfully retrieved.": "ดึงตำแหน่งที่ตั้งของผู้ใช้เรียบร้อยแล้ว",
"User Permissions": "สิทธิ์ของผู้ใช้",
"Users": "ผู้ใช้",
"Utilize": "ใช้",
"Valid time units:": "หน่วยเวลาใช้ได้:",
"Valves": "วาล์ว",
"Valves updated": "วาล์วที่อัปเดตแล้ว",
"Valves updated successfully": "อัปเดตวาล์วเรียบร้อยแล้ว",
"variable": "ตัวแปร",
"variable to have them replaced with clipboard content.": "ตัวแปรเพื่อให้แทนที่ด้วยเนื้อหาคลิปบอร์ด",
"Version": "เวอร์ชัน",
"Voice": "เสียง",
"Warning": "คำเตือน",
"Warning:": "คำเตือน:",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "คำเตือน: หากคุณอัปเดตหรือเปลี่ยนโมเดลการฝัง คุณจะต้องนำเข้าเอกสารทั้งหมดอีกครั้ง",
"Web": "เว็บ",
"Web API": "เว็บ API",
"Web Loader Settings": "การตั้งค่าเว็บโหลดเดอร์",
"Web Params": "พารามิเตอร์เว็บ",
"Web Search": "การค้นหาเว็บ",
"Web Search Engine": "เครื่องมือค้นหาเว็บ",
"Webhook URL": "URL ของ Webhook",
"WebUI Settings": "การตั้งค่า WebUI",
"WebUI will make requests to": "WebUI จะทำการร้องขอไปที่",
"Whats New in": "มีอะไรใหม่ใน",
"When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "เมื่อปิดประวัติการใช้งาน แชทใหม่ในเบราว์เซอร์นี้จะไม่ปรากฏในประวัติของคุณในอุปกรณ์ใด ๆ",
"Whisper (Local)": "Whisper (โลคอล)",
"Widescreen Mode": "โหมดหน้าจอกว้าง",
"Workspace": "พื้นที่ทำงาน",
"Write a prompt suggestion (e.g. Who are you?)": "เขียนคำแนะนำพรอมต์ (เช่น คุณคือใคร?)",
"Write a summary in 50 words that summarizes [topic or keyword].": "เขียนสรุปใน 50 คำที่สรุป [หัวข้อหรือคำสำคัญ]",
"Yesterday": "เมื่อวาน",
"You": "คุณ",
"You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "คุณสามารถปรับแต่งการโต้ตอบของคุณกับ LLMs โดยเพิ่มความทรงจำผ่านปุ่ม 'จัดการ' ด้านล่าง ทำให้มันมีประโยชน์และเหมาะกับคุณมากขึ้น",
"You cannot clone a base model": "คุณไม่สามารถโคลนโมเดลฐานได้",
"You have no archived conversations.": "คุณไม่มีการสนทนาที่เก็บถาวร",
"You have shared this chat": "คุณได้แชร์แชทนี้แล้ว",
"You're a helpful assistant.": "คุณคือผู้ช่วยที่มีประโยชน์",
"You're now logged in.": "คุณเข้าสู่ระบบแล้ว",
"Your account status is currently pending activation.": "สถานะบัญชีของคุณกำลังรอการเปิดใช้งาน",
"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "การสนับสนุนทั้งหมดของคุณจะไปยังนักพัฒนาปลั๊กอินโดยตรง; Open WebUI ไม่รับส่วนแบ่งใด ๆ อย่างไรก็ตาม แพลตฟอร์มการระดมทุนที่เลือกอาจมีค่าธรรมเนียมของตัวเอง",
"Youtube": "Youtube",
"Youtube Loader Settings": "การตั้งค่าโหลดเดอร์ Youtube"
}

View File

@ -15,6 +15,7 @@
"Account": "",
"Account Activation Pending": "",
"Accurate information": "",
"Actions": "",
"Active Users": "",
"Add": "",
"Add a model id": "",
@ -27,6 +28,7 @@
"Add Memory": "",
"Add message": "",
"Add Model": "",
"Add Tag": "",
"Add Tags": "",
"Add User": "",
"Adjusting these settings will apply changes universally to all users.": "",
@ -168,6 +170,7 @@
"Delete chat": "",
"Delete Chat": "",
"Delete chat?": "",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "",
@ -211,6 +214,7 @@
"Edit Doc": "",
"Edit Memory": "",
"Edit User": "",
"ElevenLabs": "",
"Email": "",
"Embedding Batch Size": "",
"Embedding Model": "",
@ -360,7 +364,6 @@
"Manage Models": "",
"Manage Ollama Models": "",
"Manage Pipelines": "",
"Manage Valves": "",
"March": "",
"Max Tokens (num_predict)": "",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "",
"Min P": "",
"Minimum Score": "",
"Mirostat": "",
"Mirostat Eta": "",
@ -500,6 +504,7 @@
"Save": "",
"Save & Create": "",
"Save & Update": "",
"Save Tag": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "",
"Scan": "",
"Scan complete!": "",
@ -617,6 +622,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
"To add documents here, upload them to the \"Documents\" workspace first.": "",
"to chat input.": "",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "",

View File

@ -15,6 +15,7 @@
"Account": "Hesap",
"Account Activation Pending": "Hesap Aktivasyonu Bekleniyor",
"Accurate information": "Doğru bilgi",
"Actions": "",
"Active Users": "Aktif Kullanıcılar",
"Add": "Ekle",
"Add a model id": "Model id ekle",
@ -27,6 +28,7 @@
"Add Memory": "Bellek Ekle",
"Add message": "Mesaj ekle",
"Add Model": "Model Ekle",
"Add Tag": "",
"Add Tags": "Etiketler ekle",
"Add User": "Kullanıcı Ekle",
"Adjusting these settings will apply changes universally to all users.": "Bu ayarları ayarlamak değişiklikleri tüm kullanıcılara evrensel olarak uygular.",
@ -168,6 +170,7 @@
"Delete chat": "Sohbeti sil",
"Delete Chat": "Sohbeti Sil",
"Delete chat?": "Sohbeti sil?",
"Delete Doc": "",
"Delete function?": "Fonksiyonu sil?",
"Delete prompt?": "Promptu sil?",
"delete this link": "bu bağlantıyı sil",
@ -211,6 +214,7 @@
"Edit Doc": "Belgeyi Düzenle",
"Edit Memory": "Belleği Düzenle",
"Edit User": "Kullanıcıyı Düzenle",
"ElevenLabs": "",
"Email": "E-posta",
"Embedding Batch Size": "Gömme Yığın Boyutu",
"Embedding Model": "Gömme Modeli",
@ -360,7 +364,6 @@
"Manage Models": "Modelleri Yönet",
"Manage Ollama Models": "Ollama Modellerini Yönet",
"Manage Pipelines": "Pipelineları Yönet",
"Manage Valves": "Valvleri Yönet",
"March": "Mart",
"Max Tokens (num_predict)": "Maksimum Token (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Aynı anda en fazla 3 model indirilebilir. Lütfen daha sonra tekrar deneyin.",
@ -372,6 +375,7 @@
"Memory deleted successfully": "Bellek başarıyla silindi",
"Memory updated successfully": "Bellek başarıyla güncellendi",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Bağlantınızı oluşturduktan sonra gönderdiğiniz mesajlar paylaşılmayacaktır. URL'ye sahip kullanıcılar paylaşılan sohbeti görüntüleyebilecektir.",
"Min P": "",
"Minimum Score": "Minimum Skor",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -500,6 +504,7 @@
"Save": "Kaydet",
"Save & Create": "Kaydet ve Oluştur",
"Save & Update": "Kaydet ve Güncelle",
"Save Tag": "",
"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": "Sohbet kayıtlarının doğrudan tarayıcınızın depolama alanına kaydedilmesi artık desteklenmemektedir. Lütfen aşağıdaki butona tıklayarak sohbet kayıtlarınızı indirmek ve silmek için bir dakikanızı ayırın. Endişelenmeyin, sohbet günlüklerinizi arkayüze kolayca yeniden aktarabilirsiniz:",
"Scan": "Tarama",
"Scan complete!": "Tarama tamamlandı!",
@ -617,6 +622,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "WebUI'ye erişmek için lütfen yöneticiyle iletişime geçin. Yöneticiler kullanıcı durumlarını Yönetici Panelinden yönetebilir.",
"To add documents here, upload them to the \"Documents\" workspace first.": "Buraya belge eklemek için öncelikle bunları \"Belgeler\" çalışma alanına yükleyin.",
"to chat input.": "sohbet girişine.",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "Filtreleri burada seçmek için öncelikle bunları \"İşlevler\" çalışma alanına ekleyin.",
"To select toolkits here, add them to the \"Tools\" workspace first.": "Araçları burada seçmek için öncelikle bunları \"Araçlar\" çalışma alanına ekleyin.",
"Today": "Bugün",

View File

@ -15,6 +15,7 @@
"Account": "Обліковий запис",
"Account Activation Pending": "Очікування активації облікового запису",
"Accurate information": "Точна інформація",
"Actions": "Дії",
"Active Users": "Активні користувачі",
"Add": "Додати",
"Add a model id": "Додайте id моделі",
@ -27,7 +28,8 @@
"Add Memory": "Додати пам'ять",
"Add message": "Додати повідомлення",
"Add Model": "Додати модель",
"Add Tags": "додати теги",
"Add Tag": "Додати тег",
"Add Tags": "Додати теги",
"Add User": "Додати користувача",
"Adjusting these settings will apply changes universally to all users.": "Зміни в цих налаштуваннях будуть застосовані для всіх користувачів.",
"admin": "адмін",
@ -168,6 +170,7 @@
"Delete chat": "Видалити чат",
"Delete Chat": "Видалити чат",
"Delete chat?": "Видалити чат?",
"Delete Doc": "Видалити док",
"Delete function?": "Видалити функцію?",
"Delete prompt?": "Видалити промт?",
"delete this link": "видалити це посилання",
@ -211,7 +214,8 @@
"Edit Doc": "Редагувати документ",
"Edit Memory": "Редагувати пам'ять",
"Edit User": "Редагувати користувача",
"Email": "Електронна пошта",
"ElevenLabs": "ElevenLabs",
"Email": "Ел. пошта",
"Embedding Batch Size": "Розмір пакету під час вбудовування",
"Embedding Model": "Модель вбудовування",
"Embedding Model Engine": "Рушій моделі вбудовування ",
@ -248,7 +252,7 @@
"Enter Top K": "Введіть Top K",
"Enter URL (e.g. http://127.0.0.1:7860/)": "Введіть URL-адресу (напр., http://127.0.0.1:7860/)",
"Enter URL (e.g. http://localhost:11434)": "Введіть URL-адресу (напр., http://localhost:11434)",
"Enter Your Email": "Введіть вашу електронну пошту",
"Enter Your Email": "Введіть вашу ел. пошту",
"Enter Your Full Name": "Введіть ваше ім'я",
"Enter your message": "Введіть повідомлення ",
"Enter Your Password": "Введіть ваш пароль",
@ -274,7 +278,7 @@
"File": "Файл",
"File Mode": "Файловий режим",
"File not found.": "Файл не знайдено.",
"Files": "",
"Files": "Файли",
"Filter is now globally disabled": "Фільтр глобально вимкнено",
"Filter is now globally enabled": "Фільтр увімкнено глобально",
"Filters": "Фільтри",
@ -360,7 +364,6 @@
"Manage Models": "Керування моделями",
"Manage Ollama Models": "Керування моделями Ollama",
"Manage Pipelines": "Керування конвеєрами",
"Manage Valves": "Керування клапанами",
"March": "Березень",
"Max Tokens (num_predict)": "Макс токенів (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Максимум 3 моделі можна завантажити одночасно. Будь ласка, спробуйте пізніше.",
@ -372,6 +375,7 @@
"Memory deleted successfully": "Пам'ять успішно видалено",
"Memory updated successfully": "Пам'ять успішно оновлено",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Повідомлення, які ви надішлете після створення посилання, не будуть доступні для інших. Користувачі, які мають URL, зможуть переглядати спільний чат.",
"Min P": "",
"Minimum Score": "Мінімальний бал",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -500,6 +504,7 @@
"Save": "Зберегти",
"Save & Create": "Зберегти та створити",
"Save & Update": "Зберегти та оновити",
"Save Tag": "Зберегти тег",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Збереження журналів чату безпосередньо в сховище вашого браузера більше не підтримується. Будь ласка, завантажте та видаліть журнали чату, натиснувши кнопку нижче. Не хвилюйтеся, ви можете легко повторно імпортувати журнали чату до бекенду через",
"Scan": "Сканування",
"Scan complete!": "Сканування завершено!",
@ -619,6 +624,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Щоб отримати доступ до веб-інтерфейсу, зверніться до адміністратора. Адміністратори можуть керувати статусами користувачів з Панелі адміністратора.",
"To add documents here, upload them to the \"Documents\" workspace first.": "Щоб додати документи сюди, спочатку завантажте їх до робочої області \"Документи\".",
"to chat input.": "в чаті.",
"To select actions here, add them to the \"Functions\" workspace first.": "Щоб вибрати дії тут, спочатку додайте їх до робочої області \"Функції\".",
"To select filters here, add them to the \"Functions\" workspace first.": "Щоб обрати фільтри тут, спочатку додайте їх до робочої області \"Функції\".",
"To select toolkits here, add them to the \"Tools\" workspace first.": "Щоб обрати тут набори інструментів, спочатку додайте їх до робочої області \"Інструменти\".",
"Today": "Сьогодні",

View File

@ -15,6 +15,7 @@
"Account": "Tài khoản",
"Account Activation Pending": "Tài khoản đang chờ kích hoạt",
"Accurate information": "Thông tin chính xác",
"Actions": "Tác vụ",
"Active Users": "Người dùng đang hoạt động",
"Add": "Thêm",
"Add a model id": "Thêm model id",
@ -27,6 +28,7 @@
"Add Memory": "Thêm bộ nhớ",
"Add message": "Thêm tin nhắn",
"Add Model": "Thêm model",
"Add Tag": "Thêm thẻ",
"Add Tags": "thêm thẻ",
"Add User": "Thêm người dùng",
"Adjusting these settings will apply changes universally to all users.": "Các thay đổi cài đặt này sẽ áp dụng cho tất cả người sử dụng.",
@ -34,7 +36,7 @@
"Admin": "Quản trị",
"Admin Panel": "Trang Quản trị",
"Admin Settings": "Cài đặt hệ thống",
"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Quản trị viên luôn có quyền truy cập vào tất cả các tool; người dùng cần các tools được chỉ định cho mỗi mô hình trong workspace.",
"Advanced Parameters": "Các tham số Nâng cao",
"Advanced Params": "Các tham số Nâng cao",
"all": "tất cả",
@ -111,7 +113,7 @@
"Click here to select documents.": "Bấm vào đây để chọn tài liệu.",
"click here.": "bấm vào đây.",
"Click on the user role button to change a user's role.": "Bấm vào nút trong cột VAI TRÒ để thay đổi quyền của người sử dụng.",
"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "",
"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Quyền ghi vào clipboard bị từ chối. Vui lòng kiểm tra cài đặt trên trình duyệt của bạn để được cấp quyền truy cập cần thiết.",
"Clone": "Nhân bản",
"Close": "Đóng",
"Code formatted successfully": "Mã được định dạng thành công",
@ -168,6 +170,7 @@
"Delete chat": "Xóa nội dung chat",
"Delete Chat": "Xóa chat",
"Delete chat?": "Xóa chat?",
"Delete Doc": "Xóa tài liệu",
"Delete function?": "Xóa function?",
"Delete prompt?": "Xóa prompt?",
"delete this link": "Xóa link này",
@ -177,20 +180,20 @@
"Deleted {{name}}": "Đã xóa {{name}}",
"Description": "Mô tả",
"Didn't fully follow instructions": "Không tuân theo chỉ dẫn một cách đầy đủ",
"Disabled": "",
"Disabled": "Đã tắt",
"Discover a function": "Khám phá function",
"Discover a model": "Khám phá model",
"Discover a prompt": "Khám phá thêm prompt mới",
"Discover a tool": "Khám vá tool",
"Discover a tool": "Khám phá tool",
"Discover, download, and explore custom functions": "Tìm kiếm, tải về và khám phá thêm các function tùy chỉnh",
"Discover, download, and explore custom prompts": "Tìm kiếm, tải về và khám phá thêm các prompt tùy chỉnh",
"Discover, download, and explore custom tools": "Tìm kiếm, tải về và khám phá thêm các tool tùy chỉnh",
"Discover, download, and explore model presets": "",
"Discover, download, and explore model presets": "Tìm kiếm, tải về và khám phá thêm các model presets",
"Dismissible": "Có thể loại bỏ",
"Display Emoji in Call": "Hiển thị Emoji trong cuộc gọi",
"Display the username instead of You in the Chat": "Hiển thị tên người sử dụng thay vì 'Bạn' trong nội dung chat",
"Do not install functions from sources you do not fully trust.": "",
"Do not install tools from sources you do not fully trust.": "",
"Do not install functions from sources you do not fully trust.": "Không cài đặt các functions từ các nguồn mà bạn không hoàn toàn tin tưởng.",
"Do not install tools from sources you do not fully trust.": "Không cài đặt các tools từ những nguồn mà bạn không hoàn toàn tin tưởng.",
"Document": "Tài liệu",
"Document Settings": "Cấu hình kho tài liệu",
"Documentation": "Tài liệu",
@ -198,8 +201,8 @@
"does not make any external connections, and your data stays securely on your locally hosted server.": "không thực hiện bất kỳ kết nối ngoài nào, và dữ liệu của bạn vẫn được lưu trữ an toàn trên máy chủ lưu trữ cục bộ của bạn.",
"Don't Allow": "Không Cho phép",
"Don't have an account?": "Không có tài khoản?",
"don't install random functions from sources you don't trust.": "",
"don't install random tools from sources you don't trust.": "",
"don't install random functions from sources you don't trust.": "không cài đặt các function từ các nguồn mà bạn không tin tưởng.",
"don't install random tools from sources you don't trust.": "không cài đặt các tools từ các nguồn mà bạn không tin tưởng.",
"Don't like the style": "Không thích phong cách trả lời",
"Done": "Hoàn thành",
"Download": "Tải về",
@ -211,6 +214,7 @@
"Edit Doc": "Thay đổi tài liệu",
"Edit Memory": "Sửa Memory",
"Edit User": "Thay đổi thông tin người sử dụng",
"ElevenLabs": "",
"Email": "Email",
"Embedding Batch Size": "",
"Embedding Model": "Mô hình embedding",
@ -220,7 +224,7 @@
"Enable Community Sharing": "Kích hoạt Chia sẻ Cộng đồng",
"Enable New Sign Ups": "Cho phép đăng ký mới",
"Enable Web Search": "Kích hoạt tìm kiếm Web",
"Enabled": "",
"Enabled": "Đã bật",
"Engine": "",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Đảm bảo tệp CSV của bạn bao gồm 4 cột theo thứ tự sau: Name, Email, Password, Role.",
"Enter {{role}} message here": "Nhập yêu cầu của {{role}} ở đây",
@ -242,7 +246,7 @@
"Enter Serply API Key": "Nhập Serply API Key",
"Enter Serpstack API Key": "Nhập Serpstack API Key",
"Enter stop sequence": "Nhập stop sequence",
"Enter system prompt": "",
"Enter system prompt": "Nhập system prompt",
"Enter Tavily API Key": "Nhập Tavily API Key",
"Enter Tika Server URL": "Nhập URL cho Tika Server",
"Enter Top K": "Nhập Top K",
@ -250,7 +254,7 @@
"Enter URL (e.g. http://localhost:11434)": "Nhập URL (vd: http://localhost:11434)",
"Enter Your Email": "Nhập Email của bạn",
"Enter Your Full Name": "Nhập Họ và Tên của bạn",
"Enter your message": "",
"Enter your message": "Nhập tin nhắn của bạn",
"Enter Your Password": "Nhập Mật khẩu của bạn",
"Enter Your Role": "Nhập vai trò của bạn",
"Error": "Lỗi",
@ -274,7 +278,7 @@
"File": "Tệp",
"File Mode": "Chế độ Tệp văn bản",
"File not found.": "Không tìm thấy tệp.",
"Files": "",
"Files": "Tệp",
"Filter is now globally disabled": "Bộ lọc hiện đã bị vô hiệu hóa trên toàn hệ thống",
"Filter is now globally enabled": "Bộ lọc hiện được kích hoạt trên toàn hệ thống",
"Filters": "Lọc",
@ -287,23 +291,23 @@
"Frequency Penalty": "Hình phạt tần số",
"Function created successfully": "Function được tạo thành công",
"Function deleted successfully": "Function đã bị xóa",
"Function Description (e.g. A filter to remove profanity from text)": "",
"Function ID (e.g. my_filter)": "",
"Function is now globally disabled": "",
"Function is now globally enabled": "",
"Function Name (e.g. My Filter)": "",
"Function Description (e.g. A filter to remove profanity from text)": "Mô tả Function (ví dụ: Bộ lọc để loại bỏ các ngôn từ tục tĩu khỏi văn bản)",
"Function ID (e.g. my_filter)": "Mã Function (ví dụ: my_filter)",
"Function is now globally disabled": "Function hiện đã bị vô hiệu hóa trên toàn hệ thống",
"Function is now globally enabled": "Function đã được kích hoạt trên toàn hệ thống",
"Function Name (e.g. My Filter)": "Tên Function (ví dụ: My Filter)",
"Function updated successfully": "Function được cập nhật thành công",
"Functions": "",
"Functions allow arbitrary code execution": "",
"Functions allow arbitrary code execution.": "",
"Functions allow arbitrary code execution": "Các Function cho phép thực thi mã tùy ý",
"Functions allow arbitrary code execution.": "Các Function cho phép thực thi mã tùy ý.",
"Functions imported successfully": "Các function đã được nạp thành công",
"General": "Cài đặt chung",
"General Settings": "Cấu hình chung",
"Generate Image": "Sinh ảnh",
"Generating search query": "Tạo truy vấn tìm kiếm",
"Generation Info": "Thông tin chung",
"Get up and running with": "",
"Global": "",
"Get up and running with": "Khởi động và chạy với",
"Global": "Toàn hệ thống",
"Good Response": "Trả lời tốt",
"Google PSE API Key": "Khóa API Google PSE",
"Google PSE Engine Id": "ID công cụ Google PSE",
@ -315,7 +319,7 @@
"Hide Model": "Ẩn mô hình",
"How can I help you today?": "Tôi có thể giúp gì cho bạn hôm nay?",
"Hybrid Search": "Tìm kiếm Hybrid",
"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.": "",
"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.": "Tôi thừa nhận rằng tôi đã đọc và tôi hiểu ý nghĩa của hành động của mình. Tôi nhận thức được những rủi ro liên quan đến việc thực thi mã tùy ý và tôi đã xác minh độ tin cậy của nguồn.",
"Image Generation (Experimental)": "Tạo ảnh (thử nghiệm)",
"Image Generation Engine": "Công cụ tạo ảnh",
"Image Settings": "Cài đặt ảnh",
@ -346,7 +350,7 @@
"Keyboard shortcuts": "Phím tắt",
"Knowledge": "Kiến thức",
"Language": "Ngôn ngữ",
"large language models, locally.": "",
"large language models, locally.": "các mô hình ngôn ngữ lớn, mang tính địa phương",
"Last Active": "Truy cập gần nhất",
"Last Modified": "Lần sửa gần nhất",
"Light": "Sáng",
@ -360,7 +364,6 @@
"Manage Models": "Quản lý mô hình",
"Manage Ollama Models": "Quản lý mô hình với Ollama",
"Manage Pipelines": "Quản lý Pipelines",
"Manage Valves": "Quản lý Valves",
"March": "Tháng 3",
"Max Tokens (num_predict)": "Tokens tối đa (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Tối đa 3 mô hình có thể được tải xuống cùng lúc. Vui lòng thử lại sau.",
@ -372,6 +375,7 @@
"Memory deleted successfully": "Memory đã bị loại bỏ",
"Memory updated successfully": "Memory đã cập nhật thành công",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Tin nhắn bạn gửi sau khi tạo liên kết sẽ không được chia sẻ. Người dùng có URL sẽ có thể xem cuộc trò chuyện được chia sẻ.",
"Min P": "",
"Minimum Score": "Score tối thiểu",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -448,8 +452,8 @@
"Permission denied when accessing microphone": "Quyền truy cập micrô bị từ chối",
"Permission denied when accessing microphone: {{error}}": "Quyền truy cập micrô bị từ chối: {{error}}",
"Personalization": "Cá nhân hóa",
"Pin": "",
"Pinned": "",
"Pin": "Ghim lại",
"Pinned": "Đã ghim",
"Pipeline deleted successfully": "Pipeline đã bị xóa",
"Pipeline downloaded successfully": "Pipeline đã được tải về thành công",
"Pipelines": "",
@ -457,7 +461,7 @@
"Pipelines Valves": "",
"Plain text (.txt)": "Văn bản thô (.txt)",
"Playground": "Thử nghiệm (Playground)",
"Please carefully review the following warnings:": "",
"Please carefully review the following warnings:": "Vui lòng xem xét cẩn thận các cảnh báo sau:",
"Positive attitude": "Thái độ tích cực",
"Previous 30 days": "30 ngày trước",
"Previous 7 days": "7 ngày trước",
@ -485,21 +489,22 @@
"Request Mode": "Request Mode",
"Reranking Model": "Reranking Model",
"Reranking model disabled": "Reranking model disabled",
"Reranking model set to \"{{reranking_model}}\"": "Reranking model set to \"{{reranking_model}}\"",
"Reranking model set to \"{{reranking_model}}\"": "Reranking model được đặt thành \"{{reranking_model}}\"",
"Reset": "Xóa toàn bộ",
"Reset Upload Directory": "Xóa toàn bộ thư mục Upload",
"Reset Vector Storage": "Cài đặt lại Vector Storage",
"Response AutoCopy to Clipboard": "Tự động Sao chép Phản hồi vào clipboard",
"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Không thể kích hoạt thông báo vì trang web không cấp quyền. Vui lòng truy cập cài đặt trình duyệt của bạn để cấp quyền cần thiết.",
"Role": "Vai trò",
"Rosé Pine": "Rosé Pine",
"Rosé Pine Dawn": "Rosé Pine Dawn",
"RTL": "RTL",
"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
"Run Llama 2, Code Llama, and other models. Customize and create your own.": "Chạy Llama 2, Code Llama và các mô hình khác. Tùy chỉnh hoặc mô hình riêng của bạn.",
"Running": "Đang chạy",
"Save": "Lưu",
"Save & Create": "Lưu & Tạo",
"Save & Update": "Lưu & Cập nhật",
"Save Tag": "Lưu Thẻ",
"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": "Không còn hỗ trợ lưu trữ lịch sử chat trực tiếp vào bộ nhớ trình duyệt của bạn. Vui lòng dành thời gian để tải xuống và xóa lịch sử chat của bạn bằng cách nhấp vào nút bên dưới. Đừng lo lắng, bạn có thể dễ dàng nhập lại lịch sử chat của mình vào backend thông qua",
"Scan": "Quét tài liệu",
"Scan complete!": "Quét hoàn tất!",
@ -578,8 +583,8 @@
"Success": "Thành công",
"Successfully updated.": "Đã cập nhật thành công.",
"Suggested": "Gợi ý một số mẫu prompt",
"Support": "",
"Support this plugin:": "",
"Support": "Hỗ trợ",
"Support this plugin:": "Hỗ trợ plugin này:",
"System": "Hệ thống",
"System Prompt": "Prompt Hệ thống (System Prompt)",
"Tags": "Thẻ",
@ -592,7 +597,7 @@
"Text-to-Speech Engine": "Công cụ Chuyển Văn bản thành Giọng nói",
"Tfs Z": "Tfs Z",
"Thanks for your feedback!": "Cám ơn bạn đã gửi phản hồi!",
"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "Các nhà phát triển đằng sau plugin này là những tình nguyện viên nhiệt huyết của cộng đồng. Nếu bạn thấy plugin này hữu ích, vui lòng cân nhắc đóng góp cho sự phát triển của nó.",
"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Điểm (score) phải có giá trị từ 0,0 (0%) đến 1,0 (100%).",
"Theme": "Chủ đề",
"Thinking...": "Đang suy luận...",
@ -616,6 +621,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Để truy cập vui lòng liên hệ với quản trị viên.",
"To add documents here, upload them to the \"Documents\" workspace first.": "Để thêm tài liệu, trước tiên hãy upload chúng lên khu vực \"Tài liệu\".",
"to chat input.": "đến đầu vào trò chuyện.",
"To select actions here, add them to the \"Functions\" workspace first.": "Để chọn các tác vụ, bạn phải thêm chúng vào workspace \"Functions\" trước.",
"To select filters here, add them to the \"Functions\" workspace first.": "Để chọn các filters, bạn phải thêm chúng vào workspace \"Functions\" trước.",
"To select toolkits here, add them to the \"Tools\" workspace first.": "Để chọn các tookits, bạn phải thêm chúng vào workspace \"Tools\" trước.",
"Today": "Hôm nay",
@ -626,13 +632,13 @@
"Tool deleted successfully": "Tool đã bị xóa",
"Tool imported successfully": "Tool đã được nạp thành công",
"Tool updated successfully": "Tool đã được cập nhật thành công",
"Toolkit Description (e.g. A toolkit for performing various operations)": "",
"Toolkit Description (e.g. A toolkit for performing various operations)": "Mô tả Toolkit (ví dụ: Toolkit để thực hiện các hoạt động khác nhau)",
"Toolkit ID (e.g. my_toolkit)": "",
"Toolkit Name (e.g. My ToolKit)": "",
"Tools": "",
"Tools are a function calling system with arbitrary code execution": "",
"Tools have a function calling system that allows arbitrary code execution": "",
"Tools have a function calling system that allows arbitrary code execution.": "",
"Tools are a function calling system with arbitrary code execution": "Tools là một hệ thống gọi function với việc thực thi mã tùy ý",
"Tools have a function calling system that allows arbitrary code execution": "Các Tools có hệ thống gọi function cho phép thực thi mã tùy ý",
"Tools have a function calling system that allows arbitrary code execution.": "Các Tools có hệ thống gọi function cho phép thực thi mã tùy ý.",
"Top K": "Top K",
"Top P": "Top P",
"Trouble accessing Ollama?": "Gặp vấn đề khi truy cập Ollama?",
@ -643,8 +649,8 @@
"Type Hugging Face Resolve (Download) URL": "Nhập URL Hugging Face Resolve (Tải xuống)",
"Uh-oh! There was an issue connecting to {{provider}}.": "Ồ! Đã xảy ra sự cố khi kết nối với {{provider}}.",
"UI": "Giao diện",
"Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "",
"Unpin": "",
"Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "Loại tệp không xác định '{{file_type}}'. Vẫn tiếp tục tải tập tin lên.",
"Unpin": "Bỏ ghim",
"Update": "Cập nhật",
"Update and Copy Link": "Cập nhật và sao chép link",
"Update password": "Cập nhật mật khẩu",
@ -674,7 +680,7 @@
"Version": "Version",
"Voice": "Giọng nói",
"Warning": "Cảnh báo",
"Warning:": "",
"Warning:": "Cảnh báo:",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Cảnh báo: Nếu cập nhật hoặc thay đổi embedding model, bạn sẽ cần cập nhật lại tất cả tài liệu.",
"Web": "Web",
"Web API": "",
@ -701,7 +707,7 @@
"You're a helpful assistant.": "Bạn là một trợ lý hữu ích.",
"You're now logged in.": "Bạn đã đăng nhập.",
"Your account status is currently pending activation.": "Tài khoản của bạn hiện đang ở trạng thái chờ kích hoạt.",
"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.": "",
"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.": "Toàn bộ đóng góp của bạn sẽ được chuyển trực tiếp đến nhà phát triển plugin; Open WebUI không lấy bất kỳ tỷ lệ phần trăm nào. Tuy nhiên, nền tảng được chọn tài trợ có thể có phí riêng.",
"Youtube": "Youtube",
"Youtube Loader Settings": "Cài đặt Youtube Loader"
}

View File

@ -15,6 +15,7 @@
"Account": "账号",
"Account Activation Pending": "账号待激活",
"Accurate information": "提供的信息很准确",
"Actions": "",
"Active Users": "当前在线用户",
"Add": "添加",
"Add a model id": "添加一个模型 ID",
@ -27,6 +28,7 @@
"Add Memory": "添加记忆",
"Add message": "添加消息",
"Add Model": "添加模型",
"Add Tag": "",
"Add Tags": "添加标签",
"Add User": "添加用户",
"Adjusting these settings will apply changes universally to all users.": "调整这些设置将会对所有用户应用更改。",
@ -168,6 +170,7 @@
"Delete chat": "删除对话记录",
"Delete Chat": "删除对话记录",
"Delete chat?": "删除对话记录?",
"Delete Doc": "删除文档",
"Delete function?": "删除函数?",
"Delete prompt?": "删除提示词?",
"delete this link": "此处删除这个链接",
@ -177,7 +180,7 @@
"Deleted {{name}}": "已删除 {{name}}",
"Description": "描述",
"Didn't fully follow instructions": "没有完全遵照指示",
"Disabled": "",
"Disabled": "禁用",
"Discover a function": "发现更多函数",
"Discover a model": "发现更多模型",
"Discover a prompt": "发现更多提示词",
@ -189,8 +192,8 @@
"Dismissible": "是否可关闭",
"Display Emoji in Call": "在通话中显示 Emoji 表情符号",
"Display the username instead of You in the Chat": "在对话中显示用户名而不是“你”",
"Do not install functions from sources you do not fully trust.": "",
"Do not install tools from sources you do not fully trust.": "",
"Do not install functions from sources you do not fully trust.": "切勿安装来源不完全可信的函数。",
"Do not install tools from sources you do not fully trust.": "切勿安装来源不完全可信的工具。",
"Document": "文档",
"Document Settings": "文档设置",
"Documentation": "帮助文档",
@ -198,8 +201,8 @@
"does not make any external connections, and your data stays securely on your locally hosted server.": "不会与外部建立任何连接,您的数据会安全地存储在本地托管的服务器上。",
"Don't Allow": "不允许",
"Don't have an account?": "没有账号?",
"don't install random functions from sources you don't trust.": "",
"don't install random tools from sources you don't trust.": "",
"don't install random functions from sources you don't trust.": "切勿随意从不完全可信的来源安装函数。",
"don't install random tools from sources you don't trust.": "切勿随意从不完全可信的来源安装工具。",
"Don't like the style": "不喜欢这个文风",
"Done": "完成",
"Download": "下载",
@ -211,6 +214,7 @@
"Edit Doc": "编辑文档",
"Edit Memory": "编辑记忆",
"Edit User": "编辑用户",
"ElevenLabs": "ElevenLabs",
"Email": "电子邮箱",
"Embedding Batch Size": "嵌入层批处理大小 (Embedding Batch Size)",
"Embedding Model": "语义向量模型",
@ -220,7 +224,7 @@
"Enable Community Sharing": "启用分享至社区",
"Enable New Sign Ups": "允许新用户注册",
"Enable Web Search": "启用网络搜索",
"Enabled": "",
"Enabled": "启用",
"Engine": "引擎",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "确保您的 CSV 文件按以下顺序包含 4 列: 姓名、电子邮箱、密码、角色。",
"Enter {{role}} message here": "在此处输入 {{role}} 信息",
@ -274,7 +278,7 @@
"File": "文件",
"File Mode": "文件模式",
"File not found.": "文件未找到。",
"Files": "",
"Files": "文件",
"Filter is now globally disabled": "过滤器已全局禁用",
"Filter is now globally enabled": "过滤器已全局启用",
"Filters": "过滤器",
@ -287,22 +291,22 @@
"Frequency Penalty": "频率惩罚",
"Function created successfully": "函数创建成功",
"Function deleted successfully": "函数删除成功",
"Function Description (e.g. A filter to remove profanity from text)": "",
"Function ID (e.g. my_filter)": "",
"Function Description (e.g. A filter to remove profanity from text)": "函数描述(例如:一个用于从文本中过滤脏话的过滤器)",
"Function ID (e.g. my_filter)": "函数 ID 例如my_filter",
"Function is now globally disabled": "函数全局已禁用",
"Function is now globally enabled": "函数全局已启用",
"Function Name (e.g. My Filter)": "",
"Function Name (e.g. My Filter)": "函数名称(例如:我的过滤器)",
"Function updated successfully": "函数更新成功",
"Functions": "函数",
"Functions allow arbitrary code execution": "",
"Functions allow arbitrary code execution.": "",
"Functions allow arbitrary code execution": "注意:函数有权执行任意代码",
"Functions allow arbitrary code execution.": "注意:函数有权执行任意代码。",
"Functions imported successfully": "函数导入成功",
"General": "通用",
"General Settings": "通用设置",
"Generate Image": "生成图像",
"Generating search query": "生成搜索查询",
"Generation Info": "生成信息",
"Get up and running with": "",
"Get up and running with": "启动并运行",
"Global": "全局",
"Good Response": "点赞此回答",
"Google PSE API Key": "Google PSE API 密钥",
@ -315,7 +319,7 @@
"Hide Model": "隐藏",
"How can I help you today?": "有什么我能帮您的吗?",
"Hybrid Search": "混合搜索",
"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.": "",
"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.": "我已阅读并理解我的行为所带来的影响,明白执行任意代码所涉及的风险。且我已验证代码来源可信度。",
"Image Generation (Experimental)": "图像生成(实验性)",
"Image Generation Engine": "图像生成引擎",
"Image Settings": "图像设置",
@ -346,7 +350,7 @@
"Keyboard shortcuts": "键盘快捷键",
"Knowledge": "知识库",
"Language": "语言",
"large language models, locally.": "",
"large language models, locally.": "本地大语言模型",
"Last Active": "最后在线时间",
"Last Modified": "最后修改时间",
"Light": "浅色",
@ -360,7 +364,6 @@
"Manage Models": "管理模型",
"Manage Ollama Models": "管理 Ollama 模型",
"Manage Pipelines": "管理 Pipeline",
"Manage Valves": "管理值",
"March": "三月",
"Max Tokens (num_predict)": "最多 Token (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "最多可以同时下载 3 个模型,请稍后重试。",
@ -372,6 +375,7 @@
"Memory deleted successfully": "记忆删除成功",
"Memory updated successfully": "记忆更新成功",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "创建链接后发送的消息不会被共享。具有 URL 的用户将能够查看共享对话。",
"Min P": "",
"Minimum Score": "最低分",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -457,7 +461,7 @@
"Pipelines Valves": "Pipeline 值",
"Plain text (.txt)": "TXT 文档 (.txt)",
"Playground": "AI 对话游乐场",
"Please carefully review the following warnings:": "",
"Please carefully review the following warnings:": "请仔细阅读以下警告信息:",
"Positive attitude": "积极的态度",
"Previous 30 days": "过去 30 天",
"Previous 7 days": "过去 7 天",
@ -495,11 +499,12 @@
"Rosé Pine": "Rosé Pine",
"Rosé Pine Dawn": "Rosé Pine Dawn",
"RTL": "从右至左",
"Run Llama 2, Code Llama, and other models. Customize and create your own.": "",
"Run Llama 2, Code Llama, and other models. Customize and create your own.": "运行 Llama 2、Code Llama 和其他模型。自定义和创建您自己的模型。",
"Running": "运行中",
"Save": "保存",
"Save & Create": "保存并创建",
"Save & Update": "保存并更新",
"Save Tag": "保存标签",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "我们不再支持将聊天记录直接保存到浏览器的存储空间。请点击下面的按钮下载并删除您的聊天记录。别担心,您可以轻松地将聊天记录重新导入到后台。",
"Scan": "立即扫描",
"Scan complete!": "扫描完成!",
@ -578,8 +583,8 @@
"Success": "成功",
"Successfully updated.": "成功更新。",
"Suggested": "建议",
"Support": "",
"Support this plugin:": "",
"Support": "支持",
"Support this plugin:": "支持此插件",
"System": "系统",
"System Prompt": "系统提示词 (System Prompt)",
"Tags": "标签",
@ -592,7 +597,7 @@
"Text-to-Speech Engine": "文本转语音引擎",
"Tfs Z": "Tfs Z",
"Thanks for your feedback!": "感谢您的反馈!",
"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "",
"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "本插件的背后开发者是社区中热情的志愿者。如果此插件有帮助到您,烦请考虑一下为它的开发做出贡献。",
"The score should be a value between 0.0 (0%) and 1.0 (100%).": "分值应介于 0.00%)和 1.0100%)之间。",
"Theme": "主题",
"Thinking...": "正在思考...",
@ -616,6 +621,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "请联系管理员以访问。管理员可以在后台管理面板中管理用户状态。",
"To add documents here, upload them to the \"Documents\" workspace first.": "要在此处添加文档,请先将它们上传到工作空间中的“文档”内。",
"to chat input.": "到对话输入。",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "要在这里选择过滤器,请先将它们添加到工作空间中的“函数”。",
"To select toolkits here, add them to the \"Tools\" workspace first.": "要在这里选择工具包,请先将它们添加到工作空间中的“工具”。",
"Today": "今天",
@ -626,13 +632,13 @@
"Tool deleted successfully": "工具删除成功",
"Tool imported successfully": "工具导入成功",
"Tool updated successfully": "工具更新成功",
"Toolkit Description (e.g. A toolkit for performing various operations)": "",
"Toolkit ID (e.g. my_toolkit)": "",
"Toolkit Name (e.g. My ToolKit)": "",
"Toolkit Description (e.g. A toolkit for performing various operations)": "工具包描述(例如:用于执行各种操作的工具包)",
"Toolkit ID (e.g. my_toolkit)": "工具包 ID例如my_toolkit",
"Toolkit Name (e.g. My ToolKit)": "工具包名(例如:我的工具包)",
"Tools": "工具",
"Tools are a function calling system with arbitrary code execution": "",
"Tools have a function calling system that allows arbitrary code execution": "",
"Tools have a function calling system that allows arbitrary code execution.": "",
"Tools are a function calling system with arbitrary code execution": "工具是一个具有任意代码执行能力的函数调用系统",
"Tools have a function calling system that allows arbitrary code execution": "注意:工具有权执行任意代码",
"Tools have a function calling system that allows arbitrary code execution.": "注意:工具有权执行任意代码。",
"Top K": "Top K",
"Top P": "Top P",
"Trouble accessing Ollama?": "访问 Ollama 时遇到问题?",
@ -674,7 +680,7 @@
"Version": "版本",
"Voice": "语音",
"Warning": "警告",
"Warning:": "",
"Warning:": "警告:",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "警告:如果您修改了语义向量模型,则需要重新导入所有文档。",
"Web": "网页",
"Web API": "网页 API",
@ -701,7 +707,7 @@
"You're a helpful assistant.": "你是一个有帮助的助手。",
"You're now logged in.": "已登录。",
"Your account status is currently pending activation.": "您的账号当前状态为待激活。",
"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "",
"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "您的全部捐款将直接给到插件开发者Open WebUI 不会收取任何比例。但众筹平台可能会有服务费、抽成。",
"Youtube": "YouTube",
"Youtube Loader Settings": "YouTube 爬取设置"
}

View File

@ -15,6 +15,7 @@
"Account": "帳號",
"Account Activation Pending": "帳號啟用中",
"Accurate information": "準確資訊",
"Actions": "",
"Active Users": "活躍使用者",
"Add": "新增",
"Add a model id": "新增模型 ID",
@ -27,6 +28,7 @@
"Add Memory": "新增記憶",
"Add message": "新增訊息",
"Add Model": "新增模型",
"Add Tag": "",
"Add Tags": "新增標籤",
"Add User": "新增使用者",
"Adjusting these settings will apply changes universally to all users.": "調整這些設定將對所有使用者進行更改。",
@ -168,6 +170,7 @@
"Delete chat": "刪除聊天紀錄",
"Delete Chat": "刪除聊天紀錄",
"Delete chat?": "",
"Delete Doc": "",
"Delete function?": "",
"Delete prompt?": "",
"delete this link": "刪除此連結",
@ -211,6 +214,7 @@
"Edit Doc": "編輯文件",
"Edit Memory": "編輯記憶",
"Edit User": "編輯使用者",
"ElevenLabs": "",
"Email": "電子郵件",
"Embedding Batch Size": "嵌入批次大小",
"Embedding Model": "嵌入模型",
@ -360,7 +364,6 @@
"Manage Models": "管理模型",
"Manage Ollama Models": "管理 Ollama 模型",
"Manage Pipelines": "管理管線",
"Manage Valves": "",
"March": "3 月",
"Max Tokens (num_predict)": "最大 Tokennum_predict",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "最多可以同時下載 3 個模型。請稍後再試。",
@ -372,6 +375,7 @@
"Memory deleted successfully": "",
"Memory updated successfully": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "建立連結後傳送的訊息將不會被共享。具有 URL 的使用者將會能夠檢視共享的聊天。",
"Min P": "",
"Minimum Score": "最低分數",
"Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta",
@ -500,6 +504,7 @@
"Save": "儲存",
"Save & Create": "儲存並建立",
"Save & Update": "儲存並更新",
"Save Tag": "",
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "現已不支援將聊天紀錄儲存到瀏覽器儲存空間中。請點選下面的按鈕下載並刪除您的聊天記錄。別擔心,您可以透過以下方式輕鬆地重新匯入您的聊天記錄到後端",
"Scan": "掃描",
"Scan complete!": "掃描完成!",
@ -616,6 +621,7 @@
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "若要存取 WebUI請聯絡管理員。管理員可以從管理面板管理使用者狀態。",
"To add documents here, upload them to the \"Documents\" workspace first.": "若要在此新增文件,請先將它們上傳到「文件」工作區。",
"to chat input.": "到聊天輸入框來啟動此命令。",
"To select actions here, add them to the \"Functions\" workspace first.": "",
"To select filters here, add them to the \"Functions\" workspace first.": "若要在此選擇篩選器,請先將它們新增到「功能」工作區。",
"To select toolkits here, add them to the \"Tools\" workspace first.": "若要在此選擇工具包,請先將它們新增到「工具」工作區。",
"Today": "今天",

View File

@ -145,6 +145,7 @@ type Config = {
auth: boolean;
auth_trusted_header: boolean;
enable_signup: boolean;
enable_login_form: boolean;
enable_web_search?: boolean;
enable_image_generation: boolean;
enable_admin_export: boolean;

View File

@ -6,7 +6,28 @@ import { WEBUI_BASE_URL } from '$lib/constants';
// Helper functions
//////////////////////////
const convertLatexToSingleLine = (content) => {
// Patterns to match multiline LaTeX blocks
const patterns = [
/(\$\$[\s\S]*?\$\$)/g, // Match $$ ... $$
/(\\\[[\s\S]*?\\\])/g, // Match \[ ... \]
/(\\begin\{[a-z]+\}[\s\S]*?\\end\{[a-z]+\})/g // Match \begin{...} ... \end{...}
];
patterns.forEach((pattern) => {
content = content.replace(pattern, (match) => {
return match.replace(/\s*\n\s*/g, ' ').trim();
});
});
return content;
};
export const sanitizeResponseContent = (content: string) => {
// replace single backslash with double backslash
content = content.replace(/\\/g, '\\\\');
content = convertLatexToSingleLine(content);
// First, temporarily replace valid <video> tags with a placeholder
const videoTagRegex = /<video\s+src="([^"]+)"\s+controls><\/video>/gi;
const placeholders: string[] = [];

View File

@ -1,11 +1,21 @@
<script lang="ts">
import { onMount, getContext } from 'svelte';
import { goto } from '$app/navigation';
import { WEBUI_NAME, showSidebar } from '$lib/stores';
import { WEBUI_NAME, showSidebar, user } from '$lib/stores';
import MenuLines from '$lib/components/icons/MenuLines.svelte';
import { page } from '$app/stores';
const i18n = getContext('i18n');
let loaded = false;
onMount(async () => {
if ($user?.role !== 'admin') {
await goto('/');
}
loaded = true;
});
</script>
<svelte:head>
@ -14,49 +24,50 @@
</title>
</svelte:head>
<div
class=" flex flex-col w-full min-h-screen max-h-screen {$showSidebar
? 'md:max-w-[calc(100%-260px)]'
: ''}"
>
<div class=" px-4 pt-3 mt-0.5 mb-1">
<div class=" flex items-center gap-1">
<div class="{$showSidebar ? 'md:hidden' : ''} mr-1 self-start flex flex-none items-center">
<button
id="sidebar-toggle-button"
class="cursor-pointer p-1 flex rounded-xl hover:bg-gray-100 dark:hover:bg-gray-850 transition"
on:click={() => {
showSidebar.set(!$showSidebar);
}}
>
<div class=" m-auto self-center">
<MenuLines />
</div>
</button>
{#if loaded}
<div
class=" flex flex-col w-full min-h-screen max-h-screen {$showSidebar
? 'md:max-w-[calc(100%-260px)]'
: ''}"
>
<div class=" px-4 pt-3 mt-0.5 mb-1">
<div class=" flex items-center gap-1">
<div class="{$showSidebar ? 'md:hidden' : ''} mr-1 self-start flex flex-none items-center">
<button
id="sidebar-toggle-button"
class="cursor-pointer p-1 flex rounded-xl hover:bg-gray-100 dark:hover:bg-gray-850 transition"
on:click={() => {
showSidebar.set(!$showSidebar);
}}
>
<div class=" m-auto self-center">
<MenuLines />
</div>
</button>
</div>
<div class="flex items-center text-xl font-semibold">{$i18n.t('Admin Panel')}</div>
</div>
<div class="flex items-center text-xl font-semibold">{$i18n.t('Admin Panel')}</div>
</div>
</div>
<div class="px-4 my-1">
<div
class="flex scrollbar-none overflow-x-auto w-fit text-center text-sm font-medium rounded-xl bg-transparent/10 p-1"
>
<a
class="min-w-fit rounded-lg p-1.5 px-3 {['/admin', '/admin/'].includes($page.url.pathname)
? 'bg-gray-50 dark:bg-gray-850'
: ''} transition"
href="/admin">{$i18n.t('Dashboard')}</a
<div class="px-4 my-1">
<div
class="flex scrollbar-none overflow-x-auto w-fit text-center text-sm font-medium rounded-xl bg-transparent/10 p-1"
>
<a
class="min-w-fit rounded-lg p-1.5 px-3 {['/admin', '/admin/'].includes($page.url.pathname)
? 'bg-gray-50 dark:bg-gray-850'
: ''} transition"
href="/admin">{$i18n.t('Dashboard')}</a
>
<a
class="min-w-fit rounded-lg p-1.5 px-3 {$page.url.pathname.includes('/admin/settings')
? 'bg-gray-50 dark:bg-gray-850'
: ''} transition"
href="/admin/settings">{$i18n.t('Settings')}</a
>
<a
class="min-w-fit rounded-lg p-1.5 px-3 {$page.url.pathname.includes('/admin/settings')
? 'bg-gray-50 dark:bg-gray-850'
: ''} transition"
href="/admin/settings">{$i18n.t('Settings')}</a
>
<!-- <a
<!-- <a
class="min-w-fit rounded-lg p-1.5 px-3 {$page.url.pathname.includes('/workspace/documents')
? 'bg-gray-50 dark:bg-gray-850'
: ''} transition"
@ -71,12 +82,13 @@
: ''} transition"
href="/workspace/playground">{$i18n.t('Playground')}</a
> -->
</div>
</div>
<hr class=" my-2 dark:border-gray-850" />
<div class=" py-1 px-5 flex-1 max-h-full overflow-y-auto">
<slot />
</div>
</div>
<hr class=" my-2 dark:border-gray-850" />
<div class=" py-1 px-5 flex-1 max-h-full overflow-y-auto">
<slot />
</div>
</div>
{/if}

View File

@ -1,15 +1,20 @@
<script lang="ts">
import { onMount, getContext } from 'svelte';
import { WEBUI_NAME, showSidebar, functions } from '$lib/stores';
import MenuLines from '$lib/components/icons/MenuLines.svelte';
import { WEBUI_NAME, showSidebar, functions, user } from '$lib/stores';
import { page } from '$app/stores';
import { getFunctions } from '$lib/apis/functions';
import { goto } from '$app/navigation';
import MenuLines from '$lib/components/icons/MenuLines.svelte';
const i18n = getContext('i18n');
let loaded = false;
onMount(async () => {
// functions.set(await getFunctions(localStorage.token));
if ($user?.role !== 'admin') {
await goto('/');
}
loaded = true;
});
</script>
@ -19,80 +24,86 @@
</title>
</svelte:head>
<div
class=" flex flex-col w-full min-h-screen max-h-screen {$showSidebar
? 'md:max-w-[calc(100%-260px)]'
: ''}"
>
<div class=" px-4 pt-3 mt-0.5 mb-1">
<div class=" flex items-center gap-1">
<div class="{$showSidebar ? 'md:hidden' : ''} mr-1 self-start flex flex-none items-center">
<button
id="sidebar-toggle-button"
class="cursor-pointer p-1 flex rounded-xl hover:bg-gray-100 dark:hover:bg-gray-850 transition"
on:click={() => {
showSidebar.set(!$showSidebar);
}}
>
<div class=" m-auto self-center">
<MenuLines />
</div>
</button>
{#if loaded}
<div
class=" flex flex-col w-full min-h-screen max-h-screen {$showSidebar
? 'md:max-w-[calc(100%-260px)]'
: ''}"
>
<div class=" px-4 pt-3 mt-0.5 mb-1">
<div class=" flex items-center gap-1">
<div class="{$showSidebar ? 'md:hidden' : ''} mr-1 self-start flex flex-none items-center">
<button
id="sidebar-toggle-button"
class="cursor-pointer p-1 flex rounded-xl hover:bg-gray-100 dark:hover:bg-gray-850 transition"
on:click={() => {
showSidebar.set(!$showSidebar);
}}
>
<div class=" m-auto self-center">
<MenuLines />
</div>
</button>
</div>
<div class="flex items-center text-xl font-semibold">{$i18n.t('Workspace')}</div>
</div>
<div class="flex items-center text-xl font-semibold">{$i18n.t('Workspace')}</div>
</div>
<div class="px-4 my-1">
<div
class="flex scrollbar-none overflow-x-auto w-fit text-center text-sm font-medium rounded-xl bg-transparent/10 p-1"
>
<a
class="min-w-fit rounded-lg p-1.5 px-3 {$page.url.pathname.includes('/workspace/models')
? 'bg-gray-50 dark:bg-gray-850'
: ''} transition"
href="/workspace/models">{$i18n.t('Models')}</a
>
<a
class="min-w-fit rounded-lg p-1.5 px-3 {$page.url.pathname.includes('/workspace/prompts')
? 'bg-gray-50 dark:bg-gray-850'
: ''} transition"
href="/workspace/prompts">{$i18n.t('Prompts')}</a
>
<a
class="min-w-fit rounded-lg p-1.5 px-3 {$page.url.pathname.includes(
'/workspace/documents'
)
? 'bg-gray-50 dark:bg-gray-850'
: ''} transition"
href="/workspace/documents"
>
{$i18n.t('Documents')}
</a>
<a
class="min-w-fit rounded-lg p-1.5 px-3 {$page.url.pathname.includes('/workspace/tools')
? 'bg-gray-50 dark:bg-gray-850'
: ''} transition"
href="/workspace/tools"
>
{$i18n.t('Tools')}
</a>
<a
class="min-w-fit rounded-lg p-1.5 px-3 {$page.url.pathname.includes(
'/workspace/functions'
)
? 'bg-gray-50 dark:bg-gray-850'
: ''} transition"
href="/workspace/functions"
>
{$i18n.t('Functions')}
</a>
</div>
</div>
<hr class=" my-2 dark:border-gray-850" />
<div class=" py-1 px-5 flex-1 max-h-full overflow-y-auto">
<slot />
</div>
</div>
<div class="px-4 my-1">
<div
class="flex scrollbar-none overflow-x-auto w-fit text-center text-sm font-medium rounded-xl bg-transparent/10 p-1"
>
<a
class="min-w-fit rounded-lg p-1.5 px-3 {$page.url.pathname.includes('/workspace/models')
? 'bg-gray-50 dark:bg-gray-850'
: ''} transition"
href="/workspace/models">{$i18n.t('Models')}</a
>
<a
class="min-w-fit rounded-lg p-1.5 px-3 {$page.url.pathname.includes('/workspace/prompts')
? 'bg-gray-50 dark:bg-gray-850'
: ''} transition"
href="/workspace/prompts">{$i18n.t('Prompts')}</a
>
<a
class="min-w-fit rounded-lg p-1.5 px-3 {$page.url.pathname.includes('/workspace/documents')
? 'bg-gray-50 dark:bg-gray-850'
: ''} transition"
href="/workspace/documents"
>
{$i18n.t('Documents')}
</a>
<a
class="min-w-fit rounded-lg p-1.5 px-3 {$page.url.pathname.includes('/workspace/tools')
? 'bg-gray-50 dark:bg-gray-850'
: ''} transition"
href="/workspace/tools"
>
{$i18n.t('Tools')}
</a>
<a
class="min-w-fit rounded-lg p-1.5 px-3 {$page.url.pathname.includes('/workspace/functions')
? 'bg-gray-50 dark:bg-gray-850'
: ''} transition"
href="/workspace/functions"
>
{$i18n.t('Functions')}
</a>
</div>
</div>
<hr class=" my-2 dark:border-gray-850" />
<div class=" py-1 px-5 flex-1 max-h-full overflow-y-auto">
<slot />
</div>
</div>
{/if}

View File

@ -18,6 +18,7 @@
import { stringify } from 'postcss';
import { parseFile } from '$lib/utils/characters';
import FiltersSelector from '$lib/components/workspace/Models/FiltersSelector.svelte';
import ActionsSelector from '$lib/components/workspace/Models/ActionsSelector.svelte';
const i18n = getContext('i18n');
@ -63,6 +64,7 @@
let toolIds = [];
let knowledge = [];
let filterIds = [];
let actionIds = [];
$: if (name) {
id = name
@ -115,6 +117,14 @@
}
}
if (actionIds.length > 0) {
info.meta.actionIds = actionIds;
} else {
if (info.meta.actionIds) {
delete info.meta.actionIds;
}
}
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) {
@ -187,6 +197,10 @@
filterIds = [...model?.info?.meta?.filterIds];
}
if (model?.info?.meta?.actionIds) {
actionIds = [...model?.info?.meta?.actionIds];
}
info = {
...info,
...model.info
@ -625,6 +639,13 @@
/>
</div>
<div class="my-2">
<ActionsSelector
bind:selectedActionIds={actionIds}
actions={$functions.filter((func) => func.type === 'action')}
/>
</div>
<div class="my-1">
<div class="flex w-full justify-between mb-1">
<div class=" self-center text-sm font-semibold">{$i18n.t('Capabilities')}</div>

View File

@ -17,6 +17,7 @@
import Knowledge from '$lib/components/workspace/Models/Knowledge.svelte';
import ToolsSelector from '$lib/components/workspace/Models/ToolsSelector.svelte';
import FiltersSelector from '$lib/components/workspace/Models/FiltersSelector.svelte';
import ActionsSelector from '$lib/components/workspace/Models/ActionsSelector.svelte';
const i18n = getContext('i18n');
@ -64,6 +65,7 @@
let knowledge = [];
let toolIds = [];
let filterIds = [];
let actionIds = [];
const updateHandler = async () => {
loading = true;
@ -96,6 +98,14 @@
}
}
if (actionIds.length > 0) {
info.meta.actionIds = actionIds;
} else {
if (info.meta.actionIds) {
delete info.meta.actionIds;
}
}
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) {
@ -161,6 +171,10 @@
filterIds = [...model?.info?.meta?.filterIds];
}
if (model?.info?.meta?.actionIds) {
actionIds = [...model?.info?.meta?.actionIds];
}
if (model?.owned_by === 'openai') {
capabilities.usage = false;
}
@ -555,6 +569,13 @@
/>
</div>
<div class="my-2">
<ActionsSelector
bind:selectedActionIds={actionIds}
actions={$functions.filter((func) => func.type === 'action')}
/>
</div>
<div class="my-2">
<div class="flex w-full justify-between mb-1">
<div class=" self-center text-sm font-semibold">{$i18n.t('Capabilities')}</div>

View File

@ -110,7 +110,7 @@
await WEBUI_NAME.set(backendConfig.name);
if ($config) {
const _socket = io(`${WEBUI_BASE_URL}`, {
const _socket = io(`${WEBUI_BASE_URL}` || undefined, {
path: '/ws/socket.io',
auth: { token: localStorage.token }
});

View File

@ -173,88 +173,94 @@
{/if}
</div>
<div class="flex flex-col mt-4">
{#if mode === 'signup'}
<div>
<div class=" text-sm font-medium text-left mb-1">{$i18n.t('Name')}</div>
{#if $config?.features.enable_login_form}
<div class="flex flex-col mt-4">
{#if mode === 'signup'}
<div>
<div class=" text-sm font-medium text-left mb-1">{$i18n.t('Name')}</div>
<input
bind:value={name}
type="text"
class=" px-5 py-3 rounded-2xl w-full text-sm outline-none border dark:border-none dark:bg-gray-900"
autocomplete="name"
placeholder={$i18n.t('Enter Your Full Name')}
required
/>
</div>
<hr class=" my-3 dark:border-gray-900" />
{/if}
<div class="mb-2">
<div class=" text-sm font-medium text-left mb-1">{$i18n.t('Email')}</div>
<input
bind:value={name}
type="text"
bind:value={email}
type="email"
class=" px-5 py-3 rounded-2xl w-full text-sm outline-none border dark:border-none dark:bg-gray-900"
autocomplete="name"
placeholder={$i18n.t('Enter Your Full Name')}
autocomplete="email"
placeholder={$i18n.t('Enter Your Email')}
required
/>
</div>
<hr class=" my-3 dark:border-gray-900" />
{/if}
<div>
<div class=" text-sm font-medium text-left mb-1">{$i18n.t('Password')}</div>
<div class="mb-2">
<div class=" text-sm font-medium text-left mb-1">{$i18n.t('Email')}</div>
<input
bind:value={email}
type="email"
class=" px-5 py-3 rounded-2xl w-full text-sm outline-none border dark:border-none dark:bg-gray-900"
autocomplete="email"
placeholder={$i18n.t('Enter Your Email')}
required
/>
</div>
<div>
<div class=" text-sm font-medium text-left mb-1">{$i18n.t('Password')}</div>
<input
bind:value={password}
type="password"
class=" px-5 py-3 rounded-2xl w-full text-sm outline-none border dark:border-none dark:bg-gray-900"
placeholder={$i18n.t('Enter Your Password')}
autocomplete="current-password"
required
/>
</div>
</div>
<div class="mt-5">
<button
class=" bg-gray-900 hover:bg-gray-800 w-full rounded-2xl text-white font-medium text-sm py-3 transition"
type="submit"
>
{mode === 'signin' ? $i18n.t('Sign in') : $i18n.t('Create Account')}
</button>
{#if $config?.features.enable_signup}
<div class=" mt-4 text-sm text-center">
{mode === 'signin'
? $i18n.t("Don't have an account?")
: $i18n.t('Already have an account?')}
<button
class=" font-medium underline"
type="button"
on:click={() => {
if (mode === 'signin') {
mode = 'signup';
} else {
mode = 'signin';
}
}}
>
{mode === 'signin' ? $i18n.t('Sign up') : $i18n.t('Sign in')}
</button>
<input
bind:value={password}
type="password"
class=" px-5 py-3 rounded-2xl w-full text-sm outline-none border dark:border-none dark:bg-gray-900"
placeholder={$i18n.t('Enter Your Password')}
autocomplete="current-password"
required
/>
</div>
{/if}
</div>
</div>
{/if}
{#if $config?.features.enable_login_form}
<div class="mt-5">
<button
class=" bg-gray-900 hover:bg-gray-800 w-full rounded-2xl text-white font-medium text-sm py-3 transition"
type="submit"
>
{mode === 'signin' ? $i18n.t('Sign in') : $i18n.t('Create Account')}
</button>
{#if $config?.features.enable_signup}
<div class=" mt-4 text-sm text-center">
{mode === 'signin'
? $i18n.t("Don't have an account?")
: $i18n.t('Already have an account?')}
<button
class=" font-medium underline"
type="button"
on:click={() => {
if (mode === 'signin') {
mode = 'signup';
} else {
mode = 'signin';
}
}}
>
{mode === 'signin' ? $i18n.t('Sign up') : $i18n.t('Sign in')}
</button>
</div>
{/if}
</div>
{/if}
</form>
{#if Object.keys($config?.oauth?.providers ?? {}).length > 0}
<div class="inline-flex items-center justify-center w-full">
<hr class="w-64 h-px my-8 bg-gray-200 border-0 dark:bg-gray-700" />
<span
class="absolute px-3 font-medium text-gray-900 -translate-x-1/2 bg-white left-1/2 dark:text-white dark:bg-gray-950"
>{$i18n.t('or')}</span
>
{#if $config?.features.enable_login_form}
<span
class="absolute px-3 font-medium text-gray-900 -translate-x-1/2 bg-white left-1/2 dark:text-white dark:bg-gray-950"
>{$i18n.t('or')}</span
>
{/if}
</div>
<div class="flex flex-col space-y-2">
{#if $config?.oauth?.providers?.google}